mirror of https://gitee.com/openkylin/linux.git
Merge commit 'origin/master' into next
This commit is contained in:
commit
1e43bee9c7
|
@ -20,15 +20,16 @@ Lots of code taken from ext3 and other projects.
|
|||
Authors in alphabetical order:
|
||||
Joel Becker <joel.becker@oracle.com>
|
||||
Zach Brown <zach.brown@oracle.com>
|
||||
Mark Fasheh <mark.fasheh@oracle.com>
|
||||
Mark Fasheh <mfasheh@suse.com>
|
||||
Kurt Hackel <kurt.hackel@oracle.com>
|
||||
Tao Ma <tao.ma@oracle.com>
|
||||
Sunil Mushran <sunil.mushran@oracle.com>
|
||||
Manish Singh <manish.singh@oracle.com>
|
||||
Tiger Yang <tiger.yang@oracle.com>
|
||||
|
||||
Caveats
|
||||
=======
|
||||
Features which OCFS2 does not support yet:
|
||||
- quotas
|
||||
- Directory change notification (F_NOTIFY)
|
||||
- Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease)
|
||||
|
||||
|
@ -70,7 +71,6 @@ commit=nrsec (*) Ocfs2 can be told to sync all its data and metadata
|
|||
performance.
|
||||
localalloc=8(*) Allows custom localalloc size in MB. If the value is too
|
||||
large, the fs will silently revert it to the default.
|
||||
Localalloc is not enabled for local mounts.
|
||||
localflocks This disables cluster aware flock.
|
||||
inode64 Indicates that Ocfs2 is allowed to create inodes at
|
||||
any location in the filesystem, including those which
|
||||
|
|
|
@ -218,7 +218,7 @@ static void fatal(const char *x, ...)
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int checked_open(const char *pathname, int flags)
|
||||
static int checked_open(const char *pathname, int flags)
|
||||
{
|
||||
int fd = open(pathname, flags);
|
||||
|
||||
|
|
51
MAINTAINERS
51
MAINTAINERS
|
@ -182,7 +182,7 @@ M: Ron Minnich <rminnich@sandia.gov>
|
|||
M: Latchesar Ionkov <lucho@ionkov.net>
|
||||
L: v9fs-developer@lists.sourceforge.net
|
||||
W: http://swik.net/v9fs
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/ericvh/v9fs.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs.git
|
||||
S: Maintained
|
||||
F: Documentation/filesystems/9p.txt
|
||||
F: fs/9p/
|
||||
|
@ -906,7 +906,6 @@ M: Karol Kozimor <sziwan@users.sourceforge.net>
|
|||
L: acpi4asus-user@lists.sourceforge.net
|
||||
W: http://acpi4asus.sf.net
|
||||
S: Maintained
|
||||
F: arch/x86/kernel/acpi/boot.c
|
||||
F: drivers/platform/x86/asus_acpi.c
|
||||
|
||||
ASUS ASB100 HARDWARE MONITOR DRIVER
|
||||
|
@ -1245,11 +1244,10 @@ S: Supported
|
|||
F: drivers/net/tg3.*
|
||||
|
||||
BROCADE BFA FC SCSI DRIVER
|
||||
P: Jing Huang
|
||||
M: huangj@brocade.com
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/scsi/bfa/
|
||||
M: Jing Huang <huangj@brocade.com>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/scsi/bfa/
|
||||
|
||||
BSG (block layer generic sg v4 driver)
|
||||
M: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
|
@ -2825,7 +2823,7 @@ F: drivers/infiniband/hw/ipath/
|
|||
|
||||
IPMI SUBSYSTEM
|
||||
M: Corey Minyard <minyard@acm.org>
|
||||
L: openipmi-developer@lists.sourceforge.net
|
||||
L: openipmi-developer@lists.sourceforge.net (moderated for non-subscribers)
|
||||
W: http://openipmi.sourceforge.net/
|
||||
S: Supported
|
||||
F: Documentation/IPMI.txt
|
||||
|
@ -3086,9 +3084,13 @@ F: kernel/kgdb.c
|
|||
|
||||
KMEMCHECK
|
||||
M: Vegard Nossum <vegardno@ifi.uio.no>
|
||||
P Pekka Enberg
|
||||
M: penberg@cs.helsinki.fi
|
||||
M: Pekka Enberg <penberg@cs.helsinki.fi>
|
||||
S: Maintained
|
||||
F: Documentation/kmemcheck.txt
|
||||
F: arch/x86/include/asm/kmemcheck.h
|
||||
F: arch/x86/mm/kmemcheck/
|
||||
F: include/linux/kmemcheck.h
|
||||
F: mm/kmemcheck.c
|
||||
|
||||
KMEMLEAK
|
||||
M: Catalin Marinas <catalin.marinas@arm.com>
|
||||
|
@ -3618,7 +3620,7 @@ L: netfilter@vger.kernel.org
|
|||
L: coreteam@netfilter.org
|
||||
W: http://www.netfilter.org/
|
||||
W: http://www.iptables.org/
|
||||
T: git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6.git
|
||||
S: Supported
|
||||
F: include/linux/netfilter*
|
||||
F: include/linux/netfilter/
|
||||
|
@ -4330,6 +4332,8 @@ F: drivers/video/aty/aty128fb.c
|
|||
|
||||
RALINK RT2X00 WIRELESS LAN DRIVER
|
||||
P: rt2x00 project
|
||||
M: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
M: Gertjan van Wingerde <gwingerde@gmail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: users@rt2x00.serialmonkey.com (moderated for non-subscribers)
|
||||
W: http://rt2x00.serialmonkey.com/
|
||||
|
@ -4417,7 +4421,7 @@ RFKILL
|
|||
M: Johannes Berg <johannes@sipsolutions.net>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F Documentation/rfkill.txt
|
||||
F: Documentation/rfkill.txt
|
||||
F: net/rfkill/
|
||||
|
||||
RISCOM8 DRIVER
|
||||
|
@ -4637,7 +4641,7 @@ F: drivers/mmc/host/sdhci-s3c.c
|
|||
SECURITY SUBSYSTEM
|
||||
M: James Morris <jmorris@namei.org>
|
||||
L: linux-security-module@vger.kernel.org (suggested Cc:)
|
||||
T: git git://www.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
|
||||
W: http://security.wiki.kernel.org/
|
||||
S: Supported
|
||||
F: security/
|
||||
|
@ -4673,12 +4677,11 @@ F: include/linux/ata.h
|
|||
F: include/linux/libata.h
|
||||
|
||||
SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER
|
||||
P: Jayamohan Kallickal
|
||||
M: jayamohank@serverengines.com
|
||||
L: linux-scsi@vger.kernel.org
|
||||
W: http://www.serverengines.com
|
||||
S: Supported
|
||||
F: drivers/scsi/be2iscsi/
|
||||
M: Jayamohan Kallickal <jayamohank@serverengines.com>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
W: http://www.serverengines.com
|
||||
S: Supported
|
||||
F: drivers/scsi/be2iscsi/
|
||||
|
||||
SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
|
||||
M: Sathya Perla <sathyap@serverengines.com>
|
||||
|
@ -5684,11 +5687,11 @@ F: drivers/vlynq/vlynq.c
|
|||
F: include/linux/vlynq.h
|
||||
|
||||
VMWARE VMXNET3 ETHERNET DRIVER
|
||||
M: Shreyas Bhatewara <sbhatewara@vmware.com>
|
||||
M: VMware, Inc. <pv-drivers@vmware.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/vmxnet3/
|
||||
M: Shreyas Bhatewara <sbhatewara@vmware.com>
|
||||
M: "VMware, Inc." <pv-drivers@vmware.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/vmxnet3/
|
||||
|
||||
VOLTAGE AND CURRENT REGULATOR FRAMEWORK
|
||||
M: Liam Girdwood <lrg@slimlogic.co.uk>
|
||||
|
|
4
Makefile
4
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 32
|
||||
EXTRAVERSION = -rc6
|
||||
EXTRAVERSION = -rc8
|
||||
NAME = Man-Eating Seals of Antiquity
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -221,7 +221,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
|||
|
||||
HOSTCC = gcc
|
||||
HOSTCXX = g++
|
||||
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
|
||||
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
|
||||
HOSTCXXFLAGS = -O2
|
||||
|
||||
# Decide whether to build built-in, modular, or both.
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
const char * prog_name;
|
||||
|
||||
|
||||
void
|
||||
static void
|
||||
usage (void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#define F_GETOWN 6 /* for sockets. */
|
||||
#define F_SETSIG 10 /* for sockets. */
|
||||
#define F_GETSIG 11 /* for sockets. */
|
||||
#define F_SETOWN_EX 12
|
||||
#define F_GETOWN_EX 13
|
||||
|
||||
/* for posix fcntl() and lockf() */
|
||||
#define F_RDLCK 1
|
||||
|
|
|
@ -50,12 +50,12 @@ struct thread_info {
|
|||
register struct thread_info *__current_thread_info __asm__("$8");
|
||||
#define current_thread_info() __current_thread_info
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/* Thread information allocation. */
|
||||
#define THREAD_SIZE_ORDER 1
|
||||
#define THREAD_SIZE (2*PAGE_SIZE)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#define PREEMPT_ACTIVE 0x40000000
|
||||
|
||||
/*
|
||||
|
|
|
@ -55,10 +55,10 @@ CONFIG_BLK_DEV_INITRD=y
|
|||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS is not set
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
|
@ -224,7 +224,7 @@ CONFIG_CPU_CP15_MMU=y
|
|||
#
|
||||
# Processor Features
|
||||
#
|
||||
# CONFIG_ARM_THUMB is not set
|
||||
CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
CONFIG_CPU_DCACHE_WRITETHROUGH=y
|
||||
|
@ -248,7 +248,7 @@ CONFIG_CPU_DCACHE_WRITETHROUGH=y
|
|||
# CONFIG_HIGH_RES_TIMERS is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_AEABI is not set
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
|
@ -299,7 +299,9 @@ CONFIG_BINFMT_ELF=y
|
|||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
CONFIG_PM=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
CONFIG_PM_RUNTIME=y
|
||||
|
||||
#
|
||||
# Networking
|
||||
|
@ -670,7 +672,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
|||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
|
@ -784,6 +786,7 @@ CONFIG_I2C_OMAP=y
|
|||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
|
@ -820,6 +823,7 @@ CONFIG_LEDS_AMS_DELTA=y
|
|||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
|
@ -896,7 +900,13 @@ CONFIG_LOGO_LINUX_CLUT224=y
|
|||
#
|
||||
# Sound
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_OMAP_SOC=y
|
||||
CONFIG_SND_OMAP_SOC_AMS_DELTA=y
|
||||
|
||||
#
|
||||
# HID Devices
|
||||
|
|
|
@ -611,7 +611,7 @@ CONFIG_INPUT_KEYBOARD=y
|
|||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_GPIO is not set
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
|
@ -634,7 +634,8 @@ CONFIG_TOUCHSCREEN_ADS7846=y
|
|||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_TWL4030_PWRBUTTON=y
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
|
@ -834,7 +835,29 @@ CONFIG_DAB=y
|
|||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
# CONFIG_SOUND is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SOUND_OSS_CORE=y
|
||||
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
CONFIG_SND_JACK=y
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_DRIVERS=y
|
||||
CONFIG_SND_USB=y
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_OMAP_SOC=y
|
||||
CONFIG_SND_OMAP_SOC_MCBSP=y
|
||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=y
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=y
|
||||
CONFIG_SND_SOC_TWL4030=y
|
||||
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=y
|
||||
# CONFIG_HID_DEBUG is not set
|
||||
|
@ -1020,7 +1043,13 @@ CONFIG_MMC_BLOCK_BOUNCE=y
|
|||
# CONFIG_MMC_SPI is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_GPIO_PLATFORM=y
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
|
@ -1084,9 +1113,12 @@ CONFIG_RTC_DRV_TWL4030=y
|
|||
# on-CPU RTC drivers
|
||||
#
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
|
@ -1407,3 +1439,10 @@ CONFIG_PLIST=y
|
|||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
|
||||
# added by hand for now
|
||||
CONFIG_KEYBOARD_TWL4030=y
|
||||
CONFIG_USB_OTG_UTILS=y
|
||||
CONFIG_TWL4030_USB=y
|
||||
CONFIG_MMC_OMAP_HS=y
|
||||
|
||||
|
|
|
@ -1703,7 +1703,14 @@ CONFIG_RTC_DRV_TWL4030=y
|
|||
# on-CPU RTC drivers
|
||||
#
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_DEBUG is not set
|
||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_BQ24022 is not set
|
||||
# CONFIG_REGULATOR_MAX1586 is not set
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
# CONFIG_UIO is not set
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
|
|
|
@ -289,13 +289,6 @@ config MACH_NEOCORE926
|
|||
help
|
||||
Select this if you are using the Adeneo Neocore 926 board.
|
||||
|
||||
config MACH_AT91SAM9G20EK_2MMC
|
||||
bool "Atmel AT91SAM9G20-EK Evaluation Kit modified for 2 MMC Slots"
|
||||
depends on ARCH_AT91SAM9G20
|
||||
help
|
||||
Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
|
||||
Rev A or B modified for 2 MMC Slots.
|
||||
|
||||
endif
|
||||
|
||||
# ----------------------------------------------------------
|
||||
|
@ -322,7 +315,16 @@ config MACH_AT91SAM9G20EK
|
|||
bool "Atmel AT91SAM9G20-EK Evaluation Kit"
|
||||
depends on ARCH_AT91SAM9G20
|
||||
help
|
||||
Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit.
|
||||
Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit
|
||||
that embeds only one SD/MMC slot.
|
||||
|
||||
config MACH_AT91SAM9G20EK_2MMC
|
||||
bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots"
|
||||
depends on ARCH_AT91SAM9G20
|
||||
help
|
||||
Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit
|
||||
with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and
|
||||
onwards.
|
||||
|
||||
config MACH_CPU9G20
|
||||
bool "Eukrea CPU9G20 board"
|
||||
|
@ -392,7 +394,7 @@ config MTD_AT91_DATAFLASH_CARD
|
|||
|
||||
config MTD_NAND_ATMEL_BUSWIDTH_16
|
||||
bool "Enable 16-bit data bus interface to NAND flash"
|
||||
depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK)
|
||||
depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9G10EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91SAM9G20EK_2MMC || MACH_AT91SAM9G45EKES || MACH_AT91CAP9ADK)
|
||||
help
|
||||
On AT91SAM926x boards both types of NAND flash can be present
|
||||
(8 and 16 bit data bus width).
|
||||
|
|
|
@ -90,7 +90,7 @@ static struct at91_udc_data __initdata ek_udc_data = {
|
|||
* SPI devices.
|
||||
*/
|
||||
static struct spi_board_info ek_spi_devices[] = {
|
||||
#if !defined(CONFIG_MMC_ATMELMCI)
|
||||
#if !(defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_AT91))
|
||||
{ /* DataFlash chip */
|
||||
.modalias = "mtd_dataflash",
|
||||
.chip_select = 1,
|
||||
|
@ -113,7 +113,7 @@ static struct spi_board_info ek_spi_devices[] = {
|
|||
* MACB Ethernet device
|
||||
*/
|
||||
static struct at91_eth_data __initdata ek_macb_data = {
|
||||
.phy_irq_pin = AT91_PIN_PC12,
|
||||
.phy_irq_pin = AT91_PIN_PB0,
|
||||
.is_rmii = 1,
|
||||
};
|
||||
|
||||
|
@ -194,24 +194,27 @@ static void __init ek_add_device_nand(void)
|
|||
|
||||
/*
|
||||
* MCI (SD/MMC)
|
||||
* det_pin and wp_pin are not connected
|
||||
* wp_pin is not connected
|
||||
*/
|
||||
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
|
||||
static struct mci_platform_data __initdata ek_mmc_data = {
|
||||
.slot[0] = {
|
||||
.bus_width = 4,
|
||||
.detect_pin = -ENODEV,
|
||||
.detect_pin = AT91_PIN_PC2,
|
||||
.wp_pin = -ENODEV,
|
||||
},
|
||||
.slot[1] = {
|
||||
.bus_width = 4,
|
||||
.detect_pin = -ENODEV,
|
||||
.detect_pin = AT91_PIN_PC9,
|
||||
.wp_pin = -ENODEV,
|
||||
},
|
||||
|
||||
};
|
||||
#else
|
||||
static struct amci_platform_data __initdata ek_mmc_data = {
|
||||
static struct at91_mmc_data __initdata ek_mmc_data = {
|
||||
.slot_b = 1, /* Only one slot so use slot B */
|
||||
.wire4 = 1,
|
||||
.det_pin = AT91_PIN_PC9,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -221,13 +224,13 @@ static struct amci_platform_data __initdata ek_mmc_data = {
|
|||
static struct gpio_led ek_leds[] = {
|
||||
{ /* "bottom" led, green, userled1 to be defined */
|
||||
.name = "ds5",
|
||||
.gpio = AT91_PIN_PB12,
|
||||
.gpio = AT91_PIN_PB8,
|
||||
.active_low = 1,
|
||||
.default_trigger = "none",
|
||||
},
|
||||
{ /* "power" led, yellow */
|
||||
.name = "ds1",
|
||||
.gpio = AT91_PIN_PB13,
|
||||
.gpio = AT91_PIN_PB9,
|
||||
.default_trigger = "heartbeat",
|
||||
}
|
||||
};
|
||||
|
@ -254,7 +257,11 @@ static void __init ek_board_init(void)
|
|||
/* Ethernet */
|
||||
at91_add_device_eth(&ek_macb_data);
|
||||
/* MMC */
|
||||
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
|
||||
at91_add_device_mci(0, &ek_mmc_data);
|
||||
#else
|
||||
at91_add_device_mmc(0, &ek_mmc_data);
|
||||
#endif
|
||||
/* I2C */
|
||||
at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
|
||||
/* LEDs */
|
||||
|
|
|
@ -915,6 +915,14 @@ void __init kirkwood_init(void)
|
|||
kirkwood_uart0_data[0].uartclk = kirkwood_tclk;
|
||||
kirkwood_uart1_data[0].uartclk = kirkwood_tclk;
|
||||
|
||||
/*
|
||||
* Disable propagation of mbus errors to the CPU local bus,
|
||||
* as this causes mbus errors (which can occur for example
|
||||
* for PCI aborts) to throw CPU aborts, which we're not set
|
||||
* up to deal with.
|
||||
*/
|
||||
writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG);
|
||||
|
||||
kirkwood_setup_cpu_mbus();
|
||||
|
||||
#ifdef CONFIG_CACHE_FEROCEON_L2
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
|
||||
#include <mach/kirkwood.h>
|
||||
|
||||
#define CPU_CONFIG (BRIDGE_VIRT_BASE | 0x0100)
|
||||
#define CPU_CONFIG_ERROR_PROP 0x00000004
|
||||
|
||||
#define CPU_CONTROL (BRIDGE_VIRT_BASE | 0x0104)
|
||||
#define CPU_RESET 0x00000002
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
#define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM)
|
||||
|
||||
/* PWM */
|
||||
#define GPIO27 PWM3 AF2 MFP_CFG(GPIO27, AF2)
|
||||
#define GPIO27_PWM3_AF2 MFP_CFG(GPIO27, AF2)
|
||||
#define GPIO51_PWM2_OUT MFP_CFG(GPIO51, AF2)
|
||||
#define GPIO117_PWM1_OUT MFP_CFG(GPIO117, AF2)
|
||||
#define GPIO118_PWM2_OUT MFP_CFG(GPIO118, AF2)
|
||||
|
|
|
@ -162,7 +162,7 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
|||
|
||||
/* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
|
||||
gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
|
||||
gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
|
||||
gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
|
||||
|
||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||
|
|
|
@ -134,50 +134,50 @@ static void __init pandora_keys_gpio_init(void)
|
|||
}
|
||||
|
||||
static int board_keymap[] = {
|
||||
/* col, row, code */
|
||||
/* row, col, code */
|
||||
KEY(0, 0, KEY_9),
|
||||
KEY(0, 1, KEY_0),
|
||||
KEY(0, 2, KEY_BACKSPACE),
|
||||
KEY(0, 3, KEY_O),
|
||||
KEY(0, 4, KEY_P),
|
||||
KEY(0, 5, KEY_K),
|
||||
KEY(0, 6, KEY_L),
|
||||
KEY(0, 7, KEY_ENTER),
|
||||
KEY(1, 0, KEY_8),
|
||||
KEY(0, 1, KEY_8),
|
||||
KEY(0, 2, KEY_I),
|
||||
KEY(0, 3, KEY_J),
|
||||
KEY(0, 4, KEY_N),
|
||||
KEY(0, 5, KEY_M),
|
||||
KEY(1, 0, KEY_0),
|
||||
KEY(1, 1, KEY_7),
|
||||
KEY(1, 2, KEY_6),
|
||||
KEY(1, 3, KEY_5),
|
||||
KEY(1, 4, KEY_4),
|
||||
KEY(1, 5, KEY_3),
|
||||
KEY(1, 6, KEY_2),
|
||||
KEY(1, 7, KEY_1),
|
||||
KEY(2, 0, KEY_I),
|
||||
KEY(2, 1, KEY_U),
|
||||
KEY(1, 2, KEY_U),
|
||||
KEY(1, 3, KEY_H),
|
||||
KEY(1, 4, KEY_B),
|
||||
KEY(1, 5, KEY_SPACE),
|
||||
KEY(2, 0, KEY_BACKSPACE),
|
||||
KEY(2, 1, KEY_6),
|
||||
KEY(2, 2, KEY_Y),
|
||||
KEY(2, 3, KEY_T),
|
||||
KEY(2, 4, KEY_R),
|
||||
KEY(2, 5, KEY_E),
|
||||
KEY(2, 6, KEY_W),
|
||||
KEY(2, 7, KEY_Q),
|
||||
KEY(3, 0, KEY_J),
|
||||
KEY(3, 1, KEY_H),
|
||||
KEY(3, 2, KEY_G),
|
||||
KEY(2, 3, KEY_G),
|
||||
KEY(2, 4, KEY_V),
|
||||
KEY(2, 5, KEY_FN),
|
||||
KEY(3, 0, KEY_O),
|
||||
KEY(3, 1, KEY_5),
|
||||
KEY(3, 2, KEY_T),
|
||||
KEY(3, 3, KEY_F),
|
||||
KEY(3, 4, KEY_D),
|
||||
KEY(3, 5, KEY_S),
|
||||
KEY(3, 6, KEY_A),
|
||||
KEY(3, 7, KEY_LEFTSHIFT),
|
||||
KEY(4, 0, KEY_N),
|
||||
KEY(4, 1, KEY_B),
|
||||
KEY(4, 2, KEY_V),
|
||||
KEY(4, 3, KEY_C),
|
||||
KEY(3, 4, KEY_C),
|
||||
KEY(4, 0, KEY_P),
|
||||
KEY(4, 1, KEY_4),
|
||||
KEY(4, 2, KEY_R),
|
||||
KEY(4, 3, KEY_D),
|
||||
KEY(4, 4, KEY_X),
|
||||
KEY(4, 5, KEY_Z),
|
||||
KEY(4, 6, KEY_DOT),
|
||||
KEY(4, 7, KEY_COMMA),
|
||||
KEY(5, 0, KEY_M),
|
||||
KEY(5, 1, KEY_SPACE),
|
||||
KEY(5, 2, KEY_FN),
|
||||
KEY(5, 0, KEY_K),
|
||||
KEY(5, 1, KEY_3),
|
||||
KEY(5, 2, KEY_E),
|
||||
KEY(5, 3, KEY_S),
|
||||
KEY(5, 4, KEY_Z),
|
||||
KEY(6, 0, KEY_L),
|
||||
KEY(6, 1, KEY_2),
|
||||
KEY(6, 2, KEY_W),
|
||||
KEY(6, 3, KEY_A),
|
||||
KEY(6, 4, KEY_DOT),
|
||||
KEY(7, 0, KEY_ENTER),
|
||||
KEY(7, 1, KEY_1),
|
||||
KEY(7, 2, KEY_Q),
|
||||
KEY(7, 3, KEY_LEFTSHIFT),
|
||||
KEY(7, 4, KEY_COMMA),
|
||||
};
|
||||
|
||||
static struct matrix_keymap_data board_map_data = {
|
||||
|
|
|
@ -30,57 +30,56 @@
|
|||
/* Zoom2 has Qwerty keyboard*/
|
||||
static int board_keymap[] = {
|
||||
KEY(0, 0, KEY_E),
|
||||
KEY(1, 0, KEY_R),
|
||||
KEY(2, 0, KEY_T),
|
||||
KEY(3, 0, KEY_HOME),
|
||||
KEY(6, 0, KEY_I),
|
||||
KEY(7, 0, KEY_LEFTSHIFT),
|
||||
KEY(0, 1, KEY_D),
|
||||
KEY(0, 1, KEY_R),
|
||||
KEY(0, 2, KEY_T),
|
||||
KEY(0, 3, KEY_HOME),
|
||||
KEY(0, 6, KEY_I),
|
||||
KEY(0, 7, KEY_LEFTSHIFT),
|
||||
KEY(1, 0, KEY_D),
|
||||
KEY(1, 1, KEY_F),
|
||||
KEY(2, 1, KEY_G),
|
||||
KEY(3, 1, KEY_SEND),
|
||||
KEY(6, 1, KEY_K),
|
||||
KEY(7, 1, KEY_ENTER),
|
||||
KEY(0, 2, KEY_X),
|
||||
KEY(1, 2, KEY_C),
|
||||
KEY(1, 2, KEY_G),
|
||||
KEY(1, 3, KEY_SEND),
|
||||
KEY(1, 6, KEY_K),
|
||||
KEY(1, 7, KEY_ENTER),
|
||||
KEY(2, 0, KEY_X),
|
||||
KEY(2, 1, KEY_C),
|
||||
KEY(2, 2, KEY_V),
|
||||
KEY(3, 2, KEY_END),
|
||||
KEY(6, 2, KEY_DOT),
|
||||
KEY(7, 2, KEY_CAPSLOCK),
|
||||
KEY(0, 3, KEY_Z),
|
||||
KEY(1, 3, KEY_KPPLUS),
|
||||
KEY(2, 3, KEY_B),
|
||||
KEY(2, 3, KEY_END),
|
||||
KEY(2, 6, KEY_DOT),
|
||||
KEY(2, 7, KEY_CAPSLOCK),
|
||||
KEY(3, 0, KEY_Z),
|
||||
KEY(3, 1, KEY_KPPLUS),
|
||||
KEY(3, 2, KEY_B),
|
||||
KEY(3, 3, KEY_F1),
|
||||
KEY(6, 3, KEY_O),
|
||||
KEY(7, 3, KEY_SPACE),
|
||||
KEY(0, 4, KEY_W),
|
||||
KEY(1, 4, KEY_Y),
|
||||
KEY(2, 4, KEY_U),
|
||||
KEY(3, 4, KEY_F2),
|
||||
KEY(3, 6, KEY_O),
|
||||
KEY(3, 7, KEY_SPACE),
|
||||
KEY(4, 0, KEY_W),
|
||||
KEY(4, 1, KEY_Y),
|
||||
KEY(4, 2, KEY_U),
|
||||
KEY(4, 3, KEY_F2),
|
||||
KEY(4, 4, KEY_VOLUMEUP),
|
||||
KEY(6, 4, KEY_L),
|
||||
KEY(7, 4, KEY_LEFT),
|
||||
KEY(0, 5, KEY_S),
|
||||
KEY(1, 5, KEY_H),
|
||||
KEY(2, 5, KEY_J),
|
||||
KEY(3, 5, KEY_F3),
|
||||
KEY(4, 6, KEY_L),
|
||||
KEY(4, 7, KEY_LEFT),
|
||||
KEY(5, 0, KEY_S),
|
||||
KEY(5, 1, KEY_H),
|
||||
KEY(5, 2, KEY_J),
|
||||
KEY(5, 3, KEY_F3),
|
||||
KEY(5, 5, KEY_VOLUMEDOWN),
|
||||
KEY(6, 5, KEY_M),
|
||||
KEY(4, 5, KEY_ENTER),
|
||||
KEY(7, 5, KEY_RIGHT),
|
||||
KEY(0, 6, KEY_Q),
|
||||
KEY(1, 6, KEY_A),
|
||||
KEY(2, 6, KEY_N),
|
||||
KEY(3, 6, KEY_BACKSPACE),
|
||||
KEY(5, 6, KEY_M),
|
||||
KEY(5, 7, KEY_ENTER),
|
||||
KEY(6, 0, KEY_Q),
|
||||
KEY(6, 1, KEY_A),
|
||||
KEY(6, 2, KEY_N),
|
||||
KEY(6, 3, KEY_BACKSPACE),
|
||||
KEY(6, 6, KEY_P),
|
||||
KEY(7, 6, KEY_UP),
|
||||
KEY(6, 7, KEY_SELECT),
|
||||
KEY(7, 7, KEY_DOWN),
|
||||
KEY(0, 7, KEY_PROG1), /*MACRO 1 <User defined> */
|
||||
KEY(1, 7, KEY_PROG2), /*MACRO 2 <User defined> */
|
||||
KEY(2, 7, KEY_PROG3), /*MACRO 3 <User defined> */
|
||||
KEY(3, 7, KEY_PROG4), /*MACRO 4 <User defined> */
|
||||
0
|
||||
KEY(7, 0, KEY_PROG1), /*MACRO 1 <User defined> */
|
||||
KEY(7, 1, KEY_PROG2), /*MACRO 2 <User defined> */
|
||||
KEY(7, 2, KEY_PROG3), /*MACRO 3 <User defined> */
|
||||
KEY(7, 3, KEY_PROG4), /*MACRO 4 <User defined> */
|
||||
KEY(7, 5, KEY_RIGHT),
|
||||
KEY(7, 6, KEY_UP),
|
||||
KEY(7, 7, KEY_DOWN)
|
||||
};
|
||||
|
||||
static struct matrix_keymap_data board_map_data = {
|
||||
|
|
|
@ -473,7 +473,7 @@ static u16 _omap3_dpll_compute_freqsel(struct clk *clk, u8 n)
|
|||
unsigned long fint;
|
||||
u16 f = 0;
|
||||
|
||||
fint = clk->dpll_data->clk_ref->rate / (n + 1);
|
||||
fint = clk->dpll_data->clk_ref->rate / n;
|
||||
|
||||
pr_debug("clock: fint is %lu\n", fint);
|
||||
|
||||
|
|
|
@ -489,9 +489,9 @@ static struct clk core_ck = {
|
|||
static struct clk dpll3_m2x2_ck = {
|
||||
.name = "dpll3_m2x2_ck",
|
||||
.ops = &clkops_null,
|
||||
.parent = &dpll3_x2_ck,
|
||||
.parent = &dpll3_m2_ck,
|
||||
.clkdm_name = "dpll3_clkdm",
|
||||
.recalc = &followparent_recalc,
|
||||
.recalc = &omap3_clkoutx2_recalc,
|
||||
};
|
||||
|
||||
/* The PWRDN bit is apparently only available on 3430ES2 and above */
|
||||
|
|
|
@ -366,7 +366,7 @@ int gpmc_cs_request(int cs, unsigned long size, unsigned long *base)
|
|||
if (r < 0)
|
||||
goto out;
|
||||
|
||||
gpmc_cs_enable_mem(cs, res->start, res->end - res->start + 1);
|
||||
gpmc_cs_enable_mem(cs, res->start, resource_size(res));
|
||||
*base = res->start;
|
||||
gpmc_cs_set_reserved(cs, 1);
|
||||
out:
|
||||
|
@ -378,7 +378,7 @@ EXPORT_SYMBOL(gpmc_cs_request);
|
|||
void gpmc_cs_free(int cs)
|
||||
{
|
||||
spin_lock(&gpmc_mem_lock);
|
||||
if (cs >= GPMC_CS_NUM || !gpmc_cs_reserved(cs)) {
|
||||
if (cs >= GPMC_CS_NUM || cs < 0 || !gpmc_cs_reserved(cs)) {
|
||||
printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs);
|
||||
BUG();
|
||||
spin_unlock(&gpmc_mem_lock);
|
||||
|
|
|
@ -300,7 +300,7 @@ static int __devinit omap2_mbox_probe(struct platform_device *pdev)
|
|||
dev_err(&pdev->dev, "invalid mem resource\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
mbox_base = ioremap(res->start, res->end - res->start);
|
||||
mbox_base = ioremap(res->start, resource_size(res));
|
||||
if (!mbox_base)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <mach/colibri.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/audio.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
@ -145,7 +146,8 @@ static void __init colibri_pxa320_init_lcd(void)
|
|||
static inline void colibri_pxa320_init_lcd(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(SND_AC97_CODEC) || defined(SND_AC97_CODEC_MODULE)
|
||||
#if defined(CONFIG_SND_AC97_CODEC) || \
|
||||
defined(CONFIG_SND_AC97_CODEC_MODULE)
|
||||
static mfp_cfg_t colibri_pxa320_ac97_pin_config[] __initdata = {
|
||||
GPIO34_AC97_SYSCLK,
|
||||
GPIO35_AC97_SDATA_IN_0,
|
||||
|
|
|
@ -604,7 +604,7 @@ static struct platform_device gpio_vbus = {
|
|||
static const struct ads7846_platform_data tsc2046_info = {
|
||||
.model = 7846,
|
||||
.vref_delay_usecs = 100,
|
||||
.pressure_max = 512,
|
||||
.pressure_max = 1024,
|
||||
.debounce_max = 10,
|
||||
.debounce_tol = 3,
|
||||
.debounce_rep = 1,
|
||||
|
|
|
@ -46,5 +46,6 @@
|
|||
beq 1001f
|
||||
bic \irqstat, \irqstat, #0x80000000
|
||||
mov \irqnr, \irqstat, lsr #16
|
||||
add \irqnr, \irqnr, #(PXA_IRQ(0))
|
||||
1001:
|
||||
.endm
|
||||
|
|
|
@ -408,7 +408,7 @@ static struct platform_device keypad_device = {
|
|||
};
|
||||
|
||||
static struct platform_device rtc_device = {
|
||||
.name = "rtc0",
|
||||
.name = "rtc-coh901331",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(rtc_resources),
|
||||
.resource = rtc_resources,
|
||||
|
|
|
@ -127,7 +127,7 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
|
|||
}
|
||||
|
||||
/* FIXME: what's the actual transition time? */
|
||||
policy->cpuinfo.transition_latency = 10 * 1000 * 1000;
|
||||
policy->cpuinfo.transition_latency = 300 * 1000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -691,13 +691,16 @@ static inline void disable_lnk(int lch)
|
|||
static inline void omap2_enable_irq_lch(int lch)
|
||||
{
|
||||
u32 val;
|
||||
unsigned long flags;
|
||||
|
||||
if (!cpu_class_is_omap2())
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&dma_chan_lock, flags);
|
||||
val = dma_read(IRQENABLE_L0);
|
||||
val |= 1 << lch;
|
||||
dma_write(val, IRQENABLE_L0);
|
||||
spin_unlock_irqrestore(&dma_chan_lock, flags);
|
||||
}
|
||||
|
||||
int omap_request_dma(int dev_id, const char *dev_name,
|
||||
|
@ -799,10 +802,13 @@ void omap_free_dma(int lch)
|
|||
|
||||
if (cpu_class_is_omap2()) {
|
||||
u32 val;
|
||||
|
||||
spin_lock_irqsave(&dma_chan_lock, flags);
|
||||
/* Disable interrupts */
|
||||
val = dma_read(IRQENABLE_L0);
|
||||
val &= ~(1 << lch);
|
||||
dma_write(val, IRQENABLE_L0);
|
||||
spin_unlock_irqrestore(&dma_chan_lock, flags);
|
||||
|
||||
/* Clear the CSR register and IRQ status register */
|
||||
dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(lch));
|
||||
|
@ -1108,6 +1114,14 @@ int omap_dma_running(void)
|
|||
{
|
||||
int lch;
|
||||
|
||||
/*
|
||||
* On OMAP1510, internal LCD controller will start the transfer
|
||||
* when it gets enabled, so assume DMA running if LCD enabled.
|
||||
*/
|
||||
if (cpu_is_omap1510())
|
||||
if (omap_readw(0xfffec000 + 0x00) & (1 << 0))
|
||||
return 1;
|
||||
|
||||
/* Check if LCD DMA is running */
|
||||
if (cpu_is_omap16xx())
|
||||
if (omap_readw(OMAP1610_DMA_LCD_CCR) & OMAP_DMA_CCR_EN)
|
||||
|
|
|
@ -373,7 +373,7 @@ static inline int gpio_valid(int gpio)
|
|||
|
||||
static int check_gpio(int gpio)
|
||||
{
|
||||
if (unlikely(gpio_valid(gpio)) < 0) {
|
||||
if (unlikely(gpio_valid(gpio) < 0)) {
|
||||
printk(KERN_ERR "omap-gpio: invalid GPIO %d\n", gpio);
|
||||
dump_stack();
|
||||
return -1;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#ifndef __ASM_PLAT_MFP_H
|
||||
#define __ASM_PLAT_MFP_H
|
||||
|
||||
#define mfp_to_gpio(m) ((m) % 128)
|
||||
#define mfp_to_gpio(m) ((m) % 256)
|
||||
|
||||
/* list of all the configurable MFP pins */
|
||||
enum {
|
||||
|
|
|
@ -207,7 +207,7 @@ unsigned long mfp_read(int mfp)
|
|||
{
|
||||
unsigned long val, flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
BUG_ON(mfp < 0 || mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
val = mfpr_readl(mfp_table[mfp].mfpr_off);
|
||||
|
@ -220,7 +220,7 @@ void mfp_write(int mfp, unsigned long val)
|
|||
{
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON(mfp >= MFP_PIN_MAX);
|
||||
BUG_ON(mfp < 0 || mfp >= MFP_PIN_MAX);
|
||||
|
||||
spin_lock_irqsave(&mfp_spin_lock, flags);
|
||||
mfpr_writel(mfp_table[mfp].mfpr_off, val);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
config MIPS
|
||||
bool
|
||||
default y
|
||||
select HAVE_GENERIC_DMA_COHERENT
|
||||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_ARCH_KGDB
|
||||
|
|
|
@ -100,7 +100,7 @@ static __init void prom_init_console(void)
|
|||
|
||||
static __init void prom_init_cmdline(void)
|
||||
{
|
||||
char buf[CL_SIZE];
|
||||
static char buf[CL_SIZE] __initdata;
|
||||
|
||||
/* Get the kernel command line from CFE */
|
||||
if (cfe_getenv("LINUX_CMDLINE", buf, CL_SIZE) >= 0) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.29-rc7
|
||||
# Wed Mar 4 23:08:06 2009
|
||||
# Linux kernel version: 2.6.32-rc6
|
||||
# Sun Nov 8 22:59:47 2009
|
||||
#
|
||||
CONFIG_MIPS=y
|
||||
|
||||
|
@ -9,16 +9,18 @@ CONFIG_MIPS=y
|
|||
# Machine selection
|
||||
#
|
||||
# CONFIG_MACH_ALCHEMY is not set
|
||||
# CONFIG_AR7 is not set
|
||||
# CONFIG_BASLER_EXCITE is not set
|
||||
# CONFIG_BCM47XX is not set
|
||||
# CONFIG_BCM63XX is not set
|
||||
# CONFIG_MIPS_COBALT is not set
|
||||
# CONFIG_MACH_DECSTATION is not set
|
||||
# CONFIG_MACH_JAZZ is not set
|
||||
# CONFIG_LASAT is not set
|
||||
# CONFIG_LEMOTE_FULONG is not set
|
||||
# CONFIG_MACH_LOONGSON is not set
|
||||
# CONFIG_MIPS_MALTA is not set
|
||||
# CONFIG_MIPS_SIM is not set
|
||||
# CONFIG_MACH_EMMA is not set
|
||||
# CONFIG_NEC_MARKEINS is not set
|
||||
# CONFIG_MACH_VR41XX is not set
|
||||
# CONFIG_NXP_STB220 is not set
|
||||
# CONFIG_NXP_STB225 is not set
|
||||
|
@ -45,6 +47,7 @@ CONFIG_MACH_TX49XX=y
|
|||
# CONFIG_WR_PPMC is not set
|
||||
# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
|
||||
# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
|
||||
# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
|
||||
CONFIG_MACH_TXX9=y
|
||||
CONFIG_TOSHIBA_RBTX4927=y
|
||||
CONFIG_TOSHIBA_RBTX4938=y
|
||||
|
@ -86,7 +89,6 @@ CONFIG_DMA_NONCOHERENT=y
|
|||
CONFIG_DMA_NEED_PCI_MAP_STATE=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_SYS_HAS_EARLY_PRINTK=y
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
# CONFIG_NO_IOPORT is not set
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_CPU_BIG_ENDIAN=y
|
||||
|
@ -101,7 +103,7 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
|
|||
#
|
||||
# CPU selection
|
||||
#
|
||||
# CONFIG_CPU_LOONGSON2 is not set
|
||||
# CONFIG_CPU_LOONGSON2E is not set
|
||||
# CONFIG_CPU_MIPS32_R1 is not set
|
||||
# CONFIG_CPU_MIPS32_R2 is not set
|
||||
# CONFIG_CPU_MIPS64_R1 is not set
|
||||
|
@ -137,6 +139,7 @@ CONFIG_32BIT=y
|
|||
CONFIG_PAGE_SIZE_4KB=y
|
||||
# CONFIG_PAGE_SIZE_8KB is not set
|
||||
# CONFIG_PAGE_SIZE_16KB is not set
|
||||
# CONFIG_PAGE_SIZE_32KB is not set
|
||||
# CONFIG_PAGE_SIZE_64KB is not set
|
||||
CONFIG_CPU_HAS_PREFETCH=y
|
||||
CONFIG_MIPS_MT_DISABLED=y
|
||||
|
@ -154,7 +157,10 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
|
|||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=0
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
# CONFIG_KSM is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
CONFIG_TICK_ONESHOT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
@ -175,6 +181,7 @@ CONFIG_PREEMPT_NONE=y
|
|||
CONFIG_LOCKDEP_SUPPORT=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
CONFIG_CONSTRUCTORS=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -194,11 +201,12 @@ CONFIG_SYSVIPC_SYSCTL=y
|
|||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
|
@ -209,8 +217,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y
|
|||
# CONFIG_NAMESPACES is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_RD_GZIP=y
|
||||
# CONFIG_RD_BZIP2 is not set
|
||||
# CONFIG_RD_LZMA is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
|
@ -220,25 +232,35 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_PCSPKR_PLATFORM is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
# CONFIG_FUTEX is not set
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_FUTEX=y
|
||||
# CONFIG_EPOLL is not set
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_PCI_QUIRKS=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_SLUB is not set
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||
|
||||
#
|
||||
# GCOV-based kernel profiling
|
||||
#
|
||||
# CONFIG_GCOV_KERNEL is not set
|
||||
# CONFIG_SLOW_WORK is not set
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
|
@ -246,8 +268,8 @@ CONFIG_MODULE_UNLOAD=y
|
|||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
# CONFIG_LBDAF is not set
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
#
|
||||
|
@ -274,6 +296,7 @@ CONFIG_PCI_DOMAINS=y
|
|||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
# CONFIG_PCI_LEGACY is not set
|
||||
# CONFIG_PCI_STUB is not set
|
||||
# CONFIG_PCI_IOV is not set
|
||||
CONFIG_MMU=y
|
||||
|
||||
#
|
||||
|
@ -288,6 +311,7 @@ CONFIG_TRAD_SIGNALS=y
|
|||
#
|
||||
# Power management options
|
||||
#
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# CONFIG_PM is not set
|
||||
CONFIG_NET=y
|
||||
|
@ -295,7 +319,6 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
|
@ -311,6 +334,7 @@ CONFIG_IP_PNP=y
|
|||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
|
@ -336,6 +360,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
|
@ -347,7 +372,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
|
|||
# CONFIG_CAN is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_WIRELESS is not set
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL is not set
|
||||
|
@ -365,9 +389,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_CONNECTOR is not set
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_AR7_PARTS is not set
|
||||
|
@ -376,9 +400,9 @@ CONFIG_MTD_CMDLINE_PARTS=y
|
|||
# User Modules And Translation Layers
|
||||
#
|
||||
CONFIG_MTD_CHAR=y
|
||||
# CONFIG_MTD_BLKDEVS is not set
|
||||
# CONFIG_MTD_BLOCK is not set
|
||||
# CONFIG_MTD_BLOCK_RO is not set
|
||||
CONFIG_MTD_BLKDEVS=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_BLOCK_RO=m
|
||||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
|
@ -414,16 +438,20 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
#
|
||||
# Mapping drivers for chip access
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
# CONFIG_MTD_PCI is not set
|
||||
# CONFIG_MTD_GPIO_ADDR is not set
|
||||
# CONFIG_MTD_INTEL_VR_NOR is not set
|
||||
CONFIG_MTD_RBTX4939=y
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
#
|
||||
# CONFIG_MTD_PMC551 is not set
|
||||
# CONFIG_MTD_SST25L is not set
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
|
@ -435,7 +463,15 @@ CONFIG_MTD_PHYSMAP=y
|
|||
# CONFIG_MTD_DOC2000 is not set
|
||||
# CONFIG_MTD_DOC2001 is not set
|
||||
# CONFIG_MTD_DOC2001PLUS is not set
|
||||
# CONFIG_MTD_NAND is not set
|
||||
CONFIG_MTD_NAND=m
|
||||
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
|
||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
|
||||
CONFIG_MTD_NAND_IDS=m
|
||||
# CONFIG_MTD_NAND_CAFE is not set
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
# CONFIG_MTD_NAND_PLATFORM is not set
|
||||
CONFIG_MTD_NAND_TXX9NDFMC=m
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
|
@ -471,6 +507,7 @@ CONFIG_IDE=y
|
|||
#
|
||||
# Please see Documentation/ide/ide.txt for help/info on IDE drives
|
||||
#
|
||||
CONFIG_IDE_XFER_MODE=y
|
||||
CONFIG_IDE_TIMINGS=y
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
CONFIG_IDE_GD=y
|
||||
|
@ -534,8 +571,13 @@ CONFIG_BLK_DEV_IDEDMA=y
|
|||
#
|
||||
|
||||
#
|
||||
# A new alternative FireWire stack is available with EXPERIMENTAL=y
|
||||
# You can enable one or both FireWire driver stacks.
|
||||
#
|
||||
|
||||
#
|
||||
# See the help texts for more information.
|
||||
#
|
||||
# CONFIG_FIREWIRE is not set
|
||||
# CONFIG_IEEE1394 is not set
|
||||
# CONFIG_I2O is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
|
@ -574,6 +616,8 @@ CONFIG_MII=y
|
|||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_DNET is not set
|
||||
# CONFIG_NET_TULIP is not set
|
||||
# CONFIG_HP100 is not set
|
||||
CONFIG_NE2000=y
|
||||
|
@ -602,18 +646,15 @@ CONFIG_TC35815=y
|
|||
# CONFIG_SMSC9420 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_TLAN is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
# CONFIG_KS8851 is not set
|
||||
# CONFIG_KS8851_MLL is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_ATL2 is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
# CONFIG_TR is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
# CONFIG_WLAN is not set
|
||||
|
||||
#
|
||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||
|
@ -653,6 +694,7 @@ CONFIG_DEVKMEM=y
|
|||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_MAX3100 is not set
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_SERIAL_TXX9=y
|
||||
|
@ -666,7 +708,9 @@ CONFIG_UNIX98_PTYS=y
|
|||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_HW_RANDOM=m
|
||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||
CONFIG_HW_RANDOM_TX4939=m
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -686,6 +730,10 @@ CONFIG_SPI_TXX9=y
|
|||
# SPI Protocol Masters
|
||||
#
|
||||
# CONFIG_SPI_TLE62X0 is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
#
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
|
||||
|
@ -701,17 +749,22 @@ CONFIG_GPIOLIB=y
|
|||
# PCI GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_BT8XX is not set
|
||||
# CONFIG_GPIO_LANGWELL is not set
|
||||
|
||||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX7301 is not set
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
# CONFIG_GPIO_MC33880 is not set
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||
|
||||
|
@ -740,28 +793,17 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_UCB1400_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_MC13783 is not set
|
||||
# CONFIG_EZX_PCAP is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_VGA_ARB is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
|
@ -772,7 +814,42 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# Display device support
|
||||
#
|
||||
# CONFIG_DISPLAY_SUPPORT is not set
|
||||
# CONFIG_SOUND is not set
|
||||
CONFIG_SOUND=m
|
||||
# CONFIG_SOUND_OSS_CORE is not set
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_TIMER=m
|
||||
CONFIG_SND_PCM=m
|
||||
# CONFIG_SND_SEQUENCER is not set
|
||||
# CONFIG_SND_MIXER_OSS is not set
|
||||
# CONFIG_SND_PCM_OSS is not set
|
||||
# CONFIG_SND_HRTIMER is not set
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
CONFIG_SND_VMASTER=y
|
||||
# CONFIG_SND_RAWMIDI_SEQ is not set
|
||||
# CONFIG_SND_OPL3_LIB_SEQ is not set
|
||||
# CONFIG_SND_OPL4_LIB_SEQ is not set
|
||||
# CONFIG_SND_SBAWE_SEQ is not set
|
||||
# CONFIG_SND_EMU10K1_SEQ is not set
|
||||
CONFIG_SND_AC97_CODEC=m
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
# CONFIG_SND_PCI is not set
|
||||
# CONFIG_SND_SPI is not set
|
||||
# CONFIG_SND_MIPS is not set
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_AC97_BUS=y
|
||||
CONFIG_SND_SOC_TXX9ACLC=m
|
||||
CONFIG_HAS_TXX9_ACLC=y
|
||||
CONFIG_SND_SOC_TXX9ACLC_AC97=m
|
||||
CONFIG_SND_SOC_TXX9ACLC_GENERIC=m
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=m
|
||||
# CONFIG_SND_SOC_ALL_CODECS is not set
|
||||
CONFIG_SND_SOC_AC97_CODEC=m
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_AC97_BUS=m
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
|
@ -783,6 +860,8 @@ CONFIG_LEDS_CLASS=y
|
|||
# LED drivers
|
||||
#
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_GPIO_PLATFORM=y
|
||||
# CONFIG_LEDS_DAC124S085 is not set
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
|
@ -792,7 +871,12 @@ CONFIG_LEDS_TRIGGERS=y
|
|||
CONFIG_LEDS_TRIGGER_IDE_DISK=y
|
||||
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
|
||||
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
|
||||
# CONFIG_LEDS_TRIGGER_GPIO is not set
|
||||
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
|
||||
|
||||
#
|
||||
# iptables trigger is under Netfilter config (LED target)
|
||||
#
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_INFINIBAND is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
|
@ -820,6 +904,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y
|
|||
# CONFIG_RTC_DRV_R9701 is not set
|
||||
CONFIG_RTC_DRV_RS5C348=y
|
||||
# CONFIG_RTC_DRV_DS3234 is not set
|
||||
# CONFIG_RTC_DRV_PCF2123 is not set
|
||||
|
||||
#
|
||||
# Platform RTC drivers
|
||||
|
@ -840,8 +925,26 @@ CONFIG_RTC_DRV_DS1742=y
|
|||
# on-CPU RTC drivers
|
||||
#
|
||||
CONFIG_RTC_DRV_TX4939=y
|
||||
# CONFIG_DMADEVICES is not set
|
||||
CONFIG_DMADEVICES=y
|
||||
|
||||
#
|
||||
# DMA Devices
|
||||
#
|
||||
CONFIG_TXX9_DMAC=m
|
||||
CONFIG_DMA_ENGINE=y
|
||||
|
||||
#
|
||||
# DMA Clients
|
||||
#
|
||||
# CONFIG_NET_DMA is not set
|
||||
# CONFIG_ASYNC_TX_DMA is not set
|
||||
# CONFIG_DMATEST is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
|
@ -853,9 +956,10 @@ CONFIG_RTC_DRV_TX4939=y
|
|||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FILE_LOCKING=y
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
|
@ -865,6 +969,10 @@ CONFIG_INOTIFY_USER=y
|
|||
# CONFIG_FUSE_FS is not set
|
||||
CONFIG_GENERIC_ACL=y
|
||||
|
||||
#
|
||||
# Caches
|
||||
#
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
|
@ -890,7 +998,27 @@ CONFIG_TMPFS=y
|
|||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
CONFIG_JFFS2_FS=m
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
# CONFIG_JFFS2_LZO is not set
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_OMFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
|
@ -922,6 +1050,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
|
|||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
CONFIG_STRIP_ASM_SYMS=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
|
@ -929,11 +1058,9 @@ CONFIG_DEBUG_FS=y
|
|||
# CONFIG_DEBUG_MEMORY_INIT is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
# CONFIG_FTRACE is not set
|
||||
# CONFIG_DYNAMIC_DEBUG is not set
|
||||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
CONFIG_CMDLINE=""
|
||||
|
@ -946,6 +1073,7 @@ CONFIG_CMDLINE=""
|
|||
# CONFIG_SECURITYFS is not set
|
||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||
# CONFIG_CRYPTO is not set
|
||||
# CONFIG_BINARY_PRINTF is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
|
@ -959,6 +1087,10 @@ CONFIG_GENERIC_FIND_LAST_BIT=y
|
|||
CONFIG_CRC32=y
|
||||
# CONFIG_CRC7 is not set
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_NLATTR=y
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <asm/scatterlist.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm-generic/dma-coherent.h>
|
||||
|
||||
void *dma_alloc_noncoherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag);
|
||||
|
@ -73,14 +74,4 @@ extern int dma_is_consistent(struct device *dev, dma_addr_t dma_addr);
|
|||
extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
||||
enum dma_data_direction direction);
|
||||
|
||||
#if 0
|
||||
#define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY
|
||||
|
||||
extern int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
|
||||
dma_addr_t device_addr, size_t size, int flags);
|
||||
extern void dma_release_declared_memory(struct device *dev);
|
||||
extern void * dma_mark_declared_memory_occupied(struct device *dev,
|
||||
dma_addr_t device_addr, size_t size);
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_DMA_MAPPING_H */
|
||||
|
|
|
@ -173,11 +173,12 @@ void smtc_distribute_timer(int vpe)
|
|||
unsigned int mtflags;
|
||||
int cpu;
|
||||
struct clock_event_device *cd;
|
||||
unsigned long nextstamp = 0L;
|
||||
unsigned long nextstamp;
|
||||
unsigned long reference;
|
||||
|
||||
|
||||
repeat:
|
||||
nextstamp = 0L;
|
||||
for_each_online_cpu(cpu) {
|
||||
/*
|
||||
* Find virtual CPUs within the current VPE who have
|
||||
|
|
|
@ -163,33 +163,34 @@ static int isBranchInstr(mips_instruction * i)
|
|||
|
||||
/*
|
||||
* In the Linux kernel, we support selection of FPR format on the
|
||||
* basis of the Status.FR bit. This does imply that, if a full 32
|
||||
* FPRs are desired, there needs to be a flip-flop that can be written
|
||||
* to one at that bit position. In any case, O32 MIPS ABI uses
|
||||
* only the even FPRs (Status.FR = 0).
|
||||
* basis of the Status.FR bit. If an FPU is not present, the FR bit
|
||||
* is hardwired to zero, which would imply a 32-bit FPU even for
|
||||
* 64-bit CPUs. For 64-bit kernels with no FPU we use TIF_32BIT_REGS
|
||||
* as a proxy for the FR bit so that a 64-bit FPU is emulated. In any
|
||||
* case, for a 32-bit kernel which uses the O32 MIPS ABI, only the
|
||||
* even FPRs are used (Status.FR = 0).
|
||||
*/
|
||||
|
||||
#define CP0_STATUS_FR_SUPPORT
|
||||
|
||||
#ifdef CP0_STATUS_FR_SUPPORT
|
||||
#define FR_BIT ST0_FR
|
||||
static inline int cop1_64bit(struct pt_regs *xcp)
|
||||
{
|
||||
if (cpu_has_fpu)
|
||||
return xcp->cp0_status & ST0_FR;
|
||||
#ifdef CONFIG_64BIT
|
||||
return !test_thread_flag(TIF_32BIT_REGS);
|
||||
#else
|
||||
#define FR_BIT 0
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define SIFROMREG(si, x) ((si) = \
|
||||
(xcp->cp0_status & FR_BIT) || !(x & 1) ? \
|
||||
(int)ctx->fpr[x] : \
|
||||
(int)(ctx->fpr[x & ~1] >> 32 ))
|
||||
#define SITOREG(si, x) (ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] = \
|
||||
(xcp->cp0_status & FR_BIT) || !(x & 1) ? \
|
||||
#define SIFROMREG(si, x) ((si) = cop1_64bit(xcp) || !(x & 1) ? \
|
||||
(int)ctx->fpr[x] : (int)(ctx->fpr[x & ~1] >> 32))
|
||||
|
||||
#define SITOREG(si, x) (ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = \
|
||||
cop1_64bit(xcp) || !(x & 1) ? \
|
||||
ctx->fpr[x & ~1] >> 32 << 32 | (u32)(si) : \
|
||||
ctx->fpr[x & ~1] << 32 >> 32 | (u64)(si) << 32)
|
||||
|
||||
#define DIFROMREG(di, x) ((di) = \
|
||||
ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)])
|
||||
#define DITOREG(di, x) (ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] \
|
||||
= (di))
|
||||
#define DIFROMREG(di, x) ((di) = ctx->fpr[x & ~(cop1_64bit(xcp) == 0)])
|
||||
#define DITOREG(di, x) (ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = (di))
|
||||
|
||||
#define SPFROMREG(sp, x) SIFROMREG((sp).bits, x)
|
||||
#define SPTOREG(sp, x) SITOREG((sp).bits, x)
|
||||
|
|
|
@ -90,6 +90,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
|
|||
{
|
||||
void *ret;
|
||||
|
||||
if (dma_alloc_from_coherent(dev, size, dma_handle, &ret))
|
||||
return ret;
|
||||
|
||||
gfp = massage_gfp_flags(dev, gfp);
|
||||
|
||||
ret = (void *) __get_free_pages(gfp, get_order(size));
|
||||
|
@ -122,6 +125,10 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
|
|||
dma_addr_t dma_handle)
|
||||
{
|
||||
unsigned long addr = (unsigned long) vaddr;
|
||||
int order = get_order(size);
|
||||
|
||||
if (dma_release_from_coherent(dev, order, vaddr))
|
||||
return;
|
||||
|
||||
plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
|
||||
|
||||
|
|
|
@ -54,7 +54,8 @@ static struct prom_pmemblock * __init prom_getmdesc(void)
|
|||
{
|
||||
char *memsize_str;
|
||||
unsigned int memsize;
|
||||
char cmdline[CL_SIZE], *ptr;
|
||||
char *ptr;
|
||||
static char cmdline[CL_SIZE] __initdata;
|
||||
|
||||
/* otherwise look in the environment */
|
||||
memsize_str = prom_getenv("memsize");
|
||||
|
|
|
@ -69,7 +69,7 @@ static inline unsigned long tag2ul(char *arg, const char *tag)
|
|||
|
||||
void __init prom_setup_cmdline(void)
|
||||
{
|
||||
char cmd_line[CL_SIZE];
|
||||
static char cmd_line[CL_SIZE] __initdata;
|
||||
char *cp, *board;
|
||||
int prom_argc;
|
||||
char **prom_argv, **prom_envp;
|
||||
|
|
|
@ -160,7 +160,7 @@ static void __init prom_init_cmdline(void)
|
|||
int argc;
|
||||
int *argv32;
|
||||
int i; /* Always ignore the "-c" at argv[0] */
|
||||
char builtin[CL_SIZE];
|
||||
static char builtin[CL_SIZE] __initdata;
|
||||
|
||||
if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) {
|
||||
/*
|
||||
|
@ -315,7 +315,7 @@ static inline void txx9_cache_fixup(void)
|
|||
|
||||
static void __init preprocess_cmdline(void)
|
||||
{
|
||||
char cmdline[CL_SIZE];
|
||||
static char cmdline[CL_SIZE] __initdata;
|
||||
char *s;
|
||||
|
||||
strcpy(cmdline, arcs_cmdline);
|
||||
|
|
|
@ -28,8 +28,6 @@
|
|||
#define F_SETOWN 12 /* for sockets. */
|
||||
#define F_SETSIG 13 /* for sockets. */
|
||||
#define F_GETSIG 14 /* for sockets. */
|
||||
#define F_GETOWN_EX 15
|
||||
#define F_SETOWN_EX 16
|
||||
|
||||
/* for posix fcntl() and lockf() */
|
||||
#define F_RDLCK 01
|
||||
|
|
|
@ -58,7 +58,7 @@ static int check_elf64(void *p, int size, struct addr_range *r)
|
|||
|
||||
return 64;
|
||||
}
|
||||
void get4k(FILE *file, char *buf )
|
||||
static void get4k(FILE *file, char *buf )
|
||||
{
|
||||
unsigned j;
|
||||
unsigned num = fread(buf, 1, 4096, file);
|
||||
|
@ -66,12 +66,12 @@ void get4k(FILE *file, char *buf )
|
|||
buf[j] = 0;
|
||||
}
|
||||
|
||||
void put4k(FILE *file, char *buf )
|
||||
static void put4k(FILE *file, char *buf )
|
||||
{
|
||||
fwrite(buf, 1, 4096, file);
|
||||
}
|
||||
|
||||
void death(const char *msg, FILE *fdesc, const char *fname)
|
||||
static void death(const char *msg, FILE *fdesc, const char *fname)
|
||||
{
|
||||
fprintf(stderr, msg);
|
||||
fclose(fdesc);
|
||||
|
|
|
@ -55,6 +55,7 @@ static void __init reset_tod_clock(void)
|
|||
disabled_wait(0);
|
||||
|
||||
sched_clock_base_cc = TOD_UNIX_EPOCH;
|
||||
S390_lowcore.last_update_clock = sched_clock_base_cc;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SHARED_KERNEL
|
||||
|
@ -167,6 +168,14 @@ static noinline __init void create_kernel_nss(void)
|
|||
return;
|
||||
}
|
||||
|
||||
/* re-initialize cputime accounting. */
|
||||
sched_clock_base_cc = get_clock();
|
||||
S390_lowcore.last_update_clock = sched_clock_base_cc;
|
||||
S390_lowcore.last_update_timer = 0x7fffffffffffffffULL;
|
||||
S390_lowcore.user_timer = 0;
|
||||
S390_lowcore.system_timer = 0;
|
||||
asm volatile("SPT 0(%0)" : : "a" (&S390_lowcore.last_update_timer));
|
||||
|
||||
/* re-setup boot command line with new ipl vm parms */
|
||||
ipl_update_parameters();
|
||||
setup_boot_command_line();
|
||||
|
|
|
@ -565,10 +565,10 @@ pgm_svcper:
|
|||
lh %r7,0x8a # get svc number from lowcore
|
||||
l %r9,__LC_THREAD_INFO # load pointer to thread_info struct
|
||||
TRACE_IRQS_OFF
|
||||
l %r1,__TI_task(%r9)
|
||||
mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
|
||||
mvc __THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS
|
||||
mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
|
||||
l %r8,__TI_task(%r9)
|
||||
mvc __THREAD_per+__PER_atmid(2,%r8),__LC_PER_ATMID
|
||||
mvc __THREAD_per+__PER_address(4,%r8),__LC_PER_ADDRESS
|
||||
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
||||
oi __TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
||||
TRACE_IRQS_ON
|
||||
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
||||
|
|
|
@ -543,10 +543,10 @@ pgm_svcper:
|
|||
mvc __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
|
||||
llgh %r7,__LC_SVC_INT_CODE # get svc number from lowcore
|
||||
lg %r9,__LC_THREAD_INFO # load pointer to thread_info struct
|
||||
lg %r1,__TI_task(%r9)
|
||||
mvc __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
|
||||
mvc __THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS
|
||||
mvc __THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID
|
||||
lg %r8,__TI_task(%r9)
|
||||
mvc __THREAD_per+__PER_atmid(2,%r8),__LC_PER_ATMID
|
||||
mvc __THREAD_per+__PER_address(8,%r8),__LC_PER_ADDRESS
|
||||
mvc __THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID
|
||||
oi __TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP
|
||||
TRACE_IRQS_ON
|
||||
stosm __SF_EMPTY(%r15),0x03 # reenable interrupts
|
||||
|
|
|
@ -68,7 +68,7 @@ static void unmask_imask_irq(unsigned int irq)
|
|||
}
|
||||
|
||||
static struct irq_chip imask_irq_chip = {
|
||||
.typename = "SR.IMASK",
|
||||
.name = "SR.IMASK",
|
||||
.mask = mask_imask_irq,
|
||||
.unmask = unmask_imask_irq,
|
||||
.mask_ack = mask_imask_irq,
|
||||
|
|
|
@ -85,7 +85,7 @@ static void mask_and_ack_intc(unsigned int);
|
|||
static void end_intc_irq(unsigned int irq);
|
||||
|
||||
static struct irq_chip intc_irq_type = {
|
||||
.typename = "INTC",
|
||||
.name = "INTC",
|
||||
.startup = startup_intc_irq,
|
||||
.shutdown = shutdown_intc_irq,
|
||||
.enable = enable_intc_irq,
|
||||
|
|
|
@ -61,14 +61,14 @@ unsigned long lastfoffset = -1;
|
|||
unsigned long lastfrelno;
|
||||
btfixup *lastf;
|
||||
|
||||
void fatal(void) __attribute__((noreturn));
|
||||
void fatal(void)
|
||||
static void fatal(void) __attribute__((noreturn));
|
||||
static void fatal(void)
|
||||
{
|
||||
fprintf(stderr, "Malformed output from objdump\n%s\n", buffer);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
btfixup *find(int type, char *name)
|
||||
static btfixup *find(int type, char *name)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < last; i++) {
|
||||
|
@ -88,7 +88,7 @@ btfixup *find(int type, char *name)
|
|||
return array + last - 1;
|
||||
}
|
||||
|
||||
void set_mode (char *buffer)
|
||||
static void set_mode (char *buffer)
|
||||
{
|
||||
for (mode = 0;; mode++)
|
||||
if (buffer[mode] < '0' || buffer[mode] > '9')
|
||||
|
|
|
@ -35,17 +35,17 @@
|
|||
* as PROM looks for a.out image only.
|
||||
*/
|
||||
|
||||
unsigned short ld2(char *p)
|
||||
static unsigned short ld2(char *p)
|
||||
{
|
||||
return (p[0] << 8) | p[1];
|
||||
}
|
||||
|
||||
unsigned int ld4(char *p)
|
||||
static unsigned int ld4(char *p)
|
||||
{
|
||||
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
}
|
||||
|
||||
void st4(char *p, unsigned int x)
|
||||
static void st4(char *p, unsigned int x)
|
||||
{
|
||||
p[0] = x >> 24;
|
||||
p[1] = x >> 16;
|
||||
|
@ -53,7 +53,7 @@ void st4(char *p, unsigned int x)
|
|||
p[3] = x;
|
||||
}
|
||||
|
||||
void usage(void)
|
||||
static void usage(void)
|
||||
{
|
||||
/* fs_img.gz is an image of initial ramdisk. */
|
||||
fprintf(stderr, "Usage: piggyback vmlinux.aout System.map fs_img.gz\n");
|
||||
|
@ -61,7 +61,7 @@ void usage(void)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
void die(char *str)
|
||||
static void die(char *str)
|
||||
{
|
||||
perror (str);
|
||||
exit(1);
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
/* Note: run this on an a.out kernel (use elftoaout for it), as PROM looks for a.out image onlly
|
||||
usage: piggyback vmlinux System.map tail, where tail is gzipped fs of the initial ramdisk */
|
||||
|
||||
void die(char *str)
|
||||
static void die(char *str)
|
||||
{
|
||||
perror (str);
|
||||
exit(1);
|
||||
|
|
|
@ -526,15 +526,21 @@ static const struct dmi_system_id sw_any_bug_dmi_table[] = {
|
|||
|
||||
static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c)
|
||||
{
|
||||
/* http://www.intel.com/Assets/PDF/specupdate/314554.pdf
|
||||
/* Intel Xeon Processor 7100 Series Specification Update
|
||||
* http://www.intel.com/Assets/PDF/specupdate/314554.pdf
|
||||
* AL30: A Machine Check Exception (MCE) Occurring during an
|
||||
* Enhanced Intel SpeedStep Technology Ratio Change May Cause
|
||||
* Both Processor Cores to Lock Up when HT is enabled*/
|
||||
* Both Processor Cores to Lock Up. */
|
||||
if (c->x86_vendor == X86_VENDOR_INTEL) {
|
||||
if ((c->x86 == 15) &&
|
||||
(c->x86_model == 6) &&
|
||||
(c->x86_mask == 8) && smt_capable())
|
||||
(c->x86_mask == 8)) {
|
||||
printk(KERN_INFO "acpi-cpufreq: Intel(R) "
|
||||
"Xeon(R) 7100 Errata AL30, processors may "
|
||||
"lock up on frequency changes: disabling "
|
||||
"acpi-cpufreq.\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -549,13 +555,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
|||
unsigned int result = 0;
|
||||
struct cpuinfo_x86 *c = &cpu_data(policy->cpu);
|
||||
struct acpi_processor_performance *perf;
|
||||
#ifdef CONFIG_SMP
|
||||
static int blacklisted;
|
||||
#endif
|
||||
|
||||
dprintk("acpi_cpufreq_cpu_init\n");
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
result = acpi_cpufreq_blacklist(c);
|
||||
if (result)
|
||||
return result;
|
||||
if (blacklisted)
|
||||
return blacklisted;
|
||||
blacklisted = acpi_cpufreq_blacklist(c);
|
||||
if (blacklisted)
|
||||
return blacklisted;
|
||||
#endif
|
||||
|
||||
data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL);
|
||||
|
|
|
@ -813,7 +813,7 @@ static int __init longhaul_cpu_init(struct cpufreq_policy *policy)
|
|||
memcpy(eblcr, samuel2_eblcr, sizeof(samuel2_eblcr));
|
||||
break;
|
||||
case 1 ... 15:
|
||||
longhaul_version = TYPE_LONGHAUL_V1;
|
||||
longhaul_version = TYPE_LONGHAUL_V2;
|
||||
if (c->x86_mask < 8) {
|
||||
cpu_model = CPU_SAMUEL2;
|
||||
cpuname = "C3 'Samuel 2' [C5B]";
|
||||
|
|
|
@ -1022,7 +1022,7 @@ static int get_transition_latency(struct powernow_k8_data *data)
|
|||
* set it to 1 to avoid problems in the future.
|
||||
* For all others it's a BIOS bug.
|
||||
*/
|
||||
if (!boot_cpu_data.x86 == 0x11)
|
||||
if (boot_cpu_data.x86 != 0x11)
|
||||
printk(KERN_ERR FW_WARN PFX "Invalid zero transition "
|
||||
"latency\n");
|
||||
max_latency = 1;
|
||||
|
|
|
@ -232,28 +232,23 @@ static unsigned int speedstep_detect_chipset(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct get_freq_data {
|
||||
unsigned int speed;
|
||||
unsigned int processor;
|
||||
};
|
||||
|
||||
static void get_freq_data(void *_data)
|
||||
static void get_freq_data(void *_speed)
|
||||
{
|
||||
struct get_freq_data *data = _data;
|
||||
unsigned int *speed = _speed;
|
||||
|
||||
data->speed = speedstep_get_frequency(data->processor);
|
||||
*speed = speedstep_get_frequency(speedstep_processor);
|
||||
}
|
||||
|
||||
static unsigned int speedstep_get(unsigned int cpu)
|
||||
{
|
||||
struct get_freq_data data = { .processor = cpu };
|
||||
unsigned int speed;
|
||||
|
||||
/* You're supposed to ensure CPU is online. */
|
||||
if (smp_call_function_single(cpu, get_freq_data, &data, 1) != 0)
|
||||
if (smp_call_function_single(cpu, get_freq_data, &speed, 1) != 0)
|
||||
BUG();
|
||||
|
||||
dprintk("detected %u kHz as current frequency\n", data.speed);
|
||||
return data.speed;
|
||||
dprintk("detected %u kHz as current frequency\n", speed);
|
||||
return speed;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -600,11 +600,13 @@ static int btusb_close(struct hci_dev *hdev)
|
|||
btusb_stop_traffic(data);
|
||||
err = usb_autopm_get_interface(data->intf);
|
||||
if (err < 0)
|
||||
return 0;
|
||||
goto failed;
|
||||
|
||||
data->intf->needs_remote_wakeup = 0;
|
||||
usb_autopm_put_interface(data->intf);
|
||||
|
||||
failed:
|
||||
usb_scuttle_anchored_urbs(&data->deferred);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1161,12 +1161,6 @@ static int intel_i915_configure(void)
|
|||
|
||||
intel_i9xx_setup_flush();
|
||||
|
||||
#ifdef USE_PCI_DMA_API
|
||||
if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(36)))
|
||||
dev_err(&intel_private.pcidev->dev,
|
||||
"set gfx device dma mask 36bit failed!\n");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2456,6 +2450,11 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
|
|||
&bridge->mode);
|
||||
}
|
||||
|
||||
if (bridge->driver->mask_memory == intel_i965_mask_memory)
|
||||
if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(36)))
|
||||
dev_err(&intel_private.pcidev->dev,
|
||||
"set gfx device dma mask 36bit failed!\n");
|
||||
|
||||
pci_set_drvdata(pdev, bridge);
|
||||
return agp_add_bridge(bridge);
|
||||
}
|
||||
|
|
|
@ -221,6 +221,9 @@ int tty_port_block_til_ready(struct tty_port *port,
|
|||
the port has just hung up or is in another error state */
|
||||
if ((filp->f_flags & O_NONBLOCK) ||
|
||||
(tty->flags & (1 << TTY_IO_ERROR))) {
|
||||
/* Indicate we are open */
|
||||
if (tty->termios->c_cflag & CBAUD)
|
||||
tty_port_raise_dtr_rts(port);
|
||||
port->flags |= ASYNC_NORMAL_ACTIVE;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -103,8 +103,8 @@ void vt_event_post(unsigned int event, unsigned int old, unsigned int new)
|
|||
ve->event.event = event;
|
||||
/* kernel view is consoles 0..n-1, user space view is
|
||||
console 1..n with 0 meaning current, so we must bias */
|
||||
ve->event.old = old + 1;
|
||||
ve->event.new = new + 1;
|
||||
ve->event.oldev = old + 1;
|
||||
ve->event.newev = new + 1;
|
||||
wake = 1;
|
||||
ve->done = 1;
|
||||
}
|
||||
|
@ -186,7 +186,7 @@ int vt_waitactive(int n)
|
|||
vt_event_wait(&vw);
|
||||
if (vw.done == 0)
|
||||
return -EINTR;
|
||||
} while (vw.event.new != n);
|
||||
} while (vw.event.newev != n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ static struct cpufreq_driver *cpufreq_driver;
|
|||
static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
/* This one keeps track of the previously set governor of a removed CPU */
|
||||
static DEFINE_PER_CPU(struct cpufreq_governor *, cpufreq_cpu_governor);
|
||||
static DEFINE_PER_CPU(char[CPUFREQ_NAME_LEN], cpufreq_cpu_governor);
|
||||
#endif
|
||||
static DEFINE_SPINLOCK(cpufreq_driver_lock);
|
||||
|
||||
|
@ -774,10 +774,12 @@ int cpufreq_add_dev_policy(unsigned int cpu, struct cpufreq_policy *policy,
|
|||
#ifdef CONFIG_SMP
|
||||
unsigned long flags;
|
||||
unsigned int j;
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
if (per_cpu(cpufreq_cpu_governor, cpu)) {
|
||||
policy->governor = per_cpu(cpufreq_cpu_governor, cpu);
|
||||
struct cpufreq_governor *gov;
|
||||
|
||||
gov = __find_governor(per_cpu(cpufreq_cpu_governor, cpu));
|
||||
if (gov) {
|
||||
policy->governor = gov;
|
||||
dprintk("Restoring governor %s for cpu %d\n",
|
||||
policy->governor->name, cpu);
|
||||
}
|
||||
|
@ -949,10 +951,13 @@ int cpufreq_add_dev_interface(unsigned int cpu, struct cpufreq_policy *policy,
|
|||
static int cpufreq_add_dev(struct sys_device *sys_dev)
|
||||
{
|
||||
unsigned int cpu = sys_dev->id;
|
||||
int ret = 0;
|
||||
int ret = 0, found = 0;
|
||||
struct cpufreq_policy *policy;
|
||||
unsigned long flags;
|
||||
unsigned int j;
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
int sibling;
|
||||
#endif
|
||||
|
||||
if (cpu_is_offline(cpu))
|
||||
return 0;
|
||||
|
@ -999,7 +1004,19 @@ static int cpufreq_add_dev(struct sys_device *sys_dev)
|
|||
INIT_WORK(&policy->update, handle_update);
|
||||
|
||||
/* Set governor before ->init, so that driver could check it */
|
||||
policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
for_each_online_cpu(sibling) {
|
||||
struct cpufreq_policy *cp = per_cpu(cpufreq_cpu_data, sibling);
|
||||
if (cp && cp->governor &&
|
||||
(cpumask_test_cpu(cpu, cp->related_cpus))) {
|
||||
policy->governor = cp->governor;
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!found)
|
||||
policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
|
||||
/* call driver. From then on the cpufreq must be able
|
||||
* to accept all calls to ->verify and ->setpolicy for this CPU
|
||||
*/
|
||||
|
@ -1111,7 +1128,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|||
#ifdef CONFIG_SMP
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
per_cpu(cpufreq_cpu_governor, cpu) = data->governor;
|
||||
strncpy(per_cpu(cpufreq_cpu_governor, cpu), data->governor->name,
|
||||
CPUFREQ_NAME_LEN);
|
||||
#endif
|
||||
|
||||
/* if we have other CPUs still registered, we need to unlink them,
|
||||
|
@ -1135,7 +1153,8 @@ static int __cpufreq_remove_dev(struct sys_device *sys_dev)
|
|||
continue;
|
||||
dprintk("removing link for cpu %u\n", j);
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
per_cpu(cpufreq_cpu_governor, j) = data->governor;
|
||||
strncpy(per_cpu(cpufreq_cpu_governor, j),
|
||||
data->governor->name, CPUFREQ_NAME_LEN);
|
||||
#endif
|
||||
cpu_sys_dev = get_cpu_sysdev(j);
|
||||
sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq");
|
||||
|
@ -1606,9 +1625,22 @@ EXPORT_SYMBOL_GPL(cpufreq_register_governor);
|
|||
|
||||
void cpufreq_unregister_governor(struct cpufreq_governor *governor)
|
||||
{
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
int cpu;
|
||||
#endif
|
||||
|
||||
if (!governor)
|
||||
return;
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
for_each_present_cpu(cpu) {
|
||||
if (cpu_online(cpu))
|
||||
continue;
|
||||
if (!strcmp(per_cpu(cpufreq_cpu_governor, cpu), governor->name))
|
||||
strcpy(per_cpu(cpufreq_cpu_governor, cpu), "\0");
|
||||
}
|
||||
#endif
|
||||
|
||||
mutex_lock(&cpufreq_governor_mutex);
|
||||
list_del(&governor->governor_list);
|
||||
mutex_unlock(&cpufreq_governor_mutex);
|
||||
|
|
|
@ -116,9 +116,9 @@ static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu,
|
|||
|
||||
idle_time = cputime64_sub(cur_wall_time, busy_time);
|
||||
if (wall)
|
||||
*wall = cur_wall_time;
|
||||
*wall = (cputime64_t)jiffies_to_usecs(cur_wall_time);
|
||||
|
||||
return idle_time;
|
||||
return (cputime64_t)jiffies_to_usecs(idle_time);;
|
||||
}
|
||||
|
||||
static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
|
||||
|
|
|
@ -133,9 +133,9 @@ static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu,
|
|||
|
||||
idle_time = cputime64_sub(cur_wall_time, busy_time);
|
||||
if (wall)
|
||||
*wall = cur_wall_time;
|
||||
*wall = (cputime64_t)jiffies_to_usecs(cur_wall_time);
|
||||
|
||||
return idle_time;
|
||||
return (cputime64_t)jiffies_to_usecs(idle_time);
|
||||
}
|
||||
|
||||
static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
|
||||
|
|
|
@ -661,7 +661,7 @@ int gpio_export(unsigned gpio, bool direction_may_change)
|
|||
|
||||
dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0),
|
||||
desc, ioname ? ioname : "gpio%d", gpio);
|
||||
if (dev) {
|
||||
if (!IS_ERR(dev)) {
|
||||
if (direction_may_change)
|
||||
status = sysfs_create_group(&dev->kobj,
|
||||
&gpio_attr_group);
|
||||
|
@ -679,7 +679,7 @@ int gpio_export(unsigned gpio, bool direction_may_change)
|
|||
if (status != 0)
|
||||
device_unregister(dev);
|
||||
} else
|
||||
status = -ENODEV;
|
||||
status = PTR_ERR(dev);
|
||||
if (status == 0)
|
||||
set_bit(FLAG_EXPORT, &desc->flags);
|
||||
}
|
||||
|
@ -800,11 +800,11 @@ static int gpiochip_export(struct gpio_chip *chip)
|
|||
mutex_lock(&sysfs_lock);
|
||||
dev = device_create(&gpio_class, chip->dev, MKDEV(0, 0), chip,
|
||||
"gpiochip%d", chip->base);
|
||||
if (dev) {
|
||||
if (!IS_ERR(dev)) {
|
||||
status = sysfs_create_group(&dev->kobj,
|
||||
&gpiochip_attr_group);
|
||||
} else
|
||||
status = -ENODEV;
|
||||
status = PTR_ERR(dev);
|
||||
chip->exported = (status == 0);
|
||||
mutex_unlock(&sysfs_lock);
|
||||
|
||||
|
|
|
@ -561,7 +561,7 @@ struct table {
|
|||
char *gpu_prefix;
|
||||
};
|
||||
|
||||
struct offset *offset_new(unsigned o)
|
||||
static struct offset *offset_new(unsigned o)
|
||||
{
|
||||
struct offset *offset;
|
||||
|
||||
|
@ -573,12 +573,12 @@ struct offset *offset_new(unsigned o)
|
|||
return offset;
|
||||
}
|
||||
|
||||
void table_offset_add(struct table *t, struct offset *offset)
|
||||
static void table_offset_add(struct table *t, struct offset *offset)
|
||||
{
|
||||
list_add_tail(&offset->list, &t->offsets);
|
||||
}
|
||||
|
||||
void table_init(struct table *t)
|
||||
static void table_init(struct table *t)
|
||||
{
|
||||
INIT_LIST_HEAD(&t->offsets);
|
||||
t->offset_max = 0;
|
||||
|
@ -586,7 +586,7 @@ void table_init(struct table *t)
|
|||
t->table = NULL;
|
||||
}
|
||||
|
||||
void table_print(struct table *t)
|
||||
static void table_print(struct table *t)
|
||||
{
|
||||
unsigned nlloop, i, j, n, c, id;
|
||||
|
||||
|
@ -611,7 +611,7 @@ void table_print(struct table *t)
|
|||
printf("};\n");
|
||||
}
|
||||
|
||||
int table_build(struct table *t)
|
||||
static int table_build(struct table *t)
|
||||
{
|
||||
struct offset *offset;
|
||||
unsigned i, m;
|
||||
|
@ -631,7 +631,7 @@ int table_build(struct table *t)
|
|||
}
|
||||
|
||||
static char gpu_name[10];
|
||||
int parser_auth(struct table *t, const char *filename)
|
||||
static int parser_auth(struct table *t, const char *filename)
|
||||
{
|
||||
FILE *file;
|
||||
regex_t mask_rex;
|
||||
|
|
|
@ -350,8 +350,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
|
|||
|
||||
case FAULT:
|
||||
/* Note - only for remote1 and remote2 */
|
||||
out = data->alarms & (sattr->index ? 0x8000 : 0x4000);
|
||||
out = out ? 0 : 1;
|
||||
out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -863,7 +862,7 @@ static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
|
|||
set_pwmfreq, INPUT, 0);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
|
||||
set_pwmctrl, INPUT, 0);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm1_auto_channel_temp, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR,
|
||||
show_pwmchan, set_pwmchan, INPUT, 0);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
|
||||
set_pwm, MIN, 0);
|
||||
|
@ -875,7 +874,7 @@ static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
|
|||
set_pwmfreq, INPUT, 1);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
|
||||
set_pwmctrl, INPUT, 1);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm2_auto_channel_temp, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR,
|
||||
show_pwmchan, set_pwmchan, INPUT, 1);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
|
||||
set_pwm, MIN, 1);
|
||||
|
@ -887,7 +886,7 @@ static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
|
|||
set_pwmfreq, INPUT, 2);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
|
||||
set_pwmctrl, INPUT, 2);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm3_auto_channel_temp, S_IRUGO | S_IWUSR,
|
||||
static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR,
|
||||
show_pwmchan, set_pwmchan, INPUT, 2);
|
||||
static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
|
||||
set_pwm, MIN, 2);
|
||||
|
@ -947,19 +946,19 @@ static struct attribute *adt7475_attrs[] = {
|
|||
&sensor_dev_attr_pwm1.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_freq.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_auto_channel_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_freq.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_auto_channel_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_freq.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_enable.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_auto_channel_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
|
||||
&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
|
||||
NULL,
|
||||
|
@ -1152,7 +1151,7 @@ static struct adt7475_data *adt7475_update_device(struct device *dev)
|
|||
}
|
||||
|
||||
/* Limits and settings, should never change update every 60 seconds */
|
||||
if (time_after(jiffies, data->limits_updated + HZ * 2) ||
|
||||
if (time_after(jiffies, data->limits_updated + HZ * 60) ||
|
||||
!data->valid) {
|
||||
data->config5 = adt7475_read(REG_CONFIG5);
|
||||
|
||||
|
|
|
@ -323,14 +323,21 @@ static int __devinit s3c_hwmon_probe(struct platform_device *dev)
|
|||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(pdata->in); i++) {
|
||||
if (!pdata->in[i])
|
||||
struct s3c24xx_adc_hwmon_incfg *cfg = pdata->in[i];
|
||||
|
||||
if (!cfg)
|
||||
continue;
|
||||
|
||||
if (pdata->in[i]->mult >= 0x10000)
|
||||
if (cfg->mult >= 0x10000)
|
||||
dev_warn(&dev->dev,
|
||||
"channel %d multiplier too large\n",
|
||||
i);
|
||||
|
||||
if (cfg->divider == 0) {
|
||||
dev_err(&dev->dev, "channel %d divider zero\n", i);
|
||||
continue;
|
||||
}
|
||||
|
||||
ret = s3c_hwmon_create_attr(&dev->dev, pdata->in[i],
|
||||
&hwmon->attrs[i], i);
|
||||
if (ret) {
|
||||
|
|
|
@ -19,7 +19,9 @@
|
|||
#include <linux/completion.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c-pnx.h>
|
||||
#include <linux/io.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
|
@ -54,6 +56,9 @@ static inline void i2c_pnx_arm_timer(struct i2c_adapter *adap)
|
|||
struct timer_list *timer = &data->mif.timer;
|
||||
int expires = I2C_PNX_TIMEOUT / (1000 / HZ);
|
||||
|
||||
if (expires <= 1)
|
||||
expires = 2;
|
||||
|
||||
del_timer_sync(timer);
|
||||
|
||||
dev_dbg(&adap->dev, "Timer armed at %lu plus %u jiffies.\n",
|
||||
|
|
|
@ -337,16 +337,16 @@ int input_ff_create(struct input_dev *dev, int max_effects)
|
|||
dev->ff = ff;
|
||||
dev->flush = flush_effects;
|
||||
dev->event = input_ff_event;
|
||||
set_bit(EV_FF, dev->evbit);
|
||||
__set_bit(EV_FF, dev->evbit);
|
||||
|
||||
/* Copy "true" bits into ff device bitmap */
|
||||
for (i = 0; i <= FF_MAX; i++)
|
||||
if (test_bit(i, dev->ffbit))
|
||||
set_bit(i, ff->ffbit);
|
||||
__set_bit(i, ff->ffbit);
|
||||
|
||||
/* we can emulate RUMBLE with periodic effects */
|
||||
if (test_bit(FF_PERIODIC, ff->ffbit))
|
||||
set_bit(FF_RUMBLE, dev->ffbit);
|
||||
__set_bit(FF_RUMBLE, dev->ffbit);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -362,12 +362,14 @@ EXPORT_SYMBOL_GPL(input_ff_create);
|
|||
*/
|
||||
void input_ff_destroy(struct input_dev *dev)
|
||||
{
|
||||
clear_bit(EV_FF, dev->evbit);
|
||||
if (dev->ff) {
|
||||
if (dev->ff->destroy)
|
||||
dev->ff->destroy(dev->ff);
|
||||
kfree(dev->ff->private);
|
||||
kfree(dev->ff);
|
||||
struct ff_device *ff = dev->ff;
|
||||
|
||||
__clear_bit(EV_FF, dev->evbit);
|
||||
if (ff) {
|
||||
if (ff->destroy)
|
||||
ff->destroy(ff);
|
||||
kfree(ff->private);
|
||||
kfree(ff);
|
||||
dev->ff = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,6 @@ struct ml_device {
|
|||
struct ml_effect_state states[FF_MEMLESS_EFFECTS];
|
||||
int gain;
|
||||
struct timer_list timer;
|
||||
spinlock_t timer_lock;
|
||||
struct input_dev *dev;
|
||||
|
||||
int (*play_effect)(struct input_dev *dev, void *data,
|
||||
|
@ -368,38 +367,38 @@ static void ml_effect_timer(unsigned long timer_data)
|
|||
{
|
||||
struct input_dev *dev = (struct input_dev *)timer_data;
|
||||
struct ml_device *ml = dev->ff->private;
|
||||
unsigned long flags;
|
||||
|
||||
debug("timer: updating effects");
|
||||
|
||||
spin_lock(&ml->timer_lock);
|
||||
spin_lock_irqsave(&dev->event_lock, flags);
|
||||
ml_play_effects(ml);
|
||||
spin_unlock(&ml->timer_lock);
|
||||
spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Sets requested gain for FF effects. Called with dev->event_lock held.
|
||||
*/
|
||||
static void ml_ff_set_gain(struct input_dev *dev, u16 gain)
|
||||
{
|
||||
struct ml_device *ml = dev->ff->private;
|
||||
int i;
|
||||
|
||||
spin_lock_bh(&ml->timer_lock);
|
||||
|
||||
ml->gain = gain;
|
||||
|
||||
for (i = 0; i < FF_MEMLESS_EFFECTS; i++)
|
||||
__clear_bit(FF_EFFECT_PLAYING, &ml->states[i].flags);
|
||||
|
||||
ml_play_effects(ml);
|
||||
|
||||
spin_unlock_bh(&ml->timer_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* Start/stop specified FF effect. Called with dev->event_lock held.
|
||||
*/
|
||||
static int ml_ff_playback(struct input_dev *dev, int effect_id, int value)
|
||||
{
|
||||
struct ml_device *ml = dev->ff->private;
|
||||
struct ml_effect_state *state = &ml->states[effect_id];
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ml->timer_lock, flags);
|
||||
|
||||
if (value > 0) {
|
||||
debug("initiated play");
|
||||
|
@ -425,8 +424,6 @@ static int ml_ff_playback(struct input_dev *dev, int effect_id, int value)
|
|||
ml_play_effects(ml);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&ml->timer_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -436,7 +433,7 @@ static int ml_ff_upload(struct input_dev *dev,
|
|||
struct ml_device *ml = dev->ff->private;
|
||||
struct ml_effect_state *state = &ml->states[effect->id];
|
||||
|
||||
spin_lock_bh(&ml->timer_lock);
|
||||
spin_lock_irq(&dev->event_lock);
|
||||
|
||||
if (test_bit(FF_EFFECT_STARTED, &state->flags)) {
|
||||
__clear_bit(FF_EFFECT_PLAYING, &state->flags);
|
||||
|
@ -448,7 +445,7 @@ static int ml_ff_upload(struct input_dev *dev,
|
|||
ml_schedule_timer(ml);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&ml->timer_lock);
|
||||
spin_unlock_irq(&dev->event_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -482,7 +479,6 @@ int input_ff_create_memless(struct input_dev *dev, void *data,
|
|||
ml->private = data;
|
||||
ml->play_effect = play_effect;
|
||||
ml->gain = 0xffff;
|
||||
spin_lock_init(&ml->timer_lock);
|
||||
setup_timer(&ml->timer, ml_effect_timer, (unsigned long)dev);
|
||||
|
||||
set_bit(FF_GAIN, dev->ffbit);
|
||||
|
|
|
@ -1292,17 +1292,24 @@ static int input_dev_uevent(struct device *device, struct kobj_uevent_env *env)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define INPUT_DO_TOGGLE(dev, type, bits, on) \
|
||||
do { \
|
||||
int i; \
|
||||
if (!test_bit(EV_##type, dev->evbit)) \
|
||||
break; \
|
||||
for (i = 0; i < type##_MAX; i++) { \
|
||||
if (!test_bit(i, dev->bits##bit) || \
|
||||
!test_bit(i, dev->bits)) \
|
||||
continue; \
|
||||
dev->event(dev, EV_##type, i, on); \
|
||||
} \
|
||||
#define INPUT_DO_TOGGLE(dev, type, bits, on) \
|
||||
do { \
|
||||
int i; \
|
||||
bool active; \
|
||||
\
|
||||
if (!test_bit(EV_##type, dev->evbit)) \
|
||||
break; \
|
||||
\
|
||||
for (i = 0; i < type##_MAX; i++) { \
|
||||
if (!test_bit(i, dev->bits##bit)) \
|
||||
continue; \
|
||||
\
|
||||
active = test_bit(i, dev->bits); \
|
||||
if (!active && !on) \
|
||||
continue; \
|
||||
\
|
||||
dev->event(dev, EV_##type, i, on ? active : 0); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
|
|
@ -1174,6 +1174,18 @@ static int atkbd_reconnect(struct serio *serio)
|
|||
return -1;
|
||||
|
||||
atkbd_activate(atkbd);
|
||||
|
||||
/*
|
||||
* Restore LED state and repeat rate. While input core
|
||||
* will do this for us at resume time reconnect may happen
|
||||
* because user requested it via sysfs or simply because
|
||||
* keyboard was unplugged and plugged in again so we need
|
||||
* to do it ourselves here.
|
||||
*/
|
||||
atkbd_set_leds(atkbd);
|
||||
if (!atkbd->softrepeat)
|
||||
atkbd_set_repeat_rate(atkbd);
|
||||
|
||||
}
|
||||
|
||||
atkbd_enable(atkbd);
|
||||
|
@ -1422,6 +1434,7 @@ static ssize_t atkbd_set_set(struct atkbd *atkbd, const char *buf, size_t count)
|
|||
|
||||
atkbd->dev = new_dev;
|
||||
atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra);
|
||||
atkbd_reset_state(atkbd);
|
||||
atkbd_activate(atkbd);
|
||||
atkbd_set_keycode_table(atkbd);
|
||||
atkbd_set_device_attrs(atkbd);
|
||||
|
|
|
@ -107,8 +107,7 @@ static const struct dmi_system_id lifebook_dmi_table[] = {
|
|||
.matches = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "CF-72"),
|
||||
},
|
||||
.callback = lifebook_set_serio_phys,
|
||||
.driver_data = "isa0060/serio3",
|
||||
.callback = lifebook_set_6byte_proto,
|
||||
},
|
||||
{
|
||||
.ident = "Lifebook B142",
|
||||
|
|
|
@ -581,7 +581,7 @@ static int cortron_detect(struct psmouse *psmouse, bool set_properties)
|
|||
static int psmouse_extensions(struct psmouse *psmouse,
|
||||
unsigned int max_proto, bool set_properties)
|
||||
{
|
||||
bool synaptics_hardware = true;
|
||||
bool synaptics_hardware = false;
|
||||
|
||||
/*
|
||||
* We always check for lifebook because it does not disturb mouse
|
||||
|
@ -1673,7 +1673,7 @@ static int psmouse_get_maxproto(char *buffer, struct kernel_param *kp)
|
|||
{
|
||||
int type = *((unsigned int *)kp->arg);
|
||||
|
||||
return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name);
|
||||
return sprintf(buffer, "%s", psmouse_protocol_by_type(type)->name);
|
||||
}
|
||||
|
||||
static int __init psmouse_init(void)
|
||||
|
|
|
@ -5481,7 +5481,7 @@ HFCmulti_init(void)
|
|||
if (err) {
|
||||
printk(KERN_ERR "error registering embedded driver: "
|
||||
"%x\n", err);
|
||||
return -err;
|
||||
return err;
|
||||
}
|
||||
HFC_cnt++;
|
||||
printk(KERN_INFO "%d devices registered\n", HFC_cnt);
|
||||
|
|
|
@ -1535,10 +1535,8 @@ static int isdn_ppp_mp_bundle_array_init(void)
|
|||
int sz = ISDN_MAX_CHANNELS*sizeof(ippp_bundle);
|
||||
if( (isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL )
|
||||
return -ENOMEM;
|
||||
for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
|
||||
for( i = 0; i < ISDN_MAX_CHANNELS; i++ )
|
||||
spin_lock_init(&isdn_ppp_bundle_arr[i].lock);
|
||||
skb_queue_head_init(&isdn_ppp_bundle_arr[i].frags);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1571,7 +1569,7 @@ static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to )
|
|||
if ((lp->netdev->pb = isdn_ppp_mp_bundle_alloc()) == NULL)
|
||||
return -ENOMEM;
|
||||
lp->next = lp->last = lp; /* nobody else in a queue */
|
||||
skb_queue_head_init(&lp->netdev->pb->frags);
|
||||
lp->netdev->pb->frags = NULL;
|
||||
lp->netdev->pb->frames = 0;
|
||||
lp->netdev->pb->seq = UINT_MAX;
|
||||
}
|
||||
|
@ -1583,29 +1581,28 @@ static int isdn_ppp_mp_init( isdn_net_local * lp, ippp_bundle * add_to )
|
|||
|
||||
static u32 isdn_ppp_mp_get_seq( int short_seq,
|
||||
struct sk_buff * skb, u32 last_seq );
|
||||
static void isdn_ppp_mp_discard(ippp_bundle *mp, struct sk_buff *from,
|
||||
struct sk_buff *to);
|
||||
static void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp,
|
||||
struct sk_buff *from, struct sk_buff *to,
|
||||
u32 lastseq);
|
||||
static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb);
|
||||
static struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp,
|
||||
struct sk_buff * from, struct sk_buff * to );
|
||||
static void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp,
|
||||
struct sk_buff * from, struct sk_buff * to );
|
||||
static void isdn_ppp_mp_free_skb( ippp_bundle * mp, struct sk_buff * skb );
|
||||
static void isdn_ppp_mp_print_recv_pkt( int slot, struct sk_buff * skb );
|
||||
|
||||
static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
||||
struct sk_buff *skb)
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff *newfrag, *frag, *start, *nextf;
|
||||
u32 newseq, minseq, thisseq;
|
||||
isdn_mppp_stats *stats;
|
||||
struct ippp_struct *is;
|
||||
isdn_net_local * lpq;
|
||||
ippp_bundle * mp;
|
||||
isdn_mppp_stats * stats;
|
||||
struct sk_buff * newfrag, * frag, * start, *nextf;
|
||||
u32 newseq, minseq, thisseq;
|
||||
unsigned long flags;
|
||||
isdn_net_local *lpq;
|
||||
ippp_bundle *mp;
|
||||
int slot;
|
||||
|
||||
spin_lock_irqsave(&net_dev->pb->lock, flags);
|
||||
mp = net_dev->pb;
|
||||
stats = &mp->stats;
|
||||
mp = net_dev->pb;
|
||||
stats = &mp->stats;
|
||||
slot = lp->ppp_slot;
|
||||
if (slot < 0 || slot >= ISDN_MAX_CHANNELS) {
|
||||
printk(KERN_ERR "%s: lp->ppp_slot(%d)\n",
|
||||
|
@ -1616,19 +1613,20 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
return;
|
||||
}
|
||||
is = ippp_table[slot];
|
||||
if (++mp->frames > stats->max_queue_len)
|
||||
if( ++mp->frames > stats->max_queue_len )
|
||||
stats->max_queue_len = mp->frames;
|
||||
|
||||
|
||||
if (is->debug & 0x8)
|
||||
isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb);
|
||||
|
||||
newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ,
|
||||
skb, is->last_link_seqno);
|
||||
newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ,
|
||||
skb, is->last_link_seqno);
|
||||
|
||||
|
||||
/* if this packet seq # is less than last already processed one,
|
||||
* toss it right away, but check for sequence start case first
|
||||
*/
|
||||
if (mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT)) {
|
||||
if( mp->seq > MP_LONGSEQ_MAX && (newseq & MP_LONGSEQ_MAXBIT) ) {
|
||||
mp->seq = newseq; /* the first packet: required for
|
||||
* rfc1990 non-compliant clients --
|
||||
* prevents constant packet toss */
|
||||
|
@ -1638,7 +1636,7 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
spin_unlock_irqrestore(&mp->lock, flags);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* find the minimum received sequence number over all links */
|
||||
is->last_link_seqno = minseq = newseq;
|
||||
for (lpq = net_dev->queue;;) {
|
||||
|
@ -1659,31 +1657,22 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
* packets */
|
||||
newfrag = skb;
|
||||
|
||||
/* Insert new fragment into the proper sequence slot. */
|
||||
skb_queue_walk(&mp->frags, frag) {
|
||||
if (MP_SEQ(frag) == newseq) {
|
||||
isdn_ppp_mp_free_skb(mp, newfrag);
|
||||
newfrag = NULL;
|
||||
break;
|
||||
}
|
||||
if (MP_LT(newseq, MP_SEQ(frag))) {
|
||||
__skb_queue_before(&mp->frags, frag, newfrag);
|
||||
newfrag = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (newfrag)
|
||||
__skb_queue_tail(&mp->frags, newfrag);
|
||||
/* if this new fragment is before the first one, then enqueue it now. */
|
||||
if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) {
|
||||
newfrag->next = frag;
|
||||
mp->frags = frag = newfrag;
|
||||
newfrag = NULL;
|
||||
}
|
||||
|
||||
frag = skb_peek(&mp->frags);
|
||||
start = ((MP_FLAGS(frag) & MP_BEGIN_FRAG) &&
|
||||
(MP_SEQ(frag) == mp->seq)) ? frag : NULL;
|
||||
if (!start)
|
||||
goto check_overflow;
|
||||
start = MP_FLAGS(frag) & MP_BEGIN_FRAG &&
|
||||
MP_SEQ(frag) == mp->seq ? frag : NULL;
|
||||
|
||||
/* main fragment traversing loop
|
||||
/*
|
||||
* main fragment traversing loop
|
||||
*
|
||||
* try to accomplish several tasks:
|
||||
* - insert new fragment into the proper sequence slot (once that's done
|
||||
* newfrag will be set to NULL)
|
||||
* - reassemble any complete fragment sequence (non-null 'start'
|
||||
* indicates there is a continguous sequence present)
|
||||
* - discard any incomplete sequences that are below minseq -- due
|
||||
|
@ -1692,46 +1681,71 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
* come to complete such sequence and it should be discarded
|
||||
*
|
||||
* loop completes when we accomplished the following tasks:
|
||||
* - new fragment is inserted in the proper sequence ('newfrag' is
|
||||
* set to NULL)
|
||||
* - we hit a gap in the sequence, so no reassembly/processing is
|
||||
* possible ('start' would be set to NULL)
|
||||
*
|
||||
* algorithm for this code is derived from code in the book
|
||||
* 'PPP Design And Debugging' by James Carlson (Addison-Wesley)
|
||||
*/
|
||||
skb_queue_walk_safe(&mp->frags, frag, nextf) {
|
||||
thisseq = MP_SEQ(frag);
|
||||
while (start != NULL || newfrag != NULL) {
|
||||
|
||||
/* check for misplaced start */
|
||||
if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) {
|
||||
printk(KERN_WARNING"isdn_mppp(seq %d): new "
|
||||
"BEGIN flag with no prior END", thisseq);
|
||||
stats->seqerrs++;
|
||||
stats->frame_drops++;
|
||||
isdn_ppp_mp_discard(mp, start, frag);
|
||||
start = frag;
|
||||
} else if (MP_LE(thisseq, minseq)) {
|
||||
if (MP_FLAGS(frag) & MP_BEGIN_FRAG)
|
||||
thisseq = MP_SEQ(frag);
|
||||
nextf = frag->next;
|
||||
|
||||
/* drop any duplicate fragments */
|
||||
if (newfrag != NULL && thisseq == newseq) {
|
||||
isdn_ppp_mp_free_skb(mp, newfrag);
|
||||
newfrag = NULL;
|
||||
}
|
||||
|
||||
/* insert new fragment before next element if possible. */
|
||||
if (newfrag != NULL && (nextf == NULL ||
|
||||
MP_LT(newseq, MP_SEQ(nextf)))) {
|
||||
newfrag->next = nextf;
|
||||
frag->next = nextf = newfrag;
|
||||
newfrag = NULL;
|
||||
}
|
||||
|
||||
if (start != NULL) {
|
||||
/* check for misplaced start */
|
||||
if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) {
|
||||
printk(KERN_WARNING"isdn_mppp(seq %d): new "
|
||||
"BEGIN flag with no prior END", thisseq);
|
||||
stats->seqerrs++;
|
||||
stats->frame_drops++;
|
||||
start = isdn_ppp_mp_discard(mp, start,frag);
|
||||
nextf = frag->next;
|
||||
}
|
||||
} else if (MP_LE(thisseq, minseq)) {
|
||||
if (MP_FLAGS(frag) & MP_BEGIN_FRAG)
|
||||
start = frag;
|
||||
else {
|
||||
else {
|
||||
if (MP_FLAGS(frag) & MP_END_FRAG)
|
||||
stats->frame_drops++;
|
||||
__skb_unlink(skb, &mp->frags);
|
||||
stats->frame_drops++;
|
||||
if( mp->frags == frag )
|
||||
mp->frags = nextf;
|
||||
isdn_ppp_mp_free_skb(mp, frag);
|
||||
frag = nextf;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* if we have end fragment, then we have full reassembly
|
||||
* sequence -- reassemble and process packet now
|
||||
|
||||
/* if start is non-null and we have end fragment, then
|
||||
* we have full reassembly sequence -- reassemble
|
||||
* and process packet now
|
||||
*/
|
||||
if (MP_FLAGS(frag) & MP_END_FRAG) {
|
||||
minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK;
|
||||
/* Reassemble the packet then dispatch it */
|
||||
isdn_ppp_mp_reassembly(net_dev, lp, start, frag, thisseq);
|
||||
if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) {
|
||||
minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK;
|
||||
/* Reassemble the packet then dispatch it */
|
||||
isdn_ppp_mp_reassembly(net_dev, lp, start, nextf);
|
||||
|
||||
start = NULL;
|
||||
frag = NULL;
|
||||
|
||||
start = NULL;
|
||||
frag = NULL;
|
||||
}
|
||||
mp->frags = nextf;
|
||||
}
|
||||
|
||||
/* check if need to update start pointer: if we just
|
||||
* reassembled the packet and sequence is contiguous
|
||||
|
@ -1742,25 +1756,26 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
* below low watermark and set start to the next frag or
|
||||
* clear start ptr.
|
||||
*/
|
||||
if (nextf != (struct sk_buff *)&mp->frags &&
|
||||
if (nextf != NULL &&
|
||||
((thisseq+1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) {
|
||||
/* if we just reassembled and the next one is here,
|
||||
* then start another reassembly.
|
||||
*/
|
||||
if (frag == NULL) {
|
||||
/* if we just reassembled and the next one is here,
|
||||
* then start another reassembly. */
|
||||
|
||||
if (frag == NULL) {
|
||||
if (MP_FLAGS(nextf) & MP_BEGIN_FRAG)
|
||||
start = nextf;
|
||||
else {
|
||||
printk(KERN_WARNING"isdn_mppp(seq %d):"
|
||||
" END flag with no following "
|
||||
"BEGIN", thisseq);
|
||||
start = nextf;
|
||||
else
|
||||
{
|
||||
printk(KERN_WARNING"isdn_mppp(seq %d):"
|
||||
" END flag with no following "
|
||||
"BEGIN", thisseq);
|
||||
stats->seqerrs++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (nextf != (struct sk_buff *)&mp->frags &&
|
||||
frag != NULL &&
|
||||
MP_LT(thisseq, minseq)) {
|
||||
|
||||
} else {
|
||||
if ( nextf != NULL && frag != NULL &&
|
||||
MP_LT(thisseq, minseq)) {
|
||||
/* we've got a break in the sequence
|
||||
* and we not at the end yet
|
||||
* and we did not just reassembled
|
||||
|
@ -1769,39 +1784,41 @@ static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,
|
|||
* discard all the frames below low watermark
|
||||
* and start over */
|
||||
stats->frame_drops++;
|
||||
isdn_ppp_mp_discard(mp, start, nextf);
|
||||
mp->frags = isdn_ppp_mp_discard(mp,start,nextf);
|
||||
}
|
||||
/* break in the sequence, no reassembly */
|
||||
start = NULL;
|
||||
}
|
||||
if (!start)
|
||||
break;
|
||||
}
|
||||
|
||||
check_overflow:
|
||||
start = NULL;
|
||||
}
|
||||
|
||||
frag = nextf;
|
||||
} /* while -- main loop */
|
||||
|
||||
if (mp->frags == NULL)
|
||||
mp->frags = frag;
|
||||
|
||||
/* rather straighforward way to deal with (not very) possible
|
||||
* queue overflow
|
||||
*/
|
||||
* queue overflow */
|
||||
if (mp->frames > MP_MAX_QUEUE_LEN) {
|
||||
stats->overflows++;
|
||||
skb_queue_walk_safe(&mp->frags, frag, nextf) {
|
||||
if (mp->frames <= MP_MAX_QUEUE_LEN)
|
||||
break;
|
||||
__skb_unlink(frag, &mp->frags);
|
||||
isdn_ppp_mp_free_skb(mp, frag);
|
||||
while (mp->frames > MP_MAX_QUEUE_LEN) {
|
||||
frag = mp->frags->next;
|
||||
isdn_ppp_mp_free_skb(mp, mp->frags);
|
||||
mp->frags = frag;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&mp->lock, flags);
|
||||
}
|
||||
|
||||
static void isdn_ppp_mp_cleanup(isdn_net_local *lp)
|
||||
static void isdn_ppp_mp_cleanup( isdn_net_local * lp )
|
||||
{
|
||||
struct sk_buff *skb, *tmp;
|
||||
|
||||
skb_queue_walk_safe(&lp->netdev->pb->frags, skb, tmp) {
|
||||
__skb_unlink(skb, &lp->netdev->pb->frags);
|
||||
isdn_ppp_mp_free_skb(lp->netdev->pb, skb);
|
||||
struct sk_buff * frag = lp->netdev->pb->frags;
|
||||
struct sk_buff * nextfrag;
|
||||
while( frag ) {
|
||||
nextfrag = frag->next;
|
||||
isdn_ppp_mp_free_skb(lp->netdev->pb, frag);
|
||||
frag = nextfrag;
|
||||
}
|
||||
lp->netdev->pb->frags = NULL;
|
||||
}
|
||||
|
||||
static u32 isdn_ppp_mp_get_seq( int short_seq,
|
||||
|
@ -1838,115 +1855,72 @@ static u32 isdn_ppp_mp_get_seq( int short_seq,
|
|||
return seq;
|
||||
}
|
||||
|
||||
static void isdn_ppp_mp_discard(ippp_bundle *mp, struct sk_buff *from,
|
||||
struct sk_buff *to)
|
||||
struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp,
|
||||
struct sk_buff * from, struct sk_buff * to )
|
||||
{
|
||||
if (from) {
|
||||
struct sk_buff *skb, *tmp;
|
||||
int freeing = 0;
|
||||
|
||||
skb_queue_walk_safe(&mp->frags, skb, tmp) {
|
||||
if (skb == to)
|
||||
break;
|
||||
if (skb == from)
|
||||
freeing = 1;
|
||||
if (!freeing)
|
||||
continue;
|
||||
__skb_unlink(skb, &mp->frags);
|
||||
isdn_ppp_mp_free_skb(mp, skb);
|
||||
if( from )
|
||||
while (from != to) {
|
||||
struct sk_buff * next = from->next;
|
||||
isdn_ppp_mp_free_skb(mp, from);
|
||||
from = next;
|
||||
}
|
||||
}
|
||||
return from;
|
||||
}
|
||||
|
||||
static unsigned int calc_tot_len(struct sk_buff_head *queue,
|
||||
struct sk_buff *from, struct sk_buff *to)
|
||||
void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp,
|
||||
struct sk_buff * from, struct sk_buff * to )
|
||||
{
|
||||
unsigned int tot_len = 0;
|
||||
struct sk_buff *skb;
|
||||
int found_start = 0;
|
||||
|
||||
skb_queue_walk(queue, skb) {
|
||||
if (skb == from)
|
||||
found_start = 1;
|
||||
if (!found_start)
|
||||
continue;
|
||||
tot_len += skb->len - MP_HEADER_LEN;
|
||||
if (skb == to)
|
||||
break;
|
||||
}
|
||||
return tot_len;
|
||||
}
|
||||
|
||||
/* Reassemble packet using fragments in the reassembly queue from
|
||||
* 'from' until 'to', inclusive.
|
||||
*/
|
||||
static void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp,
|
||||
struct sk_buff *from, struct sk_buff *to,
|
||||
u32 lastseq)
|
||||
{
|
||||
ippp_bundle *mp = net_dev->pb;
|
||||
unsigned int tot_len;
|
||||
struct sk_buff *skb;
|
||||
ippp_bundle * mp = net_dev->pb;
|
||||
int proto;
|
||||
struct sk_buff * skb;
|
||||
unsigned int tot_len;
|
||||
|
||||
if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) {
|
||||
printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n",
|
||||
__func__, lp->ppp_slot);
|
||||
return;
|
||||
}
|
||||
|
||||
tot_len = calc_tot_len(&mp->frags, from, to);
|
||||
|
||||
if (MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG)) {
|
||||
if (ippp_table[lp->ppp_slot]->debug & 0x40)
|
||||
if( MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG) ) {
|
||||
if( ippp_table[lp->ppp_slot]->debug & 0x40 )
|
||||
printk(KERN_DEBUG "isdn_mppp: reassembly: frame %d, "
|
||||
"len %d\n", MP_SEQ(from), from->len);
|
||||
"len %d\n", MP_SEQ(from), from->len );
|
||||
skb = from;
|
||||
skb_pull(skb, MP_HEADER_LEN);
|
||||
__skb_unlink(skb, &mp->frags);
|
||||
mp->frames--;
|
||||
} else {
|
||||
struct sk_buff *walk, *tmp;
|
||||
int found_start = 0;
|
||||
struct sk_buff * frag;
|
||||
int n;
|
||||
|
||||
if (ippp_table[lp->ppp_slot]->debug & 0x40)
|
||||
for(tot_len=n=0, frag=from; frag != to; frag=frag->next, n++)
|
||||
tot_len += frag->len - MP_HEADER_LEN;
|
||||
|
||||
if( ippp_table[lp->ppp_slot]->debug & 0x40 )
|
||||
printk(KERN_DEBUG"isdn_mppp: reassembling frames %d "
|
||||
"to %d, len %d\n", MP_SEQ(from), lastseq,
|
||||
tot_len);
|
||||
|
||||
skb = dev_alloc_skb(tot_len);
|
||||
if (!skb)
|
||||
"to %d, len %d\n", MP_SEQ(from),
|
||||
(MP_SEQ(from)+n-1) & MP_LONGSEQ_MASK, tot_len );
|
||||
if( (skb = dev_alloc_skb(tot_len)) == NULL ) {
|
||||
printk(KERN_ERR "isdn_mppp: cannot allocate sk buff "
|
||||
"of size %d\n", tot_len);
|
||||
"of size %d\n", tot_len);
|
||||
isdn_ppp_mp_discard(mp, from, to);
|
||||
return;
|
||||
}
|
||||
|
||||
found_start = 0;
|
||||
skb_queue_walk_safe(&mp->frags, walk, tmp) {
|
||||
if (walk == from)
|
||||
found_start = 1;
|
||||
if (!found_start)
|
||||
continue;
|
||||
while( from != to ) {
|
||||
unsigned int len = from->len - MP_HEADER_LEN;
|
||||
|
||||
if (skb) {
|
||||
unsigned int len = walk->len - MP_HEADER_LEN;
|
||||
skb_copy_from_linear_data_offset(walk, MP_HEADER_LEN,
|
||||
skb_put(skb, len),
|
||||
len);
|
||||
}
|
||||
__skb_unlink(walk, &mp->frags);
|
||||
isdn_ppp_mp_free_skb(mp, walk);
|
||||
|
||||
if (walk == to)
|
||||
break;
|
||||
skb_copy_from_linear_data_offset(from, MP_HEADER_LEN,
|
||||
skb_put(skb,len),
|
||||
len);
|
||||
frag = from->next;
|
||||
isdn_ppp_mp_free_skb(mp, from);
|
||||
from = frag;
|
||||
}
|
||||
}
|
||||
if (!skb)
|
||||
return;
|
||||
|
||||
proto = isdn_ppp_strip_proto(skb);
|
||||
isdn_ppp_push_higher(net_dev, lp, skb, proto);
|
||||
}
|
||||
|
||||
static void isdn_ppp_mp_free_skb(ippp_bundle *mp, struct sk_buff *skb)
|
||||
static void isdn_ppp_mp_free_skb(ippp_bundle * mp, struct sk_buff * skb)
|
||||
{
|
||||
dev_kfree_skb(skb);
|
||||
mp->frames--;
|
||||
|
|
|
@ -78,6 +78,8 @@ static int __devinit create_gpio_led(const struct gpio_led *template,
|
|||
{
|
||||
int ret, state;
|
||||
|
||||
led_dat->gpio = -1;
|
||||
|
||||
/* skip leds that aren't available */
|
||||
if (!gpio_is_valid(template->gpio)) {
|
||||
printk(KERN_INFO "Skipping unavailable LED gpio %d (%s)\n",
|
||||
|
|
|
@ -944,6 +944,14 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
|
|||
desc->raid_disk < mddev->raid_disks */) {
|
||||
set_bit(In_sync, &rdev->flags);
|
||||
rdev->raid_disk = desc->raid_disk;
|
||||
} else if (desc->state & (1<<MD_DISK_ACTIVE)) {
|
||||
/* active but not in sync implies recovery up to
|
||||
* reshape position. We don't know exactly where
|
||||
* that is, so set to zero for now */
|
||||
if (mddev->minor_version >= 91) {
|
||||
rdev->recovery_offset = 0;
|
||||
rdev->raid_disk = desc->raid_disk;
|
||||
}
|
||||
}
|
||||
if (desc->state & (1<<MD_DISK_WRITEMOSTLY))
|
||||
set_bit(WriteMostly, &rdev->flags);
|
||||
|
@ -1032,8 +1040,19 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
|
|||
list_for_each_entry(rdev2, &mddev->disks, same_set) {
|
||||
mdp_disk_t *d;
|
||||
int desc_nr;
|
||||
if (rdev2->raid_disk >= 0 && test_bit(In_sync, &rdev2->flags)
|
||||
&& !test_bit(Faulty, &rdev2->flags))
|
||||
int is_active = test_bit(In_sync, &rdev2->flags);
|
||||
|
||||
if (rdev2->raid_disk >= 0 &&
|
||||
sb->minor_version >= 91)
|
||||
/* we have nowhere to store the recovery_offset,
|
||||
* but if it is not below the reshape_position,
|
||||
* we can piggy-back on that.
|
||||
*/
|
||||
is_active = 1;
|
||||
if (rdev2->raid_disk < 0 ||
|
||||
test_bit(Faulty, &rdev2->flags))
|
||||
is_active = 0;
|
||||
if (is_active)
|
||||
desc_nr = rdev2->raid_disk;
|
||||
else
|
||||
desc_nr = next_spare++;
|
||||
|
@ -1043,16 +1062,16 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
|
|||
d->number = rdev2->desc_nr;
|
||||
d->major = MAJOR(rdev2->bdev->bd_dev);
|
||||
d->minor = MINOR(rdev2->bdev->bd_dev);
|
||||
if (rdev2->raid_disk >= 0 && test_bit(In_sync, &rdev2->flags)
|
||||
&& !test_bit(Faulty, &rdev2->flags))
|
||||
if (is_active)
|
||||
d->raid_disk = rdev2->raid_disk;
|
||||
else
|
||||
d->raid_disk = rdev2->desc_nr; /* compatibility */
|
||||
if (test_bit(Faulty, &rdev2->flags))
|
||||
d->state = (1<<MD_DISK_FAULTY);
|
||||
else if (test_bit(In_sync, &rdev2->flags)) {
|
||||
else if (is_active) {
|
||||
d->state = (1<<MD_DISK_ACTIVE);
|
||||
d->state |= (1<<MD_DISK_SYNC);
|
||||
if (test_bit(In_sync, &rdev2->flags))
|
||||
d->state |= (1<<MD_DISK_SYNC);
|
||||
active++;
|
||||
working++;
|
||||
} else {
|
||||
|
@ -1382,8 +1401,6 @@ static void super_1_sync(mddev_t *mddev, mdk_rdev_t *rdev)
|
|||
|
||||
if (rdev->raid_disk >= 0 &&
|
||||
!test_bit(In_sync, &rdev->flags)) {
|
||||
if (mddev->curr_resync_completed > rdev->recovery_offset)
|
||||
rdev->recovery_offset = mddev->curr_resync_completed;
|
||||
if (rdev->recovery_offset > 0) {
|
||||
sb->feature_map |=
|
||||
cpu_to_le32(MD_FEATURE_RECOVERY_OFFSET);
|
||||
|
@ -1917,6 +1934,14 @@ static void sync_sbs(mddev_t * mddev, int nospares)
|
|||
*/
|
||||
mdk_rdev_t *rdev;
|
||||
|
||||
/* First make sure individual recovery_offsets are correct */
|
||||
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
||||
if (rdev->raid_disk >= 0 &&
|
||||
!test_bit(In_sync, &rdev->flags) &&
|
||||
mddev->curr_resync_completed > rdev->recovery_offset)
|
||||
rdev->recovery_offset = mddev->curr_resync_completed;
|
||||
|
||||
}
|
||||
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
||||
if (rdev->sb_events == mddev->events ||
|
||||
(nospares &&
|
||||
|
|
|
@ -4823,11 +4823,40 @@ static raid5_conf_t *setup_conf(mddev_t *mddev)
|
|||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
|
||||
static int only_parity(int raid_disk, int algo, int raid_disks, int max_degraded)
|
||||
{
|
||||
switch (algo) {
|
||||
case ALGORITHM_PARITY_0:
|
||||
if (raid_disk < max_degraded)
|
||||
return 1;
|
||||
break;
|
||||
case ALGORITHM_PARITY_N:
|
||||
if (raid_disk >= raid_disks - max_degraded)
|
||||
return 1;
|
||||
break;
|
||||
case ALGORITHM_PARITY_0_6:
|
||||
if (raid_disk == 0 ||
|
||||
raid_disk == raid_disks - 1)
|
||||
return 1;
|
||||
break;
|
||||
case ALGORITHM_LEFT_ASYMMETRIC_6:
|
||||
case ALGORITHM_RIGHT_ASYMMETRIC_6:
|
||||
case ALGORITHM_LEFT_SYMMETRIC_6:
|
||||
case ALGORITHM_RIGHT_SYMMETRIC_6:
|
||||
if (raid_disk == raid_disks - 1)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int run(mddev_t *mddev)
|
||||
{
|
||||
raid5_conf_t *conf;
|
||||
int working_disks = 0, chunk_size;
|
||||
int dirty_parity_disks = 0;
|
||||
mdk_rdev_t *rdev;
|
||||
sector_t reshape_offset = 0;
|
||||
|
||||
if (mddev->recovery_cp != MaxSector)
|
||||
printk(KERN_NOTICE "raid5: %s is not clean"
|
||||
|
@ -4861,6 +4890,7 @@ static int run(mddev_t *mddev)
|
|||
"on a stripe boundary\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
reshape_offset = here_new * mddev->new_chunk_sectors;
|
||||
/* here_new is the stripe we will write to */
|
||||
here_old = mddev->reshape_position;
|
||||
sector_div(here_old, mddev->chunk_sectors *
|
||||
|
@ -4916,10 +4946,51 @@ static int run(mddev_t *mddev)
|
|||
/*
|
||||
* 0 for a fully functional array, 1 or 2 for a degraded array.
|
||||
*/
|
||||
list_for_each_entry(rdev, &mddev->disks, same_set)
|
||||
if (rdev->raid_disk >= 0 &&
|
||||
test_bit(In_sync, &rdev->flags))
|
||||
list_for_each_entry(rdev, &mddev->disks, same_set) {
|
||||
if (rdev->raid_disk < 0)
|
||||
continue;
|
||||
if (test_bit(In_sync, &rdev->flags))
|
||||
working_disks++;
|
||||
/* This disc is not fully in-sync. However if it
|
||||
* just stored parity (beyond the recovery_offset),
|
||||
* when we don't need to be concerned about the
|
||||
* array being dirty.
|
||||
* When reshape goes 'backwards', we never have
|
||||
* partially completed devices, so we only need
|
||||
* to worry about reshape going forwards.
|
||||
*/
|
||||
/* Hack because v0.91 doesn't store recovery_offset properly. */
|
||||
if (mddev->major_version == 0 &&
|
||||
mddev->minor_version > 90)
|
||||
rdev->recovery_offset = reshape_offset;
|
||||
|
||||
printk("%d: w=%d pa=%d pr=%d m=%d a=%d r=%d op1=%d op2=%d\n",
|
||||
rdev->raid_disk, working_disks, conf->prev_algo,
|
||||
conf->previous_raid_disks, conf->max_degraded,
|
||||
conf->algorithm, conf->raid_disks,
|
||||
only_parity(rdev->raid_disk,
|
||||
conf->prev_algo,
|
||||
conf->previous_raid_disks,
|
||||
conf->max_degraded),
|
||||
only_parity(rdev->raid_disk,
|
||||
conf->algorithm,
|
||||
conf->raid_disks,
|
||||
conf->max_degraded));
|
||||
if (rdev->recovery_offset < reshape_offset) {
|
||||
/* We need to check old and new layout */
|
||||
if (!only_parity(rdev->raid_disk,
|
||||
conf->algorithm,
|
||||
conf->raid_disks,
|
||||
conf->max_degraded))
|
||||
continue;
|
||||
}
|
||||
if (!only_parity(rdev->raid_disk,
|
||||
conf->prev_algo,
|
||||
conf->previous_raid_disks,
|
||||
conf->max_degraded))
|
||||
continue;
|
||||
dirty_parity_disks++;
|
||||
}
|
||||
|
||||
mddev->degraded = (max(conf->raid_disks, conf->previous_raid_disks)
|
||||
- working_disks);
|
||||
|
@ -4935,7 +5006,7 @@ static int run(mddev_t *mddev)
|
|||
mddev->dev_sectors &= ~(mddev->chunk_sectors - 1);
|
||||
mddev->resync_max_sectors = mddev->dev_sectors;
|
||||
|
||||
if (mddev->degraded > 0 &&
|
||||
if (mddev->degraded > dirty_parity_disks &&
|
||||
mddev->recovery_cp != MaxSector) {
|
||||
if (mddev->ok_start_degraded)
|
||||
printk(KERN_WARNING
|
||||
|
@ -5361,9 +5432,11 @@ static int raid5_start_reshape(mddev_t *mddev)
|
|||
!test_bit(Faulty, &rdev->flags)) {
|
||||
if (raid5_add_disk(mddev, rdev) == 0) {
|
||||
char nm[20];
|
||||
set_bit(In_sync, &rdev->flags);
|
||||
if (rdev->raid_disk >= conf->previous_raid_disks)
|
||||
set_bit(In_sync, &rdev->flags);
|
||||
else
|
||||
rdev->recovery_offset = 0;
|
||||
added_devices++;
|
||||
rdev->recovery_offset = 0;
|
||||
sprintf(nm, "rd%d", rdev->raid_disk);
|
||||
if (sysfs_create_link(&mddev->kobj,
|
||||
&rdev->kobj, nm))
|
||||
|
|
|
@ -1529,6 +1529,7 @@ static int mmc_omap_remove(struct platform_device *pdev)
|
|||
host->pdata->cleanup(&pdev->dev);
|
||||
|
||||
mmc_omap_fclk_enable(host, 0);
|
||||
free_irq(host->irq, host);
|
||||
clk_put(host->fclk);
|
||||
clk_disable(host->iclk);
|
||||
clk_put(host->iclk);
|
||||
|
|
|
@ -209,8 +209,8 @@ static int sa1100_probe_subdev(struct sa_subdev_info *subdev, struct resource *r
|
|||
}
|
||||
subdev->mtd->owner = THIS_MODULE;
|
||||
|
||||
printk(KERN_INFO "SA1100 flash: CFI device at 0x%08lx, %dMiB, "
|
||||
"%d-bit\n", phys, subdev->mtd->size >> 20,
|
||||
printk(KERN_INFO "SA1100 flash: CFI device at 0x%08lx, %uMiB, %d-bit\n",
|
||||
phys, (unsigned)(subdev->mtd->size >> 20),
|
||||
subdev->map.bankwidth * 8);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -35,66 +35,16 @@ config CAN_CALC_BITTIMING
|
|||
arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw".
|
||||
If unsure, say Y.
|
||||
|
||||
config CAN_SJA1000
|
||||
depends on CAN_DEV && HAS_IOMEM
|
||||
tristate "Philips SJA1000"
|
||||
---help---
|
||||
Driver for the SJA1000 CAN controllers from Philips or NXP
|
||||
|
||||
config CAN_SJA1000_ISA
|
||||
depends on CAN_SJA1000 && ISA
|
||||
tristate "ISA Bus based legacy SJA1000 driver"
|
||||
---help---
|
||||
This driver adds legacy support for SJA1000 chips connected to
|
||||
the ISA bus using I/O port, memory mapped or indirect access.
|
||||
|
||||
config CAN_SJA1000_PLATFORM
|
||||
depends on CAN_SJA1000
|
||||
tristate "Generic Platform Bus based SJA1000 driver"
|
||||
---help---
|
||||
This driver adds support for the SJA1000 chips connected to
|
||||
the "platform bus" (Linux abstraction for directly to the
|
||||
processor attached devices). Which can be found on various
|
||||
boards from Phytec (http://www.phytec.de) like the PCM027,
|
||||
PCM038.
|
||||
|
||||
config CAN_SJA1000_OF_PLATFORM
|
||||
depends on CAN_SJA1000 && PPC_OF
|
||||
tristate "Generic OF Platform Bus based SJA1000 driver"
|
||||
---help---
|
||||
This driver adds support for the SJA1000 chips connected to
|
||||
the OpenFirmware "platform bus" found on embedded systems with
|
||||
OpenFirmware bindings, e.g. if you have a PowerPC based system
|
||||
you may want to enable this option.
|
||||
|
||||
config CAN_EMS_PCI
|
||||
tristate "EMS CPC-PCI, CPC-PCIe and CPC-104P Card"
|
||||
depends on PCI && CAN_SJA1000
|
||||
---help---
|
||||
This driver is for the one, two or four channel CPC-PCI,
|
||||
CPC-PCIe and CPC-104P cards from EMS Dr. Thomas Wuensche
|
||||
(http://www.ems-wuensche.de).
|
||||
|
||||
config CAN_EMS_USB
|
||||
tristate "EMS CPC-USB/ARM7 CAN/USB interface"
|
||||
depends on USB && CAN_DEV
|
||||
---help---
|
||||
This driver is for the one channel CPC-USB/ARM7 CAN/USB interface
|
||||
from from EMS Dr. Thomas Wuensche (http://www.ems-wuensche.de).
|
||||
|
||||
config CAN_KVASER_PCI
|
||||
tristate "Kvaser PCIcanx and Kvaser PCIcan PCI Cards"
|
||||
depends on PCI && CAN_SJA1000
|
||||
---help---
|
||||
This driver is for the the PCIcanx and PCIcan cards (1, 2 or
|
||||
4 channel) from Kvaser (http://www.kvaser.com).
|
||||
|
||||
config CAN_AT91
|
||||
tristate "Atmel AT91 onchip CAN controller"
|
||||
depends on CAN && CAN_DEV && ARCH_AT91SAM9263
|
||||
depends on CAN_DEV && ARCH_AT91SAM9263
|
||||
---help---
|
||||
This is a driver for the SoC CAN controller in Atmel's AT91SAM9263.
|
||||
|
||||
source "drivers/net/can/sja1000/Kconfig"
|
||||
|
||||
source "drivers/net/can/usb/Kconfig"
|
||||
|
||||
config CAN_DEBUG_DEVICES
|
||||
bool "CAN devices debugging messages"
|
||||
depends on CAN
|
||||
|
|
|
@ -629,6 +629,11 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
|
|||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
static size_t can_get_xstats_size(const struct net_device *dev)
|
||||
{
|
||||
return sizeof(struct can_device_stats);
|
||||
}
|
||||
|
||||
static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev)
|
||||
{
|
||||
struct can_priv *priv = netdev_priv(dev);
|
||||
|
@ -657,6 +662,7 @@ static struct rtnl_link_ops can_link_ops __read_mostly = {
|
|||
.changelink = can_changelink,
|
||||
.get_size = can_get_size,
|
||||
.fill_info = can_fill_info,
|
||||
.get_xstats_size = can_get_xstats_size,
|
||||
.fill_xstats = can_fill_xstats,
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
menuconfig CAN_SJA1000
|
||||
tristate "Philips/NXP SJA1000 devices"
|
||||
depends on CAN_DEV && HAS_IOMEM
|
||||
|
||||
if CAN_SJA1000
|
||||
|
||||
config CAN_SJA1000_ISA
|
||||
tristate "ISA Bus based legacy SJA1000 driver"
|
||||
depends on ISA
|
||||
---help---
|
||||
This driver adds legacy support for SJA1000 chips connected to
|
||||
the ISA bus using I/O port, memory mapped or indirect access.
|
||||
|
||||
config CAN_SJA1000_PLATFORM
|
||||
tristate "Generic Platform Bus based SJA1000 driver"
|
||||
---help---
|
||||
This driver adds support for the SJA1000 chips connected to
|
||||
the "platform bus" (Linux abstraction for directly to the
|
||||
processor attached devices). Which can be found on various
|
||||
boards from Phytec (http://www.phytec.de) like the PCM027,
|
||||
PCM038.
|
||||
|
||||
config CAN_SJA1000_OF_PLATFORM
|
||||
tristate "Generic OF Platform Bus based SJA1000 driver"
|
||||
depends on PPC_OF
|
||||
---help---
|
||||
This driver adds support for the SJA1000 chips connected to
|
||||
the OpenFirmware "platform bus" found on embedded systems with
|
||||
OpenFirmware bindings, e.g. if you have a PowerPC based system
|
||||
you may want to enable this option.
|
||||
|
||||
config CAN_EMS_PCI
|
||||
tristate "EMS CPC-PCI, CPC-PCIe and CPC-104P Card"
|
||||
depends on PCI
|
||||
---help---
|
||||
This driver is for the one, two or four channel CPC-PCI,
|
||||
CPC-PCIe and CPC-104P cards from EMS Dr. Thomas Wuensche
|
||||
(http://www.ems-wuensche.de).
|
||||
|
||||
config CAN_KVASER_PCI
|
||||
tristate "Kvaser PCIcanx and Kvaser PCIcan PCI Cards"
|
||||
depends on PCI
|
||||
---help---
|
||||
This driver is for the the PCIcanx and PCIcan cards (1, 2 or
|
||||
4 channel) from Kvaser (http://www.kvaser.com).
|
||||
|
||||
endif
|
|
@ -0,0 +1,10 @@
|
|||
menu "CAN USB interfaces"
|
||||
depends on USB && CAN_DEV
|
||||
|
||||
config CAN_EMS_USB
|
||||
tristate "EMS CPC-USB/ARM7 CAN/USB interface"
|
||||
---help---
|
||||
This driver is for the one channel CPC-USB/ARM7 CAN/USB interface
|
||||
from from EMS Dr. Thomas Wuensche (http://www.ems-wuensche.de).
|
||||
|
||||
endmenu
|
|
@ -3,3 +3,5 @@
|
|||
#
|
||||
|
||||
obj-$(CONFIG_CAN_EMS_USB) += ems_usb.o
|
||||
|
||||
ccflags-$(CONFIG_CAN_DEBUG_DEVICES) := -DDEBUG
|
||||
|
|
|
@ -879,7 +879,7 @@ static struct sk_buff *get_packet_pg(struct adapter *adap, struct sge_fl *fl,
|
|||
pci_dma_sync_single_for_cpu(adap->pdev, dma_addr, len,
|
||||
PCI_DMA_FROMDEVICE);
|
||||
(*sd->pg_chunk.p_cnt)--;
|
||||
if (!*sd->pg_chunk.p_cnt)
|
||||
if (!*sd->pg_chunk.p_cnt && sd->pg_chunk.page != fl->pg_chunk.page)
|
||||
pci_unmap_page(adap->pdev,
|
||||
sd->pg_chunk.mapping,
|
||||
fl->alloc_size,
|
||||
|
@ -2088,7 +2088,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
|||
PCI_DMA_FROMDEVICE);
|
||||
|
||||
(*sd->pg_chunk.p_cnt)--;
|
||||
if (!*sd->pg_chunk.p_cnt)
|
||||
if (!*sd->pg_chunk.p_cnt && sd->pg_chunk.page != fl->pg_chunk.page)
|
||||
pci_unmap_page(adap->pdev,
|
||||
sd->pg_chunk.mapping,
|
||||
fl->alloc_size,
|
||||
|
|
|
@ -2140,9 +2140,6 @@ static int emac_poll(struct napi_struct *napi, int budget)
|
|||
u32 status = 0;
|
||||
u32 num_pkts = 0;
|
||||
|
||||
if (!netif_running(ndev))
|
||||
return 0;
|
||||
|
||||
/* Check interrupt vectors and call packet processing */
|
||||
status = emac_read(EMAC_MACINVECTOR);
|
||||
|
||||
|
|
|
@ -5821,10 +5821,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
|
|||
dev->dev_addr);
|
||||
dev_printk(KERN_ERR, &pci_dev->dev,
|
||||
"Please complain to your hardware vendor. Switching to a random MAC.\n");
|
||||
dev->dev_addr[0] = 0x00;
|
||||
dev->dev_addr[1] = 0x00;
|
||||
dev->dev_addr[2] = 0x6c;
|
||||
get_random_bytes(&dev->dev_addr[3], 3);
|
||||
random_ether_addr(dev->dev_addr);
|
||||
}
|
||||
|
||||
dprintk(KERN_DEBUG "%s: MAC Address %pM\n",
|
||||
|
|
|
@ -263,8 +263,8 @@ struct emac_regs {
|
|||
|
||||
|
||||
/* EMACx_TRTR */
|
||||
#define EMAC_TRTR_SHIFT_EMAC4 27
|
||||
#define EMAC_TRTR_SHIFT 24
|
||||
#define EMAC_TRTR_SHIFT_EMAC4 24
|
||||
#define EMAC_TRTR_SHIFT 27
|
||||
|
||||
/* EMAC specific TX descriptor control fields (write access) */
|
||||
#define EMAC_TX_CTRL_GFCS 0x0200
|
||||
|
|
|
@ -5994,6 +5994,7 @@ static pci_ers_result_t ixgbe_io_slot_reset(struct pci_dev *pdev)
|
|||
} else {
|
||||
pci_set_master(pdev);
|
||||
pci_restore_state(pdev);
|
||||
pci_save_state(pdev);
|
||||
|
||||
pci_wake_from_d3(pdev, false);
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ static struct mii_bus * __devinit mdio_gpio_bus_init(struct device *dev,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void __devinit mdio_gpio_bus_deinit(struct device *dev)
|
||||
static void mdio_gpio_bus_deinit(struct device *dev)
|
||||
{
|
||||
struct mii_bus *bus = dev_get_drvdata(dev);
|
||||
struct mdio_gpio_info *bitbang = bus->priv;
|
||||
|
|
|
@ -1944,8 +1944,15 @@ ppp_receive_mp_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
|
|||
}
|
||||
|
||||
/* Pull completed packets off the queue and receive them. */
|
||||
while ((skb = ppp_mp_reconstruct(ppp)))
|
||||
ppp_receive_nonmp_frame(ppp, skb);
|
||||
while ((skb = ppp_mp_reconstruct(ppp))) {
|
||||
if (pskb_may_pull(skb, 2))
|
||||
ppp_receive_nonmp_frame(ppp, skb);
|
||||
else {
|
||||
++ppp->dev->stats.rx_length_errors;
|
||||
kfree_skb(skb);
|
||||
ppp_receive_error(ppp);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
|
|
|
@ -1085,7 +1085,7 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
|
|||
int bar = 0;
|
||||
u16 *adrp;
|
||||
|
||||
printk(KERN_INFO "%s\n", version);
|
||||
printk("%s\n", version);
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
if (err)
|
||||
|
|
|
@ -3243,9 +3243,9 @@ static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
|
|||
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
|
||||
struct net_device *dev)
|
||||
{
|
||||
unsigned int mtu = dev->mtu;
|
||||
unsigned int max_frame = dev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
|
||||
|
||||
tp->rx_buf_sz = (mtu > RX_BUF_SIZE) ? mtu + ETH_HLEN + 8 : RX_BUF_SIZE;
|
||||
tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
|
||||
}
|
||||
|
||||
static int rtl8169_open(struct net_device *dev)
|
||||
|
|
|
@ -3494,6 +3494,7 @@ static void s2io_reset(struct s2io_nic *sp)
|
|||
|
||||
/* Restore the PCI state saved during initialization. */
|
||||
pci_restore_state(sp->pdev);
|
||||
pci_save_state(sp->pdev);
|
||||
pci_read_config_word(sp->pdev, 0x2, &val16);
|
||||
if (check_pci_device_id(val16) != (u16)PCI_ANY_ID)
|
||||
break;
|
||||
|
|
|
@ -986,7 +986,7 @@ static int smsc911x_poll(struct napi_struct *napi, int budget)
|
|||
struct net_device *dev = pdata->dev;
|
||||
int npackets = 0;
|
||||
|
||||
while (likely(netif_running(dev)) && (npackets < budget)) {
|
||||
while (npackets < budget) {
|
||||
unsigned int pktlength;
|
||||
unsigned int pktwords;
|
||||
struct sk_buff *skb;
|
||||
|
|
|
@ -2063,7 +2063,15 @@ static int gem_check_invariants(struct gem *gp)
|
|||
mif_cfg &= ~MIF_CFG_PSELECT;
|
||||
writel(mif_cfg, gp->regs + MIF_CFG);
|
||||
} else {
|
||||
gp->phy_type = phy_serialink;
|
||||
#ifdef CONFIG_SPARC
|
||||
const char *p;
|
||||
|
||||
p = of_get_property(gp->of_node, "shared-pins", NULL);
|
||||
if (p && !strcmp(p, "serdes"))
|
||||
gp->phy_type = phy_serdes;
|
||||
else
|
||||
#endif
|
||||
gp->phy_type = phy_serialink;
|
||||
}
|
||||
if (gp->phy_type == phy_mii_mdio1 ||
|
||||
gp->phy_type == phy_mii_mdio0) {
|
||||
|
|
|
@ -1125,7 +1125,6 @@ ath5k_mode_setup(struct ath5k_softc *sc)
|
|||
/* configure operational mode */
|
||||
ath5k_hw_set_opmode(ah);
|
||||
|
||||
ath5k_hw_set_mcast_filter(ah, 0, 0);
|
||||
ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "RX filter 0x%x\n", rfilt);
|
||||
}
|
||||
|
||||
|
|
|
@ -63,12 +63,16 @@ static const struct pci_device_id ath5k_led_devices[] = {
|
|||
{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0422), ATH_LED(1, 1) },
|
||||
/* E-machines E510 (tuliom@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0428), ATH_LED(3, 0) },
|
||||
/* BenQ Joybook R55v (nowymarluk@wp.pl) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0100), ATH_LED(1, 0) },
|
||||
/* Acer Extensa 5620z (nekoreeve@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0105), ATH_LED(3, 0) },
|
||||
/* Fukato Datacask Jupiter 1014a (mrb74@gmx.at) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_AZWAVE, 0x1026), ATH_LED(3, 0) },
|
||||
/* IBM ThinkPad AR5BXB6 (legovini@spiro.fisica.unipd.it) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_IBM, 0x058a), ATH_LED(1, 0) },
|
||||
/* HP Compaq CQ60-206US (ddreggors@jumptv.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137a), ATH_LED(3, 1) },
|
||||
/* HP Compaq C700 (nitrousnrg@gmail.com) */
|
||||
{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) },
|
||||
/* IBM-specific AR5212 (all others) */
|
||||
|
|
|
@ -4521,9 +4521,8 @@ static int b43_op_beacon_set_tim(struct ieee80211_hw *hw,
|
|||
{
|
||||
struct b43_wl *wl = hw_to_b43_wl(hw);
|
||||
|
||||
mutex_lock(&wl->mutex);
|
||||
/* FIXME: add locking */
|
||||
b43_update_templates(wl);
|
||||
mutex_unlock(&wl->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue