summaryrefslogtreecommitdiff
path: root/packages/linux/linux-tornado-omap2
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-tornado-omap2')
-rw-r--r--packages/linux/linux-tornado-omap2/htctornado/defconfig897
-rw-r--r--packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch5134
-rw-r--r--packages/linux/linux-tornado-omap2/tornado-20070320.patch6081
3 files changed, 0 insertions, 12112 deletions
diff --git a/packages/linux/linux-tornado-omap2/htctornado/defconfig b/packages/linux/linux-tornado-omap2/htctornado/defconfig
deleted file mode 100644
index ec67393992..0000000000
--- a/packages/linux/linux-tornado-omap2/htctornado/defconfig
+++ /dev/null
@@ -1,897 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16.16-omap2
-# Thu Apr 12 17:14:27 2007
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-# CONFIG_SYSVIPC is not set
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-# CONFIG_BASE_FULL is not set
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=1
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-CONFIG_ARCH_OMAP=y
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# TI OMAP Implementations
-#
-CONFIG_ARCH_OMAP_OTG=y
-CONFIG_ARCH_OMAP1=y
-# CONFIG_ARCH_OMAP2 is not set
-
-#
-# OMAP Feature Selections
-#
-# CONFIG_OMAP_RESET_CLOCKS is not set
-# CONFIG_OMAP_BOOT_TAG is not set
-# CONFIG_OMAP_MUX is not set
-CONFIG_OMAP_MPU_TIMER=y
-# CONFIG_OMAP_32K_TIMER is not set
-CONFIG_OMAP_LL_DEBUG_UART1=y
-# CONFIG_OMAP_LL_DEBUG_UART2 is not set
-# CONFIG_OMAP_LL_DEBUG_UART3 is not set
-
-#
-# OMAP Core Type
-#
-CONFIG_ARCH_OMAP730=y
-# CONFIG_ARCH_OMAP15XX is not set
-# CONFIG_ARCH_OMAP16XX is not set
-
-#
-# OMAP Board Type
-#
-# CONFIG_MACH_OMAP_PERSEUS2 is not set
-
-#
-# OMAP CPU Speed
-#
-# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
-CONFIG_OMAP_ARM_195MHZ=y
-# CONFIG_OMAP_ARM_182MHZ is not set
-# CONFIG_OMAP_ARM_168MHZ is not set
-# CONFIG_OMAP_ARM_120MHZ is not set
-# CONFIG_OMAP_ARM_60MHZ is not set
-# CONFIG_OMAP_ARM_30MHZ is not set
-CONFIG_MACH_TORNADO=y
-CONFIG_EFB_DEBUG=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-# CONFIG_ARM_THUMB is not set
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_KEXEC=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE 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_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-# CONFIG_VFP is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-CONFIG_NET_KEY=y
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# 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 is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE 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_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC 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
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED 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
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=1
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-# CONFIG_NETDEVICES is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_PPP is not set
-# CONFIG_SLIP 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
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG 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_OMAP is not set
-CONFIG_TORNADO_KEYPAD=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_OMAP730_WATCHDOG=y
-CONFIG_TORNADO_VIBRATOR=y
-CONFIG_TORNADO_LEDS=y
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_OMAP_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_OMAP is not set
-CONFIG_FB_VSFB=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-CONFIG_FONT_6x11=y
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_TORNADO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-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_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=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
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_OMAP_AIC23 is not set
-# CONFIG_SND_OMAP_TSC2101 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-CONFIG_USB_GADGET_DEBUG_FILES=y
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-CONFIG_USB_GADGET_OMAP=y
-CONFIG_USB_OMAP=y
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-# CONFIG_USB_ETH_RNDIS is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
-# CONFIG_MMC_BULKTRANSFER is not set
-CONFIG_MMC_OMAP=y
-
-#
-# Synchronous Serial Interfaces (SSI)
-#
-# CONFIG_OMAP_UWIRE is not set
-# CONFIG_OMAP_TSC2101 is not set
-
-#
-# CBUS support
-#
-# CONFIG_CBUS is not set
-
-#
-# 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
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
-# CONFIG_INOTIFY is not set
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-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 is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# 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
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=m
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# 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
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-# CONFIG_SECURITY_NETWORK_XFRM is not set
-# CONFIG_SECURITY_CAPABILITIES is not set
-# CONFIG_SECURITY_SECLVL is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
diff --git a/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch b/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch
deleted file mode 100644
index ff0aaaac27..0000000000
--- a/packages/linux/linux-tornado-omap2/linux-2.6.16.16.patch
+++ /dev/null
@@ -1,5134 +0,0 @@
-diff -Naur linux-2.6.16/arch/alpha/kernel/setup.c linux-2.6.16.16/arch/alpha/kernel/setup.c
---- linux-2.6.16/arch/alpha/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/alpha/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
-@@ -24,6 +24,7 @@
- #include <linux/config.h> /* CONFIG_ALPHA_LCA etc */
- #include <linux/mc146818rtc.h>
- #include <linux/console.h>
-+#include <linux/cpu.h>
- #include <linux/errno.h>
- #include <linux/init.h>
- #include <linux/string.h>
-@@ -477,6 +478,22 @@
- #undef PFN_PHYS
- #undef PFN_MAX
-
-+static int __init
-+register_cpus(void)
-+{
-+ int i;
-+
-+ for_each_possible_cpu(i) {
-+ struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
-+ if (!p)
-+ return -ENOMEM;
-+ register_cpu(p, i, NULL);
-+ }
-+ return 0;
-+}
-+
-+arch_initcall(register_cpus);
-+
- void __init
- setup_arch(char **cmdline_p)
- {
-diff -Naur linux-2.6.16/arch/alpha/kernel/smp.c linux-2.6.16.16/arch/alpha/kernel/smp.c
---- linux-2.6.16/arch/alpha/kernel/smp.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/alpha/kernel/smp.c 2006-05-11 04:56:24.000000000 +0300
-@@ -439,7 +439,7 @@
- if ((cpu->flags & 0x1cc) == 0x1cc) {
- smp_num_probed++;
- /* Assume here that "whami" == index */
-- cpu_set(i, cpu_possible_map);
-+ cpu_set(i, cpu_present_mask);
- cpu->pal_revision = boot_cpu_palrev;
- }
-
-@@ -450,9 +450,8 @@
- }
- } else {
- smp_num_probed = 1;
-- cpu_set(boot_cpuid, cpu_possible_map);
-+ cpu_set(boot_cpuid, cpu_present_mask);
- }
-- cpu_present_mask = cpumask_of_cpu(boot_cpuid);
-
- printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
- smp_num_probed, cpu_possible_map.bits[0]);
-@@ -488,9 +487,8 @@
- smp_prepare_boot_cpu(void)
- {
- /*
-- * Mark the boot cpu (current cpu) as both present and online
-+ * Mark the boot cpu (current cpu) as online
- */
-- cpu_set(smp_processor_id(), cpu_present_mask);
- cpu_set(smp_processor_id(), cpu_online_map);
- }
-
-diff -Naur linux-2.6.16/arch/alpha/lib/strncpy.S linux-2.6.16.16/arch/alpha/lib/strncpy.S
---- linux-2.6.16/arch/alpha/lib/strncpy.S 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/alpha/lib/strncpy.S 2006-05-11 04:56:24.000000000 +0300
-@@ -43,8 +43,8 @@
-
- .align 4
- $multiword:
-- subq $24, 1, $2 # clear the final bits in the prev word
-- or $2, $24, $2
-+ subq $27, 1, $2 # clear the final bits in the prev word
-+ or $2, $27, $2
- zapnot $1, $2, $1
- subq $18, 1, $18
-
-@@ -70,8 +70,8 @@
- bne $18, 0b
-
- 1: ldq_u $1, 0($16) # clear the leading bits in the final word
-- subq $27, 1, $2
-- or $2, $27, $2
-+ subq $24, 1, $2
-+ or $2, $24, $2
-
- zap $1, $2, $1
- stq_u $1, 0($16)
-diff -Naur linux-2.6.16/arch/i386/kernel/apm.c linux-2.6.16.16/arch/i386/kernel/apm.c
---- linux-2.6.16/arch/i386/kernel/apm.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/apm.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1081,7 +1081,7 @@
- break;
- }
-
-- if (error == APM_NOT_ENGAGED && state != APM_STATE_READY) {
-+ if (error == APM_NOT_ENGAGED) {
- static int tried;
- int eng_error;
- if (tried++ == 0) {
-diff -Naur linux-2.6.16/arch/i386/kernel/cpu/amd.c linux-2.6.16.16/arch/i386/kernel/cpu/amd.c
---- linux-2.6.16/arch/i386/kernel/cpu/amd.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/cpu/amd.c 2006-05-11 04:56:24.000000000 +0300
-@@ -207,6 +207,8 @@
- set_bit(X86_FEATURE_K7, c->x86_capability);
- break;
- }
-+ if (c->x86 >= 6)
-+ set_bit(X86_FEATURE_FXSAVE_LEAK, c->x86_capability);
-
- display_cacheinfo(c);
-
-diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/Kconfig linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/Kconfig
---- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/Kconfig 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/Kconfig 2006-05-11 04:56:24.000000000 +0300
-@@ -203,6 +203,7 @@
- config X86_LONGHAUL
- tristate "VIA Cyrix III Longhaul"
- select CPU_FREQ_TABLE
-+ depends on BROKEN
- help
- This adds the CPUFreq driver for VIA Samuel/CyrixIII,
- VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T
-diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
---- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/p4-clockmod.c 2006-05-11 04:56:24.000000000 +0300
-@@ -244,7 +244,7 @@
- for (i=1; (p4clockmod_table[i].frequency != CPUFREQ_TABLE_END); i++) {
- if ((i<2) && (has_N44_O17_errata[policy->cpu]))
- p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
-- else if (has_N60_errata[policy->cpu] && p4clockmod_table[i].frequency < 2000000)
-+ else if (has_N60_errata[policy->cpu] && ((stock_freq * i)/8) < 2000000)
- p4clockmod_table[i].frequency = CPUFREQ_ENTRY_INVALID;
- else
- p4clockmod_table[i].frequency = (stock_freq * i)/8;
-diff -Naur linux-2.6.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
---- linux-2.6.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c 2006-05-11 04:56:24.000000000 +0300
-@@ -75,7 +75,9 @@
- __asm__ __volatile__(
- "out %%al, (%%dx)\n"
- : "=D" (result)
-- : "a" (command), "b" (function), "c" (0), "d" (smi_port), "D" (0), "S" (magic)
-+ : "a" (command), "b" (function), "c" (0), "d" (smi_port),
-+ "D" (0), "S" (magic)
-+ : "memory"
- );
-
- dprintk("result is %x\n", result);
-diff -Naur linux-2.6.16/arch/i386/kernel/dmi_scan.c linux-2.6.16.16/arch/i386/kernel/dmi_scan.c
---- linux-2.6.16/arch/i386/kernel/dmi_scan.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/dmi_scan.c 2006-05-11 04:56:24.000000000 +0300
-@@ -106,7 +106,7 @@
- struct dmi_device *dev;
-
- for (i = 0; i < count; i++) {
-- char *d = ((char *) dm) + (i * 2);
-+ char *d = (char *)(dm + 1) + (i * 2);
-
- /* Skip disabled device */
- if ((*d & 0x80) == 0)
-diff -Naur linux-2.6.16/arch/i386/kernel/vm86.c linux-2.6.16.16/arch/i386/kernel/vm86.c
---- linux-2.6.16/arch/i386/kernel/vm86.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/i386/kernel/vm86.c 2006-05-11 04:56:24.000000000 +0300
-@@ -43,6 +43,7 @@
- #include <linux/smp_lock.h>
- #include <linux/highmem.h>
- #include <linux/ptrace.h>
-+#include <linux/audit.h>
-
- #include <asm/uaccess.h>
- #include <asm/io.h>
-@@ -252,6 +253,7 @@
- static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk)
- {
- struct tss_struct *tss;
-+ long eax;
- /*
- * make sure the vm86() system call doesn't try to do anything silly
- */
-@@ -305,13 +307,19 @@
- tsk->thread.screen_bitmap = info->screen_bitmap;
- if (info->flags & VM86_SCREEN_BITMAP)
- mark_screen_rdonly(tsk->mm);
-+ __asm__ __volatile__("xorl %eax,%eax; movl %eax,%fs; movl %eax,%gs\n\t");
-+ __asm__ __volatile__("movl %%eax, %0\n" :"=r"(eax));
-+
-+ /*call audit_syscall_exit since we do not exit via the normal paths */
-+ if (unlikely(current->audit_context))
-+ audit_syscall_exit(current, AUDITSC_RESULT(eax), eax);
-+
- __asm__ __volatile__(
-- "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs\n\t"
- "movl %0,%%esp\n\t"
- "movl %1,%%ebp\n\t"
- "jmp resume_userspace"
- : /* no outputs */
-- :"r" (&info->regs), "r" (task_thread_info(tsk)) : "ax");
-+ :"r" (&info->regs), "r" (task_thread_info(tsk)));
- /* we never return here */
- }
-
-diff -Naur linux-2.6.16/arch/m32r/kernel/m32r_ksyms.c linux-2.6.16.16/arch/m32r/kernel/m32r_ksyms.c
---- linux-2.6.16/arch/m32r/kernel/m32r_ksyms.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/kernel/m32r_ksyms.c 2006-05-11 04:56:24.000000000 +0300
-@@ -38,10 +38,6 @@
- EXPORT_SYMBOL(__delay);
- EXPORT_SYMBOL(__const_udelay);
-
--EXPORT_SYMBOL(__get_user_1);
--EXPORT_SYMBOL(__get_user_2);
--EXPORT_SYMBOL(__get_user_4);
--
- EXPORT_SYMBOL(strpbrk);
- EXPORT_SYMBOL(strstr);
-
-diff -Naur linux-2.6.16/arch/m32r/kernel/setup.c linux-2.6.16.16/arch/m32r/kernel/setup.c
---- linux-2.6.16/arch/m32r/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
-@@ -9,6 +9,7 @@
-
- #include <linux/config.h>
- #include <linux/init.h>
-+#include <linux/kernel.h>
- #include <linux/stddef.h>
- #include <linux/fs.h>
- #include <linux/sched.h>
-@@ -218,8 +219,6 @@
- extern unsigned long setup_memory(void);
- #endif /* CONFIG_DISCONTIGMEM */
-
--#define M32R_PCC_PCATCR 0x00ef7014 /* will move to m32r.h */
--
- void __init setup_arch(char **cmdline_p)
- {
- ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
-@@ -268,15 +267,14 @@
- paging_init();
- }
-
--static struct cpu cpu[NR_CPUS];
-+static struct cpu cpu_devices[NR_CPUS];
-
- static int __init topology_init(void)
- {
-- int cpu_id;
-+ int i;
-
-- for (cpu_id = 0; cpu_id < NR_CPUS; cpu_id++)
-- if (cpu_possible(cpu_id))
-- register_cpu(&cpu[cpu_id], cpu_id, NULL);
-+ for_each_present_cpu(i)
-+ register_cpu(&cpu_devices[i], i, NULL);
-
- return 0;
- }
-diff -Naur linux-2.6.16/arch/m32r/kernel/smpboot.c linux-2.6.16.16/arch/m32r/kernel/smpboot.c
---- linux-2.6.16/arch/m32r/kernel/smpboot.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/kernel/smpboot.c 2006-05-11 04:56:24.000000000 +0300
-@@ -39,8 +39,10 @@
- * Martin J. Bligh : Added support for multi-quad systems
- */
-
-+#include <linux/module.h>
- #include <linux/config.h>
- #include <linux/init.h>
-+#include <linux/kernel.h>
- #include <linux/mm.h>
- #include <linux/smp_lock.h>
- #include <linux/irq.h>
-@@ -72,11 +74,15 @@
-
- /* Bitmask of currently online CPUs */
- cpumask_t cpu_online_map;
-+EXPORT_SYMBOL(cpu_online_map);
-
- cpumask_t cpu_bootout_map;
- cpumask_t cpu_bootin_map;
--cpumask_t cpu_callout_map;
- static cpumask_t cpu_callin_map;
-+cpumask_t cpu_callout_map;
-+EXPORT_SYMBOL(cpu_callout_map);
-+cpumask_t cpu_possible_map = CPU_MASK_ALL;
-+EXPORT_SYMBOL(cpu_possible_map);
-
- /* Per CPU bogomips and other parameters */
- struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned;
-@@ -110,7 +116,6 @@
-
- void smp_prepare_boot_cpu(void);
- void smp_prepare_cpus(unsigned int);
--static void smp_tune_scheduling(void);
- static void init_ipi_lock(void);
- static void do_boot_cpu(int);
- int __cpu_up(unsigned int);
-@@ -177,6 +182,9 @@
- }
- for (phys_id = 0 ; phys_id < nr_cpu ; phys_id++)
- physid_set(phys_id, phys_cpu_present_map);
-+#ifndef CONFIG_HOTPLUG_CPU
-+ cpu_present_map = cpu_possible_map;
-+#endif
-
- show_mp_info(nr_cpu);
-
-@@ -186,7 +194,6 @@
- * Setup boot CPU information
- */
- smp_store_cpu_info(0); /* Final full version of the data */
-- smp_tune_scheduling();
-
- /*
- * If SMP should be disabled, then really disable it!
-@@ -230,11 +237,6 @@
- Dprintk("Boot done.\n");
- }
-
--static void __init smp_tune_scheduling(void)
--{
-- /* Nothing to do. */
--}
--
- /*
- * init_ipi_lock : Initialize IPI locks.
- */
-@@ -629,4 +631,3 @@
- physid_2_cpu[phys_id] = -1;
- cpu_2_physid[cpu_id] = -1;
- }
--
-diff -Naur linux-2.6.16/arch/m32r/lib/getuser.S linux-2.6.16.16/arch/m32r/lib/getuser.S
---- linux-2.6.16/arch/m32r/lib/getuser.S 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/lib/getuser.S 1970-01-01 02:00:00.000000000 +0200
-@@ -1,88 +0,0 @@
--/*
-- * __get_user functions.
-- *
-- * (C) Copyright 2001 Hirokazu Takata
-- *
-- * These functions have a non-standard call interface
-- * to make them more efficient, especially as they
-- * return an error value in addition to the "real"
-- * return value.
-- */
--
--#include <linux/config.h>
--
--/*
-- * __get_user_X
-- *
-- * Inputs: r0 contains the address
-- *
-- * Outputs: r0 is error code (0 or -EFAULT)
-- * r1 contains zero-extended value
-- *
-- * These functions should not modify any other registers,
-- * as they get called from within inline assembly.
-- */
--
--#ifdef CONFIG_ISA_DUAL_ISSUE
--
-- .text
-- .balign 4
-- .globl __get_user_1
--__get_user_1:
--1: ldub r1, @r0 || ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __get_user_2
--__get_user_2:
--2: lduh r1, @r0 || ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __get_user_4
--__get_user_4:
--3: ld r1, @r0 || ldi r0, #0
-- jmp r14
--
--bad_get_user:
-- ldi r1, #0 || ldi r0, #-14
-- jmp r14
--
--#else /* not CONFIG_ISA_DUAL_ISSUE */
--
-- .text
-- .balign 4
-- .globl __get_user_1
--__get_user_1:
--1: ldub r1, @r0
-- ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __get_user_2
--__get_user_2:
--2: lduh r1, @r0
-- ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __get_user_4
--__get_user_4:
--3: ld r1, @r0
-- ldi r0, #0
-- jmp r14
--
--bad_get_user:
-- ldi r1, #0
-- ldi r0, #-14
-- jmp r14
--
--#endif /* not CONFIG_ISA_DUAL_ISSUE */
--
--.section __ex_table,"a"
-- .long 1b,bad_get_user
-- .long 2b,bad_get_user
-- .long 3b,bad_get_user
--.previous
--
-- .end
-diff -Naur linux-2.6.16/arch/m32r/lib/Makefile linux-2.6.16.16/arch/m32r/lib/Makefile
---- linux-2.6.16/arch/m32r/lib/Makefile 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/lib/Makefile 2006-05-11 04:56:24.000000000 +0300
-@@ -2,6 +2,6 @@
- # Makefile for M32R-specific library files..
- #
-
--lib-y := checksum.o ashxdi3.o memset.o memcpy.o getuser.o \
-- putuser.o delay.o strlen.o usercopy.o csum_partial_copy.o
-+lib-y := checksum.o ashxdi3.o memset.o memcpy.o \
-+ delay.o strlen.o usercopy.o csum_partial_copy.o
-
-diff -Naur linux-2.6.16/arch/m32r/lib/putuser.S linux-2.6.16.16/arch/m32r/lib/putuser.S
---- linux-2.6.16/arch/m32r/lib/putuser.S 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/m32r/lib/putuser.S 1970-01-01 02:00:00.000000000 +0200
-@@ -1,84 +0,0 @@
--/*
-- * __put_user functions.
-- *
-- * (C) Copyright 1998 Linus Torvalds
-- * (C) Copyright 2001 Hirokazu Takata
-- *
-- * These functions have a non-standard call interface
-- * to make them more efficient.
-- */
--
--#include <linux/config.h>
--
--/*
-- * __put_user_X
-- *
-- * Inputs: r0 contains the address
-- * r1 contains the value
-- *
-- * Outputs: r0 is error code (0 or -EFAULT)
-- * r1 is corrupted (will contain "current_task").
-- *
-- * These functions should not modify any other registers,
-- * as they get called from within inline assembly.
-- */
--
--#ifdef CONFIG_ISA_DUAL_ISSUE
--
-- .text
-- .balign 4
-- .globl __put_user_1
--__put_user_1:
--1: stb r1, @r0 || ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __put_user_2
--__put_user_2:
--2: sth r1, @r0 || ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __put_user_4
--__put_user_4:
--3: st r1, @r0 || ldi r0, #0
-- jmp r14
--
--bad_put_user:
-- ldi r0, #-14 || jmp r14
--
--#else /* not CONFIG_ISA_DUAL_ISSUE */
--
-- .text
-- .balign 4
-- .globl __put_user_1
--__put_user_1:
--1: stb r1, @r0
-- ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __put_user_2
--__put_user_2:
--2: sth r1, @r0
-- ldi r0, #0
-- jmp r14
--
-- .balign 4
-- .globl __put_user_4
--__put_user_4:
--3: st r1, @r0
-- ldi r0, #0
-- jmp r14
--
--bad_put_user:
-- ldi r0, #-14
-- jmp r14
--
--#endif /* not CONFIG_ISA_DUAL_ISSUE */
--
--.section __ex_table,"a"
-- .long 1b,bad_put_user
-- .long 2b,bad_put_user
-- .long 3b,bad_put_user
--.previous
-diff -Naur linux-2.6.16/arch/mips/kernel/branch.c linux-2.6.16.16/arch/mips/kernel/branch.c
---- linux-2.6.16/arch/mips/kernel/branch.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/mips/kernel/branch.c 2006-05-11 04:56:24.000000000 +0300
-@@ -184,7 +184,7 @@
- bit = (insn.i_format.rt >> 2);
- bit += (bit != 0);
- bit += 23;
-- switch (insn.i_format.rt) {
-+ switch (insn.i_format.rt & 3) {
- case 0: /* bc1f */
- case 2: /* bc1fl */
- if (~fcr31 & (1 << bit))
-diff -Naur linux-2.6.16/arch/mips/mm/c-r4k.c linux-2.6.16.16/arch/mips/mm/c-r4k.c
---- linux-2.6.16/arch/mips/mm/c-r4k.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/mips/mm/c-r4k.c 2006-05-11 04:56:24.000000000 +0300
-@@ -154,7 +154,8 @@
-
- static inline void tx49_blast_icache32_page_indexed(unsigned long page)
- {
-- unsigned long start = page;
-+ unsigned long indexmask = current_cpu_data.icache.waysize - 1;
-+ unsigned long start = INDEX_BASE + (page & indexmask);
- unsigned long end = start + PAGE_SIZE;
- unsigned long ws_inc = 1UL << current_cpu_data.icache.waybit;
- unsigned long ws_end = current_cpu_data.icache.ways <<
-diff -Naur linux-2.6.16/arch/powerpc/kernel/pci_64.c linux-2.6.16.16/arch/powerpc/kernel/pci_64.c
---- linux-2.6.16/arch/powerpc/kernel/pci_64.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/powerpc/kernel/pci_64.c 2006-05-11 04:56:24.000000000 +0300
-@@ -78,6 +78,7 @@
-
- /* Cached ISA bridge dev. */
- struct pci_dev *ppc64_isabridge_dev = NULL;
-+EXPORT_SYMBOL_GPL(ppc64_isabridge_dev);
-
- static void fixup_broken_pcnet32(struct pci_dev* dev)
- {
-diff -Naur linux-2.6.16/arch/powerpc/kernel/setup_64.c linux-2.6.16.16/arch/powerpc/kernel/setup_64.c
---- linux-2.6.16/arch/powerpc/kernel/setup_64.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/powerpc/kernel/setup_64.c 2006-05-11 04:56:24.000000000 +0300
-@@ -256,12 +256,10 @@
- /*
- * Initialize stab / SLB management except on iSeries
- */
-- if (!firmware_has_feature(FW_FEATURE_ISERIES)) {
-- if (cpu_has_feature(CPU_FTR_SLB))
-- slb_initialize();
-- else
-- stab_initialize(lpaca->stab_real);
-- }
-+ if (cpu_has_feature(CPU_FTR_SLB))
-+ slb_initialize();
-+ else if (!firmware_has_feature(FW_FEATURE_ISERIES))
-+ stab_initialize(lpaca->stab_real);
-
- DBG(" <- early_setup()\n");
- }
-diff -Naur linux-2.6.16/arch/powerpc/kernel/signal_64.c linux-2.6.16.16/arch/powerpc/kernel/signal_64.c
---- linux-2.6.16/arch/powerpc/kernel/signal_64.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/powerpc/kernel/signal_64.c 2006-05-11 04:56:24.000000000 +0300
-@@ -213,7 +213,7 @@
- /* Default to using normal stack */
- newsp = regs->gpr[1];
-
-- if (ka->sa.sa_flags & SA_ONSTACK) {
-+ if ((ka->sa.sa_flags & SA_ONSTACK) && current->sas_ss_size) {
- if (! on_sig_stack(regs->gpr[1]))
- newsp = (current->sas_ss_sp + current->sas_ss_size);
- }
-diff -Naur linux-2.6.16/arch/x86_64/ia32/Makefile linux-2.6.16.16/arch/x86_64/ia32/Makefile
---- linux-2.6.16/arch/x86_64/ia32/Makefile 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/x86_64/ia32/Makefile 2006-05-11 04:56:24.000000000 +0300
-@@ -27,5 +27,5 @@
- $(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
- $(call if_changed,syscall)
-
--AFLAGS_vsyscall-sysenter.o = -m32
--AFLAGS_vsyscall-syscall.o = -m32
-+AFLAGS_vsyscall-sysenter.o = -m32 -Wa,-32
-+AFLAGS_vsyscall-syscall.o = -m32 -Wa,-32
-diff -Naur linux-2.6.16/arch/x86_64/kernel/entry.S linux-2.6.16.16/arch/x86_64/kernel/entry.S
---- linux-2.6.16/arch/x86_64/kernel/entry.S 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/x86_64/kernel/entry.S 2006-05-11 04:56:24.000000000 +0300
-@@ -180,6 +180,10 @@
- *
- * XXX if we had a free scratch register we could save the RSP into the stack frame
- * and report it properly in ps. Unfortunately we haven't.
-+ *
-+ * When user can change the frames always force IRET. That is because
-+ * it deals with uncanonical addresses better. SYSRET has trouble
-+ * with them due to bugs in both AMD and Intel CPUs.
- */
-
- ENTRY(system_call)
-@@ -254,7 +258,10 @@
- xorl %esi,%esi # oldset -> arg2
- call ptregscall_common
- 1: movl $_TIF_NEED_RESCHED,%edi
-- jmp sysret_check
-+ /* Use IRET because user could have changed frame. This
-+ works because ptregscall_common has called FIXUP_TOP_OF_STACK. */
-+ cli
-+ jmp int_with_check
-
- badsys:
- movq $-ENOSYS,RAX-ARGOFFSET(%rsp)
-@@ -280,7 +287,8 @@
- call syscall_trace_leave
- RESTORE_TOP_OF_STACK %rbx
- RESTORE_REST
-- jmp ret_from_sys_call
-+ /* Use IRET because user could have changed frame */
-+ jmp int_ret_from_sys_call
- CFI_ENDPROC
-
- /*
-@@ -408,25 +416,9 @@
- CFI_ADJUST_CFA_OFFSET -8
- CFI_REGISTER rip, r11
- SAVE_REST
-- movq %r11, %r15
-- CFI_REGISTER rip, r15
- FIXUP_TOP_OF_STACK %r11
- call sys_execve
-- GET_THREAD_INFO(%rcx)
-- bt $TIF_IA32,threadinfo_flags(%rcx)
-- CFI_REMEMBER_STATE
-- jc exec_32bit
- RESTORE_TOP_OF_STACK %r11
-- movq %r15, %r11
-- CFI_REGISTER rip, r11
-- RESTORE_REST
-- pushq %r11
-- CFI_ADJUST_CFA_OFFSET 8
-- CFI_REL_OFFSET rip, 0
-- ret
--
--exec_32bit:
-- CFI_RESTORE_STATE
- movq %rax,RAX(%rsp)
- RESTORE_REST
- jmp int_ret_from_sys_call
-diff -Naur linux-2.6.16/arch/x86_64/kernel/pci-gart.c linux-2.6.16.16/arch/x86_64/kernel/pci-gart.c
---- linux-2.6.16/arch/x86_64/kernel/pci-gart.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/x86_64/kernel/pci-gart.c 2006-05-11 04:56:24.000000000 +0300
-@@ -114,10 +114,6 @@
- static void free_iommu(unsigned long offset, int size)
- {
- unsigned long flags;
-- if (size == 1) {
-- clear_bit(offset, iommu_gart_bitmap);
-- return;
-- }
- spin_lock_irqsave(&iommu_bitmap_lock, flags);
- __clear_bit_string(iommu_gart_bitmap, offset, size);
- spin_unlock_irqrestore(&iommu_bitmap_lock, flags);
-diff -Naur linux-2.6.16/arch/x86_64/kernel/process.c linux-2.6.16.16/arch/x86_64/kernel/process.c
---- linux-2.6.16/arch/x86_64/kernel/process.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/x86_64/kernel/process.c 2006-05-11 04:56:24.000000000 +0300
-@@ -527,8 +527,6 @@
- int cpu = smp_processor_id();
- struct tss_struct *tss = &per_cpu(init_tss, cpu);
-
-- unlazy_fpu(prev_p);
--
- /*
- * Reload esp0, LDT and the page table pointer:
- */
-@@ -591,6 +589,12 @@
- prev->userrsp = read_pda(oldrsp);
- write_pda(oldrsp, next->userrsp);
- write_pda(pcurrent, next_p);
-+
-+ /* This must be here to ensure both math_state_restore() and
-+ kernel_fpu_begin() work consistently.
-+ And the AMD workaround requires it to be after DS reload. */
-+ unlazy_fpu(prev_p);
-+
- write_pda(kernelstack,
- task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET);
-
-diff -Naur linux-2.6.16/arch/x86_64/kernel/setup.c linux-2.6.16.16/arch/x86_64/kernel/setup.c
---- linux-2.6.16/arch/x86_64/kernel/setup.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/arch/x86_64/kernel/setup.c 2006-05-11 04:56:24.000000000 +0300
-@@ -909,6 +909,10 @@
- if (c->x86 == 15 && ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58))
- set_bit(X86_FEATURE_REP_GOOD, &c->x86_capability);
-
-+ /* Enable workaround for FXSAVE leak */
-+ if (c->x86 >= 6)
-+ set_bit(X86_FEATURE_FXSAVE_LEAK, &c->x86_capability);
-+
- r = get_model_name(c);
- if (!r) {
- switch (c->x86) {
-diff -Naur linux-2.6.16/block/genhd.c linux-2.6.16.16/block/genhd.c
---- linux-2.6.16/block/genhd.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/block/genhd.c 2006-05-11 04:56:24.000000000 +0300
-@@ -16,8 +16,6 @@
- #include <linux/kobj_map.h>
- #include <linux/buffer_head.h>
-
--#define MAX_PROBE_HASH 255 /* random */
--
- static struct subsystem block_subsys;
-
- static DECLARE_MUTEX(block_subsys_sem);
-@@ -30,108 +28,29 @@
- struct blk_major_name *next;
- int major;
- char name[16];
--} *major_names[MAX_PROBE_HASH];
-+} *major_names[BLKDEV_MAJOR_HASH_SIZE];
-
- /* index in the above - for now: assume no multimajor ranges */
- static inline int major_to_index(int major)
- {
-- return major % MAX_PROBE_HASH;
--}
--
--struct blkdev_info {
-- int index;
-- struct blk_major_name *bd;
--};
--
--/*
-- * iterate over a list of blkdev_info structures. allows
-- * the major_names array to be iterated over from outside this file
-- * must be called with the block_subsys_sem held
-- */
--void *get_next_blkdev(void *dev)
--{
-- struct blkdev_info *info;
--
-- if (dev == NULL) {
-- info = kmalloc(sizeof(*info), GFP_KERNEL);
-- if (!info)
-- goto out;
-- info->index=0;
-- info->bd = major_names[info->index];
-- if (info->bd)
-- goto out;
-- } else {
-- info = dev;
-- }
--
-- while (info->index < ARRAY_SIZE(major_names)) {
-- if (info->bd)
-- info->bd = info->bd->next;
-- if (info->bd)
-- goto out;
-- /*
-- * No devices on this chain, move to the next
-- */
-- info->index++;
-- info->bd = (info->index < ARRAY_SIZE(major_names)) ?
-- major_names[info->index] : NULL;
-- if (info->bd)
-- goto out;
-- }
--
--out:
-- return info;
--}
--
--void *acquire_blkdev_list(void)
--{
-- down(&block_subsys_sem);
-- return get_next_blkdev(NULL);
--}
--
--void release_blkdev_list(void *dev)
--{
-- up(&block_subsys_sem);
-- kfree(dev);
-+ return major % BLKDEV_MAJOR_HASH_SIZE;
- }
-
-+#ifdef CONFIG_PROC_FS
-
--/*
-- * Count the number of records in the blkdev_list.
-- * must be called with the block_subsys_sem held
-- */
--int count_blkdev_list(void)
-+void blkdev_show(struct seq_file *f, off_t offset)
- {
-- struct blk_major_name *n;
-- int i, count;
--
-- count = 0;
-+ struct blk_major_name *dp;
-
-- for (i = 0; i < ARRAY_SIZE(major_names); i++) {
-- for (n = major_names[i]; n; n = n->next)
-- count++;
-+ if (offset < BLKDEV_MAJOR_HASH_SIZE) {
-+ down(&block_subsys_sem);
-+ for (dp = major_names[offset]; dp; dp = dp->next)
-+ seq_printf(f, "%3d %s\n", dp->major, dp->name);
-+ up(&block_subsys_sem);
- }
--
-- return count;
--}
--
--/*
-- * extract the major and name values from a blkdev_info struct
-- * passed in as a void to *dev. Must be called with
-- * block_subsys_sem held
-- */
--int get_blkdev_info(void *dev, int *major, char **name)
--{
-- struct blkdev_info *info = dev;
--
-- if (info->bd == NULL)
-- return 1;
--
-- *major = info->bd->major;
-- *name = info->bd->name;
-- return 0;
- }
-
-+#endif /* CONFIG_PROC_FS */
-
- int register_blkdev(unsigned int major, const char *name)
- {
-diff -Naur linux-2.6.16/Documentation/dvb/get_dvb_firmware linux-2.6.16.16/Documentation/dvb/get_dvb_firmware
---- linux-2.6.16/Documentation/dvb/get_dvb_firmware 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/Documentation/dvb/get_dvb_firmware 2006-05-11 04:56:24.000000000 +0300
-@@ -240,9 +240,9 @@
- }
-
- sub nxt2002 {
-- my $sourcefile = "Broadband4PC_4_2_11.zip";
-+ my $sourcefile = "Technisat_DVB-PC_4_4_COMPACT.zip";
- my $url = "http://www.bbti.us/download/windows/$sourcefile";
-- my $hash = "c6d2ea47a8f456d887ada0cfb718ff2a";
-+ my $hash = "476befae8c7c1bb9648954060b1eec1f";
- my $outfile = "dvb-fe-nxt2002.fw";
- my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
-
-@@ -250,8 +250,8 @@
-
- wgetfile($sourcefile, $url);
- unzip($sourcefile, $tmpdir);
-- verify("$tmpdir/SkyNETU.sys", $hash);
-- extract("$tmpdir/SkyNETU.sys", 375832, 5908, $outfile);
-+ verify("$tmpdir/SkyNET.sys", $hash);
-+ extract("$tmpdir/SkyNET.sys", 331624, 5908, $outfile);
-
- $outfile;
- }
-diff -Naur linux-2.6.16/drivers/base/cpu.c linux-2.6.16.16/drivers/base/cpu.c
---- linux-2.6.16/drivers/base/cpu.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/base/cpu.c 2006-05-11 04:56:24.000000000 +0300
-@@ -141,7 +141,7 @@
- return error;
- }
-
--struct sys_device *get_cpu_sysdev(int cpu)
-+struct sys_device *get_cpu_sysdev(unsigned cpu)
- {
- if (cpu < NR_CPUS)
- return cpu_sys_devices[cpu];
-diff -Naur linux-2.6.16/drivers/base/firmware_class.c linux-2.6.16.16/drivers/base/firmware_class.c
---- linux-2.6.16/drivers/base/firmware_class.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/base/firmware_class.c 2006-05-11 04:56:24.000000000 +0300
-@@ -211,18 +211,20 @@
- fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
- {
- u8 *new_data;
-+ int new_size = fw_priv->alloc_size;
-
- if (min_size <= fw_priv->alloc_size)
- return 0;
-
-- new_data = vmalloc(fw_priv->alloc_size + PAGE_SIZE);
-+ new_size = ALIGN(min_size, PAGE_SIZE);
-+ new_data = vmalloc(new_size);
- if (!new_data) {
- printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
- /* Make sure that we don't keep incomplete data */
- fw_load_abort(fw_priv);
- return -ENOMEM;
- }
-- fw_priv->alloc_size += PAGE_SIZE;
-+ fw_priv->alloc_size = new_size;
- if (fw_priv->fw->data) {
- memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
- vfree(fw_priv->fw->data);
-diff -Naur linux-2.6.16/drivers/base/node.c linux-2.6.16.16/drivers/base/node.c
---- linux-2.6.16/drivers/base/node.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/base/node.c 2006-05-11 04:56:24.000000000 +0300
-@@ -106,7 +106,7 @@
- other_node = 0;
- for (i = 0; i < MAX_NR_ZONES; i++) {
- struct zone *z = &pg->node_zones[i];
-- for (cpu = 0; cpu < NR_CPUS; cpu++) {
-+ for_each_online_cpu(cpu) {
- struct per_cpu_pageset *ps = zone_pcp(z,cpu);
- numa_hit += ps->numa_hit;
- numa_miss += ps->numa_miss;
-diff -Naur linux-2.6.16/drivers/block/cciss.c linux-2.6.16.16/drivers/block/cciss.c
---- linux-2.6.16/drivers/block/cciss.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/block/cciss.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1181,6 +1181,53 @@
- return 0;
- }
-
-+static inline void complete_buffers(struct bio *bio, int status)
-+{
-+ while (bio) {
-+ struct bio *xbh = bio->bi_next;
-+ int nr_sectors = bio_sectors(bio);
-+
-+ bio->bi_next = NULL;
-+ blk_finished_io(len);
-+ bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
-+ bio = xbh;
-+ }
-+
-+}
-+
-+static void cciss_softirq_done(struct request *rq)
-+{
-+ CommandList_struct *cmd = rq->completion_data;
-+ ctlr_info_t *h = hba[cmd->ctlr];
-+ unsigned long flags;
-+ u64bit temp64;
-+ int i, ddir;
-+
-+ if (cmd->Request.Type.Direction == XFER_READ)
-+ ddir = PCI_DMA_FROMDEVICE;
-+ else
-+ ddir = PCI_DMA_TODEVICE;
-+
-+ /* command did not need to be retried */
-+ /* unmap the DMA mapping for all the scatter gather elements */
-+ for(i=0; i<cmd->Header.SGList; i++) {
-+ temp64.val32.lower = cmd->SG[i].Addr.lower;
-+ temp64.val32.upper = cmd->SG[i].Addr.upper;
-+ pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
-+ }
-+
-+ complete_buffers(rq->bio, rq->errors);
-+
-+#ifdef CCISS_DEBUG
-+ printk("Done with %p\n", rq);
-+#endif /* CCISS_DEBUG */
-+
-+ spin_lock_irqsave(&h->lock, flags);
-+ end_that_request_last(rq, rq->errors);
-+ cmd_free(h, cmd,1);
-+ spin_unlock_irqrestore(&h->lock, flags);
-+}
-+
- /* This function will check the usage_count of the drive to be updated/added.
- * If the usage_count is zero then the drive information will be updated and
- * the disk will be re-registered with the kernel. If not then it will be
-@@ -1249,6 +1296,8 @@
-
- blk_queue_max_sectors(disk->queue, 512);
-
-+ blk_queue_softirq_done(disk->queue, cciss_softirq_done);
-+
- disk->queue->queuedata = hba[ctlr];
-
- blk_queue_hardsect_size(disk->queue,
-@@ -2148,20 +2197,6 @@
- addQ (&(h->cmpQ), c);
- }
- }
--
--static inline void complete_buffers(struct bio *bio, int status)
--{
-- while (bio) {
-- struct bio *xbh = bio->bi_next;
-- int nr_sectors = bio_sectors(bio);
--
-- bio->bi_next = NULL;
-- blk_finished_io(len);
-- bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
-- bio = xbh;
-- }
--
--}
- /* Assumes that CCISS_LOCK(h->ctlr) is held. */
- /* Zeros out the error record and then resends the command back */
- /* to the controller */
-@@ -2179,39 +2214,6 @@
- start_io(h);
- }
-
--static void cciss_softirq_done(struct request *rq)
--{
-- CommandList_struct *cmd = rq->completion_data;
-- ctlr_info_t *h = hba[cmd->ctlr];
-- unsigned long flags;
-- u64bit temp64;
-- int i, ddir;
--
-- if (cmd->Request.Type.Direction == XFER_READ)
-- ddir = PCI_DMA_FROMDEVICE;
-- else
-- ddir = PCI_DMA_TODEVICE;
--
-- /* command did not need to be retried */
-- /* unmap the DMA mapping for all the scatter gather elements */
-- for(i=0; i<cmd->Header.SGList; i++) {
-- temp64.val32.lower = cmd->SG[i].Addr.lower;
-- temp64.val32.upper = cmd->SG[i].Addr.upper;
-- pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
-- }
--
-- complete_buffers(rq->bio, rq->errors);
--
--#ifdef CCISS_DEBUG
-- printk("Done with %p\n", rq);
--#endif /* CCISS_DEBUG */
--
-- spin_lock_irqsave(&h->lock, flags);
-- end_that_request_last(rq, rq->errors);
-- cmd_free(h, cmd,1);
-- spin_unlock_irqrestore(&h->lock, flags);
--}
--
- /* checks the status of the job and calls complete buffers to mark all
- * buffers for the completed job. Note that this function does not need
- * to hold the hba/queue lock.
-@@ -3269,8 +3271,8 @@
- unregister_blkdev(hba[i]->major, hba[i]->devname);
- clean1:
- release_io_mem(hba[i]);
-- free_hba(i);
- hba[i]->busy_initializing = 0;
-+ free_hba(i);
- return(-1);
- }
-
-diff -Naur linux-2.6.16/drivers/char/agp/efficeon-agp.c linux-2.6.16.16/drivers/char/agp/efficeon-agp.c
---- linux-2.6.16/drivers/char/agp/efficeon-agp.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/agp/efficeon-agp.c 2006-05-11 04:56:24.000000000 +0300
-@@ -64,6 +64,12 @@
- {.mask = 0x00000001, .type = 0}
- };
-
-+/* This function does the same thing as mask_memory() for this chipset... */
-+static inline unsigned long efficeon_mask_memory(unsigned long addr)
-+{
-+ return addr | 0x00000001;
-+}
-+
- static struct aper_size_info_lvl2 efficeon_generic_sizes[4] =
- {
- {256, 65536, 0},
-@@ -251,7 +257,7 @@
- last_page = NULL;
- for (i = 0; i < count; i++) {
- int index = pg_start + i;
-- unsigned long insert = mem->memory[i];
-+ unsigned long insert = efficeon_mask_memory(mem->memory[i]);
-
- page = (unsigned int *) efficeon_private.l1_table[index >> 10];
-
-diff -Naur linux-2.6.16/drivers/char/cs5535_gpio.c linux-2.6.16.16/drivers/char/cs5535_gpio.c
---- linux-2.6.16/drivers/char/cs5535_gpio.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/cs5535_gpio.c 2006-05-11 04:56:24.000000000 +0300
-@@ -241,9 +241,10 @@
- static void __exit cs5535_gpio_cleanup(void)
- {
- dev_t dev_id = MKDEV(major, 0);
-+
-+ cdev_del(&cs5535_gpio_cdev);
- unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
-- if (gpio_base != 0)
-- release_region(gpio_base, CS5535_GPIO_SIZE);
-+ release_region(gpio_base, CS5535_GPIO_SIZE);
- }
-
- module_init(cs5535_gpio_init);
-diff -Naur linux-2.6.16/drivers/char/ipmi/ipmi_bt_sm.c linux-2.6.16.16/drivers/char/ipmi/ipmi_bt_sm.c
---- linux-2.6.16/drivers/char/ipmi/ipmi_bt_sm.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/ipmi/ipmi_bt_sm.c 2006-05-11 04:56:24.000000000 +0300
-@@ -165,7 +165,7 @@
- {
- unsigned int i;
-
-- if ((size < 2) || (size > IPMI_MAX_MSG_LENGTH))
-+ if ((size < 2) || (size > (IPMI_MAX_MSG_LENGTH - 2)))
- return -1;
-
- if ((bt->state != BT_STATE_IDLE) && (bt->state != BT_STATE_HOSED))
-diff -Naur linux-2.6.16/drivers/char/Kconfig linux-2.6.16.16/drivers/char/Kconfig
---- linux-2.6.16/drivers/char/Kconfig 2006-05-18 01:12:22.000000000 +0300
-+++ linux-2.6.16.16/drivers/char/Kconfig 2006-05-17 21:41:29.000000000 +0300
-@@ -187,6 +187,7 @@
- config ISI
- tristate "Multi-Tech multiport card support (EXPERIMENTAL)"
- depends on SERIAL_NONSTANDARD
-+ select FW_LOADER
- help
- This is a driver for the Multi-Tech cards which provide several
- serial ports. The driver is experimental and can currently only be
-diff -Naur linux-2.6.16/drivers/char/snsc.c linux-2.6.16.16/drivers/char/snsc.c
---- linux-2.6.16/drivers/char/snsc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/snsc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -391,7 +391,8 @@
- format_module_id(devnamep, geo_module(geoid),
- MODULE_FORMAT_BRIEF);
- devnamep = devname + strlen(devname);
-- sprintf(devnamep, "#%d", geo_slab(geoid));
-+ sprintf(devnamep, "^%d#%d", geo_slot(geoid),
-+ geo_slab(geoid));
-
- /* allocate sysctl device data */
- scd = kmalloc(sizeof (struct sysctl_data_s),
-diff -Naur linux-2.6.16/drivers/char/sonypi.c linux-2.6.16.16/drivers/char/sonypi.c
---- linux-2.6.16/drivers/char/sonypi.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/sonypi.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1341,6 +1341,9 @@
- else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
- PCI_DEVICE_ID_INTEL_ICH6_1, NULL)))
- sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
-+ else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL,
-+ PCI_DEVICE_ID_INTEL_ICH7_1, NULL)))
-+ sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3;
- else
- sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2;
-
-diff -Naur linux-2.6.16/drivers/char/tipar.c linux-2.6.16.16/drivers/char/tipar.c
---- linux-2.6.16/drivers/char/tipar.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/tipar.c 2006-05-11 04:56:24.000000000 +0300
-@@ -515,7 +515,7 @@
- err = PTR_ERR(tipar_class);
- goto out_chrdev;
- }
-- if (parport_register_driver(&tipar_driver) || tp_count == 0) {
-+ if (parport_register_driver(&tipar_driver)) {
- printk(KERN_ERR "tipar: unable to register with parport\n");
- err = -EIO;
- goto out_class;
-diff -Naur linux-2.6.16/drivers/char/tlclk.c linux-2.6.16.16/drivers/char/tlclk.c
---- linux-2.6.16/drivers/char/tlclk.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/tlclk.c 2006-05-11 04:56:24.000000000 +0300
-@@ -327,7 +327,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(received_ref_clk3a, S_IWUGO, NULL,
-+static DEVICE_ATTR(received_ref_clk3a, (S_IWUSR|S_IWGRP), NULL,
- store_received_ref_clk3a);
-
-
-@@ -349,7 +349,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(received_ref_clk3b, S_IWUGO, NULL,
-+static DEVICE_ATTR(received_ref_clk3b, (S_IWUSR|S_IWGRP), NULL,
- store_received_ref_clk3b);
-
-
-@@ -371,7 +371,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clk3b_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clk3b_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clk3b_output);
-
- static ssize_t store_enable_clk3a_output(struct device *d,
-@@ -392,7 +392,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clk3a_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clk3a_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clk3a_output);
-
- static ssize_t store_enable_clkb1_output(struct device *d,
-@@ -413,7 +413,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clkb1_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clkb1_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clkb1_output);
-
-
-@@ -435,7 +435,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clka1_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clka1_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clka1_output);
-
- static ssize_t store_enable_clkb0_output(struct device *d,
-@@ -456,7 +456,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clkb0_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clkb0_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clkb0_output);
-
- static ssize_t store_enable_clka0_output(struct device *d,
-@@ -477,7 +477,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(enable_clka0_output, S_IWUGO, NULL,
-+static DEVICE_ATTR(enable_clka0_output, (S_IWUSR|S_IWGRP), NULL,
- store_enable_clka0_output);
-
- static ssize_t store_select_amcb2_transmit_clock(struct device *d,
-@@ -519,7 +519,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(select_amcb2_transmit_clock, S_IWUGO, NULL,
-+static DEVICE_ATTR(select_amcb2_transmit_clock, (S_IWUSR|S_IWGRP), NULL,
- store_select_amcb2_transmit_clock);
-
- static ssize_t store_select_amcb1_transmit_clock(struct device *d,
-@@ -560,7 +560,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(select_amcb1_transmit_clock, S_IWUGO, NULL,
-+static DEVICE_ATTR(select_amcb1_transmit_clock, (S_IWUSR|S_IWGRP), NULL,
- store_select_amcb1_transmit_clock);
-
- static ssize_t store_select_redundant_clock(struct device *d,
-@@ -581,7 +581,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(select_redundant_clock, S_IWUGO, NULL,
-+static DEVICE_ATTR(select_redundant_clock, (S_IWUSR|S_IWGRP), NULL,
- store_select_redundant_clock);
-
- static ssize_t store_select_ref_frequency(struct device *d,
-@@ -602,7 +602,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(select_ref_frequency, S_IWUGO, NULL,
-+static DEVICE_ATTR(select_ref_frequency, (S_IWUSR|S_IWGRP), NULL,
- store_select_ref_frequency);
-
- static ssize_t store_filter_select(struct device *d,
-@@ -623,7 +623,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(filter_select, S_IWUGO, NULL, store_filter_select);
-+static DEVICE_ATTR(filter_select, (S_IWUSR|S_IWGRP), NULL, store_filter_select);
-
- static ssize_t store_hardware_switching_mode(struct device *d,
- struct device_attribute *attr, const char *buf, size_t count)
-@@ -643,7 +643,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(hardware_switching_mode, S_IWUGO, NULL,
-+static DEVICE_ATTR(hardware_switching_mode, (S_IWUSR|S_IWGRP), NULL,
- store_hardware_switching_mode);
-
- static ssize_t store_hardware_switching(struct device *d,
-@@ -664,7 +664,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(hardware_switching, S_IWUGO, NULL,
-+static DEVICE_ATTR(hardware_switching, (S_IWUSR|S_IWGRP), NULL,
- store_hardware_switching);
-
- static ssize_t store_refalign (struct device *d,
-@@ -684,7 +684,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(refalign, S_IWUGO, NULL, store_refalign);
-+static DEVICE_ATTR(refalign, (S_IWUSR|S_IWGRP), NULL, store_refalign);
-
- static ssize_t store_mode_select (struct device *d,
- struct device_attribute *attr, const char *buf, size_t count)
-@@ -704,7 +704,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(mode_select, S_IWUGO, NULL, store_mode_select);
-+static DEVICE_ATTR(mode_select, (S_IWUSR|S_IWGRP), NULL, store_mode_select);
-
- static ssize_t store_reset (struct device *d,
- struct device_attribute *attr, const char *buf, size_t count)
-@@ -724,7 +724,7 @@
- return strnlen(buf, count);
- }
-
--static DEVICE_ATTR(reset, S_IWUGO, NULL, store_reset);
-+static DEVICE_ATTR(reset, (S_IWUSR|S_IWGRP), NULL, store_reset);
-
- static struct attribute *tlclk_sysfs_entries[] = {
- &dev_attr_current_ref.attr,
-@@ -767,6 +767,7 @@
- printk(KERN_ERR "tlclk: can't get major %d.\n", tlclk_major);
- return ret;
- }
-+ tlclk_major = ret;
- alarm_events = kzalloc( sizeof(struct tlclk_alarms), GFP_KERNEL);
- if (!alarm_events)
- goto out1;
-diff -Naur linux-2.6.16/drivers/char/tty_io.c linux-2.6.16.16/drivers/char/tty_io.c
---- linux-2.6.16/drivers/char/tty_io.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/char/tty_io.c 2006-05-11 04:56:24.000000000 +0300
-@@ -2706,7 +2706,11 @@
- }
- task_lock(p);
- if (p->files) {
-- rcu_read_lock();
-+ /*
-+ * We don't take a ref to the file, so we must
-+ * hold ->file_lock instead.
-+ */
-+ spin_lock(&p->files->file_lock);
- fdt = files_fdtable(p->files);
- for (i=0; i < fdt->max_fds; i++) {
- filp = fcheck_files(p->files, i);
-@@ -2721,7 +2725,7 @@
- break;
- }
- }
-- rcu_read_unlock();
-+ spin_unlock(&p->files->file_lock);
- }
- task_unlock(p);
- } while_each_task_pid(session, PIDTYPE_SID, p);
-diff -Naur linux-2.6.16/drivers/edac/Kconfig linux-2.6.16.16/drivers/edac/Kconfig
---- linux-2.6.16/drivers/edac/Kconfig 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/edac/Kconfig 2006-05-11 04:56:24.000000000 +0300
-@@ -71,7 +71,7 @@
-
- config EDAC_E752X
- tristate "Intel e752x (e7520, e7525, e7320)"
-- depends on EDAC_MM_EDAC && PCI
-+ depends on EDAC_MM_EDAC && PCI && HOTPLUG
- help
- Support for error detection and correction on the Intel
- E7520, E7525, E7320 server chipsets.
-diff -Naur linux-2.6.16/drivers/i2c/busses/i2c-i801.c linux-2.6.16.16/drivers/i2c/busses/i2c-i801.c
---- linux-2.6.16/drivers/i2c/busses/i2c-i801.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/i2c/busses/i2c-i801.c 2006-05-11 04:56:24.000000000 +0300
-@@ -478,6 +478,11 @@
- ret = i801_transaction();
- }
-
-+ /* Some BIOSes don't like it when PEC is enabled at reboot or resume
-+ time, so we forcibly disable it after every transaction. */
-+ if (hwpec)
-+ outb_p(0, SMBAUXCTL);
-+
- if(block)
- return ret;
- if(ret)
-diff -Naur linux-2.6.16/drivers/i2c/chips/m41t00.c linux-2.6.16.16/drivers/i2c/chips/m41t00.c
---- linux-2.6.16/drivers/i2c/chips/m41t00.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/i2c/chips/m41t00.c 2006-05-11 04:56:24.000000000 +0300
-@@ -129,13 +129,13 @@
- if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0)
- || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f)
- < 0)
-- || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x7f)
-+ || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x3f)
- < 0)
-- || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x7f)
-+ || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x3f)
- < 0)
-- || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x7f)
-+ || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x1f)
- < 0)
-- || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0x7f)
-+ || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0xff)
- < 0))
-
- dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n");
-diff -Naur linux-2.6.16/drivers/ide/pci/alim15x3.c linux-2.6.16.16/drivers/ide/pci/alim15x3.c
---- linux-2.6.16/drivers/ide/pci/alim15x3.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/ide/pci/alim15x3.c 2006-05-11 04:56:24.000000000 +0300
-@@ -731,6 +731,8 @@
-
- if(m5229_revision <= 0x20)
- tmpbyte = (tmpbyte & (~0x02)) | 0x01;
-+ else if (m5229_revision == 0xc7)
-+ tmpbyte |= 0x03;
- else
- tmpbyte |= 0x01;
-
-diff -Naur linux-2.6.16/drivers/ieee1394/sbp2.c linux-2.6.16.16/drivers/ieee1394/sbp2.c
---- linux-2.6.16/drivers/ieee1394/sbp2.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/ieee1394/sbp2.c 2006-05-11 04:56:24.000000000 +0300
-@@ -495,22 +495,17 @@
- /*
- * This function finds the sbp2_command for a given outstanding SCpnt.
- * Only looks at the inuse list.
-+ * Must be called with scsi_id->sbp2_command_orb_lock held.
- */
--static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt)
-+static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(
-+ struct scsi_id_instance_data *scsi_id, void *SCpnt)
- {
- struct sbp2_command_info *command;
-- unsigned long flags;
-
-- spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
-- if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
-- list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list) {
-- if (command->Current_SCpnt == SCpnt) {
-- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
-+ if (!list_empty(&scsi_id->sbp2_command_orb_inuse))
-+ list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list)
-+ if (command->Current_SCpnt == SCpnt)
- return command;
-- }
-- }
-- }
-- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
- return NULL;
- }
-
-@@ -579,17 +574,15 @@
-
- /*
- * This function moves a command to the completed orb list.
-+ * Must be called with scsi_id->sbp2_command_orb_lock held.
- */
--static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id,
-- struct sbp2_command_info *command)
-+static void sbp2util_mark_command_completed(
-+ struct scsi_id_instance_data *scsi_id,
-+ struct sbp2_command_info *command)
- {
-- unsigned long flags;
--
-- spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
- list_del(&command->list);
- sbp2util_free_command_dma(command);
- list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
-- spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
- }
-
- /*
-@@ -2177,7 +2170,9 @@
- * Matched status with command, now grab scsi command pointers and check status
- */
- SCpnt = command->Current_SCpnt;
-+ spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
- sbp2util_mark_command_completed(scsi_id, command);
-+ spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
-
- if (SCpnt) {
-
-@@ -2513,6 +2508,7 @@
- (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
- struct sbp2scsi_host_info *hi = scsi_id->hi;
- struct sbp2_command_info *command;
-+ unsigned long flags;
-
- SBP2_ERR("aborting sbp2 command");
- scsi_print_command(SCpnt);
-@@ -2523,6 +2519,7 @@
- * Right now, just return any matching command structures
- * to the free pool.
- */
-+ spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
- command = sbp2util_find_command_for_SCpnt(scsi_id, SCpnt);
- if (command) {
- SBP2_DEBUG("Found command to abort");
-@@ -2540,6 +2537,7 @@
- command->Current_done(command->Current_SCpnt);
- }
- }
-+ spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
-
- /*
- * Initiate a fetch agent reset.
-diff -Naur linux-2.6.16/drivers/macintosh/therm_adt746x.c linux-2.6.16.16/drivers/macintosh/therm_adt746x.c
---- linux-2.6.16/drivers/macintosh/therm_adt746x.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/macintosh/therm_adt746x.c 2006-05-11 04:56:24.000000000 +0300
-@@ -627,8 +627,8 @@
- if(therm_type == ADT7460)
- device_create_file(&of_dev->dev, &dev_attr_sensor2_fan_speed);
-
--#ifndef CONFIG_I2C_KEYWEST
-- request_module("i2c-keywest");
-+#ifndef CONFIG_I2C_POWERMAC
-+ request_module("i2c-powermac");
- #endif
-
- return i2c_add_driver(&thermostat_driver);
-diff -Naur linux-2.6.16/drivers/md/dm.c linux-2.6.16.16/drivers/md/dm.c
---- linux-2.6.16/drivers/md/dm.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/md/dm.c 2006-05-11 04:56:24.000000000 +0300
-@@ -533,30 +533,35 @@
-
- } else {
- /*
-- * Create two copy bios to deal with io that has
-- * been split across a target.
-+ * Handle a bvec that must be split between two or more targets.
- */
- struct bio_vec *bv = bio->bi_io_vec + ci->idx;
-+ sector_t remaining = to_sector(bv->bv_len);
-+ unsigned int offset = 0;
-
-- clone = split_bvec(bio, ci->sector, ci->idx,
-- bv->bv_offset, max);
-- __map_bio(ti, clone, tio);
--
-- ci->sector += max;
-- ci->sector_count -= max;
-- ti = dm_table_find_target(ci->map, ci->sector);
--
-- len = to_sector(bv->bv_len) - max;
-- clone = split_bvec(bio, ci->sector, ci->idx,
-- bv->bv_offset + to_bytes(max), len);
-- tio = alloc_tio(ci->md);
-- tio->io = ci->io;
-- tio->ti = ti;
-- memset(&tio->info, 0, sizeof(tio->info));
-- __map_bio(ti, clone, tio);
-+ do {
-+ if (offset) {
-+ ti = dm_table_find_target(ci->map, ci->sector);
-+ max = max_io_len(ci->md, ci->sector, ti);
-+
-+ tio = alloc_tio(ci->md);
-+ tio->io = ci->io;
-+ tio->ti = ti;
-+ memset(&tio->info, 0, sizeof(tio->info));
-+ }
-+
-+ len = min(remaining, max);
-+
-+ clone = split_bvec(bio, ci->sector, ci->idx,
-+ bv->bv_offset + offset, len);
-+
-+ __map_bio(ti, clone, tio);
-+
-+ ci->sector += len;
-+ ci->sector_count -= len;
-+ offset += to_bytes(len);
-+ } while (remaining -= len);
-
-- ci->sector += len;
-- ci->sector_count -= len;
- ci->idx++;
- }
- }
-@@ -1093,6 +1098,7 @@
- {
- struct dm_table *map = NULL;
- DECLARE_WAITQUEUE(wait, current);
-+ struct bio *def;
- int r = -EINVAL;
-
- down(&md->suspend_lock);
-@@ -1152,9 +1158,11 @@
- /* were we interrupted ? */
- r = -EINTR;
- if (atomic_read(&md->pending)) {
-+ clear_bit(DMF_BLOCK_IO, &md->flags);
-+ def = bio_list_get(&md->deferred);
-+ __flush_deferred_io(md, def);
- up_write(&md->io_lock);
- unlock_fs(md);
-- clear_bit(DMF_BLOCK_IO, &md->flags);
- goto out;
- }
- up_write(&md->io_lock);
-diff -Naur linux-2.6.16/drivers/md/dm-snap.c linux-2.6.16.16/drivers/md/dm-snap.c
---- linux-2.6.16/drivers/md/dm-snap.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/md/dm-snap.c 2006-05-11 04:56:24.000000000 +0300
-@@ -542,8 +542,12 @@
- {
- struct dm_snapshot *s = (struct dm_snapshot *) ti->private;
-
-+ /* Prevent further origin writes from using this snapshot. */
-+ /* After this returns there can be no new kcopyd jobs. */
- unregister_snapshot(s);
-
-+ kcopyd_client_destroy(s->kcopyd_client);
-+
- exit_exception_table(&s->pending, pending_cache);
- exit_exception_table(&s->complete, exception_cache);
-
-@@ -552,7 +556,7 @@
-
- dm_put_device(ti, s->origin);
- dm_put_device(ti, s->cow);
-- kcopyd_client_destroy(s->kcopyd_client);
-+
- kfree(s);
- }
-
-diff -Naur linux-2.6.16/drivers/md/kcopyd.c linux-2.6.16.16/drivers/md/kcopyd.c
---- linux-2.6.16/drivers/md/kcopyd.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/md/kcopyd.c 2006-05-11 04:56:24.000000000 +0300
-@@ -44,6 +44,9 @@
- struct page_list *pages;
- unsigned int nr_pages;
- unsigned int nr_free_pages;
-+
-+ wait_queue_head_t destroyq;
-+ atomic_t nr_jobs;
- };
-
- static struct page_list *alloc_pl(void)
-@@ -293,10 +296,15 @@
- int read_err = job->read_err;
- unsigned int write_err = job->write_err;
- kcopyd_notify_fn fn = job->fn;
-+ struct kcopyd_client *kc = job->kc;
-
-- kcopyd_put_pages(job->kc, job->pages);
-+ kcopyd_put_pages(kc, job->pages);
- mempool_free(job, _job_pool);
- fn(read_err, write_err, context);
-+
-+ if (atomic_dec_and_test(&kc->nr_jobs))
-+ wake_up(&kc->destroyq);
-+
- return 0;
- }
-
-@@ -431,6 +439,7 @@
- */
- static void dispatch_job(struct kcopyd_job *job)
- {
-+ atomic_inc(&job->kc->nr_jobs);
- push(&_pages_jobs, job);
- wake();
- }
-@@ -670,6 +679,9 @@
- return r;
- }
-
-+ init_waitqueue_head(&kc->destroyq);
-+ atomic_set(&kc->nr_jobs, 0);
-+
- client_add(kc);
- *result = kc;
- return 0;
-@@ -677,6 +689,9 @@
-
- void kcopyd_client_destroy(struct kcopyd_client *kc)
- {
-+ /* Wait for completion of all jobs submitted by this client. */
-+ wait_event(kc->destroyq, !atomic_read(&kc->nr_jobs));
-+
- dm_io_put(kc->nr_pages);
- client_free_pages(kc);
- client_del(kc);
-diff -Naur linux-2.6.16/drivers/media/dvb/dvb-usb/cxusb.c linux-2.6.16.16/drivers/media/dvb/dvb-usb/cxusb.c
---- linux-2.6.16/drivers/media/dvb/dvb-usb/cxusb.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/media/dvb/dvb-usb/cxusb.c 2006-05-11 04:56:24.000000000 +0300
-@@ -149,6 +149,15 @@
- return cxusb_ctrl_msg(d, CMD_POWER_OFF, &b, 1, NULL, 0);
- }
-
-+static int cxusb_bluebird_power_ctrl(struct dvb_usb_device *d, int onoff)
-+{
-+ u8 b = 0;
-+ if (onoff)
-+ return cxusb_ctrl_msg(d, CMD_POWER_ON, &b, 1, NULL, 0);
-+ else
-+ return 0;
-+}
-+
- static int cxusb_streaming_ctrl(struct dvb_usb_device *d, int onoff)
- {
- u8 buf[2] = { 0x03, 0x00 };
-@@ -505,7 +514,7 @@
- .size_of_priv = sizeof(struct cxusb_state),
-
- .streaming_ctrl = cxusb_streaming_ctrl,
-- .power_ctrl = cxusb_power_ctrl,
-+ .power_ctrl = cxusb_bluebird_power_ctrl,
- .frontend_attach = cxusb_lgdt3303_frontend_attach,
- .tuner_attach = cxusb_lgh064f_tuner_attach,
-
-@@ -545,7 +554,7 @@
- .size_of_priv = sizeof(struct cxusb_state),
-
- .streaming_ctrl = cxusb_streaming_ctrl,
-- .power_ctrl = cxusb_power_ctrl,
-+ .power_ctrl = cxusb_bluebird_power_ctrl,
- .frontend_attach = cxusb_dee1601_frontend_attach,
- .tuner_attach = cxusb_dee1601_tuner_attach,
-
-@@ -594,7 +603,7 @@
- .size_of_priv = sizeof(struct cxusb_state),
-
- .streaming_ctrl = cxusb_streaming_ctrl,
-- .power_ctrl = cxusb_power_ctrl,
-+ .power_ctrl = cxusb_bluebird_power_ctrl,
- .frontend_attach = cxusb_mt352_frontend_attach,
- .tuner_attach = cxusb_lgz201_tuner_attach,
-
-@@ -634,7 +643,7 @@
- .size_of_priv = sizeof(struct cxusb_state),
-
- .streaming_ctrl = cxusb_streaming_ctrl,
-- .power_ctrl = cxusb_power_ctrl,
-+ .power_ctrl = cxusb_bluebird_power_ctrl,
- .frontend_attach = cxusb_mt352_frontend_attach,
- .tuner_attach = cxusb_dtt7579_tuner_attach,
-
-diff -Naur linux-2.6.16/drivers/media/video/Kconfig linux-2.6.16.16/drivers/media/video/Kconfig
---- linux-2.6.16/drivers/media/video/Kconfig 2006-05-18 01:12:22.000000000 +0300
-+++ linux-2.6.16.16/drivers/media/video/Kconfig 2006-05-17 21:41:30.000000000 +0300
-@@ -349,6 +349,7 @@
- config VIDEO_DECODER
- tristate "Add support for additional video chipsets"
- depends on VIDEO_DEV && I2C && EXPERIMENTAL
-+ select FW_LOADER
- ---help---
- Say Y here to compile drivers for SAA7115, SAA7127 and CX25840
- video decoders.
-diff -Naur linux-2.6.16/drivers/media/video/saa7127.c linux-2.6.16.16/drivers/media/video/saa7127.c
---- linux-2.6.16/drivers/media/video/saa7127.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/media/video/saa7127.c 2006-05-11 04:56:24.000000000 +0300
-@@ -141,6 +141,7 @@
- static const struct i2c_reg_value saa7129_init_config_extra[] = {
- { SAA7127_REG_OUTPUT_PORT_CONTROL, 0x38 },
- { SAA7127_REG_VTRIG, 0xfa },
-+ { 0, 0 }
- };
-
- static const struct i2c_reg_value saa7127_init_config_common[] = {
-diff -Naur linux-2.6.16/drivers/media/video/tuner-types.c linux-2.6.16.16/drivers/media/video/tuner-types.c
---- linux-2.6.16/drivers/media/video/tuner-types.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/media/video/tuner-types.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1087,8 +1087,8 @@
- /* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */
-
- static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = {
-- { 16 * 175.75 /*MHz*/, 0x01, },
-- { 16 * 410.25 /*MHz*/, 0x02, },
-+ { 16 * 130.00 /*MHz*/, 0x01, },
-+ { 16 * 364.50 /*MHz*/, 0x02, },
- { 16 * 999.99 , 0x08, },
- };
-
-diff -Naur linux-2.6.16/drivers/mtd/nand/Kconfig linux-2.6.16.16/drivers/mtd/nand/Kconfig
---- linux-2.6.16/drivers/mtd/nand/Kconfig 2006-05-18 01:12:23.000000000 +0300
-+++ linux-2.6.16.16/drivers/mtd/nand/Kconfig 2006-05-17 22:32:57.000000000 +0300
-@@ -184,15 +184,14 @@
- Even if you leave this disabled, you can enable BBT writes at module
- load time (assuming you build diskonchip as a module) with the module
- parameter "inftl_bbt_write=1".
--
-- config MTD_NAND_SHARPSL
-- bool "Support for NAND Flash on Sharp SL Series (C7xx + others)"
-- depends on MTD_NAND && ARCH_PXA
--
-- config MTD_NAND_NANDSIM
-- bool "Support for NAND Flash Simulator"
-- depends on MTD_NAND && MTD_PARTITIONS
-
-+config MTD_NAND_SHARPSL
-+ tristate "Support for NAND Flash on Sharp SL Series (C7xx + others)"
-+ depends on MTD_NAND && ARCH_PXA
-+
-+config MTD_NAND_NANDSIM
-+ tristate "Support for NAND Flash Simulator"
-+ depends on MTD_NAND && MTD_PARTITIONS
- help
- The simulator may simulate verious NAND flash chips for the
- MTD nand layer.
-@@ -200,7 +199,6 @@
- config MTD_NAND_OMAP_HW
- bool "OMAP HW NAND Flash controller support"
- depends on ARM && ARCH_OMAP16XX && MTD_NAND
--
- help
- Driver for TI OMAP16xx hardware NAND flash controller.
-
-diff -Naur linux-2.6.16/drivers/net/e1000/e1000_main.c linux-2.6.16.16/drivers/net/e1000/e1000_main.c
---- linux-2.6.16/drivers/net/e1000/e1000_main.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/e1000/e1000_main.c 2006-05-11 04:56:24.000000000 +0300
-@@ -3851,6 +3851,7 @@
- skb_shinfo(skb)->nr_frags++;
- skb->len += length;
- skb->data_len += length;
-+ skb->truesize += length;
- }
-
- e1000_rx_checksum(adapter, staterr,
-diff -Naur linux-2.6.16/drivers/net/irda/irda-usb.c linux-2.6.16.16/drivers/net/irda/irda-usb.c
---- linux-2.6.16/drivers/net/irda/irda-usb.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/irda/irda-usb.c 2006-05-11 04:56:24.000000000 +0300
-@@ -740,7 +740,7 @@
- struct sk_buff *newskb;
- struct sk_buff *dataskb;
- struct urb *next_urb;
-- int docopy;
-+ unsigned int len, docopy;
-
- IRDA_DEBUG(2, "%s(), len=%d\n", __FUNCTION__, urb->actual_length);
-
-@@ -851,10 +851,11 @@
- dataskb->dev = self->netdev;
- dataskb->mac.raw = dataskb->data;
- dataskb->protocol = htons(ETH_P_IRDA);
-+ len = dataskb->len;
- netif_rx(dataskb);
-
- /* Keep stats up to date */
-- self->stats.rx_bytes += dataskb->len;
-+ self->stats.rx_bytes += len;
- self->stats.rx_packets++;
- self->netdev->last_rx = jiffies;
-
-diff -Naur linux-2.6.16/drivers/net/sky2.c linux-2.6.16.16/drivers/net/sky2.c
---- linux-2.6.16/drivers/net/sky2.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/sky2.c 2006-05-11 04:56:24.000000000 +0300
-@@ -579,8 +579,8 @@
- reg = gma_read16(hw, port, GM_PHY_ADDR);
- gma_write16(hw, port, GM_PHY_ADDR, reg | GM_PAR_MIB_CLR);
-
-- for (i = 0; i < GM_MIB_CNT_SIZE; i++)
-- gma_read16(hw, port, GM_MIB_CNT_BASE + 8 * i);
-+ for (i = GM_MIB_CNT_BASE; i <= GM_MIB_CNT_END; i += 4)
-+ gma_read16(hw, port, i);
- gma_write16(hw, port, GM_PHY_ADDR, reg);
-
- /* transmit control */
-diff -Naur linux-2.6.16/drivers/net/sky2.h linux-2.6.16.16/drivers/net/sky2.h
---- linux-2.6.16/drivers/net/sky2.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/sky2.h 2006-05-11 04:56:24.000000000 +0300
-@@ -1380,6 +1380,7 @@
- /* MIB Counters */
- #define GM_MIB_CNT_BASE 0x0100 /* Base Address of MIB Counters */
- #define GM_MIB_CNT_SIZE 44 /* Number of MIB Counters */
-+#define GM_MIB_CNT_END 0x025C /* Last MIB counter */
-
- /*
- * MIB Counters base address definitions (low word) -
-diff -Naur linux-2.6.16/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.16.16/drivers/net/wireless/hostap/hostap_80211_tx.c
---- linux-2.6.16/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-05-11 04:56:24.000000000 +0300
-@@ -469,7 +469,7 @@
- }
-
- if (local->ieee_802_1x && meta->ethertype == ETH_P_PAE && tx.crypt &&
-- !(fc & IEEE80211_FCTL_VERS)) {
-+ !(fc & IEEE80211_FCTL_PROTECTED)) {
- no_encrypt = 1;
- PDEBUG(DEBUG_EXTRA2, "%s: TX: IEEE 802.1X - passing "
- "unencrypted EAPOL frame\n", dev->name);
-diff -Naur linux-2.6.16/drivers/net/wireless/ipw2200.c linux-2.6.16.16/drivers/net/wireless/ipw2200.c
---- linux-2.6.16/drivers/net/wireless/ipw2200.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/wireless/ipw2200.c 2006-05-11 04:56:24.000000000 +0300
-@@ -9956,9 +9956,8 @@
- return -EINVAL;
- down(&p->sem);
- memcpy(&p->eeprom[eeprom->offset], bytes, eeprom->len);
-- for (i = IPW_EEPROM_DATA;
-- i < IPW_EEPROM_DATA + IPW_EEPROM_IMAGE_SIZE; i++)
-- ipw_write8(p, i, p->eeprom[i]);
-+ for (i = 0; i < IPW_EEPROM_IMAGE_SIZE; i++)
-+ ipw_write8(p, i + IPW_EEPROM_DATA, p->eeprom[i]);
- up(&p->sem);
- return 0;
- }
-diff -Naur linux-2.6.16/drivers/net/wireless/Kconfig linux-2.6.16.16/drivers/net/wireless/Kconfig
---- linux-2.6.16/drivers/net/wireless/Kconfig 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/net/wireless/Kconfig 2006-05-11 04:56:24.000000000 +0300
-@@ -239,7 +239,8 @@
-
- config AIRO
- tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
-- depends on NET_RADIO && ISA_DMA_API && CRYPTO && (PCI || BROKEN)
-+ depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)
-+ select CRYPTO
- ---help---
- This is the standard Linux driver to support Cisco/Aironet ISA and
- PCI 802.11 wireless cards.
-@@ -374,6 +375,7 @@
- config PCMCIA_SPECTRUM
- tristate "Symbol Spectrum24 Trilogy PCMCIA card support"
- depends on NET_RADIO && PCMCIA && HERMES
-+ select FW_LOADER
- ---help---
-
- This is a driver for 802.11b cards using RAM-loadable Symbol
-@@ -387,6 +389,7 @@
- config AIRO_CS
- tristate "Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards"
- depends on NET_RADIO && PCMCIA && (BROKEN || !M32R)
-+ select CRYPTO
- ---help---
- This is the standard Linux driver to support Cisco/Aironet PCMCIA
- 802.11 wireless cards. This driver is the same as the Aironet
-diff -Naur linux-2.6.16/drivers/pcmcia/ds.c linux-2.6.16.16/drivers/pcmcia/ds.c
---- linux-2.6.16/drivers/pcmcia/ds.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/pcmcia/ds.c 2006-05-11 04:56:24.000000000 +0300
-@@ -546,7 +546,7 @@
- tmp = vers1->str + vers1->ofs[i];
-
- length = strlen(tmp) + 1;
-- if ((length < 3) || (length > 255))
-+ if ((length < 2) || (length > 255))
- continue;
-
- p_dev->prod_id[i] = kmalloc(sizeof(char) * length,
-diff -Naur linux-2.6.16/drivers/scsi/3w-9xxx.c linux-2.6.16.16/drivers/scsi/3w-9xxx.c
---- linux-2.6.16/drivers/scsi/3w-9xxx.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/scsi/3w-9xxx.c 2006-05-11 04:56:24.000000000 +0300
-@@ -85,7 +85,7 @@
- #include "3w-9xxx.h"
-
- /* Globals */
--#define TW_DRIVER_VERSION "2.26.02.005"
-+#define TW_DRIVER_VERSION "2.26.02.007"
- static TW_Device_Extension *twa_device_extension_list[TW_MAX_SLOT];
- static unsigned int twa_device_extension_count;
- static int twa_major = -1;
-@@ -1944,9 +1944,13 @@
- }
- if (tw_dev->srb[request_id]->use_sg == 1) {
- struct scatterlist *sg = (struct scatterlist *)tw_dev->srb[request_id]->request_buffer;
-- char *buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
-+ char *buf;
-+ unsigned long flags = 0;
-+ local_irq_save(flags);
-+ buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
- memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length);
- kunmap_atomic(buf - sg->offset, KM_IRQ0);
-+ local_irq_restore(flags);
- }
- }
- } /* End twa_scsiop_execute_scsi_complete() */
-diff -Naur linux-2.6.16/drivers/scsi/3w-xxxx.c linux-2.6.16.16/drivers/scsi/3w-xxxx.c
---- linux-2.6.16/drivers/scsi/3w-xxxx.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/scsi/3w-xxxx.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1508,10 +1508,12 @@
- struct scsi_cmnd *cmd = tw_dev->srb[request_id];
- void *buf;
- unsigned int transfer_len;
-+ unsigned long flags = 0;
-
- if (cmd->use_sg) {
- struct scatterlist *sg =
- (struct scatterlist *)cmd->request_buffer;
-+ local_irq_save(flags);
- buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
- transfer_len = min(sg->length, len);
- } else {
-@@ -1526,6 +1528,7 @@
-
- sg = (struct scatterlist *)cmd->request_buffer;
- kunmap_atomic(buf - sg->offset, KM_IRQ0);
-+ local_irq_restore(flags);
- }
- }
-
-diff -Naur linux-2.6.16/drivers/scsi/sata_mv.c linux-2.6.16.16/drivers/scsi/sata_mv.c
---- linux-2.6.16/drivers/scsi/sata_mv.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/scsi/sata_mv.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1102,6 +1102,7 @@
- void __iomem *port_mmio = mv_ap_base(ap);
- struct mv_port_priv *pp = ap->private_data;
- u32 out_ptr;
-+ u8 ata_status;
-
- out_ptr = readl(port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
-
-@@ -1109,6 +1110,8 @@
- assert(((out_ptr >> EDMA_RSP_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK) ==
- pp->rsp_consumer);
-
-+ ata_status = pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT;
-+
- /* increment our consumer index... */
- pp->rsp_consumer = mv_inc_q_index(&pp->rsp_consumer);
-
-@@ -1123,7 +1126,7 @@
- writelfl(out_ptr, port_mmio + EDMA_RSP_Q_OUT_PTR_OFS);
-
- /* Return ATA status register for completed CRPB */
-- return (pp->crpb[pp->rsp_consumer].flags >> CRPB_FLAG_STATUS_SHIFT);
-+ return ata_status;
- }
-
- /**
-@@ -1192,7 +1195,6 @@
- u32 hc_irq_cause;
- int shift, port, port0, hard_port, handled;
- unsigned int err_mask;
-- u8 ata_status = 0;
-
- if (hc == 0) {
- port0 = 0;
-@@ -1210,6 +1212,7 @@
- hc,relevant,hc_irq_cause);
-
- for (port = port0; port < port0 + MV_PORTS_PER_HC; port++) {
-+ u8 ata_status = 0;
- ap = host_set->ports[port];
- hard_port = port & MV_PORT_MASK; /* range 0-3 */
- handled = 0; /* ensure ata_status is set if handled++ */
-diff -Naur linux-2.6.16/drivers/usb/core/message.c linux-2.6.16.16/drivers/usb/core/message.c
---- linux-2.6.16/drivers/usb/core/message.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/usb/core/message.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1388,11 +1388,13 @@
- if (dev->state != USB_STATE_ADDRESS)
- usb_disable_device (dev, 1); // Skip ep0
-
-- i = dev->bus_mA - cp->desc.bMaxPower * 2;
-- if (i < 0)
-- dev_warn(&dev->dev, "new config #%d exceeds power "
-- "limit by %dmA\n",
-- configuration, -i);
-+ if (cp) {
-+ i = dev->bus_mA - cp->desc.bMaxPower * 2;
-+ if (i < 0)
-+ dev_warn(&dev->dev, "new config #%d exceeds power "
-+ "limit by %dmA\n",
-+ configuration, -i);
-+ }
-
- if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
- USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
-diff -Naur linux-2.6.16/drivers/usb/host/ehci-sched.c linux-2.6.16.16/drivers/usb/host/ehci-sched.c
---- linux-2.6.16/drivers/usb/host/ehci-sched.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/usb/host/ehci-sched.c 2006-05-11 04:56:24.000000000 +0300
-@@ -707,6 +707,7 @@
- } else {
- u32 addr;
- int think_time;
-+ int hs_transfers;
-
- addr = dev->ttport << 24;
- if (!ehci_is_TDI(ehci)
-@@ -719,6 +720,7 @@
- think_time = dev->tt ? dev->tt->think_time : 0;
- stream->tt_usecs = NS_TO_US (think_time + usb_calc_bus_time (
- dev->speed, is_input, 1, maxp));
-+ hs_transfers = max (1u, (maxp + 187) / 188);
- if (is_input) {
- u32 tmp;
-
-@@ -727,12 +729,11 @@
- stream->usecs = HS_USECS_ISO (1);
- stream->raw_mask = 1;
-
-- /* pessimistic c-mask */
-- tmp = usb_calc_bus_time (USB_SPEED_FULL, 1, 0, maxp)
-- / (125 * 1000);
-- stream->raw_mask |= 3 << (tmp + 9);
-+ /* c-mask as specified in USB 2.0 11.18.4 3.c */
-+ tmp = (1 << (hs_transfers + 2)) - 1;
-+ stream->raw_mask |= tmp << (8 + 2);
- } else
-- stream->raw_mask = smask_out [maxp / 188];
-+ stream->raw_mask = smask_out [hs_transfers - 1];
- bandwidth = stream->usecs + stream->c_usecs;
- bandwidth /= 1 << (interval + 2);
-
-diff -Naur linux-2.6.16/drivers/usb/serial/console.c linux-2.6.16.16/drivers/usb/serial/console.c
---- linux-2.6.16/drivers/usb/serial/console.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/usb/serial/console.c 2006-05-11 04:56:24.000000000 +0300
-@@ -54,7 +54,7 @@
- * serial.c code, except that the specifier is "ttyUSB" instead
- * of "ttyS".
- */
--static int __init usb_console_setup(struct console *co, char *options)
-+static int usb_console_setup(struct console *co, char *options)
- {
- struct usbcons_info *info = &usbcons_info;
- int baud = 9600;
-diff -Naur linux-2.6.16/drivers/usb/serial/option.c linux-2.6.16.16/drivers/usb/serial/option.c
---- linux-2.6.16/drivers/usb/serial/option.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/usb/serial/option.c 2006-05-11 04:56:24.000000000 +0300
-@@ -582,14 +582,14 @@
- portdata = usb_get_serial_port_data(port);
-
- /* Do indat endpoints first */
-- for (j = 0; j <= N_IN_URB; ++j) {
-+ for (j = 0; j < N_IN_URB; ++j) {
- portdata->in_urbs[j] = option_setup_urb (serial,
- port->bulk_in_endpointAddress, USB_DIR_IN, port,
- portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
- }
-
- /* outdat endpoints */
-- for (j = 0; j <= N_OUT_URB; ++j) {
-+ for (j = 0; j < N_OUT_URB; ++j) {
- portdata->out_urbs[j] = option_setup_urb (serial,
- port->bulk_out_endpointAddress, USB_DIR_OUT, port,
- portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
-diff -Naur linux-2.6.16/drivers/usb/storage/Kconfig linux-2.6.16.16/drivers/usb/storage/Kconfig
---- linux-2.6.16/drivers/usb/storage/Kconfig 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/usb/storage/Kconfig 2006-05-11 04:56:24.000000000 +0300
-@@ -48,7 +48,8 @@
-
- config USB_STORAGE_ISD200
- bool "ISD-200 USB/ATA Bridge support"
-- depends on USB_STORAGE && BLK_DEV_IDE
-+ depends on USB_STORAGE
-+ depends on BLK_DEV_IDE=y || BLK_DEV_IDE=USB_STORAGE
- ---help---
- Say Y here if you want to use USB Mass Store devices based
- on the In-Systems Design ISD-200 USB/ATA bridge.
-diff -Naur linux-2.6.16/drivers/video/cfbimgblt.c linux-2.6.16.16/drivers/video/cfbimgblt.c
---- linux-2.6.16/drivers/video/cfbimgblt.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/video/cfbimgblt.c 2006-05-11 04:56:24.000000000 +0300
-@@ -169,7 +169,7 @@
-
- while (j--) {
- l--;
-- color = (*s & 1 << (FB_BIT_NR(l))) ? fgcolor : bgcolor;
-+ color = (*s & (1 << l)) ? fgcolor : bgcolor;
- val |= FB_SHIFT_HIGH(color, shift);
-
- /* Did the bitshift spill bits to the next long? */
-diff -Naur linux-2.6.16/drivers/video/fbmem.c linux-2.6.16.16/drivers/video/fbmem.c
---- linux-2.6.16/drivers/video/fbmem.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/video/fbmem.c 2006-05-11 04:56:24.000000000 +0300
-@@ -669,13 +669,19 @@
- total_size = info->fix.smem_len;
-
- if (p > total_size)
-- return 0;
-+ return -EFBIG;
-
-- if (count >= total_size)
-+ if (count > total_size) {
-+ err = -EFBIG;
- count = total_size;
-+ }
-+
-+ if (count + p > total_size) {
-+ if (!err)
-+ err = -ENOSPC;
-
-- if (count + p > total_size)
- count = total_size - p;
-+ }
-
- buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count,
- GFP_KERNEL);
-@@ -717,7 +723,7 @@
-
- kfree(buffer);
-
-- return (err) ? err : cnt;
-+ return (cnt) ? cnt : err;
- }
-
- #ifdef CONFIG_KMOD
-diff -Naur linux-2.6.16/drivers/video/i810/i810_main.c linux-2.6.16.16/drivers/video/i810/i810_main.c
---- linux-2.6.16/drivers/video/i810/i810_main.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/drivers/video/i810/i810_main.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1508,7 +1508,7 @@
- int size = ((cursor->image.width + 7) >> 3) *
- cursor->image.height;
- int i;
-- u8 *data = kmalloc(64 * 8, GFP_KERNEL);
-+ u8 *data = kmalloc(64 * 8, GFP_ATOMIC);
-
- if (data == NULL)
- return -ENOMEM;
-diff -Naur linux-2.6.16/fs/9p/vfs_inode.c linux-2.6.16.16/fs/9p/vfs_inode.c
---- linux-2.6.16/fs/9p/vfs_inode.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/9p/vfs_inode.c 2006-05-11 04:56:24.000000000 +0300
-@@ -614,6 +614,7 @@
-
- sb = dir->i_sb;
- v9ses = v9fs_inode2v9ses(dir);
-+ dentry->d_op = &v9fs_dentry_operations;
- dirfid = v9fs_fid_lookup(dentry->d_parent);
-
- if (!dirfid) {
-@@ -681,8 +682,6 @@
- goto FreeFcall;
-
- fid->qid = fcall->params.rstat.stat.qid;
--
-- dentry->d_op = &v9fs_dentry_operations;
- v9fs_stat2inode(&fcall->params.rstat.stat, inode, inode->i_sb);
-
- d_add(dentry, inode);
-diff -Naur linux-2.6.16/fs/char_dev.c linux-2.6.16.16/fs/char_dev.c
---- linux-2.6.16/fs/char_dev.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/char_dev.c 2006-05-11 04:56:24.000000000 +0300
-@@ -15,6 +15,7 @@
- #include <linux/module.h>
- #include <linux/smp_lock.h>
- #include <linux/devfs_fs_kernel.h>
-+#include <linux/seq_file.h>
-
- #include <linux/kobject.h>
- #include <linux/kobj_map.h>
-@@ -26,8 +27,6 @@
-
- static struct kobj_map *cdev_map;
-
--#define MAX_PROBE_HASH 255 /* random */
--
- static DECLARE_MUTEX(chrdevs_lock);
-
- static struct char_device_struct {
-@@ -38,93 +37,29 @@
- char name[64];
- struct file_operations *fops;
- struct cdev *cdev; /* will die */
--} *chrdevs[MAX_PROBE_HASH];
-+} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
-
- /* index in the above */
- static inline int major_to_index(int major)
- {
-- return major % MAX_PROBE_HASH;
--}
--
--struct chrdev_info {
-- int index;
-- struct char_device_struct *cd;
--};
--
--void *get_next_chrdev(void *dev)
--{
-- struct chrdev_info *info;
--
-- if (dev == NULL) {
-- info = kmalloc(sizeof(*info), GFP_KERNEL);
-- if (!info)
-- goto out;
-- info->index=0;
-- info->cd = chrdevs[info->index];
-- if (info->cd)
-- goto out;
-- } else {
-- info = dev;
-- }
--
-- while (info->index < ARRAY_SIZE(chrdevs)) {
-- if (info->cd)
-- info->cd = info->cd->next;
-- if (info->cd)
-- goto out;
-- /*
-- * No devices on this chain, move to the next
-- */
-- info->index++;
-- info->cd = (info->index < ARRAY_SIZE(chrdevs)) ?
-- chrdevs[info->index] : NULL;
-- if (info->cd)
-- goto out;
-- }
--
--out:
-- return info;
--}
--
--void *acquire_chrdev_list(void)
--{
-- down(&chrdevs_lock);
-- return get_next_chrdev(NULL);
--}
--
--void release_chrdev_list(void *dev)
--{
-- up(&chrdevs_lock);
-- kfree(dev);
-+ return major % CHRDEV_MAJOR_HASH_SIZE;
- }
-
-+#ifdef CONFIG_PROC_FS
-
--int count_chrdev_list(void)
-+void chrdev_show(struct seq_file *f, off_t offset)
- {
- struct char_device_struct *cd;
-- int i, count;
--
-- count = 0;
-
-- for (i = 0; i < ARRAY_SIZE(chrdevs) ; i++) {
-- for (cd = chrdevs[i]; cd; cd = cd->next)
-- count++;
-+ if (offset < CHRDEV_MAJOR_HASH_SIZE) {
-+ down(&chrdevs_lock);
-+ for (cd = chrdevs[offset]; cd; cd = cd->next)
-+ seq_printf(f, "%3d %s\n", cd->major, cd->name);
-+ up(&chrdevs_lock);
- }
--
-- return count;
- }
-
--int get_chrdev_info(void *dev, int *major, char **name)
--{
-- struct chrdev_info *info = dev;
--
-- if (info->cd == NULL)
-- return 1;
--
-- *major = info->cd->major;
-- *name = info->cd->name;
-- return 0;
--}
-+#endif /* CONFIG_PROC_FS */
-
- /*
- * Register a single major with a specified minor range.
-diff -Naur linux-2.6.16/fs/cifs/cifsencrypt.c linux-2.6.16.16/fs/cifs/cifsencrypt.c
---- linux-2.6.16/fs/cifs/cifsencrypt.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/cifs/cifsencrypt.c 2006-05-11 04:56:24.000000000 +0300
-@@ -56,9 +56,6 @@
- int rc = 0;
- char smb_signature[20];
-
-- /* BB remember to initialize sequence number elsewhere and initialize mac_signing key elsewhere BB */
-- /* BB remember to add code to save expected sequence number in midQ entry BB */
--
- if((cifs_pdu == NULL) || (server == NULL))
- return -EINVAL;
-
-@@ -85,20 +82,33 @@
- static int cifs_calc_signature2(const struct kvec * iov, int n_vec,
- const char * key, char * signature)
- {
-- struct MD5Context context;
--
-- if((iov == NULL) || (signature == NULL))
-- return -EINVAL;
-+ struct MD5Context context;
-+ int i;
-
-- MD5Init(&context);
-- MD5Update(&context,key,CIFS_SESSION_KEY_SIZE+16);
-+ if((iov == NULL) || (signature == NULL))
-+ return -EINVAL;
-
--/* MD5Update(&context,cifs_pdu->Protocol,cifs_pdu->smb_buf_length); */ /* BB FIXME BB */
-+ MD5Init(&context);
-+ MD5Update(&context,key,CIFS_SESSION_KEY_SIZE+16);
-+ for(i=0;i<n_vec;i++) {
-+ if(iov[i].iov_base == NULL) {
-+ cERROR(1,("null iovec entry"));
-+ return -EIO;
-+ } else if(iov[i].iov_len == 0)
-+ break; /* bail out if we are sent nothing to sign */
-+ /* The first entry includes a length field (which does not get
-+ signed that occupies the first 4 bytes before the header */
-+ if(i==0) {
-+ if (iov[0].iov_len <= 8 ) /* cmd field at offset 9 */
-+ break; /* nothing to sign or corrupt header */
-+ MD5Update(&context,iov[0].iov_base+4, iov[0].iov_len-4);
-+ } else
-+ MD5Update(&context,iov[i].iov_base, iov[i].iov_len);
-+ }
-
-- MD5Final(signature,&context);
-+ MD5Final(signature,&context);
-
-- return -EOPNOTSUPP;
--/* return 0; */
-+ return 0;
- }
-
-
-diff -Naur linux-2.6.16/fs/cifs/dir.c linux-2.6.16.16/fs/cifs/dir.c
---- linux-2.6.16/fs/cifs/dir.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/cifs/dir.c 2006-05-11 04:56:24.000000000 +0300
-@@ -441,6 +441,20 @@
- cifs_sb = CIFS_SB(parent_dir_inode->i_sb);
- pTcon = cifs_sb->tcon;
-
-+ /*
-+ * Don't allow the separator character in a path component.
-+ * The VFS will not allow "/", but "\" is allowed by posix.
-+ */
-+ if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)) {
-+ int i;
-+ for (i = 0; i < direntry->d_name.len; i++)
-+ if (direntry->d_name.name[i] == '\\') {
-+ cFYI(1, ("Invalid file name"));
-+ FreeXid(xid);
-+ return ERR_PTR(-EINVAL);
-+ }
-+ }
-+
- /* can not grab the rename sem here since it would
- deadlock in the cases (beginning of sys_rename itself)
- in which we already have the sb rename sem */
-diff -Naur linux-2.6.16/fs/compat.c linux-2.6.16.16/fs/compat.c
---- linux-2.6.16/fs/compat.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/compat.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1215,6 +1215,10 @@
- if (ret < 0)
- goto out;
-
-+ ret = security_file_permission(file, type == READ ? MAY_READ:MAY_WRITE);
-+ if (ret)
-+ goto out;
-+
- fnv = NULL;
- if (type == READ) {
- fn = file->f_op->read;
-diff -Naur linux-2.6.16/fs/ext3/resize.c linux-2.6.16.16/fs/ext3/resize.c
---- linux-2.6.16/fs/ext3/resize.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/ext3/resize.c 2006-05-11 04:56:24.000000000 +0300
-@@ -974,6 +974,7 @@
- if (o_blocks_count != le32_to_cpu(es->s_blocks_count)) {
- ext3_warning(sb, __FUNCTION__,
- "multiple resizers run on filesystem!");
-+ unlock_super(sb);
- err = -EBUSY;
- goto exit_put;
- }
-diff -Naur linux-2.6.16/fs/fuse/file.c linux-2.6.16.16/fs/fuse/file.c
---- linux-2.6.16/fs/fuse/file.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/fuse/file.c 2006-05-11 04:56:24.000000000 +0300
-@@ -397,8 +397,12 @@
- return -EINTR;
-
- err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
-- if (!err)
-- fuse_send_readpages(data.req, file, inode);
-+ if (!err) {
-+ if (data.req->num_pages)
-+ fuse_send_readpages(data.req, file, inode);
-+ else
-+ fuse_put_request(fc, data.req);
-+ }
- return err;
- }
-
-diff -Naur linux-2.6.16/fs/locks.c linux-2.6.16.16/fs/locks.c
---- linux-2.6.16/fs/locks.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/locks.c 2006-05-11 04:56:24.000000000 +0300
-@@ -432,15 +432,14 @@
- */
- static int lease_init(struct file *filp, int type, struct file_lock *fl)
- {
-+ if (assign_type(fl, type) != 0)
-+ return -EINVAL;
-+
- fl->fl_owner = current->files;
- fl->fl_pid = current->tgid;
-
- fl->fl_file = filp;
- fl->fl_flags = FL_LEASE;
-- if (assign_type(fl, type) != 0) {
-- locks_free_lock(fl);
-- return -EINVAL;
-- }
- fl->fl_start = 0;
- fl->fl_end = OFFSET_MAX;
- fl->fl_ops = NULL;
-@@ -452,16 +451,19 @@
- static int lease_alloc(struct file *filp, int type, struct file_lock **flp)
- {
- struct file_lock *fl = locks_alloc_lock();
-- int error;
-+ int error = -ENOMEM;
-
- if (fl == NULL)
-- return -ENOMEM;
-+ goto out;
-
- error = lease_init(filp, type, fl);
-- if (error)
-- return error;
-+ if (error) {
-+ locks_free_lock(fl);
-+ fl = NULL;
-+ }
-+out:
- *flp = fl;
-- return 0;
-+ return error;
- }
-
- /* Check if two locks overlap each other.
-@@ -1337,6 +1339,7 @@
- goto out;
-
- if (my_before != NULL) {
-+ *flp = *my_before;
- error = lease->fl_lmops->fl_change(my_before, arg);
- goto out;
- }
-@@ -2212,7 +2215,12 @@
-
- lock_kernel();
- j = 0;
-- rcu_read_lock();
-+
-+ /*
-+ * We are not taking a ref to the file structures, so
-+ * we need to acquire ->file_lock.
-+ */
-+ spin_lock(&files->file_lock);
- fdt = files_fdtable(files);
- for (;;) {
- unsigned long set;
-@@ -2230,7 +2238,7 @@
- set >>= 1;
- }
- }
-- rcu_read_unlock();
-+ spin_unlock(&files->file_lock);
- unlock_kernel();
- }
- EXPORT_SYMBOL(steal_locks);
-diff -Naur linux-2.6.16/fs/nfsd/nfs3proc.c linux-2.6.16.16/fs/nfsd/nfs3proc.c
---- linux-2.6.16/fs/nfsd/nfs3proc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/nfsd/nfs3proc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -682,7 +682,7 @@
- PROC(lookup, dirop, dirop, fhandle2, RC_NOCACHE, ST+FH+pAT+pAT),
- PROC(access, access, access, fhandle, RC_NOCACHE, ST+pAT+1),
- PROC(readlink, readlink, readlink, fhandle, RC_NOCACHE, ST+pAT+1+NFS3_MAXPATHLEN/4),
-- PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE),
-+ PROC(read, read, read, fhandle, RC_NOCACHE, ST+pAT+4+NFSSVC_MAXBLKSIZE/4),
- PROC(write, write, write, fhandle, RC_REPLBUFF, ST+WC+4),
- PROC(create, create, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
- PROC(mkdir, mkdir, create, fhandle2, RC_REPLBUFF, ST+(1+FH+pAT)+WC),
-diff -Naur linux-2.6.16/fs/nfsd/nfs4proc.c linux-2.6.16.16/fs/nfsd/nfs4proc.c
---- linux-2.6.16/fs/nfsd/nfs4proc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/nfsd/nfs4proc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -975,7 +975,7 @@
- */
- static struct svc_procedure nfsd_procedures4[2] = {
- PROC(null, void, void, void, RC_NOCACHE, 1),
-- PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE)
-+ PROC(compound, compound, compound, compound, RC_NOCACHE, NFSD_BUFSIZE/4)
- };
-
- struct svc_version nfsd_version4 = {
-diff -Naur linux-2.6.16/fs/nfsd/nfsproc.c linux-2.6.16.16/fs/nfsd/nfsproc.c
---- linux-2.6.16/fs/nfsd/nfsproc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/nfsd/nfsproc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -553,7 +553,7 @@
- PROC(none, void, void, none, RC_NOCACHE, ST),
- PROC(lookup, diropargs, diropres, fhandle, RC_NOCACHE, ST+FH+AT),
- PROC(readlink, readlinkargs, readlinkres, none, RC_NOCACHE, ST+1+NFS_MAXPATHLEN/4),
-- PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE),
-+ PROC(read, readargs, readres, fhandle, RC_NOCACHE, ST+AT+1+NFSSVC_MAXBLKSIZE/4),
- PROC(none, void, void, none, RC_NOCACHE, ST),
- PROC(write, writeargs, attrstat, fhandle, RC_REPLBUFF, ST+AT),
- PROC(create, createargs, diropres, fhandle, RC_REPLBUFF, ST+FH+AT),
-diff -Naur linux-2.6.16/fs/open.c linux-2.6.16.16/fs/open.c
---- linux-2.6.16/fs/open.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/open.c 2006-05-11 04:56:24.000000000 +0300
-@@ -330,7 +330,10 @@
-
- asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length)
- {
-- return do_sys_ftruncate(fd, length, 1);
-+ long ret = do_sys_ftruncate(fd, length, 1);
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- /* LFS versions of truncate are only needed on 32 bit machines */
-@@ -342,7 +345,10 @@
-
- asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length)
- {
-- return do_sys_ftruncate(fd, length, 0);
-+ long ret = do_sys_ftruncate(fd, length, 0);
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
- #endif
-
-@@ -1083,20 +1089,30 @@
-
- asmlinkage long sys_open(const char __user *filename, int flags, int mode)
- {
-+ long ret;
-+
- if (force_o_largefile())
- flags |= O_LARGEFILE;
-
-- return do_sys_open(AT_FDCWD, filename, flags, mode);
-+ ret = do_sys_open(AT_FDCWD, filename, flags, mode);
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
- EXPORT_SYMBOL_GPL(sys_open);
-
- asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
- int mode)
- {
-+ long ret;
-+
- if (force_o_largefile())
- flags |= O_LARGEFILE;
-
-- return do_sys_open(dfd, filename, flags, mode);
-+ ret = do_sys_open(dfd, filename, flags, mode);
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
- EXPORT_SYMBOL_GPL(sys_openat);
-
-diff -Naur linux-2.6.16/fs/partitions/check.c linux-2.6.16.16/fs/partitions/check.c
---- linux-2.6.16/fs/partitions/check.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/partitions/check.c 2006-05-11 04:56:24.000000000 +0300
-@@ -345,6 +345,7 @@
- char *name;
- static char *block_str = "block:";
- int size;
-+ char *s;
-
- size = strlen(block_str) + strlen(disk->disk_name) + 1;
- name = kmalloc(size, GFP_KERNEL);
-@@ -352,6 +353,10 @@
- return NULL;
- strcpy(name, block_str);
- strcat(name, disk->disk_name);
-+ /* ewww... some of these buggers have / in name... */
-+ s = strchr(name, '/');
-+ if (s)
-+ *s = '!';
- return name;
- }
-
-diff -Naur linux-2.6.16/fs/proc/base.c linux-2.6.16.16/fs/proc/base.c
---- linux-2.6.16/fs/proc/base.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/proc/base.c 2006-05-11 04:56:24.000000000 +0300
-@@ -294,16 +294,20 @@
-
- files = get_files_struct(task);
- if (files) {
-- rcu_read_lock();
-+ /*
-+ * We are not taking a ref to the file structure, so we must
-+ * hold ->file_lock.
-+ */
-+ spin_lock(&files->file_lock);
- file = fcheck_files(files, fd);
- if (file) {
- *mnt = mntget(file->f_vfsmnt);
- *dentry = dget(file->f_dentry);
-- rcu_read_unlock();
-+ spin_unlock(&files->file_lock);
- put_files_struct(files);
- return 0;
- }
-- rcu_read_unlock();
-+ spin_unlock(&files->file_lock);
- put_files_struct(files);
- }
- return -ENOENT;
-@@ -1485,7 +1489,12 @@
- if (!files)
- goto out_unlock;
- inode->i_mode = S_IFLNK;
-- rcu_read_lock();
-+
-+ /*
-+ * We are not taking a ref to the file structure, so we must
-+ * hold ->file_lock.
-+ */
-+ spin_lock(&files->file_lock);
- file = fcheck_files(files, fd);
- if (!file)
- goto out_unlock2;
-@@ -1493,7 +1502,7 @@
- inode->i_mode |= S_IRUSR | S_IXUSR;
- if (file->f_mode & 2)
- inode->i_mode |= S_IWUSR | S_IXUSR;
-- rcu_read_unlock();
-+ spin_unlock(&files->file_lock);
- put_files_struct(files);
- inode->i_op = &proc_pid_link_inode_operations;
- inode->i_size = 64;
-@@ -1503,7 +1512,7 @@
- return NULL;
-
- out_unlock2:
-- rcu_read_unlock();
-+ spin_unlock(&files->file_lock);
- put_files_struct(files);
- out_unlock:
- iput(inode);
-diff -Naur linux-2.6.16/fs/proc/proc_misc.c linux-2.6.16.16/fs/proc/proc_misc.c
---- linux-2.6.16/fs/proc/proc_misc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/proc/proc_misc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -249,144 +249,60 @@
- return seq_open(file, &cpuinfo_op);
- }
-
--enum devinfo_states {
-- CHR_HDR,
-- CHR_LIST,
-- BLK_HDR,
-- BLK_LIST,
-- DEVINFO_DONE
--};
--
--struct devinfo_state {
-- void *chrdev;
-- void *blkdev;
-- unsigned int num_records;
-- unsigned int cur_record;
-- enum devinfo_states state;
-+static struct file_operations proc_cpuinfo_operations = {
-+ .open = cpuinfo_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = seq_release,
- };
-
--static void *devinfo_start(struct seq_file *f, loff_t *pos)
-+static int devinfo_show(struct seq_file *f, void *v)
- {
-- struct devinfo_state *info = f->private;
-+ int i = *(loff_t *) v;
-
-- if (*pos) {
-- if ((info) && (*pos <= info->num_records))
-- return info;
-- return NULL;
-+ if (i < CHRDEV_MAJOR_HASH_SIZE) {
-+ if (i == 0)
-+ seq_printf(f, "Character devices:\n");
-+ chrdev_show(f, i);
-+ } else {
-+ i -= CHRDEV_MAJOR_HASH_SIZE;
-+ if (i == 0)
-+ seq_printf(f, "\nBlock devices:\n");
-+ blkdev_show(f, i);
- }
-- info = kmalloc(sizeof(*info), GFP_KERNEL);
-- f->private = info;
-- info->chrdev = acquire_chrdev_list();
-- info->blkdev = acquire_blkdev_list();
-- info->state = CHR_HDR;
-- info->num_records = count_chrdev_list();
-- info->num_records += count_blkdev_list();
-- info->num_records += 2; /* Character and Block headers */
-- *pos = 1;
-- info->cur_record = *pos;
-- return info;
-+ return 0;
- }
-
--static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
-+static void *devinfo_start(struct seq_file *f, loff_t *pos)
- {
-- int idummy;
-- char *ndummy;
-- struct devinfo_state *info = f->private;
--
-- switch (info->state) {
-- case CHR_HDR:
-- info->state = CHR_LIST;
-- (*pos)++;
-- /*fallthrough*/
-- case CHR_LIST:
-- if (get_chrdev_info(info->chrdev,&idummy,&ndummy)) {
-- /*
-- * The character dev list is complete
-- */
-- info->state = BLK_HDR;
-- } else {
-- info->chrdev = get_next_chrdev(info->chrdev);
-- }
-- (*pos)++;
-- break;
-- case BLK_HDR:
-- info->state = BLK_LIST;
-- (*pos)++;
-- break;
-- case BLK_LIST:
-- if (get_blkdev_info(info->blkdev,&idummy,&ndummy)) {
-- /*
-- * The block dev list is complete
-- */
-- info->state = DEVINFO_DONE;
-- } else {
-- info->blkdev = get_next_blkdev(info->blkdev);
-- }
-- (*pos)++;
-- break;
-- case DEVINFO_DONE:
-- (*pos)++;
-- info->cur_record = *pos;
-- info = NULL;
-- break;
-- default:
-- break;
-- }
-- if (info)
-- info->cur_record = *pos;
-- return info;
-+ if (*pos < (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
-+ return pos;
-+ return NULL;
- }
-
--static void devinfo_stop(struct seq_file *f, void *v)
-+static void *devinfo_next(struct seq_file *f, void *v, loff_t *pos)
- {
-- struct devinfo_state *info = f->private;
--
-- if (info) {
-- release_chrdev_list(info->chrdev);
-- release_blkdev_list(info->blkdev);
-- f->private = NULL;
-- kfree(info);
-- }
-+ (*pos)++;
-+ if (*pos >= (BLKDEV_MAJOR_HASH_SIZE + CHRDEV_MAJOR_HASH_SIZE))
-+ return NULL;
-+ return pos;
- }
-
--static int devinfo_show(struct seq_file *f, void *arg)
-+static void devinfo_stop(struct seq_file *f, void *v)
- {
-- int major;
-- char *name;
-- struct devinfo_state *info = f->private;
--
-- switch(info->state) {
-- case CHR_HDR:
-- seq_printf(f,"Character devices:\n");
-- /* fallthrough */
-- case CHR_LIST:
-- if (!get_chrdev_info(info->chrdev,&major,&name))
-- seq_printf(f,"%3d %s\n",major,name);
-- break;
-- case BLK_HDR:
-- seq_printf(f,"\nBlock devices:\n");
-- /* fallthrough */
-- case BLK_LIST:
-- if (!get_blkdev_info(info->blkdev,&major,&name))
-- seq_printf(f,"%3d %s\n",major,name);
-- break;
-- default:
-- break;
-- }
--
-- return 0;
-+ /* Nothing to do */
- }
-
--static struct seq_operations devinfo_op = {
-- .start = devinfo_start,
-- .next = devinfo_next,
-- .stop = devinfo_stop,
-- .show = devinfo_show,
-+static struct seq_operations devinfo_ops = {
-+ .start = devinfo_start,
-+ .next = devinfo_next,
-+ .stop = devinfo_stop,
-+ .show = devinfo_show
- };
-
--static int devinfo_open(struct inode *inode, struct file *file)
-+static int devinfo_open(struct inode *inode, struct file *filp)
- {
-- return seq_open(file, &devinfo_op);
-+ return seq_open(filp, &devinfo_ops);
- }
-
- static struct file_operations proc_devinfo_operations = {
-@@ -396,13 +312,6 @@
- .release = seq_release,
- };
-
--static struct file_operations proc_cpuinfo_operations = {
-- .open = cpuinfo_open,
-- .read = seq_read,
-- .llseek = seq_lseek,
-- .release = seq_release,
--};
--
- extern struct seq_operations vmstat_op;
- static int vmstat_open(struct inode *inode, struct file *file)
- {
-diff -Naur linux-2.6.16/fs/proc/vmcore.c linux-2.6.16.16/fs/proc/vmcore.c
---- linux-2.6.16/fs/proc/vmcore.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/proc/vmcore.c 2006-05-11 04:56:24.000000000 +0300
-@@ -103,8 +103,8 @@
- size_t buflen, loff_t *fpos)
- {
- ssize_t acc = 0, tmp;
-- size_t tsz, nr_bytes;
-- u64 start;
-+ size_t tsz;
-+ u64 start, nr_bytes;
- struct vmcore *curr_m = NULL;
-
- if (buflen == 0 || *fpos >= vmcore_size)
-diff -Naur linux-2.6.16/fs/reiserfs/xattr_acl.c linux-2.6.16.16/fs/reiserfs/xattr_acl.c
---- linux-2.6.16/fs/reiserfs/xattr_acl.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/reiserfs/xattr_acl.c 2006-05-11 04:56:24.000000000 +0300
-@@ -408,8 +408,9 @@
- acl = reiserfs_get_acl(inode, ACL_TYPE_DEFAULT);
- reiserfs_read_unlock_xattrs(inode->i_sb);
- reiserfs_read_unlock_xattr_i(inode);
-- ret = acl ? 1 : 0;
-- posix_acl_release(acl);
-+ ret = (acl && !IS_ERR(acl));
-+ if (ret)
-+ posix_acl_release(acl);
- }
-
- return ret;
-diff -Naur linux-2.6.16/fs/smbfs/dir.c linux-2.6.16.16/fs/smbfs/dir.c
---- linux-2.6.16/fs/smbfs/dir.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/smbfs/dir.c 2006-05-11 04:56:24.000000000 +0300
-@@ -434,6 +434,11 @@
- if (dentry->d_name.len > SMB_MAXNAMELEN)
- goto out;
-
-+ /* Do not allow lookup of names with backslashes in */
-+ error = -EINVAL;
-+ if (memchr(dentry->d_name.name, '\\', dentry->d_name.len))
-+ goto out;
-+
- lock_kernel();
- error = smb_proc_getattr(dentry, &finfo);
- #ifdef SMBFS_PARANOIA
-diff -Naur linux-2.6.16/fs/sysfs/dir.c linux-2.6.16.16/fs/sysfs/dir.c
---- linux-2.6.16/fs/sysfs/dir.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/sysfs/dir.c 2006-05-11 04:56:24.000000000 +0300
-@@ -302,6 +302,7 @@
- * Drop reference from dget() on entrance.
- */
- dput(dentry);
-+ kobj->dentry = NULL;
- }
-
- int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
-diff -Naur linux-2.6.16/fs/sysfs/file.c linux-2.6.16.16/fs/sysfs/file.c
---- linux-2.6.16/fs/sysfs/file.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/sysfs/file.c 2006-05-11 04:56:24.000000000 +0300
-@@ -183,7 +183,7 @@
- return -ENOMEM;
-
- if (count >= PAGE_SIZE)
-- count = PAGE_SIZE;
-+ count = PAGE_SIZE - 1;
- error = copy_from_user(buffer->page,buf,count);
- buffer->needs_read_fill = 1;
- return error ? -EFAULT : count;
-diff -Naur linux-2.6.16/fs/sysfs/inode.c linux-2.6.16.16/fs/sysfs/inode.c
---- linux-2.6.16/fs/sysfs/inode.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/sysfs/inode.c 2006-05-11 04:56:24.000000000 +0300
-@@ -227,12 +227,16 @@
- void sysfs_hash_and_remove(struct dentry * dir, const char * name)
- {
- struct sysfs_dirent * sd;
-- struct sysfs_dirent * parent_sd = dir->d_fsdata;
-+ struct sysfs_dirent * parent_sd;
-+
-+ if (!dir)
-+ return;
-
- if (dir->d_inode == NULL)
- /* no inode means this hasn't been made visible yet */
- return;
-
-+ parent_sd = dir->d_fsdata;
- mutex_lock(&dir->d_inode->i_mutex);
- list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
- if (!sd->s_element)
-diff -Naur linux-2.6.16/fs/sysfs/symlink.c linux-2.6.16.16/fs/sysfs/symlink.c
---- linux-2.6.16/fs/sysfs/symlink.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/sysfs/symlink.c 2006-05-11 04:56:24.000000000 +0300
-@@ -66,6 +66,7 @@
- if (!error)
- return 0;
-
-+ kobject_put(target);
- kfree(sl->link_name);
- exit2:
- kfree(sl);
-diff -Naur linux-2.6.16/fs/xfs/linux-2.6/xfs_aops.c linux-2.6.16.16/fs/xfs/linux-2.6/xfs_aops.c
---- linux-2.6.16/fs/xfs/linux-2.6/xfs_aops.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/xfs/linux-2.6/xfs_aops.c 2006-05-11 04:56:24.000000000 +0300
-@@ -616,7 +616,7 @@
- acceptable = (type == IOMAP_UNWRITTEN);
- else if (buffer_delay(bh))
- acceptable = (type == IOMAP_DELAY);
-- else if (buffer_mapped(bh))
-+ else if (buffer_dirty(bh) && buffer_mapped(bh))
- acceptable = (type == 0);
- else
- break;
-diff -Naur linux-2.6.16/fs/xfs/linux-2.6/xfs_iops.c linux-2.6.16.16/fs/xfs/linux-2.6/xfs_iops.c
---- linux-2.6.16/fs/xfs/linux-2.6/xfs_iops.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/fs/xfs/linux-2.6/xfs_iops.c 2006-05-11 04:56:24.000000000 +0300
-@@ -673,8 +673,7 @@
- if (ia_valid & ATTR_ATIME) {
- vattr.va_mask |= XFS_AT_ATIME;
- vattr.va_atime = attr->ia_atime;
-- if (ia_valid & ATTR_ATIME_SET)
-- inode->i_atime = attr->ia_atime;
-+ inode->i_atime = attr->ia_atime;
- }
- if (ia_valid & ATTR_MTIME) {
- vattr.va_mask |= XFS_AT_MTIME;
-diff -Naur linux-2.6.16/include/asm-i386/cpufeature.h linux-2.6.16.16/include/asm-i386/cpufeature.h
---- linux-2.6.16/include/asm-i386/cpufeature.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-i386/cpufeature.h 2006-05-11 04:56:24.000000000 +0300
-@@ -70,6 +70,7 @@
- #define X86_FEATURE_P3 (3*32+ 6) /* P3 */
- #define X86_FEATURE_P4 (3*32+ 7) /* P4 */
- #define X86_FEATURE_CONSTANT_TSC (3*32+ 8) /* TSC ticks at a constant rate */
-+#define X86_FEATURE_FXSAVE_LEAK (3*32+10) /* FXSAVE leaks FOP/FIP/FOP */
-
- /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
- #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */
-diff -Naur linux-2.6.16/include/asm-i386/i387.h linux-2.6.16.16/include/asm-i386/i387.h
---- linux-2.6.16/include/asm-i386/i387.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-i386/i387.h 2006-05-11 04:56:24.000000000 +0300
-@@ -13,6 +13,7 @@
-
- #include <linux/sched.h>
- #include <linux/init.h>
-+#include <linux/kernel_stat.h>
- #include <asm/processor.h>
- #include <asm/sigcontext.h>
- #include <asm/user.h>
-@@ -38,17 +39,38 @@
- extern void kernel_fpu_begin(void);
- #define kernel_fpu_end() do { stts(); preempt_enable(); } while(0)
-
-+/* We need a safe address that is cheap to find and that is already
-+ in L1 during context switch. The best choices are unfortunately
-+ different for UP and SMP */
-+#ifdef CONFIG_SMP
-+#define safe_address (__per_cpu_offset[0])
-+#else
-+#define safe_address (kstat_cpu(0).cpustat.user)
-+#endif
-+
- /*
- * These must be called with preempt disabled
- */
- static inline void __save_init_fpu( struct task_struct *tsk )
- {
-+ /* Use more nops than strictly needed in case the compiler
-+ varies code */
- alternative_input(
-- "fnsave %1 ; fwait ;" GENERIC_NOP2,
-- "fxsave %1 ; fnclex",
-+ "fnsave %[fx] ;fwait;" GENERIC_NOP8 GENERIC_NOP4,
-+ "fxsave %[fx]\n"
-+ "bt $7,%[fsw] ; jnc 1f ; fnclex\n1:",
- X86_FEATURE_FXSR,
-- "m" (tsk->thread.i387.fxsave)
-- :"memory");
-+ [fx] "m" (tsk->thread.i387.fxsave),
-+ [fsw] "m" (tsk->thread.i387.fxsave.swd) : "memory");
-+ /* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception
-+ is pending. Clear the x87 state here by setting it to fixed
-+ values. safe_address is a random variable that should be in L1 */
-+ alternative_input(
-+ GENERIC_NOP8 GENERIC_NOP2,
-+ "emms\n\t" /* clear stack tags */
-+ "fildl %[addr]", /* set F?P to defined value */
-+ X86_FEATURE_FXSAVE_LEAK,
-+ [addr] "m" (safe_address));
- task_thread_info(tsk)->status &= ~TS_USEDFPU;
- }
-
-diff -Naur linux-2.6.16/include/asm-i386/pgtable-2level.h linux-2.6.16.16/include/asm-i386/pgtable-2level.h
---- linux-2.6.16/include/asm-i386/pgtable-2level.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-i386/pgtable-2level.h 2006-05-11 04:56:24.000000000 +0300
-@@ -18,6 +18,9 @@
- #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
- #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
-
-+#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
-+#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
-+
- #define ptep_get_and_clear(mm,addr,xp) __pte(xchg(&(xp)->pte_low, 0))
- #define pte_same(a, b) ((a).pte_low == (b).pte_low)
- #define pte_page(x) pfn_to_page(pte_pfn(x))
-diff -Naur linux-2.6.16/include/asm-i386/pgtable-3level.h linux-2.6.16.16/include/asm-i386/pgtable-3level.h
---- linux-2.6.16/include/asm-i386/pgtable-3level.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-i386/pgtable-3level.h 2006-05-11 04:56:24.000000000 +0300
-@@ -85,6 +85,26 @@
- #define pmd_offset(pud, address) ((pmd_t *) pud_page(*(pud)) + \
- pmd_index(address))
-
-+/*
-+ * For PTEs and PDEs, we must clear the P-bit first when clearing a page table
-+ * entry, so clear the bottom half first and enforce ordering with a compiler
-+ * barrier.
-+ */
-+static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
-+{
-+ ptep->pte_low = 0;
-+ smp_wmb();
-+ ptep->pte_high = 0;
-+}
-+
-+static inline void pmd_clear(pmd_t *pmd)
-+{
-+ u32 *tmp = (u32 *)pmd;
-+ *tmp = 0;
-+ smp_wmb();
-+ *(tmp + 1) = 0;
-+}
-+
- static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
- {
- pte_t res;
-diff -Naur linux-2.6.16/include/asm-i386/pgtable.h linux-2.6.16.16/include/asm-i386/pgtable.h
---- linux-2.6.16/include/asm-i386/pgtable.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-i386/pgtable.h 2006-05-11 04:56:24.000000000 +0300
-@@ -204,12 +204,10 @@
- extern unsigned long pg0[];
-
- #define pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
--#define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
-
- /* To avoid harmful races, pmd_none(x) should check only the lower when PAE */
- #define pmd_none(x) (!(unsigned long)pmd_val(x))
- #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
--#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
- #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
-
-
-@@ -269,7 +267,7 @@
- pte_t pte;
- if (full) {
- pte = *ptep;
-- *ptep = __pte(0);
-+ pte_clear(mm, addr, ptep);
- } else {
- pte = ptep_get_and_clear(mm, addr, ptep);
- }
-diff -Naur linux-2.6.16/include/asm-m32r/smp.h linux-2.6.16.16/include/asm-m32r/smp.h
---- linux-2.6.16/include/asm-m32r/smp.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-m32r/smp.h 2006-05-11 04:56:24.000000000 +0300
-@@ -67,7 +67,8 @@
- #define raw_smp_processor_id() (current_thread_info()->cpu)
-
- extern cpumask_t cpu_callout_map;
--#define cpu_possible_map cpu_callout_map
-+extern cpumask_t cpu_possible_map;
-+extern cpumask_t cpu_present_map;
-
- static __inline__ int hard_smp_processor_id(void)
- {
-diff -Naur linux-2.6.16/include/asm-m32r/uaccess.h linux-2.6.16.16/include/asm-m32r/uaccess.h
---- linux-2.6.16/include/asm-m32r/uaccess.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-m32r/uaccess.h 2006-05-11 04:56:24.000000000 +0300
-@@ -5,17 +5,9 @@
- * linux/include/asm-m32r/uaccess.h
- *
- * M32R version.
-- * Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org>
-+ * Copyright (C) 2004, 2006 Hirokazu Takata <takata at linux-m32r.org>
- */
-
--#undef UACCESS_DEBUG
--
--#ifdef UACCESS_DEBUG
--#define UAPRINTK(args...) printk(args)
--#else
--#define UAPRINTK(args...)
--#endif /* UACCESS_DEBUG */
--
- /*
- * User space memory access functions
- */
-@@ -38,27 +30,29 @@
- #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
-
- #ifdef CONFIG_MMU
-+
- #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
- #define USER_DS MAKE_MM_SEG(PAGE_OFFSET)
--#else
--#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
--#define USER_DS MAKE_MM_SEG(0xFFFFFFFF)
--#endif /* CONFIG_MMU */
--
- #define get_ds() (KERNEL_DS)
--#ifdef CONFIG_MMU
- #define get_fs() (current_thread_info()->addr_limit)
- #define set_fs(x) (current_thread_info()->addr_limit = (x))
--#else
-+
-+#else /* not CONFIG_MMU */
-+
-+#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)
-+#define USER_DS MAKE_MM_SEG(0xFFFFFFFF)
-+#define get_ds() (KERNEL_DS)
-+
- static inline mm_segment_t get_fs(void)
- {
-- return USER_DS;
-+ return USER_DS;
- }
-
- static inline void set_fs(mm_segment_t s)
- {
- }
--#endif /* CONFIG_MMU */
-+
-+#endif /* not CONFIG_MMU */
-
- #define segment_eq(a,b) ((a).seg == (b).seg)
-
-@@ -83,9 +77,9 @@
- " subx %0, %0\n" \
- " cmpu %4, %1\n" \
- " subx %0, %5\n" \
-- : "=&r"(flag), "=r"(sum) \
-- : "1"(addr), "r"((int)(size)), \
-- "r"(current_thread_info()->addr_limit.seg), "r"(0) \
-+ : "=&r" (flag), "=r" (sum) \
-+ : "1" (addr), "r" ((int)(size)), \
-+ "r" (current_thread_info()->addr_limit.seg), "r" (0) \
- : "cbit" ); \
- flag; })
-
-@@ -113,10 +107,10 @@
- #else
- static inline int access_ok(int type, const void *addr, unsigned long size)
- {
-- extern unsigned long memory_start, memory_end;
-- unsigned long val = (unsigned long)addr;
-+ extern unsigned long memory_start, memory_end;
-+ unsigned long val = (unsigned long)addr;
-
-- return ((val >= memory_start) && ((val + size) < memory_end));
-+ return ((val >= memory_start) && ((val + size) < memory_end));
- }
- #endif /* CONFIG_MMU */
-
-@@ -155,39 +149,6 @@
- * accesses to the same area of user memory).
- */
-
--extern void __get_user_1(void);
--extern void __get_user_2(void);
--extern void __get_user_4(void);
--
--#ifndef MODULE
--#define __get_user_x(size,ret,x,ptr) \
-- __asm__ __volatile__( \
-- " mv r0, %0\n" \
-- " mv r1, %1\n" \
-- " bl __get_user_" #size "\n" \
-- " mv %0, r0\n" \
-- " mv %1, r1\n" \
-- : "=r"(ret), "=r"(x) \
-- : "0"(ptr) \
-- : "r0", "r1", "r14" )
--#else /* MODULE */
--/*
-- * Use "jl" instead of "bl" for MODULE
-- */
--#define __get_user_x(size,ret,x,ptr) \
-- __asm__ __volatile__( \
-- " mv r0, %0\n" \
-- " mv r1, %1\n" \
-- " seth lr, #high(__get_user_" #size ")\n" \
-- " or3 lr, lr, #low(__get_user_" #size ")\n" \
-- " jl lr\n" \
-- " mv %0, r0\n" \
-- " mv %1, r1\n" \
-- : "=r"(ret), "=r"(x) \
-- : "0"(ptr) \
-- : "r0", "r1", "r14" )
--#endif
--
- /* Careful: we have to cast the result to the type of the pointer for sign
- reasons */
- /**
-@@ -208,20 +169,7 @@
- * On error, the variable @x is set to zero.
- */
- #define get_user(x,ptr) \
--({ int __ret_gu; \
-- unsigned long __val_gu; \
-- __chk_user_ptr(ptr); \
-- switch(sizeof (*(ptr))) { \
-- case 1: __get_user_x(1,__ret_gu,__val_gu,ptr); break; \
-- case 2: __get_user_x(2,__ret_gu,__val_gu,ptr); break; \
-- case 4: __get_user_x(4,__ret_gu,__val_gu,ptr); break; \
-- default: __get_user_x(X,__ret_gu,__val_gu,ptr); break; \
-- } \
-- (x) = (__typeof__(*(ptr)))__val_gu; \
-- __ret_gu; \
--})
--
--extern void __put_user_bad(void);
-+ __get_user_check((x),(ptr),sizeof(*(ptr)))
-
- /**
- * put_user: - Write a simple value into user space.
-@@ -240,8 +188,7 @@
- * Returns zero on success, or -EFAULT on error.
- */
- #define put_user(x,ptr) \
-- __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
--
-+ __put_user_check((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
-
- /**
- * __get_user: - Get a simple variable from user space, with less checking.
-@@ -264,8 +211,64 @@
- * On error, the variable @x is set to zero.
- */
- #define __get_user(x,ptr) \
-- __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
-+ __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
-
-+#define __get_user_nocheck(x,ptr,size) \
-+({ \
-+ long __gu_err = 0; \
-+ unsigned long __gu_val; \
-+ might_sleep(); \
-+ __get_user_size(__gu_val,(ptr),(size),__gu_err); \
-+ (x) = (__typeof__(*(ptr)))__gu_val; \
-+ __gu_err; \
-+})
-+
-+#define __get_user_check(x,ptr,size) \
-+({ \
-+ long __gu_err = -EFAULT; \
-+ unsigned long __gu_val = 0; \
-+ const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
-+ might_sleep(); \
-+ if (access_ok(VERIFY_READ,__gu_addr,size)) \
-+ __get_user_size(__gu_val,__gu_addr,(size),__gu_err); \
-+ (x) = (__typeof__(*(ptr)))__gu_val; \
-+ __gu_err; \
-+})
-+
-+extern long __get_user_bad(void);
-+
-+#define __get_user_size(x,ptr,size,retval) \
-+do { \
-+ retval = 0; \
-+ __chk_user_ptr(ptr); \
-+ switch (size) { \
-+ case 1: __get_user_asm(x,ptr,retval,"ub"); break; \
-+ case 2: __get_user_asm(x,ptr,retval,"uh"); break; \
-+ case 4: __get_user_asm(x,ptr,retval,""); break; \
-+ default: (x) = __get_user_bad(); \
-+ } \
-+} while (0)
-+
-+#define __get_user_asm(x, addr, err, itype) \
-+ __asm__ __volatile__( \
-+ " .fillinsn\n" \
-+ "1: ld"itype" %1,@%2\n" \
-+ " .fillinsn\n" \
-+ "2:\n" \
-+ ".section .fixup,\"ax\"\n" \
-+ " .balign 4\n" \
-+ "3: ldi %0,%3\n" \
-+ " seth r14,#high(2b)\n" \
-+ " or3 r14,r14,#low(2b)\n" \
-+ " jmp r14\n" \
-+ ".previous\n" \
-+ ".section __ex_table,\"a\"\n" \
-+ " .balign 4\n" \
-+ " .long 1b,3b\n" \
-+ ".previous" \
-+ : "=&r" (err), "=&r" (x) \
-+ : "r" (addr), "i" (-EFAULT), "0" (err) \
-+ : "r14", "memory")
-
- /**
- * __put_user: - Write a simple value into user space, with less checking.
-@@ -287,11 +290,13 @@
- * Returns zero on success, or -EFAULT on error.
- */
- #define __put_user(x,ptr) \
-- __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
-+ __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr)))
-+
-
- #define __put_user_nocheck(x,ptr,size) \
- ({ \
- long __pu_err; \
-+ might_sleep(); \
- __put_user_size((x),(ptr),(size),__pu_err); \
- __pu_err; \
- })
-@@ -308,28 +313,28 @@
- })
-
- #if defined(__LITTLE_ENDIAN__)
--#define __put_user_u64(x, addr, err) \
-- __asm__ __volatile__( \
-- " .fillinsn\n" \
-- "1: st %L1,@%2\n" \
-- " .fillinsn\n" \
-- "2: st %H1,@(4,%2)\n" \
-- " .fillinsn\n" \
-- "3:\n" \
-- ".section .fixup,\"ax\"\n" \
-- " .balign 4\n" \
-- "4: ldi %0,%3\n" \
-- " seth r14,#high(3b)\n" \
-- " or3 r14,r14,#low(3b)\n" \
-- " jmp r14\n" \
-- ".previous\n" \
-- ".section __ex_table,\"a\"\n" \
-- " .balign 4\n" \
-- " .long 1b,4b\n" \
-- " .long 2b,4b\n" \
-- ".previous" \
-- : "=&r"(err) \
-- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
-+#define __put_user_u64(x, addr, err) \
-+ __asm__ __volatile__( \
-+ " .fillinsn\n" \
-+ "1: st %L1,@%2\n" \
-+ " .fillinsn\n" \
-+ "2: st %H1,@(4,%2)\n" \
-+ " .fillinsn\n" \
-+ "3:\n" \
-+ ".section .fixup,\"ax\"\n" \
-+ " .balign 4\n" \
-+ "4: ldi %0,%3\n" \
-+ " seth r14,#high(3b)\n" \
-+ " or3 r14,r14,#low(3b)\n" \
-+ " jmp r14\n" \
-+ ".previous\n" \
-+ ".section __ex_table,\"a\"\n" \
-+ " .balign 4\n" \
-+ " .long 1b,4b\n" \
-+ " .long 2b,4b\n" \
-+ ".previous" \
-+ : "=&r" (err) \
-+ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
- : "r14", "memory")
-
- #elif defined(__BIG_ENDIAN__)
-@@ -353,13 +358,15 @@
- " .long 1b,4b\n" \
- " .long 2b,4b\n" \
- ".previous" \
-- : "=&r"(err) \
-- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
-+ : "=&r" (err) \
-+ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
- : "r14", "memory")
- #else
- #error no endian defined
- #endif
-
-+extern void __put_user_bad(void);
-+
- #define __put_user_size(x,ptr,size,retval) \
- do { \
- retval = 0; \
-@@ -398,52 +405,8 @@
- " .balign 4\n" \
- " .long 1b,3b\n" \
- ".previous" \
-- : "=&r"(err) \
-- : "r"(x), "r"(addr), "i"(-EFAULT), "0"(err) \
-- : "r14", "memory")
--
--#define __get_user_nocheck(x,ptr,size) \
--({ \
-- long __gu_err; \
-- unsigned long __gu_val; \
-- __get_user_size(__gu_val,(ptr),(size),__gu_err); \
-- (x) = (__typeof__(*(ptr)))__gu_val; \
-- __gu_err; \
--})
--
--extern long __get_user_bad(void);
--
--#define __get_user_size(x,ptr,size,retval) \
--do { \
-- retval = 0; \
-- __chk_user_ptr(ptr); \
-- switch (size) { \
-- case 1: __get_user_asm(x,ptr,retval,"ub"); break; \
-- case 2: __get_user_asm(x,ptr,retval,"uh"); break; \
-- case 4: __get_user_asm(x,ptr,retval,""); break; \
-- default: (x) = __get_user_bad(); \
-- } \
--} while (0)
--
--#define __get_user_asm(x, addr, err, itype) \
-- __asm__ __volatile__( \
-- " .fillinsn\n" \
-- "1: ld"itype" %1,@%2\n" \
-- " .fillinsn\n" \
-- "2:\n" \
-- ".section .fixup,\"ax\"\n" \
-- " .balign 4\n" \
-- "3: ldi %0,%3\n" \
-- " seth r14,#high(2b)\n" \
-- " or3 r14,r14,#low(2b)\n" \
-- " jmp r14\n" \
-- ".previous\n" \
-- ".section __ex_table,\"a\"\n" \
-- " .balign 4\n" \
-- " .long 1b,3b\n" \
-- ".previous" \
-- : "=&r"(err), "=&r"(x) \
-- : "r"(addr), "i"(-EFAULT), "0"(err) \
-+ : "=&r" (err) \
-+ : "r" (x), "r" (addr), "i" (-EFAULT), "0" (err) \
- : "r14", "memory")
-
- /*
-@@ -453,7 +416,6 @@
- * anything, so this is accurate.
- */
-
--
- /*
- * Copy To/From Userspace
- */
-@@ -511,8 +473,9 @@
- " .long 2b,9b\n" \
- " .long 3b,9b\n" \
- ".previous\n" \
-- : "=&r"(__dst), "=&r"(__src), "=&r"(size), "=&r"(__c) \
-- : "0"(to), "1"(from), "2"(size), "3"(size / 4) \
-+ : "=&r" (__dst), "=&r" (__src), "=&r" (size), \
-+ "=&r" (__c) \
-+ : "0" (to), "1" (from), "2" (size), "3" (size / 4) \
- : "r14", "memory"); \
- } while (0)
-
-@@ -573,8 +536,9 @@
- " .long 2b,7b\n" \
- " .long 3b,7b\n" \
- ".previous\n" \
-- : "=&r"(__dst), "=&r"(__src), "=&r"(size), "=&r"(__c) \
-- : "0"(to), "1"(from), "2"(size), "3"(size / 4) \
-+ : "=&r" (__dst), "=&r" (__src), "=&r" (size), \
-+ "=&r" (__c) \
-+ : "0" (to), "1" (from), "2" (size), "3" (size / 4) \
- : "r14", "memory"); \
- } while (0)
-
-@@ -676,7 +640,7 @@
- #define copy_from_user(to,from,n) \
- ({ \
- might_sleep(); \
--__generic_copy_from_user((to),(from),(n)); \
-+ __generic_copy_from_user((to),(from),(n)); \
- })
-
- long __must_check strncpy_from_user(char *dst, const char __user *src,
-diff -Naur linux-2.6.16/include/asm-mips/bitops.h linux-2.6.16.16/include/asm-mips/bitops.h
---- linux-2.6.16/include/asm-mips/bitops.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-mips/bitops.h 2006-05-11 04:56:24.000000000 +0300
-@@ -654,7 +654,12 @@
- {
- #ifdef CONFIG_32BIT
- #ifdef CONFIG_CPU_MIPS32
-- __asm__ ("clz %0, %1" : "=r" (word) : "r" (word));
-+ __asm__ (
-+ " .set mips32 \n"
-+ " clz %0, %1 \n"
-+ " .set mips0 \n"
-+ : "=r" (word)
-+ : "r" (word));
-
- return 32 - word;
- #else
-@@ -678,7 +683,12 @@
- #ifdef CONFIG_64BIT
- #ifdef CONFIG_CPU_MIPS64
-
-- __asm__ ("dclz %0, %1" : "=r" (word) : "r" (word));
-+ __asm__ (
-+ " .set mips64 \n"
-+ " dclz %0, %1 \n"
-+ " .set mips0 \n"
-+ : "=r" (word)
-+ : "r" (word));
-
- return 64 - word;
- #else
-diff -Naur linux-2.6.16/include/asm-mips/byteorder.h linux-2.6.16.16/include/asm-mips/byteorder.h
---- linux-2.6.16/include/asm-mips/byteorder.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-mips/byteorder.h 2006-05-11 04:56:24.000000000 +0300
-@@ -19,7 +19,9 @@
- static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
- {
- __asm__(
-+ " .set mips32r2 \n"
- " wsbh %0, %1 \n"
-+ " .set mips0 \n"
- : "=r" (x)
- : "r" (x));
-
-@@ -30,8 +32,10 @@
- static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
- {
- __asm__(
-+ " .set mips32r2 \n"
- " wsbh %0, %1 \n"
- " rotr %0, %0, 16 \n"
-+ " .set mips0 \n"
- : "=r" (x)
- : "r" (x));
-
-diff -Naur linux-2.6.16/include/asm-mips/interrupt.h linux-2.6.16.16/include/asm-mips/interrupt.h
---- linux-2.6.16/include/asm-mips/interrupt.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-mips/interrupt.h 2006-05-11 04:56:24.000000000 +0300
-@@ -20,7 +20,9 @@
- " .set reorder \n"
- " .set noat \n"
- #ifdef CONFIG_CPU_MIPSR2
-+ " .set mips32r2 \n"
- " ei \n"
-+ " .set mips0 \n"
- #else
- " mfc0 $1,$12 \n"
- " ori $1,0x1f \n"
-@@ -63,7 +65,9 @@
- " .set push \n"
- " .set noat \n"
- #ifdef CONFIG_CPU_MIPSR2
-+ " .set mips32r2 \n"
- " di \n"
-+ " .set mips0 \n"
- #else
- " mfc0 $1,$12 \n"
- " ori $1,0x1f \n"
-@@ -103,8 +107,10 @@
- " .set reorder \n"
- " .set noat \n"
- #ifdef CONFIG_CPU_MIPSR2
-+ " .set mips32r2 \n"
- " di \\result \n"
- " andi \\result, 1 \n"
-+ " .set mips0 \n"
- #else
- " mfc0 \\result, $12 \n"
- " ori $1, \\result, 0x1f \n"
-@@ -133,9 +139,11 @@
- * Slow, but doesn't suffer from a relativly unlikely race
- * condition we're having since days 1.
- */
-+ " .set mips32r2 \n"
- " beqz \\flags, 1f \n"
- " di \n"
- " ei \n"
-+ " .set mips0 \n"
- "1: \n"
- #elif defined(CONFIG_CPU_MIPSR2)
- /*
-diff -Naur linux-2.6.16/include/asm-mips/r4kcache.h linux-2.6.16.16/include/asm-mips/r4kcache.h
---- linux-2.6.16/include/asm-mips/r4kcache.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-mips/r4kcache.h 2006-05-11 04:56:24.000000000 +0300
-@@ -37,7 +37,7 @@
- " cache %0, %1 \n" \
- " .set pop \n" \
- : \
-- : "i" (op), "m" (*(unsigned char *)(addr)))
-+ : "i" (op), "R" (*(unsigned char *)(addr)))
-
- static inline void flush_icache_line_indexed(unsigned long addr)
- {
-diff -Naur linux-2.6.16/include/asm-powerpc/floppy.h linux-2.6.16.16/include/asm-powerpc/floppy.h
---- linux-2.6.16/include/asm-powerpc/floppy.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-powerpc/floppy.h 2006-05-11 04:56:24.000000000 +0300
-@@ -35,6 +35,7 @@
- #ifdef CONFIG_PCI
-
- #include <linux/pci.h>
-+#include <asm/ppc-pci.h> /* for ppc64_isabridge_dev */
-
- #define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
-
-@@ -52,12 +53,12 @@
- if (bus_addr
- && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
- /* different from last time -- unmap prev */
-- pci_unmap_single(NULL, bus_addr, prev_size, prev_dir);
-+ pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
- bus_addr = 0;
- }
-
- if (!bus_addr) /* need to map it */
-- bus_addr = pci_map_single(NULL, addr, size, dir);
-+ bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
-
- /* remember this one as prev */
- prev_addr = addr;
-diff -Naur linux-2.6.16/include/asm-x86_64/cpufeature.h linux-2.6.16.16/include/asm-x86_64/cpufeature.h
---- linux-2.6.16/include/asm-x86_64/cpufeature.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-x86_64/cpufeature.h 2006-05-11 04:56:24.000000000 +0300
-@@ -64,6 +64,7 @@
- #define X86_FEATURE_REP_GOOD (3*32+ 4) /* rep microcode works well on this CPU */
- #define X86_FEATURE_CONSTANT_TSC (3*32+5) /* TSC runs at constant rate */
- #define X86_FEATURE_SYNC_RDTSC (3*32+6) /* RDTSC syncs CPU core */
-+#define X86_FEATURE_FXSAVE_LEAK (3*32+7) /* FIP/FOP/FDP leaks through FXSAVE */
-
- /* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
- #define X86_FEATURE_XMM3 (4*32+ 0) /* Streaming SIMD Extensions-3 */
-diff -Naur linux-2.6.16/include/asm-x86_64/i387.h linux-2.6.16.16/include/asm-x86_64/i387.h
---- linux-2.6.16/include/asm-x86_64/i387.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/asm-x86_64/i387.h 2006-05-11 04:56:24.000000000 +0300
-@@ -72,6 +72,23 @@
- #define set_fpu_swd(t,val) ((t)->thread.i387.fxsave.swd = (val))
- #define set_fpu_fxsr_twd(t,val) ((t)->thread.i387.fxsave.twd = (val))
-
-+#define X87_FSW_ES (1 << 7) /* Exception Summary */
-+
-+/* AMD CPUs don't save/restore FDP/FIP/FOP unless an exception
-+ is pending. Clear the x87 state here by setting it to fixed
-+ values. The kernel data segment can be sometimes 0 and sometimes
-+ new user value. Both should be ok.
-+ Use the PDA as safe address because it should be already in L1. */
-+static inline void clear_fpu_state(struct i387_fxsave_struct *fx)
-+{
-+ if (unlikely(fx->swd & X87_FSW_ES))
-+ asm volatile("fnclex");
-+ alternative_input(ASM_NOP8 ASM_NOP2,
-+ " emms\n" /* clear stack tags */
-+ " fildl %%gs:0", /* load to clear state */
-+ X86_FEATURE_FXSAVE_LEAK);
-+}
-+
- static inline int restore_fpu_checking(struct i387_fxsave_struct *fx)
- {
- int err;
-@@ -119,6 +136,7 @@
- #endif
- if (unlikely(err))
- __clear_user(fx, sizeof(struct i387_fxsave_struct));
-+ /* No need to clear here because the caller clears USED_MATH */
- return err;
- }
-
-@@ -149,7 +167,7 @@
- "i" (offsetof(__typeof__(*tsk),
- thread.i387.fxsave)));
- #endif
-- __asm__ __volatile__("fnclex");
-+ clear_fpu_state(&tsk->thread.i387.fxsave);
- }
-
- static inline void kernel_fpu_begin(void)
-diff -Naur linux-2.6.16/include/linux/cpu.h linux-2.6.16.16/include/linux/cpu.h
---- linux-2.6.16/include/linux/cpu.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/cpu.h 2006-05-11 04:56:24.000000000 +0300
-@@ -32,7 +32,7 @@
- };
-
- extern int register_cpu(struct cpu *, int, struct node *);
--extern struct sys_device *get_cpu_sysdev(int cpu);
-+extern struct sys_device *get_cpu_sysdev(unsigned cpu);
- #ifdef CONFIG_HOTPLUG_CPU
- extern void unregister_cpu(struct cpu *, struct node *);
- #endif
-diff -Naur linux-2.6.16/include/linux/cpumask.h linux-2.6.16.16/include/linux/cpumask.h
---- linux-2.6.16/include/linux/cpumask.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/cpumask.h 2006-05-11 04:56:24.000000000 +0300
-@@ -408,6 +408,7 @@
- })
-
- #define for_each_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map)
-+#define for_each_possible_cpu(cpu) for_each_cpu_mask((cpu), cpu_possible_map)
- #define for_each_online_cpu(cpu) for_each_cpu_mask((cpu), cpu_online_map)
- #define for_each_present_cpu(cpu) for_each_cpu_mask((cpu), cpu_present_map)
-
-diff -Naur linux-2.6.16/include/linux/fb.h linux-2.6.16.16/include/linux/fb.h
---- linux-2.6.16/include/linux/fb.h 2006-05-18 01:12:24.000000000 +0300
-+++ linux-2.6.16.16/include/linux/fb.h 2006-05-17 21:41:31.000000000 +0300
-@@ -840,12 +840,10 @@
- #define FB_LEFT_POS(bpp) (32 - bpp)
- #define FB_SHIFT_HIGH(val, bits) ((val) >> (bits))
- #define FB_SHIFT_LOW(val, bits) ((val) << (bits))
--#define FB_BIT_NR(b) (7 - (b))
- #else
- #define FB_LEFT_POS(bpp) (0)
- #define FB_SHIFT_HIGH(val, bits) ((val) << (bits))
- #define FB_SHIFT_LOW(val, bits) ((val) >> (bits))
--#define FB_BIT_NR(b) (b)
- #endif
-
- /*
-diff -Naur linux-2.6.16/include/linux/fs.h linux-2.6.16.16/include/linux/fs.h
---- linux-2.6.16/include/linux/fs.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/fs.h 2006-05-11 04:56:24.000000000 +0300
-@@ -1383,6 +1383,7 @@
- extern void bd_release(struct block_device *);
-
- /* fs/char_dev.c */
-+#define CHRDEV_MAJOR_HASH_SIZE 255
- extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
- extern int register_chrdev_region(dev_t, unsigned, const char *);
- extern int register_chrdev(unsigned int, const char *,
-@@ -1390,25 +1391,17 @@
- extern int unregister_chrdev(unsigned int, const char *);
- extern void unregister_chrdev_region(dev_t, unsigned);
- extern int chrdev_open(struct inode *, struct file *);
--extern int get_chrdev_list(char *);
--extern void *acquire_chrdev_list(void);
--extern int count_chrdev_list(void);
--extern void *get_next_chrdev(void *);
--extern int get_chrdev_info(void *, int *, char **);
--extern void release_chrdev_list(void *);
-+extern void chrdev_show(struct seq_file *,off_t);
-
- /* fs/block_dev.c */
-+#define BLKDEV_MAJOR_HASH_SIZE 255
- #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
- extern const char *__bdevname(dev_t, char *buffer);
- extern const char *bdevname(struct block_device *bdev, char *buffer);
- extern struct block_device *lookup_bdev(const char *);
- extern struct block_device *open_bdev_excl(const char *, int, void *);
- extern void close_bdev_excl(struct block_device *);
--extern void *acquire_blkdev_list(void);
--extern int count_blkdev_list(void);
--extern void *get_next_blkdev(void *);
--extern int get_blkdev_info(void *, int *, char **);
--extern void release_blkdev_list(void *);
-+extern void blkdev_show(struct seq_file *,off_t);
-
- extern void init_special_inode(struct inode *, umode_t, dev_t);
-
-diff -Naur linux-2.6.16/include/linux/mm.h linux-2.6.16.16/include/linux/mm.h
---- linux-2.6.16/include/linux/mm.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/mm.h 2006-05-11 04:56:24.000000000 +0300
-@@ -229,10 +229,9 @@
- unsigned long private; /* Mapping-private opaque data:
- * usually used for buffer_heads
- * if PagePrivate set; used for
-- * swp_entry_t if PageSwapCache.
-- * When page is free, this
-+ * swp_entry_t if PageSwapCache;
- * indicates order in the buddy
-- * system.
-+ * system if PG_buddy is set.
- */
- struct address_space *mapping; /* If low bit clear, points to
- * inode address_space, or NULL.
-diff -Naur linux-2.6.16/include/linux/page-flags.h linux-2.6.16.16/include/linux/page-flags.h
---- linux-2.6.16/include/linux/page-flags.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/page-flags.h 2006-05-11 04:56:24.000000000 +0300
-@@ -74,7 +74,9 @@
- #define PG_mappedtodisk 16 /* Has blocks allocated on-disk */
- #define PG_reclaim 17 /* To be reclaimed asap */
- #define PG_nosave_free 18 /* Free, should not be written */
--#define PG_uncached 19 /* Page has been mapped as uncached */
-+#define PG_buddy 19 /* Page is free, on buddy lists */
-+
-+#define PG_uncached 20 /* Page has been mapped as uncached */
-
- /*
- * Global page accounting. One instance per CPU. Only unsigned longs are
-@@ -319,6 +321,10 @@
- #define SetPageNosaveFree(page) set_bit(PG_nosave_free, &(page)->flags)
- #define ClearPageNosaveFree(page) clear_bit(PG_nosave_free, &(page)->flags)
-
-+#define PageBuddy(page) test_bit(PG_buddy, &(page)->flags)
-+#define __SetPageBuddy(page) __set_bit(PG_buddy, &(page)->flags)
-+#define __ClearPageBuddy(page) __clear_bit(PG_buddy, &(page)->flags)
-+
- #define PageMappedToDisk(page) test_bit(PG_mappedtodisk, &(page)->flags)
- #define SetPageMappedToDisk(page) set_bit(PG_mappedtodisk, &(page)->flags)
- #define ClearPageMappedToDisk(page) clear_bit(PG_mappedtodisk, &(page)->flags)
-diff -Naur linux-2.6.16/include/linux/proc_fs.h linux-2.6.16.16/include/linux/proc_fs.h
---- linux-2.6.16/include/linux/proc_fs.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/proc_fs.h 2006-05-11 04:56:24.000000000 +0300
-@@ -78,7 +78,7 @@
- struct vmcore {
- struct list_head list;
- unsigned long long paddr;
-- unsigned long size;
-+ unsigned long long size;
- loff_t offset;
- };
-
-diff -Naur linux-2.6.16/include/linux/raid/raid1.h linux-2.6.16.16/include/linux/raid/raid1.h
---- linux-2.6.16/include/linux/raid/raid1.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/raid/raid1.h 2006-05-11 04:56:24.000000000 +0300
-@@ -130,6 +130,6 @@
- * with failure when last write completes (and all failed).
- * Record that bi_end_io was called with this flag...
- */
--#define R1BIO_Returned 4
-+#define R1BIO_Returned 6
-
- #endif
-diff -Naur linux-2.6.16/include/linux/rtc.h linux-2.6.16.16/include/linux/rtc.h
---- linux-2.6.16/include/linux/rtc.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/linux/rtc.h 2006-05-11 04:56:24.000000000 +0300
-@@ -11,8 +11,6 @@
- #ifndef _LINUX_RTC_H_
- #define _LINUX_RTC_H_
-
--#include <linux/interrupt.h>
--
- /*
- * The struct used to pass data via the following ioctl. Similar to the
- * struct tm in <time.h>, but it needs to be here so that the kernel
-@@ -95,6 +93,8 @@
-
- #ifdef __KERNEL__
-
-+#include <linux/interrupt.h>
-+
- typedef struct rtc_task {
- void (*func)(void *private_data);
- void *private_data;
-diff -Naur linux-2.6.16/include/net/ip.h linux-2.6.16.16/include/net/ip.h
---- linux-2.6.16/include/net/ip.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/net/ip.h 2006-05-11 04:56:24.000000000 +0300
-@@ -95,6 +95,7 @@
- extern int ip_mr_input(struct sk_buff *skb);
- extern int ip_output(struct sk_buff *skb);
- extern int ip_mc_output(struct sk_buff *skb);
-+extern int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *));
- extern int ip_do_nat(struct sk_buff *skb);
- extern void ip_send_check(struct iphdr *ip);
- extern int ip_queue_xmit(struct sk_buff *skb, int ipfragok);
-diff -Naur linux-2.6.16/include/net/sctp/structs.h linux-2.6.16.16/include/net/sctp/structs.h
---- linux-2.6.16/include/net/sctp/structs.h 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/include/net/sctp/structs.h 2006-05-11 04:56:24.000000000 +0300
-@@ -702,6 +702,7 @@
- __u8 tsn_gap_acked; /* Is this chunk acked by a GAP ACK? */
- __s8 fast_retransmit; /* Is this chunk fast retransmitted? */
- __u8 tsn_missing_report; /* Data chunk missing counter. */
-+ __u8 data_accepted; /* At least 1 chunk in this packet accepted */
- };
-
- void sctp_chunk_hold(struct sctp_chunk *);
-diff -Naur linux-2.6.16/ipc/shm.c linux-2.6.16.16/ipc/shm.c
---- linux-2.6.16/ipc/shm.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/ipc/shm.c 2006-05-11 04:56:24.000000000 +0300
-@@ -161,6 +161,8 @@
- ret = shmem_mmap(file, vma);
- if (ret == 0) {
- vma->vm_ops = &shm_vm_ops;
-+ if (!(vma->vm_flags & VM_WRITE))
-+ vma->vm_flags &= ~VM_MAYWRITE;
- shm_inc(file->f_dentry->d_inode->i_ino);
- }
-
-diff -Naur linux-2.6.16/ipc/util.c linux-2.6.16.16/ipc/util.c
---- linux-2.6.16/ipc/util.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/ipc/util.c 2006-05-11 04:56:24.000000000 +0300
-@@ -182,8 +182,7 @@
- if(new == NULL)
- return size;
- new->size = newsize;
-- memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size +
-- sizeof(struct ipc_id_ary));
-+ memcpy(new->p, ids->entries->p, sizeof(struct kern_ipc_perm *)*size);
- for(i=size;i<newsize;i++) {
- new->p[i] = NULL;
- }
-diff -Naur linux-2.6.16/kernel/auditsc.c linux-2.6.16.16/kernel/auditsc.c
---- linux-2.6.16/kernel/auditsc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/auditsc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -966,11 +966,6 @@
- if (context->in_syscall) {
- struct audit_context *newctx;
-
--#if defined(__NR_vm86) && defined(__NR_vm86old)
-- /* vm86 mode should only be entered once */
-- if (major == __NR_vm86 || major == __NR_vm86old)
-- return;
--#endif
- #if AUDIT_DEBUG
- printk(KERN_ERR
- "audit(:%d) pid=%d in syscall=%d;"
-diff -Naur linux-2.6.16/kernel/exec_domain.c linux-2.6.16.16/kernel/exec_domain.c
---- linux-2.6.16/kernel/exec_domain.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/exec_domain.c 2006-05-11 04:56:24.000000000 +0300
-@@ -140,6 +140,7 @@
- ep = lookup_exec_domain(personality);
- if (ep == current_thread_info()->exec_domain) {
- current->personality = personality;
-+ module_put(ep->module);
- return 0;
- }
-
-diff -Naur linux-2.6.16/kernel/fork.c linux-2.6.16.16/kernel/fork.c
---- linux-2.6.16/kernel/fork.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/fork.c 2006-05-11 04:56:24.000000000 +0300
-@@ -720,7 +720,7 @@
- free_fdset (new_fdt->open_fds, new_fdt->max_fdset);
- free_fd_array(new_fdt->fd, new_fdt->max_fds);
- kmem_cache_free(files_cachep, newf);
-- goto out;
-+ return NULL;
- }
-
- static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
-diff -Naur linux-2.6.16/kernel/power/process.c linux-2.6.16.16/kernel/power/process.c
---- linux-2.6.16/kernel/power/process.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/power/process.c 2006-05-11 04:56:24.000000000 +0300
-@@ -25,8 +25,7 @@
- (p->flags & PF_NOFREEZE) ||
- (p->exit_state == EXIT_ZOMBIE) ||
- (p->exit_state == EXIT_DEAD) ||
-- (p->state == TASK_STOPPED) ||
-- (p->state == TASK_TRACED))
-+ (p->state == TASK_STOPPED))
- return 0;
- return 1;
- }
-diff -Naur linux-2.6.16/kernel/ptrace.c linux-2.6.16.16/kernel/ptrace.c
---- linux-2.6.16/kernel/ptrace.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/ptrace.c 2006-05-11 04:56:24.000000000 +0300
-@@ -57,10 +57,6 @@
- signal_wake_up(child, 1);
- }
- }
-- if (child->signal->flags & SIGNAL_GROUP_EXIT) {
-- sigaddset(&child->pending.signal, SIGKILL);
-- signal_wake_up(child, 1);
-- }
- spin_unlock(&child->sighand->siglock);
- }
-
-@@ -82,7 +78,8 @@
- SET_LINKS(child);
- }
-
-- ptrace_untrace(child);
-+ if (child->state == TASK_TRACED)
-+ ptrace_untrace(child);
- }
-
- /*
-diff -Naur linux-2.6.16/kernel/sched.c linux-2.6.16.16/kernel/sched.c
---- linux-2.6.16/kernel/sched.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/sched.c 2006-05-11 04:56:24.000000000 +0300
-@@ -237,6 +237,7 @@
-
- task_t *migration_thread;
- struct list_head migration_queue;
-+ int cpu;
- #endif
-
- #ifdef CONFIG_SCHEDSTATS
-@@ -1660,6 +1661,9 @@
- /*
- * double_rq_lock - safely lock two runqueues
- *
-+ * We must take them in cpu order to match code in
-+ * dependent_sleeper and wake_dependent_sleeper.
-+ *
- * Note this does not disable interrupts like task_rq_lock,
- * you need to do so manually before calling.
- */
-@@ -1671,7 +1675,7 @@
- spin_lock(&rq1->lock);
- __acquire(rq2->lock); /* Fake it out ;) */
- } else {
-- if (rq1 < rq2) {
-+ if (rq1->cpu < rq2->cpu) {
- spin_lock(&rq1->lock);
- spin_lock(&rq2->lock);
- } else {
-@@ -1707,7 +1711,7 @@
- __acquires(this_rq->lock)
- {
- if (unlikely(!spin_trylock(&busiest->lock))) {
-- if (busiest < this_rq) {
-+ if (busiest->cpu < this_rq->cpu) {
- spin_unlock(&this_rq->lock);
- spin_lock(&busiest->lock);
- spin_lock(&this_rq->lock);
-@@ -6035,6 +6039,7 @@
- rq->push_cpu = 0;
- rq->migration_thread = NULL;
- INIT_LIST_HEAD(&rq->migration_queue);
-+ rq->cpu = i;
- #endif
- atomic_set(&rq->nr_iowait, 0);
-
-diff -Naur linux-2.6.16/kernel/signal.c linux-2.6.16.16/kernel/signal.c
---- linux-2.6.16/kernel/signal.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/signal.c 2006-05-11 04:56:24.000000000 +0300
-@@ -975,7 +975,6 @@
- if (t == NULL)
- /* restart balancing at this thread */
- t = p->signal->curr_target = p;
-- BUG_ON(t->tgid != p->tgid);
-
- while (!wants_signal(sig, t)) {
- t = next_thread(t);
-@@ -1689,6 +1688,7 @@
- /* Let the debugger run. */
- set_current_state(TASK_TRACED);
- spin_unlock_irq(&current->sighand->siglock);
-+ try_to_freeze();
- read_lock(&tasklist_lock);
- if (likely(current->ptrace & PT_PTRACED) &&
- likely(current->parent != current->real_parent ||
-@@ -1942,9 +1942,9 @@
- /* Let the debugger run. */
- ptrace_stop(signr, signr, info);
-
-- /* We're back. Did the debugger cancel the sig or group_exit? */
-+ /* We're back. Did the debugger cancel the sig? */
- signr = current->exit_code;
-- if (signr == 0 || current->signal->flags & SIGNAL_GROUP_EXIT)
-+ if (signr == 0)
- continue;
-
- current->exit_code = 0;
-diff -Naur linux-2.6.16/kernel/sys.c linux-2.6.16.16/kernel/sys.c
---- linux-2.6.16/kernel/sys.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/sys.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1657,7 +1657,19 @@
- (cputime_eq(current->signal->it_prof_expires, cputime_zero) ||
- new_rlim.rlim_cur <= cputime_to_secs(
- current->signal->it_prof_expires))) {
-- cputime_t cputime = secs_to_cputime(new_rlim.rlim_cur);
-+ unsigned long rlim_cur = new_rlim.rlim_cur;
-+ cputime_t cputime;
-+
-+ if (rlim_cur == 0) {
-+ /*
-+ * The caller is asking for an immediate RLIMIT_CPU
-+ * expiry. But we use the zero value to mean "it was
-+ * never set". So let's cheat and make it one second
-+ * instead
-+ */
-+ rlim_cur = 1;
-+ }
-+ cputime = secs_to_cputime(rlim_cur);
- read_lock(&tasklist_lock);
- spin_lock_irq(&current->sighand->siglock);
- set_process_cpu_timer(current, CPUCLOCK_PROF,
-diff -Naur linux-2.6.16/kernel/uid16.c linux-2.6.16.16/kernel/uid16.c
---- linux-2.6.16/kernel/uid16.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/kernel/uid16.c 2006-05-11 04:56:24.000000000 +0300
-@@ -20,43 +20,67 @@
-
- asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group)
- {
-- return sys_chown(filename, low2highuid(user), low2highgid(group));
-+ long ret = sys_chown(filename, low2highuid(user), low2highgid(group));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group)
- {
-- return sys_lchown(filename, low2highuid(user), low2highgid(group));
-+ long ret = sys_lchown(filename, low2highuid(user), low2highgid(group));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group)
- {
-- return sys_fchown(fd, low2highuid(user), low2highgid(group));
-+ long ret = sys_fchown(fd, low2highuid(user), low2highgid(group));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid)
- {
-- return sys_setregid(low2highgid(rgid), low2highgid(egid));
-+ long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setgid16(old_gid_t gid)
- {
-- return sys_setgid(low2highgid(gid));
-+ long ret = sys_setgid(low2highgid(gid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid)
- {
-- return sys_setreuid(low2highuid(ruid), low2highuid(euid));
-+ long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setuid16(old_uid_t uid)
- {
-- return sys_setuid(low2highuid(uid));
-+ long ret = sys_setuid(low2highuid(uid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid)
- {
-- return sys_setresuid(low2highuid(ruid), low2highuid(euid),
-- low2highuid(suid));
-+ long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),
-+ low2highuid(suid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid)
-@@ -72,8 +96,11 @@
-
- asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid)
- {
-- return sys_setresgid(low2highgid(rgid), low2highgid(egid),
-- low2highgid(sgid));
-+ long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),
-+ low2highgid(sgid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid)
-@@ -89,12 +116,18 @@
-
- asmlinkage long sys_setfsuid16(old_uid_t uid)
- {
-- return sys_setfsuid(low2highuid(uid));
-+ long ret = sys_setfsuid(low2highuid(uid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- asmlinkage long sys_setfsgid16(old_gid_t gid)
- {
-- return sys_setfsgid(low2highgid(gid));
-+ long ret = sys_setfsgid(low2highgid(gid));
-+ /* avoid REGPARM breakage on x86: */
-+ prevent_tail_call(ret);
-+ return ret;
- }
-
- static int groups16_to_user(old_gid_t __user *grouplist,
-diff -Naur linux-2.6.16/Makefile linux-2.6.16.16/Makefile
---- linux-2.6.16/Makefile 2006-05-18 01:12:20.000000000 +0300
-+++ linux-2.6.16.16/Makefile 2006-05-17 21:41:27.000000000 +0300
-@@ -1,7 +1,7 @@
- VERSION = 2
- PATCHLEVEL = 6
- SUBLEVEL = 16
--EXTRAVERSION =
-+EXTRAVERSION = .16
- NAME=Sliding Snow Leopard
-
- # *DOCUMENTATION*
-diff -Naur linux-2.6.16/mm/madvise.c linux-2.6.16.16/mm/madvise.c
---- linux-2.6.16/mm/madvise.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/mm/madvise.c 2006-05-11 04:56:24.000000000 +0300
-@@ -168,6 +168,9 @@
- return -EINVAL;
- }
-
-+ if ((vma->vm_flags & (VM_SHARED|VM_WRITE)) != (VM_SHARED|VM_WRITE))
-+ return -EACCES;
-+
- mapping = vma->vm_file->f_mapping;
-
- offset = (loff_t)(start - vma->vm_start)
-diff -Naur linux-2.6.16/mm/page_alloc.c linux-2.6.16.16/mm/page_alloc.c
---- linux-2.6.16/mm/page_alloc.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/mm/page_alloc.c 2006-05-11 04:56:24.000000000 +0300
-@@ -153,7 +153,8 @@
- 1 << PG_reclaim |
- 1 << PG_slab |
- 1 << PG_swapcache |
-- 1 << PG_writeback );
-+ 1 << PG_writeback |
-+ 1 << PG_buddy );
- set_page_count(page, 0);
- reset_page_mapcount(page);
- page->mapping = NULL;
-@@ -224,12 +225,12 @@
-
- static inline void set_page_order(struct page *page, int order) {
- set_page_private(page, order);
-- __SetPagePrivate(page);
-+ __SetPageBuddy(page);
- }
-
- static inline void rmv_page_order(struct page *page)
- {
-- __ClearPagePrivate(page);
-+ __ClearPageBuddy(page);
- set_page_private(page, 0);
- }
-
-@@ -268,11 +269,13 @@
- * This function checks whether a page is free && is the buddy
- * we can do coalesce a page and its buddy if
- * (a) the buddy is not in a hole &&
-- * (b) the buddy is free &&
-- * (c) the buddy is on the buddy system &&
-- * (d) a page and its buddy have the same order.
-- * for recording page's order, we use page_private(page) and PG_private.
-+ * (b) the buddy is in the buddy system &&
-+ * (c) a page and its buddy have the same order.
-+ *
-+ * For recording whether a page is in the buddy system, we use PG_buddy.
-+ * Setting, clearing, and testing PG_buddy is serialized by zone->lock.
- *
-+ * For recording page's order, we use page_private(page).
- */
- static inline int page_is_buddy(struct page *page, int order)
- {
-@@ -281,10 +284,10 @@
- return 0;
- #endif
-
-- if (PagePrivate(page) &&
-- (page_order(page) == order) &&
-- page_count(page) == 0)
-+ if (PageBuddy(page) && page_order(page) == order) {
-+ BUG_ON(page_count(page) != 0);
- return 1;
-+ }
- return 0;
- }
-
-@@ -301,7 +304,7 @@
- * as necessary, plus some accounting needed to play nicely with other
- * parts of the VM system.
- * At each level, we keep a list of pages, which are heads of continuous
-- * free pages of length of (1 << order) and marked with PG_Private.Page's
-+ * free pages of length of (1 << order) and marked with PG_buddy. Page's
- * order is recorded in page_private(page) field.
- * So when we are allocating or freeing one, we can derive the state of the
- * other. That is, if we allocate a small block, and both were
-@@ -364,7 +367,8 @@
- 1 << PG_slab |
- 1 << PG_swapcache |
- 1 << PG_writeback |
-- 1 << PG_reserved ))))
-+ 1 << PG_reserved |
-+ 1 << PG_buddy ))))
- bad_page(page);
- if (PageDirty(page))
- __ClearPageDirty(page);
-@@ -522,7 +526,8 @@
- 1 << PG_slab |
- 1 << PG_swapcache |
- 1 << PG_writeback |
-- 1 << PG_reserved ))))
-+ 1 << PG_reserved |
-+ 1 << PG_buddy ))))
- bad_page(page);
-
- /*
-diff -Naur linux-2.6.16/net/atm/clip.c linux-2.6.16.16/net/atm/clip.c
---- linux-2.6.16/net/atm/clip.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/atm/clip.c 2006-05-11 04:56:24.000000000 +0300
-@@ -613,12 +613,19 @@
-
-
- static int clip_device_event(struct notifier_block *this,unsigned long event,
-- void *dev)
-+ void *arg)
- {
-+ struct net_device *dev = arg;
-+
-+ if (event == NETDEV_UNREGISTER) {
-+ neigh_ifdown(&clip_tbl, dev);
-+ return NOTIFY_DONE;
-+ }
-+
- /* ignore non-CLIP devices */
-- if (((struct net_device *) dev)->type != ARPHRD_ATM ||
-- ((struct net_device *) dev)->hard_start_xmit != clip_start_xmit)
-+ if (dev->type != ARPHRD_ATM || dev->hard_start_xmit != clip_start_xmit)
- return NOTIFY_DONE;
-+
- switch (event) {
- case NETDEV_UP:
- DPRINTK("clip_device_event NETDEV_UP\n");
-@@ -686,14 +693,12 @@
- static void atmarpd_close(struct atm_vcc *vcc)
- {
- DPRINTK("atmarpd_close\n");
-- atmarpd = NULL; /* assumed to be atomic */
-- barrier();
-- unregister_inetaddr_notifier(&clip_inet_notifier);
-- unregister_netdevice_notifier(&clip_dev_notifier);
-- if (skb_peek(&sk_atm(vcc)->sk_receive_queue))
-- printk(KERN_ERR "atmarpd_close: closing with requests "
-- "pending\n");
-+
-+ rtnl_lock();
-+ atmarpd = NULL;
- skb_queue_purge(&sk_atm(vcc)->sk_receive_queue);
-+ rtnl_unlock();
-+
- DPRINTK("(done)\n");
- module_put(THIS_MODULE);
- }
-@@ -714,7 +719,12 @@
-
- static int atm_init_atmarp(struct atm_vcc *vcc)
- {
-- if (atmarpd) return -EADDRINUSE;
-+ rtnl_lock();
-+ if (atmarpd) {
-+ rtnl_unlock();
-+ return -EADDRINUSE;
-+ }
-+
- if (start_timer) {
- start_timer = 0;
- init_timer(&idle_timer);
-@@ -731,10 +741,7 @@
- vcc->push = NULL;
- vcc->pop = NULL; /* crash */
- vcc->push_oam = NULL; /* crash */
-- if (register_netdevice_notifier(&clip_dev_notifier))
-- printk(KERN_ERR "register_netdevice_notifier failed\n");
-- if (register_inetaddr_notifier(&clip_inet_notifier))
-- printk(KERN_ERR "register_inetaddr_notifier failed\n");
-+ rtnl_unlock();
- return 0;
- }
-
-@@ -992,6 +999,8 @@
-
- clip_tbl_hook = &clip_tbl;
- register_atm_ioctl(&clip_ioctl_ops);
-+ register_netdevice_notifier(&clip_dev_notifier);
-+ register_inetaddr_notifier(&clip_inet_notifier);
-
- #ifdef CONFIG_PROC_FS
- {
-@@ -1012,6 +1021,9 @@
-
- remove_proc_entry("arp", atm_proc_root);
-
-+ unregister_inetaddr_notifier(&clip_inet_notifier);
-+ unregister_netdevice_notifier(&clip_dev_notifier);
-+
- deregister_atm_ioctl(&clip_ioctl_ops);
-
- /* First, stop the idle timer, so it stops banging
-diff -Naur linux-2.6.16/net/bridge/br_netfilter.c linux-2.6.16.16/net/bridge/br_netfilter.c
---- linux-2.6.16/net/bridge/br_netfilter.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/bridge/br_netfilter.c 2006-05-11 04:56:24.000000000 +0300
-@@ -739,6 +739,15 @@
- return NF_STOLEN;
- }
-
-+static int br_nf_dev_queue_xmit(struct sk_buff *skb)
-+{
-+ if (skb->protocol == htons(ETH_P_IP) &&
-+ skb->len > skb->dev->mtu &&
-+ !(skb_shinfo(skb)->ufo_size || skb_shinfo(skb)->tso_size))
-+ return ip_fragment(skb, br_dev_queue_push_xmit);
-+ else
-+ return br_dev_queue_push_xmit(skb);
-+}
-
- /* PF_BRIDGE/POST_ROUTING ********************************************/
- static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
-@@ -798,7 +807,7 @@
- realoutdev = nf_bridge->netoutdev;
- #endif
- NF_HOOK(pf, NF_IP_POST_ROUTING, skb, NULL, realoutdev,
-- br_dev_queue_push_xmit);
-+ br_nf_dev_queue_xmit);
-
- return NF_STOLEN;
-
-@@ -843,7 +852,7 @@
- if ((out->hard_start_xmit == br_dev_xmit &&
- okfn != br_nf_forward_finish &&
- okfn != br_nf_local_out_finish &&
-- okfn != br_dev_queue_push_xmit)
-+ okfn != br_nf_dev_queue_xmit)
- #if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
- || ((out->priv_flags & IFF_802_1Q_VLAN) &&
- VLAN_DEV_INFO(out)->real_dev->hard_start_xmit == br_dev_xmit)
-diff -Naur linux-2.6.16/net/core/dev.c linux-2.6.16.16/net/core/dev.c
---- linux-2.6.16/net/core/dev.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/core/dev.c 2006-05-11 04:56:24.000000000 +0300
-@@ -2932,11 +2932,11 @@
-
- switch(dev->reg_state) {
- case NETREG_REGISTERING:
-+ dev->reg_state = NETREG_REGISTERED;
- err = netdev_register_sysfs(dev);
- if (err)
- printk(KERN_ERR "%s: failed sysfs registration (%d)\n",
- dev->name, err);
-- dev->reg_state = NETREG_REGISTERED;
- break;
-
- case NETREG_UNREGISTERING:
-diff -Naur linux-2.6.16/net/core/sock.c linux-2.6.16.16/net/core/sock.c
---- linux-2.6.16/net/core/sock.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/core/sock.c 2006-05-11 04:56:24.000000000 +0300
-@@ -404,8 +404,9 @@
- if (!valbool) {
- sk->sk_bound_dev_if = 0;
- } else {
-- if (optlen > IFNAMSIZ)
-- optlen = IFNAMSIZ;
-+ if (optlen > IFNAMSIZ - 1)
-+ optlen = IFNAMSIZ - 1;
-+ memset(devname, 0, sizeof(devname));
- if (copy_from_user(devname, optval, optlen)) {
- ret = -EFAULT;
- break;
-diff -Naur linux-2.6.16/net/ipv4/fib_trie.c linux-2.6.16.16/net/ipv4/fib_trie.c
---- linux-2.6.16/net/ipv4/fib_trie.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/fib_trie.c 2006-05-11 04:56:24.000000000 +0300
-@@ -314,11 +314,6 @@
- kfree(container_of(head, struct leaf, rcu));
- }
-
--static inline void free_leaf(struct leaf *leaf)
--{
-- call_rcu(&leaf->rcu, __leaf_free_rcu);
--}
--
- static void __leaf_info_free_rcu(struct rcu_head *head)
- {
- kfree(container_of(head, struct leaf_info, rcu));
-@@ -357,7 +352,12 @@
-
- static inline void tnode_free(struct tnode *tn)
- {
-- call_rcu(&tn->rcu, __tnode_free_rcu);
-+ if(IS_LEAF(tn)) {
-+ struct leaf *l = (struct leaf *) tn;
-+ call_rcu_bh(&l->rcu, __leaf_free_rcu);
-+ }
-+ else
-+ call_rcu(&tn->rcu, __tnode_free_rcu);
- }
-
- static struct leaf *leaf_new(void)
-diff -Naur linux-2.6.16/net/ipv4/ip_output.c linux-2.6.16.16/net/ipv4/ip_output.c
---- linux-2.6.16/net/ipv4/ip_output.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/ip_output.c 2006-05-11 04:56:24.000000000 +0300
-@@ -86,8 +86,6 @@
-
- int sysctl_ip_default_ttl = IPDEFTTL;
-
--static int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*));
--
- /* Generate a checksum for an outgoing IP datagram. */
- __inline__ void ip_send_check(struct iphdr *iph)
- {
-@@ -421,7 +419,7 @@
- * single device frame, and queue such a frame for sending.
- */
-
--static int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
-+int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
- {
- struct iphdr *iph;
- int raw = 0;
-@@ -673,6 +671,8 @@
- return err;
- }
-
-+EXPORT_SYMBOL(ip_fragment);
-+
- int
- ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
- {
-@@ -1249,11 +1249,7 @@
- iph->tos = inet->tos;
- iph->tot_len = htons(skb->len);
- iph->frag_off = df;
-- if (!df) {
-- __ip_select_ident(iph, &rt->u.dst, 0);
-- } else {
-- iph->id = htons(inet->id++);
-- }
-+ ip_select_ident(iph, &rt->u.dst, sk);
- iph->ttl = ttl;
- iph->protocol = sk->sk_protocol;
- iph->saddr = rt->rt_src;
-diff -Naur linux-2.6.16/net/ipv4/netfilter/ip_conntrack_netlink.c linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_netlink.c
---- linux-2.6.16/net/ipv4/netfilter/ip_conntrack_netlink.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_netlink.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1619,7 +1619,7 @@
- printk("ctnetlink: unregistering from nfnetlink.\n");
-
- #ifdef CONFIG_IP_NF_CONNTRACK_EVENTS
-- ip_conntrack_unregister_notifier(&ctnl_notifier_exp);
-+ ip_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
- ip_conntrack_unregister_notifier(&ctnl_notifier);
- #endif
-
-diff -Naur linux-2.6.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c
---- linux-2.6.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/netfilter/ip_conntrack_proto_sctp.c 2006-05-11 04:56:24.000000000 +0300
-@@ -235,12 +235,15 @@
- flag = 1;
- }
-
-- /* Cookie Ack/Echo chunks not the first OR
-- Init / Init Ack / Shutdown compl chunks not the only chunks */
-- if ((sch->type == SCTP_CID_COOKIE_ACK
-+ /*
-+ * Cookie Ack/Echo chunks not the first OR
-+ * Init / Init Ack / Shutdown compl chunks not the only chunks
-+ * OR zero-length.
-+ */
-+ if (((sch->type == SCTP_CID_COOKIE_ACK
- || sch->type == SCTP_CID_COOKIE_ECHO
- || flag)
-- && count !=0 ) {
-+ && count !=0) || !sch->length) {
- DEBUGP("Basic checks failed\n");
- return 1;
- }
-diff -Naur linux-2.6.16/net/ipv4/route.c linux-2.6.16.16/net/ipv4/route.c
---- linux-2.6.16/net/ipv4/route.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/route.c 2006-05-11 04:56:24.000000000 +0300
-@@ -2750,7 +2750,10 @@
- /* Reserve room for dummy headers, this skb can pass
- through good chunk of routing engine.
- */
-- skb->mac.raw = skb->data;
-+ skb->mac.raw = skb->nh.raw = skb->data;
-+
-+ /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */
-+ skb->nh.iph->protocol = IPPROTO_ICMP;
- skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
-
- if (rta[RTA_SRC - 1])
-diff -Naur linux-2.6.16/net/ipv4/tcp_output.c linux-2.6.16.16/net/ipv4/tcp_output.c
---- linux-2.6.16/net/ipv4/tcp_output.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv4/tcp_output.c 2006-05-11 04:56:24.000000000 +0300
-@@ -537,7 +537,9 @@
- buff = sk_stream_alloc_skb(sk, nsize, GFP_ATOMIC);
- if (buff == NULL)
- return -ENOMEM; /* We'll just try again later. */
-- sk_charge_skb(sk, buff);
-+
-+ buff->truesize = skb->len - len;
-+ skb->truesize -= buff->truesize;
-
- /* Correct the sequence numbers. */
- TCP_SKB_CB(buff)->seq = TCP_SKB_CB(skb)->seq + len;
-diff -Naur linux-2.6.16/net/ipv6/exthdrs.c linux-2.6.16.16/net/ipv6/exthdrs.c
---- linux-2.6.16/net/ipv6/exthdrs.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv6/exthdrs.c 2006-05-11 04:56:24.000000000 +0300
-@@ -489,6 +489,18 @@
- {
- struct inet6_skb_parm *opt = IP6CB(skb);
-
-+ /*
-+ * skb->nh.raw is equal to skb->data, and
-+ * skb->h.raw - skb->nh.raw is always equal to
-+ * sizeof(struct ipv6hdr) by definition of
-+ * hop-by-hop options.
-+ */
-+ if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + 8) ||
-+ !pskb_may_pull(skb, sizeof(struct ipv6hdr) + ((skb->h.raw[1] + 1) << 3))) {
-+ kfree_skb(skb);
-+ return -1;
-+ }
-+
- opt->hop = sizeof(struct ipv6hdr);
- if (ip6_parse_tlv(tlvprochopopt_lst, skb)) {
- skb->h.raw += (skb->h.raw[1]+1)<<3;
-diff -Naur linux-2.6.16/net/ipv6/xfrm6_policy.c linux-2.6.16.16/net/ipv6/xfrm6_policy.c
---- linux-2.6.16/net/ipv6/xfrm6_policy.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/ipv6/xfrm6_policy.c 2006-05-11 04:56:24.000000000 +0300
-@@ -191,16 +191,18 @@
- static inline void
- _decode_session6(struct sk_buff *skb, struct flowi *fl)
- {
-- u16 offset = sizeof(struct ipv6hdr);
-+ u16 offset = skb->h.raw - skb->nh.raw;
- struct ipv6hdr *hdr = skb->nh.ipv6h;
-- struct ipv6_opt_hdr *exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset);
-- u8 nexthdr = skb->nh.ipv6h->nexthdr;
-+ struct ipv6_opt_hdr *exthdr;
-+ u8 nexthdr = skb->nh.raw[IP6CB(skb)->nhoff];
-
- memset(fl, 0, sizeof(struct flowi));
- ipv6_addr_copy(&fl->fl6_dst, &hdr->daddr);
- ipv6_addr_copy(&fl->fl6_src, &hdr->saddr);
-
- while (pskb_may_pull(skb, skb->nh.raw + offset + 1 - skb->data)) {
-+ exthdr = (struct ipv6_opt_hdr*)(skb->nh.raw + offset);
-+
- switch (nexthdr) {
- case NEXTHDR_ROUTING:
- case NEXTHDR_HOP:
-diff -Naur linux-2.6.16/net/netfilter/nf_conntrack_netlink.c linux-2.6.16.16/net/netfilter/nf_conntrack_netlink.c
---- linux-2.6.16/net/netfilter/nf_conntrack_netlink.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/netfilter/nf_conntrack_netlink.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1641,7 +1641,7 @@
- printk("ctnetlink: unregistering from nfnetlink.\n");
-
- #ifdef CONFIG_NF_CONNTRACK_EVENTS
-- nf_conntrack_unregister_notifier(&ctnl_notifier_exp);
-+ nf_conntrack_expect_unregister_notifier(&ctnl_notifier_exp);
- nf_conntrack_unregister_notifier(&ctnl_notifier);
- #endif
-
-diff -Naur linux-2.6.16/net/netfilter/nf_conntrack_proto_sctp.c linux-2.6.16.16/net/netfilter/nf_conntrack_proto_sctp.c
---- linux-2.6.16/net/netfilter/nf_conntrack_proto_sctp.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/netfilter/nf_conntrack_proto_sctp.c 2006-05-11 04:56:24.000000000 +0300
-@@ -240,12 +240,15 @@
- flag = 1;
- }
-
-- /* Cookie Ack/Echo chunks not the first OR
-- Init / Init Ack / Shutdown compl chunks not the only chunks */
-- if ((sch->type == SCTP_CID_COOKIE_ACK
-+ /*
-+ * Cookie Ack/Echo chunks not the first OR
-+ * Init / Init Ack / Shutdown compl chunks not the only chunks
-+ * OR zero-length.
-+ */
-+ if (((sch->type == SCTP_CID_COOKIE_ACK
- || sch->type == SCTP_CID_COOKIE_ECHO
- || flag)
-- && count !=0 ) {
-+ && count !=0) || !sch->length) {
- DEBUGP("Basic checks failed\n");
- return 1;
- }
-diff -Naur linux-2.6.16/net/sctp/inqueue.c linux-2.6.16.16/net/sctp/inqueue.c
---- linux-2.6.16/net/sctp/inqueue.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/sctp/inqueue.c 2006-05-11 04:56:24.000000000 +0300
-@@ -149,6 +149,7 @@
- /* This is the first chunk in the packet. */
- chunk->singleton = 1;
- ch = (sctp_chunkhdr_t *) chunk->skb->data;
-+ chunk->data_accepted = 0;
- }
-
- chunk->chunk_hdr = ch;
-diff -Naur linux-2.6.16/net/sctp/sm_statefuns.c linux-2.6.16.16/net/sctp/sm_statefuns.c
---- linux-2.6.16/net/sctp/sm_statefuns.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/sctp/sm_statefuns.c 2006-05-11 04:56:24.000000000 +0300
-@@ -636,8 +636,9 @@
- */
- chunk->subh.cookie_hdr =
- (struct sctp_signed_cookie *)chunk->skb->data;
-- skb_pull(chunk->skb,
-- ntohs(chunk->chunk_hdr->length) - sizeof(sctp_chunkhdr_t));
-+ if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
-+ sizeof(sctp_chunkhdr_t)))
-+ goto nomem;
-
- /* 5.1 D) Upon reception of the COOKIE ECHO chunk, Endpoint
- * "Z" will reply with a COOKIE ACK chunk after building a TCB
-@@ -965,7 +966,8 @@
- */
- chunk->subh.hb_hdr = (sctp_heartbeathdr_t *) chunk->skb->data;
- paylen = ntohs(chunk->chunk_hdr->length) - sizeof(sctp_chunkhdr_t);
-- skb_pull(chunk->skb, paylen);
-+ if (!pskb_pull(chunk->skb, paylen))
-+ goto nomem;
-
- reply = sctp_make_heartbeat_ack(asoc, chunk,
- chunk->subh.hb_hdr, paylen);
-@@ -1860,8 +1862,9 @@
- * are in good shape.
- */
- chunk->subh.cookie_hdr = (struct sctp_signed_cookie *)chunk->skb->data;
-- skb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
-- sizeof(sctp_chunkhdr_t));
-+ if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) -
-+ sizeof(sctp_chunkhdr_t)))
-+ goto nomem;
-
- /* In RFC 2960 5.2.4 3, if both Verification Tags in the State Cookie
- * of a duplicate COOKIE ECHO match the Verification Tags of the
-@@ -5151,7 +5154,9 @@
- int tmp;
- __u32 tsn;
- int account_value;
-+ struct sctp_tsnmap *map = (struct sctp_tsnmap *)&asoc->peer.tsn_map;
- struct sock *sk = asoc->base.sk;
-+ int rcvbuf_over = 0;
-
- data_hdr = chunk->subh.data_hdr = (sctp_datahdr_t *)chunk->skb->data;
- skb_pull(chunk->skb, sizeof(sctp_datahdr_t));
-@@ -5162,10 +5167,16 @@
- /* ASSERT: Now skb->data is really the user data. */
-
- /*
-- * if we are established, and we have used up our receive
-- * buffer memory, drop the frame
-+ * If we are established, and we have used up our receive buffer
-+ * memory, think about droping the frame.
-+ * Note that we have an opportunity to improve performance here.
-+ * If we accept one chunk from an skbuff, we have to keep all the
-+ * memory of that skbuff around until the chunk is read into user
-+ * space. Therefore, once we accept 1 chunk we may as well accept all
-+ * remaining chunks in the skbuff. The data_accepted flag helps us do
-+ * that.
- */
-- if (asoc->state == SCTP_STATE_ESTABLISHED) {
-+ if ((asoc->state == SCTP_STATE_ESTABLISHED) && (!chunk->data_accepted)) {
- /*
- * If the receive buffer policy is 1, then each
- * association can allocate up to sk_rcvbuf bytes
-@@ -5176,9 +5187,25 @@
- account_value = atomic_read(&asoc->rmem_alloc);
- else
- account_value = atomic_read(&sk->sk_rmem_alloc);
--
-- if (account_value > sk->sk_rcvbuf)
-- return SCTP_IERROR_IGNORE_TSN;
-+ if (account_value > sk->sk_rcvbuf) {
-+ /*
-+ * We need to make forward progress, even when we are
-+ * under memory pressure, so we always allow the
-+ * next tsn after the ctsn ack point to be accepted.
-+ * This lets us avoid deadlocks in which we have to
-+ * drop frames that would otherwise let us drain the
-+ * receive queue.
-+ */
-+ if ((sctp_tsnmap_get_ctsn(map) + 1) != tsn)
-+ return SCTP_IERROR_IGNORE_TSN;
-+
-+ /*
-+ * We're going to accept the frame but we should renege
-+ * to make space for it. This will send us down that
-+ * path later in this function.
-+ */
-+ rcvbuf_over = 1;
-+ }
- }
-
- /* Process ECN based congestion.
-@@ -5226,6 +5253,7 @@
- datalen -= sizeof(sctp_data_chunk_t);
-
- deliver = SCTP_CMD_CHUNK_ULP;
-+ chunk->data_accepted = 1;
-
- /* Think about partial delivery. */
- if ((datalen >= asoc->rwnd) && (!asoc->ulpq.pd_mode)) {
-@@ -5242,7 +5270,8 @@
- * large spill over.
- */
- if (!asoc->rwnd || asoc->rwnd_over ||
-- (datalen > asoc->rwnd + asoc->frag_point)) {
-+ (datalen > asoc->rwnd + asoc->frag_point) ||
-+ rcvbuf_over) {
-
- /* If this is the next TSN, consider reneging to make
- * room. Note: Playing nice with a confused sender. A
-@@ -5250,8 +5279,8 @@
- * space and in the future we may want to detect and
- * do more drastic reneging.
- */
-- if (sctp_tsnmap_has_gap(&asoc->peer.tsn_map) &&
-- (sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + 1) == tsn) {
-+ if (sctp_tsnmap_has_gap(map) &&
-+ (sctp_tsnmap_get_ctsn(map) + 1) == tsn) {
- SCTP_DEBUG_PRINTK("Reneging for tsn:%u\n", tsn);
- deliver = SCTP_CMD_RENEGE;
- } else {
-diff -Naur linux-2.6.16/net/sctp/sm_statetable.c linux-2.6.16.16/net/sctp/sm_statetable.c
---- linux-2.6.16/net/sctp/sm_statetable.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/sctp/sm_statetable.c 2006-05-11 04:56:24.000000000 +0300
-@@ -366,9 +366,9 @@
- /* SCTP_STATE_EMPTY */ \
- {.fn = sctp_sf_ootb, .name = "sctp_sf_ootb"}, \
- /* SCTP_STATE_CLOSED */ \
-- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
-+ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
- /* SCTP_STATE_COOKIE_WAIT */ \
-- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
-+ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
- /* SCTP_STATE_COOKIE_ECHOED */ \
- {.fn = sctp_sf_do_ecne, .name = "sctp_sf_do_ecne"}, \
- /* SCTP_STATE_ESTABLISHED */ \
-@@ -380,7 +380,7 @@
- /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
- {.fn = sctp_sf_do_ecne, .name = "sctp_sf_do_ecne"}, \
- /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
-- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
-+ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
- } /* TYPE_SCTP_ECN_ECNE */
-
- #define TYPE_SCTP_ECN_CWR { \
-@@ -401,7 +401,7 @@
- /* SCTP_STATE_SHUTDOWN_RECEIVED */ \
- {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
- /* SCTP_STATE_SHUTDOWN_ACK_SENT */ \
-- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
-+ {.fn = sctp_sf_discard_chunk, .name = "sctp_sf_discard_chunk"}, \
- } /* TYPE_SCTP_ECN_CWR */
-
- #define TYPE_SCTP_SHUTDOWN_COMPLETE { \
-@@ -647,7 +647,7 @@
- /* SCTP_STATE_EMPTY */ \
- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
- /* SCTP_STATE_CLOSED */ \
-- {.fn = sctp_sf_bug, .name = "sctp_sf_bug"}, \
-+ {.fn = sctp_sf_error_closed, .name = "sctp_sf_error_closed"}, \
- /* SCTP_STATE_COOKIE_WAIT */ \
- {.fn = sctp_sf_do_prm_requestheartbeat, \
- .name = "sctp_sf_do_prm_requestheartbeat"}, \
-diff -Naur linux-2.6.16/net/sctp/ulpqueue.c linux-2.6.16.16/net/sctp/ulpqueue.c
---- linux-2.6.16/net/sctp/ulpqueue.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/net/sctp/ulpqueue.c 2006-05-11 04:56:24.000000000 +0300
-@@ -279,6 +279,7 @@
- static struct sctp_ulpevent *sctp_make_reassembled_event(struct sk_buff_head *queue, struct sk_buff *f_frag, struct sk_buff *l_frag)
- {
- struct sk_buff *pos;
-+ struct sk_buff *new = NULL;
- struct sctp_ulpevent *event;
- struct sk_buff *pnext, *last;
- struct sk_buff *list = skb_shinfo(f_frag)->frag_list;
-@@ -297,11 +298,33 @@
- */
- if (last)
- last->next = pos;
-- else
-- skb_shinfo(f_frag)->frag_list = pos;
-+ else {
-+ if (skb_cloned(f_frag)) {
-+ /* This is a cloned skb, we can't just modify
-+ * the frag_list. We need a new skb to do that.
-+ * Instead of calling skb_unshare(), we'll do it
-+ * ourselves since we need to delay the free.
-+ */
-+ new = skb_copy(f_frag, GFP_ATOMIC);
-+ if (!new)
-+ return NULL; /* try again later */
-+
-+ new->sk = f_frag->sk;
-+
-+ skb_shinfo(new)->frag_list = pos;
-+ } else
-+ skb_shinfo(f_frag)->frag_list = pos;
-+ }
-
- /* Remove the first fragment from the reassembly queue. */
- __skb_unlink(f_frag, queue);
-+
-+ /* if we did unshare, then free the old skb and re-assign */
-+ if (new) {
-+ kfree_skb(f_frag);
-+ f_frag = new;
-+ }
-+
- while (pos) {
-
- pnext = pos->next;
-diff -Naur linux-2.6.16/security/keys/key.c linux-2.6.16.16/security/keys/key.c
---- linux-2.6.16/security/keys/key.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/security/keys/key.c 2006-05-11 04:56:24.000000000 +0300
-@@ -785,6 +785,10 @@
-
- key_check(keyring);
-
-+ key_ref = ERR_PTR(-ENOTDIR);
-+ if (keyring->type != &key_type_keyring)
-+ goto error_2;
-+
- down_write(&keyring->sem);
-
- /* if we're going to allocate a new key, we're going to have
-diff -Naur linux-2.6.16/security/keys/keyring.c linux-2.6.16.16/security/keys/keyring.c
---- linux-2.6.16/security/keys/keyring.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/security/keys/keyring.c 2006-05-11 04:56:24.000000000 +0300
-@@ -437,6 +437,7 @@
- /*
- * search the given keyring only (no recursion)
- * - keyring must be locked by caller
-+ * - caller must guarantee that the keyring is a keyring
- */
- key_ref_t __keyring_search_one(key_ref_t keyring_ref,
- const struct key_type *ktype,
-diff -Naur linux-2.6.16/security/selinux/ss/mls.c linux-2.6.16.16/security/selinux/ss/mls.c
---- linux-2.6.16/security/selinux/ss/mls.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/security/selinux/ss/mls.c 2006-05-11 04:56:24.000000000 +0300
-@@ -264,7 +264,7 @@
-
- if (!selinux_mls_enabled) {
- if (def_sid != SECSID_NULL && oldc)
-- *scontext += strlen(*scontext);
-+ *scontext += strlen(*scontext)+1;
- return 0;
- }
-
-diff -Naur linux-2.6.16/sound/isa/opti9xx/opti92x-ad1848.c linux-2.6.16.16/sound/isa/opti9xx/opti92x-ad1848.c
---- linux-2.6.16/sound/isa/opti9xx/opti92x-ad1848.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/sound/isa/opti9xx/opti92x-ad1848.c 2006-05-11 04:56:24.000000000 +0300
-@@ -2088,9 +2088,11 @@
- int error;
- struct platform_device *device;
-
-+#ifdef CONFIG_PNP
- pnp_register_card_driver(&opti9xx_pnpc_driver);
- if (snd_opti9xx_pnp_is_probed)
- return 0;
-+#endif
- if (! is_isapnp_selected()) {
- error = platform_driver_register(&snd_opti9xx_driver);
- if (error < 0)
-@@ -2102,7 +2104,9 @@
- }
- platform_driver_unregister(&snd_opti9xx_driver);
- }
-+#ifdef CONFIG_PNP
- pnp_unregister_card_driver(&opti9xx_pnpc_driver);
-+#endif
- #ifdef MODULE
- printk(KERN_ERR "no OPTi " CHIP_NAME " soundcard found\n");
- #endif
-@@ -2115,7 +2119,9 @@
- platform_device_unregister(snd_opti9xx_platform_device);
- platform_driver_unregister(&snd_opti9xx_driver);
- }
-+#ifdef CONFIG_PNP
- pnp_unregister_card_driver(&opti9xx_pnpc_driver);
-+#endif
- }
-
- module_init(alsa_card_opti9xx_init)
-diff -Naur linux-2.6.16/sound/oss/dmasound/tas_common.c linux-2.6.16.16/sound/oss/dmasound/tas_common.c
---- linux-2.6.16/sound/oss/dmasound/tas_common.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/sound/oss/dmasound/tas_common.c 2006-05-11 04:56:24.000000000 +0300
-@@ -195,8 +195,8 @@
-
- printk(KERN_INFO "tas driver [%s])\n", driver_name);
-
--#ifndef CONFIG_I2C_KEYWEST
-- request_module("i2c-keywest");
-+#ifndef CONFIG_I2C_POWERMAC
-+ request_module("i2c-powermac");
- #endif
- tas_node = find_devices("deq");
- if (tas_node == NULL)
-diff -Naur linux-2.6.16/sound/pci/hda/patch_realtek.c linux-2.6.16.16/sound/pci/hda/patch_realtek.c
---- linux-2.6.16/sound/pci/hda/patch_realtek.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/sound/pci/hda/patch_realtek.c 2006-05-11 04:56:24.000000000 +0300
-@@ -2948,6 +2948,8 @@
- { .modelname = "basic", .config = ALC260_BASIC },
- { .pci_subvendor = 0x104d, .pci_subdevice = 0x81bb,
- .config = ALC260_BASIC }, /* Sony VAIO */
-+ { .pci_subvendor = 0x152d, .pci_subdevice = 0x0729,
-+ .config = ALC260_BASIC }, /* CTL Travel Master U553W */
- { .modelname = "hp", .config = ALC260_HP },
- { .pci_subvendor = 0x103c, .pci_subdevice = 0x3010, .config = ALC260_HP },
- { .pci_subvendor = 0x103c, .pci_subdevice = 0x3011, .config = ALC260_HP },
-diff -Naur linux-2.6.16/sound/ppc/daca.c linux-2.6.16.16/sound/ppc/daca.c
---- linux-2.6.16/sound/ppc/daca.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/sound/ppc/daca.c 2006-05-11 04:56:24.000000000 +0300
-@@ -256,7 +256,7 @@
-
- #ifdef CONFIG_KMOD
- if (current->fs->root)
-- request_module("i2c-keywest");
-+ request_module("i2c-powermac");
- #endif /* CONFIG_KMOD */
-
- mix = kmalloc(sizeof(*mix), GFP_KERNEL);
-diff -Naur linux-2.6.16/sound/ppc/tumbler.c linux-2.6.16.16/sound/ppc/tumbler.c
---- linux-2.6.16/sound/ppc/tumbler.c 2006-03-20 07:53:29.000000000 +0200
-+++ linux-2.6.16.16/sound/ppc/tumbler.c 2006-05-11 04:56:24.000000000 +0300
-@@ -1314,7 +1314,7 @@
-
- #ifdef CONFIG_KMOD
- if (current->fs->root)
-- request_module("i2c-keywest");
-+ request_module("i2c-powermac");
- #endif /* CONFIG_KMOD */
-
- mix = kmalloc(sizeof(*mix), GFP_KERNEL);
diff --git a/packages/linux/linux-tornado-omap2/tornado-20070320.patch b/packages/linux/linux-tornado-omap2/tornado-20070320.patch
deleted file mode 100644
index 30a7752415..0000000000
--- a/packages/linux/linux-tornado-omap2/tornado-20070320.patch
+++ /dev/null
@@ -1,6081 +0,0 @@
-Index: linux-2.6.16/arch/arm/boot/compressed/misc.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/boot/compressed/misc.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/boot/compressed/misc.c 2007-04-12 10:36:19.000000000 +0200
-@@ -22,6 +22,19 @@
-
- #include <asm/arch/uncompress.h>
-
-+#include <linux/autoconf.h>
-+
-+#ifdef CONFIG_EFB_DEBUG
-+# define SCREEN_W 240
-+# define SCREEN_H 320
-+#endif
-+
-+
-+static unsigned short *vram = 0;
-+static unsigned int current_pix = 0;
-+static unsigned int y = 0;
-+
-+
- #ifdef STANDALONE_DEBUG
- #define putstr printf
- #endif
-@@ -260,6 +273,38 @@
- return inbuf[0];
- }
-
-+#ifdef CONFIG_EFB_DEBUG
-+/*
-+ * put a new pixel. on the frame buffer
-+ */
-+static void putpix(void)
-+{
-+ if (current_pix == SCREEN_W) {
-+ current_pix = 0;
-+ }
-+ vram[current_pix] = 0xFFFF;
-+ ++current_pix;
-+ vram[current_pix] = 0x0;
-+ ++current_pix;
-+}
-+
-+/*
-+ * clear the whole screen
-+ */
-+static void clear_screen(void)
-+{
-+ unsigned int i;
-+
-+ vram = (unsigned short *)0x20001020;
-+ current_pix = 0;
-+
-+ for (i = 0; i < SCREEN_W * SCREEN_H; ++i) {
-+ vram[i] = 0;
-+ }
-+}
-+#endif
-+
-+
- /* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
-@@ -280,7 +325,8 @@
- bytes_out += (ulg)outcnt;
- output_ptr += (ulg)outcnt;
- outcnt = 0;
-- putstr(".");
-+/* putstr("."); */
-+ putpix();
- }
-
- #ifndef arch_error
-@@ -291,7 +337,7 @@
- {
- arch_error(x);
-
-- putstr("\n\n");
-+/* putstr("\n\n"); */
- putstr(x);
- putstr("\n\n -- System halted");
-
-@@ -309,12 +355,16 @@
- free_mem_ptr_end = free_mem_ptr_end_p;
- __machine_arch_type = arch_id;
-
-+#ifdef CONFIG_EFB_DEBUG
-+ clear_screen();
-+#endif
-+
- arch_decomp_setup();
-
- makecrc();
-- putstr("Uncompressing Linux...");
-+/* putstr("Uncompressing Linux..."); */
- gunzip();
-- putstr(" done, booting the kernel.\n");
-+/* putstr(" done, booting the kernel.\n"); */
- return output_ptr;
- }
- #else
-Index: linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/configs/tornado_ccboot_defconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,797 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.16.2-omap1
-+# Tue Aug 1 01:17:51 2006
-+#
-+CONFIG_ARM=y
-+CONFIG_MMU=y
-+CONFIG_RWSEM_GENERIC_SPINLOCK=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+
-+#
-+# Code maturity level options
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_LOCK_KERNEL=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+
-+#
-+# General setup
-+#
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+# CONFIG_SYSVIPC is not set
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_SYSCTL is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_INITRAMFS_SOURCE=""
-+CONFIG_UID16=y
-+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-+CONFIG_EMBEDDED=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+# CONFIG_PRINTK is not set
-+# CONFIG_BUG is not set
-+# CONFIG_ELF_CORE is not set
-+# CONFIG_BASE_FULL is not set
-+# CONFIG_FUTEX is not set
-+# CONFIG_EPOLL is not set
-+# CONFIG_SHMEM is not set
-+CONFIG_CC_ALIGN_FUNCTIONS=0
-+CONFIG_CC_ALIGN_LABELS=0
-+CONFIG_CC_ALIGN_LOOPS=0
-+CONFIG_CC_ALIGN_JUMPS=0
-+CONFIG_SLAB=y
-+CONFIG_TINY_SHMEM=y
-+CONFIG_BASE_SMALL=1
-+# CONFIG_SLOB is not set
-+
-+#
-+# Loadable module support
-+#
-+# CONFIG_MODULES is not set
-+
-+#
-+# Block layer
-+#
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+# CONFIG_IOSCHED_AS is not set
-+CONFIG_IOSCHED_DEADLINE=y
-+# CONFIG_IOSCHED_CFQ is not set
-+# CONFIG_DEFAULT_AS is not set
-+CONFIG_DEFAULT_DEADLINE=y
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="deadline"
-+
-+#
-+# System Type
-+#
-+# CONFIG_ARCH_CLPS7500 is not set
-+# CONFIG_ARCH_CLPS711X is not set
-+# CONFIG_ARCH_CO285 is not set
-+# CONFIG_ARCH_EBSA110 is not set
-+# CONFIG_ARCH_FOOTBRIDGE is not set
-+# CONFIG_ARCH_INTEGRATOR is not set
-+# CONFIG_ARCH_IOP3XX is not set
-+# CONFIG_ARCH_IXP4XX is not set
-+# CONFIG_ARCH_IXP2000 is not set
-+# CONFIG_ARCH_L7200 is not set
-+# CONFIG_ARCH_PXA is not set
-+# CONFIG_ARCH_RPC is not set
-+# CONFIG_ARCH_SA1100 is not set
-+# CONFIG_ARCH_S3C2410 is not set
-+# CONFIG_ARCH_SHARK is not set
-+# CONFIG_ARCH_LH7A40X is not set
-+CONFIG_ARCH_OMAP=y
-+# CONFIG_ARCH_VERSATILE is not set
-+# CONFIG_ARCH_REALVIEW is not set
-+# CONFIG_ARCH_IMX is not set
-+# CONFIG_ARCH_H720X is not set
-+# CONFIG_ARCH_AAEC2000 is not set
-+# CONFIG_ARCH_AT91RM9200 is not set
-+
-+#
-+# TI OMAP Implementations
-+#
-+CONFIG_ARCH_OMAP_OTG=y
-+CONFIG_ARCH_OMAP1=y
-+# CONFIG_ARCH_OMAP2 is not set
-+
-+#
-+# OMAP Feature Selections
-+#
-+# CONFIG_OMAP_RESET_CLOCKS is not set
-+# CONFIG_OMAP_BOOT_TAG is not set
-+# CONFIG_OMAP_MUX is not set
-+CONFIG_OMAP_MPU_TIMER=y
-+# CONFIG_OMAP_32K_TIMER is not set
-+CONFIG_OMAP_LL_DEBUG_UART1=y
-+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
-+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
-+
-+#
-+# OMAP Core Type
-+#
-+CONFIG_ARCH_OMAP730=y
-+# CONFIG_ARCH_OMAP15XX is not set
-+# CONFIG_ARCH_OMAP16XX is not set
-+
-+#
-+# OMAP Board Type
-+#
-+# CONFIG_MACH_OMAP_PERSEUS2 is not set
-+
-+#
-+# OMAP CPU Speed
-+#
-+# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
-+CONFIG_OMAP_ARM_195MHZ=y
-+# CONFIG_OMAP_ARM_182MHZ is not set
-+# CONFIG_OMAP_ARM_168MHZ is not set
-+# CONFIG_OMAP_ARM_120MHZ is not set
-+# CONFIG_OMAP_ARM_60MHZ is not set
-+# CONFIG_OMAP_ARM_30MHZ is not set
-+CONFIG_MACH_TORNADO=y
-+CONFIG_EFB_DEBUG=y
-+
-+#
-+# Processor Type
-+#
-+CONFIG_CPU_32=y
-+CONFIG_CPU_ARM926T=y
-+CONFIG_CPU_32v5=y
-+CONFIG_CPU_ABRT_EV5TJ=y
-+CONFIG_CPU_CACHE_VIVT=y
-+CONFIG_CPU_COPY_V4WB=y
-+CONFIG_CPU_TLB_V4WBI=y
-+
-+#
-+# Processor Features
-+#
-+# CONFIG_ARM_THUMB is not set
-+# CONFIG_CPU_ICACHE_DISABLE is not set
-+# CONFIG_CPU_DCACHE_DISABLE is not set
-+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-+CONFIG_KEXEC=y
-+
-+#
-+# Bus support
-+#
-+
-+#
-+# PCCARD (PCMCIA/CardBus) support
-+#
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Kernel Features
-+#
-+CONFIG_PREEMPT=y
-+# CONFIG_NO_IDLE_HZ is not set
-+# CONFIG_AEABI is not set
-+# CONFIG_ARCH_DISCONTIGMEM_ENABLE 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_SPARSEMEM_STATIC is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4096
-+# CONFIG_LEDS is not set
-+CONFIG_ALIGNMENT_TRAP=y
-+
-+#
-+# Boot options
-+#
-+CONFIG_ZBOOT_ROM_TEXT=0x0
-+CONFIG_ZBOOT_ROM_BSS=0x0
-+CONFIG_CMDLINE=""
-+# CONFIG_XIP_KERNEL is not set
-+
-+#
-+# CPU Frequency scaling
-+#
-+# CONFIG_CPU_FREQ is not set
-+
-+#
-+# Floating point emulation
-+#
-+
-+#
-+# At least one emulation must be selected
-+#
-+CONFIG_FPE_NWFPE=y
-+# CONFIG_FPE_NWFPE_XP is not set
-+# CONFIG_FPE_FASTFPE is not set
-+# CONFIG_VFP is not set
-+
-+#
-+# Userspace binary formats
-+#
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_AOUT is not set
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_ARTHUR is not set
-+
-+#
-+# Power management options
-+#
-+# CONFIG_PM is not set
-+# CONFIG_APM is not set
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+# CONFIG_NETDEBUG is not set
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+CONFIG_NET_KEY=y
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+# CONFIG_IP_PNP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE 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_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_BIC=y
-+# CONFIG_IPV6 is not set
-+# CONFIG_NETFILTER is not set
-+
-+#
-+# DCCP Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_IP_DCCP is not set
-+
-+#
-+# SCTP Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_IP_SCTP is not set
-+
-+#
-+# TIPC Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_TIPC 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
-+
-+#
-+# QoS and/or fair queueing
-+#
-+# CONFIG_NET_SCHED 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
-+# CONFIG_IEEE80211 is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+
-+#
-+# Connector - unified userspace <-> kernelspace linker
-+#
-+# CONFIG_CONNECTOR is not set
-+
-+#
-+# Memory Technology Devices (MTD)
-+#
-+# CONFIG_MTD is not set
-+
-+#
-+# Parallel port support
-+#
-+# CONFIG_PARPORT is not set
-+
-+#
-+# Plug and Play support
-+#
-+
-+#
-+# Block devices
-+#
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=1
-+CONFIG_BLK_DEV_RAM_SIZE=4096
-+CONFIG_BLK_DEV_INITRD=y
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+
-+#
-+# Multi-device support (RAID and LVM)
-+#
-+# CONFIG_MD is not set
-+
-+#
-+# Fusion MPT device support
-+#
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+
-+#
-+# I2O device support
-+#
-+
-+#
-+# Network device support
-+#
-+# CONFIG_NETDEVICES is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+
-+#
-+# PHY device support
-+#
-+
-+#
-+# Ethernet (10 or 100Mbit)
-+#
-+# CONFIG_NET_ETHERNET is not set
-+
-+#
-+# Ethernet (1000 Mbit)
-+#
-+
-+#
-+# Ethernet (10000 Mbit)
-+#
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP 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
-+#
-+# CONFIG_ISDN is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+
-+#
-+# Userland interfaces
-+#
-+CONFIG_INPUT_MOUSEDEV=y
-+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_TSDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG 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_OMAP is not set
-+CONFIG_TORNADO_KEYPAD=y
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+# CONFIG_SERIAL_8250 is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+
-+#
-+# IPMI
-+#
-+# CONFIG_IPMI_HANDLER is not set
-+
-+#
-+# Watchdog Cards
-+#
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_OMAP730_WATCHDOG=y
-+CONFIG_TORNADO_VIBRATOR=y
-+CONFIG_TORNADO_LEDS=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_RTC is not set
-+# CONFIG_OMAP_RTC is not set
-+# CONFIG_DTLK is not set
-+# CONFIG_R3964 is not set
-+
-+#
-+# Ftape, the floppy tape device driver
-+#
-+# CONFIG_RAW_DRIVER is not set
-+
-+#
-+# TPM devices
-+#
-+# CONFIG_TCG_TPM is not set
-+# CONFIG_TELCLOCK is not set
-+
-+#
-+# I2C support
-+#
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+
-+#
-+# Dallas's 1-wire bus
-+#
-+# CONFIG_W1 is not set
-+
-+#
-+# Hardware Monitoring support
-+#
-+# CONFIG_HWMON is not set
-+# CONFIG_HWMON_VID is not set
-+
-+#
-+# Misc devices
-+#
-+
-+#
-+# Multimedia Capabilities Port drivers
-+#
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+
-+#
-+# Digital Video Broadcasting Devices
-+#
-+# CONFIG_DVB is not set
-+
-+#
-+# Graphics support
-+#
-+CONFIG_FB=y
-+CONFIG_FB_CFB_FILLRECT=y
-+CONFIG_FB_CFB_COPYAREA=y
-+CONFIG_FB_CFB_IMAGEBLIT=y
-+# CONFIG_FB_MACMODES is not set
-+# CONFIG_FB_MODE_HELPERS is not set
-+# CONFIG_FB_TILEBLITTING is not set
-+# CONFIG_FB_S1D13XXX is not set
-+# CONFIG_FB_OMAP is not set
-+CONFIG_FB_VSFB=y
-+# CONFIG_FB_VIRTUAL is not set
-+
-+#
-+# Console display driver support
-+#
-+# CONFIG_VGA_CONSOLE is not set
-+CONFIG_DUMMY_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-+CONFIG_FONTS=y
-+# CONFIG_FONT_8x8 is not set
-+# CONFIG_FONT_8x16 is not set
-+CONFIG_FONT_6x11=y
-+# CONFIG_FONT_7x14 is not set
-+# CONFIG_FONT_PEARL_8x8 is not set
-+# CONFIG_FONT_ACORN_8x8 is not set
-+# CONFIG_FONT_MINI_4x6 is not set
-+# CONFIG_FONT_SUN8x16 is not set
-+# CONFIG_FONT_SUN12x22 is not set
-+# CONFIG_FONT_10x18 is not set
-+
-+#
-+# Logo configuration
-+#
-+# CONFIG_LOGO is not set
-+CONFIG_BACKLIGHT_LCD_SUPPORT=y
-+CONFIG_BACKLIGHT_CLASS_DEVICE=y
-+CONFIG_BACKLIGHT_DEVICE=y
-+# CONFIG_LCD_CLASS_DEVICE is not set
-+CONFIG_BACKLIGHT_TORNADO=y
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+
-+#
-+# USB support
-+#
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# USB Gadget Support
-+#
-+CONFIG_USB_GADGET=y
-+CONFIG_USB_GADGET_DEBUG_FILES=y
-+CONFIG_USB_GADGET_SELECTED=y
-+# CONFIG_USB_GADGET_NET2280 is not set
-+# CONFIG_USB_GADGET_PXA2XX is not set
-+# CONFIG_USB_GADGET_GOKU is not set
-+# CONFIG_USB_GADGET_LH7A40X is not set
-+CONFIG_USB_GADGET_OMAP=y
-+CONFIG_USB_OMAP=y
-+# CONFIG_USB_GADGET_DUMMY_HCD is not set
-+# CONFIG_USB_GADGET_DUALSPEED is not set
-+# CONFIG_USB_ZERO is not set
-+CONFIG_USB_ETH=y
-+# CONFIG_USB_ETH_RNDIS is not set
-+# CONFIG_USB_GADGETFS is not set
-+# CONFIG_USB_FILE_STORAGE is not set
-+# CONFIG_USB_G_SERIAL is not set
-+
-+#
-+# MMC/SD Card support
-+#
-+CONFIG_MMC=y
-+# CONFIG_MMC_DEBUG is not set
-+CONFIG_MMC_BLOCK=y
-+# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
-+# CONFIG_MMC_BULKTRANSFER is not set
-+CONFIG_MMC_OMAP=y
-+
-+#
-+# Synchronous Serial Interfaces (SSI)
-+#
-+# CONFIG_OMAP_UWIRE is not set
-+# CONFIG_OMAP_TSC2101 is not set
-+
-+#
-+# CBUS support
-+#
-+# CONFIG_CBUS is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_MINIX_FS is not set
-+CONFIG_ROMFS_FS=y
-+# CONFIG_INOTIFY is not set
-+# CONFIG_QUOTA is not set
-+CONFIG_DNOTIFY=y
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_SYSFS=y
-+# CONFIG_TMPFS is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+CONFIG_RAMFS=y
-+# CONFIG_RELAYFS_FS is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+
-+#
-+# Network File Systems
-+#
-+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 is not set
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# 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
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+# CONFIG_9P_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+
-+#
-+# Native Language Support
-+#
-+# CONFIG_NLS is not set
-+
-+#
-+# Profiling support
-+#
-+# CONFIG_PROFILING is not set
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+# CONFIG_MAGIC_SYSRQ is not set
-+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_DETECT_SOFTLOCKUP is not set
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+CONFIG_DEBUG_PREEMPT=y
-+# CONFIG_DEBUG_MUTEXES is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_DEBUG_VM is not set
-+CONFIG_FRAME_POINTER=y
-+# CONFIG_FORCED_INLINING is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_DEBUG_USER is not set
-+# CONFIG_DEBUG_WAITQ is not set
-+CONFIG_DEBUG_ERRORS=y
-+# CONFIG_DEBUG_LL is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+
-+#
-+# Cryptographic options
-+#
-+# CONFIG_CRYPTO is not set
-+
-+#
-+# Hardware crypto devices
-+#
-+
-+#
-+# Library routines
-+#
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+CONFIG_CRC32=y
-+# CONFIG_LIBCRC32C is not set
-Index: linux-2.6.16/arch/arm/configs/tornado_defconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/configs/tornado_defconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,849 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.16.9-omap1
-+# Tue Mar 20 11:07:50 2007
-+#
-+CONFIG_ARM=y
-+CONFIG_MMU=y
-+CONFIG_RWSEM_GENERIC_SPINLOCK=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+
-+#
-+# Code maturity level options
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_LOCK_KERNEL=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+
-+#
-+# General setup
-+#
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+# CONFIG_SYSVIPC is not set
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+CONFIG_SYSCTL=y
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_INITRAMFS_SOURCE=""
-+CONFIG_UID16=y
-+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-+CONFIG_EMBEDDED=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+# CONFIG_ELF_CORE is not set
-+# CONFIG_BASE_FULL is not set
-+CONFIG_FUTEX=y
-+CONFIG_EPOLL=y
-+CONFIG_SHMEM=y
-+CONFIG_CC_ALIGN_FUNCTIONS=0
-+CONFIG_CC_ALIGN_LABELS=0
-+CONFIG_CC_ALIGN_LOOPS=0
-+CONFIG_CC_ALIGN_JUMPS=0
-+CONFIG_SLAB=y
-+CONFIG_TINY_SHMEM=y
-+CONFIG_BASE_SMALL=1
-+# CONFIG_SLOB is not set
-+
-+#
-+# Loadable module support
-+#
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+CONFIG_OBSOLETE_MODPARM=y
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+
-+#
-+# Block layer
-+#
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+# CONFIG_IOSCHED_AS is not set
-+CONFIG_IOSCHED_DEADLINE=y
-+# CONFIG_IOSCHED_CFQ is not set
-+# CONFIG_DEFAULT_AS is not set
-+CONFIG_DEFAULT_DEADLINE=y
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="deadline"
-+
-+#
-+# System Type
-+#
-+# CONFIG_ARCH_CLPS7500 is not set
-+# CONFIG_ARCH_CLPS711X is not set
-+# CONFIG_ARCH_CO285 is not set
-+# CONFIG_ARCH_EBSA110 is not set
-+# CONFIG_ARCH_FOOTBRIDGE is not set
-+# CONFIG_ARCH_INTEGRATOR is not set
-+# CONFIG_ARCH_IOP3XX is not set
-+# CONFIG_ARCH_IXP4XX is not set
-+# CONFIG_ARCH_IXP2000 is not set
-+# CONFIG_ARCH_L7200 is not set
-+# CONFIG_ARCH_PXA is not set
-+# CONFIG_ARCH_RPC is not set
-+# CONFIG_ARCH_SA1100 is not set
-+# CONFIG_ARCH_S3C2410 is not set
-+# CONFIG_ARCH_SHARK is not set
-+# CONFIG_ARCH_LH7A40X is not set
-+CONFIG_ARCH_OMAP=y
-+# CONFIG_ARCH_VERSATILE is not set
-+# CONFIG_ARCH_REALVIEW is not set
-+# CONFIG_ARCH_IMX is not set
-+# CONFIG_ARCH_H720X is not set
-+# CONFIG_ARCH_AAEC2000 is not set
-+# CONFIG_ARCH_AT91RM9200 is not set
-+
-+#
-+# TI OMAP Implementations
-+#
-+CONFIG_ARCH_OMAP_OTG=y
-+CONFIG_ARCH_OMAP1=y
-+# CONFIG_ARCH_OMAP2 is not set
-+
-+#
-+# OMAP Feature Selections
-+#
-+# CONFIG_OMAP_RESET_CLOCKS is not set
-+# CONFIG_OMAP_BOOT_TAG is not set
-+# CONFIG_OMAP_MUX is not set
-+CONFIG_OMAP_MPU_TIMER=y
-+# CONFIG_OMAP_32K_TIMER is not set
-+CONFIG_OMAP_LL_DEBUG_UART1=y
-+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
-+# CONFIG_OMAP_LL_DEBUG_UART3 is not set
-+
-+#
-+# OMAP Core Type
-+#
-+CONFIG_ARCH_OMAP730=y
-+# CONFIG_ARCH_OMAP15XX is not set
-+# CONFIG_ARCH_OMAP16XX is not set
-+
-+#
-+# OMAP Board Type
-+#
-+# CONFIG_MACH_OMAP_PERSEUS2 is not set
-+
-+#
-+# OMAP CPU Speed
-+#
-+# CONFIG_OMAP_CLOCKS_SET_BY_BOOTLOADER is not set
-+CONFIG_OMAP_ARM_195MHZ=y
-+# CONFIG_OMAP_ARM_182MHZ is not set
-+# CONFIG_OMAP_ARM_168MHZ is not set
-+# CONFIG_OMAP_ARM_120MHZ is not set
-+# CONFIG_OMAP_ARM_60MHZ is not set
-+# CONFIG_OMAP_ARM_30MHZ is not set
-+CONFIG_MACH_TORNADO=y
-+CONFIG_EFB_DEBUG=y
-+
-+#
-+# Processor Type
-+#
-+CONFIG_CPU_32=y
-+CONFIG_CPU_ARM926T=y
-+CONFIG_CPU_32v5=y
-+CONFIG_CPU_ABRT_EV5TJ=y
-+CONFIG_CPU_CACHE_VIVT=y
-+CONFIG_CPU_COPY_V4WB=y
-+CONFIG_CPU_TLB_V4WBI=y
-+
-+#
-+# Processor Features
-+#
-+# CONFIG_ARM_THUMB is not set
-+# CONFIG_CPU_ICACHE_DISABLE is not set
-+# CONFIG_CPU_DCACHE_DISABLE is not set
-+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-+CONFIG_KEXEC=y
-+
-+#
-+# Bus support
-+#
-+
-+#
-+# PCCARD (PCMCIA/CardBus) support
-+#
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Kernel Features
-+#
-+CONFIG_PREEMPT=y
-+# CONFIG_NO_IDLE_HZ is not set
-+# CONFIG_AEABI is not set
-+# CONFIG_ARCH_DISCONTIGMEM_ENABLE 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_SPARSEMEM_STATIC is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4096
-+# CONFIG_LEDS is not set
-+CONFIG_ALIGNMENT_TRAP=y
-+
-+#
-+# Boot options
-+#
-+CONFIG_ZBOOT_ROM_TEXT=0x0
-+CONFIG_ZBOOT_ROM_BSS=0x0
-+CONFIG_CMDLINE=""
-+# CONFIG_XIP_KERNEL is not set
-+
-+#
-+# CPU Frequency scaling
-+#
-+# CONFIG_CPU_FREQ is not set
-+
-+#
-+# Floating point emulation
-+#
-+
-+#
-+# At least one emulation must be selected
-+#
-+CONFIG_FPE_NWFPE=y
-+# CONFIG_FPE_NWFPE_XP is not set
-+# CONFIG_FPE_FASTFPE is not set
-+# CONFIG_VFP is not set
-+
-+#
-+# Userspace binary formats
-+#
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_AOUT is not set
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_ARTHUR is not set
-+
-+#
-+# Power management options
-+#
-+CONFIG_PM=y
-+CONFIG_PM_LEGACY=y
-+# CONFIG_PM_DEBUG is not set
-+CONFIG_APM=y
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+# CONFIG_NETDEBUG is not set
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+CONFIG_NET_KEY=y
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+# CONFIG_IP_PNP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE 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_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_BIC=y
-+# CONFIG_IPV6 is not set
-+# CONFIG_NETFILTER is not set
-+
-+#
-+# DCCP Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_IP_DCCP is not set
-+
-+#
-+# SCTP Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_IP_SCTP is not set
-+
-+#
-+# TIPC Configuration (EXPERIMENTAL)
-+#
-+# CONFIG_TIPC 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
-+
-+#
-+# QoS and/or fair queueing
-+#
-+# CONFIG_NET_SCHED 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
-+# CONFIG_IEEE80211 is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+
-+#
-+# Connector - unified userspace <-> kernelspace linker
-+#
-+# CONFIG_CONNECTOR is not set
-+
-+#
-+# Memory Technology Devices (MTD)
-+#
-+# CONFIG_MTD is not set
-+
-+#
-+# Parallel port support
-+#
-+# CONFIG_PARPORT is not set
-+
-+#
-+# Plug and Play support
-+#
-+
-+#
-+# Block devices
-+#
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=1
-+CONFIG_BLK_DEV_RAM_SIZE=4096
-+CONFIG_BLK_DEV_INITRD=y
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+
-+#
-+# Multi-device support (RAID and LVM)
-+#
-+# CONFIG_MD is not set
-+
-+#
-+# Fusion MPT device support
-+#
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+
-+#
-+# I2O device support
-+#
-+
-+#
-+# Network device support
-+#
-+# CONFIG_NETDEVICES is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+
-+#
-+# PHY device support
-+#
-+
-+#
-+# Ethernet (10 or 100Mbit)
-+#
-+# CONFIG_NET_ETHERNET is not set
-+
-+#
-+# Ethernet (1000 Mbit)
-+#
-+
-+#
-+# Ethernet (10000 Mbit)
-+#
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP 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
-+#
-+# CONFIG_ISDN is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+
-+#
-+# Userland interfaces
-+#
-+CONFIG_INPUT_MOUSEDEV=y
-+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_TSDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG 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_OMAP is not set
-+CONFIG_TORNADO_KEYPAD=y
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+# CONFIG_SERIAL_8250 is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+
-+#
-+# IPMI
-+#
-+# CONFIG_IPMI_HANDLER is not set
-+
-+#
-+# Watchdog Cards
-+#
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_OMAP730_WATCHDOG=y
-+CONFIG_TORNADO_VIBRATOR=y
-+CONFIG_TORNADO_LEDS=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_RTC is not set
-+# CONFIG_OMAP_RTC is not set
-+# CONFIG_DTLK is not set
-+# CONFIG_R3964 is not set
-+
-+#
-+# Ftape, the floppy tape device driver
-+#
-+# CONFIG_RAW_DRIVER is not set
-+
-+#
-+# TPM devices
-+#
-+# CONFIG_TCG_TPM is not set
-+# CONFIG_TELCLOCK is not set
-+
-+#
-+# I2C support
-+#
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+
-+#
-+# Dallas's 1-wire bus
-+#
-+# CONFIG_W1 is not set
-+
-+#
-+# Hardware Monitoring support
-+#
-+# CONFIG_HWMON is not set
-+# CONFIG_HWMON_VID is not set
-+
-+#
-+# Misc devices
-+#
-+
-+#
-+# Multimedia Capabilities Port drivers
-+#
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+
-+#
-+# Digital Video Broadcasting Devices
-+#
-+# CONFIG_DVB is not set
-+
-+#
-+# Graphics support
-+#
-+CONFIG_FB=y
-+CONFIG_FB_CFB_FILLRECT=y
-+CONFIG_FB_CFB_COPYAREA=y
-+CONFIG_FB_CFB_IMAGEBLIT=y
-+# CONFIG_FB_MACMODES is not set
-+# CONFIG_FB_MODE_HELPERS is not set
-+# CONFIG_FB_TILEBLITTING is not set
-+# CONFIG_FB_S1D13XXX is not set
-+# CONFIG_FB_OMAP is not set
-+CONFIG_FB_VSFB=y
-+# CONFIG_FB_VIRTUAL is not set
-+
-+#
-+# Console display driver support
-+#
-+# CONFIG_VGA_CONSOLE is not set
-+CONFIG_DUMMY_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-+CONFIG_FONTS=y
-+# CONFIG_FONT_8x8 is not set
-+# CONFIG_FONT_8x16 is not set
-+CONFIG_FONT_6x11=y
-+# CONFIG_FONT_7x14 is not set
-+# CONFIG_FONT_PEARL_8x8 is not set
-+# CONFIG_FONT_ACORN_8x8 is not set
-+# CONFIG_FONT_MINI_4x6 is not set
-+# CONFIG_FONT_SUN8x16 is not set
-+# CONFIG_FONT_SUN12x22 is not set
-+# CONFIG_FONT_10x18 is not set
-+
-+#
-+# Logo configuration
-+#
-+# CONFIG_LOGO is not set
-+CONFIG_BACKLIGHT_LCD_SUPPORT=y
-+CONFIG_BACKLIGHT_CLASS_DEVICE=y
-+CONFIG_BACKLIGHT_DEVICE=y
-+# CONFIG_LCD_CLASS_DEVICE is not set
-+CONFIG_BACKLIGHT_TORNADO=y
-+
-+#
-+# Sound
-+#
-+CONFIG_SOUND=y
-+
-+#
-+# Advanced Linux Sound Architecture
-+#
-+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_DYNAMIC_MINORS is not set
-+CONFIG_SND_SUPPORT_OLD_API=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
-+
-+#
-+# ALSA ARM devices
-+#
-+# CONFIG_SND_OMAP_AIC23 is not set
-+# CONFIG_SND_OMAP_TSC2101 is not set
-+
-+#
-+# Open Sound System
-+#
-+# CONFIG_SOUND_PRIME is not set
-+
-+#
-+# USB support
-+#
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# USB Gadget Support
-+#
-+CONFIG_USB_GADGET=y
-+CONFIG_USB_GADGET_DEBUG_FILES=y
-+CONFIG_USB_GADGET_SELECTED=y
-+# CONFIG_USB_GADGET_NET2280 is not set
-+# CONFIG_USB_GADGET_PXA2XX is not set
-+# CONFIG_USB_GADGET_GOKU is not set
-+# CONFIG_USB_GADGET_LH7A40X is not set
-+CONFIG_USB_GADGET_OMAP=y
-+CONFIG_USB_OMAP=y
-+# CONFIG_USB_GADGET_DUMMY_HCD is not set
-+# CONFIG_USB_GADGET_DUALSPEED is not set
-+# CONFIG_USB_ZERO is not set
-+CONFIG_USB_ETH=y
-+# CONFIG_USB_ETH_RNDIS is not set
-+# CONFIG_USB_GADGETFS is not set
-+# CONFIG_USB_FILE_STORAGE is not set
-+# CONFIG_USB_G_SERIAL is not set
-+
-+#
-+# MMC/SD Card support
-+#
-+CONFIG_MMC=y
-+# CONFIG_MMC_DEBUG is not set
-+CONFIG_MMC_BLOCK=y
-+# CONFIG_MMC_BLOCK_BROKEN_RFD is not set
-+# CONFIG_MMC_BULKTRANSFER is not set
-+CONFIG_MMC_OMAP=y
-+
-+#
-+# Synchronous Serial Interfaces (SSI)
-+#
-+# CONFIG_OMAP_UWIRE is not set
-+# CONFIG_OMAP_TSC2101 is not set
-+
-+#
-+# CBUS support
-+#
-+# CONFIG_CBUS is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_MINIX_FS is not set
-+CONFIG_ROMFS_FS=y
-+# CONFIG_INOTIFY is not set
-+# CONFIG_QUOTA is not set
-+CONFIG_DNOTIFY=y
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_SYSFS=y
-+# CONFIG_TMPFS is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+CONFIG_RAMFS=y
-+# CONFIG_RELAYFS_FS is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+
-+#
-+# Network File Systems
-+#
-+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 is not set
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# 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
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+# CONFIG_9P_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+
-+#
-+# Native Language Support
-+#
-+# CONFIG_NLS is not set
-+
-+#
-+# Profiling support
-+#
-+# CONFIG_PROFILING is not set
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+# CONFIG_MAGIC_SYSRQ is not set
-+CONFIG_DEBUG_KERNEL=y
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_DETECT_SOFTLOCKUP is not set
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+CONFIG_DEBUG_PREEMPT=y
-+# CONFIG_DEBUG_MUTEXES is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_DEBUG_VM is not set
-+CONFIG_FRAME_POINTER=y
-+# CONFIG_FORCED_INLINING is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_DEBUG_USER is not set
-+# CONFIG_DEBUG_WAITQ is not set
-+CONFIG_DEBUG_ERRORS=y
-+# CONFIG_DEBUG_LL is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+CONFIG_SECURITY=y
-+CONFIG_SECURITY_NETWORK=y
-+# CONFIG_SECURITY_NETWORK_XFRM is not set
-+# CONFIG_SECURITY_CAPABILITIES is not set
-+# CONFIG_SECURITY_SECLVL is not set
-+
-+#
-+# Cryptographic options
-+#
-+# CONFIG_CRYPTO is not set
-+
-+#
-+# Hardware crypto devices
-+#
-+
-+#
-+# Library routines
-+#
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+CONFIG_CRC32=y
-+# CONFIG_LIBCRC32C is not set
-Index: linux-2.6.16/arch/arm/Kconfig
-===================================================================
---- linux-2.6.16.orig/arch/arm/Kconfig 2007-04-12 10:36:06.000000000 +0200
-+++ linux-2.6.16/arch/arm/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -298,6 +298,23 @@
- depends on CPU_XSCALE && !XSCALE_PMU_TIMER
- default y
-
-+config KEXEC
-+ bool "Kexec system call (EXPERIMENTAL)"
-+ depends on EXPERIMENTAL
-+ help
-+ kexec is a system call that implements the ability to shutdown your
-+ current kernel, and to start another kernel. It is like a reboot
-+ but it is indepedent of the system firmware. And like a reboot
-+ you can start any kernel with it, not just Linux.
-+
-+ The name comes from the similiarity to the exec system call.
-+
-+ It is an ongoing process to be certain the hardware in a machine
-+ is properly shutdown, so do not be surprised if this code does not
-+ initially work for you. It may help to enable device hotplugging
-+ support. As of this writing the exact hardware interface is
-+ strongly in flux, so no good recommendation can be made.
-+
- endmenu
-
- source "arch/arm/common/Kconfig"
-Index: linux-2.6.16/arch/arm/kernel/calls.S
-===================================================================
---- linux-2.6.16.orig/arch/arm/kernel/calls.S 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/kernel/calls.S 2007-04-12 10:36:19.000000000 +0200
-@@ -198,7 +198,7 @@
- CALL(sys_sigaltstack_wrapper)
- CALL(sys_sendfile)
- CALL(sys_ni_syscall)
-- CALL(sys_ni_syscall)
-+ CALL(sys_kexec_load)
- /* 190 */ CALL(sys_vfork_wrapper)
- CALL(sys_getrlimit)
- CALL(sys_mmap2)
-Index: linux-2.6.16/arch/arm/kernel/head.S
-===================================================================
---- linux-2.6.16.orig/arch/arm/kernel/head.S 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/kernel/head.S 2007-04-12 10:36:19.000000000 +0200
-@@ -36,6 +36,79 @@
- #define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET)
-
- /*
-+ * debug macros, while the MMU is of
-+ */
-+.macro pix_ok /* blue */
-+#ifdef CONFIG_EFB_DEBUG
-+ mov r12, #0x0014
-+ add r12, r12, #0x00140000
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ add r11, r11, #4
-+#endif
-+.endm
-+
-+.macro pix_ko /* red */
-+#ifdef CONFIG_EFB_DEBUG
-+ mov r12, #0xF800
-+ add r12, r12, #0xF8000000
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ add r11, r11, #4
-+#endif
-+.endm
-+
-+.macro pix_ctr /* white */
-+#ifdef CONFIG_EFB_DEBUG
-+ mov r12, #-1
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ add r11, r11, #4
-+#endif
-+.endm
-+
-+/*
-+ * a more mmu aware code: the frame buffer is mapped at 0xD0001020,
-+ * see arch/arm/mach-omap/debug.c
-+ */
-+.macro pix_mmu /* black pixel */
-+#ifdef CONFIG_EFB_DEBUG
-+ mov r11, #0xD0000000
-+ add r11, r11, #0x1000
-+ add r11, r11, #0x20
-+/* mov r12, #0x00FF */
-+/* add r12, r12, #0x00FF0000 */
-+ mov r12, #0
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+ str r12, [r11]
-+ add r11, r11, #4
-+#endif
-+.endm
-+
-+/*
- * swapper_pg_dir is the virtual address of the initial page table.
- * We place the page tables 16K below KERNEL_RAM_ADDR. Therefore, we must
- * make sure that KERNEL_RAM_ADDR is correctly set. Currently, we expect
-@@ -80,14 +153,31 @@
- __INIT
- .type stext, %function
- ENTRY(stext)
-+
-+ /*
-+ * r11 stores the beginning of the VRAM (0x20001020)
-+ */
-+ mov r11, #0x20000000
-+ add r11, r11, #0x1000
-+ add r11, r11, #0x20
-+
-+ pix_ok
-+
- msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
- @ and irqs disabled
- bl __lookup_processor_type @ r5=procinfo r9=cpuid
- movs r10, r5 @ invalid processor (r5=0)?
- beq __error_p @ yes, error 'p'
-+
-+ pix_ok
-+
- bl __lookup_machine_type @ r5=machinfo
- movs r8, r5 @ invalid machine (r5=0)?
- beq __error_a @ yes, error 'a'
-+
-+ pix_ok
-+
-+
- bl __create_page_tables
-
- /*
-@@ -232,14 +322,22 @@
- .align 5
- .type __turn_mmu_on, %function
- __turn_mmu_on:
-+
-+ pix_ok
-+
- mov r0, r0
- mcr p15, 0, r0, c1, c0, 0 @ write control reg
- mrc p15, 0, r3, c0, c0, 0 @ read id reg
- mov r3, r3
- mov r3, r3
-+
-+ pix_mmu
-+
- mov pc, r13
-
-
-+1:
-+ b 1b
-
- /*
- * Setup the initial page tables. We only setup the barest
-@@ -363,6 +461,18 @@
- str r3, [r0]
- #endif
- #endif
-+
-+#ifdef CONFIG_EFB_DEBUG
-+ /*
-+ * map frame buffer from 0x20000000 to 0xD0000000
-+ * in order to help debugging
-+ */
-+ add r0, r4, #0xD0000000 >> 18
-+ mov r3, #0x20000000
-+ add r3, r3, r7
-+ str r3, [r0]
-+#endif
-+
- mov pc, lr
- .ltorg
-
-@@ -380,6 +490,7 @@
-
- .type __error_p, %function
- __error_p:
-+ pix_ko
- #ifdef CONFIG_DEBUG_LL
- adr r0, str_p1
- bl printascii
-@@ -390,6 +501,7 @@
-
- .type __error_a, %function
- __error_a:
-+ pix_ko
- #ifdef CONFIG_DEBUG_LL
- mov r4, r1 @ preserve machine ID
- adr r0, str_a1
-Index: linux-2.6.16/arch/arm/kernel/machine_kexec.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/kernel/machine_kexec.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,77 @@
-+/*
-+ * machine_kexec.c - handle transition of Linux booting another kernel
-+ */
-+
-+#include <linux/mm.h>
-+#include <linux/kexec.h>
-+#include <linux/delay.h>
-+#include <linux/reboot.h>
-+#include <asm/pgtable.h>
-+#include <asm/pgalloc.h>
-+#include <asm/mmu_context.h>
-+#include <asm/io.h>
-+#include <asm/cacheflush.h>
-+#include <asm/mach-types.h>
-+
-+const extern unsigned char relocate_new_kernel[];
-+const extern unsigned int relocate_new_kernel_size;
-+
-+extern unsigned long kexec_start_address;
-+extern unsigned long kexec_indirection_page;
-+extern unsigned long kexec_mach_type;
-+
-+/*
-+ * Provide a dummy crash_notes definition while crash dump arrives to arm.
-+ * This prevents breakage of crash_notes attribute in kernel/ksysfs.c.
-+ */
-+/* note_buf_t *crash_notes; */
-+
-+int machine_kexec_prepare(struct kimage *image)
-+{
-+ return 0;
-+}
-+
-+void machine_kexec_cleanup(struct kimage *image)
-+{
-+}
-+
-+void machine_shutdown(void)
-+{
-+}
-+
-+void machine_crash_shutdown(struct pt_regs *regs)
-+{
-+}
-+
-+void machine_kexec(struct kimage *image)
-+{
-+ unsigned long page_list;
-+ unsigned long reboot_code_buffer_phys;
-+ void *reboot_code_buffer;
-+
-+
-+ page_list = image->head & PAGE_MASK;
-+
-+ /* we need both effective and real address here */
-+ reboot_code_buffer_phys =
-+ page_to_pfn(image->control_code_page) << PAGE_SHIFT;
-+ reboot_code_buffer = page_address(image->control_code_page);
-+
-+ /* Prepare parameters for reboot_code_buffer*/
-+ kexec_start_address = image->start;
-+ kexec_indirection_page = page_list;
-+ kexec_mach_type = machine_arch_type;
-+
-+ /* copy our kernel relocation code to the control code page */
-+ memcpy(reboot_code_buffer,
-+ relocate_new_kernel, relocate_new_kernel_size);
-+
-+
-+ flush_icache_range(reboot_code_buffer,
-+ reboot_code_buffer + KEXEC_CONTROL_CODE_SIZE);
-+ printk(KERN_INFO "Bye!\n");
-+
-+ cpu_proc_fin();
-+ setup_mm_for_reboot(0); /* mode is not used, so just pass 0*/
-+ cpu_reset(reboot_code_buffer_phys);
-+}
-Index: linux-2.6.16/arch/arm/kernel/Makefile
-===================================================================
---- linux-2.6.16.orig/arch/arm/kernel/Makefile 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/kernel/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -21,6 +21,7 @@
- obj-$(CONFIG_PCI) += bios32.o
- obj-$(CONFIG_SMP) += smp.o
- obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
-+obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
-
- obj-$(CONFIG_IWMMXT) += iwmmxt.o
- AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
-Index: linux-2.6.16/arch/arm/kernel/relocate_kernel.S
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/kernel/relocate_kernel.S 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,74 @@
-+/*
-+ * relocate_kernel.S - put the kernel image in place to boot
-+ */
-+
-+#include <asm/kexec.h>
-+
-+ .globl relocate_new_kernel
-+relocate_new_kernel:
-+
-+ ldr r0,kexec_indirection_page
-+ ldr r1,kexec_start_address
-+
-+
-+0: /* top, read another word for the indirection page */
-+ ldr r3, [r0],#4
-+
-+ /* Is it a destination page. Put destination address to r4 */
-+ tst r3,#1,0
-+ beq 1f
-+ bic r4,r3,#1
-+ b 0b
-+1:
-+ /* Is it an indirection page */
-+ tst r3,#2,0
-+ beq 1f
-+ bic r0,r3,#2
-+ b 0b
-+1:
-+
-+ /* are we done ? */
-+ tst r3,#4,0
-+ beq 1f
-+ b 2f
-+
-+1:
-+ /* is it source ? */
-+ tst r3,#8,0
-+ beq 0b
-+ bic r3,r3,#8
-+ mov r6,#1024
-+9:
-+ ldr r5,[r3],#4
-+ str r5,[r4],#4
-+ subs r6,r6,#1
-+ bne 9b
-+ b 0b
-+
-+2:
-+ /* Jump to relocated kernel */
-+ mov lr,r1
-+ mov r0,#0
-+ ldr r1,kexec_mach_type
-+ mov r2,#0
-+ mov pc,lr
-+
-+ .globl kexec_start_address
-+kexec_start_address:
-+ .long 0x0
-+
-+ .globl kexec_indirection_page
-+kexec_indirection_page:
-+ .long 0x0
-+
-+ .globl kexec_mach_type
-+kexec_mach_type:
-+ .long 0x0
-+
-+relocate_new_kernel_end:
-+
-+ .globl relocate_new_kernel_size
-+relocate_new_kernel_size:
-+ .long relocate_new_kernel_end - relocate_new_kernel
-+
-+
-Index: linux-2.6.16/arch/arm/kernel/setup.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/kernel/setup.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/kernel/setup.c 2007-04-12 10:36:19.000000000 +0200
-@@ -768,6 +768,16 @@
- memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
- parse_cmdline(cmdline_p, from);
-+
-+#ifdef CONFIG_EFB_DEBUG
-+ /*
-+ * paging_init is going to wipe out any section other than the
-+ * kernel code and data allocated in head.S so the framebuffer
-+ * is going not to be available during paging_init.
-+ */
-+ efb_disable();
-+#endif
-+
- paging_init(&meminfo, mdesc);
- request_standard_resources(&meminfo, mdesc);
-
-Index: linux-2.6.16/arch/arm/kernel/traps.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/kernel/traps.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/kernel/traps.c 2007-04-12 10:36:19.000000000 +0200
-@@ -55,10 +55,10 @@
- void dump_backtrace_entry(unsigned long where, unsigned long from)
- {
- #ifdef CONFIG_KALLSYMS
-- printk("[<%08lx>] ", where);
-+/* printk("[<%08lx>] ", where); */
- print_symbol("(%s) ", where);
-- printk("from [<%08lx>] ", from);
-- print_symbol("(%s)\n", from);
-+/* printk("from [<%08lx>] ", from); */
-+/* print_symbol("(%s)\n", from); */
- #else
- printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
- #endif
-@@ -205,7 +205,7 @@
-
- printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
- print_modules();
-- __show_regs(regs);
-+/* __show_regs(regs); */
- printk("Process %s (pid: %d, stack limit = 0x%p)\n",
- tsk->comm, tsk->pid, thread + 1);
-
-@@ -547,7 +547,7 @@
- current->pid, current->comm, no);
- dump_instr(regs);
- if (user_mode(regs)) {
-- __show_regs(regs);
-+/* __show_regs(regs); */
- c_backtrace(regs->ARM_fp, processor_mode(regs));
- }
- }
-Index: linux-2.6.16/arch/arm/lib/backtrace.S
-===================================================================
---- linux-2.6.16.orig/arch/arm/lib/backtrace.S 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/lib/backtrace.S 2007-04-12 10:36:19.000000000 +0200
-@@ -103,7 +103,9 @@
- .align 0
- 1007: ldr r0, =.Lbad
- mov r1, frame
-+#ifdef CONFIG_PRINTK
- bl printk
-+#endif
- LOADREGS(fd, sp!, {r4 - r8, pc})
- .ltorg
- .previous
-@@ -138,12 +140,16 @@
- ldr r2, [stack], #-4
- mov r1, reg
- adr r0, .Lfp
-+#ifdef CONFIG_PRINTK
- bl printk
-+#endif
- 2: subs reg, reg, #1
- bpl 1b
- teq r7, #0
- adrne r0, .Lcr
-+#ifdef CONFIG_PRINTK
- blne printk
-+#endif
- mov r0, stack
- LOADREGS(fd, sp!, {instr, reg, stack, r7, pc})
-
-Index: linux-2.6.16/arch/arm/mach-omap1/clock.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-omap1/clock.c 2007-04-12 10:36:19.000000000 +0200
-@@ -267,11 +267,13 @@
- if (!ptr->rate)
- return -EINVAL;
-
-+#if 0
- /*
- * In most cases we should not need to reprogram DPLL.
- * Reprogramming the DPLL is tricky, it must be done from SRAM.
- */
- omap_sram_reprogram_clock(ptr->dpllctl_val, ptr->ckctl_val);
-+#endif
-
- ck_dpll1.rate = ptr->pll_rate;
- propagate_rate(&ck_dpll1);
-@@ -774,12 +776,13 @@
- omap_writew(1, ARM_RSTCT2);
- omap_writew(0x400, ARM_IDLECT1);
-
-+
- /*
- * According to OMAP5910 Erratum SYS_DMA_1, bit DMACK_REQ (bit 8)
- * of the ARM_IDLECT2 register must be set to zero. The power-on
- * default value of this bit is one.
- */
-- omap_writew(0x0000, ARM_IDLECT2); /* Turn LCD clock off also */
-+ omap_writew(0x0008, ARM_IDLECT2); /* But keep LCD clock active ... */
-
- /*
- * Only enable those clocks we will need, let the drivers
-Index: linux-2.6.16/arch/arm/mach-omap1/clock.h
-===================================================================
---- linux-2.6.16.orig/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-omap1/clock.h 2007-04-12 10:36:19.000000000 +0200
-@@ -182,7 +182,7 @@
- static struct clk arm_ck = {
- .name = "arm_ck",
- .parent = &ck_dpll1,
-- .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
-+ .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX | CLOCK_IN_OMAP730 |
- CLOCK_IN_OMAP310 | RATE_CKCTL | RATE_PROPAGATES |
- ALWAYS_ENABLED,
- .rate_offset = CKCTL_ARMDIV_OFFSET,
-@@ -196,7 +196,7 @@
- .name = "armper_ck",
- .parent = &ck_dpll1,
- .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
-- CLOCK_IN_OMAP310 | RATE_CKCTL |
-+ CLOCK_IN_OMAP310 | CLOCK_IN_OMAP730 | RATE_CKCTL |
- CLOCK_IDLE_CONTROL,
- .enable_reg = (void __iomem *)ARM_IDLECT2,
- .enable_bit = EN_PERCK,
-@@ -715,6 +715,20 @@
- .disable = &omap1_clk_disable_generic,
- };
-
-+static struct clk mmc_ck_730 = {
-+ .name = "mmc_ck",
-+ .id = 3,
-+ /* Functional clock is direct from ULPD, interface clock is ARMPER */
-+ .parent = &armper_ck.clk,
-+ .rate = 48000000,
-+ .flags = CLOCK_IN_OMAP730 |
-+ RATE_FIXED | ENABLE_REG_32BIT | CLOCK_NO_IDLE_PARENT,
-+ .enable_reg = (void __iomem *)SOFT_REQ_REG,
-+ .enable_bit = 12,
-+ .enable = &omap1_clk_enable_generic,
-+ .disable = &omap1_clk_disable_generic,
-+};
-+
- static struct clk virtual_ck_mpu = {
- .name = "mpu",
- .flags = CLOCK_IN_OMAP1510 | CLOCK_IN_OMAP16XX |
-@@ -799,6 +813,7 @@
- &bclk_1510, &bclk_16xx,
- &mmc1_ck,
- &mmc2_ck,
-+ &mmc_ck_730,
- /* Virtual clocks */
- &virtual_ck_mpu,
- &i2c_fck,
-Index: linux-2.6.16/arch/arm/mach-omap1/efb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/mach-omap1/efb.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,200 @@
-+/*
-+** efb.c for efb in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Wed Apr 5 18:55:08 2006 nico
-+** Last update Thu May 11 13:50:52 2006 nico
-+*/
-+
-+/*
-+ *
-+ * early frame buffer debug routines.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+#include <asm/mach-types.h>
-+#include <asm/arch/efb.h>
-+
-+static void efb_move_screen_up(void);
-+static void blit_char(unsigned int x, unsigned int y, char c);
-+
-+#define PIX16(R, G, B) (((R >> 3) << 11) | ((G >> 2) << 5) | ((B >> 3)))
-+
-+
-+/* 0xD0000000 is where OMAP730_SRAM is mapped by head.S */
-+/*
-+ * Windows CE seems to have physical frame buffer mapped to
-+ * 0x20001020. we try to keep this space available at virtual address
-+ * 0xD0001020 during kernel boot. This is strange as this is not page
-+ * aligned. However even if I don't know how to do it, there must be a
-+ * way to configure the framebuffer location inside the sram.
-+ *
-+ * TODO: see omap730 TRM.
-+ */
-+static unsigned short __initdata *vram = (unsigned short *)0xD0001020;
-+
-+/*
-+ * no attribute since it is used by efb_putstr which has no
-+ * attribute ...
-+ */
-+static int enabled = 0;
-+
-+unsigned int efb_width;
-+unsigned int efb_height;
-+
-+void __init efb_init(void)
-+{
-+ unsigned int i;
-+
-+ /*
-+ * only htc typhoon is known to have 176x220 screen. all other
-+ * machines have 320x240 screens.
-+ */
-+ if (machine_is_typhoon()) {
-+ efb_width = 176;
-+ efb_height = 220;
-+ } else {
-+ efb_width = 240;
-+ efb_height = 320;
-+ }
-+
-+ for (i = 0; i < efb_width * efb_height; ++i) {
-+ vram[i] = 0;
-+ }
-+
-+ efb_enable();
-+}
-+
-+
-+/*
-+ * Write a pixel with color (r,g,b) at screen coordinate (x,y)
-+ */
-+static void __init dbg_pix(int x, int y, int r, int g, int b)
-+{
-+ unsigned short pix = PIX16(r, g, b);
-+
-+ vram[y * efb_width + x] = pix;
-+}
-+
-+
-+static __initdata int x = 1;
-+static __initdata int y = 0;
-+
-+
-+/*
-+ * put string s to the frame buffer using the 5x5 font.
-+ *
-+ * this functions has no __init attribute since it is can be called in printk.
-+ */
-+void efb_putstr(const char *s)
-+{
-+ if (enabled == 0)
-+ return ;
-+
-+ while (*s) {
-+ if (*s == '\n')
-+ goto newline;
-+ blit_char(x, y, *s);
-+ x += 6;
-+
-+ if (x + 6 > efb_width) {
-+ newline:
-+ if (y + 6 > efb_height - 6)
-+ efb_move_screen_up();
-+ else
-+ y += 6;
-+ x = 1;
-+ }
-+ ++s;
-+ }
-+}
-+
-+#define NR_LINE (efb_height / 6)
-+
-+#define FONT_WIDTH 5
-+#define FONT_HEIGHT 5
-+
-+/*
-+ * blit a char on the screen at position (x,y)
-+ */
-+static __init void blit_char(unsigned int x, unsigned int y, char c)
-+{
-+ const char *cur_font;
-+ int i, j;
-+
-+ /*
-+ * do not blit glyph if some part of it are ofscreen.
-+ */
-+ if (x + FONT_WIDTH > efb_width)
-+ return;
-+ if (y + FONT_HEIGHT > efb_height)
-+ return;
-+
-+ cur_font = efb_font[(unsigned int)c];
-+ for (j= 0; j < FONT_HEIGHT; ++j) {
-+ for (i = 0; i < FONT_WIDTH; ++i) {
-+ if (cur_font[j * FONT_WIDTH + i])
-+ dbg_pix(x + i, y + j, 255, 255, 255);
-+ else
-+ dbg_pix(x + i, y + j, 0, 0, 0);
-+ }
-+ }
-+}
-+
-+/*
-+ * perform some basic one way scrolling.
-+ *
-+ * for each line l do
-+ * clear line l
-+ * break if l is the last line
-+ * copy next line over l
-+ * done
-+ *
-+ * It is not possible to scroll back.
-+ */
-+static void __init efb_move_screen_up(void)
-+{
-+ int i, k;
-+ int start1, start2;
-+
-+ for (k = 0; 1; ++k) {
-+ start1 = efb_width * 6 * k;
-+ start2 = efb_width * 6 * (k + 1);
-+ /* clear the n current line */
-+ for (i = 0; i < 6 * efb_width; ++i)
-+ vram[start1 + i] = 0;
-+ if (k == NR_LINE - 1)
-+ break;
-+ /* copy the next line to the current line */
-+ for (i = 0; i < 6 * efb_width; ++i)
-+ vram[start1 + i] = vram[start2 +i];
-+ }
-+}
-+
-+void __init efb_disable(void)
-+{
-+ enabled = 0;
-+}
-+
-+void __init efb_enable(void)
-+{
-+ enabled = 1;
-+}
-Index: linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/mach-omap1/efb-font5x5.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,982 @@
-+
-+/*
-+ * file generated by makecfont.pl and bmp2c
-+ * resources for a simple 5x5 font
-+ */
-+
-+const char efb_font[255][25] = {
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* lpar.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* rpar.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* star.bmp */
-+ {
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* dash.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* dot.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* slash.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* 0.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 1.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 2.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 3.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 4.bmp */
-+ {
-+ 0xFF, 0x00, 0xFF, 0x00, 0x00,
-+ 0xFF, 0x00, 0xFF, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* 5.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ },
-+ /* 6.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 7.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* 8.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* 9.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* ddot.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* lchev.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* eq.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* rchev.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* A.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* B.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* C.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* D.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* E.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* F.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* G.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* H.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* I.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* J.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* K.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* L.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* M.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* N.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* O.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* P.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* Q.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0xFF,
-+ },
-+ /* R.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* S.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* T.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* U.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* V.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* W.bmp */
-+ {
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ },
-+ /* X.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* Y.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* Z.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* ldash.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* aslash.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* rdash.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* _.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* a.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* b.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* c.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* d.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* e.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* f.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* g.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* h.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* i.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* j.bmp */
-+ {
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* k.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* l.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* m.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* n.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* o.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* p.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* q.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0xFF, 0x00, 0xFF,
-+ },
-+ /* r.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* s.bmp */
-+ {
-+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ 0x00, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* t.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* u.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0xFF, 0xFF, 0x00,
-+ },
-+ /* v.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* w.bmp */
-+ {
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0xFF, 0x00, 0xFF, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ },
-+ /* x.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ },
-+ /* y.bmp */
-+ {
-+ 0xFF, 0x00, 0x00, 0x00, 0xFF,
-+ 0x00, 0xFF, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0x00, 0x00, 0x00, 0x00,
-+ },
-+ /* z.bmp */
-+ {
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ 0x00, 0x00, 0x00, 0xFF, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0xFF, 0x00, 0x00, 0x00,
-+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* pipe.bmp */
-+ {
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ 0x00, 0x00, 0xFF, 0x00, 0x00,
-+ },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+ /* not available */
-+ { 0x00 },
-+};
-+
-+/* c'étais vraiment tres intéressant */
-Index: linux-2.6.16/arch/arm/mach-omap1/io.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/mach-omap1/io.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-omap1/io.c 2007-04-12 10:36:19.000000000 +0200
-@@ -20,6 +20,8 @@
- #include <asm/arch/tc.h>
- #include <asm/arch/omapfb.h>
-
-+#include <asm/arch/efb.h>
-+
- extern int omap1_clk_init(void);
- extern void omap_check_revision(void);
- extern void omap_sram_init(void);
-@@ -49,7 +51,7 @@
- .pfn = __phys_to_pfn(OMAP730_DSPREG_START),
- .length = OMAP730_DSPREG_SIZE,
- .type = MT_DEVICE
-- }
-+ },
- };
- #endif
-
-@@ -143,4 +145,3 @@
-
- omap1_mux_init();
- }
--
-Index: linux-2.6.16/arch/arm/mach-omap1/Kconfig
-===================================================================
---- linux-2.6.16.orig/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-omap1/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -171,3 +171,10 @@
-
- source "arch/arm/plat-omap/dsp/Kconfig"
-
-+source "arch/arm/mach-omap1/tornado/Kconfig"
-+
-+config EFB_DEBUG
-+ bool "Early Frame Buffer debugging routines"
-+ depends on MACH_TORNADO
-+ help
-+ Output in the framebuffer of the HTC phones as early as possible (experimental, ...).
-Index: linux-2.6.16/arch/arm/mach-omap1/Makefile
-===================================================================
---- linux-2.6.16.orig/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/mach-omap1/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -37,3 +37,5 @@
- led-$(CONFIG_MACH_OMAP_OSK) += leds-osk.o
- obj-$(CONFIG_LEDS) += $(led-y)
-
-+obj-y += tornado/
-+obj-$(CONFIG_EFB_DEBUG) += efb.o efb-font5x5.o
-Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/mach-omap1/tornado/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,5 @@
-+config MACH_TORNADO
-+ bool "HTC Tornado Support"
-+ depends on ARCH_OMAP730
-+ help
-+ HTC Tornado smartphone support (AKA SPV C600, QTEK 8310, ...)
-Index: linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/mach-omap1/tornado/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,11 @@
-+##
-+## Makefile for linux-on-tornado in /home/nico/work/tornado/linux-tornado
-+##
-+## Made by nico
-+## Login <nico@chac.le-poulpe.net>
-+##
-+## Started on Wed Apr 5 17:20:58 2006 nico
-+## Last update Thu May 11 12:34:33 2006 nico
-+##
-+
-+obj-$(CONFIG_MACH_TORNADO) += tornado.o
-Index: linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/arch/arm/mach-omap1/tornado/tornado.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,242 @@
-+/*
-+** tornado.c for linux-on-tornado in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Wed Apr 5 17:20:24 2006 nico
-+** Last update Fri Jul 7 01:31:54 2006 nico
-+*/
-+
-+/*
-+ *
-+ * HTC Tornado init stuff
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/map.h>
-+#include <asm/arch/omap730.h>
-+#include <asm/page.h>
-+#include <asm/memory.h>
-+#include <asm/arch/common.h>
-+#include <asm/arch/board.h>
-+#include <asm/arch/efb.h>
-+#include <asm/arch/io.h>
-+#include <asm/arch/irqs.h>
-+#include <asm/arch/gpio.h>
-+
-+#include <linux/delay.h>
-+
-+#define TORNADO_GPIO_DM 35
-+#define TORNADO_GPIO_DP 36
-+
-+static void __init
-+tornado_map_io(void)
-+{
-+
-+ omap1_map_common_io();
-+
-+#ifdef CONFIG_EFB_DEBUG
-+ /*
-+ * reenable simple framebuffer output on HTC typhoon:
-+ * now safe to do it: sram has been remapped.
-+ */
-+ efb_enable();
-+#endif
-+ printk("tornado_map_io done.\n");
-+}
-+
-+static void __init
-+tornado_usb_enable(void)
-+{
-+ unsigned int tries = 20;
-+ printk("trying to enable USB.\n");
-+
-+ /* force USB_EN GPIO to 0 */
-+ do {
-+ omap_set_gpio_direction(33, 0); /* output */
-+ omap_set_gpio_dataout(33, 0); /* low */
-+ --tries;
-+ } while(omap_get_gpio_datain(33) && tries);
-+ if (tries) {
-+ printk("unable to reset USB_EN GPIO after 20 tries.\n");
-+ printk("I will try to continue anyway: USB may not be available.\n");
-+ }
-+ printk("USB_EN to 0 after %i tries.\n", tries);
-+
-+ omap_set_gpio_dataout(73, 0);
-+
-+ omap_set_gpio_direction(TORNADO_GPIO_DM, 1); /* input */
-+
-+ /* get uart control from GSM */
-+
-+ /* select GPIO35 for D_MCLK_OUT */
-+ /* select GPIO36 for D_CRESET */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_3) & 0xffffffcc, OMAP730_IO_CONF_3);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_3) | 0x000000cc, OMAP730_IO_CONF_3);
-+
-+
-+ omap_set_gpio_direction(TORNADO_GPIO_DP, 1); /* input */
-+
-+ /* select D_DM, D_DP for D_DM and disable PE_DM control */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xff1fffff, OMAP730_IO_CONF_2);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x00100000, OMAP730_IO_CONF_2);
-+ mdelay(100);
-+
-+ /* select USB_VBUSI for D_VBUSI, enable PE_VIBUSI pull enable control */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) & 0xf1ffffff, OMAP730_IO_CONF_2);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) | 0x01000000, OMAP730_IO_CONF_2);
-+
-+ /* set USB_VBUS_CTRL */
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1);
-+}
-+
-+static void __init
-+tornado_usb_otg(void)
-+{
-+ /* clock configuration */
-+ omap_writew(omap_readw(ULPD_SOFT_REQ) | (1 << 8) | SOFT_USB_CLK_REQ, ULPD_SOFT_REQ);
-+
-+ // clk_enable(&l3_ocpi_ck);
-+ omap_writew(omap_readw(ARM_IDLECT3) | (1 << 0), ARM_IDLECT3);
-+
-+ /* pin muxing */
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 2), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 3), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 15), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 23), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 26), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (1 << 25), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 24), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 10), OMAP730_MODE_1);
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 11), OMAP730_MODE_1);
-+}
-+
-+static struct omap_usb_config tornado_usb_config __initdata =
-+{
-+ .register_dev = 1,
-+ .register_host = 0,
-+ .otg = 0,
-+ .hmc_mode = 4,
-+ .pins[0] = 2,
-+ .pins[1] = 0,
-+ .pins[2] = 0,
-+};
-+
-+static struct omap_mmc_config tornado_mmc_config __initdata =
-+{
-+ .mmc[0] = {
-+ .enabled = 1,
-+ .nomux = 1,
-+ .wire4 = 1,
-+ .power_pin = -1,
-+ .switch_pin = -1,
-+ }
-+};
-+
-+static struct omap_board_config_kernel tornado_config[] =
-+{
-+ { OMAP_TAG_USB, &tornado_usb_config },
-+ { OMAP_TAG_MMC, &tornado_mmc_config },
-+};
-+
-+static void __init
-+tornado_mmc_init(void)
-+{
-+ unsigned int tries;
-+
-+# define OMAP_MMC_REG_SYSC (0xfffb7800 + 0x32)
-+# define OMAP_MMC_REG_SYSS (0xfffb7800 + 0x34)
-+# define OMAP_MMC_REG_CTO (0xfffb7800 + 0x0e)
-+# define OMAP_MMC_REG_DTO (0xfffb7800 + 0x1c)
-+
-+ /* put mmc host into reset ... */
-+ omap_writew(1, OMAP_MMC_REG_SYSC);
-+
-+ tries = 100;
-+ while (omap_readw(OMAP_MMC_REG_SYSS) == 0 && tries) {
-+ mdelay(50);
-+ --tries;
-+ }
-+ printk("MMC host reset done: remaining tries: %i\n", tries);
-+
-+ /* force mode 0 for D_SMC_DAT3, D_SMC_DAT2, D_SMC, no pull up enable */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 8), OMAP730_IO_CONF_2);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 12), OMAP730_IO_CONF_2);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_2) & ~(0xF << 16), OMAP730_IO_CONF_2);
-+}
-+
-+struct platform_device gsm_device = {
-+ .name = "typhoon-gsm",
-+ .id = 1
-+};
-+
-+static struct platform_device *devices[] __initdata = {
-+ &gsm_device,
-+};
-+
-+static void __init
-+tornado_init(void)
-+{
-+ printk("Tornado init.\n");
-+ omap_board_config = tornado_config;
-+ omap_board_config_size = ARRAY_SIZE(tornado_config);
-+
-+ platform_add_devices(devices, ARRAY_SIZE(devices));
-+
-+ if (omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) {
-+ /*
-+ * disable a potentially running watchdog timer before
-+ * it kills us.
-+ */
-+ printk("OMAP730 Watchdog seems to be activated, disabling it for now.\n");
-+ omap_writel(0xF5, OMAP_WDT_TIMER_MODE);
-+ omap_writel(0xA0, OMAP_WDT_TIMER_MODE);
-+ }
-+
-+ tornado_usb_otg();
-+ tornado_usb_enable();
-+ tornado_mmc_init();
-+}
-+
-+static void __init
-+tornado_init_irq(void)
-+{
-+ printk("tornado_init_irq.\n");
-+ omap1_init_common_hw();
-+ omap_init_irq();
-+ omap_gpio_init();
-+}
-+
-+MACHINE_START(TORNADO, "HTC Tornado")
-+ /* Maintainer: Nicolas Schichan <nico@chac.le-poulpe.net> */
-+ .phys_io = 0xfff00000,
-+ .io_pg_offst = ((0xfef00000) >> 18) & 0xfffc,
-+ .boot_params = 0x10000100,
-+ .map_io = tornado_map_io,
-+ .init_irq = tornado_init_irq,
-+ .init_machine = tornado_init,
-+ .timer = &omap_timer,
-+MACHINE_END
-Index: linux-2.6.16/arch/arm/plat-omap/sram.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/plat-omap/sram.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/arch/arm/plat-omap/sram.c 2007-04-12 10:36:19.000000000 +0200
-@@ -33,9 +33,12 @@
- #define OMAP2_SRAM_PUB_VA 0xd0000800
-
- #if defined(CONFIG_ARCH_OMAP24XX)
--#define SRAM_BOOTLOADER_SZ 0x00
-+# define SRAM_BOOTLOADER_SZ 0x00
-+#elif defined(CONFIG_EFB_DEBUG)
-+/* reserve memory for frame buffer too ... */
-+# define SRAM_BOOTLOADER_SZ (0x1020 + 320 * 240 * 2)
- #else
--#define SRAM_BOOTLOADER_SZ 0x80
-+# define SRAM_BOOTLOADER_SZ 0x80
- #endif
-
- #define VA_REQINFOPERM0 IO_ADDRESS(0x68005048)
-Index: linux-2.6.16/arch/arm/plat-omap/usb.c
-===================================================================
---- linux-2.6.16.orig/arch/arm/plat-omap/usb.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/plat-omap/usb.c 2007-04-12 10:36:19.000000000 +0200
-@@ -123,11 +123,11 @@
- * - only peripherals may use the internal D+/D- pulldowns
- * - OTG support on this port not yet written
- */
--
-- USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4);
-- if (!is_device)
-- USB_TRANSCEIVER_CTRL_REG |= (3 << 1);
--
-+ if (!cpu_is_omap730()) {
-+ USB_TRANSCEIVER_CTRL_REG &= ~(7 << 4);
-+ if (!is_device)
-+ USB_TRANSCEIVER_CTRL_REG |= (3 << 1);
-+ }
- return 3 << 16;
- }
-
-@@ -457,6 +457,11 @@
- syscon &= ~DEV_IDLE_EN;
- udc_device.dev.platform_data = config;
- /* FIXME patch IRQ numbers for omap730 */
-+ if (cpu_is_omap730()) {
-+ udc_resources[1].start = INT_730_USB_GENI;
-+ udc_resources[2].start = INT_730_USB_NON_ISO;
-+ udc_resources[3].start = INT_730_USB_ISO;
-+ }
- status = platform_device_register(&udc_device);
- if (status)
- pr_debug("can't register UDC device, %d\n", status);
-Index: linux-2.6.16/arch/arm/tools/mach-types
-===================================================================
---- linux-2.6.16.orig/arch/arm/tools/mach-types 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/arch/arm/tools/mach-types 2007-04-12 10:36:19.000000000 +0200
-@@ -969,3 +969,4 @@
- fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
- dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
- gesbc9312 MACH_GESBC9312 GESBC9312 958
-+htc_tornado MACH_TORNADO TORNADO 6665
-Index: linux-2.6.16/ChangeLog
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/ChangeLog 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,3 @@
-+2006-04-10 nico <nico@localhost.localdomain>
-+
-+ * wizard-keypad.c: support for arrow keys (GPIO based).
-Index: linux-2.6.16/drivers/char/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/char/Kconfig 2007-04-12 10:36:08.000000000 +0200
-+++ linux-2.6.16/drivers/char/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -678,6 +678,21 @@
-
- If unsure, say N.
-
-+config TORNADO_VIBRATOR
-+ tristate "HTC Tornado vibrator"
-+ depends on MACH_TORNADO
-+ help
-+ HTC Tornado vibrator support. supports for misc
-+ device with minor number 240. implements two IOCTLs:
-+ VIBRATOR_ENABLE and VIBRATOR_DISABLE.
-+
-+config TORNADO_LEDS
-+ tristate "HTC Tornado led driver"
-+ depends on MACH_TORNADO
-+ help
-+ HTC Tornado led driver. misc device with minor
-+ number 241.
-+
- config NVRAM
- tristate "/dev/nvram support"
- depends on ATARI || X86 || ARM || GENERIC_NVRAM
-Index: linux-2.6.16/drivers/char/Makefile
-===================================================================
---- linux-2.6.16.orig/drivers/char/Makefile 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/char/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -97,6 +97,10 @@
-
- obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o
- obj-$(CONFIG_TCG_TPM) += tpm/
-+
-+obj-$(CONFIG_TORNADO_VIBRATOR) += tornado-vibrator.o
-+obj-$(CONFIG_TORNADO_LEDS) += tornado-leds.o
-+
- # Files generated that shall be removed upon make clean
- clean-files := consolemap_deftbl.c defkeymap.c qtronixmap.c
-
-Index: linux-2.6.16/drivers/char/tornado-leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/char/tornado-leds.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,253 @@
-+/*
-+** tornado-leds.c for leds in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Mon Apr 17 11:19:59 2006 nico
-+** Last update Thu May 25 15:32:23 2006 nico
-+*/
-+
-+/*
-+ *
-+ * HTC Tornado LED driver.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/miscdevice.h>
-+#include <linux/moduleparam.h>
-+#include <linux/fs.h>
-+#include <linux/bitops.h>
-+
-+#include <asm/arch/gpio.h>
-+
-+#define LEDS_MINOR 241
-+
-+/*
-+ * ioctl definitions.
-+ */
-+#define IOCTL_LED_ENABLE 0x4242 /* param: color */
-+#define IOCTL_LED_BLINK 0x4243 /* param: color */
-+#define IOCTL_LED_DISABLE 0x4244 /* no param */
-+#define IOCTL_KPLED_ENABLE 0x4245 /* no param */
-+#define IOCTL_KPLED_DISABLE 0x4246 /* no param */
-+
-+#define PARAM_LED_RED 0x666
-+#define PARAM_LED_GREEN 0x667
-+#define PARAM_LED_BLUE 0x668
-+
-+/*
-+ * hw def
-+ */
-+#define TORNADO_LED_BASE 0xFFFBA800
-+/* PM Reg: enable led clock when set to 1 */
-+#define TORNADO_LED_PMR 0xFFFBA801
-+
-+/* TORNADO_LED_ENABLE register layout */
-+/*
-+ bit 7: ON
-+ bit 6: BLINK
-+ bit 5-3: off time.
-+ bit 0-2: on time.
-+
-+*/
-+
-+#define TORNADO_GPIO_LED_GREEN 79
-+#define TORNADO_GPIO_LED_RED 128
-+#define TORNADO_GPIO_LED_BLUE 140
-+#define TORNADO_GPIO_KPLED 16
-+
-+
-+/* in TORNADO_LED_ENABLE */
-+#define LED_ON (1 << 7)
-+#define LED_BLINK (1 << 6)
-+#define LED_ONTIME(x) ((x) & 0x7)
-+#define LED_OFFTIME(x) (((x) & 0x7) << 3)
-+
-+#define LED_BASE_REG __REG8(TORNADO_LED_BASE)
-+#define LED_PM_REG __REG8(TORNADO_LED_PMR)
-+
-+static unsigned long use;
-+
-+static int
-+tornado_leds_open(struct inode *inode, struct file *file)
-+{
-+ /* ensure exclusive access */
-+ if (test_and_set_bit(0, &use))
-+ return -EBUSY;
-+
-+ return 0;
-+}
-+
-+static int led_set_color(unsigned long color)
-+{
-+ switch (color) {
-+ case PARAM_LED_RED:
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 1);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
-+ break;
-+ case PARAM_LED_GREEN:
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 1);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
-+ break;
-+ case PARAM_LED_BLUE:
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 1);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+/*
-+ * FIXME: on the HTC Tornado, the blue led is not the same as the
-+ * red/green led, there may be some gpio changes / special register
-+ * settings for this.
-+ */
-+static int
-+tornado_leds_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-+{
-+ switch (cmd) {
-+ case IOCTL_LED_ENABLE:
-+ LED_PM_REG = 0; /* disable blink clock */
-+ LED_BASE_REG = LED_ON;
-+ return led_set_color(arg);
-+
-+ case IOCTL_LED_BLINK:
-+ LED_PM_REG = 1;
-+ LED_BASE_REG = 0x7F; /* LED_BLINK | LED_ONTIME(1) | LED_OFFTIME(3); */
-+ printk("IOCTL_LED_BLINK (reg = %02x).\n", LED_BASE_REG);
-+ return led_set_color(arg);
-+
-+ case IOCTL_LED_DISABLE:
-+ LED_PM_REG = 0;
-+ LED_BASE_REG = 0;
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
-+ break;
-+
-+ case IOCTL_KPLED_ENABLE:
-+ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 1);
-+ break;
-+
-+ case IOCTL_KPLED_DISABLE:
-+ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static int
-+tornado_leds_release(struct inode *inode, struct file *file)
-+{
-+ use = 0;
-+ return 0;
-+}
-+
-+struct file_operations tornado_leds_fops =
-+{
-+ .owner = THIS_MODULE,
-+ .ioctl = tornado_leds_ioctl,
-+ .open = tornado_leds_open,
-+ .release = tornado_leds_release,
-+};
-+
-+struct miscdevice tornado_leds_device =
-+{
-+ .minor = LEDS_MINOR,
-+ .name = "tornado-leds",
-+ .fops = &tornado_leds_fops,
-+};
-+
-+static int __init
-+tornado_leds_init(void)
-+{
-+ int ret;
-+
-+ omap_request_gpio(TORNADO_GPIO_LED_RED);
-+ omap_request_gpio(TORNADO_GPIO_LED_GREEN);
-+ omap_request_gpio(TORNADO_GPIO_LED_BLUE);
-+ omap_request_gpio(TORNADO_GPIO_KPLED);
-+
-+ ret = misc_register(&tornado_leds_device);
-+ if (ret)
-+ return ret;
-+
-+ /*
-+ * init hw
-+ */
-+ /* clear GSM_LPG1 and select GPIO_140 & LPG1 pullup enable control */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x20, OMAP730_IO_CONF_10);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd0, OMAP730_IO_CONF_10);
-+
-+/* omap_set_gpio_dataout(140, 1); */
-+
-+ /* clear GSM_LPG2 and select GPIO_141 & LPG2 pullup enable control */
-+ omap_writel(omap_readl(OMAP730_IO_CONF_10) & ~0x200, OMAP730_IO_CONF_10);
-+ omap_writel(omap_readl(OMAP730_IO_CONF_10) | 0xd00, OMAP730_IO_CONF_10);
-+
-+/* omap_set_gpio_dataout(141, 1); */
-+
-+ omap_set_gpio_direction(TORNADO_GPIO_LED_RED, 0); /* out */
-+ omap_set_gpio_direction(TORNADO_GPIO_LED_GREEN, 0); /* out */
-+ omap_set_gpio_direction(TORNADO_GPIO_LED_BLUE, 0); /* out */
-+ omap_set_gpio_direction(TORNADO_GPIO_KPLED, 0); /* out */
-+
-+ /* enable lpg1 and lpg2 */
-+ omap_writel(omap_readl(OMAP730_MODE_1) | (3 << 28), OMAP730_MODE_1);
-+
-+ /* disable led activation */
-+ LED_PM_REG = 0;
-+ LED_BASE_REG = 0;
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_RED, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_GREEN, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_LED_BLUE, 0);
-+ omap_set_gpio_dataout(TORNADO_GPIO_KPLED, 0);
-+
-+ printk("HTC Tornado led driver.\n");
-+ return 0;
-+}
-+
-+static void __exit
-+tornado_leds_exit(void)
-+{
-+ misc_deregister(&tornado_leds_device);
-+
-+ /* disable lpg 1 and lpg2 */
-+ omap_writel(omap_readl(OMAP730_MODE_1) & ~(3 << 28), OMAP730_MODE_1);
-+ LED_BASE_REG = 0;
-+ LED_PM_REG = 0;
-+ omap_free_gpio(TORNADO_GPIO_LED_RED);
-+ omap_free_gpio(TORNADO_GPIO_LED_GREEN);
-+ omap_free_gpio(TORNADO_GPIO_LED_BLUE);
-+ omap_free_gpio(TORNADO_GPIO_KPLED);
-+}
-+
-+module_init(tornado_leds_init);
-+module_exit(tornado_leds_exit);
-+
-+MODULE_AUTHOR("Nicolas Schichan");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.16/drivers/char/tornado-vibrator.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/char/tornado-vibrator.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,144 @@
-+/*
-+** tornado-vibrator.c for vibrator in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Mon Apr 10 15:21:27 2006 nico
-+** Last update Thu May 25 13:44:23 2006 nico
-+*/
-+
-+#include <linux/init.h>
-+#include <linux/miscdevice.h>
-+#include <linux/moduleparam.h>
-+#include <linux/fs.h>
-+#include <linux/bitops.h>
-+
-+#include <asm/arch/gpio.h>
-+#include "tornado-vibrator.h"
-+
-+/*
-+ *
-+ * HTC Tornado vibrator driver.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+/*
-+ * quite a simple driver: only put GPIO 34 in OUT mode and set it to 1
-+ * to enable the vibrator or 0 to disable it.
-+ */
-+
-+static long use;
-+
-+/*
-+ * ensure only process opens the file, ad set GPIO direction to 0 (OUT)
-+ */
-+static int
-+tornado_vibrator_open(struct inode *inode, struct file *file)
-+{
-+ if (test_and_set_bit(0, &use))
-+ return -EBUSY;
-+
-+
-+ /* out GPIO */
-+ omap_set_gpio_direction(TORNADO_VIBRATOR_GPIO, 0);
-+ return 0;
-+}
-+
-+/*
-+ * device ioctl handler. only VIBRATOR_ENABLE or VIBRATOR_DISABLE are
-+ * recognized.
-+ */
-+static int
-+tornado_vibrator_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ switch (cmd) {
-+ case VIBRATOR_ENABLE:
-+ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 1);
-+ return 0;
-+ case VIBRATOR_DISABLE:
-+ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0);
-+ return 0;
-+ default:
-+ return -EOPNOTSUPP;
-+ }
-+}
-+
-+/*
-+ * set use variable to zero so that the next open on the file
-+ * successes.
-+ */
-+static int
-+tornado_vibrator_release(struct inode *inode, struct file *file)
-+{
-+ use = 0;
-+ return 0;
-+}
-+
-+struct file_operations tornado_vibrator_fops =
-+{
-+ .owner = THIS_MODULE,
-+ .ioctl = tornado_vibrator_ioctl,
-+ .open = tornado_vibrator_open,
-+ .release = tornado_vibrator_release,
-+};
-+
-+struct miscdevice tornado_vibrator_dev =
-+{
-+ .minor = VIBRATOR_MINOR,
-+ .name = "tornado-vibrator",
-+ .fops = &tornado_vibrator_fops,
-+};
-+
-+/*
-+ * make sure we can use the GPIO and register the device.
-+ */
-+static int __init
-+tornado_vibrator_init(void)
-+{
-+ int ret;
-+
-+ if (omap_request_gpio(TORNADO_VIBRATOR_GPIO))
-+ return -EBUSY;
-+
-+ ret = misc_register(&tornado_vibrator_dev);
-+ if (ret)
-+ return ret;
-+
-+ printk("HTC Tornado Vibrator driver.\n");
-+ return 0;
-+}
-+
-+/*
-+ * deregister device and free the GPIO.
-+ */
-+static void __init
-+tornado_vibrator_exit(void)
-+{
-+ misc_deregister(&tornado_vibrator_dev);
-+ omap_set_gpio_dataout(TORNADO_VIBRATOR_GPIO, 0);
-+ omap_free_gpio(TORNADO_VIBRATOR_GPIO);
-+}
-+
-+module_init(tornado_vibrator_init);
-+module_exit(tornado_vibrator_exit);
-+
-+MODULE_AUTHOR("Nicolas Schichan");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.16/drivers/char/tornado-vibrator.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/char/tornado-vibrator.h 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,44 @@
-+/*
-+** tornado-vibrator.h for vibrator in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Mon Apr 10 15:54:33 2006 nico
-+** Last update Thu May 25 13:44:38 2006 nico
-+*/
-+
-+/*
-+ *
-+ * HTC Tornado vibrator driver
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+
-+#ifndef __TORNADO_VIBRATOR
-+# define __TORNADO_VIBRATOR
-+
-+# define VIBRATOR_ENABLE 0x42
-+# define VIBRATOR_DISABLE 0x43
-+
-+# define VIBRATOR_MINOR 240
-+
-+# define TORNADO_VIBRATOR_GPIO 34
-+
-+#endif /* !__TORNADO_VIBRATOR */
-Index: linux-2.6.16/drivers/char/vt.c
-===================================================================
---- linux-2.6.16.orig/drivers/char/vt.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/drivers/char/vt.c 2007-04-12 10:36:19.000000000 +0200
-@@ -2155,6 +2155,8 @@
-
- #ifdef CONFIG_VT_CONSOLE
-
-+extern int in_printk;
-+
- /*
- * Console on virtual terminal
- *
-@@ -2169,6 +2171,7 @@
- const ushort *start;
- ushort cnt = 0;
- ushort myx;
-+ unsigned char old_color = 0;
-
- /* console busy or not yet initialized */
- if (!printable || test_and_set_bit(0, &printing))
-@@ -2196,6 +2199,11 @@
-
- start = (ushort *)vc->vc_pos;
-
-+ if (in_printk) {
-+ old_color = vc->vc_color;
-+ vc->vc_color = 0x2;
-+ update_attr(vc);
-+ }
- /* Contrived structure to try to emulate original need_wrap behaviour
- * Problems caused when we have need_wrap set on '\n' character */
- while (count--) {
-@@ -2242,6 +2250,10 @@
- }
- }
- set_cursor(vc);
-+ if (in_printk) {
-+ vc->vc_color = old_color;
-+ update_attr(vc);
-+ }
-
- quit:
- clear_bit(0, &printing);
-Index: linux-2.6.16/drivers/char/watchdog/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/char/watchdog/Kconfig 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/char/watchdog/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -656,4 +656,10 @@
- Support for TI OMAP1610/OMAP1710/OMAP2420 watchdog. Say 'Y' here to enable the
- OMAP1610/OMAP1710 watchdog timer.
-
-+config OMAP730_WATCHDOG
-+ tristate "OMAP730/OMAP850 Watchdog"
-+ depends on WATCHDOG && ARCH_OMAP730
-+ help
-+ Support for TI OMAP730/OMAP850 Watchdog.
-+
- endmenu
-Index: linux-2.6.16/drivers/char/watchdog/Makefile
-===================================================================
---- linux-2.6.16.orig/drivers/char/watchdog/Makefile 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/char/watchdog/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -28,6 +28,7 @@
- obj-$(CONFIG_IXP2000_WATCHDOG) += ixp2000_wdt.o
- obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o
- obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
-+obj-$(CONFIG_OMAP730_WATCHDOG) += omap730_wdt.o
- obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o
- obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o
- obj-$(CONFIG_MPCORE_WATCHDOG) += mpcore_wdt.o
-Index: linux-2.6.16/drivers/char/watchdog/omap730_wdt.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/char/watchdog/omap730_wdt.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,225 @@
-+/*
-+** omap730_wdt.c for linux-typhoon/tornado in /home/nico/work/spvc500/linux-omap-typhoon
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Thu Mar 16 14:42:35 2006 nico
-+** Last update Thu May 11 13:56:24 2006 nico
-+*/
-+
-+/*
-+ *
-+ * OMAP730 watchdog driver.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+/*
-+ * based on omap_wdt.c.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/config.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/fs.h>
-+#include <linux/mm.h>
-+#include <linux/miscdevice.h>
-+#include <linux/watchdog.h>
-+#include <linux/reboot.h>
-+#include <linux/smp_lock.h>
-+#include <linux/init.h>
-+#include <linux/err.h>
-+
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+#include <asm/hardware.h>
-+#include <asm/bitops.h>
-+/* #include <asm/hardware/clock.h> */
-+
-+#include <linux/moduleparam.h>
-+
-+#include <asm/arch/hardware.h>
-+#include <asm/delay.h>
-+
-+#define WDT_EN 0
-+#define WDT_DISABLE_ON_CLOSE 1
-+
-+static unsigned long omap_wdt_users;
-+static struct miscdevice omap_wdt_miscdev; /* Forward declaration */
-+
-+/*
-+ * TRM says that the same value cannot be used to reinitialize the
-+ * watchdog timer, so alternate 0xFFFF 0xFFFE.
-+ */
-+static void
-+omap730_wdt_ping(void)
-+{
-+ static int mod = 0;
-+
-+ if (mod)
-+ omap_writel(0xFFFF, OMAP_WDT_LOAD_TIM);
-+ else
-+ omap_writel(0xFFFE, OMAP_WDT_LOAD_TIM);
-+
-+ mod = (mod + 1) & 0x1;
-+}
-+
-+static void
-+omap730_wdt_enable(void)
-+{
-+ unsigned long wdt_ctl;
-+ unsigned long arm_idlect2;
-+
-+ omap_writel(0x8000, OMAP_WDT_TIMER_MODE);
-+ wdt_ctl = omap_readl(OMAP_WDT_TIMER);
-+
-+ arm_idlect2 = omap_readl(ARM_IDLECT2);
-+ arm_idlect2 |= 0x1; /* enable watchdog clock */
-+ omap_writel(arm_idlect2, ARM_IDLECT2);
-+
-+}
-+
-+static void
-+omap730_wdt_disable(void)
-+{
-+ unsigned long arm_idlect2;
-+
-+ if ((omap_readl(OMAP_WDT_TIMER_MODE) & 0x8000) == 0x8000) {
-+
-+ arm_idlect2 = omap_readl(ARM_IDLECT2);
-+ arm_idlect2 &= ~0x1; /* disable watchdog clock */
-+ omap_writel(arm_idlect2, ARM_IDLECT2);
-+
-+ /*
-+ * sequence required to disable watchdog. do not try
-+ * to disable watchdog if timer is not active (see
-+ * TRM).
-+ */
-+ omap_writel(0xF5, OMAP_WDT_TIMER_MODE);
-+ omap_writel(0xA0, OMAP_WDT_TIMER_MODE);
-+ }
-+}
-+
-+/*
-+ * Allow only one person to hold it open
-+ */
-+static int
-+omap730_wdt_open(struct inode *inode, struct file *file)
-+{
-+ if (test_and_set_bit(WDT_EN, &omap_wdt_users))
-+ return -EBUSY;
-+
-+ omap730_wdt_enable();
-+ return 0;
-+}
-+
-+static int
-+omap730_wdt_release(struct inode *inode, struct file *file)
-+{
-+ if (omap_wdt_users && test_bit(WDT_DISABLE_ON_CLOSE, &omap_wdt_users)) {
-+ printk("omap730_wdt: disabling watchdog.\n");
-+ omap730_wdt_disable();
-+ } else {
-+ printk(KERN_CRIT "omap730_wdt: Unexpected close: watchdog still active !\n");
-+ }
-+ omap_wdt_users = 0;
-+ return 0;
-+}
-+
-+static ssize_t
-+omap730_wdt_write(struct file *file, const char *data, size_t len, loff_t * ppos)
-+{
-+ if (len) {
-+#ifndef CONFIG_WATCHDOG_NOWAYOUT
-+ size_t i;
-+
-+ for (i = 0; i < len; ++i) {
-+ char c;
-+ if (get_user(c, data + i))
-+ return -EFAULT;
-+ if (c == 'V') {
-+ printk("watchdog will be disabled on close.\n");
-+ set_bit(WDT_DISABLE_ON_CLOSE, (unsigned long*)&omap_wdt_users);
-+ }
-+ }
-+#endif
-+ omap730_wdt_ping();
-+ return 1;
-+ }
-+ return 0;
-+}
-+
-+/*
-+ * KISS: only support KEEPALIVE for now.
-+ */
-+static int
-+omap730_wdt_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ switch (cmd) {
-+ case WDIOC_KEEPALIVE:
-+ omap730_wdt_ping();
-+ return 0;
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+}
-+
-+static struct file_operations omap_wdt_fops = {
-+ .owner = THIS_MODULE,
-+ .write = omap730_wdt_write,
-+ .ioctl = omap730_wdt_ioctl,
-+ .open = omap730_wdt_open,
-+ .release = omap730_wdt_release,
-+};
-+
-+static struct miscdevice omap_wdt_miscdev = {
-+ .minor = WATCHDOG_MINOR,
-+ .name = "omap730_wdt",
-+ .fops = &omap_wdt_fops
-+};
-+
-+static int __init
-+omap730_wdt_init(void)
-+{
-+ int ret;
-+
-+ ret = misc_register(&omap_wdt_miscdev);
-+
-+ if (ret)
-+ return ret;
-+
-+ omap730_wdt_disable();
-+ printk(KERN_INFO "TI OMAP Watchdog Timer for OMAP730\n");
-+
-+ return 0;
-+}
-+
-+static void __exit
-+omap730_wdt_exit(void)
-+{
-+ misc_deregister(&omap_wdt_miscdev);
-+}
-+
-+module_init(omap730_wdt_init);
-+module_exit(omap730_wdt_exit);
-+
-+MODULE_AUTHOR("Nicolas Schichan");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.16/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/input/keyboard/Kconfig 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/input/keyboard/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -193,6 +193,13 @@
- To compile this driver as a module, choose M here: the
- module will be called omap-keypad.
-
-+config TORNADO_KEYPAD
-+ bool "HTC Tornado keypad support"
-+ depends on MACH_TORNADO
-+ help
-+ Say y here if you want to use the keypad of your HTC Tornado
-+ Phone.
-+
- config OMAP_PS2
- tristate "TI OMAP Innovator 1510 PS/2 keyboard & mouse support"
- depends on ARCH_OMAP15XX && MACH_OMAP_INNOVATOR
-Index: linux-2.6.16/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.16.orig/drivers/input/keyboard/Makefile 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/input/keyboard/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -16,4 +16,5 @@
- obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
-+obj-$(CONFIG_TORNADO_KEYPAD) += tornado-keypad.o
- obj-$(CONFIG_OMAP_PS2) += innovator_ps2.o
-Index: linux-2.6.16/drivers/input/keyboard/omap-keypad.c
-===================================================================
---- linux-2.6.16.orig/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/input/keyboard/omap-keypad.c 2007-04-12 10:36:19.000000000 +0200
-@@ -43,7 +43,7 @@
- #include <asm/mach-types.h>
- #include <asm/arch/mux.h>
-
--#undef NEW_BOARD_LEARNING_MODE
-+#define NEW_BOARD_LEARNING_MODE
-
- static void omap_kp_tasklet(unsigned long);
- static void omap_kp_timer(unsigned long);
-@@ -292,6 +292,7 @@
- struct omap_kp_platform_data *pdata = pdev->dev.platform_data;
- int i;
-
-+ printk("omap_kp_probe.\n");
- if (!pdata->rows || !pdata->cols || !pdata->keymap) {
- printk(KERN_ERR "No rows, cols or keymap from pdata\n");
- return -EINVAL;
-Index: linux-2.6.16/drivers/input/keyboard/tornado-keypad.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/input/keyboard/tornado-keypad.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,463 @@
-+/*
-+** wizard-keypad.c for wizard-keypad in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Thu Apr 6 17:27:18 2006 nico
-+** Last update Thu May 25 14:12:34 2006 nico
-+*/
-+
-+/*
-+ * HTC Tornado keypad driver.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+/*
-+ * based on omap-keypad.c
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/interrupt.h>
-+#include <linux/types.h>
-+#include <linux/input.h>
-+
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/io.h>
-+#include <asm/mach-types.h>
-+#include <asm/delay.h>
-+
-+#undef DEBUG
-+// #define DEBUG
-+
-+struct input_dev *tornado_kp_dev = NULL;
-+
-+static unsigned char kp_state[8];
-+static void tornado_kp_tasklet(unsigned long);
-+static void tornado_kp_gpio_tasklet(unsigned long);
-+static DECLARE_TASKLET_DISABLED(kp_tasklet, tornado_kp_tasklet, 0);
-+static DECLARE_TASKLET_DISABLED(kp_gpio_tasklet, tornado_kp_gpio_tasklet, 0);
-+static struct timer_list kp_timer;
-+static struct timer_list kp_gpio_timer;
-+
-+unsigned int gpio_mask = 0;
-+unsigned int kp_gpio = 0;
-+
-+#define TORNADO_KP_GPIO 76
-+
-+/*
-+ * key tables. a bit more complex than those in the omap-keypad
-+ * driver: HTC devices keys events tends to trigger two or more
-+ * row/col.
-+ */
-+struct htc_key
-+{
-+ /*
-+ * input key constant as defined in input.h
-+ */
-+ int key;
-+ /* rc stands for row/col
-+ * 2 * k -> col;
-+ * 2 * k + 1-> row
-+ */
-+ char rc[6];
-+};
-+
-+struct gpio_key
-+{
-+ int key;
-+ unsigned int mask;
-+};
-+
-+static struct htc_key *htc_keys = NULL;
-+static unsigned int htc_keys_size = 0;
-+static struct gpio_key *gpio_keys = 0;
-+static unsigned int gpio_keys_size= 0;
-+
-+
-+/*
-+ * Tornado stuff ...
-+ */
-+static struct htc_key tornado_keys[] =
-+{
-+ /* misc keys below the screen */
-+ { KEY_F3, { 1,3 } }, /* SK1 */
-+ { KEY_BACKSPACE, { 4,3 } },
-+ { KEY_HOME, { 3,3 } },
-+ { KEY_F4, { 2,3 } }, /* SK2 */
-+ { KEY_F5, { 3,5 } }, /* compose */
-+ { KEY_ESC, { 4,5 } }, /* hangup */
-+
-+ /* digit keys */
-+ { KEY_1, { 1,0 } },
-+ { KEY_2, { 2,0 } },
-+ { KEY_3, { 3,0 } },
-+ { KEY_4, { 4,0 } },
-+ { KEY_5, { 1,1 } },
-+ { KEY_6, { 2,1 } },
-+ { KEY_7, { 3,1 } },
-+ { KEY_8, { 4,1 } },
-+ { KEY_9, { 1,2 } },
-+ { KEY_0, { 2,2 } },
-+ { KEY_KPASTERISK, { 3,2 } },
-+ { KEY_SPACE, { 4,2 } },
-+
-+ /* side buttons: currently bogus */
-+/* { KEY_CAMERA, { 5,6, 6,6 } }, */
-+/* { KEY_VOLUMEUP, { 4,6, 5,6 } }, */
-+/* { KEY_VOLUMEDOWN, { 7,6, 6,6 } }, */
-+/* { KEY_FAVORITES, { 2,6, 3,6 } } */
-+
-+ /* add side keys: photo, volume, ...*/
-+
-+};
-+
-+static struct gpio_key tornado_gpio_keys[] =
-+{
-+ { KEY_ENTER, 0x1 },
-+ { KEY_LEFT, 0x19 },
-+ { KEY_RIGHT, 0x7 },
-+ { KEY_UP, 0x15 },
-+ { KEY_DOWN, 0xB },
-+};
-+
-+/*
-+ * handy macros for kp register manipulation
-+ */
-+# define KBD_MASKIT __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBD_MASKIT)
-+# define KBC __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBC)
-+# define KBR_LATCH __REG16((long)OMAP_MPUIO_BASE + OMAP_MPUIO_KBR_LATCH)
-+
-+/*
-+ * return the key code understood by input_report_key
-+ */
-+static int
-+tornado_find_key(unsigned char *new_state, unsigned int *key_state)
-+{
-+ int i;
-+ unsigned char changed;
-+
-+ /* scan normal keypad keys*/
-+ for (i = 0; i < htc_keys_size; ++i) {
-+ struct htc_key *wk = &htc_keys[i];
-+ int j;
-+ int pressed = 0;
-+
-+ for (j = 0; j < 3; ++j) {
-+ int col;
-+ int row;
-+
-+ col = wk->rc[2 * j];
-+ row = wk->rc[2 * j + 1];
-+
-+
-+ /* end of key list reached: OK */
-+ if (row == 0 && col == 0) {
-+ goto ok;
-+ }
-+
-+ changed = new_state[col] ^ kp_state[col];
-+ pressed |= new_state[col] & (1 << row);
-+
-+
-+ /* if state of the row/col has not changed, try another key */
-+ if ( (changed & (1 << row)) == 0) {
-+ break ;
-+ }
-+
-+ if (j == 2) {
-+ ok:
-+ /*
-+ * all events have been scanned for
-+ * this key: we found it !
-+ */
-+ *key_state = pressed;
-+ return wk->key;
-+ }
-+ }
-+ }
-+ return -1;
-+}
-+
-+/*
-+ * read row and col register and update the state array.
-+ */
-+static void
-+tornado_scan_keypad(unsigned char *state)
-+{
-+ unsigned int col;
-+
-+ /* scan MPUIO keypad keys */
-+ KBC = 0xFF;
-+ for (col = 0; col < 8; ++col) {
-+ KBC = ~(1 << col) & 0xFF;
-+ udelay(4);
-+ state[col] = ~(KBR_LATCH) & 0xFF;
-+ }
-+ KBC = 0x00;
-+
-+ udelay(2);
-+}
-+
-+/*
-+ * returns 1 if a key was pressed or 0 if a key was released.
-+ */
-+static int
-+tornado_key_pressed(unsigned char *state)
-+{
-+ unsigned int col;
-+ int key_down = 0;
-+
-+ for (col = 0; col < 8; ++col) {
-+#ifdef DEBUG
-+ unsigned char changed;
-+ unsigned int row;
-+
-+ changed = kp_state[col] ^ state[col];
-+
-+ for (row = 0; row < 8; ++row) {
-+ unsigned int pressed;
-+
-+ pressed = state[col] & (1 << row);
-+ if (changed & (1 << row)) {
-+ printk("key down: %i-%i: %s\n", col, row, pressed ? "pressed" : "released");
-+ }
-+
-+ }
-+#endif
-+ key_down |= state[col];
-+ }
-+
-+ return key_down;
-+}
-+
-+/*
-+ * the real work is done here: at the end, if a key is pressed, keep
-+ * kp interrupt masked and schedule a call to the tasklet after a bit
-+ * (mod_timer ...). this is done to avoid the trigger of too much kp
-+ * interrupts .
-+ */
-+static void
-+tornado_kp_tasklet(unsigned long param)
-+{
-+ unsigned char state[8];
-+ int key_down;
-+ int pressed = 0;
-+ int key;
-+
-+ tornado_scan_keypad(state);
-+ key_down = tornado_key_pressed(state);
-+
-+ key = tornado_find_key(state, &pressed);
-+ if (key != -1) {
-+
-+ input_report_key(tornado_kp_dev, key, pressed);
-+ }
-+
-+ memcpy(kp_state, state, sizeof (kp_state));
-+
-+ if (key_down) {
-+ /*
-+ * if a key is down, poll the keypad and keep irq
-+ * disabled
-+ */
-+ int delay = HZ / 20;
-+
-+ mod_timer(&kp_timer, jiffies + delay);
-+ } else
-+ KBD_MASKIT = 0;
-+}
-+
-+static void
-+tornado_kp_timer(unsigned long data)
-+{
-+ tasklet_schedule(&kp_tasklet);
-+}
-+
-+/*
-+ * nothing is done here: disable KP interrupts and schedule a call to
-+ * tornado_kp_tasklet.
-+ */
-+static irqreturn_t
-+tornado_kp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ /* disable keypad interrupts and schedule the tasklet */
-+ KBD_MASKIT = 1;
-+ tasklet_schedule(&kp_tasklet);
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+tornado_kp_gpio_tasklet(unsigned long param)
-+{
-+ unsigned int mask;
-+ unsigned int changed;
-+ unsigned int pressed;
-+ static int old_key = 0;
-+ int key;
-+ int i;
-+
-+
-+ /* GPIO are active low ! */
-+ mask = !omap_get_gpio_datain(76);
-+ mask |= !omap_get_gpio_datain(80) << 1;
-+ mask |= !omap_get_gpio_datain(81) << 2;
-+ mask |= !omap_get_gpio_datain(82) << 3;
-+ mask |= !omap_get_gpio_datain(83) << 4;
-+
-+ pressed = mask & 0x1;
-+
-+
-+ changed = mask ^ gpio_mask;
-+ if (changed == 0)
-+ goto end;
-+
-+ if (pressed == 0)
-+ key = 0;
-+ else {
-+ key = 0;
-+ for (i = 0; i < 5; ++i) {
-+ if (gpio_keys[i].mask == mask) {
-+ key = gpio_keys[i].key;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (key != old_key) {
-+ if (old_key)
-+ input_report_key(tornado_kp_dev, old_key, 0);
-+ if (key)
-+ input_report_key(tornado_kp_dev, key, 1);
-+ old_key = key;
-+ }
-+
-+ gpio_mask = mask;
-+
-+ end:
-+ if (pressed) {
-+ int delay = HZ / 20;
-+ mod_timer(&kp_gpio_timer, jiffies + delay);
-+ } else {
-+ enable_irq(OMAP_GPIO_IRQ(kp_gpio));
-+ }
-+}
-+
-+static irqreturn_t
-+tornado_kp_gpio_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ disable_irq(OMAP_GPIO_IRQ(kp_gpio));
-+ tasklet_schedule(&kp_gpio_tasklet);
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+tornado_kp_gpio_timer(unsigned long data)
-+{
-+ tasklet_schedule(&kp_gpio_tasklet);
-+}
-+
-+static int __init
-+tornado_kp_init(void)
-+{
-+ unsigned int i;
-+
-+ printk("HTC Tornado Keypad Driver.\n");
-+
-+ KBD_MASKIT = 1;
-+
-+ /* select key tables */
-+ if (machine_is_htc_tornado()) {
-+ htc_keys = tornado_keys;
-+ htc_keys_size = ARRAY_SIZE(tornado_keys);
-+ gpio_keys = tornado_gpio_keys;
-+ gpio_keys_size = ARRAY_SIZE(tornado_gpio_keys);
-+ kp_gpio = TORNADO_KP_GPIO;
-+
-+ printk("Using HTC Tornado keymap.\n");
-+ } else {
-+ printk("machine is unknown: not loading driver.\n");
-+ return -EINVAL;
-+ }
-+
-+ tornado_kp_dev = input_allocate_device();
-+ if (tornado_kp_dev == NULL) {
-+ printk("unable to allocate tornado_kp_dev.\n");
-+ return -ENOMEM;
-+ }
-+ tornado_kp_dev->name = "tornado-keypad";
-+
-+
-+ init_timer(&kp_timer);
-+ kp_timer.function = tornado_kp_timer;
-+ tasklet_enable(&kp_tasklet);
-+ if (request_irq(INT_730_MPUIO_KEYPAD, tornado_kp_interrupt, 0, "tornado-keypad", 0)) {
-+ printk("unable to get IRQ for tornado-keypad.\n");
-+ return -EBUSY;
-+ }
-+
-+ set_bit(EV_KEY, tornado_kp_dev->evbit);
-+ for (i = 0; i < KEY_MAX; ++i) {
-+ set_bit(i, tornado_kp_dev->keybit);
-+ }
-+ input_register_device(tornado_kp_dev);
-+
-+ if (kp_gpio) {
-+ /* request arrow keys GPIOS */
-+ if (omap_request_gpio(kp_gpio) < 0) {
-+ printk("unable to request GPIO %i\n", 76);
-+ return -EBUSY;
-+ }
-+ /* set gpio mode to IN for all kp gpios */
-+ omap_set_gpio_direction(kp_gpio, 1);
-+ omap_set_gpio_direction(80, 1);
-+ omap_set_gpio_direction(81, 1);
-+ omap_set_gpio_direction(82, 1);
-+ omap_set_gpio_direction(83, 1);
-+
-+ init_timer(&kp_gpio_timer);
-+ kp_gpio_timer.function = tornado_kp_gpio_timer;
-+ tasklet_enable(&kp_gpio_tasklet);
-+
-+ /* be notified when keys are pressed */
-+ if (request_irq(OMAP_GPIO_IRQ(kp_gpio), tornado_kp_gpio_interrupt, SA_TRIGGER_FALLING, "tornado-kp-gpio", 0)) {
-+ printk("unable to request GPIO IRQ %i\n", 76);
-+ return -EBUSY;
-+ }
-+ }
-+
-+ tornado_scan_keypad(kp_state);
-+ KBD_MASKIT = 0;
-+ return 0;
-+}
-+
-+void __exit
-+tornado_kp_exit(void)
-+{
-+ KBD_MASKIT = 1;
-+}
-+
-+module_init(tornado_kp_init);
-+module_exit(tornado_kp_exit);
-+
-+MODULE_AUTHOR("Nicolas Schichan <nico@chac.le-poulpe.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("HTC Tornado Keypad Driver");
-Index: linux-2.6.16/drivers/mmc/omap.c
-===================================================================
---- linux-2.6.16.orig/drivers/mmc/omap.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/mmc/omap.c 2007-04-12 10:36:19.000000000 +0200
-@@ -160,10 +160,10 @@
- u32 resptype;
- u32 cmdtype;
-
-- pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s%s%s\n",
-+ pr_debug("MMC%d: CMD%d, argument 0x%08x%s%s\n",
- host->id, cmd->opcode, cmd->arg,
-- (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "",
-- (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "",
-+/* (cmd->flags & MMC_RSP_SHORT) ? ", 32-bit response" : "", */
-+/* (cmd->flags & MMC_RSP_LONG) ? ", 128-bit response" : "", */
- (cmd->flags & MMC_RSP_CRC) ? ", CRC" : "",
- (cmd->flags & MMC_RSP_BUSY) ? ", busy notification" : "");
-
-Index: linux-2.6.16/drivers/mmc/omap.h
-===================================================================
---- linux-2.6.16.orig/drivers/mmc/omap.h 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/mmc/omap.h 2007-04-12 10:36:19.000000000 +0200
-@@ -1,31 +1,66 @@
- #ifndef DRIVERS_MEDIA_MMC_OMAP_H
- #define DRIVERS_MEDIA_MMC_OMAP_H
-
--#define OMAP_MMC_REG_CMD 0x00
--#define OMAP_MMC_REG_ARGL 0x04
--#define OMAP_MMC_REG_ARGH 0x08
--#define OMAP_MMC_REG_CON 0x0c
--#define OMAP_MMC_REG_STAT 0x10
--#define OMAP_MMC_REG_IE 0x14
--#define OMAP_MMC_REG_CTO 0x18
--#define OMAP_MMC_REG_DTO 0x1c
--#define OMAP_MMC_REG_DATA 0x20
--#define OMAP_MMC_REG_BLEN 0x24
--#define OMAP_MMC_REG_NBLK 0x28
--#define OMAP_MMC_REG_BUF 0x2c
--#define OMAP_MMC_REG_SDIO 0x34
--#define OMAP_MMC_REG_REV 0x3c
--#define OMAP_MMC_REG_RSP0 0x40
--#define OMAP_MMC_REG_RSP1 0x44
--#define OMAP_MMC_REG_RSP2 0x48
--#define OMAP_MMC_REG_RSP3 0x4c
--#define OMAP_MMC_REG_RSP4 0x50
--#define OMAP_MMC_REG_RSP5 0x54
--#define OMAP_MMC_REG_RSP6 0x58
--#define OMAP_MMC_REG_RSP7 0x5c
--#define OMAP_MMC_REG_IOSR 0x60
--#define OMAP_MMC_REG_SYSC 0x64
--#define OMAP_MMC_REG_SYSS 0x68
-+#ifdef CONFIG_ARCH_OMAP730
-+/*
-+ * unlike other omap architectures, omap730 has 16bits MMC register
-+ * offsets ...
-+ */
-+# define OMAP_MMC_REG_CMD 0x00
-+# define OMAP_MMC_REG_ARGL 0x02
-+# define OMAP_MMC_REG_ARGH 0x04
-+# define OMAP_MMC_REG_CON 0x06
-+# define OMAP_MMC_REG_STAT 0x08
-+# define OMAP_MMC_REG_IE 0x0a
-+# define OMAP_MMC_REG_CTO 0x0c
-+# define OMAP_MMC_REG_DTO 0x0e
-+# define OMAP_MMC_REG_DATA 0x10
-+# define OMAP_MMC_REG_BLEN 0x12
-+# define OMAP_MMC_REG_NBLK 0x14
-+# define OMAP_MMC_REG_BUF 0x16
-+# define OMAP_MMC_REG_SDIO 0x1a
-+# define OMAP_MMC_REG_REV 0x1e
-+# define OMAP_MMC_REG_RSP0 0x20
-+# define OMAP_MMC_REG_RSP1 0x22
-+# define OMAP_MMC_REG_RSP2 0x24
-+# define OMAP_MMC_REG_RSP3 0x26
-+# define OMAP_MMC_REG_RSP4 0x28
-+# define OMAP_MMC_REG_RSP5 0x2a
-+# define OMAP_MMC_REG_RSP6 0x2c
-+# define OMAP_MMC_REG_RSP7 0x2e
-+# define OMAP_MMC_REG_IOSR 0x30
-+# define OMAP_MMC_REG_SYSC 0x32
-+# define OMAP_MMC_REG_SYSS 0x34
-+
-+#else
-+
-+# define OMAP_MMC_REG_CMD 0x00
-+# define OMAP_MMC_REG_ARGL 0x04
-+# define OMAP_MMC_REG_ARGH 0x08
-+# define OMAP_MMC_REG_CON 0x0c
-+# define OMAP_MMC_REG_STAT 0x10
-+# define OMAP_MMC_REG_IE 0x14
-+# define OMAP_MMC_REG_CTO 0x18
-+# define OMAP_MMC_REG_DTO 0x1c
-+# define OMAP_MMC_REG_DATA 0x20
-+# define OMAP_MMC_REG_BLEN 0x24
-+# define OMAP_MMC_REG_NBLK 0x28
-+# define OMAP_MMC_REG_BUF 0x2c
-+# define OMAP_MMC_REG_SDIO 0x34
-+# define OMAP_MMC_REG_REV 0x3c
-+# define OMAP_MMC_REG_RSP0 0x40
-+# define OMAP_MMC_REG_RSP1 0x44
-+# define OMAP_MMC_REG_RSP2 0x48
-+# define OMAP_MMC_REG_RSP3 0x4c
-+# define OMAP_MMC_REG_RSP4 0x50
-+# define OMAP_MMC_REG_RSP5 0x54
-+# define OMAP_MMC_REG_RSP6 0x58
-+# define OMAP_MMC_REG_RSP7 0x5c
-+# define OMAP_MMC_REG_IOSR 0x60
-+# define OMAP_MMC_REG_SYSC 0x64
-+# define OMAP_MMC_REG_SYSS 0x68
-+
-+#endif
-
- #define OMAP_MMC_STAT_CARD_ERR (1 << 14)
- #define OMAP_MMC_STAT_CARD_IRQ (1 << 13)
-Index: linux-2.6.16/drivers/usb/gadget/omap_udc.c
-===================================================================
---- linux-2.6.16.orig/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/usb/gadget/omap_udc.c 2007-04-12 10:36:19.000000000 +0200
-@@ -60,7 +60,7 @@
- #undef USB_TRACE
-
- /* bulk DMA seems to be behaving for both IN and OUT */
--#define USE_DMA
-+/* #define USE_DMA */
-
- /* ISO too */
- #define USE_ISO
-@@ -2147,7 +2147,8 @@
- /* boards that don't have VBUS sensing can't autogate 48MHz;
- * can't enter deep sleep while a gadget driver is active.
- */
-- if (machine_is_omap_innovator() || machine_is_omap_osk())
-+ if (machine_is_omap_innovator() || machine_is_omap_osk() ||
-+ machine_is_htc_tornado())
- omap_vbus_session(&udc->gadget, 1);
-
- done:
-@@ -2170,7 +2171,8 @@
- if (udc->dc_clk != NULL)
- omap_udc_enable_clock(1);
-
-- if (machine_is_omap_innovator() || machine_is_omap_osk())
-+ if (machine_is_omap_innovator() || machine_is_omap_osk() ||
-+ machine_is_htc_tornado())
- omap_vbus_session(&udc->gadget, 0);
-
- if (udc->transceiver)
-Index: linux-2.6.16/drivers/video/backlight/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/video/backlight/Kconfig 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/drivers/video/backlight/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -58,3 +58,10 @@
- If you have a HP Jornada 680, say y to enable the
- backlight driver.
-
-+
-+config BACKLIGHT_TORNADO
-+ tristate "HTC Tornado Backlight Driver."
-+ depends on BACKLIGHT_DEVICE && MACH_TORNADO
-+ default y
-+ help
-+ Backlight driver for the HTC Tornado smartphones.
-Index: linux-2.6.16/drivers/video/backlight/Makefile
-===================================================================
---- linux-2.6.16.orig/drivers/video/backlight/Makefile 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/drivers/video/backlight/Makefile 2007-04-12 10:36:19.000000000 +0200
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
- obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
- obj-$(CONFIG_SHARP_LOCOMO) += locomolcd.o
-+obj-$(CONFIG_BACKLIGHT_TORNADO) += tornado-bl.o
-\ No newline at end of file
-Index: linux-2.6.16/drivers/video/backlight/tornado-bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/video/backlight/tornado-bl.c 2007-04-12 10:36:19.000000000 +0200
-@@ -0,0 +1,224 @@
-+/*
-+** tornado-bl.c for bl in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Wed Apr 12 16:53:40 2006 nico
-+** Last update Thu May 25 13:53:14 2006 nico
-+*/
-+
-+/*
-+ *
-+ * HTC Tornado & Typhoon backlight driver.
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/spinlock.h>
-+#include <linux/fb.h>
-+#include <linux/backlight.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/arch/gpio.h>
-+#include <linux/delay.h>
-+
-+#define TORNADO_LCD_RESET_GPIO 15
-+#define TORNADO_LCD_OUT_EN_GPIO 77
-+#define TORNADO_LCD_POWER_GPIO 121
-+#define TORNADO_BL_GPIO 126
-+#define TORNADO_LCD_INTENSITY_GPIO 124
-+#define TORNADO_LCD_CLOCK_GPIO 127
-+
-+static int tornado_bl_powermode = FB_BLANK_UNBLANK;
-+static int current_intensity = 1;
-+
-+
-+/*
-+ * TODO: see TRM to disable also the internal lcd clock and reenable
-+ * it when needed.
-+ */
-+static int
-+tornado_bl_set_power(struct backlight_device *bd, int state)
-+{
-+ if (state == tornado_bl_powermode)
-+ return 0;
-+ switch (state) {
-+ case FB_BLANK_NORMAL:
-+ case FB_BLANK_VSYNC_SUSPEND:
-+ case FB_BLANK_HSYNC_SUSPEND:
-+ case FB_BLANK_POWERDOWN:
-+ omap_set_gpio_dataout(TORNADO_BL_GPIO, 0);
-+ omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 0);
-+ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, 0);
-+
-+ omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 0);
-+ omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 0);
-+ omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 0);
-+ break;
-+
-+ case FB_BLANK_UNBLANK:
-+ omap_set_gpio_dataout(TORNADO_LCD_POWER_GPIO, 1);
-+ omap_set_gpio_dataout(TORNADO_LCD_RESET_GPIO, 1);
-+ omap_set_gpio_dataout(TORNADO_LCD_OUT_EN_GPIO, 1);
-+
-+ omap_set_gpio_dataout(TORNADO_LCD_CLOCK_GPIO, 1);
-+ /* restore previous lcd intensity */
-+ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, current_intensity);
-+ /*
-+ * need to sleep a little bit to allow lcd clock to
-+ * resume completly. avoids a white flickering screen
-+ * that would otherwise be visible for a few
-+ * milliseconds.
-+ *
-+ * we use schedule timoueout here to allow any process
-+ * that might want to use the CPU to run. this should
-+ * not be a problem here.
-+ */
-+ schedule_timeout_interruptible(10);
-+ omap_set_gpio_dataout(TORNADO_BL_GPIO, 1);
-+ break;
-+ }
-+ tornado_bl_powermode = state;
-+ return 0;
-+}
-+
-+static int
-+tornado_bl_get_power(struct backlight_device *bd)
-+{
-+ return tornado_bl_powermode;
-+}
-+
-+static int
-+tornado_bl_get_intensity(struct backlight_device *bd)
-+{
-+ return current_intensity;
-+}
-+
-+static int
-+tornado_bl_set_intensity(struct backlight_device *bd, int intensity)
-+{
-+ if (intensity < 0)
-+ intensity = 0;
-+ if (intensity > 1)
-+ intensity = 1;
-+ omap_set_gpio_dataout(TORNADO_LCD_INTENSITY_GPIO, intensity);
-+ current_intensity = intensity;
-+
-+ return 0;
-+}
-+
-+static struct backlight_properties tornado_bl = {
-+ .owner = THIS_MODULE,
-+ .get_power = tornado_bl_get_power,
-+ .max_brightness = 1,
-+ .set_power = tornado_bl_set_power,
-+ .set_brightness = tornado_bl_set_intensity,
-+ .get_brightness = tornado_bl_get_intensity,
-+};
-+
-+static struct backlight_device *tornado_backlight_device;
-+
-+static int __init
-+tornado_bl_probe(struct device *dev)
-+{
-+ tornado_backlight_device = backlight_device_register("tornado-bl", NULL, &tornado_bl);
-+ if (IS_ERR(tornado_backlight_device))
-+ return PTR_ERR(tornado_backlight_device);
-+ return 0;
-+}
-+
-+static int __init
-+tornado_bl_remove(struct device *dev)
-+{
-+ printk("deregistering tornado-bl device.\n");
-+ backlight_device_unregister(tornado_backlight_device);
-+ return 0;
-+}
-+
-+static struct device_driver tornado_bl_driver = {
-+ .name = "tornado-bl",
-+ .bus = &platform_bus_type,
-+ .probe = tornado_bl_probe,
-+ .remove = tornado_bl_remove,
-+ .suspend = NULL,
-+ .resume = NULL,
-+};
-+
-+static struct platform_device tornado_bl_device = {
-+ .name = "tornado-bl",
-+ .id = -1,
-+};
-+
-+
-+static int __init
-+tornado_bl_init(void)
-+{
-+ int ret;
-+
-+ omap_request_gpio(TORNADO_LCD_RESET_GPIO);
-+ omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO);
-+ omap_request_gpio(TORNADO_LCD_POWER_GPIO);
-+ omap_request_gpio(TORNADO_BL_GPIO);
-+ omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO);
-+ omap_request_gpio(TORNADO_LCD_CLOCK_GPIO);
-+
-+ ret = driver_register(&tornado_bl_driver);
-+ if (ret)
-+ goto error;
-+
-+ ret = platform_device_register(&tornado_bl_device);
-+ if (ret)
-+ goto error;
-+
-+ omap_set_gpio_direction(TORNADO_BL_GPIO, 0); /* out */
-+ printk("HTC Tornado Backlight driver.\n");
-+ return 0;
-+
-+ error:
-+ platform_device_unregister(&tornado_bl_device);
-+ driver_unregister(&tornado_bl_driver);
-+ omap_free_gpio(TORNADO_BL_GPIO);
-+ return ret;
-+}
-+
-+static void __exit
-+tornado_bl_exit(void)
-+{
-+ /* FIXME: this freezes the system when unloading ... */
-+ platform_device_unregister(&tornado_bl_device);
-+ driver_unregister(&tornado_bl_driver);
-+ omap_request_gpio(TORNADO_LCD_RESET_GPIO);
-+ omap_request_gpio(TORNADO_LCD_OUT_EN_GPIO);
-+ omap_request_gpio(TORNADO_LCD_POWER_GPIO);
-+ omap_request_gpio(TORNADO_BL_GPIO);
-+ omap_request_gpio(TORNADO_LCD_INTENSITY_GPIO);
-+ omap_request_gpio(TORNADO_LCD_CLOCK_GPIO);
-+}
-+
-+module_init(tornado_bl_init);
-+module_exit(tornado_bl_exit);
-+
-+MODULE_AUTHOR("Nicolas Schichan");
-+MODULE_DESCRIPTION("HTC Tornado LCD Backlight driver.");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.16/drivers/video/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/video/Kconfig 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/video/Kconfig 2007-04-12 10:36:19.000000000 +0200
-@@ -1428,6 +1428,16 @@
-
- source "drivers/video/omap/Kconfig"
-
-+config FB_VSFB
-+ bool "VSFB for HTC OMAP based phones"
-+ depends on FB && MACH_TORNADO
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ Hacked version of the original VSFB for HTC based OMAP
-+ smartphones (320x240 screen and vram at 0x20001020).
-+
- config FB_VIRTUAL
- tristate "Virtual Frame Buffer support (ONLY FOR TESTING!)"
- depends on FB
-Index: linux-2.6.16/drivers/video/logo/Kconfig
-===================================================================
---- linux-2.6.16.orig/drivers/video/logo/Kconfig 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/drivers/video/logo/Kconfig 2007-04-12 10:36:20.000000000 +0200
-@@ -71,4 +71,3 @@
- default y
-
- endmenu
--
-Index: linux-2.6.16/drivers/video/logo/logo.c
-===================================================================
---- linux-2.6.16.orig/drivers/video/logo/logo.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/drivers/video/logo/logo.c 2007-04-12 10:36:20.000000000 +0200
-@@ -35,7 +35,6 @@
- extern const struct linux_logo logo_superh_clut224;
- extern const struct linux_logo logo_m32r_clut224;
-
--
- const struct linux_logo *fb_find_logo(int depth)
- {
- const struct linux_logo *logo = NULL;
-@@ -102,6 +101,7 @@
- /* M32R Linux logo */
- logo = &logo_m32r_clut224;
- #endif
-+
- }
- return logo;
- }
-Index: linux-2.6.16/drivers/video/Makefile
-===================================================================
---- linux-2.6.16.orig/drivers/video/Makefile 2007-04-12 10:36:07.000000000 +0200
-+++ linux-2.6.16/drivers/video/Makefile 2007-04-12 10:36:20.000000000 +0200
-@@ -100,6 +100,7 @@
- obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
- obj-$(CONFIG_FB_OF) += offb.o
- obj-$(CONFIG_FB_OMAP) += omap/ cfbcopyarea.o cfbfillrect.o cfbimgblt.o
-+obj-$(CONFIG_FB_VSFB) += vsfb.o
-
- # the test framebuffer is last
- obj-$(CONFIG_FB_VIRTUAL) += vfb.o
-Index: linux-2.6.16/drivers/video/vsfb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/drivers/video/vsfb.c 2007-04-12 10:36:20.000000000 +0200
-@@ -0,0 +1,187 @@
-+/*
-+ * linux/drivers/video/vsfb.c
-+ *
-+ * Copyright (C) 2003 Ian Molton
-+ *
-+ * Based on acornfb by Russell King
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Frame buffer code for Simple platforms
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/ctype.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/slab.h>
-+#include <linux/init.h>
-+#include <linux/fb.h>
-+#include <linux/ioport.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/mach-types.h>
-+#include <asm/uaccess.h>
-+
-+#include <linux/config.h>
-+
-+#undef FBCON_HAS_CFB8
-+#undef FBCON_HAS_CFB2
-+#undef FBCON_HAS_CFB4
-+#undef FBCON_HAS_CFB32
-+
-+/* for screen geometry information */
-+#include <asm/arch/efb.h>
-+
-+#define DEFAULT_BPP 16
-+#define SCREEN_BASE (0x20001020)
-+
-+static struct fb_info fb_info;
-+static u32 colreg[17]; // Copied from other driver - but is 17 correct?
-+
-+
-+static int
-+vsfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
-+ u_int trans, struct fb_info *info)
-+{
-+ if (regno > 16)
-+ return 1;
-+
-+ ((u32 *)(info->pseudo_palette))[regno] = (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
-+
-+ return 0;
-+}
-+
-+/* extern int soft_cursor(struct fb_info *info, struct fb_cursor *cursor); */
-+
-+static struct fb_ops vsfb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_setcolreg = vsfb_setcolreg,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_cursor = NULL,
-+};
-+
-+/*
-+ * some members are initialized with 0: they will be properly
-+ * initialized at run time, depending on the machine we are running
-+ * on.
-+ */
-+static struct fb_var_screeninfo vsfb_var = {
-+ .xres = 0,
-+ .yres = 0,
-+ .xres_virtual = 0,
-+ .yres_virtual = 0,
-+ .bits_per_pixel = 16,
-+ .red = { 11, 5, 0 },
-+ .green = { 5, 6, 0 },
-+ .blue = { 0, 5, 0 },
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = -1,
-+ .width = -1,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ .pixclock = 12500, /* same as pixclock as P2 frame buffer driver. */
-+};
-+
-+static struct fb_fix_screeninfo vsfb_fix = {
-+ .id = "HTC VSFB",
-+ .smem_start = SCREEN_BASE,
-+ .smem_len = 0,
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .visual = FB_VISUAL_TRUECOLOR,
-+ .line_length = 0,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+#define OMAP_LCDC_BASE 0xfffec000
-+#define OMAP_LCDC_CONTROL (OMAP_LCDC_BASE + 0x00)
-+#define OMAP_LCDC_STATUS (OMAP_LCDC_BASE + 0x10)
-+#define OMAP_DMA_LCD_BASE 0xfffee300
-+#define OMAP_DMA_LCD_CCR (OMAP_DMA_LCD_BASE + 0xc2)
-+#define OMAP_DMA_LCD_CTRL (OMAP_DMA_LCD_BASE + 0xc4)
-+
-+int __init
-+vsfb_init(void)
-+{
-+
-+ printk("VSFB Frame buffer driver for HTC OMAP Based Phones.\n");
-+
-+ fb_info.fix = vsfb_fix;
-+ fb_info.var = vsfb_var;
-+
-+ fb_info.fbops = &vsfb_ops;
-+ fb_info.flags = FBINFO_FLAG_DEFAULT;
-+ fb_info.pseudo_palette = colreg;
-+ fb_alloc_cmap(&fb_info.cmap, 16, 0);
-+
-+ if (machine_is_typhoon()) {
-+ fb_info.var.xres = 176;
-+ fb_info.var.yres = 220;
-+ } else {
-+ fb_info.var.xres = 240;
-+ fb_info.var.yres = 320;
-+ }
-+
-+ fb_info.var.xres_virtual = fb_info.var.xres;
-+ fb_info.var.yres_virtual = fb_info.var.yres;
-+ fb_info.fix.line_length = fb_info.var.xres * 2;
-+ fb_info.fix.smem_len = fb_info.var.xres * fb_info.var.yres * 2;
-+
-+#ifdef CONFIG_EFB_DEBUG
-+ /*
-+ * disable efb so that only one acces the frame buffer
-+ */
-+ efb_disable();
-+#endif
-+
-+
-+ /* Try to grab our phys memory space... */
-+ if (!(request_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len, "HTC vsfb"))){
-+#ifdef CONFIG_EFB_DEBUG
-+ efb_enable();
-+#endif
-+ printk("unable to request addr %p (len %i) for HTC VSFB.\n", fb_info.fix.smem_start, fb_info.fix.smem_len);
-+ return -ENOMEM;
-+ }
-+
-+ /* Try to map this so we can access it */
-+ fb_info.screen_base = ioremap(fb_info.fix.smem_start, fb_info.fix.smem_len);
-+ if (!fb_info.screen_base) {
-+#ifdef CONFIG_EFB_DEBUG
-+ efb_enable();
-+#endif
-+ printk("unable to ioremap %p for HTC vsfb.\n", fb_info.fix.smem_start);
-+ release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len);
-+ return -EIO;
-+ }
-+
-+ printk(KERN_INFO "vsfb: framebuffer at 0x%lx, mapped to 0x%p, size %dk\n",
-+ fb_info.fix.smem_start, fb_info.screen_base, fb_info.fix.smem_len/1024);
-+
-+ if (register_framebuffer(&fb_info) < 0){
-+#ifdef CONFIG_EFB_DEBUG
-+ efb_enable();
-+#endif
-+ iounmap(fb_info.screen_base);
-+ release_mem_region(fb_info.fix.smem_start, fb_info.fix.smem_len);
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+module_init(vsfb_init);
-+MODULE_AUTHOR("Nicolas Schichan (based on VSFB by Ian Molton (based on acornfb by RMK and parts of anakinfb))");
-+MODULE_DESCRIPTION("HTC Very Simple framebuffer driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.16/include/asm-arm/arch-omap/efb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/include/asm-arm/arch-omap/efb.h 2007-04-12 10:36:20.000000000 +0200
-@@ -0,0 +1,56 @@
-+/*
-+** efb.h for efb in /home/nico/work/tornado/linux-tornado
-+**
-+** Made by nico
-+** Login <nico@chac.le-poulpe.net>
-+**
-+** Started on Wed Apr 5 18:58:04 2006 nico
-+** Last update Thu May 11 13:58:28 2006 nico
-+*/
-+
-+/*
-+ *
-+ *
-+ * Copyright (C) 2006 Nicolas Schichan
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License as
-+ * published by the Free Software Foundation; either version 2 of the
-+ * License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful, but
-+ * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+ * 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef _EFB_H
-+# define _EFB_H
-+
-+# include <linux/init.h>
-+
-+/*
-+ * TODO: add __init and __initdata where applicable.
-+ */
-+
-+void efb_init(void);
-+void efb_putstr(const char *str);
-+
-+void efb_disable(void);
-+void efb_enable(void);
-+
-+/* #define EFB_WIDTH 240 */
-+/* #define EFB_HEIGHT 320 */
-+
-+extern const char efb_font[255][25];
-+
-+extern unsigned int efb_width;
-+extern unsigned int efb_height;
-+
-+#endif /* !_EFB_H */
-Index: linux-2.6.16/include/asm-arm/arch-omap/omap730.h
-===================================================================
---- linux-2.6.16.orig/include/asm-arm/arch-omap/omap730.h 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/include/asm-arm/arch-omap/omap730.h 2007-04-12 10:36:20.000000000 +0200
-@@ -99,4 +99,3 @@
- #define OMAP730_PCC_UPLD_CTRL (OMAP730_PCC_UPLD_CTRL_BASE + 0x00)
-
- #endif /* __ASM_ARCH_OMAP730_H */
--
-Index: linux-2.6.16/include/asm-arm/kexec.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.16/include/asm-arm/kexec.h 2007-04-12 10:36:20.000000000 +0200
-@@ -0,0 +1,33 @@
-+#ifndef _ARM_KEXEC_H
-+#define _ARM_KEXEC_H
-+
-+#ifdef CONFIG_KEXEC
-+
-+/* Maximum physical address we can use pages from */
-+#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
-+/* Maximum address we can reach in physical address mode */
-+#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
-+/* Maximum address we can use for the control code buffer */
-+#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
-+
-+#define KEXEC_CONTROL_CODE_SIZE 4096
-+
-+#define KEXEC_ARCH KEXEC_ARCH_ARM
-+
-+#ifndef __ASSEMBLY__
-+
-+#define MAX_NOTE_BYTES 1024
-+
-+struct kimage;
-+
-+static inline void crash_setup_regs(struct pt_regs *newregs,
-+ struct pt_regs *oldregs)
-+{
-+ /* Dummy implementation for now */
-+}
-+
-+#endif /* __ASSEMBLY__ */
-+
-+#endif /* CONFIG_KEXEC */
-+
-+#endif /* _ARM_KEXEC_H */
-Index: linux-2.6.16/include/asm-arm/unistd.h
-===================================================================
---- linux-2.6.16.orig/include/asm-arm/unistd.h 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/include/asm-arm/unistd.h 2007-04-12 10:36:20.000000000 +0200
-@@ -216,7 +216,7 @@
- #define __NR_sigaltstack (__NR_SYSCALL_BASE+186)
- #define __NR_sendfile (__NR_SYSCALL_BASE+187)
- /* 188 reserved */
-- /* 189 reserved */
-+#define __NR_sys_kexec_load (__NR_SYSCALL_BASE+189) /* 189 was reserved, temporarily use it for sys_kexec_load */
- #define __NR_vfork (__NR_SYSCALL_BASE+190)
- #define __NR_ugetrlimit (__NR_SYSCALL_BASE+191) /* SuS compliant getrlimit */
- #define __NR_mmap2 (__NR_SYSCALL_BASE+192)
-Index: linux-2.6.16/include/linux/kexec.h
-===================================================================
---- linux-2.6.16.orig/include/linux/kexec.h 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/include/linux/kexec.h 2007-04-12 10:36:20.000000000 +0200
-@@ -119,6 +119,7 @@
- #define KEXEC_ARCH_PPC (20 << 16)
- #define KEXEC_ARCH_PPC64 (21 << 16)
- #define KEXEC_ARCH_IA_64 (50 << 16)
-+#define KEXEC_ARCH_ARM (40 << 16)
- #define KEXEC_ARCH_S390 (22 << 16)
- #define KEXEC_ARCH_SH (42 << 16)
-
-Index: linux-2.6.16/init/main.c
-===================================================================
---- linux-2.6.16.orig/init/main.c 2006-03-20 06:53:29.000000000 +0100
-+++ linux-2.6.16/init/main.c 2007-04-12 10:36:20.000000000 +0200
-@@ -58,6 +58,10 @@
- #include <asm/smp.h>
- #endif
-
-+#ifdef CONFIG_EFB_DEBUG
-+#include <asm/arch/efb.h>
-+#endif
-+
- /*
- * This is one of the first .c files built. Error out early if we have compiler
- * trouble.
-@@ -442,6 +446,12 @@
- {
- char * command_line;
- extern struct kernel_param __start___param[], __stop___param[];
-+
-+#ifdef CONFIG_EFB_DEBUG
-+ efb_init();
-+ efb_putstr("Rock'n Roll !\n");
-+#endif
-+
- /*
- * Interrupts are still disabled. Do necessary setups, then
- * enable them
-Index: linux-2.6.16/kernel/printk.c
-===================================================================
---- linux-2.6.16.orig/kernel/printk.c 2007-04-12 10:36:08.000000000 +0200
-+++ linux-2.6.16/kernel/printk.c 2007-04-12 10:36:20.000000000 +0200
-@@ -34,12 +34,16 @@
-
- #include <asm/uaccess.h>
-
-+#include <asm/arch/efb.h>
-+
- #define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
-
--#ifdef CONFIG_DEBUG_LL
--extern void printascii(char *);
-+#ifdef CONFIG_EFB_DEBUG
-+#include <asm/arch/efb.h>
- #endif
-
-+int in_printk;
-+
- /* printk's without a loglevel use this.. */
- #define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
-
-@@ -367,10 +371,12 @@
- {
- struct console *con;
-
-+ in_printk = 1;
- for (con = console_drivers; con; con = con->next) {
- if ((con->flags & CON_ENABLED) && con->write)
- con->write(con, &LOG_BUF(start), end - start);
- }
-+ in_printk = 0;
- }
-
- /*
-@@ -551,8 +557,8 @@
- /* Emit the output into the temporary buffer */
- printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args);
-
--#ifdef CONFIG_DEBUG_LL
-- printascii(printk_buf);
-+#ifdef CONFIG_EFB_DEBUG
-+ efb_putstr(printk_buf);
- #endif
-
- /*