mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	Merge commit 'origin/master' into next
This commit is contained in:
		
						commit
						1e43bee9c7
					
				
					 237 changed files with 2255 additions and 1580 deletions
				
			
		|  | @ -20,15 +20,16 @@ Lots of code taken from ext3 and other projects. | ||||||
| Authors in alphabetical order: | Authors in alphabetical order: | ||||||
| Joel Becker   <joel.becker@oracle.com> | Joel Becker   <joel.becker@oracle.com> | ||||||
| Zach Brown    <zach.brown@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> | Kurt Hackel   <kurt.hackel@oracle.com> | ||||||
|  | Tao Ma        <tao.ma@oracle.com> | ||||||
| Sunil Mushran <sunil.mushran@oracle.com> | Sunil Mushran <sunil.mushran@oracle.com> | ||||||
| Manish Singh  <manish.singh@oracle.com> | Manish Singh  <manish.singh@oracle.com> | ||||||
|  | Tiger Yang    <tiger.yang@oracle.com> | ||||||
| 
 | 
 | ||||||
| Caveats | Caveats | ||||||
| ======= | ======= | ||||||
| Features which OCFS2 does not support yet: | Features which OCFS2 does not support yet: | ||||||
| 	- quotas |  | ||||||
| 	- Directory change notification (F_NOTIFY) | 	- Directory change notification (F_NOTIFY) | ||||||
| 	- Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease) | 	- 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. | 			performance. | ||||||
| localalloc=8(*)		Allows custom localalloc size in MB. If the value is too | localalloc=8(*)		Allows custom localalloc size in MB. If the value is too | ||||||
| 			large, the fs will silently revert it to the default. | 			large, the fs will silently revert it to the default. | ||||||
| 			Localalloc is not enabled for local mounts. |  | ||||||
| localflocks		This disables cluster aware flock. | localflocks		This disables cluster aware flock. | ||||||
| inode64			Indicates that Ocfs2 is allowed to create inodes at | inode64			Indicates that Ocfs2 is allowed to create inodes at | ||||||
| 			any location in the filesystem, including those which | 			any location in the filesystem, including those which | ||||||
|  |  | ||||||
|  | @ -218,7 +218,7 @@ static void fatal(const char *x, ...) | ||||||
| 	exit(EXIT_FAILURE); | 	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); | 	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> | M:	Latchesar Ionkov <lucho@ionkov.net> | ||||||
| L:	v9fs-developer@lists.sourceforge.net | L:	v9fs-developer@lists.sourceforge.net | ||||||
| W:	http://swik.net/v9fs | 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 | S:	Maintained | ||||||
| F:	Documentation/filesystems/9p.txt | F:	Documentation/filesystems/9p.txt | ||||||
| F:	fs/9p/ | F:	fs/9p/ | ||||||
|  | @ -906,7 +906,6 @@ M:	Karol Kozimor <sziwan@users.sourceforge.net> | ||||||
| L:	acpi4asus-user@lists.sourceforge.net | L:	acpi4asus-user@lists.sourceforge.net | ||||||
| W:	http://acpi4asus.sf.net | W:	http://acpi4asus.sf.net | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F:	arch/x86/kernel/acpi/boot.c |  | ||||||
| F:	drivers/platform/x86/asus_acpi.c | F:	drivers/platform/x86/asus_acpi.c | ||||||
| 
 | 
 | ||||||
| ASUS ASB100 HARDWARE MONITOR DRIVER | ASUS ASB100 HARDWARE MONITOR DRIVER | ||||||
|  | @ -1245,11 +1244,10 @@ S:	Supported | ||||||
| F:	drivers/net/tg3.* | F:	drivers/net/tg3.* | ||||||
| 
 | 
 | ||||||
| BROCADE BFA FC SCSI DRIVER | BROCADE BFA FC SCSI DRIVER | ||||||
| P:      Jing Huang | M:	Jing Huang <huangj@brocade.com> | ||||||
| M:      huangj@brocade.com | L:	linux-scsi@vger.kernel.org | ||||||
| L:      linux-scsi@vger.kernel.org | S:	Supported | ||||||
| S:      Supported | F:	drivers/scsi/bfa/ | ||||||
| F:      drivers/scsi/bfa/ |  | ||||||
| 
 | 
 | ||||||
| BSG (block layer generic sg v4 driver) | BSG (block layer generic sg v4 driver) | ||||||
| M:	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | M:	FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||||||
|  | @ -2825,7 +2823,7 @@ F:	drivers/infiniband/hw/ipath/ | ||||||
| 
 | 
 | ||||||
| IPMI SUBSYSTEM | IPMI SUBSYSTEM | ||||||
| M:	Corey Minyard <minyard@acm.org> | 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/ | W:	http://openipmi.sourceforge.net/ | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	Documentation/IPMI.txt | F:	Documentation/IPMI.txt | ||||||
|  | @ -3086,9 +3084,13 @@ F:	kernel/kgdb.c | ||||||
| 
 | 
 | ||||||
| KMEMCHECK | KMEMCHECK | ||||||
| M:	Vegard Nossum <vegardno@ifi.uio.no> | M:	Vegard Nossum <vegardno@ifi.uio.no> | ||||||
| P	Pekka Enberg | M:	Pekka Enberg <penberg@cs.helsinki.fi> | ||||||
| M:	penberg@cs.helsinki.fi |  | ||||||
| S:	Maintained | 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 | KMEMLEAK | ||||||
| M:	Catalin Marinas <catalin.marinas@arm.com> | M:	Catalin Marinas <catalin.marinas@arm.com> | ||||||
|  | @ -3618,7 +3620,7 @@ L:	netfilter@vger.kernel.org | ||||||
| L:	coreteam@netfilter.org | L:	coreteam@netfilter.org | ||||||
| W:	http://www.netfilter.org/ | W:	http://www.netfilter.org/ | ||||||
| W:	http://www.iptables.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 | S:	Supported | ||||||
| F:	include/linux/netfilter* | F:	include/linux/netfilter* | ||||||
| F:	include/linux/netfilter/ | F:	include/linux/netfilter/ | ||||||
|  | @ -4330,6 +4332,8 @@ F:	drivers/video/aty/aty128fb.c | ||||||
| 
 | 
 | ||||||
| RALINK RT2X00 WIRELESS LAN DRIVER | RALINK RT2X00 WIRELESS LAN DRIVER | ||||||
| P:	rt2x00 project | P:	rt2x00 project | ||||||
|  | M:	Ivo van Doorn <IvDoorn@gmail.com> | ||||||
|  | M:	Gertjan van Wingerde <gwingerde@gmail.com> | ||||||
| L:	linux-wireless@vger.kernel.org | L:	linux-wireless@vger.kernel.org | ||||||
| L:	users@rt2x00.serialmonkey.com (moderated for non-subscribers) | L:	users@rt2x00.serialmonkey.com (moderated for non-subscribers) | ||||||
| W:	http://rt2x00.serialmonkey.com/ | W:	http://rt2x00.serialmonkey.com/ | ||||||
|  | @ -4417,7 +4421,7 @@ RFKILL | ||||||
| M:	Johannes Berg <johannes@sipsolutions.net> | M:	Johannes Berg <johannes@sipsolutions.net> | ||||||
| L:	linux-wireless@vger.kernel.org | L:	linux-wireless@vger.kernel.org | ||||||
| S:	Maintained | S:	Maintained | ||||||
| F	Documentation/rfkill.txt | F:	Documentation/rfkill.txt | ||||||
| F:	net/rfkill/ | F:	net/rfkill/ | ||||||
| 
 | 
 | ||||||
| RISCOM8 DRIVER | RISCOM8 DRIVER | ||||||
|  | @ -4637,7 +4641,7 @@ F:	drivers/mmc/host/sdhci-s3c.c | ||||||
| SECURITY SUBSYSTEM | SECURITY SUBSYSTEM | ||||||
| M:	James Morris <jmorris@namei.org> | M:	James Morris <jmorris@namei.org> | ||||||
| L:	linux-security-module@vger.kernel.org (suggested Cc:) | 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/ | W:	http://security.wiki.kernel.org/ | ||||||
| S:	Supported | S:	Supported | ||||||
| F:	security/ | F:	security/ | ||||||
|  | @ -4673,12 +4677,11 @@ F:	include/linux/ata.h | ||||||
| F:	include/linux/libata.h | F:	include/linux/libata.h | ||||||
| 
 | 
 | ||||||
| SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER | SERVER ENGINES 10Gbps iSCSI - BladeEngine 2 DRIVER | ||||||
| P:     Jayamohan Kallickal | M:	Jayamohan Kallickal <jayamohank@serverengines.com> | ||||||
| M:     jayamohank@serverengines.com | L:	linux-scsi@vger.kernel.org | ||||||
| L:     linux-scsi@vger.kernel.org | W:	http://www.serverengines.com | ||||||
| W:     http://www.serverengines.com | S:	Supported | ||||||
| S:     Supported | F:	drivers/scsi/be2iscsi/ | ||||||
| F:     drivers/scsi/be2iscsi/ |  | ||||||
| 
 | 
 | ||||||
| SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER | SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER | ||||||
| M:	Sathya Perla <sathyap@serverengines.com> | M:	Sathya Perla <sathyap@serverengines.com> | ||||||
|  | @ -5684,11 +5687,11 @@ F:	drivers/vlynq/vlynq.c | ||||||
| F:	include/linux/vlynq.h | F:	include/linux/vlynq.h | ||||||
| 
 | 
 | ||||||
| VMWARE VMXNET3 ETHERNET DRIVER | VMWARE VMXNET3 ETHERNET DRIVER | ||||||
| M:     Shreyas Bhatewara <sbhatewara@vmware.com> | M:	Shreyas Bhatewara <sbhatewara@vmware.com> | ||||||
| M:     VMware, Inc. <pv-drivers@vmware.com> | M:	"VMware, Inc." <pv-drivers@vmware.com> | ||||||
| L:     netdev@vger.kernel.org | L:	netdev@vger.kernel.org | ||||||
| S:     Maintained | S:	Maintained | ||||||
| F:     drivers/net/vmxnet3/ | F:	drivers/net/vmxnet3/ | ||||||
| 
 | 
 | ||||||
| VOLTAGE AND CURRENT REGULATOR FRAMEWORK | VOLTAGE AND CURRENT REGULATOR FRAMEWORK | ||||||
| M:	Liam Girdwood <lrg@slimlogic.co.uk> | M:	Liam Girdwood <lrg@slimlogic.co.uk> | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,7 +1,7 @@ | ||||||
| VERSION = 2 | VERSION = 2 | ||||||
| PATCHLEVEL = 6 | PATCHLEVEL = 6 | ||||||
| SUBLEVEL = 32 | SUBLEVEL = 32 | ||||||
| EXTRAVERSION = -rc6 | EXTRAVERSION = -rc8 | ||||||
| NAME = Man-Eating Seals of Antiquity | NAME = Man-Eating Seals of Antiquity | ||||||
| 
 | 
 | ||||||
| # *DOCUMENTATION*
 | # *DOCUMENTATION*
 | ||||||
|  | @ -221,7 +221,7 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ | ||||||
| 
 | 
 | ||||||
| HOSTCC       = gcc | HOSTCC       = gcc | ||||||
| HOSTCXX      = g++ | HOSTCXX      = g++ | ||||||
| HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer | HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer | ||||||
| HOSTCXXFLAGS = -O2 | HOSTCXXFLAGS = -O2 | ||||||
| 
 | 
 | ||||||
| # Decide whether to build built-in, modular, or both.
 | # Decide whether to build built-in, modular, or both.
 | ||||||
|  |  | ||||||
|  | @ -35,7 +35,7 @@ | ||||||
| const char * prog_name; | const char * prog_name; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void | static void | ||||||
| usage (void) | usage (void) | ||||||
| { | { | ||||||
|     fprintf(stderr, |     fprintf(stderr, | ||||||
|  |  | ||||||
|  | @ -26,8 +26,6 @@ | ||||||
| #define F_GETOWN	6	/*  for sockets. */ | #define F_GETOWN	6	/*  for sockets. */ | ||||||
| #define F_SETSIG	10	/*  for sockets. */ | #define F_SETSIG	10	/*  for sockets. */ | ||||||
| #define F_GETSIG	11	/*  for sockets. */ | #define F_GETSIG	11	/*  for sockets. */ | ||||||
| #define F_SETOWN_EX	12 |  | ||||||
| #define F_GETOWN_EX	13 |  | ||||||
| 
 | 
 | ||||||
| /* for posix fcntl() and lockf() */ | /* for posix fcntl() and lockf() */ | ||||||
| #define F_RDLCK		1 | #define F_RDLCK		1 | ||||||
|  |  | ||||||
|  | @ -50,12 +50,12 @@ struct thread_info { | ||||||
| register struct thread_info *__current_thread_info __asm__("$8"); | register struct thread_info *__current_thread_info __asm__("$8"); | ||||||
| #define current_thread_info()  __current_thread_info | #define current_thread_info()  __current_thread_info | ||||||
| 
 | 
 | ||||||
|  | #endif /* __ASSEMBLY__ */ | ||||||
|  | 
 | ||||||
| /* Thread information allocation.  */ | /* Thread information allocation.  */ | ||||||
| #define THREAD_SIZE_ORDER 1 | #define THREAD_SIZE_ORDER 1 | ||||||
| #define THREAD_SIZE (2*PAGE_SIZE) | #define THREAD_SIZE (2*PAGE_SIZE) | ||||||
| 
 | 
 | ||||||
| #endif /* __ASSEMBLY__ */ |  | ||||||
| 
 |  | ||||||
| #define PREEMPT_ACTIVE		0x40000000 | #define PREEMPT_ACTIVE		0x40000000 | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -55,10 +55,10 @@ CONFIG_BLK_DEV_INITRD=y | ||||||
| CONFIG_INITRAMFS_SOURCE="" | CONFIG_INITRAMFS_SOURCE="" | ||||||
| CONFIG_CC_OPTIMIZE_FOR_SIZE=y | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||||||
| CONFIG_SYSCTL=y | CONFIG_SYSCTL=y | ||||||
| # CONFIG_EMBEDDED is not set | CONFIG_EMBEDDED=y | ||||||
| CONFIG_UID16=y | CONFIG_UID16=y | ||||||
| CONFIG_SYSCTL_SYSCALL=y | CONFIG_SYSCTL_SYSCALL=y | ||||||
| CONFIG_KALLSYMS=y | # CONFIG_KALLSYMS is not set | ||||||
| # CONFIG_KALLSYMS_ALL is not set | # CONFIG_KALLSYMS_ALL is not set | ||||||
| # CONFIG_KALLSYMS_EXTRA_PASS is not set | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||||||
| CONFIG_HOTPLUG=y | CONFIG_HOTPLUG=y | ||||||
|  | @ -224,7 +224,7 @@ CONFIG_CPU_CP15_MMU=y | ||||||
| # | # | ||||||
| # Processor Features | # Processor Features | ||||||
| # | # | ||||||
| # CONFIG_ARM_THUMB is not set | CONFIG_ARM_THUMB=y | ||||||
| # CONFIG_CPU_ICACHE_DISABLE is not set | # CONFIG_CPU_ICACHE_DISABLE is not set | ||||||
| # CONFIG_CPU_DCACHE_DISABLE is not set | # CONFIG_CPU_DCACHE_DISABLE is not set | ||||||
| CONFIG_CPU_DCACHE_WRITETHROUGH=y | CONFIG_CPU_DCACHE_WRITETHROUGH=y | ||||||
|  | @ -248,7 +248,7 @@ CONFIG_CPU_DCACHE_WRITETHROUGH=y | ||||||
| # CONFIG_HIGH_RES_TIMERS is not set | # CONFIG_HIGH_RES_TIMERS is not set | ||||||
| CONFIG_PREEMPT=y | CONFIG_PREEMPT=y | ||||||
| CONFIG_HZ=100 | CONFIG_HZ=100 | ||||||
| # CONFIG_AEABI is not set | CONFIG_AEABI=y | ||||||
| # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||||||
| CONFIG_SELECT_MEMORY_MODEL=y | CONFIG_SELECT_MEMORY_MODEL=y | ||||||
| CONFIG_FLATMEM_MANUAL=y | CONFIG_FLATMEM_MANUAL=y | ||||||
|  | @ -299,7 +299,9 @@ CONFIG_BINFMT_ELF=y | ||||||
| # | # | ||||||
| # Power management options | # Power management options | ||||||
| # | # | ||||||
| # CONFIG_PM is not set | CONFIG_PM=y | ||||||
|  | # CONFIG_SUSPEND is not set | ||||||
|  | CONFIG_PM_RUNTIME=y | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Networking | # Networking | ||||||
|  | @ -670,7 +672,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||||||
| CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||||||
| # CONFIG_INPUT_JOYDEV is not set | # CONFIG_INPUT_JOYDEV is not set | ||||||
| # CONFIG_INPUT_TSDEV 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 | # CONFIG_INPUT_EVBUG is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
|  | @ -784,6 +786,7 @@ CONFIG_I2C_OMAP=y | ||||||
| # | # | ||||||
| # CONFIG_SPI is not set | # CONFIG_SPI is not set | ||||||
| # CONFIG_SPI_MASTER is not set | # CONFIG_SPI_MASTER is not set | ||||||
|  | CONFIG_GPIO_SYSFS=y | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Dallas's 1-wire bus | # Dallas's 1-wire bus | ||||||
|  | @ -820,6 +823,7 @@ CONFIG_LEDS_AMS_DELTA=y | ||||||
| CONFIG_LEDS_TRIGGERS=y | CONFIG_LEDS_TRIGGERS=y | ||||||
| CONFIG_LEDS_TRIGGER_TIMER=y | CONFIG_LEDS_TRIGGER_TIMER=y | ||||||
| CONFIG_LEDS_TRIGGER_HEARTBEAT=y | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||||||
|  | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Multimedia devices | # Multimedia devices | ||||||
|  | @ -896,7 +900,13 @@ CONFIG_LOGO_LINUX_CLUT224=y | ||||||
| # | # | ||||||
| # Sound | # 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 | # HID Devices | ||||||
|  |  | ||||||
|  | @ -611,7 +611,7 @@ CONFIG_INPUT_KEYBOARD=y | ||||||
| # CONFIG_KEYBOARD_XTKBD is not set | # CONFIG_KEYBOARD_XTKBD is not set | ||||||
| # CONFIG_KEYBOARD_NEWTON is not set | # CONFIG_KEYBOARD_NEWTON is not set | ||||||
| # CONFIG_KEYBOARD_STOWAWAY is not set | # CONFIG_KEYBOARD_STOWAWAY is not set | ||||||
| # CONFIG_KEYBOARD_GPIO is not set | CONFIG_KEYBOARD_GPIO=y | ||||||
| CONFIG_INPUT_MOUSE=y | CONFIG_INPUT_MOUSE=y | ||||||
| # CONFIG_MOUSE_PS2 is not set | # CONFIG_MOUSE_PS2 is not set | ||||||
| # CONFIG_MOUSE_SERIAL 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_TOUCHWIN is not set | ||||||
| # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | # CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set | ||||||
| # CONFIG_TOUCHSCREEN_TOUCHIT213 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 | # Hardware I/O ports | ||||||
|  | @ -834,7 +835,29 @@ CONFIG_DAB=y | ||||||
| # | # | ||||||
| # CONFIG_VGA_CONSOLE is not set | # CONFIG_VGA_CONSOLE is not set | ||||||
| CONFIG_DUMMY_CONSOLE=y | 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_SUPPORT=y | ||||||
| CONFIG_HID=y | CONFIG_HID=y | ||||||
| # CONFIG_HID_DEBUG is not set | # CONFIG_HID_DEBUG is not set | ||||||
|  | @ -1020,7 +1043,13 @@ CONFIG_MMC_BLOCK_BOUNCE=y | ||||||
| # CONFIG_MMC_SPI is not set | # CONFIG_MMC_SPI is not set | ||||||
| # CONFIG_MEMSTICK is not set | # CONFIG_MEMSTICK is not set | ||||||
| # CONFIG_ACCESSIBILITY 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_LIB=y | ||||||
| CONFIG_RTC_CLASS=y | CONFIG_RTC_CLASS=y | ||||||
| CONFIG_RTC_HCTOSYS=y | CONFIG_RTC_HCTOSYS=y | ||||||
|  | @ -1084,9 +1113,12 @@ CONFIG_RTC_DRV_TWL4030=y | ||||||
| # on-CPU RTC drivers | # on-CPU RTC drivers | ||||||
| # | # | ||||||
| # CONFIG_DMADEVICES is not set | # CONFIG_DMADEVICES is not set | ||||||
| # CONFIG_REGULATOR is not set |  | ||||||
| # CONFIG_UIO is not set | # CONFIG_UIO is not set | ||||||
| 
 | 
 | ||||||
|  | CONFIG_REGULATOR=y | ||||||
|  | CONFIG_REGULATOR_FIXED_VOLTAGE=y | ||||||
|  | CONFIG_REGULATOR_TWL4030=y | ||||||
|  | 
 | ||||||
| # | # | ||||||
| # File systems | # File systems | ||||||
| # | # | ||||||
|  | @ -1407,3 +1439,10 @@ CONFIG_PLIST=y | ||||||
| CONFIG_HAS_IOMEM=y | CONFIG_HAS_IOMEM=y | ||||||
| CONFIG_HAS_IOPORT=y | CONFIG_HAS_IOPORT=y | ||||||
| CONFIG_HAS_DMA=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 | # on-CPU RTC drivers | ||||||
| # | # | ||||||
| # CONFIG_DMADEVICES is not set | # 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_UIO is not set | ||||||
| # CONFIG_STAGING is not set | # CONFIG_STAGING is not set | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -289,13 +289,6 @@ config MACH_NEOCORE926 | ||||||
| 	help | 	help | ||||||
| 	  Select this if you are using the Adeneo Neocore 926 board. | 	  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 | endif | ||||||
| 
 | 
 | ||||||
| # ---------------------------------------------------------- | # ---------------------------------------------------------- | ||||||
|  | @ -322,7 +315,16 @@ config MACH_AT91SAM9G20EK | ||||||
| 	bool "Atmel AT91SAM9G20-EK Evaluation Kit" | 	bool "Atmel AT91SAM9G20-EK Evaluation Kit" | ||||||
| 	depends on ARCH_AT91SAM9G20 | 	depends on ARCH_AT91SAM9G20 | ||||||
| 	help | 	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 | config MACH_CPU9G20 | ||||||
| 	bool "Eukrea CPU9G20 board" | 	bool "Eukrea CPU9G20 board" | ||||||
|  | @ -392,7 +394,7 @@ config MTD_AT91_DATAFLASH_CARD | ||||||
| 
 | 
 | ||||||
| config MTD_NAND_ATMEL_BUSWIDTH_16 | config MTD_NAND_ATMEL_BUSWIDTH_16 | ||||||
| 	bool "Enable 16-bit data bus interface to NAND flash" | 	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 | 	help | ||||||
| 	  On AT91SAM926x boards both types of NAND flash can be present | 	  On AT91SAM926x boards both types of NAND flash can be present | ||||||
| 	  (8 and 16 bit data bus width). | 	  (8 and 16 bit data bus width). | ||||||
|  |  | ||||||
|  | @ -90,7 +90,7 @@ static struct at91_udc_data __initdata ek_udc_data = { | ||||||
|  * SPI devices. |  * SPI devices. | ||||||
|  */ |  */ | ||||||
| static struct spi_board_info ek_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 */ | 	{	/* DataFlash chip */ | ||||||
| 		.modalias	= "mtd_dataflash", | 		.modalias	= "mtd_dataflash", | ||||||
| 		.chip_select	= 1, | 		.chip_select	= 1, | ||||||
|  | @ -113,7 +113,7 @@ static struct spi_board_info ek_spi_devices[] = { | ||||||
|  * MACB Ethernet device |  * MACB Ethernet device | ||||||
|  */ |  */ | ||||||
| static struct at91_eth_data __initdata ek_macb_data = { | static struct at91_eth_data __initdata ek_macb_data = { | ||||||
| 	.phy_irq_pin	= AT91_PIN_PC12, | 	.phy_irq_pin	= AT91_PIN_PB0, | ||||||
| 	.is_rmii	= 1, | 	.is_rmii	= 1, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -194,24 +194,27 @@ static void __init ek_add_device_nand(void) | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * MCI (SD/MMC) |  * 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) | #if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) | ||||||
| static struct mci_platform_data __initdata ek_mmc_data = { | static struct mci_platform_data __initdata ek_mmc_data = { | ||||||
| 	.slot[0] = { | 	.slot[0] = { | ||||||
| 		.bus_width	= 4, | 		.bus_width	= 4, | ||||||
| 		.detect_pin	= -ENODEV, | 		.detect_pin	= AT91_PIN_PC2, | ||||||
| 		.wp_pin		= -ENODEV, | 		.wp_pin		= -ENODEV, | ||||||
| 	}, | 	}, | ||||||
| 	.slot[1] = { | 	.slot[1] = { | ||||||
| 		.bus_width	= 4, | 		.bus_width	= 4, | ||||||
| 		.detect_pin	= -ENODEV, | 		.detect_pin	= AT91_PIN_PC9, | ||||||
| 		.wp_pin		= -ENODEV, | 		.wp_pin		= -ENODEV, | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| }; | }; | ||||||
| #else | #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 | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -221,13 +224,13 @@ static struct amci_platform_data __initdata ek_mmc_data = { | ||||||
| static struct gpio_led ek_leds[] = { | static struct gpio_led ek_leds[] = { | ||||||
| 	{	/* "bottom" led, green, userled1 to be defined */ | 	{	/* "bottom" led, green, userled1 to be defined */ | ||||||
| 		.name			= "ds5", | 		.name			= "ds5", | ||||||
| 		.gpio			= AT91_PIN_PB12, | 		.gpio			= AT91_PIN_PB8, | ||||||
| 		.active_low		= 1, | 		.active_low		= 1, | ||||||
| 		.default_trigger	= "none", | 		.default_trigger	= "none", | ||||||
| 	}, | 	}, | ||||||
| 	{	/* "power" led, yellow */ | 	{	/* "power" led, yellow */ | ||||||
| 		.name			= "ds1", | 		.name			= "ds1", | ||||||
| 		.gpio			= AT91_PIN_PB13, | 		.gpio			= AT91_PIN_PB9, | ||||||
| 		.default_trigger	= "heartbeat", | 		.default_trigger	= "heartbeat", | ||||||
| 	} | 	} | ||||||
| }; | }; | ||||||
|  | @ -254,7 +257,11 @@ static void __init ek_board_init(void) | ||||||
| 	/* Ethernet */ | 	/* Ethernet */ | ||||||
| 	at91_add_device_eth(&ek_macb_data); | 	at91_add_device_eth(&ek_macb_data); | ||||||
| 	/* MMC */ | 	/* MMC */ | ||||||
|  | #if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE) | ||||||
| 	at91_add_device_mci(0, &ek_mmc_data); | 	at91_add_device_mci(0, &ek_mmc_data); | ||||||
|  | #else | ||||||
|  | 	at91_add_device_mmc(0, &ek_mmc_data); | ||||||
|  | #endif | ||||||
| 	/* I2C */ | 	/* I2C */ | ||||||
| 	at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); | 	at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices)); | ||||||
| 	/* LEDs */ | 	/* LEDs */ | ||||||
|  |  | ||||||
|  | @ -915,6 +915,14 @@ void __init kirkwood_init(void) | ||||||
| 	kirkwood_uart0_data[0].uartclk = kirkwood_tclk; | 	kirkwood_uart0_data[0].uartclk = kirkwood_tclk; | ||||||
| 	kirkwood_uart1_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(); | 	kirkwood_setup_cpu_mbus(); | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_CACHE_FEROCEON_L2 | #ifdef CONFIG_CACHE_FEROCEON_L2 | ||||||
|  |  | ||||||
|  | @ -13,6 +13,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <mach/kirkwood.h> | #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_CONTROL		(BRIDGE_VIRT_BASE | 0x0104) | ||||||
| #define CPU_RESET		0x00000002 | #define CPU_RESET		0x00000002 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -160,7 +160,7 @@ | ||||||
| #define MMC1_WP_MMC1_WP		MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM) | #define MMC1_WP_MMC1_WP		MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM) | ||||||
| 
 | 
 | ||||||
| /* PWM */ | /* 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 GPIO51_PWM2_OUT		MFP_CFG(GPIO51, AF2) | ||||||
| #define GPIO117_PWM1_OUT	MFP_CFG(GPIO117, AF2) | #define GPIO117_PWM1_OUT	MFP_CFG(GPIO117, AF2) | ||||||
| #define GPIO118_PWM2_OUT	MFP_CFG(GPIO118, 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) */ | 	/* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ | ||||||
| 	gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); | 	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) */ | 	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ | ||||||
| 	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; | 	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[] = { | static int board_keymap[] = { | ||||||
| 	/* col, row, code */ | 	/* row, col, code */ | ||||||
| 	KEY(0, 0, KEY_9), | 	KEY(0, 0, KEY_9), | ||||||
| 	KEY(0, 1, KEY_0), | 	KEY(0, 1, KEY_8), | ||||||
| 	KEY(0, 2, KEY_BACKSPACE), | 	KEY(0, 2, KEY_I), | ||||||
| 	KEY(0, 3, KEY_O), | 	KEY(0, 3, KEY_J), | ||||||
| 	KEY(0, 4, KEY_P), | 	KEY(0, 4, KEY_N), | ||||||
| 	KEY(0, 5, KEY_K), | 	KEY(0, 5, KEY_M), | ||||||
| 	KEY(0, 6, KEY_L), | 	KEY(1, 0, KEY_0), | ||||||
| 	KEY(0, 7, KEY_ENTER), |  | ||||||
| 	KEY(1, 0, KEY_8), |  | ||||||
| 	KEY(1, 1, KEY_7), | 	KEY(1, 1, KEY_7), | ||||||
| 	KEY(1, 2, KEY_6), | 	KEY(1, 2, KEY_U), | ||||||
| 	KEY(1, 3, KEY_5), | 	KEY(1, 3, KEY_H), | ||||||
| 	KEY(1, 4, KEY_4), | 	KEY(1, 4, KEY_B), | ||||||
| 	KEY(1, 5, KEY_3), | 	KEY(1, 5, KEY_SPACE), | ||||||
| 	KEY(1, 6, KEY_2), | 	KEY(2, 0, KEY_BACKSPACE), | ||||||
| 	KEY(1, 7, KEY_1), | 	KEY(2, 1, KEY_6), | ||||||
| 	KEY(2, 0, KEY_I), |  | ||||||
| 	KEY(2, 1, KEY_U), |  | ||||||
| 	KEY(2, 2, KEY_Y), | 	KEY(2, 2, KEY_Y), | ||||||
| 	KEY(2, 3, KEY_T), | 	KEY(2, 3, KEY_G), | ||||||
| 	KEY(2, 4, KEY_R), | 	KEY(2, 4, KEY_V), | ||||||
| 	KEY(2, 5, KEY_E), | 	KEY(2, 5, KEY_FN), | ||||||
| 	KEY(2, 6, KEY_W), | 	KEY(3, 0, KEY_O), | ||||||
| 	KEY(2, 7, KEY_Q), | 	KEY(3, 1, KEY_5), | ||||||
| 	KEY(3, 0, KEY_J), | 	KEY(3, 2, KEY_T), | ||||||
| 	KEY(3, 1, KEY_H), |  | ||||||
| 	KEY(3, 2, KEY_G), |  | ||||||
| 	KEY(3, 3, KEY_F), | 	KEY(3, 3, KEY_F), | ||||||
| 	KEY(3, 4, KEY_D), | 	KEY(3, 4, KEY_C), | ||||||
| 	KEY(3, 5, KEY_S), | 	KEY(4, 0, KEY_P), | ||||||
| 	KEY(3, 6, KEY_A), | 	KEY(4, 1, KEY_4), | ||||||
| 	KEY(3, 7, KEY_LEFTSHIFT), | 	KEY(4, 2, KEY_R), | ||||||
| 	KEY(4, 0, KEY_N), | 	KEY(4, 3, KEY_D), | ||||||
| 	KEY(4, 1, KEY_B), |  | ||||||
| 	KEY(4, 2, KEY_V), |  | ||||||
| 	KEY(4, 3, KEY_C), |  | ||||||
| 	KEY(4, 4, KEY_X), | 	KEY(4, 4, KEY_X), | ||||||
| 	KEY(4, 5, KEY_Z), | 	KEY(5, 0, KEY_K), | ||||||
| 	KEY(4, 6, KEY_DOT), | 	KEY(5, 1, KEY_3), | ||||||
| 	KEY(4, 7, KEY_COMMA), | 	KEY(5, 2, KEY_E), | ||||||
| 	KEY(5, 0, KEY_M), | 	KEY(5, 3, KEY_S), | ||||||
| 	KEY(5, 1, KEY_SPACE), | 	KEY(5, 4, KEY_Z), | ||||||
| 	KEY(5, 2, KEY_FN), | 	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 = { | static struct matrix_keymap_data board_map_data = { | ||||||
|  |  | ||||||
|  | @ -30,57 +30,56 @@ | ||||||
| /* Zoom2 has Qwerty keyboard*/ | /* Zoom2 has Qwerty keyboard*/ | ||||||
| static int board_keymap[] = { | static int board_keymap[] = { | ||||||
| 	KEY(0, 0, KEY_E), | 	KEY(0, 0, KEY_E), | ||||||
| 	KEY(1, 0, KEY_R), | 	KEY(0, 1, KEY_R), | ||||||
| 	KEY(2, 0, KEY_T), | 	KEY(0, 2, KEY_T), | ||||||
| 	KEY(3, 0, KEY_HOME), | 	KEY(0, 3, KEY_HOME), | ||||||
| 	KEY(6, 0, KEY_I), | 	KEY(0, 6, KEY_I), | ||||||
| 	KEY(7, 0, KEY_LEFTSHIFT), | 	KEY(0, 7, KEY_LEFTSHIFT), | ||||||
| 	KEY(0, 1, KEY_D), | 	KEY(1, 0, KEY_D), | ||||||
| 	KEY(1, 1, KEY_F), | 	KEY(1, 1, KEY_F), | ||||||
| 	KEY(2, 1, KEY_G), | 	KEY(1, 2, KEY_G), | ||||||
| 	KEY(3, 1, KEY_SEND), | 	KEY(1, 3, KEY_SEND), | ||||||
| 	KEY(6, 1, KEY_K), | 	KEY(1, 6, KEY_K), | ||||||
| 	KEY(7, 1, KEY_ENTER), | 	KEY(1, 7, KEY_ENTER), | ||||||
| 	KEY(0, 2, KEY_X), | 	KEY(2, 0, KEY_X), | ||||||
| 	KEY(1, 2, KEY_C), | 	KEY(2, 1, KEY_C), | ||||||
| 	KEY(2, 2, KEY_V), | 	KEY(2, 2, KEY_V), | ||||||
| 	KEY(3, 2, KEY_END), | 	KEY(2, 3, KEY_END), | ||||||
| 	KEY(6, 2, KEY_DOT), | 	KEY(2, 6, KEY_DOT), | ||||||
| 	KEY(7, 2, KEY_CAPSLOCK), | 	KEY(2, 7, KEY_CAPSLOCK), | ||||||
| 	KEY(0, 3, KEY_Z), | 	KEY(3, 0, KEY_Z), | ||||||
| 	KEY(1, 3, KEY_KPPLUS), | 	KEY(3, 1, KEY_KPPLUS), | ||||||
| 	KEY(2, 3, KEY_B), | 	KEY(3, 2, KEY_B), | ||||||
| 	KEY(3, 3, KEY_F1), | 	KEY(3, 3, KEY_F1), | ||||||
| 	KEY(6, 3, KEY_O), | 	KEY(3, 6, KEY_O), | ||||||
| 	KEY(7, 3, KEY_SPACE), | 	KEY(3, 7, KEY_SPACE), | ||||||
| 	KEY(0, 4, KEY_W), | 	KEY(4, 0, KEY_W), | ||||||
| 	KEY(1, 4, KEY_Y), | 	KEY(4, 1, KEY_Y), | ||||||
| 	KEY(2, 4, KEY_U), | 	KEY(4, 2, KEY_U), | ||||||
| 	KEY(3, 4, KEY_F2), | 	KEY(4, 3, KEY_F2), | ||||||
| 	KEY(4, 4, KEY_VOLUMEUP), | 	KEY(4, 4, KEY_VOLUMEUP), | ||||||
| 	KEY(6, 4, KEY_L), | 	KEY(4, 6, KEY_L), | ||||||
| 	KEY(7, 4, KEY_LEFT), | 	KEY(4, 7, KEY_LEFT), | ||||||
| 	KEY(0, 5, KEY_S), | 	KEY(5, 0, KEY_S), | ||||||
| 	KEY(1, 5, KEY_H), | 	KEY(5, 1, KEY_H), | ||||||
| 	KEY(2, 5, KEY_J), | 	KEY(5, 2, KEY_J), | ||||||
| 	KEY(3, 5, KEY_F3), | 	KEY(5, 3, KEY_F3), | ||||||
| 	KEY(5, 5, KEY_VOLUMEDOWN), | 	KEY(5, 5, KEY_VOLUMEDOWN), | ||||||
| 	KEY(6, 5, KEY_M), | 	KEY(5, 6, KEY_M), | ||||||
| 	KEY(4, 5, KEY_ENTER), | 	KEY(5, 7, KEY_ENTER), | ||||||
| 	KEY(7, 5, KEY_RIGHT), | 	KEY(6, 0, KEY_Q), | ||||||
| 	KEY(0, 6, KEY_Q), | 	KEY(6, 1, KEY_A), | ||||||
| 	KEY(1, 6, KEY_A), | 	KEY(6, 2, KEY_N), | ||||||
| 	KEY(2, 6, KEY_N), | 	KEY(6, 3, KEY_BACKSPACE), | ||||||
| 	KEY(3, 6, KEY_BACKSPACE), |  | ||||||
| 	KEY(6, 6, KEY_P), | 	KEY(6, 6, KEY_P), | ||||||
| 	KEY(7, 6, KEY_UP), |  | ||||||
| 	KEY(6, 7, KEY_SELECT), | 	KEY(6, 7, KEY_SELECT), | ||||||
| 	KEY(7, 7, KEY_DOWN), | 	KEY(7, 0, KEY_PROG1),	/*MACRO 1 <User defined> */ | ||||||
| 	KEY(0, 7, KEY_PROG1),	/*MACRO 1 <User defined> */ | 	KEY(7, 1, KEY_PROG2),	/*MACRO 2 <User defined> */ | ||||||
| 	KEY(1, 7, KEY_PROG2),	/*MACRO 2 <User defined> */ | 	KEY(7, 2, KEY_PROG3),	/*MACRO 3 <User defined> */ | ||||||
| 	KEY(2, 7, KEY_PROG3),	/*MACRO 3 <User defined> */ | 	KEY(7, 3, KEY_PROG4),	/*MACRO 4 <User defined> */ | ||||||
| 	KEY(3, 7, KEY_PROG4),	/*MACRO 4 <User defined> */ | 	KEY(7, 5, KEY_RIGHT), | ||||||
| 	0 | 	KEY(7, 6, KEY_UP), | ||||||
|  | 	KEY(7, 7, KEY_DOWN) | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct matrix_keymap_data board_map_data = { | 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; | 	unsigned long fint; | ||||||
| 	u16 f = 0; | 	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); | 	pr_debug("clock: fint is %lu\n", fint); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -489,9 +489,9 @@ static struct clk core_ck = { | ||||||
| static struct clk dpll3_m2x2_ck = { | static struct clk dpll3_m2x2_ck = { | ||||||
| 	.name		= "dpll3_m2x2_ck", | 	.name		= "dpll3_m2x2_ck", | ||||||
| 	.ops		= &clkops_null, | 	.ops		= &clkops_null, | ||||||
| 	.parent		= &dpll3_x2_ck, | 	.parent		= &dpll3_m2_ck, | ||||||
| 	.clkdm_name	= "dpll3_clkdm", | 	.clkdm_name	= "dpll3_clkdm", | ||||||
| 	.recalc		= &followparent_recalc, | 	.recalc		= &omap3_clkoutx2_recalc, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* The PWRDN bit is apparently only available on 3430ES2 and above */ | /* 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) | 	if (r < 0) | ||||||
| 		goto out; | 		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; | 	*base = res->start; | ||||||
| 	gpmc_cs_set_reserved(cs, 1); | 	gpmc_cs_set_reserved(cs, 1); | ||||||
| out: | out: | ||||||
|  | @ -378,7 +378,7 @@ EXPORT_SYMBOL(gpmc_cs_request); | ||||||
| void gpmc_cs_free(int cs) | void gpmc_cs_free(int cs) | ||||||
| { | { | ||||||
| 	spin_lock(&gpmc_mem_lock); | 	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); | 		printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); | ||||||
| 		BUG(); | 		BUG(); | ||||||
| 		spin_unlock(&gpmc_mem_lock); | 		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"); | 		dev_err(&pdev->dev, "invalid mem resource\n"); | ||||||
| 		return -ENODEV; | 		return -ENODEV; | ||||||
| 	} | 	} | ||||||
| 	mbox_base = ioremap(res->start, res->end - res->start); | 	mbox_base = ioremap(res->start, resource_size(res)); | ||||||
| 	if (!mbox_base) | 	if (!mbox_base) | ||||||
| 		return -ENOMEM; | 		return -ENOMEM; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -27,6 +27,7 @@ | ||||||
| #include <mach/colibri.h> | #include <mach/colibri.h> | ||||||
| #include <mach/pxafb.h> | #include <mach/pxafb.h> | ||||||
| #include <mach/ohci.h> | #include <mach/ohci.h> | ||||||
|  | #include <mach/audio.h> | ||||||
| 
 | 
 | ||||||
| #include "generic.h" | #include "generic.h" | ||||||
| #include "devices.h" | #include "devices.h" | ||||||
|  | @ -145,7 +146,8 @@ static void __init colibri_pxa320_init_lcd(void) | ||||||
| static inline void colibri_pxa320_init_lcd(void) {} | static inline void colibri_pxa320_init_lcd(void) {} | ||||||
| #endif | #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 = { | static mfp_cfg_t colibri_pxa320_ac97_pin_config[] __initdata = { | ||||||
| 	GPIO34_AC97_SYSCLK, | 	GPIO34_AC97_SYSCLK, | ||||||
| 	GPIO35_AC97_SDATA_IN_0, | 	GPIO35_AC97_SDATA_IN_0, | ||||||
|  |  | ||||||
|  | @ -604,7 +604,7 @@ static struct platform_device gpio_vbus = { | ||||||
| static const struct ads7846_platform_data tsc2046_info = { | static const struct ads7846_platform_data tsc2046_info = { | ||||||
| 	.model            = 7846, | 	.model            = 7846, | ||||||
| 	.vref_delay_usecs = 100, | 	.vref_delay_usecs = 100, | ||||||
| 	.pressure_max     = 512, | 	.pressure_max     = 1024, | ||||||
| 	.debounce_max     = 10, | 	.debounce_max     = 10, | ||||||
| 	.debounce_tol     = 3, | 	.debounce_tol     = 3, | ||||||
| 	.debounce_rep     = 1, | 	.debounce_rep     = 1, | ||||||
|  |  | ||||||
|  | @ -46,5 +46,6 @@ | ||||||
| 		beq	1001f | 		beq	1001f | ||||||
| 		bic	\irqstat, \irqstat, #0x80000000 | 		bic	\irqstat, \irqstat, #0x80000000 | ||||||
| 		mov	\irqnr, \irqstat, lsr #16 | 		mov	\irqnr, \irqstat, lsr #16 | ||||||
|  | 		add	\irqnr, \irqnr, #(PXA_IRQ(0)) | ||||||
| 1001: | 1001: | ||||||
| 		.endm | 		.endm | ||||||
|  |  | ||||||
|  | @ -408,7 +408,7 @@ static struct platform_device keypad_device = { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct platform_device rtc_device = { | static struct platform_device rtc_device = { | ||||||
| 	.name = "rtc0", | 	.name = "rtc-coh901331", | ||||||
| 	.id = -1, | 	.id = -1, | ||||||
| 	.num_resources = ARRAY_SIZE(rtc_resources), | 	.num_resources = ARRAY_SIZE(rtc_resources), | ||||||
| 	.resource = 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? */ | 	/* FIXME: what's the actual transition time? */ | ||||||
| 	policy->cpuinfo.transition_latency = 10 * 1000 * 1000; | 	policy->cpuinfo.transition_latency = 300 * 1000; | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -691,13 +691,16 @@ static inline void disable_lnk(int lch) | ||||||
| static inline void omap2_enable_irq_lch(int lch) | static inline void omap2_enable_irq_lch(int lch) | ||||||
| { | { | ||||||
| 	u32 val; | 	u32 val; | ||||||
|  | 	unsigned long flags; | ||||||
| 
 | 
 | ||||||
| 	if (!cpu_class_is_omap2()) | 	if (!cpu_class_is_omap2()) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
|  | 	spin_lock_irqsave(&dma_chan_lock, flags); | ||||||
| 	val = dma_read(IRQENABLE_L0); | 	val = dma_read(IRQENABLE_L0); | ||||||
| 	val |= 1 << lch; | 	val |= 1 << lch; | ||||||
| 	dma_write(val, IRQENABLE_L0); | 	dma_write(val, IRQENABLE_L0); | ||||||
|  | 	spin_unlock_irqrestore(&dma_chan_lock, flags); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int omap_request_dma(int dev_id, const char *dev_name, | 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()) { | 	if (cpu_class_is_omap2()) { | ||||||
| 		u32 val; | 		u32 val; | ||||||
|  | 
 | ||||||
|  | 		spin_lock_irqsave(&dma_chan_lock, flags); | ||||||
| 		/* Disable interrupts */ | 		/* Disable interrupts */ | ||||||
| 		val = dma_read(IRQENABLE_L0); | 		val = dma_read(IRQENABLE_L0); | ||||||
| 		val &= ~(1 << lch); | 		val &= ~(1 << lch); | ||||||
| 		dma_write(val, IRQENABLE_L0); | 		dma_write(val, IRQENABLE_L0); | ||||||
|  | 		spin_unlock_irqrestore(&dma_chan_lock, flags); | ||||||
| 
 | 
 | ||||||
| 		/* Clear the CSR register and IRQ status register */ | 		/* Clear the CSR register and IRQ status register */ | ||||||
| 		dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(lch)); | 		dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR(lch)); | ||||||
|  | @ -1108,6 +1114,14 @@ int omap_dma_running(void) | ||||||
| { | { | ||||||
| 	int lch; | 	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 */ | 	/* Check if LCD DMA is running */ | ||||||
| 	if (cpu_is_omap16xx()) | 	if (cpu_is_omap16xx()) | ||||||
| 		if (omap_readw(OMAP1610_DMA_LCD_CCR) & OMAP_DMA_CCR_EN) | 		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) | 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); | 		printk(KERN_ERR "omap-gpio: invalid GPIO %d\n", gpio); | ||||||
| 		dump_stack(); | 		dump_stack(); | ||||||
| 		return -1; | 		return -1; | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| #ifndef __ASM_PLAT_MFP_H | #ifndef __ASM_PLAT_MFP_H | ||||||
| #define __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 */ | /* list of all the configurable MFP pins */ | ||||||
| enum { | enum { | ||||||
|  |  | ||||||
|  | @ -207,7 +207,7 @@ unsigned long mfp_read(int mfp) | ||||||
| { | { | ||||||
| 	unsigned long val, flags; | 	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); | 	spin_lock_irqsave(&mfp_spin_lock, flags); | ||||||
| 	val = mfpr_readl(mfp_table[mfp].mfpr_off); | 	val = mfpr_readl(mfp_table[mfp].mfpr_off); | ||||||
|  | @ -220,7 +220,7 @@ void mfp_write(int mfp, unsigned long val) | ||||||
| { | { | ||||||
| 	unsigned long flags; | 	unsigned long flags; | ||||||
| 
 | 
 | ||||||
| 	BUG_ON(mfp >= MFP_PIN_MAX); | 	BUG_ON(mfp < 0 || mfp >= MFP_PIN_MAX); | ||||||
| 
 | 
 | ||||||
| 	spin_lock_irqsave(&mfp_spin_lock, flags); | 	spin_lock_irqsave(&mfp_spin_lock, flags); | ||||||
| 	mfpr_writel(mfp_table[mfp].mfpr_off, val); | 	mfpr_writel(mfp_table[mfp].mfpr_off, val); | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| config MIPS | config MIPS | ||||||
| 	bool | 	bool | ||||||
| 	default y | 	default y | ||||||
|  | 	select HAVE_GENERIC_DMA_COHERENT | ||||||
| 	select HAVE_IDE | 	select HAVE_IDE | ||||||
| 	select HAVE_OPROFILE | 	select HAVE_OPROFILE | ||||||
| 	select HAVE_ARCH_KGDB | 	select HAVE_ARCH_KGDB | ||||||
|  |  | ||||||
|  | @ -100,7 +100,7 @@ static __init void prom_init_console(void) | ||||||
| 
 | 
 | ||||||
| static __init void prom_init_cmdline(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 */ | 	/* Get the kernel command line from CFE */ | ||||||
| 	if (cfe_getenv("LINUX_CMDLINE", buf, CL_SIZE) >= 0) { | 	if (cfe_getenv("LINUX_CMDLINE", buf, CL_SIZE) >= 0) { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| # | # | ||||||
| # Automatically generated make config: don't edit | # Automatically generated make config: don't edit | ||||||
| # Linux kernel version: 2.6.29-rc7 | # Linux kernel version: 2.6.32-rc6 | ||||||
| # Wed Mar  4 23:08:06 2009 | # Sun Nov  8 22:59:47 2009 | ||||||
| # | # | ||||||
| CONFIG_MIPS=y | CONFIG_MIPS=y | ||||||
| 
 | 
 | ||||||
|  | @ -9,16 +9,18 @@ CONFIG_MIPS=y | ||||||
| # Machine selection | # Machine selection | ||||||
| # | # | ||||||
| # CONFIG_MACH_ALCHEMY is not set | # CONFIG_MACH_ALCHEMY is not set | ||||||
|  | # CONFIG_AR7 is not set | ||||||
| # CONFIG_BASLER_EXCITE is not set | # CONFIG_BASLER_EXCITE is not set | ||||||
| # CONFIG_BCM47XX is not set | # CONFIG_BCM47XX is not set | ||||||
|  | # CONFIG_BCM63XX is not set | ||||||
| # CONFIG_MIPS_COBALT is not set | # CONFIG_MIPS_COBALT is not set | ||||||
| # CONFIG_MACH_DECSTATION is not set | # CONFIG_MACH_DECSTATION is not set | ||||||
| # CONFIG_MACH_JAZZ is not set | # CONFIG_MACH_JAZZ is not set | ||||||
| # CONFIG_LASAT 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_MALTA is not set | ||||||
| # CONFIG_MIPS_SIM 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_MACH_VR41XX is not set | ||||||
| # CONFIG_NXP_STB220 is not set | # CONFIG_NXP_STB220 is not set | ||||||
| # CONFIG_NXP_STB225 is not set | # CONFIG_NXP_STB225 is not set | ||||||
|  | @ -45,6 +47,7 @@ CONFIG_MACH_TX49XX=y | ||||||
| # CONFIG_WR_PPMC is not set | # CONFIG_WR_PPMC is not set | ||||||
| # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set | # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set | ||||||
| # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set | # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set | ||||||
|  | # CONFIG_ALCHEMY_GPIO_INDIRECT is not set | ||||||
| CONFIG_MACH_TXX9=y | CONFIG_MACH_TXX9=y | ||||||
| CONFIG_TOSHIBA_RBTX4927=y | CONFIG_TOSHIBA_RBTX4927=y | ||||||
| CONFIG_TOSHIBA_RBTX4938=y | CONFIG_TOSHIBA_RBTX4938=y | ||||||
|  | @ -86,7 +89,6 @@ CONFIG_DMA_NONCOHERENT=y | ||||||
| CONFIG_DMA_NEED_PCI_MAP_STATE=y | CONFIG_DMA_NEED_PCI_MAP_STATE=y | ||||||
| CONFIG_EARLY_PRINTK=y | CONFIG_EARLY_PRINTK=y | ||||||
| CONFIG_SYS_HAS_EARLY_PRINTK=y | CONFIG_SYS_HAS_EARLY_PRINTK=y | ||||||
| # CONFIG_HOTPLUG_CPU is not set |  | ||||||
| # CONFIG_NO_IOPORT is not set | # CONFIG_NO_IOPORT is not set | ||||||
| CONFIG_GENERIC_GPIO=y | CONFIG_GENERIC_GPIO=y | ||||||
| CONFIG_CPU_BIG_ENDIAN=y | CONFIG_CPU_BIG_ENDIAN=y | ||||||
|  | @ -101,7 +103,7 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5 | ||||||
| # | # | ||||||
| # CPU selection | # CPU selection | ||||||
| # | # | ||||||
| # CONFIG_CPU_LOONGSON2 is not set | # CONFIG_CPU_LOONGSON2E is not set | ||||||
| # CONFIG_CPU_MIPS32_R1 is not set | # CONFIG_CPU_MIPS32_R1 is not set | ||||||
| # CONFIG_CPU_MIPS32_R2 is not set | # CONFIG_CPU_MIPS32_R2 is not set | ||||||
| # CONFIG_CPU_MIPS64_R1 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_4KB=y | ||||||
| # CONFIG_PAGE_SIZE_8KB is not set | # CONFIG_PAGE_SIZE_8KB is not set | ||||||
| # CONFIG_PAGE_SIZE_16KB 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_PAGE_SIZE_64KB is not set | ||||||
| CONFIG_CPU_HAS_PREFETCH=y | CONFIG_CPU_HAS_PREFETCH=y | ||||||
| CONFIG_MIPS_MT_DISABLED=y | CONFIG_MIPS_MT_DISABLED=y | ||||||
|  | @ -154,7 +157,10 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | ||||||
| # CONFIG_PHYS_ADDR_T_64BIT is not set | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||||||
| CONFIG_ZONE_DMA_FLAG=0 | CONFIG_ZONE_DMA_FLAG=0 | ||||||
| CONFIG_VIRT_TO_BUS=y | 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_TICK_ONESHOT=y | ||||||
| CONFIG_NO_HZ=y | CONFIG_NO_HZ=y | ||||||
| CONFIG_HIGH_RES_TIMERS=y | CONFIG_HIGH_RES_TIMERS=y | ||||||
|  | @ -175,6 +181,7 @@ CONFIG_PREEMPT_NONE=y | ||||||
| CONFIG_LOCKDEP_SUPPORT=y | CONFIG_LOCKDEP_SUPPORT=y | ||||||
| CONFIG_STACKTRACE_SUPPORT=y | CONFIG_STACKTRACE_SUPPORT=y | ||||||
| CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||||||
|  | CONFIG_CONSTRUCTORS=y | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # General setup | # General setup | ||||||
|  | @ -194,11 +201,12 @@ CONFIG_SYSVIPC_SYSCTL=y | ||||||
| # | # | ||||||
| # RCU Subsystem | # RCU Subsystem | ||||||
| # | # | ||||||
| CONFIG_CLASSIC_RCU=y | CONFIG_TREE_RCU=y | ||||||
| # CONFIG_TREE_RCU is not set | # CONFIG_TREE_PREEMPT_RCU is not set | ||||||
| # CONFIG_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_TREE_RCU_TRACE is not set | ||||||
| # CONFIG_PREEMPT_RCU_TRACE is not set |  | ||||||
| CONFIG_IKCONFIG=y | CONFIG_IKCONFIG=y | ||||||
| CONFIG_IKCONFIG_PROC=y | CONFIG_IKCONFIG_PROC=y | ||||||
| CONFIG_LOG_BUF_SHIFT=14 | CONFIG_LOG_BUF_SHIFT=14 | ||||||
|  | @ -209,8 +217,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y | ||||||
| # CONFIG_NAMESPACES is not set | # CONFIG_NAMESPACES is not set | ||||||
| CONFIG_BLK_DEV_INITRD=y | CONFIG_BLK_DEV_INITRD=y | ||||||
| CONFIG_INITRAMFS_SOURCE="" | 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_CC_OPTIMIZE_FOR_SIZE=y | ||||||
| CONFIG_SYSCTL=y | CONFIG_SYSCTL=y | ||||||
|  | CONFIG_ANON_INODES=y | ||||||
| CONFIG_EMBEDDED=y | CONFIG_EMBEDDED=y | ||||||
| CONFIG_SYSCTL_SYSCALL=y | CONFIG_SYSCTL_SYSCALL=y | ||||||
| CONFIG_KALLSYMS=y | CONFIG_KALLSYMS=y | ||||||
|  | @ -220,25 +232,35 @@ CONFIG_PRINTK=y | ||||||
| CONFIG_BUG=y | CONFIG_BUG=y | ||||||
| CONFIG_ELF_CORE=y | CONFIG_ELF_CORE=y | ||||||
| # CONFIG_PCSPKR_PLATFORM is not set | # CONFIG_PCSPKR_PLATFORM is not set | ||||||
| CONFIG_COMPAT_BRK=y |  | ||||||
| CONFIG_BASE_FULL=y | CONFIG_BASE_FULL=y | ||||||
| # CONFIG_FUTEX is not set | CONFIG_FUTEX=y | ||||||
| CONFIG_ANON_INODES=y |  | ||||||
| # CONFIG_EPOLL is not set | # CONFIG_EPOLL is not set | ||||||
| CONFIG_SIGNALFD=y | CONFIG_SIGNALFD=y | ||||||
| CONFIG_TIMERFD=y | CONFIG_TIMERFD=y | ||||||
| CONFIG_EVENTFD=y | CONFIG_EVENTFD=y | ||||||
| CONFIG_SHMEM=y | CONFIG_SHMEM=y | ||||||
| CONFIG_AIO=y | CONFIG_AIO=y | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Kernel Performance Events And Counters | ||||||
|  | # | ||||||
| CONFIG_VM_EVENT_COUNTERS=y | CONFIG_VM_EVENT_COUNTERS=y | ||||||
| CONFIG_PCI_QUIRKS=y | CONFIG_PCI_QUIRKS=y | ||||||
|  | CONFIG_COMPAT_BRK=y | ||||||
| CONFIG_SLAB=y | CONFIG_SLAB=y | ||||||
| # CONFIG_SLUB is not set | # CONFIG_SLUB is not set | ||||||
| # CONFIG_SLOB is not set | # CONFIG_SLOB is not set | ||||||
| # CONFIG_PROFILING is not set | # CONFIG_PROFILING is not set | ||||||
| CONFIG_HAVE_OPROFILE=y | 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_SLABINFO=y | ||||||
|  | CONFIG_RT_MUTEXES=y | ||||||
| CONFIG_BASE_SMALL=0 | CONFIG_BASE_SMALL=0 | ||||||
| CONFIG_MODULES=y | CONFIG_MODULES=y | ||||||
| # CONFIG_MODULE_FORCE_LOAD is not set | # CONFIG_MODULE_FORCE_LOAD is not set | ||||||
|  | @ -246,8 +268,8 @@ CONFIG_MODULE_UNLOAD=y | ||||||
| # CONFIG_MODVERSIONS is not set | # CONFIG_MODVERSIONS is not set | ||||||
| # CONFIG_MODULE_SRCVERSION_ALL is not set | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||||||
| CONFIG_BLOCK=y | CONFIG_BLOCK=y | ||||||
| # CONFIG_LBD is not set | # CONFIG_LBDAF is not set | ||||||
| # CONFIG_BLK_DEV_IO_TRACE is not set | # CONFIG_BLK_DEV_BSG is not set | ||||||
| # CONFIG_BLK_DEV_INTEGRITY 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_ARCH_SUPPORTS_MSI is not set | ||||||
| # CONFIG_PCI_LEGACY is not set | # CONFIG_PCI_LEGACY is not set | ||||||
| # CONFIG_PCI_STUB is not set | # CONFIG_PCI_STUB is not set | ||||||
|  | # CONFIG_PCI_IOV is not set | ||||||
| CONFIG_MMU=y | CONFIG_MMU=y | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
|  | @ -288,6 +311,7 @@ CONFIG_TRAD_SIGNALS=y | ||||||
| # | # | ||||||
| # Power management options | # Power management options | ||||||
| # | # | ||||||
|  | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||||||
| CONFIG_ARCH_SUSPEND_POSSIBLE=y | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||||||
| # CONFIG_PM is not set | # CONFIG_PM is not set | ||||||
| CONFIG_NET=y | CONFIG_NET=y | ||||||
|  | @ -295,7 +319,6 @@ CONFIG_NET=y | ||||||
| # | # | ||||||
| # Networking options | # Networking options | ||||||
| # | # | ||||||
| CONFIG_COMPAT_NET_DEV_OPS=y |  | ||||||
| CONFIG_PACKET=y | CONFIG_PACKET=y | ||||||
| # CONFIG_PACKET_MMAP is not set | # CONFIG_PACKET_MMAP is not set | ||||||
| CONFIG_UNIX=y | CONFIG_UNIX=y | ||||||
|  | @ -311,6 +334,7 @@ CONFIG_IP_PNP=y | ||||||
| # CONFIG_NET_IPIP is not set | # CONFIG_NET_IPIP is not set | ||||||
| # CONFIG_NET_IPGRE is not set | # CONFIG_NET_IPGRE is not set | ||||||
| # CONFIG_IP_MROUTE is not set | # CONFIG_IP_MROUTE is not set | ||||||
|  | # CONFIG_ARPD is not set | ||||||
| # CONFIG_SYN_COOKIES is not set | # CONFIG_SYN_COOKIES is not set | ||||||
| # CONFIG_INET_AH is not set | # CONFIG_INET_AH is not set | ||||||
| # CONFIG_INET_ESP is not set | # CONFIG_INET_ESP is not set | ||||||
|  | @ -336,6 +360,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | ||||||
| # CONFIG_LLC2 is not set | # CONFIG_LLC2 is not set | ||||||
| # CONFIG_IPX is not set | # CONFIG_IPX is not set | ||||||
| # CONFIG_ATALK is not set | # CONFIG_ATALK is not set | ||||||
|  | # CONFIG_PHONET is not set | ||||||
| # CONFIG_NET_SCHED is not set | # CONFIG_NET_SCHED is not set | ||||||
| # CONFIG_DCB is not set | # CONFIG_DCB is not set | ||||||
| 
 | 
 | ||||||
|  | @ -347,7 +372,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | ||||||
| # CONFIG_CAN is not set | # CONFIG_CAN is not set | ||||||
| # CONFIG_IRDA is not set | # CONFIG_IRDA is not set | ||||||
| # CONFIG_BT is not set | # CONFIG_BT is not set | ||||||
| # CONFIG_PHONET is not set |  | ||||||
| # CONFIG_WIRELESS is not set | # CONFIG_WIRELESS is not set | ||||||
| # CONFIG_WIMAX is not set | # CONFIG_WIMAX is not set | ||||||
| # CONFIG_RFKILL is not set | # CONFIG_RFKILL is not set | ||||||
|  | @ -365,9 +389,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | ||||||
| # CONFIG_CONNECTOR is not set | # CONFIG_CONNECTOR is not set | ||||||
| CONFIG_MTD=y | CONFIG_MTD=y | ||||||
| # CONFIG_MTD_DEBUG is not set | # CONFIG_MTD_DEBUG is not set | ||||||
|  | # CONFIG_MTD_TESTS is not set | ||||||
| # CONFIG_MTD_CONCAT is not set | # CONFIG_MTD_CONCAT is not set | ||||||
| CONFIG_MTD_PARTITIONS=y | CONFIG_MTD_PARTITIONS=y | ||||||
| # CONFIG_MTD_TESTS is not set |  | ||||||
| # CONFIG_MTD_REDBOOT_PARTS is not set | # CONFIG_MTD_REDBOOT_PARTS is not set | ||||||
| CONFIG_MTD_CMDLINE_PARTS=y | CONFIG_MTD_CMDLINE_PARTS=y | ||||||
| # CONFIG_MTD_AR7_PARTS is not set | # CONFIG_MTD_AR7_PARTS is not set | ||||||
|  | @ -376,9 +400,9 @@ CONFIG_MTD_CMDLINE_PARTS=y | ||||||
| # User Modules And Translation Layers | # User Modules And Translation Layers | ||||||
| # | # | ||||||
| CONFIG_MTD_CHAR=y | CONFIG_MTD_CHAR=y | ||||||
| # CONFIG_MTD_BLKDEVS is not set | CONFIG_MTD_BLKDEVS=m | ||||||
| # CONFIG_MTD_BLOCK is not set | CONFIG_MTD_BLOCK=m | ||||||
| # CONFIG_MTD_BLOCK_RO is not set | CONFIG_MTD_BLOCK_RO=m | ||||||
| # CONFIG_FTL is not set | # CONFIG_FTL is not set | ||||||
| # CONFIG_NFTL is not set | # CONFIG_NFTL is not set | ||||||
| # CONFIG_INFTL is not set | # CONFIG_INFTL is not set | ||||||
|  | @ -414,16 +438,20 @@ CONFIG_MTD_CFI_UTIL=y | ||||||
| # | # | ||||||
| # Mapping drivers for chip access | # Mapping drivers for chip access | ||||||
| # | # | ||||||
| # CONFIG_MTD_COMPLEX_MAPPINGS is not set | CONFIG_MTD_COMPLEX_MAPPINGS=y | ||||||
| CONFIG_MTD_PHYSMAP=y | CONFIG_MTD_PHYSMAP=y | ||||||
| # CONFIG_MTD_PHYSMAP_COMPAT is not set | # 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_INTEL_VR_NOR is not set | ||||||
|  | CONFIG_MTD_RBTX4939=y | ||||||
| # CONFIG_MTD_PLATRAM is not set | # CONFIG_MTD_PLATRAM is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Self-contained MTD device drivers | # Self-contained MTD device drivers | ||||||
| # | # | ||||||
| # CONFIG_MTD_PMC551 is not set | # CONFIG_MTD_PMC551 is not set | ||||||
|  | # CONFIG_MTD_SST25L is not set | ||||||
| # CONFIG_MTD_SLRAM is not set | # CONFIG_MTD_SLRAM is not set | ||||||
| # CONFIG_MTD_PHRAM is not set | # CONFIG_MTD_PHRAM is not set | ||||||
| # CONFIG_MTD_MTDRAM 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_DOC2000 is not set | ||||||
| # CONFIG_MTD_DOC2001 is not set | # CONFIG_MTD_DOC2001 is not set | ||||||
| # CONFIG_MTD_DOC2001PLUS 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 | # 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 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | ||||||
| # | # | ||||||
|  | CONFIG_IDE_XFER_MODE=y | ||||||
| CONFIG_IDE_TIMINGS=y | CONFIG_IDE_TIMINGS=y | ||||||
| # CONFIG_BLK_DEV_IDE_SATA is not set | # CONFIG_BLK_DEV_IDE_SATA is not set | ||||||
| CONFIG_IDE_GD=y | 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_IEEE1394 is not set | ||||||
| # CONFIG_I2O is not set | # CONFIG_I2O is not set | ||||||
| CONFIG_NETDEVICES=y | CONFIG_NETDEVICES=y | ||||||
|  | @ -574,6 +616,8 @@ CONFIG_MII=y | ||||||
| # CONFIG_NET_VENDOR_3COM is not set | # CONFIG_NET_VENDOR_3COM is not set | ||||||
| CONFIG_SMC91X=y | CONFIG_SMC91X=y | ||||||
| # CONFIG_DM9000 is not set | # CONFIG_DM9000 is not set | ||||||
|  | # CONFIG_ETHOC is not set | ||||||
|  | # CONFIG_DNET is not set | ||||||
| # CONFIG_NET_TULIP is not set | # CONFIG_NET_TULIP is not set | ||||||
| # CONFIG_HP100 is not set | # CONFIG_HP100 is not set | ||||||
| CONFIG_NE2000=y | CONFIG_NE2000=y | ||||||
|  | @ -602,18 +646,15 @@ CONFIG_TC35815=y | ||||||
| # CONFIG_SMSC9420 is not set | # CONFIG_SMSC9420 is not set | ||||||
| # CONFIG_SUNDANCE is not set | # CONFIG_SUNDANCE is not set | ||||||
| # CONFIG_TLAN 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_VIA_RHINE is not set | ||||||
| # CONFIG_ATL2 is not set | # CONFIG_ATL2 is not set | ||||||
| # CONFIG_NETDEV_1000 is not set | # CONFIG_NETDEV_1000 is not set | ||||||
| # CONFIG_NETDEV_10000 is not set | # CONFIG_NETDEV_10000 is not set | ||||||
| # CONFIG_TR is not set | # CONFIG_TR is not set | ||||||
| 
 | # CONFIG_WLAN is not set | ||||||
| # |  | ||||||
| # Wireless LAN |  | ||||||
| # |  | ||||||
| # CONFIG_WLAN_PRE80211 is not set |  | ||||||
| # CONFIG_WLAN_80211 is not set |  | ||||||
| # CONFIG_IWLWIFI_LEDS is not set |  | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Enable WiMAX (Networking options) to see the WiMAX drivers | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||||||
|  | @ -653,6 +694,7 @@ CONFIG_DEVKMEM=y | ||||||
| # | # | ||||||
| # Non-8250 serial port support | # Non-8250 serial port support | ||||||
| # | # | ||||||
|  | # CONFIG_SERIAL_MAX3100 is not set | ||||||
| CONFIG_SERIAL_CORE=y | CONFIG_SERIAL_CORE=y | ||||||
| CONFIG_SERIAL_CORE_CONSOLE=y | CONFIG_SERIAL_CORE_CONSOLE=y | ||||||
| CONFIG_SERIAL_TXX9=y | CONFIG_SERIAL_TXX9=y | ||||||
|  | @ -666,7 +708,9 @@ CONFIG_UNIX98_PTYS=y | ||||||
| CONFIG_LEGACY_PTYS=y | CONFIG_LEGACY_PTYS=y | ||||||
| CONFIG_LEGACY_PTY_COUNT=256 | CONFIG_LEGACY_PTY_COUNT=256 | ||||||
| # CONFIG_IPMI_HANDLER is not set | # 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_R3964 is not set | ||||||
| # CONFIG_APPLICOM is not set | # CONFIG_APPLICOM is not set | ||||||
| # CONFIG_RAW_DRIVER is not set | # CONFIG_RAW_DRIVER is not set | ||||||
|  | @ -686,6 +730,10 @@ CONFIG_SPI_TXX9=y | ||||||
| # SPI Protocol Masters | # SPI Protocol Masters | ||||||
| # | # | ||||||
| # CONFIG_SPI_TLE62X0 is not set | # CONFIG_SPI_TLE62X0 is not set | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # PPS support | ||||||
|  | # | ||||||
| CONFIG_ARCH_REQUIRE_GPIOLIB=y | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||||||
| CONFIG_GPIOLIB=y | CONFIG_GPIOLIB=y | ||||||
| 
 | 
 | ||||||
|  | @ -701,17 +749,22 @@ CONFIG_GPIOLIB=y | ||||||
| # PCI GPIO expanders: | # PCI GPIO expanders: | ||||||
| # | # | ||||||
| # CONFIG_GPIO_BT8XX is not set | # CONFIG_GPIO_BT8XX is not set | ||||||
|  | # CONFIG_GPIO_LANGWELL is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # SPI GPIO expanders: | # SPI GPIO expanders: | ||||||
| # | # | ||||||
| # CONFIG_GPIO_MAX7301 is not set | # CONFIG_GPIO_MAX7301 is not set | ||||||
| # CONFIG_GPIO_MCP23S08 is not set | # CONFIG_GPIO_MCP23S08 is not set | ||||||
|  | # CONFIG_GPIO_MC33880 is not set | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # AC97 GPIO expanders: | ||||||
|  | # | ||||||
| # CONFIG_W1 is not set | # CONFIG_W1 is not set | ||||||
| # CONFIG_POWER_SUPPLY is not set | # CONFIG_POWER_SUPPLY is not set | ||||||
| # CONFIG_HWMON is not set | # CONFIG_HWMON is not set | ||||||
| # CONFIG_THERMAL is not set | # CONFIG_THERMAL is not set | ||||||
| # CONFIG_THERMAL_HWMON is not set |  | ||||||
| CONFIG_WATCHDOG=y | CONFIG_WATCHDOG=y | ||||||
| # CONFIG_WATCHDOG_NOWAYOUT is not set | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||||||
| 
 | 
 | ||||||
|  | @ -740,28 +793,17 @@ CONFIG_SSB_POSSIBLE=y | ||||||
| # CONFIG_MFD_CORE is not set | # CONFIG_MFD_CORE is not set | ||||||
| # CONFIG_MFD_SM501 is not set | # CONFIG_MFD_SM501 is not set | ||||||
| # CONFIG_HTC_PASIC3 is not set | # CONFIG_HTC_PASIC3 is not set | ||||||
|  | # CONFIG_UCB1400_CORE is not set | ||||||
| # CONFIG_MFD_TMIO 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 | # CONFIG_REGULATOR is not set | ||||||
| 
 | # CONFIG_MEDIA_SUPPORT 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 |  | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Graphics support | # Graphics support | ||||||
| # | # | ||||||
|  | # CONFIG_VGA_ARB is not set | ||||||
| # CONFIG_DRM is not set | # CONFIG_DRM is not set | ||||||
| # CONFIG_VGASTATE is not set | # CONFIG_VGASTATE is not set | ||||||
| # CONFIG_VIDEO_OUTPUT_CONTROL is not set | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||||||
|  | @ -772,7 +814,42 @@ CONFIG_SSB_POSSIBLE=y | ||||||
| # Display device support | # Display device support | ||||||
| # | # | ||||||
| # CONFIG_DISPLAY_SUPPORT is not set | # 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_USB_SUPPORT is not set | ||||||
| # CONFIG_MMC is not set | # CONFIG_MMC is not set | ||||||
| # CONFIG_MEMSTICK is not set | # CONFIG_MEMSTICK is not set | ||||||
|  | @ -783,6 +860,8 @@ CONFIG_LEDS_CLASS=y | ||||||
| # LED drivers | # LED drivers | ||||||
| # | # | ||||||
| CONFIG_LEDS_GPIO=y | CONFIG_LEDS_GPIO=y | ||||||
|  | CONFIG_LEDS_GPIO_PLATFORM=y | ||||||
|  | # CONFIG_LEDS_DAC124S085 is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # LED Triggers | # LED Triggers | ||||||
|  | @ -792,7 +871,12 @@ CONFIG_LEDS_TRIGGERS=y | ||||||
| CONFIG_LEDS_TRIGGER_IDE_DISK=y | CONFIG_LEDS_TRIGGER_IDE_DISK=y | ||||||
| CONFIG_LEDS_TRIGGER_HEARTBEAT=y | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||||||
| # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | ||||||
|  | # CONFIG_LEDS_TRIGGER_GPIO is not set | ||||||
| # CONFIG_LEDS_TRIGGER_DEFAULT_ON 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_ACCESSIBILITY is not set | ||||||
| # CONFIG_INFINIBAND is not set | # CONFIG_INFINIBAND is not set | ||||||
| CONFIG_RTC_LIB=y | 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_R9701 is not set | ||||||
| CONFIG_RTC_DRV_RS5C348=y | CONFIG_RTC_DRV_RS5C348=y | ||||||
| # CONFIG_RTC_DRV_DS3234 is not set | # CONFIG_RTC_DRV_DS3234 is not set | ||||||
|  | # CONFIG_RTC_DRV_PCF2123 is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Platform RTC drivers | # Platform RTC drivers | ||||||
|  | @ -840,8 +925,26 @@ CONFIG_RTC_DRV_DS1742=y | ||||||
| # on-CPU RTC drivers | # on-CPU RTC drivers | ||||||
| # | # | ||||||
| CONFIG_RTC_DRV_TX4939=y | 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 | # CONFIG_UIO is not set | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # TI VLYNQ | ||||||
|  | # | ||||||
| # CONFIG_STAGING is not set | # CONFIG_STAGING is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
|  | @ -853,9 +956,10 @@ CONFIG_RTC_DRV_TX4939=y | ||||||
| # CONFIG_REISERFS_FS is not set | # CONFIG_REISERFS_FS is not set | ||||||
| # CONFIG_JFS_FS is not set | # CONFIG_JFS_FS is not set | ||||||
| CONFIG_FS_POSIX_ACL=y | CONFIG_FS_POSIX_ACL=y | ||||||
| CONFIG_FILE_LOCKING=y |  | ||||||
| # CONFIG_XFS_FS is not set | # CONFIG_XFS_FS is not set | ||||||
| # CONFIG_OCFS2_FS is not set | # CONFIG_OCFS2_FS is not set | ||||||
|  | CONFIG_FILE_LOCKING=y | ||||||
|  | CONFIG_FSNOTIFY=y | ||||||
| # CONFIG_DNOTIFY is not set | # CONFIG_DNOTIFY is not set | ||||||
| CONFIG_INOTIFY=y | CONFIG_INOTIFY=y | ||||||
| CONFIG_INOTIFY_USER=y | CONFIG_INOTIFY_USER=y | ||||||
|  | @ -865,6 +969,10 @@ CONFIG_INOTIFY_USER=y | ||||||
| # CONFIG_FUSE_FS is not set | # CONFIG_FUSE_FS is not set | ||||||
| CONFIG_GENERIC_ACL=y | CONFIG_GENERIC_ACL=y | ||||||
| 
 | 
 | ||||||
|  | # | ||||||
|  | # Caches | ||||||
|  | # | ||||||
|  | 
 | ||||||
| # | # | ||||||
| # CD-ROM/DVD Filesystems | # CD-ROM/DVD Filesystems | ||||||
| # | # | ||||||
|  | @ -890,7 +998,27 @@ CONFIG_TMPFS=y | ||||||
| CONFIG_TMPFS_POSIX_ACL=y | CONFIG_TMPFS_POSIX_ACL=y | ||||||
| # CONFIG_HUGETLB_PAGE is not set | # CONFIG_HUGETLB_PAGE is not set | ||||||
| # CONFIG_CONFIGFS_FS 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_NETWORK_FILESYSTEMS=y | ||||||
| CONFIG_NFS_FS=y | CONFIG_NFS_FS=y | ||||||
| CONFIG_NFS_V3=y | CONFIG_NFS_V3=y | ||||||
|  | @ -922,6 +1050,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y | ||||||
| CONFIG_ENABLE_MUST_CHECK=y | CONFIG_ENABLE_MUST_CHECK=y | ||||||
| CONFIG_FRAME_WARN=1024 | CONFIG_FRAME_WARN=1024 | ||||||
| # CONFIG_MAGIC_SYSRQ is not set | # CONFIG_MAGIC_SYSRQ is not set | ||||||
|  | CONFIG_STRIP_ASM_SYMS=y | ||||||
| # CONFIG_UNUSED_SYMBOLS is not set | # CONFIG_UNUSED_SYMBOLS is not set | ||||||
| CONFIG_DEBUG_FS=y | CONFIG_DEBUG_FS=y | ||||||
| # CONFIG_HEADERS_CHECK is not set | # CONFIG_HEADERS_CHECK is not set | ||||||
|  | @ -929,11 +1058,9 @@ CONFIG_DEBUG_FS=y | ||||||
| # CONFIG_DEBUG_MEMORY_INIT is not set | # CONFIG_DEBUG_MEMORY_INIT is not set | ||||||
| # CONFIG_RCU_CPU_STALL_DETECTOR is not set | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||||||
| CONFIG_SYSCTL_SYSCALL_CHECK=y | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||||||
| 
 | CONFIG_TRACING_SUPPORT=y | ||||||
| # | # CONFIG_FTRACE is not set | ||||||
| # Tracers | # CONFIG_DYNAMIC_DEBUG is not set | ||||||
| # |  | ||||||
| # CONFIG_DYNAMIC_PRINTK_DEBUG is not set |  | ||||||
| # CONFIG_SAMPLES is not set | # CONFIG_SAMPLES is not set | ||||||
| CONFIG_HAVE_ARCH_KGDB=y | CONFIG_HAVE_ARCH_KGDB=y | ||||||
| CONFIG_CMDLINE="" | CONFIG_CMDLINE="" | ||||||
|  | @ -946,6 +1073,7 @@ CONFIG_CMDLINE="" | ||||||
| # CONFIG_SECURITYFS is not set | # CONFIG_SECURITYFS is not set | ||||||
| # CONFIG_SECURITY_FILE_CAPABILITIES is not set | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||||||
| # CONFIG_CRYPTO is not set | # CONFIG_CRYPTO is not set | ||||||
|  | # CONFIG_BINARY_PRINTF is not set | ||||||
| 
 | 
 | ||||||
| # | # | ||||||
| # Library routines | # Library routines | ||||||
|  | @ -959,6 +1087,10 @@ CONFIG_GENERIC_FIND_LAST_BIT=y | ||||||
| CONFIG_CRC32=y | CONFIG_CRC32=y | ||||||
| # CONFIG_CRC7 is not set | # CONFIG_CRC7 is not set | ||||||
| # CONFIG_LIBCRC32C 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_IOMEM=y | ||||||
| CONFIG_HAS_IOPORT=y | CONFIG_HAS_IOPORT=y | ||||||
| CONFIG_HAS_DMA=y | CONFIG_HAS_DMA=y | ||||||
|  | CONFIG_NLATTR=y | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <asm/scatterlist.h> | #include <asm/scatterlist.h> | ||||||
| #include <asm/cache.h> | #include <asm/cache.h> | ||||||
|  | #include <asm-generic/dma-coherent.h> | ||||||
| 
 | 
 | ||||||
| void *dma_alloc_noncoherent(struct device *dev, size_t size, | void *dma_alloc_noncoherent(struct device *dev, size_t size, | ||||||
| 			   dma_addr_t *dma_handle, gfp_t flag); | 			   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, | extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | ||||||
| 	       enum dma_data_direction direction); | 	       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 */ | #endif /* _ASM_DMA_MAPPING_H */ | ||||||
|  |  | ||||||
|  | @ -173,11 +173,12 @@ void smtc_distribute_timer(int vpe) | ||||||
| 	unsigned int mtflags; | 	unsigned int mtflags; | ||||||
| 	int cpu; | 	int cpu; | ||||||
| 	struct clock_event_device *cd; | 	struct clock_event_device *cd; | ||||||
| 	unsigned long nextstamp = 0L; | 	unsigned long nextstamp; | ||||||
| 	unsigned long reference; | 	unsigned long reference; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| repeat: | repeat: | ||||||
|  | 	nextstamp = 0L; | ||||||
| 	for_each_online_cpu(cpu) { | 	for_each_online_cpu(cpu) { | ||||||
| 	    /*
 | 	    /*
 | ||||||
| 	     * Find virtual CPUs within the current VPE who have | 	     * 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 |  * 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 |  * basis of the Status.FR bit.  If an FPU is not present, the FR bit | ||||||
|  * FPRs are desired, there needs to be a flip-flop that can be written |  * is hardwired to zero, which would imply a 32-bit FPU even for | ||||||
|  * to one at that bit position.  In any case, O32 MIPS ABI uses |  * 64-bit CPUs.  For 64-bit kernels with no FPU we use TIF_32BIT_REGS | ||||||
|  * only the even FPRs (Status.FR = 0). |  * 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). | ||||||
|  */ |  */ | ||||||
| 
 | static inline int cop1_64bit(struct pt_regs *xcp) | ||||||
| #define CP0_STATUS_FR_SUPPORT | { | ||||||
| 
 | 	if (cpu_has_fpu) | ||||||
| #ifdef CP0_STATUS_FR_SUPPORT | 		return xcp->cp0_status & ST0_FR; | ||||||
| #define FR_BIT ST0_FR | #ifdef CONFIG_64BIT | ||||||
|  | 	return !test_thread_flag(TIF_32BIT_REGS); | ||||||
| #else | #else | ||||||
| #define FR_BIT 0 | 	return 0; | ||||||
| #endif | #endif | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| #define SIFROMREG(si, x) ((si) = \ | #define SIFROMREG(si, x) ((si) = cop1_64bit(xcp) || !(x & 1) ? \ | ||||||
| 			(xcp->cp0_status & FR_BIT) || !(x & 1) ? \ | 			(int)ctx->fpr[x] : (int)(ctx->fpr[x & ~1] >> 32)) | ||||||
| 			(int)ctx->fpr[x] : \ | 
 | ||||||
| 			(int)(ctx->fpr[x & ~1] >> 32 )) | #define SITOREG(si, x)	(ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = \ | ||||||
| #define SITOREG(si, x)	(ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] = \ | 			cop1_64bit(xcp) || !(x & 1) ? \ | ||||||
| 			(xcp->cp0_status & FR_BIT) || !(x & 1) ? \ |  | ||||||
| 			ctx->fpr[x & ~1] >> 32 << 32 | (u32)(si) : \ | 			ctx->fpr[x & ~1] >> 32 << 32 | (u32)(si) : \ | ||||||
| 			ctx->fpr[x & ~1] << 32 >> 32 | (u64)(si) << 32) | 			ctx->fpr[x & ~1] << 32 >> 32 | (u64)(si) << 32) | ||||||
| 
 | 
 | ||||||
| #define DIFROMREG(di, x) ((di) = \ | #define DIFROMREG(di, x) ((di) = ctx->fpr[x & ~(cop1_64bit(xcp) == 0)]) | ||||||
| 			ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)]) | #define DITOREG(di, x)	(ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = (di)) | ||||||
| #define DITOREG(di, x)	(ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] \ |  | ||||||
| 			= (di)) |  | ||||||
| 
 | 
 | ||||||
| #define SPFROMREG(sp, x) SIFROMREG((sp).bits, x) | #define SPFROMREG(sp, x) SIFROMREG((sp).bits, x) | ||||||
| #define SPTOREG(sp, x)	SITOREG((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; | 	void *ret; | ||||||
| 
 | 
 | ||||||
|  | 	if (dma_alloc_from_coherent(dev, size, dma_handle, &ret)) | ||||||
|  | 		return ret; | ||||||
|  | 
 | ||||||
| 	gfp = massage_gfp_flags(dev, gfp); | 	gfp = massage_gfp_flags(dev, gfp); | ||||||
| 
 | 
 | ||||||
| 	ret = (void *) __get_free_pages(gfp, get_order(size)); | 	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) | 	dma_addr_t dma_handle) | ||||||
| { | { | ||||||
| 	unsigned long addr = (unsigned long) vaddr; | 	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); | 	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; | 	char *memsize_str; | ||||||
| 	unsigned int memsize; | 	unsigned int memsize; | ||||||
| 	char cmdline[CL_SIZE], *ptr; | 	char *ptr; | ||||||
|  | 	static char cmdline[CL_SIZE] __initdata; | ||||||
| 
 | 
 | ||||||
| 	/* otherwise look in the environment */ | 	/* otherwise look in the environment */ | ||||||
| 	memsize_str = prom_getenv("memsize"); | 	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) | void __init prom_setup_cmdline(void) | ||||||
| { | { | ||||||
| 	char cmd_line[CL_SIZE]; | 	static char cmd_line[CL_SIZE] __initdata; | ||||||
| 	char *cp, *board; | 	char *cp, *board; | ||||||
| 	int prom_argc; | 	int prom_argc; | ||||||
| 	char **prom_argv, **prom_envp; | 	char **prom_argv, **prom_envp; | ||||||
|  |  | ||||||
|  | @ -160,7 +160,7 @@ static void __init prom_init_cmdline(void) | ||||||
| 	int argc; | 	int argc; | ||||||
| 	int *argv32; | 	int *argv32; | ||||||
| 	int i;			/* Always ignore the "-c" at argv[0] */ | 	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) { | 	if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) { | ||||||
| 		/*
 | 		/*
 | ||||||
|  | @ -315,7 +315,7 @@ static inline void txx9_cache_fixup(void) | ||||||
| 
 | 
 | ||||||
| static void __init preprocess_cmdline(void) | static void __init preprocess_cmdline(void) | ||||||
| { | { | ||||||
| 	char cmdline[CL_SIZE]; | 	static char cmdline[CL_SIZE] __initdata; | ||||||
| 	char *s; | 	char *s; | ||||||
| 
 | 
 | ||||||
| 	strcpy(cmdline, arcs_cmdline); | 	strcpy(cmdline, arcs_cmdline); | ||||||
|  |  | ||||||
|  | @ -28,8 +28,6 @@ | ||||||
| #define F_SETOWN	12	/*  for sockets. */ | #define F_SETOWN	12	/*  for sockets. */ | ||||||
| #define F_SETSIG	13	/*  for sockets. */ | #define F_SETSIG	13	/*  for sockets. */ | ||||||
| #define F_GETSIG	14	/*  for sockets. */ | #define F_GETSIG	14	/*  for sockets. */ | ||||||
| #define F_GETOWN_EX	15 |  | ||||||
| #define F_SETOWN_EX	16 |  | ||||||
| 
 | 
 | ||||||
| /* for posix fcntl() and lockf() */ | /* for posix fcntl() and lockf() */ | ||||||
| #define F_RDLCK		01 | #define F_RDLCK		01 | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ static int check_elf64(void *p, int size, struct addr_range *r) | ||||||
| 
 | 
 | ||||||
| 	return 64; | 	return 64; | ||||||
| } | } | ||||||
| void get4k(FILE *file, char *buf ) | static void get4k(FILE *file, char *buf ) | ||||||
| { | { | ||||||
| 	unsigned j; | 	unsigned j; | ||||||
| 	unsigned num = fread(buf, 1, 4096, file); | 	unsigned num = fread(buf, 1, 4096, file); | ||||||
|  | @ -66,12 +66,12 @@ void get4k(FILE *file, char *buf ) | ||||||
| 		buf[j] = 0; | 		buf[j] = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void put4k(FILE *file, char *buf ) | static void put4k(FILE *file, char *buf ) | ||||||
| { | { | ||||||
| 	fwrite(buf, 1, 4096, file); | 	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); | 	fprintf(stderr, msg); | ||||||
| 	fclose(fdesc); | 	fclose(fdesc); | ||||||
|  |  | ||||||
|  | @ -55,6 +55,7 @@ static void __init reset_tod_clock(void) | ||||||
| 		disabled_wait(0); | 		disabled_wait(0); | ||||||
| 
 | 
 | ||||||
| 	sched_clock_base_cc = TOD_UNIX_EPOCH; | 	sched_clock_base_cc = TOD_UNIX_EPOCH; | ||||||
|  | 	S390_lowcore.last_update_clock = sched_clock_base_cc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_SHARED_KERNEL | #ifdef CONFIG_SHARED_KERNEL | ||||||
|  | @ -167,6 +168,14 @@ static noinline __init void create_kernel_nss(void) | ||||||
| 		return; | 		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 */ | 	/* re-setup boot command line with new ipl vm parms */ | ||||||
| 	ipl_update_parameters(); | 	ipl_update_parameters(); | ||||||
| 	setup_boot_command_line(); | 	setup_boot_command_line(); | ||||||
|  |  | ||||||
|  | @ -565,10 +565,10 @@ pgm_svcper: | ||||||
| 	lh	%r7,0x8a		# get svc number from lowcore | 	lh	%r7,0x8a		# get svc number from lowcore | ||||||
| 	l	%r9,__LC_THREAD_INFO	# load pointer to thread_info struct | 	l	%r9,__LC_THREAD_INFO	# load pointer to thread_info struct | ||||||
| 	TRACE_IRQS_OFF | 	TRACE_IRQS_OFF | ||||||
| 	l	%r1,__TI_task(%r9) | 	l	%r8,__TI_task(%r9) | ||||||
| 	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID | 	mvc	__THREAD_per+__PER_atmid(2,%r8),__LC_PER_ATMID | ||||||
| 	mvc	__THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS | 	mvc	__THREAD_per+__PER_address(4,%r8),__LC_PER_ADDRESS | ||||||
| 	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID | 	mvc	__THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID | ||||||
| 	oi	__TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP | 	oi	__TI_flags+3(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP | ||||||
| 	TRACE_IRQS_ON | 	TRACE_IRQS_ON | ||||||
| 	stosm	__SF_EMPTY(%r15),0x03	# reenable interrupts | 	stosm	__SF_EMPTY(%r15),0x03	# reenable interrupts | ||||||
|  |  | ||||||
|  | @ -543,10 +543,10 @@ pgm_svcper: | ||||||
| 	mvc	__LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | 	mvc	__LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER | ||||||
| 	llgh	%r7,__LC_SVC_INT_CODE	# get svc number from lowcore | 	llgh	%r7,__LC_SVC_INT_CODE	# get svc number from lowcore | ||||||
| 	lg	%r9,__LC_THREAD_INFO	# load pointer to thread_info struct | 	lg	%r9,__LC_THREAD_INFO	# load pointer to thread_info struct | ||||||
| 	lg	%r1,__TI_task(%r9) | 	lg	%r8,__TI_task(%r9) | ||||||
| 	mvc	__THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID | 	mvc	__THREAD_per+__PER_atmid(2,%r8),__LC_PER_ATMID | ||||||
| 	mvc	__THREAD_per+__PER_address(8,%r1),__LC_PER_ADDRESS | 	mvc	__THREAD_per+__PER_address(8,%r8),__LC_PER_ADDRESS | ||||||
| 	mvc	__THREAD_per+__PER_access_id(1,%r1),__LC_PER_ACCESS_ID | 	mvc	__THREAD_per+__PER_access_id(1,%r8),__LC_PER_ACCESS_ID | ||||||
| 	oi	__TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP | 	oi	__TI_flags+7(%r9),_TIF_SINGLE_STEP # set TIF_SINGLE_STEP | ||||||
| 	TRACE_IRQS_ON | 	TRACE_IRQS_ON | ||||||
| 	stosm	__SF_EMPTY(%r15),0x03	# reenable interrupts | 	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 = { | static struct irq_chip imask_irq_chip = { | ||||||
| 	.typename	= "SR.IMASK", | 	.name		= "SR.IMASK", | ||||||
| 	.mask		= mask_imask_irq, | 	.mask		= mask_imask_irq, | ||||||
| 	.unmask		= unmask_imask_irq, | 	.unmask		= unmask_imask_irq, | ||||||
| 	.mask_ack	= mask_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 void end_intc_irq(unsigned int irq); | ||||||
| 
 | 
 | ||||||
| static struct irq_chip intc_irq_type = { | static struct irq_chip intc_irq_type = { | ||||||
| 	.typename = "INTC", | 	.name = "INTC", | ||||||
| 	.startup = startup_intc_irq, | 	.startup = startup_intc_irq, | ||||||
| 	.shutdown = shutdown_intc_irq, | 	.shutdown = shutdown_intc_irq, | ||||||
| 	.enable = enable_intc_irq, | 	.enable = enable_intc_irq, | ||||||
|  |  | ||||||
|  | @ -61,14 +61,14 @@ unsigned long lastfoffset = -1; | ||||||
| unsigned long lastfrelno; | unsigned long lastfrelno; | ||||||
| btfixup *lastf; | btfixup *lastf; | ||||||
| 
 | 
 | ||||||
| void fatal(void) __attribute__((noreturn)); | static void fatal(void) __attribute__((noreturn)); | ||||||
| void fatal(void) | static void fatal(void) | ||||||
| { | { | ||||||
| 	fprintf(stderr, "Malformed output from objdump\n%s\n", buffer); | 	fprintf(stderr, "Malformed output from objdump\n%s\n", buffer); | ||||||
| 	exit(1); | 	exit(1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| btfixup *find(int type, char *name) | static btfixup *find(int type, char *name) | ||||||
| { | { | ||||||
| 	int i; | 	int i; | ||||||
| 	for (i = 0; i < last; i++) { | 	for (i = 0; i < last; i++) { | ||||||
|  | @ -88,7 +88,7 @@ btfixup *find(int type, char *name) | ||||||
| 	return array + last - 1; | 	return array + last - 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void set_mode (char *buffer) | static void set_mode (char *buffer) | ||||||
| { | { | ||||||
|   	for (mode = 0;; mode++) |   	for (mode = 0;; mode++) | ||||||
| 		if (buffer[mode] < '0' || buffer[mode] > '9') | 		if (buffer[mode] < '0' || buffer[mode] > '9') | ||||||
|  |  | ||||||
|  | @ -35,17 +35,17 @@ | ||||||
|  * as PROM looks for a.out image only. |  * 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]; | 	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]; | 	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[0] = x >> 24; | ||||||
| 	p[1] = x >> 16; | 	p[1] = x >> 16; | ||||||
|  | @ -53,7 +53,7 @@ void st4(char *p, unsigned int x) | ||||||
| 	p[3] = x; | 	p[3] = x; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void usage(void) | static void usage(void) | ||||||
| { | { | ||||||
| 	/* fs_img.gz is an image of initial ramdisk. */ | 	/* fs_img.gz is an image of initial ramdisk. */ | ||||||
| 	fprintf(stderr, "Usage: piggyback vmlinux.aout System.map fs_img.gz\n"); | 	fprintf(stderr, "Usage: piggyback vmlinux.aout System.map fs_img.gz\n"); | ||||||
|  | @ -61,7 +61,7 @@ void usage(void) | ||||||
| 	exit(1); | 	exit(1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void die(char *str) | static void die(char *str) | ||||||
| { | { | ||||||
| 	perror (str); | 	perror (str); | ||||||
| 	exit(1); | 	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
 | /* 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 */ |    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); | 	perror (str); | ||||||
| 	exit(1); | 	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) | 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 | 	 * AL30: A Machine Check Exception (MCE) Occurring during an | ||||||
| 	 * Enhanced Intel SpeedStep Technology Ratio Change May Cause | 	 * 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_vendor == X86_VENDOR_INTEL) { | ||||||
| 		if ((c->x86 == 15) && | 		if ((c->x86 == 15) && | ||||||
| 		    (c->x86_model == 6) && | 		    (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 -ENODEV; | ||||||
|  | 		    } | ||||||
| 		} | 		} | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -549,13 +555,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | ||||||
| 	unsigned int result = 0; | 	unsigned int result = 0; | ||||||
| 	struct cpuinfo_x86 *c = &cpu_data(policy->cpu); | 	struct cpuinfo_x86 *c = &cpu_data(policy->cpu); | ||||||
| 	struct acpi_processor_performance *perf; | 	struct acpi_processor_performance *perf; | ||||||
|  | #ifdef CONFIG_SMP | ||||||
|  | 	static int blacklisted; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	dprintk("acpi_cpufreq_cpu_init\n"); | 	dprintk("acpi_cpufreq_cpu_init\n"); | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_SMP | #ifdef CONFIG_SMP | ||||||
| 	result = acpi_cpufreq_blacklist(c); | 	if (blacklisted) | ||||||
| 	if (result) | 		return blacklisted; | ||||||
| 		return result; | 	blacklisted = acpi_cpufreq_blacklist(c); | ||||||
|  | 	if (blacklisted) | ||||||
|  | 		return blacklisted; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	data = kzalloc(sizeof(struct acpi_cpufreq_data), GFP_KERNEL); | 	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)); | 			memcpy(eblcr, samuel2_eblcr, sizeof(samuel2_eblcr)); | ||||||
| 			break; | 			break; | ||||||
| 		case 1 ... 15: | 		case 1 ... 15: | ||||||
| 			longhaul_version = TYPE_LONGHAUL_V1; | 			longhaul_version = TYPE_LONGHAUL_V2; | ||||||
| 			if (c->x86_mask < 8) { | 			if (c->x86_mask < 8) { | ||||||
| 				cpu_model = CPU_SAMUEL2; | 				cpu_model = CPU_SAMUEL2; | ||||||
| 				cpuname = "C3 'Samuel 2' [C5B]"; | 				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. | 		 * set it to 1 to avoid problems in the future. | ||||||
| 		 * For all others it's a BIOS bug. | 		 * 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 " | 			printk(KERN_ERR FW_WARN PFX "Invalid zero transition " | ||||||
| 				"latency\n"); | 				"latency\n"); | ||||||
| 		max_latency = 1; | 		max_latency = 1; | ||||||
|  |  | ||||||
|  | @ -232,28 +232,23 @@ static unsigned int speedstep_detect_chipset(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| struct get_freq_data { | static void get_freq_data(void *_speed) | ||||||
| 	unsigned int speed; |  | ||||||
| 	unsigned int processor; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static void get_freq_data(void *_data) |  | ||||||
| { | { | ||||||
| 	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) | 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. */ | 	/* 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(); | 		BUG(); | ||||||
| 
 | 
 | ||||||
| 	dprintk("detected %u kHz as current frequency\n", data.speed); | 	dprintk("detected %u kHz as current frequency\n", speed); | ||||||
| 	return data.speed; | 	return speed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  |  | ||||||
|  | @ -600,11 +600,13 @@ static int btusb_close(struct hci_dev *hdev) | ||||||
| 	btusb_stop_traffic(data); | 	btusb_stop_traffic(data); | ||||||
| 	err = usb_autopm_get_interface(data->intf); | 	err = usb_autopm_get_interface(data->intf); | ||||||
| 	if (err < 0) | 	if (err < 0) | ||||||
| 		return 0; | 		goto failed; | ||||||
| 
 | 
 | ||||||
| 	data->intf->needs_remote_wakeup = 0; | 	data->intf->needs_remote_wakeup = 0; | ||||||
| 	usb_autopm_put_interface(data->intf); | 	usb_autopm_put_interface(data->intf); | ||||||
| 
 | 
 | ||||||
|  | failed: | ||||||
|  | 	usb_scuttle_anchored_urbs(&data->deferred); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1161,12 +1161,6 @@ static int intel_i915_configure(void) | ||||||
| 
 | 
 | ||||||
| 	intel_i9xx_setup_flush(); | 	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; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -2456,6 +2450,11 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, | ||||||
| 				&bridge->mode); | 				&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); | 	pci_set_drvdata(pdev, bridge); | ||||||
| 	return agp_add_bridge(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 */ | 	   the port has just hung up or is in another error state */ | ||||||
| 	if ((filp->f_flags & O_NONBLOCK) || | 	if ((filp->f_flags & O_NONBLOCK) || | ||||||
| 			(tty->flags & (1 << TTY_IO_ERROR))) { | 			(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; | 		port->flags |= ASYNC_NORMAL_ACTIVE; | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -103,8 +103,8 @@ void vt_event_post(unsigned int event, unsigned int old, unsigned int new) | ||||||
| 		ve->event.event = event; | 		ve->event.event = event; | ||||||
| 		/* kernel view is consoles 0..n-1, user space view is
 | 		/* kernel view is consoles 0..n-1, user space view is
 | ||||||
| 		   console 1..n with 0 meaning current, so we must bias */ | 		   console 1..n with 0 meaning current, so we must bias */ | ||||||
| 		ve->event.old = old + 1; | 		ve->event.oldev = old + 1; | ||||||
| 		ve->event.new = new + 1; | 		ve->event.newev = new + 1; | ||||||
| 		wake = 1; | 		wake = 1; | ||||||
| 		ve->done = 1; | 		ve->done = 1; | ||||||
| 	} | 	} | ||||||
|  | @ -186,7 +186,7 @@ int vt_waitactive(int n) | ||||||
| 		vt_event_wait(&vw); | 		vt_event_wait(&vw); | ||||||
| 		if (vw.done == 0) | 		if (vw.done == 0) | ||||||
| 			return -EINTR; | 			return -EINTR; | ||||||
| 	} while (vw.event.new != n); | 	} while (vw.event.newev != n); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ static struct cpufreq_driver *cpufreq_driver; | ||||||
| static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); | static DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); | ||||||
| #ifdef CONFIG_HOTPLUG_CPU | #ifdef CONFIG_HOTPLUG_CPU | ||||||
| /* This one keeps track of the previously set governor of a removed 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 | #endif | ||||||
| static DEFINE_SPINLOCK(cpufreq_driver_lock); | 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 | #ifdef CONFIG_SMP | ||||||
| 	unsigned long flags; | 	unsigned long flags; | ||||||
| 	unsigned int j; | 	unsigned int j; | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_HOTPLUG_CPU | #ifdef CONFIG_HOTPLUG_CPU | ||||||
| 	if (per_cpu(cpufreq_cpu_governor, cpu)) { | 	struct cpufreq_governor *gov; | ||||||
| 		policy->governor = per_cpu(cpufreq_cpu_governor, cpu); | 
 | ||||||
|  | 	gov = __find_governor(per_cpu(cpufreq_cpu_governor, cpu)); | ||||||
|  | 	if (gov) { | ||||||
|  | 		policy->governor = gov; | ||||||
| 		dprintk("Restoring governor %s for cpu %d\n", | 		dprintk("Restoring governor %s for cpu %d\n", | ||||||
| 		       policy->governor->name, cpu); | 		       policy->governor->name, cpu); | ||||||
| 	} | 	} | ||||||
|  | @ -949,10 +951,13 @@ err_out_kobj_put: | ||||||
| static int cpufreq_add_dev(struct sys_device *sys_dev) | static int cpufreq_add_dev(struct sys_device *sys_dev) | ||||||
| { | { | ||||||
| 	unsigned int cpu = sys_dev->id; | 	unsigned int cpu = sys_dev->id; | ||||||
| 	int ret = 0; | 	int ret = 0, found = 0; | ||||||
| 	struct cpufreq_policy *policy; | 	struct cpufreq_policy *policy; | ||||||
| 	unsigned long flags; | 	unsigned long flags; | ||||||
| 	unsigned int j; | 	unsigned int j; | ||||||
|  | #ifdef CONFIG_HOTPLUG_CPU | ||||||
|  | 	int sibling; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	if (cpu_is_offline(cpu)) | 	if (cpu_is_offline(cpu)) | ||||||
| 		return 0; | 		return 0; | ||||||
|  | @ -999,7 +1004,19 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | ||||||
| 	INIT_WORK(&policy->update, handle_update); | 	INIT_WORK(&policy->update, handle_update); | ||||||
| 
 | 
 | ||||||
| 	/* Set governor before ->init, so that driver could check it */ | 	/* 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
 | 	/* call driver. From then on the cpufreq must be able
 | ||||||
| 	 * to accept all calls to ->verify and ->setpolicy for this CPU | 	 * 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_SMP | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_HOTPLUG_CPU | #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 | #endif | ||||||
| 
 | 
 | ||||||
| 	/* if we have other CPUs still registered, we need to unlink them,
 | 	/* 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; | 				continue; | ||||||
| 			dprintk("removing link for cpu %u\n", j); | 			dprintk("removing link for cpu %u\n", j); | ||||||
| #ifdef CONFIG_HOTPLUG_CPU | #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 | #endif | ||||||
| 			cpu_sys_dev = get_cpu_sysdev(j); | 			cpu_sys_dev = get_cpu_sysdev(j); | ||||||
| 			sysfs_remove_link(&cpu_sys_dev->kobj, "cpufreq"); | 			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) | void cpufreq_unregister_governor(struct cpufreq_governor *governor) | ||||||
| { | { | ||||||
|  | #ifdef CONFIG_HOTPLUG_CPU | ||||||
|  | 	int cpu; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	if (!governor) | 	if (!governor) | ||||||
| 		return; | 		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); | 	mutex_lock(&cpufreq_governor_mutex); | ||||||
| 	list_del(&governor->governor_list); | 	list_del(&governor->governor_list); | ||||||
| 	mutex_unlock(&cpufreq_governor_mutex); | 	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); | 	idle_time = cputime64_sub(cur_wall_time, busy_time); | ||||||
| 	if (wall) | 	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) | 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); | 	idle_time = cputime64_sub(cur_wall_time, busy_time); | ||||||
| 	if (wall) | 	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) | 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), | 		dev = device_create(&gpio_class, desc->chip->dev, MKDEV(0, 0), | ||||||
| 				desc, ioname ? ioname : "gpio%d", gpio); | 				desc, ioname ? ioname : "gpio%d", gpio); | ||||||
| 		if (dev) { | 		if (!IS_ERR(dev)) { | ||||||
| 			if (direction_may_change) | 			if (direction_may_change) | ||||||
| 				status = sysfs_create_group(&dev->kobj, | 				status = sysfs_create_group(&dev->kobj, | ||||||
| 						&gpio_attr_group); | 						&gpio_attr_group); | ||||||
|  | @ -679,7 +679,7 @@ int gpio_export(unsigned gpio, bool direction_may_change) | ||||||
| 			if (status != 0) | 			if (status != 0) | ||||||
| 				device_unregister(dev); | 				device_unregister(dev); | ||||||
| 		} else | 		} else | ||||||
| 			status = -ENODEV; | 			status = PTR_ERR(dev); | ||||||
| 		if (status == 0) | 		if (status == 0) | ||||||
| 			set_bit(FLAG_EXPORT, &desc->flags); | 			set_bit(FLAG_EXPORT, &desc->flags); | ||||||
| 	} | 	} | ||||||
|  | @ -800,11 +800,11 @@ static int gpiochip_export(struct gpio_chip *chip) | ||||||
| 	mutex_lock(&sysfs_lock); | 	mutex_lock(&sysfs_lock); | ||||||
| 	dev = device_create(&gpio_class, chip->dev, MKDEV(0, 0), chip, | 	dev = device_create(&gpio_class, chip->dev, MKDEV(0, 0), chip, | ||||||
| 				"gpiochip%d", chip->base); | 				"gpiochip%d", chip->base); | ||||||
| 	if (dev) { | 	if (!IS_ERR(dev)) { | ||||||
| 		status = sysfs_create_group(&dev->kobj, | 		status = sysfs_create_group(&dev->kobj, | ||||||
| 				&gpiochip_attr_group); | 				&gpiochip_attr_group); | ||||||
| 	} else | 	} else | ||||||
| 		status = -ENODEV; | 		status = PTR_ERR(dev); | ||||||
| 	chip->exported = (status == 0); | 	chip->exported = (status == 0); | ||||||
| 	mutex_unlock(&sysfs_lock); | 	mutex_unlock(&sysfs_lock); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -561,7 +561,7 @@ struct table { | ||||||
| 	char *gpu_prefix; | 	char *gpu_prefix; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct offset *offset_new(unsigned o) | static struct offset *offset_new(unsigned o) | ||||||
| { | { | ||||||
| 	struct offset *offset; | 	struct offset *offset; | ||||||
| 
 | 
 | ||||||
|  | @ -573,12 +573,12 @@ struct offset *offset_new(unsigned o) | ||||||
| 	return offset; | 	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); | 	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); | 	INIT_LIST_HEAD(&t->offsets); | ||||||
| 	t->offset_max = 0; | 	t->offset_max = 0; | ||||||
|  | @ -586,7 +586,7 @@ void table_init(struct table *t) | ||||||
| 	t->table = NULL; | 	t->table = NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void table_print(struct table *t) | static void table_print(struct table *t) | ||||||
| { | { | ||||||
| 	unsigned nlloop, i, j, n, c, id; | 	unsigned nlloop, i, j, n, c, id; | ||||||
| 
 | 
 | ||||||
|  | @ -611,7 +611,7 @@ void table_print(struct table *t) | ||||||
| 	printf("};\n"); | 	printf("};\n"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int table_build(struct table *t) | static int table_build(struct table *t) | ||||||
| { | { | ||||||
| 	struct offset *offset; | 	struct offset *offset; | ||||||
| 	unsigned i, m; | 	unsigned i, m; | ||||||
|  | @ -631,7 +631,7 @@ int table_build(struct table *t) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static char gpu_name[10]; | 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; | 	FILE *file; | ||||||
| 	regex_t mask_rex; | 	regex_t mask_rex; | ||||||
|  |  | ||||||
|  | @ -350,8 +350,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | ||||||
| 
 | 
 | ||||||
| 	case FAULT: | 	case FAULT: | ||||||
| 		/* Note - only for remote1 and remote2 */ | 		/* Note - only for remote1 and remote2 */ | ||||||
| 		out = data->alarms & (sattr->index ? 0x8000 : 0x4000); | 		out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000)); | ||||||
| 		out = out ? 0 : 1; |  | ||||||
| 		break; | 		break; | ||||||
| 
 | 
 | ||||||
| 	default: | 	default: | ||||||
|  | @ -863,7 +862,7 @@ static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq, | ||||||
| 			    set_pwmfreq, INPUT, 0); | 			    set_pwmfreq, INPUT, 0); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | ||||||
| 			    set_pwmctrl, INPUT, 0); | 			    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); | 			    show_pwmchan, set_pwmchan, INPUT, 0); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | ||||||
| 			    set_pwm, MIN, 0); | 			    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); | 			    set_pwmfreq, INPUT, 1); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | ||||||
| 			    set_pwmctrl, INPUT, 1); | 			    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); | 			    show_pwmchan, set_pwmchan, INPUT, 1); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | ||||||
| 			    set_pwm, MIN, 1); | 			    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); | 			    set_pwmfreq, INPUT, 2); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl, | ||||||
| 			    set_pwmctrl, INPUT, 2); | 			    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); | 			    show_pwmchan, set_pwmchan, INPUT, 2); | ||||||
| static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm, | ||||||
| 			    set_pwm, MIN, 2); | 			    set_pwm, MIN, 2); | ||||||
|  | @ -947,19 +946,19 @@ static struct attribute *adt7475_attrs[] = { | ||||||
| 	&sensor_dev_attr_pwm1.dev_attr.attr, | 	&sensor_dev_attr_pwm1.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm1_freq.dev_attr.attr, | 	&sensor_dev_attr_pwm1_freq.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm1_enable.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_point1_pwm.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm1_auto_point2_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.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm2_freq.dev_attr.attr, | 	&sensor_dev_attr_pwm2_freq.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm2_enable.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_point1_pwm.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm2_auto_point2_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.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm3_freq.dev_attr.attr, | 	&sensor_dev_attr_pwm3_freq.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm3_enable.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_point1_pwm.dev_attr.attr, | ||||||
| 	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, | 	&sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, | ||||||
| 	NULL, | 	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 */ | 	/* 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->valid) { | ||||||
| 		data->config5 = adt7475_read(REG_CONFIG5); | 		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++) { | 	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; | 			continue; | ||||||
| 
 | 
 | ||||||
| 		if (pdata->in[i]->mult >= 0x10000) | 		if (cfg->mult >= 0x10000) | ||||||
| 			dev_warn(&dev->dev, | 			dev_warn(&dev->dev, | ||||||
| 				 "channel %d multiplier too large\n", | 				 "channel %d multiplier too large\n", | ||||||
| 				 i); | 				 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], | 		ret = s3c_hwmon_create_attr(&dev->dev, pdata->in[i], | ||||||
| 					    &hwmon->attrs[i], i); | 					    &hwmon->attrs[i], i); | ||||||
| 		if (ret) { | 		if (ret) { | ||||||
|  |  | ||||||
|  | @ -19,7 +19,9 @@ | ||||||
| #include <linux/completion.h> | #include <linux/completion.h> | ||||||
| #include <linux/platform_device.h> | #include <linux/platform_device.h> | ||||||
| #include <linux/i2c-pnx.h> | #include <linux/i2c-pnx.h> | ||||||
|  | #include <linux/io.h> | ||||||
| #include <mach/hardware.h> | #include <mach/hardware.h> | ||||||
|  | #include <mach/i2c.h> | ||||||
| #include <asm/irq.h> | #include <asm/irq.h> | ||||||
| #include <asm/uaccess.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; | 	struct timer_list *timer = &data->mif.timer; | ||||||
| 	int expires = I2C_PNX_TIMEOUT / (1000 / HZ); | 	int expires = I2C_PNX_TIMEOUT / (1000 / HZ); | ||||||
| 
 | 
 | ||||||
|  | 	if (expires <= 1) | ||||||
|  | 		expires = 2; | ||||||
|  | 
 | ||||||
| 	del_timer_sync(timer); | 	del_timer_sync(timer); | ||||||
| 
 | 
 | ||||||
| 	dev_dbg(&adap->dev, "Timer armed at %lu plus %u jiffies.\n", | 	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->ff = ff; | ||||||
| 	dev->flush = flush_effects; | 	dev->flush = flush_effects; | ||||||
| 	dev->event = input_ff_event; | 	dev->event = input_ff_event; | ||||||
| 	set_bit(EV_FF, dev->evbit); | 	__set_bit(EV_FF, dev->evbit); | ||||||
| 
 | 
 | ||||||
| 	/* Copy "true" bits into ff device bitmap */ | 	/* Copy "true" bits into ff device bitmap */ | ||||||
| 	for (i = 0; i <= FF_MAX; i++) | 	for (i = 0; i <= FF_MAX; i++) | ||||||
| 		if (test_bit(i, dev->ffbit)) | 		if (test_bit(i, dev->ffbit)) | ||||||
| 			set_bit(i, ff->ffbit); | 			__set_bit(i, ff->ffbit); | ||||||
| 
 | 
 | ||||||
| 	/* we can emulate RUMBLE with periodic effects */ | 	/* we can emulate RUMBLE with periodic effects */ | ||||||
| 	if (test_bit(FF_PERIODIC, ff->ffbit)) | 	if (test_bit(FF_PERIODIC, ff->ffbit)) | ||||||
| 		set_bit(FF_RUMBLE, dev->ffbit); | 		__set_bit(FF_RUMBLE, dev->ffbit); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -362,12 +362,14 @@ EXPORT_SYMBOL_GPL(input_ff_create); | ||||||
|  */ |  */ | ||||||
| void input_ff_destroy(struct input_dev *dev) | void input_ff_destroy(struct input_dev *dev) | ||||||
| { | { | ||||||
| 	clear_bit(EV_FF, dev->evbit); | 	struct ff_device *ff = dev->ff; | ||||||
| 	if (dev->ff) { | 
 | ||||||
| 		if (dev->ff->destroy) | 	__clear_bit(EV_FF, dev->evbit); | ||||||
| 			dev->ff->destroy(dev->ff); | 	if (ff) { | ||||||
| 		kfree(dev->ff->private); | 		if (ff->destroy) | ||||||
| 		kfree(dev->ff); | 			ff->destroy(ff); | ||||||
|  | 		kfree(ff->private); | ||||||
|  | 		kfree(ff); | ||||||
| 		dev->ff = NULL; | 		dev->ff = NULL; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -61,7 +61,6 @@ struct ml_device { | ||||||
| 	struct ml_effect_state states[FF_MEMLESS_EFFECTS]; | 	struct ml_effect_state states[FF_MEMLESS_EFFECTS]; | ||||||
| 	int gain; | 	int gain; | ||||||
| 	struct timer_list timer; | 	struct timer_list timer; | ||||||
| 	spinlock_t timer_lock; |  | ||||||
| 	struct input_dev *dev; | 	struct input_dev *dev; | ||||||
| 
 | 
 | ||||||
| 	int (*play_effect)(struct input_dev *dev, void *data, | 	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 input_dev *dev = (struct input_dev *)timer_data; | ||||||
| 	struct ml_device *ml = dev->ff->private; | 	struct ml_device *ml = dev->ff->private; | ||||||
|  | 	unsigned long flags; | ||||||
| 
 | 
 | ||||||
| 	debug("timer: updating effects"); | 	debug("timer: updating effects"); | ||||||
| 
 | 
 | ||||||
| 	spin_lock(&ml->timer_lock); | 	spin_lock_irqsave(&dev->event_lock, flags); | ||||||
| 	ml_play_effects(ml); | 	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) | static void ml_ff_set_gain(struct input_dev *dev, u16 gain) | ||||||
| { | { | ||||||
| 	struct ml_device *ml = dev->ff->private; | 	struct ml_device *ml = dev->ff->private; | ||||||
| 	int i; | 	int i; | ||||||
| 
 | 
 | ||||||
| 	spin_lock_bh(&ml->timer_lock); |  | ||||||
| 
 |  | ||||||
| 	ml->gain = gain; | 	ml->gain = gain; | ||||||
| 
 | 
 | ||||||
| 	for (i = 0; i < FF_MEMLESS_EFFECTS; i++) | 	for (i = 0; i < FF_MEMLESS_EFFECTS; i++) | ||||||
| 		__clear_bit(FF_EFFECT_PLAYING, &ml->states[i].flags); | 		__clear_bit(FF_EFFECT_PLAYING, &ml->states[i].flags); | ||||||
| 
 | 
 | ||||||
| 	ml_play_effects(ml); | 	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) | static int ml_ff_playback(struct input_dev *dev, int effect_id, int value) | ||||||
| { | { | ||||||
| 	struct ml_device *ml = dev->ff->private; | 	struct ml_device *ml = dev->ff->private; | ||||||
| 	struct ml_effect_state *state = &ml->states[effect_id]; | 	struct ml_effect_state *state = &ml->states[effect_id]; | ||||||
| 	unsigned long flags; |  | ||||||
| 
 |  | ||||||
| 	spin_lock_irqsave(&ml->timer_lock, flags); |  | ||||||
| 
 | 
 | ||||||
| 	if (value > 0) { | 	if (value > 0) { | ||||||
| 		debug("initiated play"); | 		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); | 		ml_play_effects(ml); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	spin_unlock_irqrestore(&ml->timer_lock, flags); |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -436,7 +433,7 @@ static int ml_ff_upload(struct input_dev *dev, | ||||||
| 	struct ml_device *ml = dev->ff->private; | 	struct ml_device *ml = dev->ff->private; | ||||||
| 	struct ml_effect_state *state = &ml->states[effect->id]; | 	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)) { | 	if (test_bit(FF_EFFECT_STARTED, &state->flags)) { | ||||||
| 		__clear_bit(FF_EFFECT_PLAYING, &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); | 		ml_schedule_timer(ml); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	spin_unlock_bh(&ml->timer_lock); | 	spin_unlock_irq(&dev->event_lock); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -482,7 +479,6 @@ int input_ff_create_memless(struct input_dev *dev, void *data, | ||||||
| 	ml->private = data; | 	ml->private = data; | ||||||
| 	ml->play_effect = play_effect; | 	ml->play_effect = play_effect; | ||||||
| 	ml->gain = 0xffff; | 	ml->gain = 0xffff; | ||||||
| 	spin_lock_init(&ml->timer_lock); |  | ||||||
| 	setup_timer(&ml->timer, ml_effect_timer, (unsigned long)dev); | 	setup_timer(&ml->timer, ml_effect_timer, (unsigned long)dev); | ||||||
| 
 | 
 | ||||||
| 	set_bit(FF_GAIN, dev->ffbit); | 	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; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define INPUT_DO_TOGGLE(dev, type, bits, on)			\ | #define INPUT_DO_TOGGLE(dev, type, bits, on)				\ | ||||||
| 	do {							\ | 	do {								\ | ||||||
| 		int i;						\ | 		int i;							\ | ||||||
| 		if (!test_bit(EV_##type, dev->evbit))		\ | 		bool active;						\ | ||||||
| 			break;					\ | 									\ | ||||||
| 		for (i = 0; i < type##_MAX; i++) {		\ | 		if (!test_bit(EV_##type, dev->evbit))			\ | ||||||
| 			if (!test_bit(i, dev->bits##bit) ||	\ | 			break;						\ | ||||||
| 			    !test_bit(i, dev->bits))		\ | 									\ | ||||||
| 				continue;			\ | 		for (i = 0; i < type##_MAX; i++) {			\ | ||||||
| 			dev->event(dev, EV_##type, i, on);	\ | 			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) | 	} while (0) | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_PM | #ifdef CONFIG_PM | ||||||
|  |  | ||||||
|  | @ -1174,6 +1174,18 @@ static int atkbd_reconnect(struct serio *serio) | ||||||
| 			return -1; | 			return -1; | ||||||
| 
 | 
 | ||||||
| 		atkbd_activate(atkbd); | 		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); | 	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->dev = new_dev; | ||||||
| 		atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra); | 		atkbd->set = atkbd_select_set(atkbd, value, atkbd->extra); | ||||||
|  | 		atkbd_reset_state(atkbd); | ||||||
| 		atkbd_activate(atkbd); | 		atkbd_activate(atkbd); | ||||||
| 		atkbd_set_keycode_table(atkbd); | 		atkbd_set_keycode_table(atkbd); | ||||||
| 		atkbd_set_device_attrs(atkbd); | 		atkbd_set_device_attrs(atkbd); | ||||||
|  |  | ||||||
|  | @ -107,8 +107,7 @@ static const struct dmi_system_id lifebook_dmi_table[] = { | ||||||
| 		.matches = { | 		.matches = { | ||||||
| 			DMI_MATCH(DMI_PRODUCT_NAME, "CF-72"), | 			DMI_MATCH(DMI_PRODUCT_NAME, "CF-72"), | ||||||
| 		}, | 		}, | ||||||
| 		.callback = lifebook_set_serio_phys, | 		.callback = lifebook_set_6byte_proto, | ||||||
| 		.driver_data = "isa0060/serio3", |  | ||||||
| 	}, | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		.ident = "Lifebook B142", | 		.ident = "Lifebook B142", | ||||||
|  |  | ||||||
|  | @ -581,7 +581,7 @@ static int cortron_detect(struct psmouse *psmouse, bool set_properties) | ||||||
| static int psmouse_extensions(struct psmouse *psmouse, | static int psmouse_extensions(struct psmouse *psmouse, | ||||||
| 			      unsigned int max_proto, bool set_properties) | 			      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 |  * 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); | 	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) | static int __init psmouse_init(void) | ||||||
|  |  | ||||||
|  | @ -5481,7 +5481,7 @@ HFCmulti_init(void) | ||||||
| 		if (err) { | 		if (err) { | ||||||
| 			printk(KERN_ERR "error registering embedded driver: " | 			printk(KERN_ERR "error registering embedded driver: " | ||||||
| 				"%x\n", err); | 				"%x\n", err); | ||||||
| 			return -err; | 			return err; | ||||||
| 		} | 		} | ||||||
| 		HFC_cnt++; | 		HFC_cnt++; | ||||||
| 		printk(KERN_INFO "%d devices registered\n", 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); | 	int sz = ISDN_MAX_CHANNELS*sizeof(ippp_bundle); | ||||||
| 	if( (isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL ) | 	if( (isdn_ppp_bundle_arr = kzalloc(sz, GFP_KERNEL)) == NULL ) | ||||||
| 		return -ENOMEM; | 		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); | 		spin_lock_init(&isdn_ppp_bundle_arr[i].lock); | ||||||
| 		skb_queue_head_init(&isdn_ppp_bundle_arr[i].frags); |  | ||||||
| 	} |  | ||||||
| 	return 0; | 	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) | 		if ((lp->netdev->pb = isdn_ppp_mp_bundle_alloc()) == NULL) | ||||||
| 			return -ENOMEM; | 			return -ENOMEM; | ||||||
| 		lp->next = lp->last = lp;	/* nobody else in a queue */ | 		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->frames = 0; | ||||||
| 		lp->netdev->pb->seq = UINT_MAX; | 		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,  | static u32 isdn_ppp_mp_get_seq( int short_seq,  | ||||||
| 					struct sk_buff * skb, u32 last_seq ); | 					struct sk_buff * skb, u32 last_seq ); | ||||||
| static void isdn_ppp_mp_discard(ippp_bundle *mp, struct sk_buff *from, | static struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, | ||||||
| 				struct sk_buff *to); | 			struct sk_buff * from, struct sk_buff * to ); | ||||||
| static void isdn_ppp_mp_reassembly(isdn_net_dev *net_dev, isdn_net_local *lp, | static void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, | ||||||
| 				   struct sk_buff *from, struct sk_buff *to, | 				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 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_print_recv_pkt( int slot, struct sk_buff * skb ); | ||||||
| 
 | 
 | ||||||
| static void isdn_ppp_mp_receive(isdn_net_dev * net_dev, isdn_net_local * lp,  | 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; | 	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; | 	unsigned long flags; | ||||||
| 	isdn_net_local *lpq; |  | ||||||
| 	ippp_bundle *mp; |  | ||||||
| 	int slot; | 	int slot; | ||||||
| 
 | 
 | ||||||
| 	spin_lock_irqsave(&net_dev->pb->lock, flags); | 	spin_lock_irqsave(&net_dev->pb->lock, flags); | ||||||
| 	mp = net_dev->pb; |     	mp = net_dev->pb; | ||||||
| 	stats = &mp->stats; |         stats = &mp->stats; | ||||||
| 	slot = lp->ppp_slot; | 	slot = lp->ppp_slot; | ||||||
| 	if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | 	if (slot < 0 || slot >= ISDN_MAX_CHANNELS) { | ||||||
| 		printk(KERN_ERR "%s: lp->ppp_slot(%d)\n", | 		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; | 		return; | ||||||
| 	} | 	} | ||||||
| 	is = ippp_table[slot]; | 	is = ippp_table[slot]; | ||||||
| 	if (++mp->frames > stats->max_queue_len) |     	if( ++mp->frames > stats->max_queue_len ) | ||||||
| 		stats->max_queue_len = mp->frames; | 		stats->max_queue_len = mp->frames; | ||||||
| 
 | 	 | ||||||
| 	if (is->debug & 0x8) | 	if (is->debug & 0x8) | ||||||
| 		isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb); | 		isdn_ppp_mp_print_recv_pkt(lp->ppp_slot, skb); | ||||||
| 
 | 
 | ||||||
| 	newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ, | 	newseq = isdn_ppp_mp_get_seq(is->mpppcfg & SC_IN_SHORT_SEQ,  | ||||||
| 				     skb, is->last_link_seqno); | 						skb, is->last_link_seqno); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 	/* if this packet seq # is less than last already processed one,
 | 	/* if this packet seq # is less than last already processed one,
 | ||||||
| 	 * toss it right away, but check for sequence start case first  | 	 * 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
 | 		mp->seq = newseq;	/* the first packet: required for
 | ||||||
| 					 * rfc1990 non-compliant clients -- | 					 * rfc1990 non-compliant clients -- | ||||||
| 					 * prevents constant packet toss */ | 					 * 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); | 		spin_unlock_irqrestore(&mp->lock, flags); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 	 | ||||||
| 	/* find the minimum received sequence number over all links */ | 	/* find the minimum received sequence number over all links */ | ||||||
| 	is->last_link_seqno = minseq = newseq; | 	is->last_link_seqno = minseq = newseq; | ||||||
| 	for (lpq = net_dev->queue;;) { | 	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 */ | 					 * packets */ | ||||||
| 	newfrag = skb; | 	newfrag = skb; | ||||||
| 
 | 
 | ||||||
| 	/* Insert new fragment into the proper sequence slot.  */ |   	/* if this new fragment is before the first one, then enqueue it now. */ | ||||||
| 	skb_queue_walk(&mp->frags, frag) { |   	if ((frag = mp->frags) == NULL || MP_LT(newseq, MP_SEQ(frag))) { | ||||||
| 		if (MP_SEQ(frag) == newseq) { | 		newfrag->next = frag; | ||||||
| 			isdn_ppp_mp_free_skb(mp, newfrag); |     		mp->frags = frag = newfrag; | ||||||
| 			newfrag = NULL; |     		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); |  | ||||||
| 
 | 
 | ||||||
| 	frag = skb_peek(&mp->frags); |   	start = MP_FLAGS(frag) & MP_BEGIN_FRAG && | ||||||
| 	start = ((MP_FLAGS(frag) & MP_BEGIN_FRAG) && | 				MP_SEQ(frag) == mp->seq ? frag : NULL; | ||||||
| 		 (MP_SEQ(frag) == mp->seq)) ? frag : NULL; |  | ||||||
| 	if (!start) |  | ||||||
| 		goto check_overflow; |  | ||||||
| 
 | 
 | ||||||
| 	/* main fragment traversing loop
 | 	/* 
 | ||||||
|  | 	 * main fragment traversing loop | ||||||
| 	 * | 	 * | ||||||
| 	 * try to accomplish several tasks: | 	 * 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' | 	 * - reassemble any complete fragment sequence (non-null 'start' | ||||||
| 	 *   indicates there is a continguous sequence present) | 	 *   indicates there is a continguous sequence present) | ||||||
| 	 * - discard any incomplete sequences that are below minseq -- due | 	 * - 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 | 	 *   come to complete such sequence and it should be discarded | ||||||
| 	 * | 	 * | ||||||
| 	 * loop completes when we accomplished the following tasks: | 	 * 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  | 	 * - we hit a gap in the sequence, so no reassembly/processing is  | ||||||
| 	 *   possible ('start' would be set to NULL) | 	 *   possible ('start' would be set to NULL) | ||||||
| 	 * | 	 * | ||||||
| 	 * algorithm for this code is derived from code in the book | 	 * algorithm for this code is derived from code in the book | ||||||
| 	 * 'PPP Design And Debugging' by James Carlson (Addison-Wesley) | 	 * 'PPP Design And Debugging' by James Carlson (Addison-Wesley) | ||||||
| 	 */ | 	 */ | ||||||
| 	skb_queue_walk_safe(&mp->frags, frag, nextf) { |   	while (start != NULL || newfrag != NULL) { | ||||||
| 		thisseq = MP_SEQ(frag); |  | ||||||
| 
 | 
 | ||||||
| 		/* check for misplaced start */ |     		thisseq = MP_SEQ(frag); | ||||||
| 		if (start != frag && (MP_FLAGS(frag) & MP_BEGIN_FRAG)) { |     		nextf = frag->next; | ||||||
| 			printk(KERN_WARNING"isdn_mppp(seq %d): new " | 
 | ||||||
| 			       "BEGIN flag with no prior END", thisseq); |     		/* drop any duplicate fragments */ | ||||||
| 			stats->seqerrs++; |     		if (newfrag != NULL && thisseq == newseq) { | ||||||
| 			stats->frame_drops++; |       			isdn_ppp_mp_free_skb(mp, newfrag); | ||||||
| 			isdn_ppp_mp_discard(mp, start, frag); |       			newfrag = NULL; | ||||||
| 			start = frag; |     		} | ||||||
| 		} else if (MP_LE(thisseq, minseq)) {		 | 
 | ||||||
| 			if (MP_FLAGS(frag) & MP_BEGIN_FRAG) |     		/* 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; | 				start = frag; | ||||||
| 			else { |       			else { | ||||||
| 				if (MP_FLAGS(frag) & MP_END_FRAG) | 				if (MP_FLAGS(frag) & MP_END_FRAG) | ||||||
| 					stats->frame_drops++; | 	  				stats->frame_drops++; | ||||||
| 				__skb_unlink(skb, &mp->frags); | 				if( mp->frags == frag ) | ||||||
|  | 					mp->frags = nextf;	 | ||||||
| 				isdn_ppp_mp_free_skb(mp, frag); | 				isdn_ppp_mp_free_skb(mp, frag); | ||||||
|  | 				frag = nextf; | ||||||
| 				continue; | 				continue; | ||||||
| 			} |       			} | ||||||
| 		} | 		} | ||||||
| 
 | 		 | ||||||
| 		/* if we have end fragment, then we have full reassembly
 | 		/* if start is non-null and we have end fragment, then
 | ||||||
| 		 * sequence -- reassemble and process packet now | 		 * we have full reassembly sequence -- reassemble  | ||||||
|  | 		 * and process packet now | ||||||
| 		 */ | 		 */ | ||||||
| 		if (MP_FLAGS(frag) & MP_END_FRAG) { |     		if (start != NULL && (MP_FLAGS(frag) & MP_END_FRAG)) { | ||||||
| 			minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK; |       			minseq = mp->seq = (thisseq+1) & MP_LONGSEQ_MASK; | ||||||
| 			/* Reassemble the packet then dispatch it */ |       			/* Reassemble the packet then dispatch it */ | ||||||
| 			isdn_ppp_mp_reassembly(net_dev, lp, start, frag, thisseq); | 			isdn_ppp_mp_reassembly(net_dev, lp, start, nextf); | ||||||
|  |        | ||||||
|  |       			start = NULL; | ||||||
|  |       			frag = NULL; | ||||||
| 
 | 
 | ||||||
| 			start = NULL; |       			mp->frags = nextf; | ||||||
| 			frag = NULL; |     		} | ||||||
| 		} |  | ||||||
| 
 | 
 | ||||||
| 		/* check if need to update start pointer: if we just
 | 		/* check if need to update start pointer: if we just
 | ||||||
| 		 * reassembled the packet and sequence is contiguous | 		 * 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 | 		 * below low watermark and set start to the next frag or | ||||||
| 		 * clear start ptr. | 		 * clear start ptr. | ||||||
| 		 */  | 		 */  | ||||||
| 		if (nextf != (struct sk_buff *)&mp->frags &&  |     		if (nextf != NULL &&  | ||||||
| 		    ((thisseq+1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { | 		    ((thisseq+1) & MP_LONGSEQ_MASK) == MP_SEQ(nextf)) { | ||||||
| 			/* if we just reassembled and the next one is here, 
 |       			/* if we just reassembled and the next one is here, 
 | ||||||
| 			 * then start another reassembly. | 			 * then start another reassembly. */ | ||||||
| 			 */ | 
 | ||||||
| 			if (frag == NULL) { |       			if (frag == NULL) { | ||||||
| 				if (MP_FLAGS(nextf) & MP_BEGIN_FRAG) | 				if (MP_FLAGS(nextf) & MP_BEGIN_FRAG) | ||||||
| 					start = nextf; | 	  				start = nextf; | ||||||
| 				else { | 				else | ||||||
| 					printk(KERN_WARNING"isdn_mppp(seq %d):" | 				{ | ||||||
| 					       " END flag with no following " | 	  				printk(KERN_WARNING"isdn_mppp(seq %d):" | ||||||
| 					       "BEGIN", thisseq); | 						" END flag with no following " | ||||||
|  | 						"BEGIN", thisseq); | ||||||
| 					stats->seqerrs++; | 					stats->seqerrs++; | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} else { | 
 | ||||||
| 			if (nextf != (struct sk_buff *)&mp->frags && |     		} else { | ||||||
| 			    frag != NULL && | 			if ( nextf != NULL && frag != NULL && | ||||||
| 			    MP_LT(thisseq, minseq)) { | 						MP_LT(thisseq, minseq)) { | ||||||
| 				/* we've got a break in the sequence
 | 				/* we've got a break in the sequence
 | ||||||
| 				 * and we not at the end yet | 				 * and we not at the end yet | ||||||
| 				 * and we did not just reassembled | 				 * 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  | 			 	 * discard all the frames below low watermark  | ||||||
| 				 * and start over */ | 				 * and start over */ | ||||||
| 				stats->frame_drops++; | 				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 */ | 			/* break in the sequence, no reassembly */ | ||||||
| 			start = NULL; |       			start = NULL; | ||||||
| 		} |     		} | ||||||
| 		if (!start) | 	  			 | ||||||
| 			break; |     		frag = nextf; | ||||||
| 	} |   	}	/* while -- main loop */ | ||||||
| 
 | 	 | ||||||
| check_overflow: |   	if (mp->frags == NULL) | ||||||
|  |     		mp->frags = frag; | ||||||
|  | 		 | ||||||
| 	/* rather straighforward way to deal with (not very) possible 
 | 	/* rather straighforward way to deal with (not very) possible 
 | ||||||
| 	 * queue overflow | 	 * queue overflow */ | ||||||
| 	 */ |  | ||||||
| 	if (mp->frames > MP_MAX_QUEUE_LEN) { | 	if (mp->frames > MP_MAX_QUEUE_LEN) { | ||||||
| 		stats->overflows++; | 		stats->overflows++; | ||||||
| 		skb_queue_walk_safe(&mp->frags, frag, nextf) { | 		while (mp->frames > MP_MAX_QUEUE_LEN) { | ||||||
| 			if (mp->frames <= MP_MAX_QUEUE_LEN) | 			frag = mp->frags->next; | ||||||
| 				break; | 			isdn_ppp_mp_free_skb(mp, mp->frags); | ||||||
| 			__skb_unlink(frag, &mp->frags); | 			mp->frags = frag; | ||||||
| 			isdn_ppp_mp_free_skb(mp, frag); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	spin_unlock_irqrestore(&mp->lock, flags); | 	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; | 	struct sk_buff * frag = lp->netdev->pb->frags; | ||||||
| 
 | 	struct sk_buff * nextfrag; | ||||||
| 	skb_queue_walk_safe(&lp->netdev->pb->frags, skb, tmp) { |     	while( frag ) { | ||||||
| 		__skb_unlink(skb, &lp->netdev->pb->frags); | 		nextfrag = frag->next; | ||||||
| 		isdn_ppp_mp_free_skb(lp->netdev->pb, skb); | 		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,  | 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; | 	return seq; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void isdn_ppp_mp_discard(ippp_bundle *mp, struct sk_buff *from, | struct sk_buff * isdn_ppp_mp_discard( ippp_bundle * mp, | ||||||
| 				struct sk_buff *to) | 			struct sk_buff * from, struct sk_buff * to ) | ||||||
| { | { | ||||||
| 	if (from) { | 	if( from ) | ||||||
| 		struct sk_buff *skb, *tmp; | 		while (from != to) { | ||||||
| 		int freeing = 0; | 	  		struct sk_buff * next = from->next; | ||||||
| 
 | 			isdn_ppp_mp_free_skb(mp, from); | ||||||
| 		skb_queue_walk_safe(&mp->frags, skb, tmp) { | 	  		from = next; | ||||||
| 			if (skb == to) |  | ||||||
| 				break; |  | ||||||
| 			if (skb == from) |  | ||||||
| 				freeing = 1; |  | ||||||
| 			if (!freeing) |  | ||||||
| 				continue; |  | ||||||
| 			__skb_unlink(skb, &mp->frags); |  | ||||||
| 			isdn_ppp_mp_free_skb(mp, skb); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	return from; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static unsigned int calc_tot_len(struct sk_buff_head *queue, | void isdn_ppp_mp_reassembly( isdn_net_dev * net_dev, isdn_net_local * lp, | ||||||
| 				 struct sk_buff *from, struct sk_buff *to) | 				struct sk_buff * from, struct sk_buff * to ) | ||||||
| { | { | ||||||
| 	unsigned int tot_len = 0; | 	ippp_bundle * mp = net_dev->pb; | ||||||
| 	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; |  | ||||||
| 	int proto; | 	int proto; | ||||||
|  | 	struct sk_buff * skb; | ||||||
|  | 	unsigned int tot_len; | ||||||
| 
 | 
 | ||||||
| 	if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | 	if (lp->ppp_slot < 0 || lp->ppp_slot >= ISDN_MAX_CHANNELS) { | ||||||
| 		printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | 		printk(KERN_ERR "%s: lp->ppp_slot(%d) out of range\n", | ||||||
| 			__func__, lp->ppp_slot); | 			__func__, lp->ppp_slot); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 	if( MP_FLAGS(from) == (MP_BEGIN_FRAG | MP_END_FRAG) ) { | ||||||
| 	tot_len = calc_tot_len(&mp->frags, from, to); | 		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, " | 			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 = from; | ||||||
| 		skb_pull(skb, MP_HEADER_LEN); | 		skb_pull(skb, MP_HEADER_LEN); | ||||||
| 		__skb_unlink(skb, &mp->frags); |  | ||||||
| 		mp->frames--;	 | 		mp->frames--;	 | ||||||
| 	} else { | 	} else { | ||||||
| 		struct sk_buff *walk, *tmp; | 		struct sk_buff * frag; | ||||||
| 		int found_start = 0; | 		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 " | 			printk(KERN_DEBUG"isdn_mppp: reassembling frames %d " | ||||||
| 			       "to %d, len %d\n", MP_SEQ(from), lastseq, | 				"to %d, len %d\n", MP_SEQ(from),  | ||||||
| 			       tot_len); | 				(MP_SEQ(from)+n-1) & MP_LONGSEQ_MASK, tot_len ); | ||||||
| 
 | 		if( (skb = dev_alloc_skb(tot_len)) == NULL ) { | ||||||
| 		skb = dev_alloc_skb(tot_len); |  | ||||||
| 		if (!skb) |  | ||||||
| 			printk(KERN_ERR "isdn_mppp: cannot allocate sk buff " | 			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; | 		while( from != to ) { | ||||||
| 		skb_queue_walk_safe(&mp->frags, walk, tmp) { | 			unsigned int len = from->len - MP_HEADER_LEN; | ||||||
| 			if (walk == from) |  | ||||||
| 				found_start = 1; |  | ||||||
| 			if (!found_start) |  | ||||||
| 				continue; |  | ||||||
| 
 | 
 | ||||||
| 			if (skb) { | 			skb_copy_from_linear_data_offset(from, MP_HEADER_LEN, | ||||||
| 				unsigned int len = walk->len - MP_HEADER_LEN; | 							 skb_put(skb,len), | ||||||
| 				skb_copy_from_linear_data_offset(walk, MP_HEADER_LEN, | 							 len); | ||||||
| 								 skb_put(skb, len), | 			frag = from->next; | ||||||
| 								 len); | 			isdn_ppp_mp_free_skb(mp, from); | ||||||
| 			} | 			from = frag;  | ||||||
| 			__skb_unlink(walk, &mp->frags); |  | ||||||
| 			isdn_ppp_mp_free_skb(mp, walk); |  | ||||||
| 
 |  | ||||||
| 			if (walk == to) |  | ||||||
| 				break; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if (!skb) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
|    	proto = isdn_ppp_strip_proto(skb); |    	proto = isdn_ppp_strip_proto(skb); | ||||||
| 	isdn_ppp_push_higher(net_dev, lp, skb, proto); | 	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); | 	dev_kfree_skb(skb); | ||||||
| 	mp->frames--; | 	mp->frames--; | ||||||
|  |  | ||||||
|  | @ -78,6 +78,8 @@ static int __devinit create_gpio_led(const struct gpio_led *template, | ||||||
| { | { | ||||||
| 	int ret, state; | 	int ret, state; | ||||||
| 
 | 
 | ||||||
|  | 	led_dat->gpio = -1; | ||||||
|  | 
 | ||||||
| 	/* skip leds that aren't available */ | 	/* skip leds that aren't available */ | ||||||
| 	if (!gpio_is_valid(template->gpio)) { | 	if (!gpio_is_valid(template->gpio)) { | ||||||
| 		printk(KERN_INFO "Skipping unavailable LED gpio %d (%s)\n", | 		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 */) { | 			    desc->raid_disk < mddev->raid_disks */) { | ||||||
| 			set_bit(In_sync, &rdev->flags); | 			set_bit(In_sync, &rdev->flags); | ||||||
| 			rdev->raid_disk = desc->raid_disk; | 			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)) | 		if (desc->state & (1<<MD_DISK_WRITEMOSTLY)) | ||||||
| 			set_bit(WriteMostly, &rdev->flags); | 			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) { | 	list_for_each_entry(rdev2, &mddev->disks, same_set) { | ||||||
| 		mdp_disk_t *d; | 		mdp_disk_t *d; | ||||||
| 		int desc_nr; | 		int desc_nr; | ||||||
| 		if (rdev2->raid_disk >= 0 && test_bit(In_sync, &rdev2->flags) | 		int is_active = test_bit(In_sync, &rdev2->flags); | ||||||
| 		    && !test_bit(Faulty, &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; | 			desc_nr = rdev2->raid_disk; | ||||||
| 		else | 		else | ||||||
| 			desc_nr = next_spare++; | 			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->number = rdev2->desc_nr; | ||||||
| 		d->major = MAJOR(rdev2->bdev->bd_dev); | 		d->major = MAJOR(rdev2->bdev->bd_dev); | ||||||
| 		d->minor = MINOR(rdev2->bdev->bd_dev); | 		d->minor = MINOR(rdev2->bdev->bd_dev); | ||||||
| 		if (rdev2->raid_disk >= 0 && test_bit(In_sync, &rdev2->flags) | 		if (is_active) | ||||||
| 		    && !test_bit(Faulty, &rdev2->flags)) |  | ||||||
| 			d->raid_disk = rdev2->raid_disk; | 			d->raid_disk = rdev2->raid_disk; | ||||||
| 		else | 		else | ||||||
| 			d->raid_disk = rdev2->desc_nr; /* compatibility */ | 			d->raid_disk = rdev2->desc_nr; /* compatibility */ | ||||||
| 		if (test_bit(Faulty, &rdev2->flags)) | 		if (test_bit(Faulty, &rdev2->flags)) | ||||||
| 			d->state = (1<<MD_DISK_FAULTY); | 			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_ACTIVE); | ||||||
| 			d->state |= (1<<MD_DISK_SYNC); | 			if (test_bit(In_sync, &rdev2->flags)) | ||||||
|  | 				d->state |= (1<<MD_DISK_SYNC); | ||||||
| 			active++; | 			active++; | ||||||
| 			working++; | 			working++; | ||||||
| 		} else { | 		} else { | ||||||
|  | @ -1382,8 +1401,6 @@ static void super_1_sync(mddev_t *mddev, mdk_rdev_t *rdev) | ||||||
| 
 | 
 | ||||||
| 	if (rdev->raid_disk >= 0 && | 	if (rdev->raid_disk >= 0 && | ||||||
| 	    !test_bit(In_sync, &rdev->flags)) { | 	    !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) { | 		if (rdev->recovery_offset > 0) { | ||||||
| 			sb->feature_map |= | 			sb->feature_map |= | ||||||
| 				cpu_to_le32(MD_FEATURE_RECOVERY_OFFSET); | 				cpu_to_le32(MD_FEATURE_RECOVERY_OFFSET); | ||||||
|  | @ -1917,6 +1934,14 @@ static void sync_sbs(mddev_t * mddev, int nospares) | ||||||
| 	 */ | 	 */ | ||||||
| 	mdk_rdev_t *rdev; | 	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) { | 	list_for_each_entry(rdev, &mddev->disks, same_set) { | ||||||
| 		if (rdev->sb_events == mddev->events || | 		if (rdev->sb_events == mddev->events || | ||||||
| 		    (nospares && | 		    (nospares && | ||||||
|  |  | ||||||
|  | @ -4823,11 +4823,40 @@ static raid5_conf_t *setup_conf(mddev_t *mddev) | ||||||
| 		return ERR_PTR(-ENOMEM); | 		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) | static int run(mddev_t *mddev) | ||||||
| { | { | ||||||
| 	raid5_conf_t *conf; | 	raid5_conf_t *conf; | ||||||
| 	int working_disks = 0, chunk_size; | 	int working_disks = 0, chunk_size; | ||||||
|  | 	int dirty_parity_disks = 0; | ||||||
| 	mdk_rdev_t *rdev; | 	mdk_rdev_t *rdev; | ||||||
|  | 	sector_t reshape_offset = 0; | ||||||
| 
 | 
 | ||||||
| 	if (mddev->recovery_cp != MaxSector) | 	if (mddev->recovery_cp != MaxSector) | ||||||
| 		printk(KERN_NOTICE "raid5: %s is not clean" | 		printk(KERN_NOTICE "raid5: %s is not clean" | ||||||
|  | @ -4861,6 +4890,7 @@ static int run(mddev_t *mddev) | ||||||
| 			       "on a stripe boundary\n"); | 			       "on a stripe boundary\n"); | ||||||
| 			return -EINVAL; | 			return -EINVAL; | ||||||
| 		} | 		} | ||||||
|  | 		reshape_offset = here_new * mddev->new_chunk_sectors; | ||||||
| 		/* here_new is the stripe we will write to */ | 		/* here_new is the stripe we will write to */ | ||||||
| 		here_old = mddev->reshape_position; | 		here_old = mddev->reshape_position; | ||||||
| 		sector_div(here_old, mddev->chunk_sectors * | 		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. | 	 * 0 for a fully functional array, 1 or 2 for a degraded array. | ||||||
| 	 */ | 	 */ | ||||||
| 	list_for_each_entry(rdev, &mddev->disks, same_set) | 	list_for_each_entry(rdev, &mddev->disks, same_set) { | ||||||
| 		if (rdev->raid_disk >= 0 && | 		if (rdev->raid_disk < 0) | ||||||
| 		    test_bit(In_sync, &rdev->flags)) | 			continue; | ||||||
|  | 		if (test_bit(In_sync, &rdev->flags)) | ||||||
| 			working_disks++; | 			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) | 	mddev->degraded = (max(conf->raid_disks, conf->previous_raid_disks) | ||||||
| 			   - working_disks); | 			   - working_disks); | ||||||
|  | @ -4935,7 +5006,7 @@ static int run(mddev_t *mddev) | ||||||
| 	mddev->dev_sectors &= ~(mddev->chunk_sectors - 1); | 	mddev->dev_sectors &= ~(mddev->chunk_sectors - 1); | ||||||
| 	mddev->resync_max_sectors = mddev->dev_sectors; | 	mddev->resync_max_sectors = mddev->dev_sectors; | ||||||
| 
 | 
 | ||||||
| 	if (mddev->degraded > 0 && | 	if (mddev->degraded > dirty_parity_disks && | ||||||
| 	    mddev->recovery_cp != MaxSector) { | 	    mddev->recovery_cp != MaxSector) { | ||||||
| 		if (mddev->ok_start_degraded) | 		if (mddev->ok_start_degraded) | ||||||
| 			printk(KERN_WARNING | 			printk(KERN_WARNING | ||||||
|  | @ -5361,9 +5432,11 @@ static int raid5_start_reshape(mddev_t *mddev) | ||||||
| 		    !test_bit(Faulty, &rdev->flags)) { | 		    !test_bit(Faulty, &rdev->flags)) { | ||||||
| 			if (raid5_add_disk(mddev, rdev) == 0) { | 			if (raid5_add_disk(mddev, rdev) == 0) { | ||||||
| 				char nm[20]; | 				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++; | 				added_devices++; | ||||||
| 				rdev->recovery_offset = 0; |  | ||||||
| 				sprintf(nm, "rd%d", rdev->raid_disk); | 				sprintf(nm, "rd%d", rdev->raid_disk); | ||||||
| 				if (sysfs_create_link(&mddev->kobj, | 				if (sysfs_create_link(&mddev->kobj, | ||||||
| 						      &rdev->kobj, nm)) | 						      &rdev->kobj, nm)) | ||||||
|  |  | ||||||
|  | @ -1529,6 +1529,7 @@ static int mmc_omap_remove(struct platform_device *pdev) | ||||||
| 		host->pdata->cleanup(&pdev->dev); | 		host->pdata->cleanup(&pdev->dev); | ||||||
| 
 | 
 | ||||||
| 	mmc_omap_fclk_enable(host, 0); | 	mmc_omap_fclk_enable(host, 0); | ||||||
|  | 	free_irq(host->irq, host); | ||||||
| 	clk_put(host->fclk); | 	clk_put(host->fclk); | ||||||
| 	clk_disable(host->iclk); | 	clk_disable(host->iclk); | ||||||
| 	clk_put(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; | 	subdev->mtd->owner = THIS_MODULE; | ||||||
| 
 | 
 | ||||||
| 	printk(KERN_INFO "SA1100 flash: CFI device at 0x%08lx, %dMiB, " | 	printk(KERN_INFO "SA1100 flash: CFI device at 0x%08lx, %uMiB, %d-bit\n", | ||||||
| 		"%d-bit\n", phys, subdev->mtd->size >> 20, | 		phys, (unsigned)(subdev->mtd->size >> 20), | ||||||
| 		subdev->map.bankwidth * 8); | 		subdev->map.bankwidth * 8); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -35,66 +35,16 @@ config CAN_CALC_BITTIMING | ||||||
| 	  arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw". | 	  arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw". | ||||||
| 	  If unsure, say Y. | 	  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 | config CAN_AT91 | ||||||
| 	tristate "Atmel AT91 onchip CAN controller" | 	tristate "Atmel AT91 onchip CAN controller" | ||||||
| 	depends on CAN && CAN_DEV && ARCH_AT91SAM9263 | 	depends on CAN_DEV && ARCH_AT91SAM9263 | ||||||
| 	---help--- | 	---help--- | ||||||
| 	  This is a driver for the SoC CAN controller in Atmel's AT91SAM9263. | 	  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 | config CAN_DEBUG_DEVICES | ||||||
| 	bool "CAN devices debugging messages" | 	bool "CAN devices debugging messages" | ||||||
| 	depends on CAN | 	depends on CAN | ||||||
|  |  | ||||||
|  | @ -629,6 +629,11 @@ nla_put_failure: | ||||||
| 	return -EMSGSIZE; | 	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) | static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev) | ||||||
| { | { | ||||||
| 	struct can_priv *priv = netdev_priv(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, | 	.changelink	= can_changelink, | ||||||
| 	.get_size	= can_get_size, | 	.get_size	= can_get_size, | ||||||
| 	.fill_info	= can_fill_info, | 	.fill_info	= can_fill_info, | ||||||
|  | 	.get_xstats_size = can_get_xstats_size, | ||||||
| 	.fill_xstats	= can_fill_xstats, | 	.fill_xstats	= can_fill_xstats, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										47
									
								
								drivers/net/can/sja1000/Kconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								drivers/net/can/sja1000/Kconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
							
								
								
									
										10
									
								
								drivers/net/can/usb/Kconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								drivers/net/can/usb/Kconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 | obj-$(CONFIG_CAN_EMS_USB) += ems_usb.o | ||||||
|  | 
 | ||||||
|  | ccflags-$(CONFIG_CAN_DEBUG_DEVICES) := -DDEBUG | ||||||
|  |  | ||||||
|  | @ -879,7 +879,7 @@ recycle: | ||||||
| 	pci_dma_sync_single_for_cpu(adap->pdev, dma_addr, len, | 	pci_dma_sync_single_for_cpu(adap->pdev, dma_addr, len, | ||||||
| 				    PCI_DMA_FROMDEVICE); | 				    PCI_DMA_FROMDEVICE); | ||||||
| 	(*sd->pg_chunk.p_cnt)--; | 	(*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, | 		pci_unmap_page(adap->pdev, | ||||||
| 			       sd->pg_chunk.mapping, | 			       sd->pg_chunk.mapping, | ||||||
| 			       fl->alloc_size, | 			       fl->alloc_size, | ||||||
|  | @ -2088,7 +2088,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs, | ||||||
| 				    PCI_DMA_FROMDEVICE); | 				    PCI_DMA_FROMDEVICE); | ||||||
| 
 | 
 | ||||||
| 	(*sd->pg_chunk.p_cnt)--; | 	(*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, | 		pci_unmap_page(adap->pdev, | ||||||
| 			       sd->pg_chunk.mapping, | 			       sd->pg_chunk.mapping, | ||||||
| 			       fl->alloc_size, | 			       fl->alloc_size, | ||||||
|  |  | ||||||
|  | @ -2140,9 +2140,6 @@ static int emac_poll(struct napi_struct *napi, int budget) | ||||||
| 	u32 status = 0; | 	u32 status = 0; | ||||||
| 	u32 num_pkts = 0; | 	u32 num_pkts = 0; | ||||||
| 
 | 
 | ||||||
| 	if (!netif_running(ndev)) |  | ||||||
| 		return 0; |  | ||||||
| 
 |  | ||||||
| 	/* Check interrupt vectors and call packet processing */ | 	/* Check interrupt vectors and call packet processing */ | ||||||
| 	status = emac_read(EMAC_MACINVECTOR); | 	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->dev_addr); | ||||||
| 		dev_printk(KERN_ERR, &pci_dev->dev, | 		dev_printk(KERN_ERR, &pci_dev->dev, | ||||||
| 			"Please complain to your hardware vendor. Switching to a random MAC.\n"); | 			"Please complain to your hardware vendor. Switching to a random MAC.\n"); | ||||||
| 		dev->dev_addr[0] = 0x00; | 		random_ether_addr(dev->dev_addr); | ||||||
| 		dev->dev_addr[1] = 0x00; |  | ||||||
| 		dev->dev_addr[2] = 0x6c; |  | ||||||
| 		get_random_bytes(&dev->dev_addr[3], 3); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	dprintk(KERN_DEBUG "%s: MAC Address %pM\n", | 	dprintk(KERN_DEBUG "%s: MAC Address %pM\n", | ||||||
|  |  | ||||||
|  | @ -263,8 +263,8 @@ struct emac_regs { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /* EMACx_TRTR */ | /* EMACx_TRTR */ | ||||||
| #define EMAC_TRTR_SHIFT_EMAC4		27 | #define EMAC_TRTR_SHIFT_EMAC4		24 | ||||||
| #define EMAC_TRTR_SHIFT			24 | #define EMAC_TRTR_SHIFT		27 | ||||||
| 
 | 
 | ||||||
| /* EMAC specific TX descriptor control fields (write access) */ | /* EMAC specific TX descriptor control fields (write access) */ | ||||||
| #define EMAC_TX_CTRL_GFCS		0x0200 | #define EMAC_TX_CTRL_GFCS		0x0200 | ||||||
|  |  | ||||||
|  | @ -5994,6 +5994,7 @@ static pci_ers_result_t ixgbe_io_slot_reset(struct pci_dev *pdev) | ||||||
| 	} else { | 	} else { | ||||||
| 		pci_set_master(pdev); | 		pci_set_master(pdev); | ||||||
| 		pci_restore_state(pdev); | 		pci_restore_state(pdev); | ||||||
|  | 		pci_save_state(pdev); | ||||||
| 
 | 
 | ||||||
| 		pci_wake_from_d3(pdev, false); | 		pci_wake_from_d3(pdev, false); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -139,7 +139,7 @@ out: | ||||||
| 	return NULL; | 	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 mii_bus *bus = dev_get_drvdata(dev); | ||||||
| 	struct mdio_gpio_info *bitbang = bus->priv; | 	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. */ | 	/* Pull completed packets off the queue and receive them. */ | ||||||
| 	while ((skb = ppp_mp_reconstruct(ppp))) | 	while ((skb = ppp_mp_reconstruct(ppp))) { | ||||||
| 		ppp_receive_nonmp_frame(ppp, skb); | 		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; | 	return; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1085,7 +1085,7 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, | ||||||
| 	int bar = 0; | 	int bar = 0; | ||||||
| 	u16 *adrp; | 	u16 *adrp; | ||||||
| 
 | 
 | ||||||
| 	printk(KERN_INFO "%s\n", version); | 	printk("%s\n", version); | ||||||
| 
 | 
 | ||||||
| 	err = pci_enable_device(pdev); | 	err = pci_enable_device(pdev); | ||||||
| 	if (err) | 	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, | static void rtl8169_set_rxbufsize(struct rtl8169_private *tp, | ||||||
| 				  struct net_device *dev) | 				  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) | 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. */ | 		/* Restore the PCI state saved during initialization. */ | ||||||
| 		pci_restore_state(sp->pdev); | 		pci_restore_state(sp->pdev); | ||||||
|  | 		pci_save_state(sp->pdev); | ||||||
| 		pci_read_config_word(sp->pdev, 0x2, &val16); | 		pci_read_config_word(sp->pdev, 0x2, &val16); | ||||||
| 		if (check_pci_device_id(val16) != (u16)PCI_ANY_ID) | 		if (check_pci_device_id(val16) != (u16)PCI_ANY_ID) | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
|  | @ -986,7 +986,7 @@ static int smsc911x_poll(struct napi_struct *napi, int budget) | ||||||
| 	struct net_device *dev = pdata->dev; | 	struct net_device *dev = pdata->dev; | ||||||
| 	int npackets = 0; | 	int npackets = 0; | ||||||
| 
 | 
 | ||||||
| 	while (likely(netif_running(dev)) && (npackets < budget)) { | 	while (npackets < budget) { | ||||||
| 		unsigned int pktlength; | 		unsigned int pktlength; | ||||||
| 		unsigned int pktwords; | 		unsigned int pktwords; | ||||||
| 		struct sk_buff *skb; | 		struct sk_buff *skb; | ||||||
|  |  | ||||||
|  | @ -2063,7 +2063,15 @@ static int gem_check_invariants(struct gem *gp) | ||||||
| 		mif_cfg &= ~MIF_CFG_PSELECT; | 		mif_cfg &= ~MIF_CFG_PSELECT; | ||||||
| 		writel(mif_cfg, gp->regs + MIF_CFG); | 		writel(mif_cfg, gp->regs + MIF_CFG); | ||||||
| 	} else { | 	} 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 || | 	if (gp->phy_type == phy_mii_mdio1 || | ||||||
| 	    gp->phy_type == phy_mii_mdio0) { | 	    gp->phy_type == phy_mii_mdio0) { | ||||||
|  |  | ||||||
|  | @ -1125,7 +1125,6 @@ ath5k_mode_setup(struct ath5k_softc *sc) | ||||||
| 	/* configure operational mode */ | 	/* configure operational mode */ | ||||||
| 	ath5k_hw_set_opmode(ah); | 	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); | 	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) }, | 	{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0422), ATH_LED(1, 1) }, | ||||||
| 	/* E-machines E510 (tuliom@gmail.com) */ | 	/* E-machines E510 (tuliom@gmail.com) */ | ||||||
| 	{ ATH_SDEVICE(PCI_VENDOR_ID_AMBIT, 0x0428), ATH_LED(3, 0) }, | 	{ 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) */ | 	/* Acer Extensa 5620z (nekoreeve@gmail.com) */ | ||||||
| 	{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0105), ATH_LED(3, 0) }, | 	{ ATH_SDEVICE(PCI_VENDOR_ID_QMI, 0x0105), ATH_LED(3, 0) }, | ||||||
| 	/* Fukato Datacask Jupiter 1014a (mrb74@gmx.at) */ | 	/* Fukato Datacask Jupiter 1014a (mrb74@gmx.at) */ | ||||||
| 	{ ATH_SDEVICE(PCI_VENDOR_ID_AZWAVE, 0x1026), ATH_LED(3, 0) }, | 	{ ATH_SDEVICE(PCI_VENDOR_ID_AZWAVE, 0x1026), ATH_LED(3, 0) }, | ||||||
| 	/* IBM ThinkPad AR5BXB6 (legovini@spiro.fisica.unipd.it) */ | 	/* IBM ThinkPad AR5BXB6 (legovini@spiro.fisica.unipd.it) */ | ||||||
| 	{ ATH_SDEVICE(PCI_VENDOR_ID_IBM, 0x058a), ATH_LED(1, 0) }, | 	{ 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) */ | 	/* HP Compaq C700 (nitrousnrg@gmail.com) */ | ||||||
| 	{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) }, | 	{ ATH_SDEVICE(PCI_VENDOR_ID_HP, 0x0137b), ATH_LED(3, 1) }, | ||||||
| 	/* IBM-specific AR5212 (all others) */ | 	/* 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); | 	struct b43_wl *wl = hw_to_b43_wl(hw); | ||||||
| 
 | 
 | ||||||
| 	mutex_lock(&wl->mutex); | 	/* FIXME: add locking */ | ||||||
| 	b43_update_templates(wl); | 	b43_update_templates(wl); | ||||||
| 	mutex_unlock(&wl->mutex); |  | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Benjamin Herrenschmidt
						Benjamin Herrenschmidt