From ad9c1316106ea496848b4e99c6cc191015bec7cc Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Sun, 25 Sep 2005 16:49:53 +0000 Subject: [PATCH] Update hppa for 2.6.13. svn path=/dists/trunk/linux-2.6/; revision=4271 --- debian/changelog | 4 + debian/patches-arch/hppa.diff | 5447 +++++++++++++++++++++++++-------- 2 files changed, 4104 insertions(+), 1347 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6bf2d1b69..bfcca9f4a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -84,6 +84,10 @@ linux-2.6 (2.6.13-1) UNRELEASED; urgency=low a part which is safe to apply, and one which needs checking, and is thus not applied yet. + [ Kyle McMartin ] + * [hppa] Update hppa.diff to 2.6.13-pa4. + * [hppa] Add space register fix to pacache.S to hppa.diff. + -- Sven Luther Fri, 23 Sep 2005 21:05:59 +0200 linux-2.6 (2.6.12-6) unstable; urgency=high diff --git a/debian/patches-arch/hppa.diff b/debian/patches-arch/hppa.diff index dede0da48..7704539ff 100644 --- a/debian/patches-arch/hppa.diff +++ b/debian/patches-arch/hppa.diff @@ -1,7 +1,6 @@ -Index: linux-2.6-2.6.12/CREDITS -=================================================================== ---- linux-2.6-2.6.12.orig/CREDITS 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/CREDITS 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/CREDITS linux-2.6.13/CREDITS +--- linux-2.6.13.org/CREDITS 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/CREDITS 2005-09-25 12:34:39.000000000 -0400 @@ -611,8 +611,7 @@ N: Randolph Chung E: tausq@debian.org @@ -12,10 +11,9 @@ Index: linux-2.6-2.6.12/CREDITS N: Juan Jose Ciarlante W: http://juanjox.kernelnotes.org/ -Index: linux-2.6-2.6.12/Documentation/parisc/todo -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/Documentation/parisc/todo 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/Documentation/parisc/todo linux-2.6.13/Documentation/parisc/todo +--- linux-2.6.13.org/Documentation/parisc/todo 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/Documentation/parisc/todo 2005-09-25 12:34:39.000000000 -0400 @@ -0,0 +1,82 @@ +Status 2005-03-07 : +------------------- @@ -99,28 +97,28 @@ Index: linux-2.6-2.6.12/Documentation/parisc/todo + - fix HIL problem: ksoftirqd/0 eats 56% cpu (kernel 2.4 & kernel 2.6) + - NPTL kernel support (CLONE_*TID flags need to be correctly handled by + sys_clone() and friends) -Index: linux-2.6-2.6.12/MAINTAINERS -=================================================================== ---- linux-2.6-2.6.12.orig/MAINTAINERS 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/MAINTAINERS 2005-08-09 17:53:35.000000000 -0400 -@@ -191,6 +191,13 @@ +diff -Nur linux-2.6.13.org/MAINTAINERS linux-2.6.13/MAINTAINERS +--- linux-2.6.13.org/MAINTAINERS 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/MAINTAINERS 2005-09-25 12:34:39.000000000 -0400 +@@ -191,6 +191,15 @@ W: http://linux.thorsten-knabe.de S: Maintained +AD1889 SOUND DRIVER +P: Kyle McMartin +M: kyle@parisc-linux.org -+W: http://www.parisc-linux.org/~kyle/ad1889/ ++P: Thibaut Varene ++M: T-Bone@parisc-linux.org ++W: http://wiki.parisc-linux.org/AD1889 +L: parisc-linux@lists.parisc-linux.org +S: Maintained + ADM1025 HARDWARE MONITOR DRIVER P: Jean Delvare M: khali@linux-fr.org -Index: linux-2.6-2.6.12/arch/ia64/ia32/ia32_signal.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/ia64/ia32/ia32_signal.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/ia64/ia32/ia32_signal.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/ia64/ia32/ia32_signal.c linux-2.6.13/arch/ia64/ia32/ia32_signal.c +--- linux-2.6.13.org/arch/ia64/ia32/ia32_signal.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/ia64/ia32/ia32_signal.c 2005-09-25 12:34:39.000000000 -0400 @@ -24,6 +24,7 @@ #include #include @@ -129,10 +127,9 @@ Index: linux-2.6-2.6.12/arch/ia64/ia32/ia32_signal.c #include #include -Index: linux-2.6-2.6.12/arch/ia64/ia32/ia32priv.h -=================================================================== ---- linux-2.6-2.6.12.orig/arch/ia64/ia32/ia32priv.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/ia64/ia32/ia32priv.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/ia64/ia32/ia32priv.h linux-2.6.13/arch/ia64/ia32/ia32priv.h +--- linux-2.6.13.org/arch/ia64/ia32/ia32priv.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/ia64/ia32/ia32priv.h 2005-09-25 12:34:39.000000000 -0400 @@ -225,58 +225,6 @@ unsigned int st_ino_hi; }; @@ -153,7 +150,7 @@ Index: linux-2.6-2.6.12/arch/ia64/ia32/ia32priv.h - - /* POSIX.1b timers */ - struct { -- timer_t _tid; /* timer id */ +- compat_timer_t _tid; /* timer id */ - int _overrun; /* overrun count */ - char _pad[sizeof(unsigned int) - sizeof(int)]; - compat_sigval_t _sigval; /* same as below */ @@ -192,29 +189,47 @@ Index: linux-2.6-2.6.12/arch/ia64/ia32/ia32priv.h struct old_linux32_dirent { u32 d_ino; u32 d_offset; -Index: linux-2.6-2.6.12/arch/parisc/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/Kconfig 2005-08-09 17:53:35.000000000 -0400 -@@ -150,7 +150,7 @@ +diff -Nur linux-2.6.13.org/arch/parisc/Kconfig linux-2.6.13/arch/parisc/Kconfig +--- linux-2.6.13.org/arch/parisc/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/Kconfig 2005-09-25 12:34:39.000000000 -0400 +@@ -33,7 +33,7 @@ + default y - config DISCONTIGMEM + config GENERIC_ISA_DMA +- bool ++ def_bool n + + config GENERIC_HARDIRQS + def_bool y +@@ -46,8 +46,7 @@ + bool + + config ISA_DMA_API +- bool +- default y ++ def_bool n + + source "init/Kconfig" + +@@ -150,7 +149,7 @@ + + config ARCH_DISCONTIGMEM_ENABLE bool "Discontiguous memory support (EXPERIMENTAL)" - depends on EXPERIMENTAL + depends on 64BIT && EXPERIMENTAL help Say Y to support efficient handling of discontiguous physical memory, for architectures which are either NUMA (Non-Uniform Memory Access) -Index: linux-2.6-2.6.12/arch/parisc/Makefile -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/Makefile 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/Makefile 2005-08-09 17:53:47.000000000 -0400 -@@ -20,13 +20,13 @@ +diff -Nur linux-2.6.13.org/arch/parisc/Makefile linux-2.6.13/arch/parisc/Makefile +--- linux-2.6.13.org/arch/parisc/Makefile 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/Makefile 2005-09-25 12:34:39.000000000 -0400 +@@ -20,13 +20,14 @@ CHECKFLAGS += -D__hppa__=1 ifdef CONFIG_64BIT -CROSS_COMPILE := hppa64-linux- -+CROSS_COMPILE := hppa64-linux-gnu- ++CROSS_COMPILE := $(shell if [ -x /usr/bin/hppa64-linux-gnu-gcc ]; then \ ++ echo hppa64-linux-gnu-; else echo hppa64-linux-; fi) UTS_MACHINE := parisc64 CHECKFLAGS += -D__LP64__=1 -m64 else @@ -225,11 +240,14 @@ Index: linux-2.6-2.6.12/arch/parisc/Makefile endif endif -@@ -34,6 +34,11 @@ +@@ -34,6 +35,14 @@ OBJCOPY_FLAGS =-O binary -R .note -R .comment -S +GCC_VERSION := $(call cc-version) ++ifneq ($(shell if [ -z $(GCC_VERSION) ] ; then echo "bad"; fi ;),) ++$(error Sorry, couldn't find ($(cc-version)).) ++endif +ifneq ($(shell if [ $(GCC_VERSION) -lt 0303 ] ; then echo "bad"; fi ;),) +$(error Sorry, your compiler is too old ($(GCC_VERSION)). GCC v3.3 or above is required.) +endif @@ -237,7 +255,7 @@ Index: linux-2.6-2.6.12/arch/parisc/Makefile cflags-y := -pipe # These flags should be implied by an hppa-linux configuration, but they -@@ -43,7 +48,7 @@ +@@ -43,7 +52,7 @@ # Currently we save and restore fpregs on all kernel entry/interruption paths. # If that gets optimized, we might need to disable the use of fpregs in the # kernel. @@ -246,10 +264,9 @@ Index: linux-2.6-2.6.12/arch/parisc/Makefile # Without this, "ld -r" results in .text sections that are too big # (> 0x40000) for branches to reach stubs. -Index: linux-2.6-2.6.12/arch/parisc/configs/712_defconfig -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/configs/712_defconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/configs/712_defconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/configs/712_defconfig linux-2.6.13/arch/parisc/configs/712_defconfig +--- linux-2.6.13.org/arch/parisc/configs/712_defconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/configs/712_defconfig 2005-09-25 12:34:39.000000000 -0400 @@ -1,12 +1,16 @@ # # Automatically generated make config: don't edit @@ -599,10 +616,9 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/712_defconfig # Library routines # CONFIG_CRC_CCITT=m -Index: linux-2.6-2.6.12/arch/parisc/configs/a500_defconfig -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/configs/a500_defconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/configs/a500_defconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/configs/a500_defconfig linux-2.6.13/arch/parisc/configs/a500_defconfig +--- linux-2.6.13.org/arch/parisc/configs/a500_defconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/configs/a500_defconfig 2005-09-25 12:34:39.000000000 -0400 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit @@ -794,10 +810,9 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/a500_defconfig CONFIG_CRYPTO_DES=m CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_TWOFISH=m -Index: linux-2.6-2.6.12/arch/parisc/configs/b180_defconfig -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/configs/b180_defconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/configs/b180_defconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/configs/b180_defconfig linux-2.6.13/arch/parisc/configs/b180_defconfig +--- linux-2.6.13.org/arch/parisc/configs/b180_defconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/configs/b180_defconfig 2005-09-25 12:34:39.000000000 -0400 @@ -1,12 +1,16 @@ # # Automatically generated make config: don't edit @@ -1213,17 +1228,16 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/b180_defconfig # Library routines # # CONFIG_CRC_CCITT is not set -Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/configs/c3000_defconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/configs/c3000_defconfig linux-2.6.13/arch/parisc/configs/c3000_defconfig +--- linux-2.6.13.org/arch/parisc/configs/c3000_defconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/configs/c3000_defconfig 2005-09-25 12:34:39.000000000 -0400 @@ -1,12 +1,16 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.10-pa5 -# Wed Jan 5 13:26:49 2005 -+# Linux kernel version: 2.6.12-rc4-pa2 -+# Wed May 11 23:06:15 2005 ++# Linux kernel version: 2.6.12-pa2 ++# Sat Jun 25 03:10:57 2005 # CONFIG_PARISC=y CONFIG_MMU=y @@ -1401,7 +1415,15 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # CONFIG_FEALNX is not set CONFIG_NATSEMI=m # CONFIG_NE2K_PCI is not set -@@ -622,16 +630,6 @@ +@@ -557,6 +565,7 @@ + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + CONFIG_TIGON3=m ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) +@@ -622,16 +631,6 @@ # CONFIG_INPUT_EVBUG is not set # @@ -1418,7 +1440,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y -@@ -649,6 +647,17 @@ +@@ -649,6 +648,16 @@ # CONFIG_INPUT_MISC is not set # @@ -1430,7 +1452,6 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig +CONFIG_SERIO_LIBPS2=m +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set -+CONFIG_SOUND_GAMEPORT=y + +# # Character devices @@ -1510,7 +1531,86 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # # Sound -@@ -794,6 +816,8 @@ +@@ -784,7 +806,77 @@ + # + # Advanced Linux Sound Architecture + # +-# CONFIG_SND is not set ++CONFIG_SND=y ++CONFIG_SND_TIMER=y ++CONFIG_SND_PCM=y ++CONFIG_SND_SEQUENCER=y ++# CONFIG_SND_SEQ_DUMMY is not set ++CONFIG_SND_OSSEMUL=y ++CONFIG_SND_MIXER_OSS=y ++CONFIG_SND_PCM_OSS=y ++CONFIG_SND_SEQUENCER_OSS=y ++# CONFIG_SND_VERBOSE_PRINTK is not set ++# CONFIG_SND_DEBUG is not set ++ ++# ++# Generic devices ++# ++# CONFIG_SND_DUMMY is not set ++# CONFIG_SND_VIRMIDI is not set ++# CONFIG_SND_MTPAV is not set ++# CONFIG_SND_SERIAL_U16550 is not set ++# CONFIG_SND_MPU401 is not set ++ ++# ++# PCI devices ++# ++CONFIG_SND_AC97_CODEC=y ++# CONFIG_SND_ALI5451 is not set ++CONFIG_SND_AD1889=y ++# CONFIG_SND_AD1889_OPL3 is not set ++# CONFIG_SND_ATIIXP is not set ++# CONFIG_SND_ATIIXP_MODEM is not set ++# CONFIG_SND_AU8810 is not set ++# CONFIG_SND_AU8820 is not set ++# CONFIG_SND_AU8830 is not set ++# CONFIG_SND_AZT3328 is not set ++# CONFIG_SND_BT87X is not set ++# CONFIG_SND_CS46XX is not set ++# CONFIG_SND_CS4281 is not set ++# CONFIG_SND_EMU10K1 is not set ++# CONFIG_SND_EMU10K1X is not set ++# CONFIG_SND_CA0106 is not set ++# CONFIG_SND_KORG1212 is not set ++# CONFIG_SND_MIXART is not set ++# CONFIG_SND_NM256 is not set ++# CONFIG_SND_RME32 is not set ++# CONFIG_SND_RME96 is not set ++# CONFIG_SND_RME9652 is not set ++# CONFIG_SND_HDSP is not set ++# CONFIG_SND_TRIDENT is not set ++# CONFIG_SND_YMFPCI is not set ++# CONFIG_SND_ALS4000 is not set ++# CONFIG_SND_CMIPCI is not set ++# CONFIG_SND_ENS1370 is not set ++# CONFIG_SND_ENS1371 is not set ++# CONFIG_SND_ES1938 is not set ++# CONFIG_SND_ES1968 is not set ++# CONFIG_SND_MAESTRO3 is not set ++# CONFIG_SND_FM801 is not set ++# CONFIG_SND_ICE1712 is not set ++# CONFIG_SND_ICE1724 is not set ++# CONFIG_SND_INTEL8X0 is not set ++# CONFIG_SND_INTEL8X0M is not set ++# CONFIG_SND_SONICVIBES is not set ++# CONFIG_SND_VIA82XX is not set ++# CONFIG_SND_VIA82XX_MODEM is not set ++# CONFIG_SND_VX222 is not set ++# CONFIG_SND_HDA_INTEL is not set ++ ++# ++# USB devices ++# ++# CONFIG_SND_USB_AUDIO is not set + + # + # Open Sound System +@@ -794,6 +886,8 @@ # # USB support # @@ -1519,7 +1619,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig CONFIG_USB=y CONFIG_USB_DEBUG=y -@@ -804,14 +828,14 @@ +@@ -804,14 +898,14 @@ # CONFIG_USB_BANDWIDTH is not set # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_OTG is not set @@ -1536,7 +1636,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_SL811_HCD is not set -@@ -829,12 +853,11 @@ +@@ -829,12 +923,11 @@ # CONFIG_USB_STORAGE=m # CONFIG_USB_STORAGE_DEBUG is not set @@ -1550,7 +1650,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig CONFIG_USB_STORAGE_SDDR09=y CONFIG_USB_STORAGE_SDDR55=y CONFIG_USB_STORAGE_JUMPSHOT=y -@@ -860,7 +883,6 @@ +@@ -860,7 +953,6 @@ # CONFIG_USB_MDC800=m CONFIG_USB_MICROTEK=m @@ -1558,7 +1658,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # # USB Multimedia devices -@@ -879,6 +901,7 @@ +@@ -879,6 +971,7 @@ # CONFIG_USB_PEGASUS is not set # CONFIG_USB_RTL8150 is not set # CONFIG_USB_USBNET is not set @@ -1566,7 +1666,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # # USB port drivers -@@ -894,7 +917,6 @@ +@@ -894,7 +987,6 @@ # # CONFIG_USB_EMI62 is not set # CONFIG_USB_EMI26 is not set @@ -1574,7 +1674,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # CONFIG_USB_AUERSWALD is not set # CONFIG_USB_RIO500 is not set CONFIG_USB_LEGOTOWER=m -@@ -903,6 +925,7 @@ +@@ -903,6 +995,7 @@ # CONFIG_USB_CYTHERM is not set # CONFIG_USB_PHIDGETKIT is not set # CONFIG_USB_PHIDGETSERVO is not set @@ -1582,7 +1682,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # CONFIG_USB_TEST is not set # -@@ -920,6 +943,15 @@ +@@ -920,6 +1013,15 @@ # CONFIG_MMC is not set # @@ -1598,7 +1698,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # File systems # CONFIG_EXT2_FS=y -@@ -930,7 +962,12 @@ +@@ -930,7 +1032,12 @@ # CONFIG_JBD_DEBUG is not set # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set @@ -1611,7 +1711,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # CONFIG_XFS_RT is not set # CONFIG_XFS_QUOTA is not set # CONFIG_XFS_SECURITY is not set -@@ -1074,13 +1111,18 @@ +@@ -1074,13 +1181,18 @@ # # Kernel hacking # @@ -1630,7 +1730,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # # Security options -@@ -1100,6 +1142,7 @@ +@@ -1100,6 +1212,7 @@ CONFIG_CRYPTO_SHA256=m # CONFIG_CRYPTO_SHA512 is not set # CONFIG_CRYPTO_WP512 is not set @@ -1638,7 +1738,7 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig CONFIG_CRYPTO_DES=m CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_TWOFISH=m -@@ -1117,6 +1160,10 @@ +@@ -1117,6 +1230,10 @@ CONFIG_CRYPTO_TEST=m # @@ -1649,10 +1749,1557 @@ Index: linux-2.6-2.6.12/arch/parisc/configs/c3000_defconfig # Library routines # CONFIG_CRC_CCITT=m -Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/entry.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/entry.S 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/defconfig linux-2.6.13/arch/parisc/defconfig +--- linux-2.6.13.org/arch/parisc/defconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/defconfig 2005-09-25 12:34:39.000000000 -0400 +@@ -1,38 +1,56 @@ + # + # Automatically generated make config: don't edit ++# Linux kernel version: 2.6.13-pa4 ++# Tue Sep 13 12:07:51 2005 + # + CONFIG_PARISC=y + CONFIG_MMU=y + CONFIG_STACK_GROWSUP=y + CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++# CONFIG_GENERIC_ISA_DMA is not set ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++# CONFIG_ISA_DMA_API is not set + + # + # Code maturity level options + # + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y +-CONFIG_STANDALONE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # ++CONFIG_LOCALVERSION="" + CONFIG_SWAP=y + CONFIG_SYSVIPC=y ++# CONFIG_POSIX_MQUEUE is not set + # CONFIG_BSD_PROCESS_ACCT is not set + CONFIG_SYSCTL=y +-CONFIG_LOG_BUF_SHIFT=15 ++# CONFIG_AUDIT is not set + # CONFIG_HOTPLUG is not set ++CONFIG_KOBJECT_UEVENT=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y ++# CONFIG_KALLSYMS_ALL is not set ++# CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_SHMEM=y ++CONFIG_CC_ALIGN_FUNCTIONS=0 ++CONFIG_CC_ALIGN_LABELS=0 ++CONFIG_CC_ALIGN_LOOPS=0 ++CONFIG_CC_ALIGN_JUMPS=0 ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -45,10 +63,16 @@ + CONFIG_PA7000=y + # CONFIG_PA7100LC is not set + # CONFIG_PA7200 is not set ++# CONFIG_PA7300LC is not set + # CONFIG_PA8X00 is not set + CONFIG_PA11=y +-# CONFIG_64BIT is not set + # CONFIG_SMP is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y + # CONFIG_PREEMPT is not set + # CONFIG_HPUX is not set + +@@ -66,13 +90,29 @@ + CONFIG_PCI=y + CONFIG_PCI_LEGACY_PROC=y + CONFIG_PCI_NAMES=y ++# CONFIG_PCI_DEBUG is not set + CONFIG_GSC_DINO=y + CONFIG_PCI_LBA=y + CONFIG_IOSAPIC=y + CONFIG_IOMMU_SBA=y ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# PCI Hotplug Support ++# ++# CONFIG_HOTPLUG_PCI is not set ++ ++# ++# PA-RISC specific drivers ++# + CONFIG_SUPERIO=y + CONFIG_CHASSIS_LCD_LED=y + CONFIG_PDC_CHASSIS=y ++CONFIG_PDC_STABLE=y + + # + # Executable file formats +@@ -81,12 +121,84 @@ + # CONFIG_BINFMT_MISC is not set + + # ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++CONFIG_PACKET_MMAP=y ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++# CONFIG_IP_PNP_DHCP is not set ++CONFIG_IP_PNP_BOOTP=y ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_IP_MROUTE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_IP_TCPDIAG=y ++CONFIG_IP_TCPDIAG_IPV6=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++CONFIG_IPV6=y ++# CONFIG_IPV6_PRIVACY is not set ++# CONFIG_INET6_AH is not set ++# CONFIG_INET6_ESP is not set ++# CONFIG_INET6_IPCOMP is not set ++# CONFIG_INET6_TUNNEL is not set ++# CONFIG_IPV6_TUNNEL is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++# CONFIG_NET_SCHED is not set ++# CONFIG_NET_CLS_ROUTE is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++ ++# + # Device Drivers + # + + # + # Generic Driver Options + # ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++# CONFIG_FW_LOADER is not set + # CONFIG_DEBUG_DRIVER is not set + + # +@@ -99,12 +211,10 @@ + # + CONFIG_PARPORT=y + CONFIG_PARPORT_PC=y +-CONFIG_PARPORT_PC_CML1=y + # CONFIG_PARPORT_SERIAL is not set + # CONFIG_PARPORT_PC_FIFO is not set + # CONFIG_PARPORT_PC_SUPERIO is not set + CONFIG_PARPORT_GSC=y +-# CONFIG_PARPORT_OTHER is not set + # CONFIG_PARPORT_1284 is not set + + # +@@ -120,12 +230,27 @@ + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set + # CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set + CONFIG_BLK_DEV_LOOP=y + CONFIG_BLK_DEV_CRYPTOLOOP=y + # CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_UB is not set + CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CDROM_PKTCDVD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++# CONFIG_ATA_OVER_ETH is not set + + # + # ATA/ATAPI/MFM/RLL support +@@ -147,53 +272,57 @@ + CONFIG_BLK_DEV_SR=y + # CONFIG_BLK_DEV_SR_VENDOR is not set + CONFIG_CHR_DEV_SG=y ++# CONFIG_CHR_DEV_SCH is not set + + # + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs + # + # CONFIG_SCSI_MULTI_LUN is not set +-# CONFIG_SCSI_REPORT_LUNS is not set + # CONFIG_SCSI_CONSTANTS is not set + # CONFIG_SCSI_LOGGING is not set + + # ++# SCSI Transport Attributes ++# ++CONFIG_SCSI_SPI_ATTRS=y ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++ ++# + # SCSI low-level drivers + # + # CONFIG_BLK_DEV_3W_XXXX_RAID is not set ++# CONFIG_SCSI_3W_9XXX is not set + # CONFIG_SCSI_ACARD is not set + # CONFIG_SCSI_AHA1740 is not set + # CONFIG_SCSI_AACRAID is not set + # CONFIG_SCSI_AIC7XXX is not set + # CONFIG_SCSI_AIC7XXX_OLD is not set + # CONFIG_SCSI_AIC79XX is not set +-# CONFIG_SCSI_ADVANSYS is not set +-# CONFIG_SCSI_MEGARAID is not set ++# CONFIG_SCSI_DPT_I2O is not set ++# CONFIG_MEGARAID_NEWGEN is not set ++# CONFIG_MEGARAID_LEGACY is not set + # CONFIG_SCSI_SATA is not set +-# CONFIG_SCSI_BUSLOGIC is not set +-# CONFIG_SCSI_CPQFCTS is not set + # CONFIG_SCSI_DMX3191D is not set +-# CONFIG_SCSI_EATA is not set +-# CONFIG_SCSI_EATA_PIO is not set + # CONFIG_SCSI_FUTURE_DOMAIN is not set +-# CONFIG_SCSI_GDTH is not set + # CONFIG_SCSI_IPS is not set ++# CONFIG_SCSI_INITIO is not set + # CONFIG_SCSI_INIA100 is not set + # CONFIG_SCSI_PPA is not set + # CONFIG_SCSI_IMM is not set + CONFIG_SCSI_LASI700=y +-CONFIG_53C700_MEM_MAPPED=y + CONFIG_53C700_LE_ON_BE=y + CONFIG_SCSI_SYM53C8XX_2=y + CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 + CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 + CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 + # CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set ++# CONFIG_SCSI_IPR is not set + CONFIG_SCSI_ZALON=y + CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8 + CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 + CONFIG_SCSI_NCR53C8XX_SYNC=20 + # CONFIG_SCSI_NCR53C8XX_PROFILE is not set +-# CONFIG_SCSI_QLOGIC_ISP is not set + # CONFIG_SCSI_QLOGIC_FC is not set + # CONFIG_SCSI_QLOGIC_1280 is not set + CONFIG_SCSI_QLA2XXX=y +@@ -202,7 +331,8 @@ + # CONFIG_SCSI_QLA2300 is not set + # CONFIG_SCSI_QLA2322 is not set + # CONFIG_SCSI_QLA6312 is not set +-# CONFIG_SCSI_QLA6322 is not set ++# CONFIG_SCSI_QLA24XX is not set ++# CONFIG_SCSI_LPFC is not set + # CONFIG_SCSI_SIM710 is not set + # CONFIG_SCSI_DC395x is not set + # CONFIG_SCSI_DC390T is not set +@@ -217,15 +347,19 @@ + CONFIG_MD_LINEAR=y + CONFIG_MD_RAID0=y + CONFIG_MD_RAID1=y ++# CONFIG_MD_RAID10 is not set + CONFIG_MD_RAID5=y + # CONFIG_MD_RAID6 is not set + # CONFIG_MD_MULTIPATH is not set ++# CONFIG_MD_FAULTY is not set + # CONFIG_BLK_DEV_DM is not set + + # + # Fusion MPT device support + # + # CONFIG_FUSION is not set ++# CONFIG_FUSION_SPI is not set ++# CONFIG_FUSION_FC is not set + + # + # IEEE 1394 (FireWire) support +@@ -238,80 +372,18 @@ + # CONFIG_I2O is not set + + # +-# Macintosh device drivers +-# +- +-# +-# Networking support ++# Network device support + # +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-CONFIG_PACKET_MMAP=y +-CONFIG_NETLINK_DEV=y +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-# CONFIG_IP_PNP_DHCP is not set +-CONFIG_IP_PNP_BOOTP=y +-# CONFIG_IP_PNP_RARP is not set +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_IP_MROUTE is not set +-# CONFIG_ARPD is not set +-# CONFIG_INET_ECN is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_IPV6 is not set +-# CONFIG_DECNET is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-CONFIG_IPV6_SCTP__=y +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +-# CONFIG_NET_HW_FLOWCONTROL is not set +- +-# +-# QoS and/or fair queueing +-# +-# CONFIG_NET_SCHED is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set + CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++# CONFIG_TUN is not set + + # + # ARCnet devices + # + # CONFIG_ARCNET is not set +-# CONFIG_DUMMY is not set +-# CONFIG_BONDING is not set +-# CONFIG_EQUALIZER is not set +-# CONFIG_TUN is not set +-# CONFIG_ETHERTAP is not set + + # + # Ethernet (10 or 100Mbit) +@@ -365,26 +437,30 @@ + # + # Ethernet (1000 Mbit) + # +-# CONFIG_ACENIC is not set +-CONFIG_DL2K=y ++CONFIG_ACENIC=y ++# CONFIG_ACENIC_OMIT_TIGON_I is not set ++# CONFIG_DL2K is not set + # CONFIG_E1000 is not set + # CONFIG_NS83820 is not set + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set +-# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set +-# CONFIG_TIGON3 is not set ++# CONFIG_VIA_VELOCITY is not set ++CONFIG_TIGON3=y ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # + # CONFIG_IXGB is not set +-# CONFIG_FDDI is not set +-# CONFIG_HIPPI is not set +-# CONFIG_PLIP is not set +-# CONFIG_PPP is not set +-# CONFIG_SLIP is not set ++# CONFIG_S2IO is not set ++ ++# ++# Token Ring devices ++# ++# CONFIG_TR is not set + + # + # Wireless LAN (non-hamradio) +@@ -399,38 +475,29 @@ + # + # Wireless 802.11b ISA/PCI cards support + # +-CONFIG_AIRO=y + # CONFIG_HERMES is not set + # CONFIG_ATMEL is not set +-CONFIG_NET_WIRELESS=y + + # +-# Token Ring devices ++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support + # +-# CONFIG_TR is not set +-# CONFIG_NET_FC is not set +-# CONFIG_RCPCI is not set +-# CONFIG_SHAPER is not set ++# CONFIG_PRISM54 is not set ++CONFIG_NET_WIRELESS=y + + # + # Wan interfaces + # + # CONFIG_WAN is not set +- +-# +-# Amateur Radio support +-# +-# CONFIG_HAMRADIO is not set +- +-# +-# IrDA (infrared) support +-# +-# CONFIG_IRDA is not set +- +-# +-# Bluetooth support +-# +-# CONFIG_BT is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_PLIP is not set ++# CONFIG_PPP is not set ++# CONFIG_SLIP is not set ++# CONFIG_NET_FC is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -460,51 +527,67 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-# CONFIG_SERIO_SERPORT is not set +-# CONFIG_SERIO_PARKBD is not set +-CONFIG_SERIO_GSCPS2=y +-CONFIG_HP_SDC=y +-CONFIG_HIL_MLC=y +-# CONFIG_SERIO_PCIPS2 is not set +- +-# + # Input Device Drivers + # + CONFIG_INPUT_KEYBOARD=y + # CONFIG_KEYBOARD_ATKBD is not set + # CONFIG_KEYBOARD_SUNKBD is not set ++# CONFIG_KEYBOARD_LKKBD is not set + # CONFIG_KEYBOARD_XTKBD is not set + # CONFIG_KEYBOARD_NEWTON is not set ++CONFIG_KEYBOARD_HIL_OLD=y + CONFIG_KEYBOARD_HIL=y + CONFIG_INPUT_MOUSE=y + # CONFIG_MOUSE_PS2 is not set + # CONFIG_MOUSE_SERIAL is not set ++# CONFIG_MOUSE_VSXXXAA is not set + # CONFIG_MOUSE_HIL is not set + CONFIG_INPUT_JOYSTICK=y ++# CONFIG_JOYSTICK_ANALOG is not set ++# CONFIG_JOYSTICK_A3D is not set ++# CONFIG_JOYSTICK_ADI is not set ++# CONFIG_JOYSTICK_COBRA is not set ++# CONFIG_JOYSTICK_GF2K is not set ++# CONFIG_JOYSTICK_GRIP is not set ++# CONFIG_JOYSTICK_GRIP_MP is not set ++# CONFIG_JOYSTICK_GUILLEMOT is not set ++# CONFIG_JOYSTICK_INTERACT is not set ++# CONFIG_JOYSTICK_SIDEWINDER is not set ++# CONFIG_JOYSTICK_TMDC is not set + # CONFIG_JOYSTICK_IFORCE is not set + # CONFIG_JOYSTICK_WARRIOR is not set + # CONFIG_JOYSTICK_MAGELLAN is not set + # CONFIG_JOYSTICK_SPACEORB is not set + # CONFIG_JOYSTICK_SPACEBALL is not set + # CONFIG_JOYSTICK_STINGER is not set +-# CONFIG_JOYSTICK_TWIDDLER is not set ++# CONFIG_JOYSTICK_TWIDJOY is not set + # CONFIG_JOYSTICK_DB9 is not set + # CONFIG_JOYSTICK_GAMECON is not set + # CONFIG_JOYSTICK_TURBOGRAFX is not set +-# CONFIG_INPUT_JOYDUMP is not set ++# CONFIG_JOYSTICK_JOYDUMP is not set + CONFIG_INPUT_TOUCHSCREEN=y + # CONFIG_TOUCHSCREEN_GUNZE is not set ++# CONFIG_TOUCHSCREEN_ELO is not set ++# CONFIG_TOUCHSCREEN_MTOUCH is not set ++# CONFIG_TOUCHSCREEN_MK712 is not set + CONFIG_INPUT_MISC=y +-# CONFIG_INPUT_PCSPKR is not set + # CONFIG_INPUT_UINPUT is not set + CONFIG_HP_SDC_RTC=y + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_PARKBD is not set ++CONFIG_SERIO_GSCPS2=y ++CONFIG_HP_SDC=y ++CONFIG_HIL_MLC=y ++# CONFIG_SERIO_PCIPS2 is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -522,16 +605,16 @@ + CONFIG_SERIAL_8250_MANY_PORTS=y + CONFIG_SERIAL_8250_SHARE_IRQ=y + # CONFIG_SERIAL_8250_DETECT_IRQ is not set +-# CONFIG_SERIAL_8250_MULTIPORT is not set + # CONFIG_SERIAL_8250_RSA is not set + + # + # Non-8250 serial port support + # +-# CONFIG_SERIAL_MUX is not set +-# CONFIG_PDC_CONSOLE is not set ++CONFIG_SERIAL_MUX=y ++CONFIG_SERIAL_MUX_CONSOLE=y + CONFIG_SERIAL_CORE=y + CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -541,12 +624,6 @@ + # CONFIG_TIPAR is not set + + # +-# Mice +-# +-# CONFIG_BUSMOUSE is not set +-# CONFIG_QIC02_TAPE is not set +- +-# + # IPMI + # + # CONFIG_IPMI_HANDLER is not set +@@ -555,7 +632,6 @@ + # Watchdog Cards + # + # CONFIG_WATCHDOG is not set +-# CONFIG_NVRAM is not set + CONFIG_GEN_RTC=y + # CONFIG_GEN_RTC_X is not set + # CONFIG_DTLK is not set +@@ -565,15 +641,30 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_FTAPE is not set +-# CONFIG_AGP is not set + # CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set ++# CONFIG_I2C_SENSOR is not set ++ ++# ++# Dallas's 1-wire bus ++# ++# CONFIG_W1 is not set ++ ++# ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_DEBUG_CHIP is not set + + # + # Misc devices +@@ -593,34 +684,44 @@ + # Graphics support + # + CONFIG_FB=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_IMAGEBLIT=y ++CONFIG_FB_SOFT_CURSOR=y ++# CONFIG_FB_MACMODES is not set ++# CONFIG_FB_MODE_HELPERS is not set ++# CONFIG_FB_TILEBLITTING is not set ++# CONFIG_FB_CIRRUS is not set + # CONFIG_FB_PM2 is not set + # CONFIG_FB_CYBER2000 is not set ++# CONFIG_FB_ASILIANT is not set + # CONFIG_FB_IMSTT is not set + CONFIG_FB_STI=y ++# CONFIG_FB_NVIDIA is not set + # CONFIG_FB_RIVA is not set + # CONFIG_FB_MATROX is not set + # CONFIG_FB_RADEON_OLD is not set + # CONFIG_FB_RADEON is not set + # CONFIG_FB_ATY128 is not set + # CONFIG_FB_ATY is not set ++# CONFIG_FB_SAVAGE is not set + # CONFIG_FB_SIS is not set + # CONFIG_FB_NEOMAGIC is not set + # CONFIG_FB_KYRO is not set + # CONFIG_FB_3DFX is not set + # CONFIG_FB_VOODOO1 is not set + # CONFIG_FB_TRIDENT is not set ++# CONFIG_FB_S1D13XXX is not set + # CONFIG_FB_VIRTUAL is not set + + # + # Console display driver support + # +-# CONFIG_MDA_CONSOLE is not set +-CONFIG_STI_CONSOLE=y ++CONFIG_DUMMY_CONSOLE=y + CONFIG_DUMMY_CONSOLE_COLUMNS=160 + CONFIG_DUMMY_CONSOLE_ROWS=64 +-CONFIG_DUMMY_CONSOLE=y + CONFIG_FRAMEBUFFER_CONSOLE=y +-CONFIG_PCI_CONSOLE=y ++CONFIG_STI_CONSOLE=y + # CONFIG_FONTS is not set + CONFIG_FONT_8x8=y + CONFIG_FONT_8x16=y +@@ -629,6 +730,7 @@ + # Logo configuration + # + # CONFIG_LOGO is not set ++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + + # + # Sound +@@ -638,17 +740,93 @@ + # + # Advanced Linux Sound Architecture + # +-# CONFIG_SND is not set ++CONFIG_SND=y ++CONFIG_SND_TIMER=y ++CONFIG_SND_PCM=y ++CONFIG_SND_SEQUENCER=y ++# CONFIG_SND_SEQ_DUMMY is not set ++CONFIG_SND_OSSEMUL=y ++CONFIG_SND_MIXER_OSS=y ++CONFIG_SND_PCM_OSS=y ++CONFIG_SND_SEQUENCER_OSS=y ++# CONFIG_SND_VERBOSE_PRINTK is not set ++# CONFIG_SND_DEBUG is not set ++ ++# ++# Generic devices ++# ++# CONFIG_SND_DUMMY is not set ++# CONFIG_SND_VIRMIDI is not set ++# CONFIG_SND_MTPAV is not set ++# CONFIG_SND_SERIAL_U16550 is not set ++# CONFIG_SND_MPU401 is not set ++ ++# ++# PCI devices ++# ++CONFIG_SND_AC97_CODEC=y ++# CONFIG_SND_ALI5451 is not set ++CONFIG_SND_AD1889=y ++# CONFIG_SND_AD1889_OPL3 is not set ++# CONFIG_SND_ATIIXP is not set ++# CONFIG_SND_ATIIXP_MODEM is not set ++# CONFIG_SND_AU8810 is not set ++# CONFIG_SND_AU8820 is not set ++# CONFIG_SND_AU8830 is not set ++# CONFIG_SND_AZT3328 is not set ++# CONFIG_SND_BT87X is not set ++# CONFIG_SND_CS46XX is not set ++# CONFIG_SND_CS4281 is not set ++# CONFIG_SND_EMU10K1 is not set ++# CONFIG_SND_EMU10K1X is not set ++# CONFIG_SND_CA0106 is not set ++# CONFIG_SND_KORG1212 is not set ++# CONFIG_SND_MIXART is not set ++# CONFIG_SND_NM256 is not set ++# CONFIG_SND_RME32 is not set ++# CONFIG_SND_RME96 is not set ++# CONFIG_SND_RME9652 is not set ++# CONFIG_SND_HDSP is not set ++# CONFIG_SND_HDSPM is not set ++# CONFIG_SND_TRIDENT is not set ++# CONFIG_SND_YMFPCI is not set ++# CONFIG_SND_CMIPCI is not set ++# CONFIG_SND_ENS1370 is not set ++# CONFIG_SND_ENS1371 is not set ++# CONFIG_SND_ES1938 is not set ++# CONFIG_SND_ES1968 is not set ++# CONFIG_SND_MAESTRO3 is not set ++# CONFIG_SND_FM801 is not set ++# CONFIG_SND_ICE1712 is not set ++# CONFIG_SND_ICE1724 is not set ++# CONFIG_SND_INTEL8X0 is not set ++# CONFIG_SND_INTEL8X0M is not set ++# CONFIG_SND_SONICVIBES is not set ++# CONFIG_SND_VIA82XX is not set ++# CONFIG_SND_VIA82XX_MODEM is not set ++# CONFIG_SND_VX222 is not set ++# CONFIG_SND_HDA_INTEL is not set ++ ++# ++# USB devices ++# ++# CONFIG_SND_USB_AUDIO is not set ++ ++# ++# GSC devices ++# ++CONFIG_SND_HARMONY=y + + # + # Open Sound System + # + # CONFIG_SOUND_PRIME is not set +-# CONFIG_SOUND_HARMONY is not set + + # + # USB support + # ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y + CONFIG_USB=y + CONFIG_USB_DEBUG=y + +@@ -658,13 +836,20 @@ + # CONFIG_USB_DEVICEFS is not set + # CONFIG_USB_BANDWIDTH is not set + # CONFIG_USB_DYNAMIC_MINORS is not set ++# CONFIG_USB_OTG is not set + + # + # USB Host Controller Drivers + # + CONFIG_USB_EHCI_HCD=y ++# CONFIG_USB_EHCI_SPLIT_ISO is not set ++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set ++# CONFIG_USB_ISP116X_HCD is not set + CONFIG_USB_OHCI_HCD=y ++# CONFIG_USB_OHCI_BIG_ENDIAN is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y + # CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_SL811_HCD is not set + + # + # USB Device Class drivers +@@ -674,10 +859,14 @@ + # CONFIG_USB_MIDI is not set + # CONFIG_USB_ACM is not set + # CONFIG_USB_PRINTER is not set ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# + # CONFIG_USB_STORAGE is not set + + # +-# USB Human Interface Devices (HID) ++# USB Input Devices + # + # CONFIG_USB_HID is not set + +@@ -688,16 +877,21 @@ + # CONFIG_USB_MOUSE is not set + # CONFIG_USB_AIPTEK is not set + # CONFIG_USB_WACOM is not set ++# CONFIG_USB_ACECAD is not set + # CONFIG_USB_KBTAB is not set + # CONFIG_USB_POWERMATE is not set ++# CONFIG_USB_MTOUCH is not set ++# CONFIG_USB_ITMTOUCH is not set ++# CONFIG_USB_EGALAX is not set + # CONFIG_USB_XPAD is not set ++# CONFIG_USB_ATI_REMOTE is not set ++# CONFIG_USB_KEYSPAN_REMOTE is not set + + # + # USB Imaging devices + # + # CONFIG_USB_MDC800 is not set + # CONFIG_USB_MICROTEK is not set +-# CONFIG_USB_HPUSBSCSI is not set + + # + # USB Multimedia devices +@@ -709,13 +903,15 @@ + # + + # +-# USB Network adaptors ++# USB Network Adapters + # + # CONFIG_USB_CATC is not set + # CONFIG_USB_KAWETH is not set + # CONFIG_USB_PEGASUS is not set + # CONFIG_USB_RTL8150 is not set + # CONFIG_USB_USBNET is not set ++# CONFIG_USB_ZD1201 is not set ++CONFIG_USB_MON=y + + # + # USB port drivers +@@ -732,12 +928,21 @@ + # + # CONFIG_USB_EMI62 is not set + # CONFIG_USB_EMI26 is not set +-# CONFIG_USB_TIGL is not set + # CONFIG_USB_AUERSWALD is not set + # CONFIG_USB_RIO500 is not set + # CONFIG_USB_LEGOTOWER is not set + # CONFIG_USB_LCD is not set + # CONFIG_USB_LED is not set ++# CONFIG_USB_CYTHERM is not set ++# CONFIG_USB_PHIDGETKIT is not set ++# CONFIG_USB_PHIDGETSERVO is not set ++# CONFIG_USB_IDMOUSE is not set ++# CONFIG_USB_SISUSBVGA is not set ++# CONFIG_USB_LD is not set ++ ++# ++# USB DSL modem support ++# + + # + # USB Gadget Support +@@ -745,20 +950,42 @@ + # CONFIG_USB_GADGET is not set + + # ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# InfiniBand support ++# ++# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# ++ ++# + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + CONFIG_EXT3_FS=y + # CONFIG_EXT3_FS_XATTR is not set + CONFIG_JBD=y + # CONFIG_JBD_DEBUG is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++ ++# ++# XFS support ++# + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set ++CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set + +@@ -773,7 +1000,8 @@ + # + # DOS/FAT/NT Filesystems + # +-# CONFIG_FAT_FS is not set ++# CONFIG_MSDOS_FS is not set ++# CONFIG_VFAT_FS is not set + # CONFIG_NTFS_FS is not set + + # +@@ -781,9 +1009,10 @@ + # + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y +-# CONFIG_DEVFS_FS is not set ++CONFIG_SYSFS=y + # CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y ++# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y + +@@ -809,18 +1038,22 @@ + # + CONFIG_NFS_FS=y + CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set + # CONFIG_NFS_V4 is not set + # CONFIG_NFS_DIRECTIO is not set + CONFIG_NFSD=y + CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set + # CONFIG_NFSD_V4 is not set + CONFIG_NFSD_TCP=y + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y + CONFIG_LOCKD_V4=y + CONFIG_EXPORTFS=y ++CONFIG_NFS_COMMON=y + CONFIG_SUNRPC=y +-# CONFIG_SUNRPC_GSS is not set ++# CONFIG_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPCSEC_GSS_SPKM3 is not set + # CONFIG_SMB_FS is not set + # CONFIG_CIFS is not set + # CONFIG_NCP_FS is not set +@@ -861,6 +1094,7 @@ + # CONFIG_NLS_ISO8859_8 is not set + # CONFIG_NLS_CODEPAGE_1250 is not set + # CONFIG_NLS_CODEPAGE_1251 is not set ++# CONFIG_NLS_ASCII is not set + # CONFIG_NLS_ISO8859_1 is not set + # CONFIG_NLS_ISO8859_2 is not set + # CONFIG_NLS_ISO8859_3 is not set +@@ -885,17 +1119,23 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + CONFIG_DEBUG_KERNEL=y +-# CONFIG_DEBUG_SLAB is not set + CONFIG_MAGIC_SYSRQ=y ++CONFIG_LOG_BUF_SHIFT=15 ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SLAB is not set + # CONFIG_DEBUG_SPINLOCK is not set +-# CONFIG_DEBUG_RWLOCK is not set +-CONFIG_FRAME_POINTER=y ++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set ++# CONFIG_DEBUG_KOBJECT is not set + # CONFIG_DEBUG_INFO is not set ++# CONFIG_DEBUG_IOREMAP is not set ++# CONFIG_DEBUG_FS is not set + + # + # Security options + # ++# CONFIG_KEYS is not set + # CONFIG_SECURITY is not set + + # +@@ -909,6 +1149,8 @@ + # CONFIG_CRYPTO_SHA1 is not set + # CONFIG_CRYPTO_SHA256 is not set + # CONFIG_CRYPTO_SHA512 is not set ++# CONFIG_CRYPTO_WP512 is not set ++# CONFIG_CRYPTO_TGR192 is not set + # CONFIG_CRYPTO_DES is not set + # CONFIG_CRYPTO_BLOWFISH is not set + # CONFIG_CRYPTO_TWOFISH is not set +@@ -916,11 +1158,22 @@ + # CONFIG_CRYPTO_AES is not set + # CONFIG_CRYPTO_CAST5 is not set + # CONFIG_CRYPTO_CAST6 is not set ++# CONFIG_CRYPTO_TEA is not set + # CONFIG_CRYPTO_ARC4 is not set ++# CONFIG_CRYPTO_KHAZAD is not set ++# CONFIG_CRYPTO_ANUBIS is not set + # CONFIG_CRYPTO_DEFLATE is not set ++# CONFIG_CRYPTO_MICHAEL_MIC is not set ++# CONFIG_CRYPTO_CRC32C is not set + # CONFIG_CRYPTO_TEST is not set + + # ++# Hardware crypto devices ++# ++ ++# + # Library routines + # ++# CONFIG_CRC_CCITT is not set + CONFIG_CRC32=y ++# CONFIG_LIBCRC32C is not set +diff -Nur linux-2.6.13.org/arch/parisc/kernel/cache.c linux-2.6.13/arch/parisc/kernel/cache.c +--- linux-2.6.13.org/arch/parisc/kernel/cache.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/cache.c 2005-09-25 12:34:39.000000000 -0400 +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + int split_tlb; + int dcache_stride; +@@ -207,6 +208,9 @@ + + /* "New and Improved" version from Jim Hull + * (1 << (cc_block-1)) * (cc_line << (4 + cnf.cc_shift)) ++ * The following CAFL_STRIDE is an optimized version, see ++ * http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023625.html ++ * http://lists.parisc-linux.org/pipermail/parisc-linux/2004-June/023671.html + */ + #define CAFL_STRIDE(cnf) (cnf.cc_line << (3 + cnf.cc_block + cnf.cc_shift)) + dcache_stride = CAFL_STRIDE(cache_info.dc_conf); +@@ -339,17 +343,15 @@ + void parisc_setup_cache_timing(void) + { + unsigned long rangetime, alltime; +- extern char _text; /* start of kernel code, defined by linker */ +- extern char _end; /* end of BSS, defined by linker */ + unsigned long size; + + alltime = mfctl(16); + flush_data_cache(); + alltime = mfctl(16) - alltime; + +- size = (unsigned long)(&_end - _text); ++ size = (unsigned long)(_end - _text); + rangetime = mfctl(16); +- flush_kernel_dcache_range((unsigned long)&_text, size); ++ flush_kernel_dcache_range((unsigned long)_text, size); + rangetime = mfctl(16) - rangetime; + + printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n", +diff -Nur linux-2.6.13.org/arch/parisc/kernel/drivers.c linux-2.6.13/arch/parisc/kernel/drivers.c +--- linux-2.6.13.org/arch/parisc/kernel/drivers.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/drivers.c 2005-09-25 12:34:39.000000000 -0400 +@@ -46,36 +46,51 @@ + .bus_id = "parisc", + }; + +-#define for_each_padev(padev) \ +- for (padev = next_dev(&root); padev != NULL; \ +- padev = next_dev(&padev->dev)) ++static inline int check_dev(struct device *dev) ++{ ++ if (dev->bus == &parisc_bus_type) { ++ struct parisc_device *pdev; ++ pdev = to_parisc_device(dev); ++ return pdev->id.hw_type != HPHW_FAULTY; ++ } ++ return 1; ++} ++ ++static struct device * ++parse_tree_node(struct device *parent, int index, struct hardware_path *modpath); + +-#define check_dev(padev) \ +- (padev->id.hw_type != HPHW_FAULTY) ? padev : next_dev(&padev->dev) ++struct recurse_struct { ++ void * obj; ++ int (*fn)(struct device *, void *); ++}; ++ ++static int descend_children(struct device * dev, void * data) ++{ ++ struct recurse_struct * recurse_data = (struct recurse_struct *)data; ++ ++ if (recurse_data->fn(dev, recurse_data->obj)) ++ return 1; ++ else ++ return device_for_each_child(dev, recurse_data, descend_children); ++} + + /** +- * next_dev - enumerates registered devices +- * @dev: the previous device returned from next_dev ++ * for_each_padev - Iterate over all devices in the tree ++ * @fn: Function to call for each device. ++ * @data: Data to pass to the called function. + * +- * next_dev does a depth-first search of the tree, returning parents +- * before children. Returns NULL when there are no more devices. ++ * This performs a depth-first traversal of the tree, calling the ++ * function passed for each node. It calls the function for parents ++ * before children. + */ +-static struct parisc_device *next_dev(struct device *dev) +-{ +- if (!list_empty(&dev->children)) { +- dev = list_to_dev(dev->children.next); +- return check_dev(to_parisc_device(dev)); +- } + +- while (dev != &root) { +- if (dev->node.next != &dev->parent->children) { +- dev = list_to_dev(dev->node.next); +- return to_parisc_device(dev); +- } +- dev = dev->parent; +- } +- +- return NULL; ++static int for_each_padev(int (*fn)(struct device *, void *), void * data) ++{ ++ struct recurse_struct recurse_data = { ++ .obj = data, ++ .fn = fn, ++ }; ++ return device_for_each_child(&root, &recurse_data, descend_children); + } + + /** +@@ -105,12 +120,6 @@ + return 0; + } + +-static void claim_device(struct parisc_driver *driver, struct parisc_device *dev) +-{ +- dev->driver = driver; +- request_mem_region(dev->hpa, 0x1000, driver->name); +-} +- + static int parisc_driver_probe(struct device *dev) + { + int rc; +@@ -119,8 +128,8 @@ + + rc = pa_drv->probe(pa_dev); + +- if(!rc) +- claim_device(pa_drv, pa_dev); ++ if (!rc) ++ pa_dev->driver = pa_drv; + + return rc; + } +@@ -131,7 +140,6 @@ + struct parisc_driver *pa_drv = to_parisc_driver(dev->driver); + if (pa_drv->remove) + pa_drv->remove(pa_dev); +- release_mem_region(pa_dev->hpa, 0x1000); + + return 0; + } +@@ -173,6 +181,24 @@ + } + EXPORT_SYMBOL(register_parisc_driver); + ++ ++struct match_count { ++ struct parisc_driver * driver; ++ int count; ++}; ++ ++static int match_and_count(struct device * dev, void * data) ++{ ++ struct match_count * m = data; ++ struct parisc_device * pdev = to_parisc_device(dev); ++ ++ if (check_dev(dev)) { ++ if (match_device(m->driver, pdev)) ++ m->count++; ++ } ++ return 0; ++} ++ + /** + * count_parisc_driver - count # of devices this driver would match + * @driver: the PA-RISC driver to try +@@ -182,15 +208,14 @@ + */ + int count_parisc_driver(struct parisc_driver *driver) + { +- struct parisc_device *device; +- int cnt = 0; ++ struct match_count m = { ++ .driver = driver, ++ .count = 0, ++ }; + +- for_each_padev(device) { +- if (match_device(driver, device)) +- cnt++; +- } ++ for_each_padev(match_and_count, &m); + +- return cnt; ++ return m.count; + } + + +@@ -206,14 +231,34 @@ + } + EXPORT_SYMBOL(unregister_parisc_driver); + +-static struct parisc_device *find_device_by_addr(unsigned long hpa) ++struct find_data { ++ unsigned long hpa; ++ struct parisc_device * dev; ++}; ++ ++static int find_device(struct device * dev, void * data) + { +- struct parisc_device *dev; +- for_each_padev(dev) { +- if (dev->hpa == hpa) +- return dev; ++ struct parisc_device * pdev = to_parisc_device(dev); ++ struct find_data * d = (struct find_data*)data; ++ ++ if (check_dev(dev)) { ++ if (pdev->hpa.start == d->hpa) { ++ d->dev = pdev; ++ return 1; ++ } + } +- return NULL; ++ return 0; ++} ++ ++static struct parisc_device *find_device_by_addr(unsigned long hpa) ++{ ++ struct find_data d = { ++ .hpa = hpa, ++ }; ++ int ret; ++ ++ ret = for_each_padev(find_device, &d); ++ return ret ? d.dev : NULL; + } + + /** +@@ -387,6 +432,23 @@ + return dev; + } + ++struct match_id_data { ++ char id; ++ struct parisc_device * dev; ++}; ++ ++static int match_by_id(struct device * dev, void * data) ++{ ++ struct parisc_device * pdev = to_parisc_device(dev); ++ struct match_id_data * d = data; ++ ++ if (pdev->hw_path == d->id) { ++ d->dev = pdev; ++ return 1; ++ } ++ return 0; ++} ++ + /** + * alloc_tree_node - returns a device entry in the iotree + * @parent: the parent node in the tree +@@ -397,15 +459,13 @@ + */ + static struct parisc_device * alloc_tree_node(struct device *parent, char id) + { +- struct device *dev; +- +- list_for_each_entry(dev, &parent->children, node) { +- struct parisc_device *padev = to_parisc_device(dev); +- if (padev->hw_path == id) +- return padev; +- } +- +- return create_tree_node(id, parent); ++ struct match_id_data d = { ++ .id = id, ++ }; ++ if (device_for_each_child(parent, &d, match_by_id)) ++ return d.dev; ++ else ++ return create_tree_node(id, parent); + } + + static struct parisc_device *create_parisc_device(struct hardware_path *modpath) +@@ -439,10 +499,8 @@ + + dev = create_parisc_device(mod_path); + if (dev->id.hw_type != HPHW_FAULTY) { +- char p[64]; +- print_pa_hwpath(dev, p); + printk("Two devices have hardware path %s. Please file a bug with HP.\n" +- "In the meantime, you could try rearranging your cards.\n", p); ++ "In the meantime, you could try rearranging your cards.\n", parisc_pathname(dev)); + return NULL; + } + +@@ -451,12 +509,27 @@ + dev->id.hversion_rev = iodc_data[1] & 0x0f; + dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) | + (iodc_data[5] << 8) | iodc_data[6]; +- dev->hpa = hpa; ++ dev->hpa.name = parisc_pathname(dev); ++ dev->hpa.start = hpa; ++ if (hpa == 0xf4000000 || hpa == 0xf6000000 || ++ hpa == 0xf8000000 || hpa == 0xfa000000) { ++ dev->hpa.end = hpa + 0x01ffffff; ++ } else { ++ dev->hpa.end = hpa + 0xfff; ++ } ++ dev->hpa.flags = IORESOURCE_MEM; + name = parisc_hardware_description(&dev->id); + if (name) { + strlcpy(dev->name, name, sizeof(dev->name)); + } + ++ /* Silently fail things like mouse ports which are subsumed within ++ * the keyboard controller ++ */ ++ if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa)) ++ printk("Unable to claim HPA %lx for device %s\n", ++ hpa, name); ++ + return dev; + } + +@@ -555,6 +628,33 @@ + return (curr->hw_path == id); + } + ++struct parse_tree_data { ++ int index; ++ struct hardware_path * modpath; ++ struct device * dev; ++}; ++ ++static int check_parent(struct device * dev, void * data) ++{ ++ struct parse_tree_data * d = data; ++ ++ if (check_dev(dev)) { ++ if (dev->bus == &parisc_bus_type) { ++ if (match_parisc_device(dev, d->index, d->modpath)) ++ d->dev = dev; ++ } else if (is_pci_dev(dev)) { ++ if (match_pci_device(dev, d->index, d->modpath)) ++ d->dev = dev; ++ } else if (dev->bus == NULL) { ++ /* we are on a bus bridge */ ++ struct device *new = parse_tree_node(dev, d->index, d->modpath); ++ if (new) ++ d->dev = new; ++ } ++ } ++ return d->dev != NULL; ++} ++ + /** + * parse_tree_node - returns a device entry in the iotree + * @parent: the parent node in the tree +@@ -568,24 +668,18 @@ + static struct device * + parse_tree_node(struct device *parent, int index, struct hardware_path *modpath) + { +- struct device *device; +- +- list_for_each_entry(device, &parent->children, node) { +- if (device->bus == &parisc_bus_type) { +- if (match_parisc_device(device, index, modpath)) +- return device; +- } else if (is_pci_dev(device)) { +- if (match_pci_device(device, index, modpath)) +- return device; +- } else if (device->bus == NULL) { +- /* we are on a bus bridge */ +- struct device *new = parse_tree_node(device, index, modpath); +- if (new) +- return new; +- } +- } ++ struct parse_tree_data d = { ++ .index = index, ++ .modpath = modpath, ++ }; ++ ++ struct recurse_struct recurse_data = { ++ .obj = &d, ++ .fn = check_parent, ++ }; + +- return NULL; ++ device_for_each_child(parent, &recurse_data, descend_children); ++ return d.dev; + } + + /** +@@ -636,7 +730,7 @@ + ((dev->id.hw_type == HPHW_IOA) || (dev->id.hw_type == HPHW_BCPORT)) + + #define IS_LOWER_PORT(dev) \ +- ((gsc_readl(dev->hpa + offsetof(struct bc_module, io_status)) \ ++ ((gsc_readl(dev->hpa.start + offsetof(struct bc_module, io_status)) \ + & BC_PORT_MASK) == BC_LOWER_PORT) + + #define MAX_NATIVE_DEVICES 64 +@@ -645,8 +739,8 @@ + #define FLEX_MASK F_EXTEND(0xfffc0000) + #define IO_IO_LOW offsetof(struct bc_module, io_io_low) + #define IO_IO_HIGH offsetof(struct bc_module, io_io_high) +-#define READ_IO_IO_LOW(dev) (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_LOW) +-#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_HIGH) ++#define READ_IO_IO_LOW(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_LOW) ++#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_HIGH) + + static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high, + struct device *parent); +@@ -655,10 +749,10 @@ + { + unsigned long io_io_low, io_io_high; + +- if(!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev)) ++ if (!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev)) + return; + +- if(dev->id.hw_type == HPHW_IOA) { ++ if (dev->id.hw_type == HPHW_IOA) { + io_io_low = (unsigned long)(signed int)(READ_IO_IO_LOW(dev) << 16); + io_io_high = io_io_low + MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET; + } else { +@@ -731,7 +825,7 @@ + + print_pa_hwpath(dev, hw_path); + printk(KERN_INFO "%d. %s at 0x%lx [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }", +- ++count, dev->name, dev->hpa, hw_path, dev->id.hw_type, ++ ++count, dev->name, dev->hpa.start, hw_path, dev->id.hw_type, + dev->id.hversion_rev, dev->id.hversion, dev->id.sversion); + + if (dev->num_addrs) { +@@ -753,13 +847,20 @@ + get_device(&root); + } + ++ ++static int print_one_device(struct device * dev, void * data) ++{ ++ struct parisc_device * pdev = to_parisc_device(dev); ++ ++ if (check_dev(dev)) ++ print_parisc_device(pdev); ++ return 0; ++} ++ + /** + * print_parisc_devices - Print out a list of devices found in this system + */ + void print_parisc_devices(void) + { +- struct parisc_device *dev; +- for_each_padev(dev) { +- print_parisc_device(dev); +- } ++ for_each_padev(print_one_device, NULL); + } +diff -Nur linux-2.6.13.org/arch/parisc/kernel/entry.S linux-2.6.13/arch/parisc/kernel/entry.S +--- linux-2.6.13.org/arch/parisc/kernel/entry.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/entry.S 2005-09-25 12:34:39.000000000 -0400 @@ -30,14 +30,14 @@ * - save registers to kernel stack and handle in assembly or C */ @@ -1916,7 +3563,23 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif BL sys_execve, %r2 -@@ -888,9 +896,6 @@ +@@ -855,6 +863,7 @@ + _switch_to: + STREG %r2, -RP_OFFSET(%r30) + ++ callee_save_float + callee_save + + load32 _switch_to_ret, %r2 +@@ -871,6 +880,7 @@ + _switch_to_ret: + mtctl %r0, %cr0 /* Needed for single stepping */ + callee_rest ++ callee_rest_float + + LDREG -RP_OFFSET(%r30), %r2 + bv %r0(%r2) +@@ -888,9 +898,6 @@ * this way, then we will need to copy %sr3 in to PT_SR[3..7], and * adjust IASQ[0..1]. * @@ -1926,7 +3589,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S */ .align 4096 -@@ -911,7 +916,7 @@ +@@ -911,7 +918,7 @@ STREG %r19,PT_IAOQ1(%r16) LDREG PT_PSW(%r16),%r19 load32 USER_PSW_MASK,%r1 @@ -1935,7 +3598,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S load32 USER_PSW_HI_MASK,%r20 depd %r20,31,32,%r1 #endif -@@ -955,7 +960,7 @@ +@@ -955,7 +962,7 @@ /* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) amount ** irq_stat[] is defined using ____cacheline_aligned. */ @@ -1944,7 +3607,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S shld %r1, 6, %r20 #else shlw %r1, 5, %r20 -@@ -985,24 +990,19 @@ +@@ -985,24 +992,19 @@ rest_fp %r1 rest_general %r29 @@ -1977,7 +3640,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S rest_stack rfi -@@ -1017,8 +1017,8 @@ +@@ -1017,8 +1019,8 @@ .import do_softirq,code intr_do_softirq: @@ -1988,7 +3651,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #else nop -@@ -1036,12 +1036,17 @@ +@@ -1036,12 +1038,17 @@ CMPIB= 0,%r20,intr_restore /* backward */ nop @@ -2007,7 +3670,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo R%intr_check_sig(%r2), %r2 -@@ -1064,7 +1069,7 @@ +@@ -1064,7 +1071,7 @@ copy %r0, %r24 /* unsigned long in_syscall */ copy %r16, %r25 /* struct pt_regs *regs */ @@ -2016,7 +3679,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1088,7 +1093,7 @@ +@@ -1088,7 +1095,7 @@ mfctl %cr31,%r1 copy %r30,%r17 /* FIXME! depi below has hardcoded idea of interrupt stack size (32k)*/ @@ -2025,7 +3688,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S depdi 0,63,15,%r17 #else depi 0,31,15,%r17 -@@ -1115,7 +1120,7 @@ +@@ -1115,7 +1122,7 @@ ldil L%intr_return, %r2 @@ -2034,7 +3697,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1153,15 +1158,17 @@ +@@ -1153,15 +1160,17 @@ CMPIB=,n 6,%r26,skip_save_ior @@ -2054,7 +3717,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S */ extrd,u,*<> %r8,PSW_W_BIT,1,%r0 depdi 0,1,2,%r17 -@@ -1192,7 +1199,7 @@ +@@ -1192,7 +1201,7 @@ loadgp copy %r29, %r25 /* arg1 is pt_regs */ @@ -2063,7 +3726,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1230,7 +1237,7 @@ +@@ -1230,7 +1239,7 @@ spc = r24 /* space for which the trap occured */ ptp = r25 /* page directory/page table pointer */ @@ -2072,7 +3735,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S dtlb_miss_20w: space_adjust spc,va,t0 -@@ -1487,10 +1494,10 @@ +@@ -1487,10 +1496,10 @@ add,l %r1,%r24,%r1 /* doesn't affect c/b bits */ nadtlb_nullify: @@ -2085,7 +3748,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S rfir nop -@@ -1521,7 +1528,7 @@ +@@ -1521,7 +1530,7 @@ nop @@ -2094,7 +3757,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S itlb_miss_20w: /* -@@ -1588,7 +1595,7 @@ +@@ -1588,7 +1597,7 @@ #endif @@ -2103,7 +3766,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S dbit_trap_20w: space_adjust spc,va,t0 -@@ -1797,7 +1804,7 @@ +@@ -1797,7 +1806,7 @@ STREG %r2,-RP_OFFSET(%r30) ldo FRAME_SIZE(%r30),%r30 @@ -2112,7 +3775,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1847,7 +1854,7 @@ +@@ -1847,10 +1856,11 @@ STREG %r2,-RP_OFFSET(%r30) ldo FRAME_SIZE(%r30),%r30 @@ -2121,7 +3784,11 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1869,7 +1876,7 @@ ++ /* WARNING - Clobbers r19 and r21, userspace must save these! */ + STREG %r2,PT_GR19(%r1) /* save for child */ + STREG %r30,PT_GR21(%r1) + BL sys_clone,%r2 +@@ -1869,7 +1879,7 @@ STREG %r2,-RP_OFFSET(%r30) ldo FRAME_SIZE(%r30),%r30 @@ -2130,7 +3797,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif -@@ -1897,10 +1904,10 @@ +@@ -1897,10 +1907,10 @@ STREG %r2,-RP_OFFSET(%r30) ldo FRAME_SIZE(%r30),%r30 @@ -2143,7 +3810,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S copy %r1,%arg0 ldo -FRAME_SIZE(%r30),%r30 -@@ -1923,7 +1930,7 @@ +@@ -1923,7 +1933,7 @@ sys_execve_wrapper: execve_wrapper sys_execve @@ -2152,7 +3819,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S .export sys32_execve_wrapper .import sys32_execve -@@ -1937,7 +1944,7 @@ +@@ -1937,7 +1947,7 @@ ldo TASK_REGS(%r26),%r26 /* get pt regs */ /* Don't save regs, we are going to restore them from sigcontext. */ STREG %r2, -RP_OFFSET(%r30) @@ -2161,7 +3828,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo FRAME_SIZE(%r30), %r30 BL sys_rt_sigreturn,%r2 ldo -16(%r30),%r29 /* Reference param save area */ -@@ -1968,7 +1975,7 @@ +@@ -1968,7 +1978,7 @@ ldo TASK_REGS(%r1),%r24 /* get pt regs */ LDREG TASK_PT_GR30(%r24),%r24 STREG %r2, -RP_OFFSET(%r30) @@ -2170,7 +3837,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo FRAME_SIZE(%r30), %r30 b,l do_sigaltstack,%r2 ldo -16(%r30),%r29 /* Reference param save area */ -@@ -1982,7 +1989,7 @@ +@@ -1982,7 +1992,7 @@ bv %r0(%r2) nop @@ -2179,7 +3846,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S .export sys32_sigaltstack_wrapper sys32_sigaltstack_wrapper: /* Get the user stack pointer */ -@@ -2006,7 +2013,7 @@ +@@ -2006,7 +2016,7 @@ reg_save %r24 STREG %r2, -RP_OFFSET(%r30) @@ -2188,7 +3855,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo FRAME_SIZE(%r30), %r30 b,l sys_rt_sigsuspend,%r2 ldo -16(%r30),%r29 /* Reference param save area */ -@@ -2079,7 +2086,7 @@ +@@ -2079,7 +2089,7 @@ ldw TI_CPU-THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r26 /* cpu # */ /* shift left ____cacheline_aligned (aka L1_CACHE_BYTES) bits */ @@ -2197,7 +3864,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S shld %r26, 6, %r20 #else shlw %r26, 5, %r20 -@@ -2144,7 +2151,7 @@ +@@ -2144,7 +2154,7 @@ depi 3,31,2,%r31 /* ensure return to user mode. */ @@ -2206,7 +3873,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S /* decide whether to reset the wide mode bit * * For a syscall, the W bit is stored in the lowest bit -@@ -2229,7 +2236,7 @@ +@@ -2229,7 +2239,7 @@ .import do_softirq,code syscall_do_softirq: @@ -2215,7 +3882,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S nop /* NOTE: We enable I-bit incase we schedule later, * and we might be going back to userspace if we were -@@ -2240,7 +2247,7 @@ +@@ -2240,7 +2250,7 @@ .import schedule,code syscall_do_resched: BL schedule,%r2 @@ -2224,7 +3891,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #else nop -@@ -2260,7 +2267,7 @@ +@@ -2260,7 +2270,7 @@ ldi 1, %r24 /* unsigned long in_syscall */ @@ -2233,10 +3900,37 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/entry.S ldo -16(%r30),%r29 /* Reference param save area */ #endif BL do_signal,%r2 -Index: linux-2.6-2.6.12/arch/parisc/kernel/head.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/head.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/head.S 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/firmware.c linux-2.6.13/arch/parisc/kernel/firmware.c +--- linux-2.6.13.org/arch/parisc/kernel/firmware.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/firmware.c 2005-09-25 12:34:39.000000000 -0400 +@@ -83,15 +83,15 @@ + int parisc_narrow_firmware = 1; + #endif + +-/* on all currently-supported platforms, IODC I/O calls are always +- * 32-bit calls, and MEM_PDC calls are always the same width as the OS. +- * This means Cxxx boxes can't run wide kernels right now. -PB +- * +- * CONFIG_PDC_NARROW has been added to allow 64-bit kernels to run on +- * systems with 32-bit MEM_PDC calls. This will allow wide kernels to +- * run on Cxxx boxes now. -RB +- * +- * Note that some PAT boxes may have 64-bit IODC I/O... ++/* On most currently-supported platforms, IODC I/O calls are 32-bit calls ++ * and MEM_PDC calls are always the same width as the OS. ++ * Some PAT boxes may have 64-bit IODC I/O. ++ * ++ * Ryan Bradetich added the now obsolete CONFIG_PDC_NARROW to allow ++ * 64-bit kernels to run on systems with 32-bit MEM_PDC calls. ++ * This allowed wide kernels to run on Cxxx boxes. ++ * We now detect 32-bit-only PDC and dynamically switch to 32-bit mode ++ * when running a 64-bit kernel on such boxes (e.g. C200 or C360). + */ + + #ifdef __LP64__ +diff -Nur linux-2.6.13.org/arch/parisc/kernel/head.S linux-2.6.13/arch/parisc/kernel/head.S +--- linux-2.6.13.org/arch/parisc/kernel/head.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/head.S 2005-09-25 12:34:39.000000000 -0400 @@ -12,7 +12,7 @@ * Initial Version 04-23-1999 by Helge Deller */ @@ -2418,10 +4112,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/head.S .word 0 -#endif /*!LP64*/ +#endif /*!CONFIG_64BIT*/ -Index: linux-2.6-2.6.12/arch/parisc/kernel/ioctl32.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/ioctl32.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/ioctl32.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/ioctl32.c linux-2.6.13/arch/parisc/kernel/ioctl32.c +--- linux-2.6.13.org/arch/parisc/kernel/ioctl32.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/ioctl32.c 2005-09-25 12:34:39.000000000 -0400 @@ -104,12 +104,9 @@ } @@ -2496,10 +4189,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/ioctl32.c return ret; } -Index: linux-2.6-2.6.12/arch/parisc/kernel/pacache.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/pacache.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/pacache.S 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/pacache.S linux-2.6.13/arch/parisc/kernel/pacache.S +--- linux-2.6.13.org/arch/parisc/kernel/pacache.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/pacache.S 2005-09-25 12:35:31.000000000 -0400 @@ -26,7 +26,7 @@ * can be used. */ @@ -2783,7 +4475,54 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/pacache.S depdi,z 1, 63-PAGE_SHIFT,1, %r25 #else depwi,z 1, 31-PAGE_SHIFT,1, %r25 -@@ -988,11 +993,12 @@ +@@ -944,23 +949,23 @@ + sub %r25, %r23, %r25 + + +-1: fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) +- fic,m %r23(%r26) ++1: fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) ++ fic,m %r23(%sr4, %r26) + CMPB<< %r26, %r25, 1b +- fic,m %r23(%r26) ++ fic,m %r23(%sr4, %r26) + + sync + bv %r0(%r2) +@@ -982,17 +987,18 @@ + ANDCM %r26, %r21, %r26 + + 1: CMPB<<,n %r26, %r25, 1b +- fic,m %r23(%r26) ++ fic,m %r23(%sr4, %r26) + + sync bv %r0(%r2) nop .exit @@ -2878,10 +4617,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/pacache.S rfi nop -Index: linux-2.6-2.6.12/arch/parisc/kernel/pci-dma.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/pci-dma.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/pci-dma.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/pci-dma.c linux-2.6.13/arch/parisc/kernel/pci-dma.c +--- linux-2.6.13.org/arch/parisc/kernel/pci-dma.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/pci-dma.c 2005-09-25 12:34:39.000000000 -0400 @@ -31,7 +31,7 @@ #include /* get_order */ #include @@ -2891,10 +4629,89 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/pci-dma.c static struct proc_dir_entry * proc_gsc_root = NULL; static int pcxl_proc_info(char *buffer, char **start, off_t offset, int length); -Index: linux-2.6-2.6.12/arch/parisc/kernel/pci.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/pci.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/pci.c 2005-08-09 17:53:35.000000000 -0400 +@@ -333,18 +333,28 @@ + static int __init + pcxl_dma_init(void) + { +- if (pcxl_dma_start == 0) +- return 0; ++ if (pcxl_dma_start == 0) ++ return 0; + +- spin_lock_init(&pcxl_res_lock); +- pcxl_res_size = PCXL_DMA_MAP_SIZE >> (PAGE_SHIFT + 3); +- pcxl_res_hint = 0; +- pcxl_res_map = (char *)__get_free_pages(GFP_KERNEL, ++ spin_lock_init(&pcxl_res_lock); ++ pcxl_res_size = PCXL_DMA_MAP_SIZE >> (PAGE_SHIFT + 3); ++ pcxl_res_hint = 0; ++ pcxl_res_map = (char *)__get_free_pages(GFP_KERNEL, + get_order(pcxl_res_size)); +- memset(pcxl_res_map, 0, pcxl_res_size); +- proc_gsc_root = proc_mkdir("gsc", 0); +- create_proc_info_entry("dino", 0, proc_gsc_root, pcxl_proc_info); +- return 0; ++ memset(pcxl_res_map, 0, pcxl_res_size); ++ proc_gsc_root = proc_mkdir("gsc", 0); ++ if (!proc_gsc_root) ++ printk(KERN_WARNING ++ "pcxl_dma_init: Unable to create gsc /proc dir entry\n"); ++ else { ++ struct proc_dir_entry* ent; ++ ent = create_proc_info_entry("pcxl_dma", 0, ++ proc_gsc_root, pcxl_proc_info); ++ if (!ent) ++ printk(KERN_WARNING ++ "pci-dma.c: Unable to create pcxl_dma /proc entry.\n"); ++ } ++ return 0; + } + + __initcall(pcxl_dma_init); +@@ -545,16 +555,16 @@ + + static int pcxl_proc_info(char *buf, char **start, off_t offset, int len) + { ++#if 0 + u_long i = 0; + unsigned long *res_ptr = (u_long *)pcxl_res_map; +- unsigned long total_pages = pcxl_res_size << 3; /* 8 bits per byte */ ++#endif ++ unsigned long total_pages = pcxl_res_size << 3; /* 8 bits per byte */ + +- sprintf(buf, "\nDMA Mapping Area size : %d bytes (%d pages)\n", +- PCXL_DMA_MAP_SIZE, +- (pcxl_res_size << 3) ); /* 1 bit per page */ ++ sprintf(buf, "\nDMA Mapping Area size : %d bytes (%ld pages)\n", ++ PCXL_DMA_MAP_SIZE, total_pages); + +- sprintf(buf, "%sResource bitmap : %d bytes (%d pages)\n", +- buf, pcxl_res_size, pcxl_res_size << 3); /* 8 bits per byte */ ++ sprintf(buf, "%sResource bitmap : %d bytes\n", buf, pcxl_res_size); + + strcat(buf, " total: free: used: % used:\n"); + sprintf(buf, "%sblocks %8d %8ld %8ld %8ld%%\n", buf, pcxl_res_size, +@@ -564,7 +574,8 @@ + sprintf(buf, "%spages %8ld %8ld %8ld %8ld%%\n", buf, total_pages, + total_pages - pcxl_used_pages, pcxl_used_pages, + (pcxl_used_pages * 100 / total_pages)); +- ++ ++#if 0 + strcat(buf, "\nResource bitmap:"); + + for(; i < (pcxl_res_size / sizeof(u_long)); ++i, ++res_ptr) { +@@ -572,6 +583,7 @@ + strcat(buf,"\n "); + sprintf(buf, "%s %08lx", buf, *res_ptr); + } ++#endif + strcat(buf, "\n"); + return strlen(buf); + } +diff -Nur linux-2.6.13.org/arch/parisc/kernel/pci.c linux-2.6.13/arch/parisc/kernel/pci.c +--- linux-2.6.13.org/arch/parisc/kernel/pci.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/pci.c 2005-09-25 12:34:39.000000000 -0400 @@ -202,7 +202,8 @@ pcibios_link_hba_resources( struct resource *hba_res, struct resource *r) { @@ -2905,10 +4722,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/pci.c r->parent = hba_res; /* reverse link is harder *sigh* */ -Index: linux-2.6-2.6.12/arch/parisc/kernel/pdc_cons.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/pdc_cons.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/pdc_cons.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/pdc_cons.c linux-2.6.13/arch/parisc/kernel/pdc_cons.c +--- linux-2.6.13.org/arch/parisc/kernel/pdc_cons.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/pdc_cons.c 2005-09-25 12:34:39.000000000 -0400 @@ -41,7 +41,7 @@ /* Define EARLY_BOOTUP_DEBUG to debug kernel related boot problems. @@ -3015,10 +4831,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/pdc_cons.c pdc_console_init_force(); } - -Index: linux-2.6-2.6.12/arch/parisc/kernel/perf.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/perf.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/perf.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/perf.c linux-2.6.13/arch/parisc/kernel/perf.c +--- linux-2.6.13.org/arch/parisc/kernel/perf.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/perf.c 2005-09-25 12:34:39.000000000 -0400 @@ -746,7 +746,8 @@ uint64_t *bptr; uint32_t dwords; @@ -3034,7 +4849,7 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/perf.c } - proc_hpa = cpu_device->hpa; -+ runway = ioremap(cpu_device->hpa, 4096); ++ runway = ioremap(cpu_device->hpa.start, 4096); /* Merge intrigue bits into Runway STATUS 0 */ - tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecfffffffffffful; @@ -3050,10 +4865,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/perf.c } return 0; -Index: linux-2.6-2.6.12/arch/parisc/kernel/process.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/process.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/process.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/process.c linux-2.6.13/arch/parisc/kernel/process.c +--- linux-2.6.13.org/arch/parisc/kernel/process.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/process.c 2005-09-25 12:34:39.000000000 -0400 @@ -9,7 +9,7 @@ * Copyright (C) 2000-2003 Paul Bame * Copyright (C) 2000 Philipp Rumpf @@ -3063,10 +4877,102 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/process.c * Copyright (C) 2000 Grant Grundler * Copyright (C) 2001 Alan Modra * Copyright (C) 2001-2002 Ryan Bradetich -Index: linux-2.6-2.6.12/arch/parisc/kernel/real2.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/real2.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/real2.S 2005-08-09 17:53:35.000000000 -0400 +@@ -245,7 +245,17 @@ + sys_clone(unsigned long clone_flags, unsigned long usp, + struct pt_regs *regs) + { +- int __user *user_tid = (int __user *)regs->gr[26]; ++ /* Arugments from userspace are: ++ r26 = Clone flags. ++ r25 = Child stack. ++ r24 = parent_tidptr. ++ r23 = Is the TLS storage descriptor ++ r22 = child_tidptr ++ ++ However, these last 3 args are only examined ++ if the proper flags are set. */ ++ int __user *child_tidptr; ++ int __user *parent_tidptr; + + /* usp must be word aligned. This also prevents users from + * passing in the value 1 (which is the signal for a special +@@ -253,10 +263,20 @@ + usp = ALIGN(usp, 4); + + /* A zero value for usp means use the current stack */ +- if(usp == 0) +- usp = regs->gr[30]; ++ if (usp == 0) ++ usp = regs->gr[30]; + +- return do_fork(clone_flags, usp, regs, 0, user_tid, NULL); ++ if (clone_flags & CLONE_PARENT_SETTID) ++ parent_tidptr = (int __user *)regs->gr[24]; ++ else ++ parent_tidptr = NULL; ++ ++ if (clone_flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)) ++ child_tidptr = (int __user *)regs->gr[22]; ++ else ++ child_tidptr = NULL; ++ ++ return do_fork(clone_flags, usp, regs, 0, parent_tidptr, child_tidptr); + } + + int +@@ -332,6 +352,10 @@ + } else { + cregs->kpc = (unsigned long) &child_return; + } ++ /* Setup thread TLS area from the 4th parameter in clone */ ++ if (clone_flags & CLONE_SETTLS) ++ cregs->cr27 = pregs->gr[23]; ++ + } + + return 0; +diff -Nur linux-2.6.13.org/arch/parisc/kernel/processor.c linux-2.6.13/arch/parisc/kernel/processor.c +--- linux-2.6.13.org/arch/parisc/kernel/processor.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/processor.c 2005-09-25 12:34:39.000000000 -0400 +@@ -92,7 +92,7 @@ + * May get overwritten by PAT code. + */ + cpuid = boot_cpu_data.cpu_count; +- txn_addr = dev->hpa; /* for legacy PDC */ ++ txn_addr = dev->hpa.start; /* for legacy PDC */ + + #ifdef __LP64__ + if (is_pdc_pat()) { +@@ -122,7 +122,7 @@ + * boot time (ie shutdown a CPU from an OS perspective). + */ + /* get the cpu number */ +- status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa); ++ status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa.start); + + BUG_ON(PDC_OK != status); + +@@ -130,7 +130,7 @@ + printk(KERN_WARNING "IGNORING CPU at 0x%x," + " cpu_slot_id > NR_CPUS" + " (%ld > %d)\n", +- dev->hpa, cpu_info.cpu_num, NR_CPUS); ++ dev->hpa.start, cpu_info.cpu_num, NR_CPUS); + /* Ignore CPU since it will only crash */ + boot_cpu_data.cpu_count--; + return 1; +@@ -149,7 +149,7 @@ + + p->loops_per_jiffy = loops_per_jiffy; + p->dev = dev; /* Save IODC data in case we need it */ +- p->hpa = dev->hpa; /* save CPU hpa */ ++ p->hpa = dev->hpa.start; /* save CPU hpa */ + p->cpuid = cpuid; /* save CPU id */ + p->txn_addr = txn_addr; /* save CPU IRQ address */ + #ifdef CONFIG_SMP +diff -Nur linux-2.6.13.org/arch/parisc/kernel/real2.S linux-2.6.13/arch/parisc/kernel/real2.S +--- linux-2.6.13.org/arch/parisc/kernel/real2.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/real2.S 2005-09-25 12:34:39.000000000 -0400 @@ -7,8 +7,10 @@ * Copyright (C) 2000 Hewlett Packard (Paul Bame bame@puffin.external.hp.com) * @@ -3192,11 +5098,27 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/real2.S bve (%r2) #else bv %r0(%r2) -Index: linux-2.6-2.6.12/arch/parisc/kernel/signal.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/signal.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/signal.c 2005-08-09 17:53:35.000000000 -0400 -@@ -637,6 +637,7 @@ +diff -Nur linux-2.6.13.org/arch/parisc/kernel/signal.c linux-2.6.13/arch/parisc/kernel/signal.c +--- linux-2.6.13.org/arch/parisc/kernel/signal.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/signal.c 2005-09-25 12:34:39.000000000 -0400 +@@ -490,15 +490,7 @@ + + give_sigsegv: + DBG(1,"setup_rt_frame: sending SIGSEGV\n"); +- if (sig == SIGSEGV) +- ka->sa.sa_handler = SIG_DFL; +- si.si_signo = SIGSEGV; +- si.si_errno = 0; +- si.si_code = SI_KERNEL; +- si.si_pid = current->pid; +- si.si_uid = current->uid; +- si.si_addr = frame; +- force_sig_info(SIGSEGV, &si, current); ++ force_sigsegv(sig, current); + return 0; + } + +@@ -637,6 +629,7 @@ /* Stack is 64-byte aligned, and we only * need to flush 1 cache line */ asm("fdc 0(%%sr3, %0)\n" @@ -3204,10 +5126,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/signal.c "fic 0(%%sr3, %0)\n" "sync\n" : : "r"(regs->gr[30])); -Index: linux-2.6-2.6.12/arch/parisc/kernel/smp.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/smp.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/smp.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/smp.c linux-2.6.13/arch/parisc/kernel/smp.c +--- linux-2.6.13.org/arch/parisc/kernel/smp.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/smp.c 2005-09-25 12:34:39.000000000 -0400 @@ -18,7 +18,7 @@ */ #undef ENTRY_SYS_CPUS /* syscall support for iCOD-like functionality */ @@ -3217,10 +5138,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/smp.c #include #include -Index: linux-2.6-2.6.12/arch/parisc/kernel/syscall.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/syscall.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/syscall.S 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/syscall.S linux-2.6.13/arch/parisc/kernel/syscall.S +--- linux-2.6.13.org/arch/parisc/kernel/syscall.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/syscall.S 2005-09-25 12:34:39.000000000 -0400 @@ -4,8 +4,9 @@ * System call entry code Copyright (c) Matthew Wilcox 1999 * Licensed under the GNU GPL. @@ -3268,6 +5188,15 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/syscall.S extrd,u %r2,63,1,%r19 /* W hidden in bottom bit */ #if 0 xor %r19,%r2,%r2 /* clear bottom bit */ +@@ -165,7 +164,7 @@ + #endif + STREG %r2, TASK_PT_GR30(%r1) /* ... and save it */ + +- STREG %r20, TASK_PT_GR20(%r1) ++ STREG %r20, TASK_PT_GR20(%r1) /* Syscall number */ + STREG %r21, TASK_PT_GR21(%r1) + STREG %r22, TASK_PT_GR22(%r1) + STREG %r23, TASK_PT_GR23(%r1) /* 4th argument */ @@ -186,7 +185,7 @@ loadgp @@ -3393,10 +5322,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/syscall.S .align 4096 .export sys_call_table64 .Lsys_call_table64: -Index: linux-2.6-2.6.12/arch/parisc/kernel/syscall_table.S -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/syscall_table.S 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/syscall_table.S 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/syscall_table.S linux-2.6.13/arch/parisc/kernel/syscall_table.S +--- linux-2.6.13.org/arch/parisc/kernel/syscall_table.S 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/syscall_table.S 2005-09-25 12:34:39.000000000 -0400 @@ -35,7 +35,7 @@ #undef ENTRY_UHOH #undef ENTRY_COMP @@ -3425,10 +5353,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/syscall_table.S + ENTRY_SAME(keyctl) /* Nothing yet */ -Index: linux-2.6-2.6.12/arch/parisc/kernel/time.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/time.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/time.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/time.c linux-2.6.13/arch/parisc/kernel/time.c +--- linux-2.6.13.org/arch/parisc/kernel/time.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/time.c 2005-09-25 12:34:39.000000000 -0400 @@ -89,14 +89,6 @@ } } @@ -3469,10 +5396,63 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/time.c /*** converted from ia64 ***/ /* * Return the number of micro-seconds that elapsed since the last -Index: linux-2.6-2.6.12/arch/parisc/kernel/unaligned.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/kernel/unaligned.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/kernel/unaligned.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/kernel/traps.c linux-2.6.13/arch/parisc/kernel/traps.c +--- linux-2.6.13.org/arch/parisc/kernel/traps.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/traps.c 2005-09-25 12:34:39.000000000 -0400 +@@ -74,7 +74,10 @@ + char *level; + unsigned long cr30; + unsigned long cr31; +- ++ /* carlos says that gcc understands better memory in a struct, ++ * and it makes our life easier with fpregs -- T-Bone */ ++ struct { u32 sw[2]; } s; ++ + level = user_mode(regs) ? KERN_DEBUG : KERN_CRIT; + + printk("%s\n", level); /* don't want to have that pretty register dump messed up */ +@@ -103,11 +106,33 @@ + printk("%s\n", buf); + } + +-#if RIDICULOUSLY_VERBOSE +- for (i = 0; i < 32; i += 2) +- printk("%sFR%02d : %016lx FR%2d : %016lx", level, i, +- regs->fr[i], i+1, regs->fr[i+1]); +-#endif ++ /* FR are 64bit everywhere. Need to use asm to get the content ++ * of fpsr/fper1, and we assume that we won't have a FP Identify ++ * in our way, otherwise we're screwed. ++ * The fldd is used to restore the T-bit if there was one, as the ++ * store clears it anyway. ++ * BTW, PA2.0 book says "thou shall not use fstw on FPSR/FPERs". */ ++ __asm__ ( ++ "fstd %%fr0,0(%1) \n\t" ++ "fldd 0(%1),%%fr0 \n\t" ++ : "=m" (s) : "r" (&s) : "%r0" ++ ); ++ ++ printk("%s\n", level); ++ printk("%s VZOUICununcqcqcqcqcqcrmunTDVZOUI\n", level); ++ printbinary(buf, s.sw[0], 32); ++ printk("%sFPSR: %s\n", level, buf); ++ printk("%sFPER1: %08x\n", level, s.sw[1]); ++ ++ /* here we'll print fr0 again, tho it'll be meaningless */ ++ for (i = 0; i < 32; i += 4) { ++ int j; ++ p = buf; ++ p += sprintf(p, "%sfr%02d-%02d ", level, i, i + 3); ++ for (j = 0; j < 4; j++) ++ p += sprintf(p, " %016llx", (i+j) == 0 ? 0 : regs->fr[i+j]); ++ printk("%s\n", buf); ++ } + + cr30 = mfctl(30); + cr31 = mfctl(31); +diff -Nur linux-2.6.13.org/arch/parisc/kernel/unaligned.c linux-2.6.13/arch/parisc/kernel/unaligned.c +--- linux-2.6.13.org/arch/parisc/kernel/unaligned.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/kernel/unaligned.c 2005-09-25 12:34:39.000000000 -0400 @@ -513,15 +513,18 @@ register int flop=0; /* true if this is a flop */ @@ -3506,10 +5486,9 @@ Index: linux-2.6-2.6.12/arch/parisc/kernel/unaligned.c if (!unaligned_enabled) goto force_sigbus; } -Index: linux-2.6-2.6.12/arch/parisc/lib/memcpy.c -=================================================================== ---- linux-2.6-2.6.12.orig/arch/parisc/lib/memcpy.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/arch/parisc/lib/memcpy.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/arch/parisc/lib/memcpy.c linux-2.6.13/arch/parisc/lib/memcpy.c +--- linux-2.6.13.org/arch/parisc/lib/memcpy.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/arch/parisc/lib/memcpy.c 2005-09-25 12:34:39.000000000 -0400 @@ -339,6 +339,7 @@ pds = (double *)pcs; pdd = (double *)pcd; @@ -3526,10 +5505,9 @@ Index: linux-2.6-2.6.12/arch/parisc/lib/memcpy.c pws = (unsigned int *)pds; pwd = (unsigned int *)pdd; -Index: linux-2.6-2.6.12/drivers/block/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/block/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/block/Kconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/block/Kconfig linux-2.6.13/drivers/block/Kconfig +--- linux-2.6.13.org/drivers/block/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/block/Kconfig 2005-09-25 12:34:39.000000000 -0400 @@ -6,7 +6,7 @@ config BLK_DEV_FD @@ -3539,11 +5517,10 @@ Index: linux-2.6-2.6.12/drivers/block/Kconfig ---help--- If you want to use the floppy disk drive(s) of your PC under Linux, say Y. Information about this driver, especially important for IBM -Index: linux-2.6-2.6.12/drivers/ide/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/ide/Kconfig 2005-08-09 17:50:50.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/ide/Kconfig 2005-08-09 17:53:35.000000000 -0400 -@@ -610,7 +610,7 @@ +diff -Nur linux-2.6.13.org/drivers/ide/Kconfig linux-2.6.13/drivers/ide/Kconfig +--- linux-2.6.13.org/drivers/ide/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/ide/Kconfig 2005-09-25 12:34:39.000000000 -0400 +@@ -616,7 +616,7 @@ tristate "NS87415 chipset support" help This driver adds detection and support for the NS87415 chip @@ -3552,10 +5529,21 @@ Index: linux-2.6-2.6.12/drivers/ide/Kconfig Please read the comments at the top of . -Index: linux-2.6-2.6.12/drivers/input/keyboard/hil_kbd.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/input/keyboard/hil_kbd.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/input/keyboard/hil_kbd.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/ide/ide-lib.c linux-2.6.13/drivers/ide/ide-lib.c +--- linux-2.6.13.org/drivers/ide/ide-lib.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/ide/ide-lib.c 2005-09-25 12:34:39.000000000 -0400 +@@ -410,7 +410,7 @@ + { + u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */ + +- if (on && drive->media == ide_disk) { ++ if (on) { + if (!PCI_DMA_BUS_IS_PHYS) + addr = BLK_BOUNCE_ANY; + else if (HWIF(drive)->pci_dev) +diff -Nur linux-2.6.13.org/drivers/input/keyboard/hil_kbd.c linux-2.6.13/drivers/input/keyboard/hil_kbd.c +--- linux-2.6.13.org/drivers/input/keyboard/hil_kbd.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/keyboard/hil_kbd.c 2005-09-25 12:34:39.000000000 -0400 @@ -204,7 +204,7 @@ hil_packet packet; int idx; @@ -3633,10 +5621,9 @@ Index: linux-2.6-2.6.12/drivers/input/keyboard/hil_kbd.c .connect = hil_kbd_connect, .disconnect = hil_kbd_disconnect, .interrupt = hil_kbd_interrupt -Index: linux-2.6-2.6.12/drivers/input/keyboard/hilkbd.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/input/keyboard/hilkbd.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/input/keyboard/hilkbd.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/input/keyboard/hilkbd.c linux-2.6.13/drivers/input/keyboard/hilkbd.c +--- linux-2.6.13.org/drivers/input/keyboard/hilkbd.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/keyboard/hilkbd.c 2005-09-25 12:34:39.000000000 -0400 @@ -22,7 +22,7 @@ #include #include @@ -3646,10 +5633,23 @@ Index: linux-2.6-2.6.12/drivers/input/keyboard/hilkbd.c #include #include -Index: linux-2.6-2.6.12/drivers/input/mouse/hil_ptr.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/input/mouse/hil_ptr.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/input/mouse/hil_ptr.c 2005-08-09 17:53:35.000000000 -0400 +@@ -278,11 +278,11 @@ + hil_init_chip(struct parisc_device *dev) + { + if (!dev->irq) { +- printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa); ++ printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa.start); + return -ENODEV; + } + +- hil_base = dev->hpa; ++ hil_base = dev->hpa.start; + hil_irq = dev->irq; + hil_dev.dev_id = dev; + +diff -Nur linux-2.6.13.org/drivers/input/mouse/hil_ptr.c linux-2.6.13/drivers/input/mouse/hil_ptr.c +--- linux-2.6.13.org/drivers/input/mouse/hil_ptr.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/mouse/hil_ptr.c 2005-09-25 12:34:39.000000000 -0400 @@ -196,7 +196,7 @@ hil_packet packet; int idx; @@ -3733,10 +5733,69 @@ Index: linux-2.6-2.6.12/drivers/input/mouse/hil_ptr.c }; static int __init hil_ptr_init(void) -Index: linux-2.6-2.6.12/drivers/input/serio/hil_mlc.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/input/serio/hil_mlc.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/input/serio/hil_mlc.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/input/serio/gscps2.c linux-2.6.13/drivers/input/serio/gscps2.c +--- linux-2.6.13.org/drivers/input/serio/gscps2.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/serio/gscps2.c 2005-09-25 12:34:39.000000000 -0400 +@@ -211,9 +211,6 @@ + writeb(0xff, addr+GSC_RESET); + gscps2_flush(ps2port); + spin_unlock_irqrestore(&ps2port->lock, flags); +- +- /* enable it */ +- gscps2_enable(ps2port, ENABLE); + } + + static LIST_HEAD(ps2port_list); +@@ -307,6 +304,9 @@ + + gscps2_reset(ps2port); + ++ /* enable it */ ++ gscps2_enable(ps2port, ENABLE); ++ + gscps2_interrupt(0, NULL, NULL); + + return 0; +@@ -331,7 +331,7 @@ + { + struct gscps2port *ps2port; + struct serio *serio; +- unsigned long hpa = dev->hpa; ++ unsigned long hpa = dev->hpa.start; + int ret; + + if (!dev->irq) +@@ -370,8 +370,6 @@ + serio->port_data = ps2port; + serio->dev.parent = &dev->dev; + +- list_add_tail(&ps2port->node, &ps2port_list); +- + ret = -EBUSY; + if (request_irq(dev->irq, gscps2_interrupt, SA_SHIRQ, ps2port->port->name, ps2port)) + goto fail_miserably; +@@ -396,15 +394,16 @@ + + serio_register_port(ps2port->port); + ++ list_add_tail(&ps2port->node, &ps2port_list); ++ + return 0; + + fail: + free_irq(dev->irq, ps2port); + + fail_miserably: +- list_del(&ps2port->node); + iounmap(ps2port->addr); +- release_mem_region(dev->hpa, GSC_STATUS + 4); ++ release_mem_region(dev->hpa.start, GSC_STATUS + 4); + + fail_nomem: + kfree(ps2port); +diff -Nur linux-2.6.13.org/drivers/input/serio/hil_mlc.c linux-2.6.13/drivers/input/serio/hil_mlc.c +--- linux-2.6.13.org/drivers/input/serio/hil_mlc.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/serio/hil_mlc.c 2005-09-25 12:34:39.000000000 -0400 @@ -801,7 +801,8 @@ struct hil_mlc_serio_map *map; struct hil_mlc *mlc; @@ -3776,10 +5835,25 @@ Index: linux-2.6-2.6.12/drivers/input/serio/hil_mlc.c mlc_serio->write = hil_mlc_serio_write; mlc_serio->open = hil_mlc_serio_open; mlc_serio->close = hil_mlc_serio_close; -Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/isdn/hisax/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/input/serio/hp_sdc.c linux-2.6.13/drivers/input/serio/hp_sdc.c +--- linux-2.6.13.org/drivers/input/serio/hp_sdc.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/input/serio/hp_sdc.c 2005-09-25 12:34:39.000000000 -0400 +@@ -875,9 +875,9 @@ + hp_sdc.dev = d; + hp_sdc.irq = d->irq; + hp_sdc.nmi = d->aux_irq; +- hp_sdc.base_io = d->hpa; +- hp_sdc.data_io = d->hpa + 0x800; +- hp_sdc.status_io = d->hpa + 0x801; ++ hp_sdc.base_io = d->hpa.start; ++ hp_sdc.data_io = d->hpa.start + 0x800; ++ hp_sdc.status_io = d->hpa.start + 0x801; + + return hp_sdc_init(); + } +diff -Nur linux-2.6.13.org/drivers/isdn/hisax/Kconfig linux-2.6.13/drivers/isdn/hisax/Kconfig +--- linux-2.6.13.org/drivers/isdn/hisax/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/isdn/hisax/Kconfig 2005-09-25 12:34:39.000000000 -0400 @@ -110,7 +110,7 @@ config HISAX_TELESPCI @@ -3789,7 +5863,7 @@ Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig help This enables HiSax support for the Teles PCI. See on how to configure it. -@@ -237,7 +237,7 @@ +@@ -238,7 +238,7 @@ config HISAX_NETJET bool "NETjet card" @@ -3798,7 +5872,7 @@ Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig help This enables HiSax support for the NetJet from Traverse Technologies. -@@ -248,7 +248,7 @@ +@@ -249,7 +249,7 @@ config HISAX_NETJET_U bool "NETspider U card" @@ -3807,7 +5881,7 @@ Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig help This enables HiSax support for the Netspider U interface ISDN card from Traverse Technologies. -@@ -316,7 +316,7 @@ +@@ -317,7 +317,7 @@ config HISAX_HFC_PCI bool "HFC PCI-Bus cards" @@ -3816,7 +5890,7 @@ Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig help This enables HiSax support for the HFC-S PCI 2BDS0 based cards. -@@ -343,14 +343,14 @@ +@@ -344,14 +344,14 @@ config HISAX_ENTERNOW_PCI bool "Formula-n enter:now PCI card" @@ -3833,10 +5907,9 @@ Index: linux-2.6-2.6.12/drivers/isdn/hisax/Kconfig help This enables HiSax support for the AMD7930 chips on some SPARCs. This code is not finished yet. -Index: linux-2.6-2.6.12/drivers/isdn/pcbit/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/isdn/pcbit/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/isdn/pcbit/Kconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/isdn/pcbit/Kconfig linux-2.6.13/drivers/isdn/pcbit/Kconfig +--- linux-2.6.13.org/drivers/isdn/pcbit/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/isdn/pcbit/Kconfig 2005-09-25 12:34:39.000000000 -0400 @@ -3,7 +3,7 @@ # config ISDN_DRV_PCBIT @@ -3846,10 +5919,94 @@ Index: linux-2.6-2.6.12/drivers/isdn/pcbit/Kconfig help This enables support for the PCBIT ISDN-card. This card is manufactured in Portugal by Octal. For running this card, -Index: linux-2.6-2.6.12/drivers/net/tulip/media.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/net/tulip/media.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/net/tulip/media.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/net/lasi_82596.c linux-2.6.13/drivers/net/lasi_82596.c +--- linux-2.6.13.org/drivers/net/lasi_82596.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/net/lasi_82596.c 2005-09-25 12:34:39.000000000 -0400 +@@ -415,6 +415,10 @@ + static int ticks_limit = 100; + static int max_cmd_backlog = TX_RING_SIZE-1; + ++#ifdef CONFIG_NET_POLL_CONTROLLER ++static void i596_poll_controller(struct net_device *dev); ++#endif ++ + + static inline void CA(struct net_device *dev) + { +@@ -636,11 +640,11 @@ + + disable_irq(dev->irq); /* disable IRQs from LAN */ + DEB(DEB_INIT, +- printk("RESET 82596 port: %p (with IRQ %d disabled)\n", +- (void*)(dev->base_addr + PA_I82596_RESET), ++ printk("RESET 82596 port: %lx (with IRQ %d disabled)\n", ++ (dev->base_addr + PA_I82596_RESET), + dev->irq)); + +- gsc_writel(0, (void*)(dev->base_addr + PA_I82596_RESET)); /* Hard Reset */ ++ gsc_writel(0, (dev->base_addr + PA_I82596_RESET)); /* Hard Reset */ + udelay(100); /* Wait 100us - seems to help */ + + /* change the scp address */ +@@ -1209,6 +1213,9 @@ + dev->set_multicast_list = set_multicast_list; + dev->tx_timeout = i596_tx_timeout; + dev->watchdog_timeo = TX_TIMEOUT; ++#ifdef CONFIG_NET_POLL_CONTROLLER ++ dev->poll_controller = i596_poll_controller; ++#endif + + dev->priv = (void *)(dev->mem_start); + +@@ -1242,6 +1249,14 @@ + return 0; + } + ++#ifdef CONFIG_NET_POLL_CONTROLLER ++static void i596_poll_controller(struct net_device *dev) ++{ ++ disable_irq(dev->irq); ++ i596_interrupt(dev->irq, dev, NULL); ++ enable_irq(dev->irq); ++} ++#endif + + static irqreturn_t i596_interrupt(int irq, void *dev_id, struct pt_regs *regs) + { +@@ -1528,17 +1543,18 @@ + + if (!dev->irq) { + printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n", +- __FILE__, dev->hpa); ++ __FILE__, dev->hpa.start); + return -ENODEV; + } + +- printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa, dev->irq); ++ printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start, ++ dev->irq); + + netdevice = alloc_etherdev(0); + if (!netdevice) + return -ENOMEM; + +- netdevice->base_addr = dev->hpa; ++ netdevice->base_addr = dev->hpa.start; + netdevice->irq = dev->irq; + + retval = i82596_probe(netdevice, &dev->dev); +@@ -1566,7 +1582,7 @@ + MODULE_DEVICE_TABLE(parisc, lan_tbl); + + static struct parisc_driver lan_driver = { +- .name = "Apricot", ++ .name = "lasi_82596", + .id_table = lan_tbl, + .probe = lan_init_chip, + }; +diff -Nur linux-2.6.13.org/drivers/net/tulip/media.c linux-2.6.13/drivers/net/tulip/media.c +--- linux-2.6.13.org/drivers/net/tulip/media.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/net/tulip/media.c 2005-09-25 12:34:39.000000000 -0400 @@ -44,8 +44,10 @@ /* MII transceiver control section. @@ -3921,10 +6078,9 @@ Index: linux-2.6-2.6.12/drivers/net/tulip/media.c tmp_info = get_u16(&misc_info[1]); if (tmp_info) tp->advertising[phy_num] = tmp_info | 1; -Index: linux-2.6-2.6.12/drivers/net/tulip/tulip.h -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/net/tulip/tulip.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/net/tulip/tulip.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/net/tulip/tulip.h linux-2.6.13/drivers/net/tulip/tulip.h +--- linux-2.6.13.org/drivers/net/tulip/tulip.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/net/tulip/tulip.h 2005-09-25 12:34:39.000000000 -0400 @@ -475,8 +475,11 @@ udelay(10); @@ -3939,10 +6095,9 @@ Index: linux-2.6-2.6.12/drivers/net/tulip/tulip.h } } -Index: linux-2.6-2.6.12/drivers/net/tulip/tulip_core.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/net/tulip/tulip_core.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/net/tulip/tulip_core.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/net/tulip/tulip_core.c linux-2.6.13/drivers/net/tulip/tulip_core.c +--- linux-2.6.13.org/drivers/net/tulip/tulip_core.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/net/tulip/tulip_core.c 2005-09-25 12:34:39.000000000 -0400 @@ -22,7 +22,7 @@ #else #define DRV_VERSION "1.1.13" @@ -3961,10 +6116,36 @@ Index: linux-2.6-2.6.12/drivers/net/tulip/tulip_core.c HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII | HAS_ACPI | HAS_NWAY | HAS_INTR_MITIGATION | HAS_PCI_MWI, t21142_timer }, -Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/parisc/ccio-dma.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/parisc/ccio-dma.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/parisc/asp.c linux-2.6.13/drivers/parisc/asp.c +--- linux-2.6.13.org/drivers/parisc/asp.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/asp.c 2005-09-25 12:34:39.000000000 -0400 +@@ -77,12 +77,12 @@ + struct gsc_irq gsc_irq; + int ret; + +- asp.version = gsc_readb(dev->hpa + ASP_VER_OFFSET) & 0xf; ++ asp.version = gsc_readb(dev->hpa.start + ASP_VER_OFFSET) & 0xf; + asp.name = (asp.version == 1) ? "Asp" : "Cutoff"; + asp.hpa = ASP_INTERRUPT_ADDR; + + printk(KERN_INFO "%s version %d at 0x%lx found.\n", +- asp.name, asp.version, dev->hpa); ++ asp.name, asp.version, dev->hpa.start); + + /* the IRQ ASP should use */ + ret = -EBUSY; +@@ -126,7 +126,7 @@ + }; + + struct parisc_driver asp_driver = { +- .name = "Asp", ++ .name = "asp", + .id_table = asp_tbl, + .probe = asp_init_chip, + }; +diff -Nur linux-2.6.13.org/drivers/parisc/ccio-dma.c linux-2.6.13/drivers/parisc/ccio-dma.c +--- linux-2.6.13.org/drivers/parisc/ccio-dma.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/ccio-dma.c 2005-09-25 12:34:39.000000000 -0400 @@ -100,9 +100,9 @@ #define DBG_RUN_SG(x...) #endif @@ -4045,6 +6226,15 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c iovp += chain_size; byte_cnt -= chain_size; } +@@ -1251,7 +1251,7 @@ + static int ccio_probe(struct parisc_device *dev); + + static struct parisc_driver ccio_driver = { +- .name = "U2:Uturn", ++ .name = "ccio", + .id_table = ccio_tbl, + .probe = ccio_probe, + }; @@ -1314,14 +1314,13 @@ ioc->pdir_size = (iova_space_size / IOVP_SIZE) * sizeof(u64); @@ -4089,7 +6279,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c } memset(ioc->res_map, 0, ioc->res_size); -@@ -1366,44 +1363,52 @@ +@@ -1366,44 +1363,58 @@ ** Initialize IOA hardware */ WRITE_U32(CCIO_CHAINID_MASK << ioc->chainid_shift, @@ -4144,7 +6334,14 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c + */ if (res->end + 1 == res->start) return; - result = request_resource(&iomem_resource, res); +- result = request_resource(&iomem_resource, res); ++ ++ /* On some platforms (e.g. K-Class), we have already registered ++ * resources for devices reported by firmware. Some are children ++ * of ccio. ++ * "insert" ccio ranges in the mmio hierarchy (/proc/iomem). ++ */ ++ result = insert_resource(&iomem_resource, res); if (result < 0) { - printk(KERN_ERR "%s: failed to claim CCIO bus address space (%08lx,%08lx)\n", - __FILE__, res->start, res->end); @@ -4153,7 +6350,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c } } -@@ -1414,9 +1419,8 @@ +@@ -1414,9 +1425,8 @@ sprintf(name, "GSC Bus [%d/]", ioc->hw_path); @@ -4165,7 +6362,21 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c } static int new_ioc_area(struct resource *res, unsigned long size, -@@ -1486,15 +1490,15 @@ +@@ -1427,7 +1437,12 @@ + + res->start = (max - size + 1) &~ (align - 1); + res->end = res->start + size; +- if (!request_resource(&iomem_resource, res)) ++ ++ /* We might be trying to expand the MMIO range to include ++ * a child device that has already registered it's MMIO space. ++ * Use "insert" instead of request_resource(). ++ */ ++ if (!insert_resource(&iomem_resource, res)) + return 0; + + return new_ioc_area(res, size, min, max - size, align); +@@ -1486,15 +1501,15 @@ if (!expand_ioc_area(parent, size, min, max, align)) { __raw_writel(((parent->start)>>16) | 0xffff0000, @@ -4185,19 +6396,353 @@ Index: linux-2.6-2.6.12/drivers/parisc/ccio-dma.c } else { return -EBUSY; } -@@ -1554,7 +1558,7 @@ +@@ -1521,7 +1536,12 @@ + return -EBUSY; + } + +- return request_resource(parent, res); ++ /* "transparent" bus bridges need to register MMIO resources ++ * firmware assigned them. e.g. children of hppb.c (e.g. K-class) ++ * registered their resources in the PDC "bus walk" (See ++ * arch/parisc/kernel/inventory.c). ++ */ ++ return insert_resource(parent, res); + } + + /** +@@ -1546,7 +1566,7 @@ + + ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn"; + +- printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa); ++ printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa.start); + + for (i = 0; i < ioc_count; i++) { + ioc_p = &(*ioc_p)->next; +@@ -1554,7 +1574,7 @@ *ioc_p = ioc; ioc->hw_path = dev->hw_path; - ioc->ioc_hpa = (struct ioa_registers *)dev->hpa; -+ ioc->ioc_regs = ioremap(dev->hpa, 4096); ++ ioc->ioc_regs = ioremap(dev->hpa.start, 4096); ccio_ioc_init(ioc); ccio_init_resources(ioc); hppa_dma_ops = &ccio_ops; -Index: linux-2.6-2.6.12/drivers/parisc/led.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/parisc/led.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/parisc/led.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/parisc/ccio-rm-dma.c linux-2.6.13/drivers/parisc/ccio-rm-dma.c +--- linux-2.6.13.org/drivers/parisc/ccio-rm-dma.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/ccio-rm-dma.c 2005-09-25 12:34:39.000000000 -0400 +@@ -167,7 +167,7 @@ + { + printk(KERN_INFO "%s found %s at 0x%lx\n", MODULE_NAME, + dev->id.hversion == U2_BC_GSC ? "U2" : "UTurn", +- dev->hpa); ++ dev->hpa.start); + + /* + ** FIXME - should check U2 registers to verify it's really running +diff -Nur linux-2.6.13.org/drivers/parisc/dino.c linux-2.6.13/drivers/parisc/dino.c +--- linux-2.6.13.org/drivers/parisc/dino.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/dino.c 2005-09-25 12:34:39.000000000 -0400 +@@ -178,6 +178,8 @@ + void __iomem *base_addr = d->hba.base_addr; + unsigned long flags; + ++ DBG("%s: %p, %d, %d, %d\n", __FUNCTION__, base_addr, devfn, where, ++ size); + spin_lock_irqsave(&d->dinosaur_pen, flags); + + /* tell HW which CFG address */ +@@ -211,6 +213,8 @@ + void __iomem *base_addr = d->hba.base_addr; + unsigned long flags; + ++ DBG("%s: %p, %d, %d, %d\n", __FUNCTION__, base_addr, devfn, where, ++ size); + spin_lock_irqsave(&d->dinosaur_pen, flags); + + /* avoid address stepping feature */ +@@ -295,7 +299,7 @@ + struct dino_device *dino_dev = irq_desc[irq].handler_data; + int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, irq); + +- DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq); ++ DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq); + + /* Clear the matching bit in the IMR register */ + dino_dev->imr &= ~(DINO_MASK_IRQ(local_irq)); +@@ -308,7 +312,7 @@ + int local_irq = gsc_find_local_irq(irq, dino_dev->global_irq, irq); + u32 tmp; + +- DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq); ++ DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, dino_dev, irq); + + /* + ** clear pending IRQ bits +@@ -490,7 +494,7 @@ + if (res->start == F_EXTEND(0xf0000000UL | (i * _8MB))) + break; + } +- DBG("DINO GSC WRITE i=%d, start=%lx, dino addr = %lx\n", ++ DBG("DINO GSC WRITE i=%d, start=%lx, dino addr = %p\n", + i, res->start, base_addr + DINO_IO_ADDR_EN); + __raw_writel(1 << i, base_addr + DINO_IO_ADDR_EN); + } +@@ -683,6 +687,14 @@ + dino_card_init(struct dino_device *dino_dev) + { + u32 brdg_feat = 0x00784e05; ++ unsigned long status; ++ ++ status = __raw_readl(dino_dev->hba.base_addr+DINO_IO_STATUS); ++ if (status & 0x0000ff80) { ++ __raw_writel(0x00000005, ++ dino_dev->hba.base_addr+DINO_IO_COMMAND); ++ udelay(1); ++ } + + __raw_writel(0x00000000, dino_dev->hba.base_addr+DINO_GMASK); + __raw_writel(0x00000001, dino_dev->hba.base_addr+DINO_IO_FBB_EN); +@@ -902,15 +914,15 @@ + ** If so, initialize the chip appropriately (card-mode vs bridge mode). + ** Much of the initialization is common though. + */ +-static int __init +-dino_driver_callback(struct parisc_device *dev) ++static int __init dino_probe(struct parisc_device *dev) + { + struct dino_device *dino_dev; // Dino specific control struct + const char *version = "unknown"; + char *name; + int is_cujo = 0; + struct pci_bus *bus; +- ++ unsigned long hpa = dev->hpa.start; ++ + name = "Dino"; + if (is_card_dino(&dev->id)) { + version = "3.x (card mode)"; +@@ -928,11 +940,11 @@ + } + } + +- printk("%s version %s found at 0x%lx\n", name, version, dev->hpa); ++ printk("%s version %s found at 0x%lx\n", name, version, hpa); + +- if (!request_mem_region(dev->hpa, PAGE_SIZE, name)) { ++ if (!request_mem_region(hpa, PAGE_SIZE, name)) { + printk(KERN_ERR "DINO: Hey! Someone took my MMIO space (0x%ld)!\n", +- dev->hpa); ++ hpa); + return 1; + } + +@@ -940,12 +952,12 @@ + if (is_cujo && dev->id.hversion_rev == 1) { + #ifdef CONFIG_IOMMU_CCIO + printk(KERN_WARNING "Enabling Cujo 2.0 bug workaround\n"); +- if (dev->hpa == (unsigned long)CUJO_RAVEN_ADDR) { ++ if (hpa == (unsigned long)CUJO_RAVEN_ADDR) { + ccio_cujo20_fixup(dev, CUJO_RAVEN_BADPAGE); +- } else if (dev->hpa == (unsigned long)CUJO_FIREHAWK_ADDR) { ++ } else if (hpa == (unsigned long)CUJO_FIREHAWK_ADDR) { + ccio_cujo20_fixup(dev, CUJO_FIREHAWK_BADPAGE); + } else { +- printk("Don't recognise Cujo at address 0x%lx, not enabling workaround\n", dev->hpa); ++ printk("Don't recognise Cujo at address 0x%lx, not enabling workaround\n", hpa); + } + #endif + } else if (!is_cujo && !is_card_dino(&dev->id) && +@@ -970,7 +982,7 @@ + memset(dino_dev, 0, sizeof(struct dino_device)); + + dino_dev->hba.dev = dev; +- dino_dev->hba.base_addr = ioremap(dev->hpa, 4096); /* faster access */ ++ dino_dev->hba.base_addr = ioremap(hpa, 4096); + dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */ + spin_lock_init(&dino_dev->dinosaur_pen); + dino_dev->hba.iommu = ccio_get_iommu(dev); +@@ -1027,9 +1039,9 @@ + }; + + static struct parisc_driver dino_driver = { +- .name = "Dino", ++ .name = "dino", + .id_table = dino_tbl, +- .probe = dino_driver_callback, ++ .probe = dino_probe, + }; + + /* +diff -Nur linux-2.6.13.org/drivers/parisc/eisa.c linux-2.6.13/drivers/parisc/eisa.c +--- linux-2.6.13.org/drivers/parisc/eisa.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/eisa.c 2005-09-25 12:34:39.000000000 -0400 +@@ -315,7 +315,7 @@ + char *name = is_mongoose(dev) ? "Mongoose" : "Wax"; + + printk(KERN_INFO "%s EISA Adapter found at 0x%08lx\n", +- name, dev->hpa); ++ name, dev->hpa.start); + + eisa_dev.hba.dev = dev; + eisa_dev.hba.iommu = ccio_get_iommu(dev); +@@ -397,7 +397,7 @@ + MODULE_DEVICE_TABLE(parisc, eisa_tbl); + + static struct parisc_driver eisa_driver = { +- .name = "EISA Bus Adapter", ++ .name = "eisa_ba", + .id_table = eisa_tbl, + .probe = eisa_probe, + }; +diff -Nur linux-2.6.13.org/drivers/parisc/gsc.c linux-2.6.13/drivers/parisc/gsc.c +--- linux-2.6.13.org/drivers/parisc/gsc.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/gsc.c 2005-09-25 12:34:39.000000000 -0400 +@@ -183,12 +183,20 @@ + *irqp = irq; + } + ++static struct device *next_device(struct klist_iter *i) ++{ ++ struct klist_node * n = klist_next(i); ++ return n ? container_of(n, struct device, knode_parent) : NULL; ++} ++ + void gsc_fixup_irqs(struct parisc_device *parent, void *ctrl, + void (*choose_irq)(struct parisc_device *, void *)) + { + struct device *dev; ++ struct klist_iter i; + +- list_for_each_entry(dev, &parent->dev.children, node) { ++ klist_iter_init(&parent->dev.klist_children, &i); ++ while ((dev = next_device(&i))) { + struct parisc_device *padev = to_parisc_device(dev); + + /* work-around for 715/64 and others which have parent +@@ -197,6 +205,7 @@ + return gsc_fixup_irqs(padev, ctrl, choose_irq); + choose_irq(padev, ctrl); + } ++ klist_iter_exit(&i); + } + + int gsc_common_setup(struct parisc_device *parent, struct gsc_asic *gsc_asic) +diff -Nur linux-2.6.13.org/drivers/parisc/hppb.c linux-2.6.13/drivers/parisc/hppb.c +--- linux-2.6.13.org/drivers/parisc/hppb.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/hppb.c 2005-09-25 12:34:39.000000000 -0400 +@@ -68,14 +68,14 @@ + memset(card->next, '\0', sizeof(struct hppb_card)); + card = card->next; + } +- printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa); ++ printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa.start); + +- card->hpa = dev->hpa; ++ card->hpa = dev->hpa.start; + card->mmio_region.name = "HP-PB Bus"; + card->mmio_region.flags = IORESOURCE_MEM; + +- card->mmio_region.start = __raw_readl(dev->hpa + IO_IO_LOW); +- card->mmio_region.end = __raw_readl(dev->hpa + IO_IO_HIGH) - 1; ++ card->mmio_region.start = gsc_readl(dev->hpa.start + IO_IO_LOW); ++ card->mmio_region.end = gsc_readl(dev->hpa.start + IO_IO_HIGH) - 1; + + status = ccio_request_resource(dev, &card->mmio_region); + if(status < 0) { +@@ -93,7 +93,7 @@ + }; + + static struct parisc_driver hppb_driver = { +- .name = "Gecko Boa", ++ .name = "gecko_boa", + .id_table = hppb_tbl, + .probe = hppb_probe, + }; +diff -Nur linux-2.6.13.org/drivers/parisc/lasi.c linux-2.6.13/drivers/parisc/lasi.c +--- linux-2.6.13.org/drivers/parisc/lasi.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/lasi.c 2005-09-25 12:34:39.000000000 -0400 +@@ -176,7 +176,7 @@ + return -ENOMEM; + + lasi->name = "Lasi"; +- lasi->hpa = dev->hpa; ++ lasi->hpa = dev->hpa.start; + + /* Check the 4-bit (yes, only 4) version register */ + lasi->version = gsc_readl(lasi->hpa + LASI_VER) & 0xf; +@@ -234,7 +234,7 @@ + }; + + struct parisc_driver lasi_driver = { +- .name = "Lasi", ++ .name = "lasi", + .id_table = lasi_tbl, + .probe = lasi_init_chip, + }; +diff -Nur linux-2.6.13.org/drivers/parisc/lba_pci.c linux-2.6.13/drivers/parisc/lba_pci.c +--- linux-2.6.13.org/drivers/parisc/lba_pci.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/lba_pci.c 2005-09-25 12:34:40.000000000 -0400 +@@ -1288,7 +1288,7 @@ + ** Adjust "window" for this rope. + */ + rsize /= ROPES_PER_IOC; +- r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa); ++ r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa.start); + r->end = r->start + rsize; + } else { + r->end = r->start = 0; /* Not enabled. */ +@@ -1458,7 +1458,7 @@ + u32 func_class; + void *tmp_obj; + char *version; +- void __iomem *addr = ioremap(dev->hpa, 4096); ++ void __iomem *addr = ioremap(dev->hpa.start, 4096); + + /* Read HW Rev First */ + func_class = READ_REG32(addr + LBA_FCLASS); +@@ -1476,7 +1476,7 @@ + } + + printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n", +- MODULE_NAME, version, func_class & 0xf, dev->hpa); ++ MODULE_NAME, version, func_class & 0xf, dev->hpa.start); + + if (func_class < 2) { + printk(KERN_WARNING "Can't support LBA older than " +@@ -1503,17 +1503,17 @@ + * but for the mask for func_class. + */ + printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n", +- MODULE_NAME, version, func_class & 0xff, dev->hpa); ++ MODULE_NAME, version, func_class & 0xff, dev->hpa.start); + cfg_ops = &mercury_cfg_ops; + } else { +- printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa); ++ printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa.start); + return -ENODEV; + } + + /* + ** Tell I/O SAPIC driver we have a IRQ handler/region. + */ +- tmp_obj = iosapic_register(dev->hpa + LBA_IOSAPIC_BASE); ++ tmp_obj = iosapic_register(dev->hpa.start + LBA_IOSAPIC_BASE); + + /* NOTE: PCI devices (e.g. 103c:1005 graphics card) which don't + ** have an IRT entry will get NULL back from iosapic code. +@@ -1635,7 +1635,7 @@ + */ + void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask) + { +- void __iomem * base_addr = ioremap(lba->hpa, 4096); ++ void __iomem * base_addr = ioremap(lba->hpa.start, 4096); + + imask <<= 2; /* adjust for hints - 2 more bits */ + +diff -Nur linux-2.6.13.org/drivers/parisc/led.c linux-2.6.13/drivers/parisc/led.c +--- linux-2.6.13.org/drivers/parisc/led.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/led.c 2005-09-25 12:34:40.000000000 -0400 @@ -18,6 +18,9 @@ * Changes: * - Audit copy_from_user in led_proc_write. @@ -4578,10 +7123,9 @@ Index: linux-2.6-2.6.12/drivers/parisc/led.c return lcd_info.lcd_width; } -Index: linux-2.6-2.6.12/drivers/parisc/pdc_stable.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/parisc/pdc_stable.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/parisc/pdc_stable.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/parisc/pdc_stable.c linux-2.6.13/drivers/parisc/pdc_stable.c +--- linux-2.6.13.org/drivers/parisc/pdc_stable.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/pdc_stable.c 2005-09-25 12:34:40.000000000 -0400 @@ -536,7 +536,7 @@ out += sprintf(out, "Memory tested: "); @@ -4591,19 +7135,20 @@ Index: linux-2.6-2.6.12/drivers/parisc/pdc_stable.c else out += sprintf(out, "All"); out += sprintf(out, "\n"); -Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/parisc/sba_iommu.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/parisc/sba_iommu.c 2005-08-09 17:53:35.000000000 -0400 -@@ -91,7 +91,7 @@ +diff -Nur linux-2.6.13.org/drivers/parisc/sba_iommu.c linux-2.6.13/drivers/parisc/sba_iommu.c +--- linux-2.6.13.org/drivers/parisc/sba_iommu.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/sba_iommu.c 2005-09-25 12:34:40.000000000 -0400 +@@ -91,8 +91,8 @@ #define DBG_RES(x...) #endif -#if defined(__LP64__) && !defined(CONFIG_PDC_NARROW) -+#if defined(CONFIG_64BIT) && !defined(CONFIG_PDC_NARROW) - /* "low end" PA8800 machines use ZX1 chipset */ +-/* "low end" PA8800 machines use ZX1 chipset */ ++#if defined(CONFIG_64BIT) ++/* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ #define ZX1_SUPPORT #endif + @@ -231,7 +231,7 @@ spinlock_t res_lock; unsigned int res_bitshift; /* from the LEFT! */ @@ -4705,7 +7250,41 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c /* If this is not PA8700 (PCX-W2) ** OR newer than ver 2.2 -@@ -1343,7 +1356,7 @@ +@@ -1322,19 +1335,29 @@ + return (void *) pdir_base; + } + ++static struct device *next_device(struct klist_iter *i) ++{ ++ struct klist_node * n = klist_next(i); ++ return n ? container_of(n, struct device, knode_parent) : NULL; ++} ++ + /* setup Mercury or Elroy IBASE/IMASK registers. */ +-static void setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num) ++static void ++setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num) + { +- /* lba_set_iregs() is in drivers/parisc/lba_pci.c */ ++ /* lba_set_iregs() is in drivers/parisc/lba_pci.c */ + extern void lba_set_iregs(struct parisc_device *, u32, u32); + struct device *dev; ++ struct klist_iter i; + +- list_for_each_entry(dev, &sba->dev.children, node) { ++ klist_iter_init(&sba->dev.klist_children, &i); ++ while ((dev = next_device(&i))) { + struct parisc_device *lba = to_parisc_device(dev); +- int rope_num = (lba->hpa >> 13) & 0xf; ++ int rope_num = (lba->hpa.start >> 13) & 0xf; + if (rope_num >> 3 == ioc_num) + lba_set_iregs(lba, ioc->ibase, ioc->imask); + } ++ klist_iter_exit(&i); + } + + static void +@@ -1343,7 +1366,7 @@ u32 iova_space_mask; u32 iova_space_size; int iov_order, tcnfg; @@ -4714,7 +7293,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c int agp_found = 0; #endif /* -@@ -1380,7 +1393,7 @@ +@@ -1380,7 +1403,7 @@ DBG_INIT("%s() pdir %p size %x\n", __FUNCTION__, ioc->pdir_base, ioc->pdir_size); @@ -4723,7 +7302,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c ioc->hint_shift_pdir = iov_order + PAGE_SHIFT; ioc->hint_mask_pdir = ~(0x3 << (iov_order + PAGE_SHIFT)); -@@ -1404,7 +1417,7 @@ +@@ -1404,7 +1427,7 @@ WRITE_REG(ioc->imask, ioc->ioc_hpa + IOC_IMASK); @@ -4732,7 +7311,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c /* ** Setting the upper bits makes checking for bypass addresses ** a little faster later on. -@@ -1437,7 +1450,7 @@ +@@ -1437,7 +1460,7 @@ */ WRITE_REG(ioc->ibase | 31, ioc->ioc_hpa + IOC_PCOM); @@ -4741,7 +7320,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c /* ** If an AGP device is present, only use half of the IOV space ** for PCI DMA. Unfortunately we can't know ahead of time -@@ -1489,11 +1502,9 @@ +@@ -1489,11 +1512,9 @@ if (iova_space_size < (1 << (20 - PAGE_SHIFT))) { iova_space_size = 1 << (20 - PAGE_SHIFT); } @@ -4753,7 +7332,7 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c /* ** iova space must be log2() in size. -@@ -1519,7 +1530,7 @@ +@@ -1519,7 +1540,7 @@ DBG_INIT("%s() pdir %p size %x\n", __FUNCTION__, ioc->pdir_base, pdir_size); @@ -4762,11 +7341,94 @@ Index: linux-2.6-2.6.12/drivers/parisc/sba_iommu.c /* FIXME : DMA HINTs not used */ ioc->hint_shift_pdir = iov_order + PAGE_SHIFT; ioc->hint_mask_pdir = ~(0x3 << (iov_order + PAGE_SHIFT)); -Index: linux-2.6-2.6.12/drivers/pcmcia/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/pcmcia/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/pcmcia/Kconfig 2005-08-09 17:53:35.000000000 -0400 -@@ -166,7 +166,11 @@ +@@ -1590,7 +1611,7 @@ + + static void __iomem *ioc_remap(struct sba_device *sba_dev, int offset) + { +- return ioremap(sba_dev->dev->hpa + offset, SBA_FUNC_SIZE); ++ return ioremap(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE); + } + + static void sba_hw_init(struct sba_device *sba_dev) +@@ -1968,7 +1989,7 @@ + u32 func_class; + int i; + char *version; +- void __iomem *sba_addr = ioremap(dev->hpa, SBA_FUNC_SIZE); ++ void __iomem *sba_addr = ioremap(dev->hpa.start, SBA_FUNC_SIZE); + + sba_dump_ranges(sba_addr); + +@@ -2010,7 +2031,7 @@ + } + + printk(KERN_INFO "%s found %s at 0x%lx\n", +- MODULE_NAME, version, dev->hpa); ++ MODULE_NAME, version, dev->hpa.start); + + sba_dev = kmalloc(sizeof(struct sba_device), GFP_KERNEL); + if (!sba_dev) { +diff -Nur linux-2.6.13.org/drivers/parisc/superio.c linux-2.6.13/drivers/parisc/superio.c +--- linux-2.6.13.org/drivers/parisc/superio.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/superio.c 2005-09-25 12:34:40.000000000 -0400 +@@ -11,6 +11,7 @@ + * (C) Copyright 2000 Alex deVries + * (C) Copyright 2001 John Marvin + * (C) Copyright 2003 Grant Grundler ++ * (C) Copyright 2005 Kyle McMartin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as +@@ -405,6 +406,7 @@ + + serial[0].iobase = sio_dev.sp1_base; + serial[0].irq = SP1_IRQ; ++ spin_lock_init(&serial[0].lock); + + retval = early_serial_setup(&serial[0]); + if (retval < 0) { +@@ -414,6 +416,7 @@ + + serial[1].iobase = sio_dev.sp2_base; + serial[1].irq = SP2_IRQ; ++ spin_lock_init(&serial[1].lock); + retval = early_serial_setup(&serial[1]); + + if (retval < 0) +diff -Nur linux-2.6.13.org/drivers/parisc/wax.c linux-2.6.13/drivers/parisc/wax.c +--- linux-2.6.13.org/drivers/parisc/wax.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parisc/wax.c 2005-09-25 12:34:40.000000000 -0400 +@@ -81,7 +81,7 @@ + return -ENOMEM; + + wax->name = "wax"; +- wax->hpa = dev->hpa; ++ wax->hpa = dev->hpa.start; + + wax->version = 0; /* gsc_readb(wax->hpa+WAX_VER); */ + printk(KERN_INFO "%s at 0x%lx found.\n", wax->name, wax->hpa); +diff -Nur linux-2.6.13.org/drivers/parport/parport_gsc.c linux-2.6.13/drivers/parport/parport_gsc.c +--- linux-2.6.13.org/drivers/parport/parport_gsc.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/parport/parport_gsc.c 2005-09-25 12:34:40.000000000 -0400 +@@ -359,11 +359,12 @@ + unsigned long port; + + if (!dev->irq) { +- printk("IRQ not found for parallel device at 0x%lx\n", dev->hpa); ++ printk(KERN_WARNING "IRQ not found for parallel device at 0x%lx\n", ++ dev->hpa.start); + return -ENODEV; + } + +- port = dev->hpa + PARPORT_GSC_OFFSET; ++ port = dev->hpa.start + PARPORT_GSC_OFFSET; + + /* some older machines with ASP-chip don't support + * the enhanced parport modes. +diff -Nur linux-2.6.13.org/drivers/pcmcia/Kconfig linux-2.6.13/drivers/pcmcia/Kconfig +--- linux-2.6.13.org/drivers/pcmcia/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/pcmcia/Kconfig 2005-09-25 12:34:40.000000000 -0400 +@@ -190,7 +190,11 @@ config PCMCIA_PROBE bool @@ -4779,10 +7441,9 @@ Index: linux-2.6-2.6.12/drivers/pcmcia/Kconfig config M32R_PCC bool "M32R PCMCIA I/F" -Index: linux-2.6-2.6.12/drivers/pcmcia/rsrc_nonstatic.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/pcmcia/rsrc_nonstatic.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/pcmcia/rsrc_nonstatic.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/pcmcia/rsrc_nonstatic.c linux-2.6.13/drivers/pcmcia/rsrc_nonstatic.c +--- linux-2.6.13.org/drivers/pcmcia/rsrc_nonstatic.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/pcmcia/rsrc_nonstatic.c 2005-09-25 12:34:40.000000000 -0400 @@ -43,7 +43,11 @@ #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444) @@ -4795,11 +7456,10 @@ Index: linux-2.6-2.6.12/drivers/pcmcia/rsrc_nonstatic.c #ifdef CONFIG_PCMCIA_PROBE INT_MODULE_PARM(probe_io, 1); /* IO port probe? */ INT_MODULE_PARM(mem_limit, 0x10000); -Index: linux-2.6-2.6.12/drivers/scsi/53c700.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/53c700.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/53c700.c 2005-08-09 17:53:35.000000000 -0400 -@@ -302,6 +302,7 @@ +diff -Nur linux-2.6.13.org/drivers/scsi/53c700.c linux-2.6.13/drivers/scsi/53c700.c +--- linux-2.6.13.org/drivers/scsi/53c700.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/53c700.c 2005-09-25 12:34:40.000000000 -0400 +@@ -301,6 +301,7 @@ __u8 *memory; __u32 *script; struct Scsi_Host *host; @@ -4807,7 +7467,7 @@ Index: linux-2.6-2.6.12/drivers/scsi/53c700.c static int banner = 0; int j; -@@ -403,11 +404,11 @@ +@@ -401,11 +402,11 @@ printk(KERN_NOTICE "53c700: Version " NCR_700_VERSION " By James.Bottomley@HansenPartnership.com\n"); banner = 1; } @@ -4823,10 +7483,18 @@ Index: linux-2.6-2.6.12/drivers/scsi/53c700.c /* reset the chip */ NCR_700_chip_reset(host); -Index: linux-2.6-2.6.12/drivers/scsi/lasi700.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/lasi700.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/lasi700.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/scsi/lasi700.c linux-2.6.13/drivers/scsi/lasi700.c +--- linux-2.6.13.org/drivers/scsi/lasi700.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/lasi700.c 2005-09-25 12:34:40.000000000 -0400 +@@ -98,7 +98,7 @@ + static int __init + lasi700_probe(struct parisc_device *dev) + { +- unsigned long base = dev->hpa + LASI_SCSI_CORE_OFFSET; ++ unsigned long base = dev->hpa.start + LASI_SCSI_CORE_OFFSET; + struct NCR_700_Host_Parameters *hostdata; + struct Scsi_Host *host; + @@ -125,8 +125,6 @@ hostdata->dmode_extra = DMODE_FC2; } @@ -4836,694 +7504,457 @@ Index: linux-2.6-2.6.12/drivers/scsi/lasi700.c host = NCR_700_detect(&lasi700_template, hostdata, &dev->dev); if (!host) goto out_kfree; -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_defs.h -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_defs.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_defs.h 2005-08-09 17:53:35.000000000 -0400 -@@ -40,7 +40,7 @@ - #ifndef SYM_DEFS_H - #define SYM_DEFS_H +@@ -168,7 +166,7 @@ + } --#define SYM_VERSION "2.2.0" -+#define SYM_VERSION "2.2.1" - #define SYM_DRIVER_NAME "sym-" SYM_VERSION + static struct parisc_driver lasi700_driver = { +- .name = "Lasi SCSI", ++ .name = "lasi_scsi", + .id_table = lasi700_ids, + .probe = lasi700_probe, + .remove = __devexit_p(lasi700_driver_remove), +diff -Nur linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_fw.c linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_fw.c +--- linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_fw.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_fw.c 2005-09-25 12:34:40.000000000 -0400 +@@ -37,11 +37,7 @@ + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +-#ifdef __FreeBSD__ +-#include +-#else + #include "sym_glue.h" +-#endif /* -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_glue.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_glue.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_glue.c 2005-08-09 17:53:35.000000000 -0400 -@@ -155,10 +155,11 @@ - base = tmp; - if ((tmp & 0x7) == PCI_BASE_ADDRESS_MEM_TYPE_64) { - pci_read_config_dword(pdev, PCI_BAR_OFFSET(index++), &tmp); -- if (tmp > 0) -+ if (tmp > 0) { - dev_err(&pdev->dev, - "BAR %d is 64-bit, disabling\n", index - 1); -- base = 0; -+ base = 0; -+ } - } - - if ((base & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) { -@@ -389,13 +390,20 @@ - { - struct sym_tblmove *data = &cp->phys.data[SYM_CONF_MAX_SG-1]; - int segment; -+ unsigned int len = cmd->request_bufflen; - -- cp->data_len = cmd->request_bufflen; -- -- if (cmd->request_bufflen) { -+ if (len) { - dma_addr_t baddr = map_scsi_single_data(np, cmd); - if (baddr) { -- sym_build_sge(np, data, baddr, cmd->request_bufflen); -+ if (len & 1) { -+ struct sym_tcb *tp = &np->target[cp->target]; -+ if (tp->head.wval & EWS) { -+ len++; -+ cp->odd_byte_adjustment++; -+ } -+ } -+ cp->data_len = len; -+ sym_build_sge(np, data, baddr, len); - segment = 1; - } else { - segment = -2; -@@ -418,6 +426,7 @@ - segment = sym_scatter_no_sglist(np, cp, cmd); - else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) { - struct scatterlist *scatter = (struct scatterlist *)cmd->buffer; -+ struct sym_tcb *tp = &np->target[cp->target]; - struct sym_tblmove *data; - - if (use_sg > SYM_CONF_MAX_SG) { -@@ -431,6 +440,11 @@ - dma_addr_t baddr = sg_dma_address(&scatter[segment]); - unsigned int len = sg_dma_len(&scatter[segment]); - -+ if ((len & 1) && (tp->head.wval & EWS)) { -+ len++; -+ cp->odd_byte_adjustment++; -+ } -+ - sym_build_sge(np, &data[segment], baddr, len); - cp->data_len += len; - } -@@ -456,10 +470,8 @@ - * Minimal checkings, so that we will not - * go outside our tables. + * Macros used for all firmwares. +@@ -60,11 +56,7 @@ + #define SYM_FWA_SCR sym_fw1a_scr + #define SYM_FWB_SCR sym_fw1b_scr + #define SYM_FWZ_SCR sym_fw1z_scr +-#ifdef __FreeBSD__ +-#include +-#else + #include "sym_fw1.h" +-#endif + static struct sym_fwa_ofs sym_fw1a_ofs = { + SYM_GEN_FW_A(struct SYM_FWA_SCR) + }; +@@ -88,11 +80,7 @@ + #define SYM_FWA_SCR sym_fw2a_scr + #define SYM_FWB_SCR sym_fw2b_scr + #define SYM_FWZ_SCR sym_fw2z_scr +-#ifdef __FreeBSD__ +-#include +-#else + #include "sym_fw2.h" +-#endif + static struct sym_fwa_ofs sym_fw2a_ofs = { + SYM_GEN_FW_A(struct SYM_FWA_SCR) + }; +diff -Nur linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_glue.c linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_glue.c +--- linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_glue.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_glue.c 2005-09-25 12:34:40.000000000 -0400 +@@ -563,10 +563,7 @@ + /* + * activate this job. */ -- if (sdev->id == np->myaddr || -- sdev->id >= SYM_CONF_MAX_TARGET || -- sdev->lun >= SYM_CONF_MAX_LUN) { -- sym_xpt_done2(np, cmd, CAM_DEV_NOT_THERE); -+ if (sdev->id == np->myaddr) { -+ sym_xpt_done2(np, cmd, DID_NO_CONNECT); - return 0; +- if (lp) +- sym_start_next_ccbs(np, lp, 2); +- else +- sym_put_start_queue(np, cp); ++ sym_start_next_ccbs(np, lp, 2); + return 0; + + out_abort: +@@ -981,15 +978,13 @@ + + static int sym53c8xx_slave_alloc(struct scsi_device *sdev) + { +- struct sym_hcb *np; +- struct sym_tcb *tp; ++ struct sym_hcb *np = sym_get_hcb(sdev->host); ++ struct sym_tcb *tp = &np->target[sdev->id]; ++ struct sym_lcb *lp; + + if (sdev->id >= SYM_CONF_MAX_TARGET || sdev->lun >= SYM_CONF_MAX_LUN) + return -ENXIO; + +- np = sym_get_hcb(sdev->host); +- tp = &np->target[sdev->id]; +- + /* + * Fail the device init if the device is flagged NOSCAN at BOOT in + * the NVRAM. This may speed up boot and maintain coherency with +@@ -1005,6 +1000,10 @@ + return -ENXIO; } -@@ -469,28 +481,6 @@ - tp = &np->target[sdev->id]; ++ lp = sym_alloc_lcb(np, sdev->id, sdev->lun); ++ if (!lp) ++ return -ENOMEM; ++ + tp->starget = sdev->sdev_target; + return 0; + } +@@ -1012,22 +1011,14 @@ + /* + * Linux entry point for device queue sizing. + */ +-static int sym53c8xx_slave_configure(struct scsi_device *device) ++static int sym53c8xx_slave_configure(struct scsi_device *sdev) + { +- struct sym_hcb *np = sym_get_hcb(device->host); +- struct sym_tcb *tp = &np->target[device->id]; +- struct sym_lcb *lp; ++ struct sym_hcb *np = sym_get_hcb(sdev->host); ++ struct sym_tcb *tp = &np->target[sdev->id]; ++ struct sym_lcb *lp = sym_lp(tp, sdev->lun); + int reqtags, depth_to_use; /* -- * Complete the 1st INQUIRY command with error -- * condition if the device is flagged NOSCAN -- * at BOOT in the NVRAM. This may speed up -- * the boot and maintain coherency with BIOS -- * device numbering. Clearing the flag allows -- * user to rescan skipped devices later. -- * We also return error for devices not flagged -- * for SCAN LUNS in the NVRAM since some mono-lun -- * devices behave badly when asked for some non -- * zero LUN. Btw, this is an absolute hack.:-) +- * Allocate the LCB if not yet. +- * If it fail, we may well be in the sh*t. :) - */ -- if (cmd->cmnd[0] == 0x12 || cmd->cmnd[0] == 0x0) { -- if ((tp->usrflags & SYM_SCAN_BOOT_DISABLED) || -- ((tp->usrflags & SYM_SCAN_LUNS_DISABLED) && -- sdev->lun != 0)) { -- tp->usrflags &= ~SYM_SCAN_BOOT_DISABLED; -- sym_xpt_done2(np, cmd, CAM_DEV_NOT_THERE); -- return 0; -- } -- } +- lp = sym_alloc_lcb(np, device->id, device->lun); +- if (!lp) +- return -ENOMEM; - - /* - * Select tagged/untagged. + * Get user flags. */ - lp = sym_lp(tp, sdev->lun); -@@ -511,23 +501,10 @@ - */ - static inline int sym_setup_cdb(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp) - { -- u32 cmd_ba; -- int cmd_len; -- -- /* -- * CDB is 16 bytes max. -- */ -- if (cmd->cmd_len > sizeof(cp->cdb_buf)) { -- sym_set_cam_status(cp->cmd, CAM_REQ_INVALID); -- return -1; -- } -- - memcpy(cp->cdb_buf, cmd->cmnd, cmd->cmd_len); -- cmd_ba = CCB_BA (cp, cdb_buf[0]); -- cmd_len = cmd->cmd_len; + lp->curr_flags = lp->user_flags; +@@ -1038,10 +1029,10 @@ + * Use at least 2. + * Donnot use more than our maximum. + */ +- reqtags = device_queue_depth(np, device->id, device->lun); ++ reqtags = device_queue_depth(np, sdev->id, sdev->lun); + if (reqtags > tp->usrtags) + reqtags = tp->usrtags; +- if (!device->tagged_supported) ++ if (!sdev->tagged_supported) + reqtags = 0; + #if 1 /* Avoid to locally queue commands for no good reasons */ + if (reqtags > SYM_CONF_MAX_TAG) +@@ -1050,19 +1041,30 @@ + #else + depth_to_use = (reqtags ? SYM_CONF_MAX_TAG : 2); + #endif +- scsi_adjust_queue_depth(device, +- (device->tagged_supported ? ++ scsi_adjust_queue_depth(sdev, ++ (sdev->tagged_supported ? + MSG_SIMPLE_TAG : 0), + depth_to_use); + lp->s.scdev_depth = depth_to_use; +- sym_tune_dev_queuing(tp, device->lun, reqtags); ++ sym_tune_dev_queuing(tp, sdev->lun, reqtags); -- cp->phys.cmd.addr = cpu_to_scr(cmd_ba); -- cp->phys.cmd.size = cpu_to_scr(cmd_len); -+ cp->phys.cmd.addr = CCB_BA(cp, cdb_buf[0]); -+ cp->phys.cmd.size = cpu_to_scr(cmd->cmd_len); +- if (!spi_initial_dv(device->sdev_target)) +- spi_dv_device(device); ++ if (!spi_initial_dv(sdev->sdev_target)) ++ spi_dv_device(sdev); return 0; } -@@ -554,10 +531,7 @@ - if (dir != DMA_NONE) { - cp->segments = sym_scatter(np, cp, cmd); - if (cp->segments < 0) { -- if (cp->segments == -2) -- sym_set_cam_status(cmd, CAM_RESRC_UNAVAIL); -- else -- sym_set_cam_status(cmd, CAM_REQ_TOO_BIG); -+ sym_set_cam_status(cmd, DID_ERROR); - goto out_abort; - } - } else { -@@ -855,7 +829,7 @@ - ep->to_do = to_do; - /* Complete the command with locks held as required by the driver */ - if (to_do == SYM_EH_DO_COMPLETE) -- sym_xpt_done2(np, cmd, CAM_REQ_ABORTED); -+ sym_xpt_done2(np, cmd, DID_ABORT); - /* Wait for completion with locks released, as required by kernel */ - if (to_do == SYM_EH_DO_WAIT) { -@@ -921,7 +895,7 @@ - lp->s.reqtags = reqtags; - - if (reqtags != oldtags) { -- dev_info(&tp->sdev->sdev_target->dev, -+ dev_info(&tp->starget->dev, - "tagged command queuing %s, command queue depth %d.\n", - lp->s.reqtags ? "enabled" : "disabled", - lp->started_limit); -@@ -981,22 +955,34 @@ - return DEF_DEPTH; - } - --static int sym53c8xx_slave_alloc(struct scsi_device *device) -+static int sym53c8xx_slave_alloc(struct scsi_device *sdev) - { -- struct sym_hcb *np = sym_get_hcb(device->host); -- struct sym_tcb *tp = &np->target[device->id]; -- if (!tp->sdev) -- tp->sdev = device; -+ struct sym_hcb *np; -+ struct sym_tcb *tp; - -- return 0; --} -+ if (sdev->id >= SYM_CONF_MAX_TARGET || sdev->lun >= SYM_CONF_MAX_LUN) -+ return -ENXIO; - --static void sym53c8xx_slave_destroy(struct scsi_device *device) --{ -- struct sym_hcb *np = sym_get_hcb(device->host); -- struct sym_tcb *tp = &np->target[device->id]; -- if (tp->sdev == device) -- tp->sdev = NULL; -+ np = sym_get_hcb(sdev->host); -+ tp = &np->target[sdev->id]; ++static void sym53c8xx_slave_destroy(struct scsi_device *sdev) ++{ ++ struct sym_hcb *np = sym_get_hcb(sdev->host); ++ struct sym_lcb *lp = sym_lp(&np->target[sdev->id], sdev->lun); + -+ /* -+ * Fail the device init if the device is flagged NOSCAN at BOOT in -+ * the NVRAM. This may speed up boot and maintain coherency with -+ * BIOS device numbering. Clearing the flag allows the user to -+ * rescan skipped devices later. We also return an error for -+ * devices not flagged for SCAN LUNS in the NVRAM since some single -+ * lun devices behave badly when asked for a non zero LUN. -+ */ ++ if (lp->itlq_tbl) ++ sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK * 4, "ITLQ_TBL"); ++ kfree(lp->cb_tags); ++ sym_mfree_dma(lp, sizeof(*lp), "LCB"); ++} + -+ if ((tp->usrflags & SYM_SCAN_BOOT_DISABLED) || -+ ((tp->usrflags & SYM_SCAN_LUNS_DISABLED) && sdev->lun != 0)) { -+ tp->usrflags &= ~SYM_SCAN_BOOT_DISABLED; -+ return -ENXIO; -+ } -+ -+ tp->starget = sdev->sdev_target; -+ return 0; - } - /* -@@ -1897,6 +1883,7 @@ - */ - printk("%s: resetting chip\n", sym_name(np)); - OUTB(np, nc_istat, SRST); -+ INB(np, nc_mbox1); - udelay(10); - OUTB(np, nc_istat, 0); - -@@ -1915,7 +1902,6 @@ + * Linux entry point for info() function + */ +@@ -1926,6 +1928,7 @@ .queuecommand = sym53c8xx_queue_command, .slave_alloc = sym53c8xx_slave_alloc, .slave_configure = sym53c8xx_slave_configure, -- .slave_destroy = sym53c8xx_slave_destroy, ++ .slave_destroy = sym53c8xx_slave_destroy, .eh_abort_handler = sym53c8xx_eh_abort_handler, .eh_device_reset_handler = sym53c8xx_eh_device_reset_handler, .eh_bus_reset_handler = sym53c8xx_eh_bus_reset_handler, -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_glue.h -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_glue.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_glue.h 2005-08-09 17:53:35.000000000 -0400 -@@ -142,33 +142,6 @@ - #define scr_to_cpu(dw) le32_to_cpu(dw) +diff -Nur linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_glue.h linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_glue.h +--- linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_glue.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_glue.h 2005-09-25 12:34:40.000000000 -0400 +@@ -268,6 +268,5 @@ + void sym_xpt_async_sent_bdr(struct sym_hcb *np, int target); + int sym_setup_data_and_start (struct sym_hcb *np, struct scsi_cmnd *csio, struct sym_ccb *cp); + void sym_log_bus_error(struct sym_hcb *np); +-void sym_sniff_inquiry(struct sym_hcb *np, struct scsi_cmnd *cmd, int resid); + #endif /* SYM_GLUE_H */ +diff -Nur linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_hipd.c linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_hipd.c +--- linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_hipd.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_hipd.c 2005-09-25 12:34:40.000000000 -0400 +@@ -1519,7 +1519,7 @@ /* -- * Remap some status field values. -- */ --#define CAM_REQ_CMP DID_OK --#define CAM_SEL_TIMEOUT DID_NO_CONNECT --#define CAM_CMD_TIMEOUT DID_TIME_OUT --#define CAM_REQ_ABORTED DID_ABORT --#define CAM_UNCOR_PARITY DID_PARITY --#define CAM_SCSI_BUS_RESET DID_RESET --#define CAM_REQUEUE_REQ DID_SOFT_ERROR --#define CAM_UNEXP_BUSFREE DID_ERROR --#define CAM_SCSI_BUSY DID_BUS_BUSY -- --#define CAM_DEV_NOT_THERE DID_NO_CONNECT --#define CAM_REQ_INVALID DID_ERROR --#define CAM_REQ_TOO_BIG DID_ERROR -- --#define CAM_RESRC_UNAVAIL DID_ERROR -- --/* -- * Remap data direction values. -- */ --#define CAM_DIR_NONE DMA_NONE --#define CAM_DIR_IN DMA_FROM_DEVICE --#define CAM_DIR_OUT DMA_TO_DEVICE --#define CAM_DIR_UNKNOWN DMA_BIDIRECTIONAL -- --/* - * These ones are used as return code from - * error recovery handlers under Linux. + * Insert a job into the start queue. */ -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_hipd.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_hipd.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_hipd.c 2005-08-09 17:53:35.000000000 -0400 -@@ -97,7 +97,7 @@ - static void sym_print_nego_msg(struct sym_hcb *np, int target, char *label, u_char *msg) +-void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp) ++static void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp) { - struct sym_tcb *tp = &np->target[target]; -- dev_info(&tp->sdev->sdev_target->dev, "%s: ", label); -+ dev_info(&tp->starget->dev, "%s: ", label); + u_short qidx; - sym_show_msg(msg); - printf(".\n"); -@@ -149,8 +149,10 @@ - static void sym_chip_reset (struct sym_hcb *np) - { - OUTB(np, nc_istat, SRST); -+ INB(np, nc_mbox1); - udelay(10); - OUTB(np, nc_istat, 0); -+ INB(np, nc_mbox1); - udelay(2000); /* For BUS MODE to settle */ - } +@@ -4660,30 +4660,7 @@ + goto out; + cp = sym_que_entry(qp, struct sym_ccb, link_ccbq); -@@ -216,6 +218,7 @@ - OUTB(np, nc_stest3, TE); - OUTB(np, nc_dcntl, (np->rv_dcntl & IRQM)); - OUTB(np, nc_scntl1, CRST); -+ INB(np, nc_mbox1); - udelay(200); - - if (!SYM_SETUP_SCSI_BUS_CHECK) -@@ -280,8 +283,10 @@ - if (!i) - printf("%s: the chip cannot lock the frequency\n", - sym_name(np)); -- } else -- udelay((50+10)); -+ } else { -+ INB(np, nc_mbox1); -+ udelay(50+10); -+ } - OUTB(np, nc_stest3, HSC); /* Halt the scsi clock */ - OUTB(np, nc_scntl3, scntl3); - OUTB(np, nc_stest1, (DBLEN|DBLSEL));/* Select clock multiplier */ -@@ -1445,7 +1450,7 @@ - static int sym_prepare_nego(struct sym_hcb *np, struct sym_ccb *cp, u_char *msgptr) - { - struct sym_tcb *tp = &np->target[cp->target]; -- struct scsi_target *starget = tp->sdev->sdev_target; -+ struct scsi_target *starget = tp->starget; - struct sym_trans *goal = &tp->tgoal; - int msglen = 0; - int nego; -@@ -1690,7 +1695,7 @@ - if (cam_status) - sym_set_cam_status(cmd, cam_status); - #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING -- if (sym_get_cam_status(cmd) == CAM_REQUEUE_REQ) { -+ if (sym_get_cam_status(cmd) == DID_SOFT_ERROR) { - struct sym_tcb *tp = &np->target[cp->target]; - struct sym_lcb *lp = sym_lp(tp, cp->lun); - if (lp) { -@@ -1791,12 +1796,13 @@ - /* - * Wakeup all pending jobs. - */ -- sym_flush_busy_queue(np, CAM_SCSI_BUS_RESET); -+ sym_flush_busy_queue(np, DID_RESET); +-#ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING +- /* +- * If the LCB is not yet available and the LUN +- * has been probed ok, try to allocate the LCB. +- */ +- if (!lp && sym_is_bit(tp->lun_map, ln)) { +- lp = sym_alloc_lcb(np, tn, ln); +- if (!lp) +- goto out_free; +- } +-#endif +- +- /* +- * If the LCB is not available here, then the +- * logical unit is not yet discovered. For those +- * ones only accept 1 SCSI IO per logical unit, +- * since we cannot allow disconnections. +- */ +- if (!lp) { +- if (!sym_is_bit(tp->busy0_map, ln)) +- sym_set_bit(tp->busy0_map, ln); +- else +- goto out_free; +- } else { ++ { + /* + * If we have been asked for a tagged command. + */ +@@ -4836,12 +4813,6 @@ + lp->head.resel_sa = + cpu_to_scr(SCRIPTB_BA(np, resel_bad_lun)); + } +- /* +- * Otherwise, we only accept 1 IO per LUN. +- * Clear the bit that keeps track of this IO. +- */ +- else +- sym_clr_bit(tp->busy0_map, cp->lun); /* - * Init chip. - */ - OUTB(np, nc_istat, 0x00); /* Remove Reset, abort */ -+ INB(np, nc_mbox1); - udelay(2000); /* The 895 needs time for the bus mode to settle */ - - OUTB(np, nc_scntl0, np->rv_scntl0 | 0xc0); -@@ -1905,6 +1911,7 @@ - if (np->features & (FE_ULTRA2|FE_ULTRA3)) { - OUTONW(np, nc_sien, SBMC); - if (reason == 0) { -+ INB(np, nc_mbox1); - mdelay(100); - INW(np, nc_sist); - } -@@ -2074,7 +2081,7 @@ - static void sym_setwide(struct sym_hcb *np, int target, u_char wide) + * We donnot queue more than 1 ccb per target +@@ -4993,20 +4964,7 @@ + struct sym_lcb *sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln) { - struct sym_tcb *tp = &np->target[target]; -- struct scsi_target *starget = tp->sdev->sdev_target; -+ struct scsi_target *starget = tp->starget; + struct sym_tcb *tp = &np->target[tn]; +- struct sym_lcb *lp = sym_lp(tp, ln); +- +- /* +- * Already done, just return. +- */ +- if (lp) +- return lp; +- +- /* +- * Donnot allow LUN control block +- * allocation for not probed LUNs. +- */ +- if (!sym_is_bit(tp->lun_map, ln)) +- return NULL; ++ struct sym_lcb *lp = NULL; - if (spi_width(starget) == wide) - return; -@@ -2102,7 +2109,7 @@ - u_char ofs, u_char per, u_char div, u_char fak) - { - struct sym_tcb *tp = &np->target[target]; -- struct scsi_target *starget = tp->sdev->sdev_target; -+ struct scsi_target *starget = tp->starget; - u_char wide = (tp->head.wval & EWS) ? BUS_16_BIT : BUS_8_BIT; - - sym_settrans(np, target, 0, ofs, per, wide, div, fak); -@@ -2129,7 +2136,7 @@ - u_char per, u_char wide, u_char div, u_char fak) - { - struct sym_tcb *tp = &np->target[target]; -- struct scsi_target *starget = tp->sdev->sdev_target; -+ struct scsi_target *starget = tp->starget; - - sym_settrans(np, target, opts, ofs, per, wide, div, fak); - -@@ -2944,7 +2951,7 @@ - * Dequeue from the START queue all CCBs that match - * a given target/lun/task condition (-1 means all), - * and move them from the BUSY queue to the COMP queue -- * with CAM_REQUEUE_REQ status condition. -+ * with DID_SOFT_ERROR status condition. - * This function is used during error handling/recovery. - * It is called with SCRIPTS not running. - */ -@@ -2974,7 +2981,7 @@ - if ((target == -1 || cp->target == target) && - (lun == -1 || cp->lun == lun) && - (task == -1 || cp->tag == task)) { -- sym_set_cam_status(cp->cmd, CAM_REQUEUE_REQ); -+ sym_set_cam_status(cp->cmd, DID_SOFT_ERROR); - sym_remque(&cp->link_ccbq); - sym_insque_tail(&cp->link_ccbq, &np->comp_ccbq); - } -@@ -3093,13 +3100,13 @@ - /* - * Message table indirect structure. - */ -- cp->phys.smsg.addr = cpu_to_scr(CCB_BA(cp, scsi_smsg2)); -+ cp->phys.smsg.addr = CCB_BA(cp, scsi_smsg2); - cp->phys.smsg.size = cpu_to_scr(msglen); - - /* - * sense command - */ -- cp->phys.cmd.addr = cpu_to_scr(CCB_BA(cp, sensecmd)); -+ cp->phys.cmd.addr = CCB_BA(cp, sensecmd); - cp->phys.cmd.size = cpu_to_scr(6); - - /* -@@ -3116,7 +3123,7 @@ - * sense data - */ - memset(cp->sns_bbuf, 0, SYM_SNS_BBUF_LEN); -- cp->phys.sense.addr = cpu_to_scr(CCB_BA(cp, sns_bbuf)); -+ cp->phys.sense.addr = CCB_BA(cp, sns_bbuf); - cp->phys.sense.size = cpu_to_scr(SYM_SNS_BBUF_LEN); - - /* -@@ -3198,7 +3205,7 @@ - sym_insque_tail(&cp->link_ccbq, &np->comp_ccbq); - - /* Preserve the software timeout condition */ -- if (sym_get_cam_status(cmd) != CAM_CMD_TIMEOUT) -+ if (sym_get_cam_status(cmd) != DID_TIME_OUT) - sym_set_cam_status(cmd, cam_status); - ++i; - #if 0 -@@ -3366,7 +3373,7 @@ - * Make sure at least our IO to abort has been dequeued. - */ - #ifndef SYM_OPT_HANDLE_DEVICE_QUEUEING -- assert(i && sym_get_cam_status(cp->cmd) == CAM_REQUEUE_REQ); -+ assert(i && sym_get_cam_status(cp->cmd) == DID_SOFT_ERROR); - #else - sym_remque(&cp->link_ccbq); - sym_insque_tail(&cp->link_ccbq, &np->comp_ccbq); -@@ -3375,9 +3382,9 @@ - * Keep track in cam status of the reason of the abort. - */ - if (cp->to_abort == 2) -- sym_set_cam_status(cp->cmd, CAM_CMD_TIMEOUT); -+ sym_set_cam_status(cp->cmd, DID_TIME_OUT); - else -- sym_set_cam_status(cp->cmd, CAM_REQ_ABORTED); -+ sym_set_cam_status(cp->cmd, DID_ABORT); - - /* - * Complete with error everything that we have dequeued. -@@ -3491,7 +3498,7 @@ - * conditions not due to timeout. - */ - if (cp->to_abort == 2) -- sym_set_cam_status(cp->cmd, CAM_CMD_TIMEOUT); -+ sym_set_cam_status(cp->cmd, DID_TIME_OUT); - cp->to_abort = 0; /* We donnot expect to fail here */ - break; - -@@ -3502,7 +3509,7 @@ - case SIR_ABORT_SENT: - target = INB(np, nc_sdid) & 0xf; - tp = &np->target[target]; -- starget = tp->sdev->sdev_target; -+ starget = tp->starget; - - /* - ** If we didn't abort anything, leave here. -@@ -3551,7 +3558,7 @@ - */ - i = (INL(np, nc_scratcha) - np->squeue_ba) / 4; - sym_dequeue_from_squeue(np, i, target, lun, -1); -- sym_clear_tasks(np, CAM_REQ_ABORTED, target, lun, task); -+ sym_clear_tasks(np, DID_ABORT, target, lun, task); - sym_flush_comp_queue(np, 0); - - /* -@@ -3566,7 +3573,7 @@ - * Print to the log the message we intend to send. - */ - if (num == SIR_TARGET_SELECTED) { -- dev_info(&tp->sdev->sdev_target->dev, "control msgout:"); -+ dev_info(&tp->starget->dev, "control msgout:"); - sym_printl_hex(np->abrt_msg, np->abrt_tbl.size); - np->abrt_tbl.size = cpu_to_scr(np->abrt_tbl.size); - } -@@ -3877,6 +3884,8 @@ - resid += (tmp & 0xffffff); - } - -+ resid -= cp->odd_byte_adjustment; + /* + * Initialize the target control block if not yet. +@@ -5078,13 +5036,7 @@ + lp->started_max = SYM_CONF_MAX_TASK; + lp->started_limit = SYM_CONF_MAX_TASK; + #endif +- /* +- * If we are busy, count the IO. +- */ +- if (sym_is_bit(tp->busy0_map, ln)) { +- lp->busy_itl = 1; +- sym_clr_bit(tp->busy0_map, ln); +- } + - /* - * Hopefully, the result is not too wrong. - */ -@@ -4758,10 +4767,8 @@ - } + fail: + return lp; + } +@@ -5099,12 +5051,6 @@ + int i; - #endif -- /* -- * Remember all informations needed to free this CCB. + /* +- * If LCB not available, try to allocate it. - */ - cp->to_abort = 0; -+ cp->odd_byte_adjustment = 0; - cp->tag = tag; - cp->order = tag_order; - cp->target = tn; -@@ -5104,7 +5111,7 @@ - lp->itlq_tbl = sym_calloc_dma(SYM_CONF_MAX_TASK*4, "ITLQ_TBL"); - if (!lp->itlq_tbl) - goto fail; -- lp->cb_tags = kcalloc(SYM_CONF_MAX_TASK, 1, GFP_KERNEL); -+ lp->cb_tags = kcalloc(SYM_CONF_MAX_TASK, 1, GFP_ATOMIC); - if (!lp->cb_tags) { - sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK*4, "ITLQ_TBL"); - lp->itlq_tbl = NULL; -@@ -5243,7 +5250,7 @@ - /* - * message +- if (!lp && !(lp = sym_alloc_lcb(np, tn, ln))) +- goto fail; +- +- /* + * Allocate the task table and and the tag allocation + * circular buffer. We want both or none. */ -- cp->phys.smsg.addr = cpu_to_scr(CCB_BA(cp, scsi_smsg)); -+ cp->phys.smsg.addr = CCB_BA(cp, scsi_smsg); - cp->phys.smsg.size = cpu_to_scr(msglen); - +@@ -5477,8 +5423,7 @@ /* -@@ -5343,7 +5350,7 @@ + * Donnot start more than 1 command after an error. + */ +- if (lp) +- sym_start_next_ccbs(np, lp, 1); ++ sym_start_next_ccbs(np, lp, 1); + #endif } - /* -- * Complete execution of a SCSI command with extented -+ * Complete execution of a SCSI command with extended - * error, SCSI status error, or having been auto-sensed. - * - * The SCRIPTS processor is not running there, so we -@@ -5441,7 +5448,7 @@ - /* - * Let's requeue it to device. +@@ -5517,12 +5462,6 @@ + lp = sym_lp(tp, cp->lun); + + /* +- * Assume device discovered on first success. +- */ +- if (!lp) +- sym_set_bit(tp->lun_map, cp->lun); +- +- /* + * If all data have been transferred, given than no + * extended error did occur, there is no residual. + */ +@@ -5547,15 +5486,6 @@ + */ + sym_set_cam_result_ok(cp, cmd, resid); + +-#ifdef SYM_OPT_SNIFF_INQUIRY +- /* +- * On standard INQUIRY response (EVPD and CmDt +- * not set), sniff out device capabilities. +- */ +- if (cp->cdb_buf[0] == INQUIRY && !(cp->cdb_buf[1] & 0x3)) +- sym_sniff_inquiry(np, cmd, resid); +-#endif +- + #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING + /* + * If max number of started ccbs had been reduced, +@@ -5583,7 +5513,7 @@ + /* + * Requeue a couple of awaiting scsi commands. + */ +- if (lp && !sym_que_empty(&lp->waiting_ccbq)) ++ if (!sym_que_empty(&lp->waiting_ccbq)) + sym_start_next_ccbs(np, lp, 2); + #endif + /* +@@ -5826,8 +5756,7 @@ + SYM_QUEHEAD *qp; + struct sym_ccb *cp; + struct sym_tcb *tp; +- struct sym_lcb *lp; +- int target, lun; ++ int target; + + if (np->scriptz0) + sym_mfree_dma(np->scriptz0, np->scriptz_sz, "SCRIPTZ0"); +@@ -5853,16 +5782,6 @@ + + for (target = 0; target < SYM_CONF_MAX_TARGET ; target++) { + tp = &np->target[target]; +- for (lun = 0 ; lun < SYM_CONF_MAX_LUN ; lun++) { +- lp = sym_lp(tp, lun); +- if (!lp) +- continue; +- if (lp->itlq_tbl) +- sym_mfree_dma(lp->itlq_tbl, SYM_CONF_MAX_TASK*4, +- "ITLQ_TBL"); +- kfree(lp->cb_tags); +- sym_mfree_dma(lp, sizeof(*lp), "LCB"); +- } + #if SYM_CONF_MAX_LUN > 1 + kfree(tp->lunmp); + #endif +diff -Nur linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_hipd.h linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_hipd.h +--- linux-2.6.13.org/drivers/scsi/sym53c8xx_2/sym_hipd.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/sym53c8xx_2/sym_hipd.h 2005-09-25 12:34:40.000000000 -0400 +@@ -414,19 +414,6 @@ + struct sym_lcb **lunmp; /* Other LCBs [1..MAX_LUN] */ + #endif + +- /* +- * Bitmap that tells about LUNs that succeeded at least +- * 1 IO and therefore assumed to be a real device. +- * Avoid useless allocation of the LCB structure. +- */ +- u32 lun_map[(SYM_CONF_MAX_LUN+31)/32]; +- +- /* +- * Bitmap that tells about LUNs that haven't yet an LCB +- * allocated (not discovered or LCB allocation failed). +- */ +- u32 busy0_map[(SYM_CONF_MAX_LUN+31)/32]; +- + #ifdef SYM_HAVE_STCB + /* + * O/S specific data structure. +@@ -1075,7 +1062,6 @@ + void sym_print_xerr(struct scsi_cmnd *cmd, int x_status); + int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int); + struct sym_chip *sym_lookup_chip_table(u_short device_id, u_char revision); +-void sym_put_start_queue(struct sym_hcb *np, struct sym_ccb *cp); + #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING + void sym_start_next_ccbs(struct sym_hcb *np, struct sym_lcb *lp, int maxn); + #endif +diff -Nur linux-2.6.13.org/drivers/scsi/zalon.c linux-2.6.13/drivers/scsi/zalon.c +--- linux-2.6.13.org/drivers/scsi/zalon.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/scsi/zalon.c 2005-09-25 12:34:40.000000000 -0400 +@@ -88,7 +88,7 @@ + struct gsc_irq gsc_irq; + u32 zalon_vers; + int error = -ENODEV; +- void __iomem *zalon = ioremap(dev->hpa, 4096); ++ void __iomem *zalon = ioremap(dev->hpa.start, 4096); + void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET; + static int unit = 0; + struct Scsi_Host *host; +@@ -127,7 +127,7 @@ + device.chip = zalon720_chip; + device.host_id = 7; + device.dev = &dev->dev; +- device.slot.base = dev->hpa + GSC_SCSI_ZALON_OFFSET; ++ device.slot.base = dev->hpa.start + GSC_SCSI_ZALON_OFFSET; + device.slot.base_v = io_port; + device.slot.irq = dev->irq; + device.differential = 2; +diff -Nur linux-2.6.13.org/drivers/serial/8250_gsc.c linux-2.6.13/drivers/serial/8250_gsc.c +--- linux-2.6.13.org/drivers/serial/8250_gsc.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/serial/8250_gsc.c 2005-09-25 12:34:40.000000000 -0400 +@@ -29,7 +29,6 @@ + static int __init + serial_init_chip(struct parisc_device *dev) + { +- static int serial_line_nr; + struct uart_port port; + unsigned long address; + int err; +@@ -42,12 +41,13 @@ */ -- sym_set_cam_status(cmd, CAM_REQUEUE_REQ); -+ sym_set_cam_status(cmd, DID_SOFT_ERROR); - goto finish; + if (parisc_parent(dev)->id.hw_type != HPHW_IOA) { + printk(KERN_INFO "Serial: device 0x%lx not configured.\n" +- "Enable support for Wax, Lasi, Asp or Dino.\n", dev->hpa); ++ "Enable support for Wax, Lasi, Asp or Dino.\n", ++ dev->hpa.start); + } + return -ENODEV; } - weirdness: -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_hipd.h -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_hipd.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_hipd.h 2005-08-09 17:53:35.000000000 -0400 -@@ -444,7 +444,7 @@ - */ - u_char usrflags; - u_short usrtags; -- struct scsi_device *sdev; -+ struct scsi_target *starget; - }; - - /* -@@ -754,10 +754,8 @@ - int segments; /* Number of SG segments */ - - u8 order; /* Tag type (if tagged command) */ -+ unsigned char odd_byte_adjustment; /* odd-sized req on wide bus */ - -- /* -- * Miscellaneous status'. -- */ - u_char nego_status; /* Negotiation status */ - u_char xerr_status; /* Extended error flags */ - u32 extra_bytes; /* Extraneous bytes transferred */ -@@ -809,7 +807,7 @@ - #endif - }; - --#define CCB_BA(cp,lbl) (cp->ccb_ba + offsetof(struct sym_ccb, lbl)) -+#define CCB_BA(cp,lbl) cpu_to_scr(cp->ccb_ba + offsetof(struct sym_ccb, lbl)) - - #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN - #define sym_goalp(cp) ((cp->host_flags & HF_DATA_IN) ? cp->goalp : cp->wgoalp) -@@ -1138,33 +1136,33 @@ - * No segments means no data. - */ - if (!cp->segments) -- dir = CAM_DIR_NONE; -+ dir = DMA_NONE; - - /* - * Set the data pointer. - */ - switch(dir) { - #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN -- case CAM_DIR_UNKNOWN: -+ case DMA_BIDIRECTIONAL: - #endif -- case CAM_DIR_OUT: -+ case DMA_TO_DEVICE: - goalp = SCRIPTA_BA(np, data_out2) + 8; - lastp = goalp - 8 - (cp->segments * (2*4)); - #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN - cp->wgoalp = cpu_to_scr(goalp); -- if (dir != CAM_DIR_UNKNOWN) -+ if (dir != DMA_BIDIRECTIONAL) - break; - cp->phys.head.wlastp = cpu_to_scr(lastp); - /* fall through */ - #else - break; - #endif -- case CAM_DIR_IN: -+ case DMA_FROM_DEVICE: - cp->host_flags |= HF_DATA_IN; - goalp = SCRIPTA_BA(np, data_in2) + 8; - lastp = goalp - 8 - (cp->segments * (2*4)); - break; -- case CAM_DIR_NONE: -+ case DMA_NONE: - default: - #ifdef SYM_OPT_HANDLE_DIR_UNKNOWN - cp->host_flags |= HF_DATA_IN; -@@ -1185,7 +1183,7 @@ - /* - * If direction is unknown, start at data_io. - */ -- if (dir == CAM_DIR_UNKNOWN) -+ if (dir == DMA_BIDIRECTIONAL) - cp->phys.head.savep = cpu_to_scr(SCRIPTB_BA(np, data_io)); - #endif - } -Index: linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_nvram.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/scsi/sym53c8xx_2/sym_nvram.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/scsi/sym53c8xx_2/sym_nvram.c 2005-08-09 17:53:35.000000000 -0400 -@@ -270,6 +270,7 @@ +- address = dev->hpa; ++ address = dev->hpa.start; + if (dev->id.sversion != 0x8d) { + address += 0x800; } - OUTB(np, nc_gpreg, *gpreg); -+ INB(np, nc_mbox1); - udelay(5); - } - -@@ -547,6 +548,7 @@ - static void T93C46_Clk(struct sym_device *np, u_char *gpreg) - { - OUTB(np, nc_gpreg, *gpreg | 0x04); -+ INB(np, nc_mbox1); - udelay(2); - OUTB(np, nc_gpreg, *gpreg); - } -@@ -574,6 +576,7 @@ - *gpreg |= 0x10; - - OUTB(np, nc_gpreg, *gpreg); -+ INB(np, nc_mbox1); - udelay(2); - - T93C46_Clk(np, gpreg); -@@ -586,6 +589,7 @@ - { - *gpreg &= 0xef; - OUTB(np, nc_gpreg, *gpreg); -+ INB(np, nc_mbox1); - udelay(2); - - T93C46_Clk(np, gpreg); -@@ -733,7 +737,8 @@ - return SYM_PARISC_PDC; - } - #else --static int sym_read_parisc_pdc(struct sym_device *np, struct pdc_initiator *x) -+static inline int sym_read_parisc_pdc(struct sym_device *np, -+ struct pdc_initiator *x) - { - return 0; - } -Index: linux-2.6-2.6.12/drivers/serial/mux.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/serial/mux.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/serial/mux.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/serial/mux.c linux-2.6.13/drivers/serial/mux.c +--- linux-2.6.13.org/drivers/serial/mux.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/serial/mux.c 2005-09-25 12:34:40.000000000 -0400 @@ -27,6 +27,7 @@ #include /* for udelay */ #include @@ -5532,7 +7963,22 @@ Index: linux-2.6-2.6.12/drivers/serial/mux.c #include #ifdef CONFIG_MAGIC_SYSRQ -@@ -475,7 +476,7 @@ +@@ -446,7 +447,7 @@ + unsigned long bytecnt; + struct uart_port *port; + +- status = pdc_iodc_read(&bytecnt, dev->hpa, 0, iodc_data, 32); ++ status = pdc_iodc_read(&bytecnt, dev->hpa.start, 0, iodc_data, 32); + if(status != PDC_OK) { + printk(KERN_ERR "Serial mux: Unable to read IODC.\n"); + return 1; +@@ -471,16 +472,18 @@ + for(i = 0; i < ports; ++i, ++port_cnt) { + port = &mux_ports[port_cnt]; + port->iobase = 0; +- port->mapbase = dev->hpa + MUX_OFFSET + (i * MUX_LINE_OFFSET); ++ port->mapbase = dev->hpa.start + MUX_OFFSET + ++ (i * MUX_LINE_OFFSET); port->membase = ioremap(port->mapbase, MUX_LINE_OFFSET); port->iotype = SERIAL_IO_MEM; port->type = PORT_MUX; @@ -5541,11 +7987,25 @@ Index: linux-2.6-2.6.12/drivers/serial/mux.c port->uartclk = 0; port->fifosize = MUX_FIFO_SIZE; port->ops = &mux_pops; -Index: linux-2.6-2.6.12/drivers/serial/serial_core.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/serial/serial_core.c 2005-08-09 17:50:50.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/serial/serial_core.c 2005-08-09 17:53:35.000000000 -0400 -@@ -1930,7 +1930,14 @@ + port->flags = UPF_BOOT_AUTOCONF; + port->line = port_cnt; ++ spin_lock_init(&port->lock); + status = uart_add_one_port(&mux_driver, port); + BUG_ON(status); + } +@@ -499,7 +502,7 @@ + MODULE_DEVICE_TABLE(parisc, mux_tbl); + + static struct parisc_driver serial_mux_driver = { +- .name = "Serial MUX", ++ .name = "serial_mux", + .id_table = mux_tbl, + .probe = mux_probe, + }; +diff -Nur linux-2.6.13.org/drivers/serial/serial_core.c linux-2.6.13/drivers/serial/serial_core.c +--- linux-2.6.13.org/drivers/serial/serial_core.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/serial/serial_core.c 2005-09-25 12:34:40.000000000 -0400 +@@ -1961,7 +1961,14 @@ printk("MMIO 0x%lx", port->mapbase); break; } @@ -5561,10 +8021,9 @@ Index: linux-2.6-2.6.12/drivers/serial/serial_core.c } static void -Index: linux-2.6-2.6.12/drivers/usb/input/hid-core.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/usb/input/hid-core.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/usb/input/hid-core.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/usb/input/hid-core.c linux-2.6.13/drivers/usb/input/hid-core.c +--- linux-2.6.13.org/drivers/usb/input/hid-core.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/usb/input/hid-core.c 2005-09-25 12:34:40.000000000 -0400 @@ -759,21 +759,31 @@ } @@ -5576,7 +8035,7 @@ Index: linux-2.6-2.6.12/drivers/usb/input/hid-core.c static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n) { - report += (offset >> 5) << 2; offset &= 31; -- return (le64_to_cpu(get_unaligned((__le64*)report)) >> offset) & ((1 << n) - 1); +- return (le64_to_cpu(get_unaligned((__le64*)report)) >> offset) & ((1ULL << n) - 1); + u32 x; + + report += offset >> 3; /* adjust byte index */ @@ -5604,63 +8063,9 @@ Index: linux-2.6-2.6.12/drivers/usb/input/hid-core.c } /* -Index: linux-2.6-2.6.12/drivers/usb/storage/transport.c -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/usb/storage/transport.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/usb/storage/transport.c 2005-08-09 17:53:35.000000000 -0400 -@@ -266,8 +266,9 @@ - NULL, 0, 3*HZ); - - /* reset the endpoint toggle */ -- usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), -- usb_pipeout(pipe), 0); -+ if (result >= 0) -+ usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), -+ usb_pipeout(pipe), 0); - - US_DEBUGP("%s: result = %d\n", __FUNCTION__, result); - return result; -@@ -1124,7 +1125,7 @@ - * It's handy that every transport mechanism uses the control endpoint for - * resets. - * -- * Basically, we send a reset with a 20-second timeout, so we don't get -+ * Basically, we send a reset with a 5-second timeout, so we don't get - * jammed attempting to do the reset. - */ - static int usb_stor_reset_common(struct us_data *us, -@@ -1145,13 +1146,9 @@ - clear_bit(US_FLIDX_ABORTING, &us->flags); - scsi_unlock(us_to_host(us)); - -- /* A 20-second timeout may seem rather long, but a LaCie -- * StudioDrive USB2 device takes 16+ seconds to get going -- * following a powerup or USB attach event. -- */ - result = usb_stor_control_msg(us, us->send_ctrl_pipe, - request, requesttype, value, index, data, size, -- 20*HZ); -+ 5*HZ); - if (result < 0) { - US_DEBUGP("Soft reset failed: %d\n", result); - goto Done; -@@ -1173,8 +1170,10 @@ - US_DEBUGP("Soft reset: clearing bulk-out endpoint halt\n"); - result2 = usb_stor_clear_halt(us, us->send_bulk_pipe); - -- /* return a result code based on the result of the control message */ -- if (result < 0 || result2 < 0) { -+ /* return a result code based on the result of the clear-halts */ -+ if (result >= 0) -+ result = result2; -+ if (result < 0) { - US_DEBUGP("Soft reset failed\n"); - goto Done; - } -Index: linux-2.6-2.6.12/drivers/video/console/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/drivers/video/console/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/drivers/video/console/Kconfig 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/video/console/Kconfig linux-2.6.13/drivers/video/console/Kconfig +--- linux-2.6.13.org/drivers/video/console/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/video/console/Kconfig 2005-09-25 12:34:40.000000000 -0400 @@ -110,7 +110,7 @@ config FONTS @@ -5697,10 +8102,250 @@ Index: linux-2.6-2.6.12/drivers/video/console/Kconfig default y if !SPARC32 && !SPARC64 && !FONTS && MAC help Small console font with Macintosh-style high-half glyphs. Some Mac -Index: linux-2.6-2.6.12/fs/ioctl.c -=================================================================== ---- linux-2.6-2.6.12.orig/fs/ioctl.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/fs/ioctl.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/drivers/video/console/sticore.c linux-2.6.13/drivers/video/console/sticore.c +--- linux-2.6.13.org/drivers/video/console/sticore.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/drivers/video/console/sticore.c 2005-09-25 12:34:40.000000000 -0400 +@@ -511,12 +511,12 @@ + struct sti_cooked_font *cooked_font; + + if (!fbfont_name || !strlen(fbfont_name)) +- return NULL; ++ return NULL; + fbfont = find_font(fbfont_name); + if (!fbfont) +- fbfont = get_default_font(1024,768); ++ fbfont = get_default_font(1024,768); + if (!fbfont) +- return NULL; ++ return NULL; + + DPRINTK((KERN_DEBUG "selected %dx%d fb-font %s\n", + fbfont->width, fbfont->height, fbfont->name)); +@@ -527,7 +527,7 @@ + + nf = kmalloc(size, GFP_KERNEL); + if (!nf) +- return NULL; ++ return NULL; + memset(nf, 0, size); + + nf->first_char = 0; +@@ -546,8 +546,8 @@ + + cooked_font = kmalloc(sizeof(*cooked_font), GFP_KERNEL); + if (!cooked_font) { +- kfree(nf); +- return NULL; ++ kfree(nf); ++ return NULL; + } + + cooked_font->raw = nf; +@@ -595,7 +595,7 @@ + static void __init + sti_dump_rom(struct sti_rom *rom) + { +- printk(KERN_INFO " id %04x-%04x, conforms to spec rev. %d.%02x\n", ++ printk(KERN_INFO " id %04x-%04x, conforms to spec rev. %d.%02x\n", + rom->graphics_id[0], + rom->graphics_id[1], + rom->revno[0] >> 4, +@@ -651,15 +651,16 @@ + struct sti_cooked_font *font; + int i = 0; + +- for(font = rom->font_start; font; font = font->next_font, i++) { +- if((font->raw->width == width) && (font->raw->height == height)) ++ for (font = rom->font_start; font; font = font->next_font, i++) { ++ if ((font->raw->width == width) && ++ (font->raw->height == height)) + return i; + } + return 0; + } + +-#define BMODE_RELOCATE(offset) offset = (offset) / 4; +-#define BMODE_LAST_ADDR_OFFS 0x50 ++#define BMODE_RELOCATE(offset) offset = (offset) / 4; ++#define BMODE_LAST_ADDR_OFFS 0x50 + + static void * __init + sti_bmode_font_raw(struct sti_cooked_font *f) +@@ -700,35 +701,35 @@ + { + struct sti_rom *raw; + u32 size; +- struct sti_rom_font *raw_font, *font_start; +- ++ struct sti_rom_font *raw_font, *font_start; ++ + sti_bmode_rom_copy(address + BMODE_LAST_ADDR_OFFS, sizeof(size), &size); +- +- size = (size+3) / 4; ++ ++ size = (size+3) / 4; + raw = kmalloc(size, GFP_KERNEL); + if (raw) { +- sti_bmode_rom_copy(address, size, raw); +- memmove (&raw->res004, &raw->type[0], 0x3c); +- raw->type[3] = raw->res004; +- +- BMODE_RELOCATE (raw->region_list); +- BMODE_RELOCATE (raw->font_start); +- +- BMODE_RELOCATE (raw->init_graph); +- BMODE_RELOCATE (raw->state_mgmt); +- BMODE_RELOCATE (raw->font_unpmv); +- BMODE_RELOCATE (raw->block_move); +- BMODE_RELOCATE (raw->inq_conf); ++ sti_bmode_rom_copy(address, size, raw); ++ memmove (&raw->res004, &raw->type[0], 0x3c); ++ raw->type[3] = raw->res004; ++ ++ BMODE_RELOCATE (raw->region_list); ++ BMODE_RELOCATE (raw->font_start); ++ ++ BMODE_RELOCATE (raw->init_graph); ++ BMODE_RELOCATE (raw->state_mgmt); ++ BMODE_RELOCATE (raw->font_unpmv); ++ BMODE_RELOCATE (raw->block_move); ++ BMODE_RELOCATE (raw->inq_conf); + +- raw_font = ((void *)raw) + raw->font_start; +- font_start = raw_font; ++ raw_font = ((void *)raw) + raw->font_start; ++ font_start = raw_font; + +- while (raw_font->next_font) { +- BMODE_RELOCATE (raw_font->next_font); +- raw_font = ((void *)font_start) + raw_font->next_font; +- } ++ while (raw_font->next_font) { ++ BMODE_RELOCATE (raw_font->next_font); ++ raw_font = ((void *)font_start) + raw_font->next_font; ++ } + } +- return raw; ++ return raw; + } + + struct sti_rom * __init +@@ -736,15 +737,15 @@ + { + struct sti_rom *raw; + unsigned long size; +- ++ + /* read the ROM size directly from the struct in ROM */ + size = gsc_readl(address + offsetof(struct sti_rom,last_addr)); + + raw = kmalloc(size, GFP_KERNEL); +- if(raw) +- sti_rom_copy(address, size, raw); ++ if (raw) ++ sti_rom_copy(address, size, raw); + +- return raw; ++ return raw; + } + + int __init +@@ -757,14 +758,14 @@ + if (!cooked) + goto out_err; + +- if (wordmode) +- raw = sti_get_wmode_rom (address); +- else +- raw = sti_get_bmode_rom (address); +- +- if (!raw) +- goto out_err; +- ++ if (wordmode) ++ raw = sti_get_wmode_rom (address); ++ else ++ raw = sti_get_bmode_rom (address); ++ ++ if (!raw) ++ goto out_err; ++ + if (!sti_cook_fonts(cooked, raw)) { + printk(KERN_ERR "No font found for STI at %08lx\n", address); + goto out_err; +@@ -787,7 +788,7 @@ + sti->font_width = sti->font->raw->width; + sti->font_height = sti->font->raw->height; + if (!wordmode) +- sti->font->raw = sti_bmode_font_raw(sti->font); ++ sti->font->raw = sti_bmode_font_raw(sti->font); + + sti->sti_mem_request = raw->sti_mem_req; + sti->graphics_id[0] = raw->graphics_id[0]; +@@ -811,16 +812,16 @@ + u32 sig; + + if (num_sti_roms >= MAX_STI_ROMS) { +- printk(KERN_WARNING "maximum number of STI ROMS reached !\n"); +- return NULL; ++ printk(KERN_WARNING "maximum number of STI ROMS reached !\n"); ++ return NULL; + } + + sti = kmalloc(sizeof(*sti), GFP_KERNEL); + if (!sti) { +- printk(KERN_ERR "Not enough memory !\n"); +- return NULL; ++ printk(KERN_ERR "Not enough memory !\n"); ++ return NULL; + } +- ++ + memset(sti, 0, sizeof(*sti)); + spin_lock_init(&sti->lock); + +@@ -932,28 +933,21 @@ + */ + static int __init sticore_pa_init(struct parisc_device *dev) + { +- unsigned long rom = 0; + char pa_path[21]; + struct sti_struct *sti = NULL; +- +- if(dev->num_addrs) { +- rom = dev->addr[0]; +- } +- if (!rom) { +- rom = dev->hpa; +- DPRINTK((KERN_DEBUG "Trying STI ROM at %08lx, hpa at %08lx\n", rom, dev->hpa)); +- sti = sti_try_rom_generic(rom, dev->hpa, NULL); +- rom = PAGE0->proc_sti; +- } +- if (!sti) { +- DPRINTK((KERN_DEBUG "Trying STI ROM at %08lx, hpa at %08lx\n", rom, dev->hpa)); +- sti = sti_try_rom_generic(rom, dev->hpa, NULL); +- } ++ int hpa = dev->hpa.start; ++ ++ if (dev->num_addrs && dev->addr[0]) ++ sti = sti_try_rom_generic(dev->addr[0], hpa, NULL); ++ if (!sti) ++ sti = sti_try_rom_generic(hpa, hpa, NULL); ++ if (!sti) ++ sti = sti_try_rom_generic(PAGE0->proc_sti, hpa, NULL); + if (!sti) + return 1; +- ++ + print_pa_hwpath(dev, pa_path); +- sticore_check_for_default_sti (sti, pa_path); ++ sticore_check_for_default_sti(sti, pa_path); + return 0; + } + +diff -Nur linux-2.6.13.org/fs/ioctl.c linux-2.6.13/fs/ioctl.c +--- linux-2.6.13.org/fs/ioctl.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/fs/ioctl.c 2005-09-25 12:34:40.000000000 -0400 @@ -71,7 +71,11 @@ return -EBADF; return put_user(inode->i_sb->s_blocksize, p); @@ -5714,10 +8359,9 @@ Index: linux-2.6-2.6.12/fs/ioctl.c } return do_ioctl(filp, cmd, arg); -Index: linux-2.6-2.6.12/include/asm-generic/compat_signal.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/include/asm-generic/compat_signal.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-generic/compat_signal.h linux-2.6.13/include/asm-generic/compat_signal.h +--- linux-2.6.13.org/include/asm-generic/compat_signal.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/include/asm-generic/compat_signal.h 2005-09-25 12:34:40.000000000 -0400 @@ -0,0 +1,25 @@ +#ifndef _ASM_GENERIC_COMPAT_SIGNAL_H +#define _ASM_GENERIC_COMPAT_SIGNAL_H @@ -5744,10 +8388,9 @@ Index: linux-2.6-2.6.12/include/asm-generic/compat_signal.h + +#endif /* !__ASSEMBLY__ */ +#endif /* !_ASM_GENERIC_COMPAT_SIGNAL_H */ -Index: linux-2.6-2.6.12/include/asm-ia64/compat.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-ia64/compat.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-ia64/compat.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-ia64/compat.h linux-2.6.13/include/asm-ia64/compat.h +--- linux-2.6.13.org/include/asm-ia64/compat.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-ia64/compat.h 2005-09-25 12:34:40.000000000 -0400 @@ -15,6 +15,9 @@ typedef s32 compat_pid_t; typedef u16 compat_uid_t; @@ -5758,19 +8401,100 @@ Index: linux-2.6-2.6.12/include/asm-ia64/compat.h typedef u32 compat_uid32_t; typedef u32 compat_gid32_t; typedef u16 compat_mode_t; -@@ -27,6 +30,7 @@ - typedef s32 compat_daddr_t; - typedef u32 compat_caddr_t; - typedef __kernel_fsid_t compat_fsid_t; -+typedef s32 compat_timer_t; +diff -Nur linux-2.6.13.org/include/asm-parisc/assembly.h linux-2.6.13/include/asm-parisc/assembly.h +--- linux-2.6.13.org/include/asm-parisc/assembly.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/assembly.h 2005-09-25 12:34:40.000000000 -0400 +@@ -21,6 +21,7 @@ + #ifndef _PARISC_ASSEMBLY_H + #define _PARISC_ASSEMBLY_H - typedef s32 compat_int_t; - typedef s32 compat_long_t; -Index: linux-2.6-2.6.12/include/asm-parisc/assembly.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/assembly.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/assembly.h 2005-08-09 17:53:35.000000000 -0400 -@@ -450,5 +450,30 @@ ++#define CALLEE_FLOAT_FRAME_SIZE 80 + #ifdef __LP64__ + #define LDREG ldd + #define STREG std +@@ -30,7 +31,7 @@ + #define SHRREG shrd + #define RP_OFFSET 16 + #define FRAME_SIZE 128 +-#define CALLEE_SAVE_FRAME_SIZE 144 ++#define CALLEE_REG_FRAME_SIZE 144 + #else + #define LDREG ldw + #define STREG stw +@@ -40,8 +41,9 @@ + #define SHRREG shr + #define RP_OFFSET 20 + #define FRAME_SIZE 64 +-#define CALLEE_SAVE_FRAME_SIZE 128 ++#define CALLEE_REG_FRAME_SIZE 128 + #endif ++#define CALLEE_SAVE_FRAME_SIZE (CALLEE_REG_FRAME_SIZE + CALLEE_FLOAT_FRAME_SIZE) + + #ifdef CONFIG_PA20 + #define BL b,l +@@ -300,9 +302,35 @@ + fldd,mb -8(\regs), %fr0 + .endm + ++ .macro callee_save_float ++ fstd,ma %fr12, 8(%r30) ++ fstd,ma %fr13, 8(%r30) ++ fstd,ma %fr14, 8(%r30) ++ fstd,ma %fr15, 8(%r30) ++ fstd,ma %fr16, 8(%r30) ++ fstd,ma %fr17, 8(%r30) ++ fstd,ma %fr18, 8(%r30) ++ fstd,ma %fr19, 8(%r30) ++ fstd,ma %fr20, 8(%r30) ++ fstd,ma %fr21, 8(%r30) ++ .endm ++ ++ .macro callee_rest_float ++ fldd,mb -8(%r30), %fr21 ++ fldd,mb -8(%r30), %fr20 ++ fldd,mb -8(%r30), %fr19 ++ fldd,mb -8(%r30), %fr18 ++ fldd,mb -8(%r30), %fr17 ++ fldd,mb -8(%r30), %fr16 ++ fldd,mb -8(%r30), %fr15 ++ fldd,mb -8(%r30), %fr14 ++ fldd,mb -8(%r30), %fr13 ++ fldd,mb -8(%r30), %fr12 ++ .endm ++ + #ifdef __LP64__ + .macro callee_save +- std,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30) ++ std,ma %r3, CALLEE_REG_FRAME_SIZE(%r30) + mfctl %cr27, %r3 + std %r4, -136(%r30) + std %r5, -128(%r30) +@@ -340,13 +368,13 @@ + ldd -128(%r30), %r5 + ldd -136(%r30), %r4 + mtctl %r3, %cr27 +- ldd,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3 ++ ldd,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3 + .endm + + #else /* ! __LP64__ */ + + .macro callee_save +- stw,ma %r3, CALLEE_SAVE_FRAME_SIZE(%r30) ++ stw,ma %r3, CALLEE_REG_FRAME_SIZE(%r30) + mfctl %cr27, %r3 + stw %r4, -124(%r30) + stw %r5, -120(%r30) +@@ -384,7 +412,7 @@ + ldw -120(%r30), %r5 + ldw -124(%r30), %r4 + mtctl %r3, %cr27 +- ldw,mb -CALLEE_SAVE_FRAME_SIZE(%r30), %r3 ++ ldw,mb -CALLEE_REG_FRAME_SIZE(%r30), %r3 + .endm + #endif /* ! __LP64__ */ + +@@ -450,5 +478,30 @@ REST_CR (%cr22, PT_PSW (\regs)) .endm @@ -5801,10 +8525,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/assembly.h + #endif /* __ASSEMBLY__ */ #endif -Index: linux-2.6-2.6.12/include/asm-parisc/bitops.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/bitops.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/bitops.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/bitops.h linux-2.6.13/include/asm-parisc/bitops.h +--- linux-2.6.13.org/include/asm-parisc/bitops.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/bitops.h 2005-09-25 12:34:40.000000000 -0400 @@ -2,6 +2,7 @@ #define _PARISC_BITOPS_H @@ -6264,10 +8987,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/bitops.h /* Bitmap functions for the minix filesystem. */ #define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr) #define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr)) -Index: linux-2.6-2.6.12/include/asm-parisc/errno.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/errno.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/errno.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/errno.h linux-2.6.13/include/asm-parisc/errno.h +--- linux-2.6.13.org/include/asm-parisc/errno.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/errno.h 2005-09-25 12:34:40.000000000 -0400 @@ -114,6 +114,7 @@ #define ENOTSUP 252 /* Function not implemented (POSIX.4 / HPUX) */ @@ -6276,10 +8998,21 @@ Index: linux-2.6-2.6.12/include/asm-parisc/errno.h /* for robust mutexes */ #define EOWNERDEAD 254 /* Owner died */ -Index: linux-2.6-2.6.12/include/asm-parisc/led.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/led.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/led.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/grfioctl.h linux-2.6.13/include/asm-parisc/grfioctl.h +--- linux-2.6.13.org/include/asm-parisc/grfioctl.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/grfioctl.h 2005-09-25 12:34:40.000000000 -0400 +@@ -69,6 +69,8 @@ + #define CRT_ID_TVRX S9000_ID_98765 /* TVRX (gto/falcon) */ + #define CRT_ID_ARTIST S9000_ID_ARTIST /* Artist */ + #define CRT_ID_SUMMIT 0x2FC1066B /* Summit FX2, FX4, FX6 ... */ ++#define CRT_ID_LEGO 0x35ACDA30 /* Lego FX5, FX10 ... */ ++#define CRT_ID_PINNACLE 0x35ACDA16 /* Pinnacle FXe */ + + /* structure for ioctl(GCDESCRIBE) */ + +diff -Nur linux-2.6.13.org/include/asm-parisc/led.h linux-2.6.13/include/asm-parisc/led.h +--- linux-2.6.13.org/include/asm-parisc/led.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/led.h 2005-09-25 12:34:40.000000000 -0400 @@ -23,9 +23,6 @@ #define LED_CMD_REG_NONE 0 /* NULL == no addr for the cmd register */ @@ -6290,10 +9023,45 @@ Index: linux-2.6-2.6.12/include/asm-parisc/led.h /* register_led_driver() */ int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long data_reg); -Index: linux-2.6-2.6.12/include/asm-parisc/processor.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/processor.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/processor.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/parisc-device.h linux-2.6.13/include/asm-parisc/parisc-device.h +--- linux-2.6.13.org/include/asm-parisc/parisc-device.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/parisc-device.h 2005-09-25 12:34:40.000000000 -0400 +@@ -1,7 +1,7 @@ + #include + + struct parisc_device { +- unsigned long hpa; /* Hard Physical Address */ ++ struct resource hpa; /* Hard Physical Address */ + struct parisc_device_id id; + struct parisc_driver *driver; /* Driver for this device */ + char name[80]; /* The hardware description */ +@@ -39,6 +39,11 @@ + #define to_parisc_driver(d) container_of(d, struct parisc_driver, drv) + #define parisc_parent(d) to_parisc_device(d->dev.parent) + ++static inline char *parisc_pathname(struct parisc_device *d) ++{ ++ return d->dev.bus_id; ++} ++ + static inline void + parisc_set_drvdata(struct parisc_device *d, void *p) + { +diff -Nur linux-2.6.13.org/include/asm-parisc/pgtable.h linux-2.6.13/include/asm-parisc/pgtable.h +--- linux-2.6.13.org/include/asm-parisc/pgtable.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/pgtable.h 2005-09-25 12:34:40.000000000 -0400 +@@ -504,6 +504,8 @@ + #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ + remap_pfn_range(vma, vaddr, pfn, size, prot) + ++#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) | _PAGE_NO_CACHE) ++ + #define MK_IOSPACE_PFN(space, pfn) (pfn) + #define GET_IOSPACE(pfn) 0 + #define GET_PFN(pfn) (pfn) +diff -Nur linux-2.6.13.org/include/asm-parisc/processor.h linux-2.6.13/include/asm-parisc/processor.h +--- linux-2.6.13.org/include/asm-parisc/processor.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/processor.h 2005-09-25 12:34:40.000000000 -0400 @@ -121,8 +121,27 @@ }; @@ -6322,10 +9090,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/processor.h #define INIT_THREAD { \ regs: { gr: { 0, }, \ fr: { 0, }, \ -Index: linux-2.6-2.6.12/include/asm-parisc/psw.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/psw.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/psw.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/psw.h linux-2.6.13/include/asm-parisc/psw.h +--- linux-2.6.13.org/include/asm-parisc/psw.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/psw.h 2005-09-25 12:34:40.000000000 -0400 @@ -1,4 +1,7 @@ #ifndef _PARISC_PSW_H + @@ -6398,10 +9165,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/psw.h +#define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I) + #endif -Index: linux-2.6-2.6.12/include/asm-parisc/ptrace.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/ptrace.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/ptrace.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/ptrace.h linux-2.6.13/include/asm-parisc/ptrace.h +--- linux-2.6.13.org/include/asm-parisc/ptrace.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/ptrace.h 2005-09-25 12:34:40.000000000 -0400 @@ -49,7 +49,7 @@ #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) #define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0) @@ -6411,10 +9177,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/ptrace.h extern void show_regs(struct pt_regs *); #endif -Index: linux-2.6-2.6.12/include/asm-parisc/spinlock.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/spinlock.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/spinlock.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/spinlock.h linux-2.6.13/include/asm-parisc/spinlock.h +--- linux-2.6.13.org/include/asm-parisc/spinlock.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/spinlock.h 2005-09-25 12:34:40.000000000 -0400 @@ -8,9 +8,15 @@ * the semaphore address has to be 16-byte aligned. */ @@ -6484,10 +9249,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/spinlock.h (x)->babble--; \ printk("KERN_WARNING \ %s:%d: spin_unlock_wait(%s/%p)" \ -Index: linux-2.6-2.6.12/include/asm-parisc/system.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/system.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/system.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/system.h linux-2.6.13/include/asm-parisc/system.h +--- linux-2.6.13.org/include/asm-parisc/system.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/system.h 2005-09-25 12:34:40.000000000 -0400 @@ -138,13 +138,7 @@ #define set_wmb(var, value) do { var = value; wmb(); } while (0) @@ -6578,10 +9342,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/system.h #define arch_align_stack(x) (x) #endif -Index: linux-2.6-2.6.12/include/asm-parisc/tlbflush.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/tlbflush.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/tlbflush.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/tlbflush.h linux-2.6.13/include/asm-parisc/tlbflush.h +--- linux-2.6.13.org/include/asm-parisc/tlbflush.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/tlbflush.h 2005-09-25 12:34:40.000000000 -0400 @@ -7,6 +7,26 @@ #include #include @@ -6642,10 +9405,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/tlbflush.h } } -Index: linux-2.6-2.6.12/include/asm-parisc/types.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/types.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/types.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/types.h linux-2.6.13/include/asm-parisc/types.h +--- linux-2.6.13.org/include/asm-parisc/types.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/types.h 2005-09-25 12:34:40.000000000 -0400 @@ -33,8 +33,10 @@ #ifdef __LP64__ @@ -6657,10 +9419,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/types.h #endif #ifndef __ASSEMBLY__ -Index: linux-2.6-2.6.12/include/asm-parisc/unistd.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-parisc/unistd.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-parisc/unistd.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-parisc/unistd.h linux-2.6.13/include/asm-parisc/unistd.h +--- linux-2.6.13.org/include/asm-parisc/unistd.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-parisc/unistd.h 2005-09-25 12:34:40.000000000 -0400 @@ -687,8 +687,8 @@ #define __NR_shmget (__NR_Linux + 194) #define __NR_shmctl (__NR_Linux + 195) @@ -6699,10 +9460,9 @@ Index: linux-2.6-2.6.12/include/asm-parisc/unistd.h K_STW_ASM_PIC \ " ble 0x100(%%sr2, %%r0)\n" \ " ldi %1, %%r20\n" \ -Index: linux-2.6-2.6.12/include/asm-s390/compat.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-s390/compat.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-s390/compat.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-s390/compat.h linux-2.6.13/include/asm-s390/compat.h +--- linux-2.6.13.org/include/asm-s390/compat.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-s390/compat.h 2005-09-25 12:34:40.000000000 -0400 @@ -15,6 +15,9 @@ typedef s32 compat_pid_t; typedef u16 compat_uid_t; @@ -6713,10 +9473,9 @@ Index: linux-2.6-2.6.12/include/asm-s390/compat.h typedef u32 compat_uid32_t; typedef u32 compat_gid32_t; typedef u16 compat_mode_t; -Index: linux-2.6-2.6.12/include/asm-sparc64/compat.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/asm-sparc64/compat.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/asm-sparc64/compat.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/asm-sparc64/compat.h linux-2.6.13/include/asm-sparc64/compat.h +--- linux-2.6.13.org/include/asm-sparc64/compat.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/asm-sparc64/compat.h 2005-09-25 12:34:40.000000000 -0400 @@ -12,6 +12,9 @@ typedef s32 compat_time_t; typedef s32 compat_clock_t; @@ -6727,10 +9486,9 @@ Index: linux-2.6-2.6.12/include/asm-sparc64/compat.h typedef u16 compat_uid_t; typedef u16 compat_gid_t; typedef u16 compat_mode_t; -Index: linux-2.6-2.6.12/include/linux/compat.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/linux/compat.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/linux/compat.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/compat.h linux-2.6.13/include/linux/compat.h +--- linux-2.6.13.org/include/linux/compat.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/linux/compat.h 2005-09-25 12:34:40.000000000 -0400 @@ -6,10 +6,16 @@ */ #include @@ -6801,11 +9559,10 @@ Index: linux-2.6-2.6.12/include/linux/compat.h #endif /* CONFIG_COMPAT */ #endif /* _LINUX_COMPAT_H */ -Index: linux-2.6-2.6.12/include/linux/compat_siginfo.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/include/linux/compat_siginfo.h 2005-08-09 17:53:35.000000000 -0400 -@@ -0,0 +1,181 @@ +diff -Nur linux-2.6.13.org/include/linux/compat_siginfo.h linux-2.6.13/include/linux/compat_siginfo.h +--- linux-2.6.13.org/include/linux/compat_siginfo.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/include/linux/compat_siginfo.h 2005-09-25 12:34:40.000000000 -0400 +@@ -0,0 +1,182 @@ +#ifndef _ASM_GENERIC_COMPAT_SIGINFO_H +#define _ASM_GENERIC_COMPAT_SIGINFO_H + @@ -6983,14 +9740,14 @@ Index: linux-2.6-2.6.12/include/linux/compat_siginfo.h +extern int compat_copy_siginfo_from_user(struct siginfo *to, compat_siginfo_t __user *from); + +extern int compat_copy_sigevent_from_user(struct sigevent *to, compat_sigevent_t __user *from); ++extern int compat_copy_sigevent_to_user(compat_sigevent_t __user *to, struct sigevent *from); + +#endif /* CONFIG_COMPAT */ +#endif /* _ASM_GENERIC_COMPAT_SIGINFO_H */ + -Index: linux-2.6-2.6.12/include/linux/hil.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/include/linux/hil.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/hil.h linux-2.6.13/include/linux/hil.h +--- linux-2.6.13.org/include/linux/hil.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/include/linux/hil.h 2005-09-25 12:34:40.000000000 -0400 @@ -0,0 +1,483 @@ +#ifndef _HIL_H_ +#define _HIL_H_ @@ -7475,10 +10232,9 @@ Index: linux-2.6-2.6.12/include/linux/hil.h + + +#endif /* _HIL_H_ */ -Index: linux-2.6-2.6.12/include/linux/hil_mlc.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/include/linux/hil_mlc.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/hil_mlc.h linux-2.6.13/include/linux/hil_mlc.h +--- linux-2.6.13.org/include/linux/hil_mlc.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/include/linux/hil_mlc.h 2005-09-25 12:34:40.000000000 -0400 @@ -0,0 +1,168 @@ +/* + * HP Human Interface Loop Master Link Controller driver. @@ -7648,10 +10404,9 @@ Index: linux-2.6-2.6.12/include/linux/hil_mlc.h + +int hil_mlc_register(hil_mlc *mlc); +int hil_mlc_unregister(hil_mlc *mlc); -Index: linux-2.6-2.6.12/include/linux/hp_sdc.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/include/linux/hp_sdc.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/hp_sdc.h linux-2.6.13/include/linux/hp_sdc.h +--- linux-2.6.13.org/include/linux/hp_sdc.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/include/linux/hp_sdc.h 2005-09-25 12:34:40.000000000 -0400 @@ -0,0 +1,300 @@ +/* + * HP i8042 System Device Controller -- header @@ -7953,10 +10708,9 @@ Index: linux-2.6-2.6.12/include/linux/hp_sdc.h +} hp_i8042_sdc; + +#endif /* _LINUX_HP_SDC_H */ -Index: linux-2.6-2.6.12/include/linux/input.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/linux/input.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/linux/input.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/input.h linux-2.6.13/include/linux/input.h +--- linux-2.6.13.org/include/linux/input.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/linux/input.h 2005-09-25 12:34:40.000000000 -0400 @@ -620,6 +620,7 @@ #define BUS_ADB 0x17 #define BUS_I2C 0x18 @@ -7965,11 +10719,10 @@ Index: linux-2.6-2.6.12/include/linux/input.h /* * Values describing the status of an effect -Index: linux-2.6-2.6.12/include/linux/serio.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/linux/serio.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/linux/serio.h 2005-08-09 17:53:35.000000000 -0400 -@@ -179,7 +179,7 @@ +diff -Nur linux-2.6.13.org/include/linux/serio.h linux-2.6.13/include/linux/serio.h +--- linux-2.6.13.org/include/linux/serio.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/linux/serio.h 2005-09-25 12:34:40.000000000 -0400 +@@ -185,7 +185,7 @@ #define SERIO_8042_XL 0x06 /* @@ -7978,10 +10731,9 @@ Index: linux-2.6-2.6.12/include/linux/serio.h */ #define SERIO_UNKNOWN 0x00 #define SERIO_MSC 0x01 -Index: linux-2.6-2.6.12/include/linux/signal.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/linux/signal.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/linux/signal.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/linux/signal.h linux-2.6.13/include/linux/signal.h +--- linux-2.6.13.org/include/linux/signal.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/linux/signal.h 2005-09-25 12:34:40.000000000 -0400 @@ -234,6 +234,9 @@ struct pt_regs; extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie); @@ -7992,10 +10744,9 @@ Index: linux-2.6-2.6.12/include/linux/signal.h #endif /* __KERNEL__ */ #endif /* _LINUX_SIGNAL_H */ -Index: linux-2.6-2.6.12/include/sound/opl3.h -=================================================================== ---- linux-2.6-2.6.12.orig/include/sound/opl3.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/include/sound/opl3.h 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/include/sound/opl3.h linux-2.6.13/include/sound/opl3.h +--- linux-2.6.13.org/include/sound/opl3.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/include/sound/opl3.h 2005-09-25 12:34:40.000000000 -0400 @@ -261,8 +261,8 @@ } snd_opl3_voice_t; @@ -8017,10 +10768,9 @@ Index: linux-2.6-2.6.12/include/sound/opl3.h int snd_opl3_create(snd_card_t * card, unsigned long l_port, unsigned long r_port, unsigned short hardware, -Index: linux-2.6-2.6.12/ipc/compat_mq.c -=================================================================== ---- linux-2.6-2.6.12.orig/ipc/compat_mq.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/ipc/compat_mq.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/ipc/compat_mq.c linux-2.6.13/ipc/compat_mq.c +--- linux-2.6.13.org/ipc/compat_mq.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/ipc/compat_mq.c 2005-09-25 12:34:40.000000000 -0400 @@ -7,6 +7,7 @@ */ @@ -8029,23 +10779,21 @@ Index: linux-2.6-2.6.12/ipc/compat_mq.c #include #include #include -Index: linux-2.6-2.6.12/kernel/Makefile -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/Makefile 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/Makefile 2005-08-09 17:53:35.000000000 -0400 -@@ -17,7 +17,7 @@ - obj-$(CONFIG_KALLSYMS) += kallsyms.o +diff -Nur linux-2.6.13.org/kernel/Makefile linux-2.6.13/kernel/Makefile +--- linux-2.6.13.org/kernel/Makefile 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/Makefile 2005-09-25 12:34:40.000000000 -0400 +@@ -18,7 +18,7 @@ obj-$(CONFIG_PM) += power/ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o + obj-$(CONFIG_KEXEC) += kexec.o -obj-$(CONFIG_COMPAT) += compat.o +obj-$(CONFIG_COMPAT) += compat.o compat_signal.o obj-$(CONFIG_CPUSETS) += cpuset.o obj-$(CONFIG_IKCONFIG) += configs.o obj-$(CONFIG_IKCONFIG_PROC) += configs.o -Index: linux-2.6-2.6.12/kernel/compat.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/compat.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/compat.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/kernel/compat.c linux-2.6.13/kernel/compat.c +--- linux-2.6.13.org/kernel/compat.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/compat.c 2005-09-25 12:34:40.000000000 -0400 @@ -13,6 +13,7 @@ #include @@ -8067,7 +10815,7 @@ Index: linux-2.6-2.6.12/kernel/compat.c } static int compat_get_user_cpu_mask(compat_ulong_t __user *user_mask_ptr, -@@ -653,6 +658,26 @@ +@@ -653,6 +658,44 @@ /* timer_create is architecture specific because it needs sigevent conversion */ @@ -8076,17 +10824,35 @@ Index: linux-2.6-2.6.12/kernel/compat.c + compat_timer_t __user * created_timer_id) +{ + sigevent_t kevent; ++ timer_t ktimer; + mm_segment_t old_fs = get_fs(); + long ret; + ++ /* sigevent_t needs handling for 32-bit to 64-bit compat */ + if (timer_event_spec != NULL) + if (compat_copy_sigevent_from_user(&kevent, timer_event_spec) != 0) + return -EFAULT; ++ ++ /* Timer ID is assumed to be a non-struct simple value */ ++ if (created_timer_id != NULL) ++ if (__get_user(ktimer, created_timer_id) != 0) ++ return -EFAULT; + + set_fs(KERNEL_DS); -+ ret = sys_timer_create(which_clock, timer_event_spec ? (sigevent_t __user *)&kevent : NULL, created_timer_id); ++ ret = sys_timer_create(which_clock, ++ timer_event_spec ? (sigevent_t __user *)&kevent : NULL, ++ created_timer_id ? (timer_t __user *)&ktimer : NULL); + set_fs(old_fs); ++ ++ /* Copy back the results to userspace */ ++ if (timer_event_spec != NULL) ++ if (compat_copy_sigevent_to_user(timer_event_spec, &kevent) != 0) ++ return -EFAULT; + ++ if (created_timer_id != NULL) ++ if (__put_user(ktimer, created_timer_id) != 0) ++ return -EFAULT; ++ + return ret; +} + @@ -8094,7 +10860,7 @@ Index: linux-2.6-2.6.12/kernel/compat.c long compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask, unsigned long bitmap_size) { -@@ -810,7 +835,7 @@ +@@ -810,7 +853,7 @@ if (sig) { ret = sig; if (uinfo) { @@ -8103,11 +10869,10 @@ Index: linux-2.6-2.6.12/kernel/compat.c ret = -EFAULT; } }else { -Index: linux-2.6-2.6.12/kernel/compat_signal.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/kernel/compat_signal.c 2005-08-09 17:53:35.000000000 -0400 -@@ -0,0 +1,244 @@ +diff -Nur linux-2.6.13.org/kernel/compat_signal.c linux-2.6.13/kernel/compat_signal.c +--- linux-2.6.13.org/kernel/compat_signal.c 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/kernel/compat_signal.c 2005-09-25 12:34:40.000000000 -0400 +@@ -0,0 +1,280 @@ +/* + * Copyright (C) 2003 Carlos O'Donell + * @@ -8352,10 +11117,45 @@ Index: linux-2.6-2.6.12/kernel/compat_signal.c +} +#endif + -Index: linux-2.6-2.6.12/kernel/posix-cpu-timers.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/posix-cpu-timers.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/posix-cpu-timers.c 2005-08-09 17:53:35.000000000 -0400 ++#ifndef HAVE_ARCH_COPY_SIGEVENT_TO_USER ++int compat_copy_sigevent_to_user(compat_sigevent_t __user *to, sigevent_t *from) ++{ ++ int err; ++ u32 scratch; ++ ++ /* copy sigval_t sigev_value ++ int_t sival_int (same) ++ uptr_t sival_ptr (32 vs 64)*/ ++ err = __put_user(from->sigev_value.sival_int, ++ &to->sigev_value.sival_int); ++ scratch = (u32)((u64 __force)from->sigev_value.sival_ptr & 0xffffffffUL); ++ err |= __put_user((compat_uptr_t)scratch, &to->sigev_value.sival_ptr); ++ ++ /* copy int_t sigev_signo (same)*/ ++ err |= __put_user(from->sigev_signo, &to->sigev_signo); ++ ++ /* copy int_t sigev_notify (same)*/ ++ err |= __put_user(from->sigev_notify, &to->sigev_notify); ++ ++ /* never copy _sigev_un padding */ ++ ++ /* copy int_t _tid (same), ++ good_sigevent() uses this value of */ ++ err |= __put_user(from->sigev_notify_thread_id, &to->sigev_notify_thread_id); ++ ++ /* XXX: Do not copy these, they aren't used by ++ anyone. We would need to distinguish the uses of the union. ++ copy _sigev_thread ++ uptr_t _function (32 vs 64) ++ uptr_t _attribute (32 vs 64)*/ ++ ++ return err; ++} ++#endif ++ +diff -Nur linux-2.6.13.org/kernel/posix-cpu-timers.c linux-2.6.13/kernel/posix-cpu-timers.c +--- linux-2.6.13.org/kernel/posix-cpu-timers.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/posix-cpu-timers.c 2005-09-25 12:34:40.000000000 -0400 @@ -1270,8 +1270,6 @@ LIST_HEAD(firing); struct k_itimer *timer, *next; @@ -8365,10 +11165,9 @@ Index: linux-2.6-2.6.12/kernel/posix-cpu-timers.c #define UNEXPIRED(clock) \ (cputime_eq(tsk->it_##clock##_expires, cputime_zero) || \ cputime_lt(clock##_ticks(tsk), tsk->it_##clock##_expires)) -Index: linux-2.6-2.6.12/kernel/ptrace.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/ptrace.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/ptrace.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/kernel/ptrace.c linux-2.6.13/kernel/ptrace.c +--- linux-2.6.13.org/kernel/ptrace.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/ptrace.c 2005-09-25 12:34:40.000000000 -0400 @@ -344,7 +344,7 @@ siginfo_t newinfo; int error = -ESRCH; @@ -8378,10 +11177,9 @@ Index: linux-2.6-2.6.12/kernel/ptrace.c return -EFAULT; read_lock(&tasklist_lock); -Index: linux-2.6-2.6.12/kernel/resource.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/resource.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/resource.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/kernel/resource.c linux-2.6.13/kernel/resource.c +--- linux-2.6.13.org/kernel/resource.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/resource.c 2005-09-25 12:34:40.000000000 -0400 @@ -181,6 +181,8 @@ { struct resource *tmp, **p; @@ -8391,10 +11189,9 @@ Index: linux-2.6-2.6.12/kernel/resource.c p = &old->parent->child; for (;;) { tmp = *p; -Index: linux-2.6-2.6.12/kernel/signal.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/signal.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/signal.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/kernel/signal.c linux-2.6.13/kernel/signal.c +--- linux-2.6.13.org/kernel/signal.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/signal.c 2005-09-25 12:34:40.000000000 -0400 @@ -22,6 +22,7 @@ #include #include @@ -8402,8 +11199,8 @@ Index: linux-2.6-2.6.12/kernel/signal.c +#include #include #include - #include -@@ -2107,17 +2108,35 @@ + #include +@@ -2113,17 +2114,35 @@ return do_sigpending(set, sigsetsize); } @@ -8439,7 +11236,7 @@ Index: linux-2.6-2.6.12/kernel/signal.c /* * If you change siginfo_t structure, please be sure * this code is fixed accordingly. -@@ -2356,7 +2375,7 @@ +@@ -2361,7 +2380,7 @@ { siginfo_t info; @@ -8448,11 +11245,10 @@ Index: linux-2.6-2.6.12/kernel/signal.c return -EFAULT; /* Not even root can pretend to send signals from the kernel. -Index: linux-2.6-2.6.12/kernel/sys.c -=================================================================== ---- linux-2.6-2.6.12.orig/kernel/sys.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/kernel/sys.c 2005-08-09 17:53:35.000000000 -0400 -@@ -30,6 +30,7 @@ +diff -Nur linux-2.6.13.org/kernel/sys.c linux-2.6.13/kernel/sys.c +--- linux-2.6.13.org/kernel/sys.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/kernel/sys.c 2005-09-25 12:34:40.000000000 -0400 +@@ -32,6 +32,7 @@ #include #include @@ -8460,10 +11256,9 @@ Index: linux-2.6-2.6.12/kernel/sys.c #include #include #include -Index: linux-2.6-2.6.12/mm/shmem.c -=================================================================== ---- linux-2.6-2.6.12.orig/mm/shmem.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/mm/shmem.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/mm/shmem.c linux-2.6.13/mm/shmem.c +--- linux-2.6.13.org/mm/shmem.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/mm/shmem.c 2005-09-25 12:34:40.000000000 -0400 @@ -461,7 +461,7 @@ } while (next); } @@ -8473,10 +11268,9 @@ Index: linux-2.6-2.6.12/mm/shmem.c { struct shmem_inode_info *info = SHMEM_I(inode); unsigned long idx; -Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c -=================================================================== ---- linux-2.6-2.6.12.orig/sound/drivers/opl3/opl3_lib.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/drivers/opl3/opl3_lib.c linux-2.6.13/sound/drivers/opl3/opl3_lib.c +--- linux-2.6.13.org/sound/drivers/opl3/opl3_lib.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/drivers/opl3/opl3_lib.c 2005-09-25 12:34:40.000000000 -0400 @@ -40,7 +40,7 @@ static void snd_opl2_command(opl3_t * opl3, unsigned short cmd, unsigned char val) { @@ -8556,16 +11350,18 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c #if 0 snd_printk("AdLib IRQ status = 0x%x\n", status); #endif -@@ -333,6 +333,8 @@ +@@ -333,6 +333,10 @@ release_resource(opl3->res_r_port); kfree_nocheck(opl3->res_r_port); } -+ iounmap(opl3->l_port); -+ iounmap(opl3->r_port); ++ if (opl3->unmap_on_free) { ++ iounmap(opl3->l_port); ++ iounmap(opl3->r_port); ++ } kfree(opl3); return 0; } -@@ -397,12 +399,13 @@ +@@ -397,12 +401,14 @@ return 0; } @@ -8578,6 +11374,7 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c +static int snd_opl3_create_main(snd_card_t * card, + void __iomem *l_port, + void __iomem *r_port, ++ int unmap_on_free, + struct resource *res_l_port, + struct resource *res_r_port, + unsigned short hardware, @@ -8585,7 +11382,7 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c { opl3_t *opl3; int err; -@@ -410,21 +413,10 @@ +@@ -410,21 +416,11 @@ *ropl3 = NULL; if ((err = snd_opl3_new(card, hardware, &opl3)) < 0) return err; @@ -8604,12 +11401,13 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c - } opl3->l_port = l_port; opl3->r_port = r_port; ++ opl3->unmap_on_free = unmap_on_free; + opl3->res_l_port = res_l_port; + opl3->res_r_port = res_r_port; switch (opl3->hardware) { /* some hardware doesn't support timers */ -@@ -455,6 +447,67 @@ +@@ -455,6 +451,67 @@ return 0; } @@ -8619,7 +11417,7 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c + unsigned short hardware, + opl3_t ** ropl3) +{ -+ return snd_opl3_create_main(card, l_port, r_port, NULL, NULL, hardware, ropl3); ++ return snd_opl3_create_main(card, l_port, r_port, 0, NULL, NULL, hardware, ropl3); +} + +int snd_opl3_create(snd_card_t * card, @@ -8656,7 +11454,7 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c + goto fail; + } + -+ return snd_opl3_create_main(card, l_mapped, r_mapped, res_l_port, res_r_port, hardware, ropl3); ++ return snd_opl3_create_main(card, l_mapped, r_mapped, 1, res_l_port, res_r_port, hardware, ropl3); + +fail: + if (res_l_port) { @@ -8677,7 +11475,7 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c int snd_opl3_timer_new(opl3_t * opl3, int timer1_dev, int timer2_dev) { int err; -@@ -534,6 +587,7 @@ +@@ -534,6 +591,7 @@ EXPORT_SYMBOL(snd_opl3_new); EXPORT_SYMBOL(snd_opl3_init); EXPORT_SYMBOL(snd_opl3_create); @@ -8685,10 +11483,9 @@ Index: linux-2.6-2.6.12/sound/drivers/opl3/opl3_lib.c EXPORT_SYMBOL(snd_opl3_timer_new); EXPORT_SYMBOL(snd_opl3_hwdep_new); -Index: linux-2.6-2.6.12/sound/oss/ad1889.c -=================================================================== ---- linux-2.6-2.6.12.orig/sound/oss/ad1889.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/oss/ad1889.c 2005-08-09 17:53:35.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/oss/ad1889.c linux-2.6.13/sound/oss/ad1889.c +--- linux-2.6.13.org/sound/oss/ad1889.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/oss/ad1889.c 2005-09-25 12:34:40.000000000 -0400 @@ -74,7 +74,7 @@ DBG("Setting WAV rate to %d\n", rate); @@ -8795,7 +11592,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c spin_unlock_irqrestore(&state->card->lock, flags); } -@@ -301,53 +301,53 @@ +@@ -300,53 +300,53 @@ int len, i; ad1889_dev_t *dev = data; ad1889_reg_t regs[] = { @@ -8896,7 +11693,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c { NULL } }; -@@ -400,9 +400,9 @@ +@@ -399,9 +399,9 @@ } if (dmabuf->enable & DAC_RUNNING) @@ -8908,7 +11705,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c return (unsigned long)bus_to_virt((unsigned long)offset) - (unsigned long)dmabuf->rawbuf; } -@@ -639,9 +639,9 @@ +@@ -638,9 +638,9 @@ if (val > 5400 && val < 48000) { if (file->f_mode & FMODE_WRITE) @@ -8920,7 +11717,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c } return 0; -@@ -649,22 +649,22 @@ +@@ -648,22 +648,22 @@ if (get_user(val, p)) return -EFAULT; if (file->f_mode & FMODE_READ) { @@ -8947,7 +11744,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c } return 0; -@@ -739,7 +739,7 @@ +@@ -738,7 +738,7 @@ break; case SOUND_PCM_READ_RATE: @@ -8956,7 +11753,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c case SOUND_PCM_READ_CHANNELS: case SOUND_PCM_READ_BITS: -@@ -769,7 +769,7 @@ +@@ -768,7 +768,7 @@ ad1889_set_wav_rate(ad1889_dev, 48000); ad1889_set_wav_fmt(ad1889_dev, AFMT_S16_LE); @@ -8965,7 +11762,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c return nonseekable_open(inode, file); } -@@ -826,15 +826,15 @@ +@@ -825,15 +825,15 @@ { ad1889_dev_t *dev = ac97->private_data; @@ -8985,7 +11782,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c } static int ad1889_ac97_init(ad1889_dev_t *dev, int id) -@@ -883,24 +883,24 @@ +@@ -882,24 +882,24 @@ int retry = 200; ad1889_dev_t *dev = pci_get_drvdata(pcidev); @@ -9018,7 +11815,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c break; WAIT_10MS(); retry--; -@@ -908,16 +908,16 @@ +@@ -907,16 +907,16 @@ if (!retry) { printk(KERN_ERR "ad1889_aclink_reset: codec is not ready [0x%x]\n", @@ -9038,7 +11835,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c return 0; } -@@ -935,10 +935,10 @@ +@@ -934,10 +934,10 @@ u32 stat; ad1889_dev_t *dev = (ad1889_dev_t *)dev_id; @@ -9051,7 +11848,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c if (stat & 0x8) { /* WAVI */ DBG("WAV interrupt\n"); -@@ -964,15 +964,15 @@ +@@ -963,15 +963,15 @@ u32 tmp32; /* make sure the interrupt bits are setup the way we want */ @@ -9071,7 +11868,7 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c } static int __devinit ad1889_probe(struct pci_dev *pcidev, const struct pci_device_id *ent) -@@ -1005,7 +1005,7 @@ +@@ -1004,7 +1004,7 @@ goto out1; } @@ -9080,10 +11877,9 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.c if (!dev->regbase) { printk(KERN_ERR DEVNAME ": unable to remap iomem\n"); goto out2; -Index: linux-2.6-2.6.12/sound/oss/ad1889.h -=================================================================== ---- linux-2.6-2.6.12.orig/sound/oss/ad1889.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/oss/ad1889.h 2005-08-09 17:53:36.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/oss/ad1889.h linux-2.6.13/sound/oss/ad1889.h +--- linux-2.6.13.org/sound/oss/ad1889.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/oss/ad1889.h 2005-09-25 12:34:40.000000000 -0400 @@ -1,57 +1,58 @@ #ifndef _AD1889_H_ #define _AD1889_H_ @@ -9203,10 +11999,21 @@ Index: linux-2.6-2.6.12/sound/oss/ad1889.h #define AD_WAV_STATE 0 #define AD_ADC_STATE 1 -Index: linux-2.6-2.6.12/sound/parisc/harmony.c -=================================================================== ---- linux-2.6-2.6.12.orig/sound/parisc/harmony.c 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/parisc/harmony.c 2005-08-09 17:53:36.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/oss/harmony.c linux-2.6.13/sound/oss/harmony.c +--- linux-2.6.13.org/sound/oss/harmony.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/oss/harmony.c 2005-09-25 12:34:40.000000000 -0400 +@@ -1236,7 +1236,7 @@ + } + + /* Set the HPA of harmony */ +- harmony.hpa = (struct harmony_hpa *)dev->hpa; ++ harmony.hpa = (struct harmony_hpa *)dev->hpa.start; + harmony.dev = dev; + + /* Grab the ID and revision from the device */ +diff -Nur linux-2.6.13.org/sound/parisc/harmony.c linux-2.6.13/sound/parisc/harmony.c +--- linux-2.6.13.org/sound/parisc/harmony.c 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/parisc/harmony.c 2005-09-25 12:34:40.000000000 -0400 @@ -197,7 +197,7 @@ spin_unlock(&h->lock); @@ -9398,10 +12205,27 @@ Index: linux-2.6-2.6.12/sound/parisc/harmony.c }; static void __init -Index: linux-2.6-2.6.12/sound/parisc/harmony.h -=================================================================== ---- linux-2.6-2.6.12.orig/sound/parisc/harmony.h 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/parisc/harmony.h 2005-08-09 17:53:36.000000000 -0400 +@@ -852,14 +932,14 @@ + memset(&h->pbuf, 0, sizeof(h->pbuf)); + memset(&h->cbuf, 0, sizeof(h->cbuf)); + +- h->hpa = padev->hpa; ++ h->hpa = padev->hpa.start; + h->card = card; + h->dev = padev; + h->irq = padev->irq; +- h->iobase = ioremap_nocache(padev->hpa, HARMONY_SIZE); ++ h->iobase = ioremap_nocache(padev->hpa.start, HARMONY_SIZE); + if (h->iobase == NULL) { + printk(KERN_ERR PFX "unable to remap hpa 0x%lx\n", +- padev->hpa); ++ padev->hpa.start); + err = -EBUSY; + goto free_and_ret; + } +diff -Nur linux-2.6.13.org/sound/parisc/harmony.h linux-2.6.13/sound/parisc/harmony.h +--- linux-2.6.13.org/sound/parisc/harmony.h 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/parisc/harmony.h 2005-09-25 12:34:40.000000000 -0400 @@ -61,7 +61,7 @@ #define HARMONY_SIZE 64 @@ -9449,29 +12273,28 @@ Index: linux-2.6-2.6.12/sound/parisc/harmony.h #define HARMONY_GAIN_OUT 0x3f #define HARMONY_GAIN_LO_SHIFT 6 #define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT) -Index: linux-2.6-2.6.12/sound/pci/Kconfig -=================================================================== ---- linux-2.6-2.6.12.orig/sound/pci/Kconfig 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/pci/Kconfig 2005-08-09 17:53:36.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/pci/Kconfig linux-2.6.13/sound/pci/Kconfig +--- linux-2.6.13.org/sound/pci/Kconfig 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/pci/Kconfig 2005-09-25 12:34:40.000000000 -0400 @@ -21,6 +21,26 @@ To compile this driver as a module, choose M here: the module will be called snd-ali5451. +config SND_AD1889 + tristate "Analog Devices AD1889" -+ depends on SND && PARISC ++ depends on SND + select SND_AC97_CODEC + help + Say Y here to include support for the integrated AC97 sound -+ device on the Hewlett-Packard [BCJ]-xxx0 class PA-RISC -+ workstations, using the AD1819 codec. ++ device found in particular on the Hewlett-Packard [BCJ]-xxx0 ++ class PA-RISC workstations, using the AD1819 codec. + + To compile this as a module, choose M here: the module + will be called snd-ad1889. + +config SND_AD1889_OPL3 -+ bool "Analog Devices AD1889 OPL3 Support" -+ depends on SND_AD1889 ++ bool "Analog Devices AD1889 OPL3 Support (Experimental)" ++ depends on SND_AD1889 && EXPERIMENTAL + select SND_OPL3_LIB + help + Say Y here to include support for the OPL3-compatible interface @@ -9480,10 +12303,9 @@ Index: linux-2.6-2.6.12/sound/pci/Kconfig config SND_ATIIXP tristate "ATI IXP AC97 Controller" depends on SND -Index: linux-2.6-2.6.12/sound/pci/Makefile -=================================================================== ---- linux-2.6-2.6.12.orig/sound/pci/Makefile 2005-08-09 09:52:27.000000000 -0400 -+++ linux-2.6-2.6.12/sound/pci/Makefile 2005-08-09 17:53:36.000000000 -0400 +diff -Nur linux-2.6.13.org/sound/pci/Makefile linux-2.6.13/sound/pci/Makefile +--- linux-2.6.13.org/sound/pci/Makefile 2005-08-28 19:41:01.000000000 -0400 ++++ linux-2.6.13/sound/pci/Makefile 2005-09-25 12:34:40.000000000 -0400 @@ -4,6 +4,7 @@ # @@ -9500,11 +12322,10 @@ Index: linux-2.6-2.6.12/sound/pci/Makefile obj-$(CONFIG_SND_ATIIXP) += snd-atiixp.o obj-$(CONFIG_SND_ATIIXP_MODEM) += snd-atiixp-modem.o obj-$(CONFIG_SND_AZT3328) += snd-azt3328.o -Index: linux-2.6-2.6.12/sound/pci/ad1889.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/sound/pci/ad1889.c 2005-08-09 17:53:36.000000000 -0400 -@@ -0,0 +1,1210 @@ +diff -Nur linux-2.6.13.org/sound/pci/ad1889.c linux-2.6.13/sound/pci/ad1889.c +--- linux-2.6.13.org/sound/pci/ad1889.c 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/sound/pci/ad1889.c 2005-09-25 12:34:40.000000000 -0400 +@@ -0,0 +1,1141 @@ +/* Analog Devices 1889 audio driver + * + * This is a driver for the AD1889 PCI audio chipset found @@ -9591,15 +12412,11 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c +/* let's use the global sound debug interfaces */ +#define ad1889_debug(fmt, arg...) snd_printd(KERN_DEBUG fmt, ## arg) + -+/* keep track of each hw register */ ++/* keep track of some hw registers */ +struct ad1889_register_state { + u16 reg; /* reg setup */ + u32 addr; /* dma base address */ -+ u16 rate; /* sample rate */ -+ unsigned long pos; /* last recorded DMA buffer position */ -+ unsigned long buf; /* period # */ + unsigned long size; /* DMA buffer size */ -+ unsigned long count; /* period size, aka nb bytes sent in the current DMA transfer */ +}; + +struct snd_ad1889 { @@ -9631,13 +12448,6 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + struct ad1889_register_state wave; + struct ad1889_register_state ramc; + -+ struct { -+ unsigned long wav_intr; -+ unsigned long adc_intr; -+ unsigned long syn_intr; -+ unsigned long res_intr; -+ } stats; -+ + spinlock_t lock; +}; + @@ -9685,22 +12495,46 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c +} + +static inline void -+ad1889_load_adc_count(struct snd_ad1889 *chip, u32 count) ++ad1889_load_adc_buffer_address(struct snd_ad1889 *chip, u32 address) ++{ ++ ad1889_writel(chip, AD_DMA_ADCBA, address); ++ ad1889_writel(chip, AD_DMA_ADCCA, address); ++} ++ ++static inline void ++ad1889_load_adc_buffer_count(struct snd_ad1889 *chip, u32 count) +{ + ad1889_writel(chip, AD_DMA_ADCBC, count); + ad1889_writel(chip, AD_DMA_ADCCC, count); -+ ad1889_writel(chip, AD_DMA_ADCIB, count); -+ ad1889_writel(chip, AD_DMA_ADCIC, count); -+} ++} + +static inline void -+ad1889_load_wave_count(struct snd_ad1889 *chip, u32 count) ++ad1889_load_adc_interrupt_count(struct snd_ad1889 *chip, u32 count) ++{ ++ ad1889_writel(chip, AD_DMA_ADCIB, count); ++ ad1889_writel(chip, AD_DMA_ADCIC, count); ++} ++ ++static inline void ++ad1889_load_wave_buffer_address(struct snd_ad1889 *chip, u32 address) ++{ ++ ad1889_writel(chip, AD_DMA_WAVBA, address); ++ ad1889_writel(chip, AD_DMA_WAVCA, address); ++} ++ ++static inline void ++ad1889_load_wave_buffer_count(struct snd_ad1889 *chip, u32 count) +{ + ad1889_writel(chip, AD_DMA_WAVBC, count); + ad1889_writel(chip, AD_DMA_WAVCC, count); ++} ++ ++static inline void ++ad1889_load_wave_interrupt_count(struct snd_ad1889 *chip, u32 count) ++{ + ad1889_writel(chip, AD_DMA_WAVIB, count); + ad1889_writel(chip, AD_DMA_WAVIC, count); -+} ++} + +static void +ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel) @@ -9720,9 +12554,9 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + ad1889_writew(chip, AD_DMA_WAV, reg); + + /* clear IRQ and address counters and pointers */ -+ ad1889_load_wave_count(chip, 0x0); -+ ad1889_writel(chip, AD_DMA_WAVBA, 0x0); -+ ad1889_writel(chip, AD_DMA_WAVCA, 0x0); ++ ad1889_load_wave_buffer_address(chip, 0x0); ++ ad1889_load_wave_buffer_count(chip, 0x0); ++ ad1889_load_wave_interrupt_count(chip, 0x0); + + /* flush */ + ad1889_readw(chip, AD_DMA_WAV); @@ -9739,9 +12573,9 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + reg &= ~AD_DMA_LOOP; + ad1889_writew(chip, AD_DMA_ADC, reg); + -+ ad1889_load_adc_count(chip, 0x0); -+ ad1889_writel(chip, AD_DMA_ADCBA, 0x0); -+ ad1889_writel(chip, AD_DMA_ADCCA, 0x0); ++ ad1889_load_adc_buffer_address(chip, 0x0); ++ ad1889_load_adc_buffer_count(chip, 0x0); ++ ad1889_load_adc_interrupt_count(chip, 0x0); + + /* flush */ + ad1889_readw(chip, AD_DMA_ADC); @@ -9803,11 +12637,11 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + .rate_max = 48000, + .channels_min = 1, + .channels_max = 2, -+ .buffer_bytes_max = DMA_SIZE, /* max DMA buffer size in bytes */ -+ .period_bytes_min = BUF_SIZE, /* min size of period in bytes */ -+ .period_bytes_max = DMA_SIZE, /* max size of period in bytes */ -+ .periods_min = 1, /* min nb of periods in buffer */ -+ .periods_max = MAX_BUFS, ++ .buffer_bytes_max = BUFFER_BYTES_MAX, ++ .period_bytes_min = PERIOD_BYTES_MIN, ++ .period_bytes_max = PERIOD_BYTES_MAX, ++ .periods_min = PERIODS_MIN, ++ .periods_max = PERIODS_MAX, + /*.fifo_size = 0,*/ +}; + @@ -9820,11 +12654,11 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + .rate_max = 48000, + .channels_min = 1, + .channels_max = 2, -+ .buffer_bytes_max = DMA_SIZE, /* max DMA buffer size in bytes */ -+ .period_bytes_min = BUF_SIZE, /* min size of period in bytes */ -+ .period_bytes_max = DMA_SIZE, /* max size of period in bytes */ -+ .periods_min = 1, /* min nb of periods in buffer */ -+ .periods_max = MAX_BUFS, ++ .buffer_bytes_max = BUFFER_BYTES_MAX, ++ .period_bytes_min = PERIOD_BYTES_MIN, ++ .period_bytes_max = PERIOD_BYTES_MAX, ++ .periods_min = PERIODS_MIN, ++ .periods_max = PERIODS_MAX, + /*.fifo_size = 0,*/ +}; + @@ -9894,24 +12728,18 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + spin_lock_irq(&chip->lock); + + chip->wave.size = size; -+ chip->wave.count = count; + chip->wave.reg = reg; -+ chip->wave.buf = 0; -+ chip->wave.pos = 0; -+ chip->wave.rate = rt->rate; + chip->wave.addr = rt->dma_addr; + + ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg); + + /* Set sample rates on the codec */ -+ ad1889_writew(chip, AD_DS_WAS, chip->wave.rate); ++ ad1889_writew(chip, AD_DS_WAS, rt->rate); + -+ /* Set up DMA: first chunk address in curr addr, next one in base addr. -+ Base will be loaded into curr by the hardware upon interrupt -+ (as we use LOOP). Count holds the size of the chunk. */ -+ ad1889_writel(chip, AD_DMA_WAVCA, chip->wave.addr); -+ ad1889_writel(chip, AD_DMA_WAVBA, chip->wave.addr + (count % size)); -+ ad1889_load_wave_count(chip, chip->wave.count); ++ /* Set up DMA */ ++ ad1889_load_wave_buffer_address(chip, chip->wave.addr); ++ ad1889_load_wave_buffer_count(chip, size); ++ ad1889_load_wave_interrupt_count(chip, count); + + /* writes flush */ + ad1889_readw(chip, AD_DS_WSMC); @@ -9920,7 +12748,7 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + + ad1889_debug("prepare playback: addr = 0x%x, count = %u, " + "size = %u, reg = 0x%x, rate = %u\n", chip->wave.addr, -+ count, size, reg, chip->wave.rate); ++ count, size, reg, rt->rate); + return 0; +} + @@ -9950,21 +12778,15 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + spin_lock_irq(&chip->lock); + + chip->ramc.size = size; -+ chip->ramc.count = count; + chip->ramc.reg = reg; -+ chip->ramc.buf = 0; -+ chip->ramc.pos = 0; -+ chip->ramc.rate = rt->rate; + chip->ramc.addr = rt->dma_addr; + + ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg); + -+ /* Set up DMA: first chunk address in curr addr, next one in base addr. -+ Base will be loaded into curr by the hardware upon interrupt -+ (as we use LOOP). Count holds the size of the chunk. */ -+ ad1889_writel(chip, AD_DMA_ADCCA, chip->ramc.addr); -+ ad1889_writel(chip, AD_DMA_ADCBA, chip->ramc.addr + (count % size)); -+ ad1889_load_adc_count(chip, chip->ramc.count); ++ /* Set up DMA */ ++ ad1889_load_adc_buffer_address(chip, chip->ramc.addr); ++ ad1889_load_adc_buffer_count(chip, size); ++ ad1889_load_adc_interrupt_count(chip, count); + + /* writes flush */ + ad1889_readw(chip, AD_DS_RAMC); @@ -9973,7 +12795,7 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + + ad1889_debug("prepare capture: addr = 0x%x, count = %u, " + "size = %u, reg = 0x%x, rate = %u\n", chip->ramc.addr, -+ count, size, reg, chip->ramc.rate); ++ count, size, reg, rt->rate); + return 0; +} + @@ -10120,7 +12942,6 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + struct pt_regs *regs) +{ + unsigned long st; -+ unsigned long next; + struct snd_ad1889 *chip = dev_id; + + st = ad1889_readl(chip, AD_DMA_DISR); @@ -10136,82 +12957,12 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + if (st & (AD_DMA_DISR_PMAI|AD_DMA_DISR_PTAI)) + ad1889_debug("Unexpected master or target abort interrupt!\n"); + -+ if (chip->pcm && (st & AD_DMA_DISR_WAVI) && chip->psubs) { -+ spin_lock(&chip->lock); -+ -+ chip->stats.wav_intr++; -+ -+ chip->wave.buf++; -+ -+ /* calculate the current position: we get interrupts everytime -+ the buffer empties, thus every wave.count bytes transfered */ -+ chip->wave.pos += chip->wave.count; -+ chip->wave.pos %= chip->wave.size; -+ -+ /* the next buffer will thus be current position + wave.count -+ bytes away */ -+ next = chip->wave.pos + chip->wave.count; -+ next %= chip->wave.size; -+ -+ /* Load new DMA parameters (aka "the next chunk" in Base -+ registers: upon next interrupt, they'll be automatically -+ loaded in the Current registers, and we'll end up here -+ preparing the new ones. Since "count" never gets modified -+ elsewhere than in _prepare, we don't need to rewrite it. */ -+ ad1889_writel(chip, AD_DMA_WAVBA, chip->wave.addr + next); -+ -+ ad1889_readl(chip, AD_DMA_WAVBA); /* flush all those writes */ -+ -+ spin_unlock(&chip->lock); -+ ++ if ((st & AD_DMA_DISR_WAVI) && chip->psubs) + snd_pcm_period_elapsed(chip->psubs); -+#if 0 -+ ad1889_debug("chip->wave.pos = %d, chip->wave.count = %d, " -+ "chip->wave.size = %d\n", chip->wave.pos, -+ chip->wave.count, chip->wave.size); -+ ad1889_debug("chip->wave.addr (0x%lx) + next (0x%lx) = 0x%lx\n", -+ chip->wave.addr, next, chip->wave.addr + next); -+#endif -+ } -+ -+ if (chip->pcm && (st & AD_DMA_DISR_ADCI) && chip->csubs) { -+ spin_lock(&chip->lock); -+ -+ chip->stats.adc_intr++; -+ -+ chip->ramc.buf++; -+ -+ /* calculate the current position: we get interrupts everytime -+ the buffer empties, thus every wave.count bytes transfered */ -+ chip->ramc.pos += chip->ramc.count; -+ chip->ramc.pos %= chip->ramc.size; -+ -+ /* the next buffer will thus be current position + wave.count -+ bytes away */ -+ next = chip->ramc.pos + chip->ramc.count; -+ next %= chip->ramc.size; -+ -+ /* Load new DMA parameters (aka "the next chunk" in Base -+ registers: upon next interrupt, they'll be automatically -+ loaded in the Current registers, and we'll end up here -+ preparing the new ones. Since "count" never gets modified -+ elsewhere than in _prepare, we don't need to rewrite it. */ -+ ad1889_writel(chip, AD_DMA_ADCBA, chip->ramc.addr + next); -+ -+ ad1889_readl(chip, AD_DMA_ADCBA); /* flush all those writes */ -+ -+ spin_unlock(&chip->lock); -+ ++ if ((st & AD_DMA_DISR_ADCI) && chip->csubs) + snd_pcm_period_elapsed(chip->csubs); -+#if 0 -+ ad1889_debug("chip->ramc.pos = %d, chip->ramc.count = %d, " -+ "chip->ramc.size = %d\n", chip->ramc.pos, -+ chip->ramc.count, chip->ramc.size); -+ ad1889_debug("chip->ramc.addr (0x%lx) + next (0x%lx) = 0x%lx\n", -+ chip->ramc.addr, next, chip->ramc.addr + next); -+#endif -+ } + ++ ad1889_readl(chip, AD_DMA_DISR); /* flush */ + /* XXX under some circumstances the DISR write flush may not happen */ + + return IRQ_HANDLED; @@ -10257,7 +13008,8 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + + err = snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, + snd_dma_pci_data(chip->pci), -+ DMA_SIZE, DMA_SIZE); ++ BUFFER_BYTES_MAX / 2, ++ BUFFER_BYTES_MAX); + + if (err < 0) { + snd_printk(KERN_ERR PFX "buffer allocation error: %d\n", err); @@ -10362,8 +13114,8 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + +static struct ac97_quirk ac97_quirks[] = { + { -+ .vendor = 0x11d4, /* AD */ -+ .device = 0x1889, /* AD1889 */ ++ .subvendor = 0x11d4, /* AD */ ++ .subdevice = 0x1889, /* AD1889 */ + .codec_id = AC97_ID_AD1819, + .name = "AD1889", + .type = AC97_TUNE_HP_ONLY @@ -10715,11 +13467,10 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.c + +module_init(alsa_ad1889_init); +module_exit(alsa_ad1889_fini); -Index: linux-2.6-2.6.12/sound/pci/ad1889.h -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6-2.6.12/sound/pci/ad1889.h 2005-08-09 17:53:36.000000000 -0400 -@@ -0,0 +1,187 @@ +diff -Nur linux-2.6.13.org/sound/pci/ad1889.h linux-2.6.13/sound/pci/ad1889.h +--- linux-2.6.13.org/sound/pci/ad1889.h 1969-12-31 19:00:00.000000000 -0500 ++++ linux-2.6.13/sound/pci/ad1889.h 2005-09-25 12:34:40.000000000 -0400 +@@ -0,0 +1,189 @@ +/* Analog Devices 1889 audio driver + * Copyright (C) 2004, Kyle McMartin + */ @@ -10894,16 +13645,18 @@ Index: linux-2.6-2.6.12/sound/pci/ad1889.h +#define AD_ADC_STATE 1 +#define AD_MAX_STATES 2 + -+/* " T-Bone: parisc IOMMU can start DMA at any address. -+ But the IOMMU can only map at page size granularity." -+ This affects in particular .period_bytes_min */ -+#define BUF_SIZE PAGE_SIZE -+#define MAX_BUFS 32 -+#define DMA_SIZE (MAX_BUFS*BUF_SIZE) -+ +#define AD_CHAN_WAV 0x0001 +#define AD_CHAN_ADC 0x0002 +#define AD_CHAN_RES 0x0004 +#define AD_CHAN_SYN 0x0008 + ++ ++/* The chip would support 4 GB buffers and 16 MB periods, ++ * but let's not overdo it ... */ ++#define BUFFER_BYTES_MAX (256 * 1024) ++#define PERIOD_BYTES_MIN 32 ++#define PERIOD_BYTES_MAX (BUFFER_BYTES_MAX / 2) ++#define PERIODS_MIN 2 ++#define PERIODS_MAX (BUFFER_BYTES_MAX / PERIOD_BYTES_MIN) ++ +#endif /* __AD1889_H__ */