r2372 - in trunk/kernel/hppa: . kernel-image-2.6.10-hppa-2.6.10 kernel-image-2.6.10-hppa-2.6.10/bin kernel-image-2.6.10-hppa-2.6.10/config kernel-image-2.6.10-hppa-2.6.10/debian kernel-patch-2.6.10-hppa-2.6.10 kernel-patch-2.6.10-hppa-2.6.10/debian

Kyle McMartin kyle at costa.debian.org
Fri Oct 19 10:58:28 UTC 2007


Author: kyle
Date: 2005-01-23 18:16:41 +0100 (Sun, 23 Jan 2005)
New Revision: 2372

Added:
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/touch
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32-smp
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64-smp
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/default
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/README.Debian
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/changelog
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/control
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/copyright
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/rules
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/header-install
   trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/post-install
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/README.Debian
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/changelog
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/control
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/copyright
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/kpatches.arch
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/rules
   trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/hppa_2.6.10.diff
Log:
Commit UNRELEASED 2.6.10 for hppa.


Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/touch
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/touch	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/touch	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+set -e
+
+if [ -z "${1##-*}" ] && [ "$1" != -- ]; then
+	exec touch.orig "$@"
+fi
+
+trap 'rm -f $TMP' EXIT
+TMP=$(tempfile)
+
+# Create the files if they don't exist.
+touch.orig -a "$@"
+
+tar -P --remove-files -cf $TMP "$@"
+tar xfP $TMP
+rm -f $TMP
+exec touch.orig "$@"


Property changes on: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/bin/touch
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,1595 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.10
+# Fri Jan 21 03:13:53 2005
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+
+#
+# Processor type and features
+#
+CONFIG_PA7000=y
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+# CONFIG_PA8X00 is not set
+CONFIG_PA11=y
+# CONFIG_64BIT is not set
+# CONFIG_SMP is not set
+CONFIG_DISCONTIGMEM=y
+# CONFIG_PREEMPT is not set
+# CONFIG_HPUX is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+CONFIG_HPPB=y
+CONFIG_IOMMU_CCIO=y
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+CONFIG_PCI_LBA=y
+CONFIG_IOSAPIC=y
+CONFIG_IOMMU_SBA=y
+CONFIG_SUPERIO=y
+CONFIG_CHASSIS_LCD_LED=y
+CONFIG_PDC_CHASSIS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA_OBSOLETE is not set
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_PC_CML1=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_GSC=m
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+# CONFIG_PDC202XX_FORCE is not set
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+CONFIG_SCSI_INITIO=m
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=m
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_ZALON=m
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID5=m
+CONFIG_MD_RAID6=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+CONFIG_I2O=m
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_TUNNEL=m
+CONFIG_IP_TCPDIAG=m
+CONFIG_IP_TCPDIAG_IPV6=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_PHYSDEV=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# 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=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_ETHERTAP=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_LASI_82596=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_ULTRA32=m
+CONFIG_SMC9194=m
+CONFIG_NET_VENDOR_RACAL=y
+# CONFIG_NI5010 is not set
+CONFIG_NI52=m
+# CONFIG_NI65 is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+# CONFIG_PCMCIA_XIRTULIP is not set
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+# CONFIG_EEPRO100_PIO is not set
+CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
+CONFIG_LNE390=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+CONFIG_HP_SDC=m
+CONFIG_HIL_MLC=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
+# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_HIL_OLD=m
+CONFIG_KEYBOARD_HIL=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_HIL=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+CONFIG_HP_SDC_RTC=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_DUMMY=m
+# 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
+
+#
+# ISA devices
+#
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VX222 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_VXP440=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# GSC devices
+#
+# CONFIG_SND_HARMONY is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+CONFIG_SOUND_HARMONY=m
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+CONFIG_SOUND_AD1889=m
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMFPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_RW_DETECT=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ASFS_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=y
+CONFIG_VXFS_FS=m
+# 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_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# 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=m
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SECLVL=m
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32-smp
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32-smp	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/32-smp	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,1597 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.10-1-32-smp
+# Fri Jan 21 03:12:35 2005
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_LOCK_KERNEL=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Processor type and features
+#
+CONFIG_PA7000=y
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+# CONFIG_PA8X00 is not set
+CONFIG_PA11=y
+# CONFIG_64BIT is not set
+CONFIG_SMP=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_DISCONTIGMEM=y
+# CONFIG_PREEMPT is not set
+# CONFIG_HPUX is not set
+CONFIG_NR_CPUS=32
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+CONFIG_HPPB=y
+CONFIG_IOMMU_CCIO=y
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+CONFIG_PCI_LBA=y
+CONFIG_IOSAPIC=y
+CONFIG_IOMMU_SBA=y
+CONFIG_SUPERIO=y
+CONFIG_CHASSIS_LCD_LED=y
+CONFIG_PDC_CHASSIS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA_OBSOLETE is not set
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_PC_CML1=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_GSC=m
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+# CONFIG_PDC202XX_FORCE is not set
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+CONFIG_SCSI_INITIO=m
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=m
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_ZALON=m
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID5=m
+CONFIG_MD_RAID6=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+CONFIG_I2O=m
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_TUNNEL=m
+CONFIG_IP_TCPDIAG=m
+CONFIG_IP_TCPDIAG_IPV6=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_PHYSDEV=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# 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=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_ETHERTAP=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_LASI_82596=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_ULTRA32=m
+CONFIG_SMC9194=m
+CONFIG_NET_VENDOR_RACAL=y
+CONFIG_NI52=m
+# CONFIG_NI65 is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+# CONFIG_EEPRO100_PIO is not set
+CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
+CONFIG_LNE390=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+CONFIG_HP_SDC=m
+CONFIG_HIL_MLC=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
+# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_HIL_OLD=m
+CONFIG_KEYBOARD_HIL=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_HIL=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+CONFIG_HP_SDC_RTC=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_DUMMY=m
+# 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
+
+#
+# ISA devices
+#
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VX222 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_VXP440=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# GSC devices
+#
+# CONFIG_SND_HARMONY is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+CONFIG_SOUND_HARMONY=m
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+CONFIG_SOUND_AD1889=m
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMFPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_RW_DETECT=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ASFS_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=y
+CONFIG_VXFS_FS=m
+# 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_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# 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=m
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_RWLOCK is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SECLVL=m
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,1590 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.10
+# Fri Jan 21 03:14:17 2005
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+
+#
+# Processor type and features
+#
+# CONFIG_PA7000 is not set
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+CONFIG_PA8X00=y
+CONFIG_PA20=y
+CONFIG_PREFETCH=y
+CONFIG_PARISC64=y
+CONFIG_64BIT=y
+# CONFIG_SMP is not set
+CONFIG_DISCONTIGMEM=y
+# CONFIG_PREEMPT is not set
+CONFIG_COMPAT=y
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+CONFIG_HPPB=y
+CONFIG_IOMMU_CCIO=y
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+CONFIG_PCI_LBA=y
+CONFIG_IOSAPIC=y
+CONFIG_IOMMU_SBA=y
+CONFIG_SUPERIO=y
+CONFIG_CHASSIS_LCD_LED=y
+CONFIG_PDC_CHASSIS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA_OBSOLETE is not set
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_PC_CML1=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_GSC=m
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+# CONFIG_PDC202XX_FORCE is not set
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+CONFIG_SCSI_INITIO=m
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=m
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_ZALON=m
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID5=m
+CONFIG_MD_RAID6=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+CONFIG_I2O=m
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_TUNNEL=m
+CONFIG_IP_TCPDIAG=m
+CONFIG_IP_TCPDIAG_IPV6=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_PHYSDEV=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# 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=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_ETHERTAP=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_LASI_82596=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_ULTRA32=m
+CONFIG_SMC9194=m
+CONFIG_NET_VENDOR_RACAL=y
+# CONFIG_NI5010 is not set
+CONFIG_NI52=m
+# CONFIG_NI65 is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+# CONFIG_PCMCIA_XIRTULIP is not set
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+# CONFIG_EEPRO100_PIO is not set
+CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
+CONFIG_LNE390=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+CONFIG_HP_SDC=m
+CONFIG_HIL_MLC=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
+# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_HIL_OLD=m
+CONFIG_KEYBOARD_HIL=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_HIL=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+CONFIG_HP_SDC_RTC=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_DUMMY=m
+# 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
+
+#
+# ISA devices
+#
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VX222 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_VXP440=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# GSC devices
+#
+# CONFIG_SND_HARMONY is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+CONFIG_SOUND_HARMONY=m
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+CONFIG_SOUND_AD1889=m
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMFPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_RW_DETECT=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ASFS_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=y
+CONFIG_VXFS_FS=m
+# 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_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# 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=m
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SECLVL=m
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64-smp
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64-smp	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/64-smp	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,1592 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.10
+# Fri Jan 21 03:14:29 2005
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_LOCK_KERNEL=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+
+#
+# Processor type and features
+#
+# CONFIG_PA7000 is not set
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+CONFIG_PA8X00=y
+CONFIG_PA20=y
+CONFIG_PREFETCH=y
+CONFIG_PARISC64=y
+CONFIG_64BIT=y
+CONFIG_SMP=y
+CONFIG_HOTPLUG_CPU=y
+CONFIG_DISCONTIGMEM=y
+# CONFIG_PREEMPT is not set
+CONFIG_COMPAT=y
+CONFIG_NR_CPUS=32
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+CONFIG_HPPB=y
+CONFIG_IOMMU_CCIO=y
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+CONFIG_PCI_LBA=y
+CONFIG_IOSAPIC=y
+CONFIG_IOMMU_SBA=y
+CONFIG_SUPERIO=y
+CONFIG_CHASSIS_LCD_LED=y
+CONFIG_PDC_CHASSIS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA_OBSOLETE is not set
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_PC_CML1=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_GSC=m
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+# CONFIG_PDC202XX_FORCE is not set
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+CONFIG_SCSI_INITIO=m
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=m
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_ZALON=m
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID5=m
+CONFIG_MD_RAID6=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+CONFIG_I2O=m
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_TUNNEL=m
+CONFIG_IP_TCPDIAG=m
+CONFIG_IP_TCPDIAG_IPV6=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_PHYSDEV=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# 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=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_ETHERTAP=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_LASI_82596=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_ULTRA32=m
+CONFIG_SMC9194=m
+CONFIG_NET_VENDOR_RACAL=y
+CONFIG_NI52=m
+# CONFIG_NI65 is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+# CONFIG_EEPRO100_PIO is not set
+CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
+CONFIG_LNE390=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+CONFIG_HP_SDC=m
+CONFIG_HIL_MLC=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
+# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_HIL_OLD=m
+CONFIG_KEYBOARD_HIL=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_HIL=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+CONFIG_HP_SDC_RTC=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_DUMMY=m
+# 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
+
+#
+# ISA devices
+#
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VX222 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_VXP440=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# GSC devices
+#
+# CONFIG_SND_HARMONY is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+CONFIG_SOUND_HARMONY=m
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+CONFIG_SOUND_AD1889=m
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMFPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_RW_DETECT=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ASFS_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=y
+CONFIG_VXFS_FS=m
+# 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_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# 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=m
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_RWLOCK is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SECLVL=m
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/default
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/default	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/config/default	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,1595 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.10
+# Fri Jan 21 03:13:53 2005
+#
+CONFIG_PARISC=y
+CONFIG_MMU=y
+CONFIG_STACK_GROWSUP=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+
+#
+# Processor type and features
+#
+CONFIG_PA7000=y
+# CONFIG_PA7100LC is not set
+# CONFIG_PA7200 is not set
+# CONFIG_PA7300LC is not set
+# CONFIG_PA8X00 is not set
+CONFIG_PA11=y
+# CONFIG_64BIT is not set
+# CONFIG_SMP is not set
+CONFIG_DISCONTIGMEM=y
+# CONFIG_PREEMPT is not set
+# CONFIG_HPUX is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+#
+CONFIG_GSC=y
+CONFIG_HPPB=y
+CONFIG_IOMMU_CCIO=y
+CONFIG_GSC_LASI=y
+CONFIG_GSC_WAX=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_PCI_LEGACY_PROC=y
+CONFIG_PCI_NAMES=y
+CONFIG_GSC_DINO=y
+CONFIG_PCI_LBA=y
+CONFIG_IOSAPIC=y
+CONFIG_IOMMU_SBA=y
+CONFIG_SUPERIO=y
+CONFIG_CHASSIS_LCD_LED=y
+CONFIG_PDC_CHASSIS=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+# CONFIG_PCMCIA_OBSOLETE is not set
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_I82365=m
+# CONFIG_TCIC is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_PC_CML1=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_GSC=m
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+CONFIG_BLK_DEV_ALI15X3=m
+# CONFIG_WDC_ALI15X3 is not set
+CONFIG_BLK_DEV_AMD74XX=m
+CONFIG_BLK_DEV_CMD64X=m
+CONFIG_BLK_DEV_TRIFLEX=m
+CONFIG_BLK_DEV_CY82C693=m
+CONFIG_BLK_DEV_CS5520=m
+CONFIG_BLK_DEV_CS5530=m
+CONFIG_BLK_DEV_HPT34X=m
+# CONFIG_HPT34X_AUTODMA is not set
+CONFIG_BLK_DEV_HPT366=m
+CONFIG_BLK_DEV_SC1200=m
+CONFIG_BLK_DEV_PIIX=m
+CONFIG_BLK_DEV_NS87415=m
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_PDC202XX_BURST is not set
+CONFIG_BLK_DEV_PDC202XX_NEW=m
+# CONFIG_PDC202XX_FORCE is not set
+CONFIG_BLK_DEV_SVWKS=m
+CONFIG_BLK_DEV_SIIMAGE=m
+CONFIG_BLK_DEV_SLC90E66=m
+CONFIG_BLK_DEV_TRM290=m
+CONFIG_BLK_DEV_VIA82CXXX=m
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+CONFIG_MEGARAID_LEGACY=m
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+CONFIG_SCSI_INITIO=m
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+CONFIG_SCSI_LASI700=m
+CONFIG_53C700_MEM_MAPPED=y
+CONFIG_53C700_LE_ON_BE=y
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
+# CONFIG_SCSI_IPR is not set
+CONFIG_SCSI_ZALON=m
+CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
+CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
+CONFIG_SCSI_NCR53C8XX_SYNC=20
+# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_NINJA_SCSI=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID5=m
+CONFIG_MD_RAID6=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+CONFIG_I2O=m
+CONFIG_I2O_CONFIG=m
+CONFIG_I2O_BLOCK=m
+CONFIG_I2O_SCSI=m
+CONFIG_I2O_PROC=m
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_UNIX=y
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_TUNNEL=m
+CONFIG_IP_TCPDIAG=m
+CONFIG_IP_TCPDIAG_IPV6=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CT_PROTO_SCTP=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_LOCAL=y
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+CONFIG_IP_NF_TARGET_CONNMARK=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
+CONFIG_IP_NF_COMPAT_IPFWADM=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_LENGTH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_PHYSDEV=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# 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=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_QOS=y
+CONFIG_NET_ESTIMATOR=y
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_RX is not set
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_ETHERTAP=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+CONFIG_LASI_82596=m
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_EL1=m
+CONFIG_EL2=m
+CONFIG_ELPLUS=m
+CONFIG_EL16=m
+CONFIG_EL3=m
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+# CONFIG_LANCE is not set
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_ULTRA32=m
+CONFIG_SMC9194=m
+CONFIG_NET_VENDOR_RACAL=y
+# CONFIG_NI5010 is not set
+CONFIG_NI52=m
+# CONFIG_NI65 is not set
+
+#
+# Tulip family network device support
+#
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_DM9102 is not set
+CONFIG_PCMCIA_XIRCOM=m
+# CONFIG_PCMCIA_XIRTULIP is not set
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+CONFIG_E2100=m
+CONFIG_EWRK3=m
+CONFIG_EEXPRESS=m
+CONFIG_EEXPRESS_PRO=m
+CONFIG_HPLAN_PLUS=m
+CONFIG_HPLAN=m
+CONFIG_LP486E=m
+CONFIG_ETH16I=m
+CONFIG_NE2000=m
+CONFIG_ZNET=m
+CONFIG_SEEQ8005=m
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+# CONFIG_EEPRO100_PIO is not set
+CONFIG_E100=m
+# CONFIG_E100_NAPI is not set
+CONFIG_LNE390=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_NE3210=m
+CONFIG_ES3210=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
+CONFIG_IXGB=m
+# CONFIG_IXGB_NAPI is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_AIRO=m
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PLIP=m
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+CONFIG_SERIO_GSCPS2=y
+CONFIG_HP_SDC=m
+CONFIG_HIL_MLC=m
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_RAW=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
+# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_HIL_OLD=m
+CONFIG_KEYBOARD_HIL=m
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_HIL=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_UINPUT is not set
+CONFIG_HP_SDC_RTC=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MUX=y
+CONFIG_SERIAL_MUX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_STI=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_STI_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=160
+CONFIG_DUMMY_CONSOLE_ROWS=64
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_LOGO_PARISC_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_DUMMY=m
+# 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
+
+#
+# ISA devices
+#
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB is not set
+# CONFIG_SND_OPTI92X_AD1848 is not set
+# CONFIG_SND_OPTI92X_CS4231 is not set
+# CONFIG_SND_OPTI93X is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_WAVEFRONT is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_OPL3SA2 is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VX222 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+CONFIG_SND_USB_USX2Y=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_VXP440=m
+CONFIG_SND_PDAUDIOCF=m
+
+#
+# GSC devices
+#
+# CONFIG_SND_HARMONY is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+CONFIG_SOUND_HARMONY=m
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+CONFIG_SOUND_AD1889=m
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMFPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH_TTY is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_RW_DETECT=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+
+#
+# USB ATM/DSL drivers
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_DEVFS_FS=y
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS_XATTR is not set
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ASFS_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=y
+CONFIG_VXFS_FS=m
+# 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_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# 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=m
+
+#
+# Profiling support
+#
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+
+#
+# Kernel hacking
+#
+CONFIG_DEBUG_KERNEL=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_CAPABILITIES=y
+# CONFIG_SECURITY_ROOTPLUG is not set
+CONFIG_SECURITY_SECLVL=m
+# CONFIG_SECURITY_SELINUX is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/README.Debian
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/README.Debian	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/README.Debian	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,26 @@
+Choosing which kernel package is right for you
+----------------------------------------------
+
+If your machine has multiple processors, choose a kernel with the
+"smp" suffix. However, you may wish to install the non-SMP kernel 
+as well, as a backup in the event SMP does not boot on your machine class,
+and send a bug report to parisc-linux at parisc-linux.org.
+
+If your machine has a PA7000 series processor, you want the "32"
+flavour of kernels.
+
+If your machine has a PA8000 series processor, you can choose either the
+"32" or "64" flavour, depending on your systems firmware.
+
+Some machines only have 64-bit "Wide" PDC (Processor Dependent Code), such as
+the A500 and L2000 series systems. These machines do not support running
+32-bit "Narrow" kernels, so you must run "64" kernels on them.
+
+There is no real advantage to using a 64-bit kernel, in fact,
+it is recommended that you use a "32" kernel, unless you
+want to test 64-bit mode, are required to by your systems firmware, or
+want to address more than 3.5 GB of memory.
+
+If in doubt, consult http://www.parisc-linux.org/.
+
+-- Kyle McMartin <kyle at parisc-linux.org>, Tue 24 Aug 2004 16:25:19 -0400

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/changelog
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/changelog	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/changelog	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,64 @@
+kernel-image-2.6.10-hppa (2.6.10-1) UNRELEASED; urgency=low
+
+  * New upstream release(s).
+
+ -- Kyle McMartin <kyle at debian.org>  Fri, 21 Jan 2005 02:51:16 -0500
+
+kernel-image-2.6.8-hppa (2.6.8-6) unstable; urgency=high
+
+  * Disable de4x5, as it conflicts with tulip.
+  * We have lots of modules enabled now. (closes: #275468)
+  * Enable SERIAL_MUX and PDC_CONSOLE, the former so we have
+    console on K and Nova class machines. 
+  * Depend on newer kernel-source-2.6.8, for security fixes.
+  * Depend on newer kernel-patch-2.6.8-hppa, to fix rejects with
+    newer kernel-source.
+  * Properly set the $architecture for make-kpkg, so it
+    preserves include/asm-parisc properly. (closes: #289785)
+
+ -- Kyle McMartin <kyle at debian.org>  Sat, 15 Jan 2005 19:40:05 -0500
+
+kernel-image-2.6.8-hppa (2.6.8-5) unstable; urgency=high
+
+  * make ps2 keyboard support built-in instead of modular to ease d-i pain
+    
+ -- Bdale Garbee <bdale at gag.com>  Tue,  2 Nov 2004 12:55:33 -0700
+
+kernel-image-2.6.8-hppa (2.6.8-4) unstable; urgency=high
+
+  * we really want ext2 built-in and not as a module for d-i initrd use
+  * turn AT keyboard and PS mouse support back on as modules
+  * add gcc-3.3-hppa64 and binutils-hppa64 to build deps
+  * make sure all the configs are 'make oldconfig' clean again, and the diffs
+    between flavors are only those things that should vary between them
+  * add Bdale as an uploader
+  * crank up urgency as we need these changes in sarge for d-i udebs
+
+ -- Bdale Garbee <bdale at gag.com>  Thu, 28 Oct 2004 10:51:22 -0600
+
+kernel-image-2.6.8-hppa (2.6.8-3) unstable; urgency=low
+
+  * CONFIG_BLK_DEV_RAM_SIZE must be 8192, or d-i fails, because
+    kernel command line flags are truncated.
+
+ -- Kyle McMartin <kyle at debian.org>  Sun, 24 Oct 2004 01:35:23 -0400
+
+kernel-image-2.6.8-hppa (2.6.8-2) unstable; urgency=low
+
+  * Remove meta-packages, as we will transition to the
+    kernel-latest framework.
+  * Build against kernel-patch-hppa 2.6.8-4.
+  * Add support for PCI/EISA network cards (in addition to those
+    already built on PA-RISC.)
+
+ -- Kyle McMartin <kyle at debian.org>  Sat, 16 Oct 2004 10:29:53 -0400
+
+kernel-image-2.6.8-hppa (2.6.8-1) unstable; urgency=high
+
+  * New upstream release. Synced to 2.6.8.1-pa7 or greater.
+  * Priority is high, since we want to see this package make it into
+    sarge. It provides significantly better hardware support, which
+    we feel justifies the higher priority.
+
+ -- Kyle McMartin <kyle at debian.org>  Wed, 18 Aug 2004 12:21:12 -0400
+

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/control
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/control	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/control	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,135 @@
+Source: kernel-image-2.6.10-hppa
+Section: devel
+Priority: optional
+Maintainer: Kyle McMartin <kyle at debian.org>
+Uploaders: Bdale Garbee <bdale at gag.com>
+Build-Depends: kernel-tree-2.6.10-4, kernel-patch-2.6.10-hppa (>= 2.6.10-1), kernel-package, debianutils (>= 1.6), debhelper (>= 2), bzip2, modutils (>=2.4.21-3), gcc-3.3-hppa64, binutils-hppa64
+Standards-Version: 3.6.1
+
+Package: kernel-headers-2.6.10-1
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: coreutils | fileutils (>= 4.0), kernel-kbuild-2.6-3
+Provides: kernel-headers, kernel-headers-2.6
+Description: Header files for the Linux kernel version 2.6.10
+ This package provides kernel header files for version 2.6.10, for sites
+ that want the latest kernel headers. Please read
+ /usr/share/doc/kernel-headers-2.6.10-1/debian.README.gz for details.
+
+Package: kernel-headers-2.6.10-1-32
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: coreutils | fileutils (>= 4.0), kernel-headers-2.6.10-1
+Provides: kernel-headers, kernel-headers-2.6
+Description: Linux kernel headers 2.6.10 on HP PA-RISC 32-bit systems
+ This package provides kernel header files for version 2.6.10 on
+ HP PA-RISC 32-bit systems, for sites that want the latest kernel headers.
+ Please read /usr/share/doc/kernel-headers-2.6.10-1-32/debian.README.gz for
+ details.
+
+Package: kernel-image-2.6.10-1-32
+Architecture: hppa
+Section: base
+Priority: optional
+Provides: kernel-image, kernel-image-2.6
+Depends: palo, initrd-tools, coreutils | fileutils, module-init-tools
+Suggests: kernel-doc-2.6.10 | kernel-source-2.6.10
+Description: Linux kernel image for version 2.6.10 on 32-bit PA-RISC
+ This package contains the Linux kernel image for version 2.6.10 on
+ 32-bit HP PA-RISC, the corresponding System.map file, and the modules
+ built by the packager. It also contains scripts that try to ensure that
+ the system is not left in a unbootable state after an update.
+ .
+ Kernel image packages are generally produced using kernel-package,
+ and it is suggested that you install that package if you wish to create a
+ custom kernel from the sources.
+
+Package: kernel-headers-2.6.10-1-64
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: coreutils | fileutils (>= 4.0), kernel-headers-2.6.10-1
+Provides: kernel-headers, kernel-headers-2.6
+Description: Linux kernel headers 2.6.10 on HP PA-RISC 64-bit systems
+ This package provides kernel header files for version 2.6.10 on
+ HP PA-RISC 64-bit systems, for sites that want the latest kernel headers.
+ Please read /usr/share/doc/kernel-headers-2.6.10-1-64/debian.README.gz for
+ details.
+
+Package: kernel-image-2.6.10-1-64
+Architecture: hppa
+Section: base
+Priority: optional
+Provides: kernel-image, kernel-image-2.6
+Depends: palo, initrd-tools, coreutils | fileutils, module-init-tools
+Suggests: kernel-doc-2.6.10 | kernel-source-2.6.10
+Description: Linux kernel image for version 2.6.10 on 64-bit PA-RISC
+ This package contains the Linux kernel image for version 2.6.10 on
+ 64-bit HP PA-RISC, the corresponding System.map file, and the modules
+ built by the packager. It also contains scripts that try to ensure that
+ the system is not left in a unbootable state after an update.
+ .
+ Kernel image packages are generally produced using kernel-package,
+ and it is suggested that you install that package if you wish to create a
+ custom kernel from the sources.
+
+Package: kernel-headers-2.6.10-1-32-smp
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: coreutils | fileutils (>= 4.0), kernel-headers-2.6.10-1
+Provides: kernel-headers, kernel-headers-2.6
+Description: Linux kernel headers 2.6.10 on HP PA-RISC 32-bit systems
+ This package provides kernel header files for version 2.6.10 on
+ HP PA-RISC 32-bit systems, for sites that want the latest kernel headers.
+ Please read /usr/share/doc/kernel-headers-2.6.10-1-32/debian.README.gz for
+ details.
+
+Package: kernel-image-2.6.10-1-32-smp
+Architecture: hppa
+Section: base
+Priority: optional
+Provides: kernel-image, kernel-image-2.6
+Depends: palo, initrd-tools, coreutils | fileutils, module-init-tools
+Suggests: kernel-doc-2.6.10 | kernel-source-2.6.10
+Description: Linux kernel image for version 2.6.10 on 32-bit PA-RISC
+ This package contains the Linux kernel image for version 2.6.10 on
+ 32-bit HP PA-RISC, the corresponding System.map file, and the modules
+ built by the packager. It also contains scripts that try to ensure that
+ the system is not left in a unbootable state after an update.
+ .
+ Kernel image packages are generally produced using kernel-package,
+ and it is suggested that you install that package if you wish to create a
+ custom kernel from the sources.
+
+Package: kernel-headers-2.6.10-1-64-smp
+Architecture: hppa
+Section: devel
+Priority: optional
+Depends: coreutils | fileutils (>= 4.0), kernel-headers-2.6.10-1
+Provides: kernel-headers, kernel-headers-2.6
+Description: Linux kernel headers 2.6.10 on HP PA-RISC 64-bit systems
+ This package provides kernel header files for version 2.6.10 on
+ HP PA-RISC 64-bit systems, for sites that want the latest kernel headers.
+ Please read /usr/share/doc/kernel-headers-2.6.10-1-64/debian.README.gz for
+ details.
+
+Package: kernel-image-2.6.10-1-64-smp
+Architecture: hppa
+Section: base
+Priority: optional
+Provides: kernel-image, kernel-image-2.6smp
+Depends: palo, initrd-tools, coreutils | fileutils, module-init-tools
+Suggests: kernel-doc-2.6.10 | kernel-source-2.6.10
+Description: Linux kernel image for version 2.6.10 on 64-bit PA-RISC
+ This package contains the Linux kernel image for version 2.6.10 on
+ 64-bit HP PA-RISC, the corresponding System.map file, and the modules
+ built by the packager. It also contains scripts that try to ensure that
+ the system is not left in a unbootable state after an update.
+ .
+ Kernel image packages are generally produced using kernel-package,
+ and it is suggested that you install that package if you wish to create a
+ custom kernel from the sources.
+

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/copyright
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/copyright	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/copyright	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,28 @@
+This is the Debian GNU/Linux prepackaged version of the Linux kernel for
+systems using the Hewlett-Packard PA-RISC (HPPA) processor family.
+
+This package was constructed by Kyle McMartin <kyle at debian.org> using the 
+HP PA-RISC specific patchset downloaded from:
+
+	http://cvs.parisc-linux.org/download/linux-2.6/
+
+Linux is copyrighted by Linus Torvalds and others, and released under 
+version 2 of the GNU General Public License, with the following addition:
+
+
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+ Also note that the only valid version of the GPL as far as the kernel
+ is concerned is _this_ license (ie v2), unless explicitly otherwise
+ stated.
+
+			Linus Torvalds
+
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/rules
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/rules	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/rules	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,123 @@
+#!/usr/bin/make -f
+#
+# debian/rules for kernel-image-*
+#
+# GNU copyright 1997 to 1999 by Joey Hess.
+# Copyright (c) 1999-2002 Herbert Xu <herbert at debian.org>
+#
+# $Id: rules,v 1.12 2004/04/27 11:41:35 herbert Exp $
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatability version to use.
+export DH_COMPAT=2
+
+SHELL := sh -e
+
+khsed := s/^Package: kernel-headers-\(.*\)\(-[[:digit:]]*\)$$/\1 \2/
+debver := $(shell sed -n '$(khsed); t e; b; :e; p; q' debian/control)
+export version := $(firstword $(debver))
+export debnum := $(word 2,$(debver))
+debver := $(version)$(debnum)
+appvan :=
+
+ifneq ($(debnum),)
+appvan := --append_to_version $(debnum)
+endif
+
+addpatch := --added-patches debian,hppa_$(shell echo $(version) | tr '.' '_')
+
+flavours := $(shell \
+        find config -maxdepth 1 -type f ! -name default -printf '%f\n' \
+)
+
+ktver := $(shell \
+	sed -n 's/.*kernel-tree-\([^,]*\).*/\1/p; t e; b; :e q' \
+		debian/control \
+)
+
+kbsed := s/^Depends: .*\(kernel-kbuild-[^ ,]*\).*/\1/p
+kbpkg := $(shell sed -n '$(kbsed); t e; b; :e q' debian/control)
+
+export DEBIAN_SRCTOP := $(CURDIR)/kernel-source-$(version)
+export DEBIAN_UPSTREAM_VERSION := $(version)
+
+unpack: unpack-stamp
+unpack-stamp:
+	dh_testdir
+	tar jxf /usr/src/kernel-source-$(version).tar.bz2
+	cd kernel-source-$(version); \
+		/usr/src/kernel-patches/all/$(version)/apply/debian $(ktver)
+	mkdir -p kernel-source-$(version)/debian
+	cp debian/changelog kernel-source-$(version)/debian
+	cp debian/control kernel-source-$(version)/debian
+	cp debian/copyright kernel-source-$(version)/debian
+	> kernel-source-$(version)/debian/official
+	install post-install kernel-source-$(version)/debian
+	for i in $(flavours); do \
+		cp -al kernel-source-$(version) build-$$i; \
+		cp config/$$i build-$$i/.config; \
+	done
+	cp config/default kernel-source-$(version)/.config
+	ln -s `command -v touch` bin/touch.orig
+	sed 's/@kbpkg@/$(kbpkg)/g' header-install > header-install.out
+	chmod u+x header-install.out
+
+	touch unpack-stamp
+
+build: build-stamp
+build-stamp: unpack-stamp
+	dh_testdir
+	PATH=$$PWD/bin:$$PATH; \
+	for i in $(flavours); do \
+		cd build-$$i; \
+		make-kpkg $(addpatch) --append_to_version $(debnum)-$$i \
+		build; \
+		cd ..; \
+	done
+
+	touch build-stamp
+
+debnum:
+	@echo $(debnum)
+
+clean:
+	dh_testdir
+	rm -f unpack-stamp build-stamp
+	rm -rf kernel-source-$(version) build-* install-* *.deb
+	rm -f bin/touch.orig
+	rm -f header-install.out
+	dh_clean
+
+install: build
+	dh_testdir
+	dh_clean -k
+	dh_installdirs
+
+# Build architecture-independent files here.
+binary-indep:
+
+# Build architecture-dependent files here.
+binary-arch: install
+	dh_testdir
+
+	cd kernel-source-$(version); \
+		 HEADER_CLEAN_HOOK=$(CURDIR)/header-install.out \
+			 make-kpkg $(addpatch) $(appvan) kernel-headers
+	mv kernel-source-$(version)/debian/files debian
+
+	for i in $(flavours); do \
+		cp -al build-$$i install-$$i; \
+		cd install-$$i; \
+		make-kpkg $(addpatch) --append_to_version $(debnum)-$$i \
+			--initrd kernel-image; \
+		cd ..; \
+		cat install-$$i/debian/files >> debian/files; \
+		rm -rf install-$$i; \
+	done
+	
+	mv *.deb ..
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install unpack


Property changes on: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/debian/rules
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/header-install
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/header-install	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/header-install	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+set -e
+
+kbpkg=@kbpkg@
+
+cd $DEBIAN_SRCTOP
+{
+	find . -path './scripts/*' -prune -o \
+		-path './Documentation/*' -prune -o \
+		-path './debian/*' -prune -o \
+		-type f \( -name Makefile -o -name 'Kconfig*' \) -print
+	echo arch/$DEB_HOST_ARCH/kernel/asm-offsets.s
+} | cpio -pd --preserve-modification-time $OLDPWD
+cd - > /dev/null
+ln -s ../$kbpkg/scripts .
+
+remove=
+cd include
+for i in asm-*; do
+	case ${i#asm-} in
+	generic | parisc)
+		;;
+	*)
+		remove="$remove $i"
+		;;
+	esac
+done
+${remove:+rm -r $remove}

Added: trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/post-install
===================================================================
--- trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/post-install	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-image-2.6.10-hppa-2.6.10/post-install	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+set -e
+
+debhelper_pre() {
+	dh_clean -k --package="$1"
+	dh_installdirs --package="$1"
+}
+
+debhelper_post() {
+	dh_installdocs --package="$1"
+	dh_installchangelogs --package="$1"
+	dh_compress --package="$1"
+	dh_fixperms --package="$1"
+	dh_installdeb --package="$1"
+	dh_gencontrol --package="$1"
+	dh_md5sums --package="$1"
+	dh_builddeb --package="$1"
+}
+
+prefix=$DEBIAN_UPSTREAM_VERSION$debnum
+pkg=kernel-headers-$version
+top=$PWD/debian/$pkg
+dir=$top/usr/src/kernel-headers-$version
+
+debhelper_pre $pkg
+
+mkdir -p $dir/include/linux
+
+cp -a .config $dir
+echo $debnum-$suffix > $dir/.extraversion
+cp -a Module.symvers $dir
+
+find . -mindepth 1 -maxdepth 1 \
+	! -name debian -a ! -name Documentation -a ! -name include -a \
+	! -name '.*' -a \( \
+	-name Makefile -o -type d \) \
+	-printf "../kernel-headers-$prefix/%f\n" |
+	xargs ln -s --target-directory=$dir
+
+cd include
+find . -mindepth 1 -maxdepth 1 \
+	! -name config -a ! -name linux -a \( \
+	! -name 'asm-*' -o -name asm-generic -o -name asm-$DEB_HOST_ARCH \) \
+	-printf "../../kernel-headers-$prefix/include/%f\n" |
+	xargs ln -s --target-directory=$dir/include
+cp -a config $dir/include
+find linux -mindepth 1 -maxdepth 1 \
+	! -name autoconf.h -a \
+	! -name compile.h -a ! -name version.h \
+	-printf "../../../kernel-headers-$prefix/include/linux/%f\n" |
+	xargs ln -s --target-directory=$dir/include/linux
+cp -a linux/autoconf.h linux/compile.h \
+	linux/version.h $dir/include/linux
+cd ..
+
+mkdir -p $top/lib/modules/$version
+ln -s /usr/src/kernel-headers-$version $top/lib/modules/$version/build
+
+debhelper_post $pkg
+
+
+cd $IMAGE_TOP/lib/modules/$version
+mkdir boot initrd

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/README.Debian
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/README.Debian	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/README.Debian	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,8 @@
+NOTES TO PACKAGE USERS
+======================
+
+  To use this patch with make-kpkg, use a command like:
+
+$ PATCH_THE_KERNEL=YES make-kpkg --added_patches=hppa --config=menuconfig
+
+  Read the make-kpkg documentation for more information.

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/changelog
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/changelog	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/changelog	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,45 @@
+kernel-patch-2.6.10-hppa (2.6.10-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+  * We are at 2.6.10-pa1 according to the parisc-linux tree. All merges
+    from this point on will be backports from the top of the tree.
+  * Patches:
+      + serial_mux_include_irq:
+          - Fix build of drivers/serial/mux.c, needs NO_IRQ definition
+            from asm/irq.h.
+
+ -- Kyle McMartin <kyle at debian.org>  Fri, 21 Jan 2005 02:46:08 -0500
+
+kernel-patch-2.6.8-hppa (2.6.8-5) unstable; urgency=low
+
+  * Fix a reject in drivers/serial/8250.c.
+
+ -- Kyle McMartin <kyle at debian.org>  Sat, 15 Jan 2005 21:49:11 -0500
+
+kernel-patch-2.6.8-hppa (2.6.8-4) unstable; urgency=low
+
+  * Sync to 2.6.8.1-pa11.
+
+ -- Kyle McMartin <kyle at debian.org>  Sat, 16 Oct 2004 10:20:11 -0400
+
+kernel-patch-2.6.8-hppa (2.6.8-3) unstable; urgency=high
+
+  * Priority high because we want 2.6.8-pa7 in sarge.
+     Justification is improved hardware support, and proper SMP,
+     among other reasons.
+  * Sync to newest upstream 2.6.8.1-pa7.
+
+ -- Kyle McMartin <kyle at debian.org>  Mon, 23 Aug 2004 01:03:04 -0400
+
+kernel-patch-2.6.8-hppa (2.6.8-2) unstable; urgency=low
+
+  * Sync to newest upstream 2.6.8.1-pa5.
+ 
+ -- Kyle McMartin <kyle at debian.org>  Thu, 19 Aug 2004 15:54:19 -0400
+
+kernel-patch-2.6.8-hppa (2.6.8-1) unstable; urgency=low
+
+  * Initial release, 2.6.8.1-pa4 synced.
+
+ -- Kyle McMartin <kyle at debian.org>  Tue, 17 Aug 2004 03:22:11 -0400
+

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/control
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/control	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/control	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,14 @@
+Source: kernel-patch-2.6.10-hppa
+Section: devel
+Priority: extra
+Maintainer: Kyle McMartin <kyle at debian.org>
+Uploaders: LaMont Jones <lamont at debian.org>, Bdale Garbee <bdale at gag.com>, Thibaut VARENE <varenet at debian.org>
+Standards-Version: 3.6.1
+Build-Depends-Indep: debhelper, dh-kpatches (>= 0.99.21)
+
+Package: kernel-patch-2.6.10-hppa
+Architecture: all
+Depends: ${kpatch:Depends}
+Description: Diffs to the kernel source for HP PA-RISC (2.6)
+ The HP PA-RISC kernel is maintained at cvs.parisc-linux.org as a patch set
+ distinct from Linus Torvalds' official copy.  

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/copyright
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/copyright	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/copyright	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,31 @@
+This is the Debian GNU/Linux prepackaged version of the Linux kernel for
+systems using the Hewlett-Packard PA-RISC (HPPA) processor family.
+
+This package was constructed by Kyle McMartin <kyle at debian.org> using the 
+HP PA-RISC specific patchset downloaded from:
+
+	http://cvs.parisc-linux.org/download/linux-2.6/
+
+The contents of the debian/ directory and other portions of this package
+not covered under other copyright are Copyright 2004 by Kyle McMartin, and
+released under the GNU General Public License.
+
+Linux is copyrighted by Linus Torvalds and others, and released under 
+version 2 of the GNU General Public License, with the following addition:
+
+
+   NOTE! This copyright does *not* cover user programs that use kernel
+ services by normal system calls - this is merely considered normal use
+ of the kernel, and does *not* fall under the heading of "derived work".
+ Also note that the GPL below is copyrighted by the Free Software
+ Foundation, but the instance of code that it refers to (the Linux
+ kernel) is copyrighted by me and others who actually wrote it.
+
+ Also note that the only valid version of the GPL as far as the kernel
+ is concerned is _this_ license (ie v2), unless explicitly otherwise
+ stated.
+
+			Linus Torvalds
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/kpatches.arch
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/kpatches.arch	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/kpatches.arch	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,7 @@
+Patch-name: hppa architecture
+Patch-id: hppa_2_6_10
+Path-strip-level: 1
+
+Patch-file: hppa_2.6.10.diff
+Architecture: hppa
+Kernel-version: 2.6.10

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/rules
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/rules	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/rules	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,43 @@
+#! /usr/bin/make -f
+
+PACKAGE=kernel-patch-2.6.10-hppa
+
+####################
+
+arch=$(shell dpkg --print-architecture)
+
+topdir=$(shell pwd)
+destdir=${topdir}/debian/tmp
+docdir=${destdir}/usr/share/doc/${PACKAGE}
+
+build:
+	dh_testdir
+
+clean:
+	find . -name .svn | xargs rm -rf
+	dh_testdir
+	dh_testroot
+	dh_clean
+
+binary-arch:	build
+
+binary-indep:	build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+
+	mkdir $(destdir)
+	dh_installkpatches
+	dh_installchangelogs
+	dh_installdocs
+
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-arch binary-indep
+
+.PHONY: binary binary-arch binary-indep clean checkroot


Property changes on: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/debian/rules
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/hppa_2.6.10.diff
===================================================================
--- trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/hppa_2.6.10.diff	2005-01-23 17:03:41 UTC (rev 2371)
+++ trunk/kernel/hppa/kernel-patch-2.6.10-hppa-2.6.10/hppa_2.6.10.diff	2005-01-23 17:16:41 UTC (rev 2372)
@@ -0,0 +1,19639 @@
+Index: debian-kernel-hppa-2.6.10/Documentation/kernel-parameters.txt
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/Documentation/kernel-parameters.txt	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/Documentation/kernel-parameters.txt	2005-01-21 12:16:45.000000000 -0500
+@@ -1308,9 +1308,6 @@
+ 	sym53c416=	[HW,SCSI]
+ 			See header of drivers/scsi/sym53c416.c.
+ 
+-	sym53c8xx=	[HW,SCSI]
+-			See Documentation/scsi/ncr53c8xx.txt.
+-
+ 	t128=		[HW,SCSI]
+ 			See header of drivers/scsi/t128.c.
+ 
+Index: debian-kernel-hppa-2.6.10/Documentation/parisc/00-INDEX
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/Documentation/parisc/00-INDEX	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/Documentation/parisc/00-INDEX	2005-01-21 12:16:45.000000000 -0500
+@@ -1,10 +1,6 @@
+ 00-INDEX
+ 	- this file.
+-IODC.txt
+-	- Documentation IODC
+ debugging
+ 	- some debugging hints for real-mode code
+-mm
+-	- Documentation on parisc mm status
+ registers
+ 	- current/planned usage of registers
+Index: debian-kernel-hppa-2.6.10/Documentation/parisc/todo
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/Documentation/parisc/todo	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,75 @@
++Status 2004-11-11 :
++-------------------
++ - Merged to 2.6.10-rc1
++ - No preemptible support
++
++Todo:
++-----
++
++ - 2004-08-16 (Carlos)
++   Review the gettimeofday implementation, possibly use a
++   light-weight-syscall and rely on cr16 and cpu speed for
++   more accurate timing?
++ - CPU hotplug: we cannot bring up cpus after init, and we don't know if we can
++   shutdown cpus
++ - task_struct/thread_info split -- task_struct should not be visible in
++   entry.S, we need to move some items into thread_info -- this includes
++   pt_regs and maybe some of the flags (ptrace, etc)
++ - flush_tlb_kernel_range is horribly inefficient. this has been merged
++   with the userspace tlb flush, but it has a magic constant that needs
++   tuning
++ - syscall signal return path needs work, we don't loop on signal
++   delivery like other archs
++
++ - REVIEW ALL THE TODO ENTRIES BELOW!
++
++ - the fix for do_fork needs checking
++ - our PDC early debug console hacks need to be cleaned up somehow
++ - ad1889 driver: only works with .wav;  Convert to ALSA (ggg, tausq, tbone)
++ - ns87415 dma doesn't work reliably on suckyio-systems
++ - (ab)use kmap/kunmap on 64-bit to eliminate flush_dcache calls.
++ - cp_new_stat32 for sys_parisc32.c is inefficient; maybe it's better
++   to fill in a tmp stat32 and just do copy_to_user in one go at the end?
++ - investigate not putting in extable entries for put_kernel_asm; will
++   probably reduce kernel size
++ - fix HIL problem: ksoftirqd/0 eats 56% cpu (kernel 2.4 & kernel 2.6)
++ - write floppy driver for lasi
++ - write floppy driver for suckyio
++ - spifi driver (rbrad)
++ - NPTL kernel support (CLONE_*TID flags need to be correctly handled by 
++   sys_clone() and friends)
++ - fix ALSA harmony driver to reflect changes in ALSA architecture.
++
++
++ Started and in progress:
++ ------------------------
++ - 2004-08-16 (Carlos)
++   64-bit binutils needs to be fixed to get multiple stub
++   section support.
++
++ - 2004-08-16 (Carlos)
++   Working on light-weight-syscall to implement atomic
++   compare and swap primitive.
++
++ - IRQ code (use arch-indep scheme & cpu-affinity support) (jejb, ggg, t-bone)
++
++ - REVIEW THE ENTRIES BELOW!
++
++ - Some options still need Kconfig help entries (see below!)
++ - Look at Config.help too. (tbone, HIL -> helge?)
++ - port hil_kbd.c to new input layer
++ - port hil_ptr.c to new input layer
++
++ - 64-bit userspace (Leandro)
++
++
++ CONFIG options without help:
++ -----------------------------
++ - REVIEW THESE ENTRIES!
++
++ _USB_OHCI_HCD (add parisc info?)
++ _HP_SDC_RTC
++ _HIL_MLC
++ _HIL_KBD (to improve)
++ _HIL_PTR (to improve)
++
+Index: debian-kernel-hppa-2.6.10/arch/parisc/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -17,9 +17,12 @@
+ # Mike Shaver, Helge Deller and Martin K. Petersen
+ #
+ NM		= sh $(srctree)/arch/parisc/nm
++CHECKFLAGS	+= -D__hppa__=1
++
+ ifdef CONFIG_PARISC64
+ CROSS_COMPILE	:= hppa64-linux-
+ UTS_MACHINE	:= parisc64
++CHECKFLAGS	+= -D__LP64__=1 -m64
+ else
+ MACHINE := $(subst 64,,$(shell uname -m))
+ ifneq ($(MACHINE),parisc)
+Index: debian-kernel-hppa-2.6.10/arch/parisc/configs/712_defconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/configs/712_defconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/configs/712_defconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -1,5 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
++# Linux kernel version: 2.6.10-rc3-pa6
++# Mon Dec 13 13:49:06 2004
+ #
+ CONFIG_PARISC=y
+ CONFIG_MMU=y
+@@ -9,37 +11,50 @@
+ #
+ # Code maturity level options
+ #
+-# CONFIG_EXPERIMENTAL is not set
+-CONFIG_CLEAN_COMPILE=y
+-CONFIG_STANDALONE=y
++CONFIG_EXPERIMENTAL=y
++# CONFIG_CLEAN_COMPILE is not set
++CONFIG_BROKEN=y
+ CONFIG_BROKEN_ON_SMP=y
+ 
+ #
+ # General setup
+ #
++CONFIG_LOCALVERSION=""
+ CONFIG_SWAP=y
+ CONFIG_SYSVIPC=y
++CONFIG_POSIX_MQUEUE=y
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ CONFIG_SYSCTL=y
+-CONFIG_LOG_BUF_SHIFT=15
+-# CONFIG_HOTPLUG is not set
+-# CONFIG_IKCONFIG is not set
++# CONFIG_AUDIT is not set
++CONFIG_LOG_BUF_SHIFT=16
++CONFIG_HOTPLUG=y
++CONFIG_KOBJECT_UEVENT=y
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
+ # CONFIG_EMBEDDED is not set
+ CONFIG_KALLSYMS=y
++CONFIG_KALLSYMS_ALL=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
+ CONFIG_FUTEX=y
+ CONFIG_EPOLL=y
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+ # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SHMEM=y
++CONFIG_CC_ALIGN_FUNCTIONS=0
++CONFIG_CC_ALIGN_LABELS=0
++CONFIG_CC_ALIGN_LOOPS=0
++CONFIG_CC_ALIGN_JUMPS=0
++# CONFIG_TINY_SHMEM is not set
+ 
+ #
+ # Loadable module support
+ #
+ CONFIG_MODULES=y
+-# CONFIG_MODULE_UNLOAD is not set
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
+ CONFIG_OBSOLETE_MODPARM=y
+-# CONFIG_KMOD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
+ 
+ #
+ # Processor type and features
+@@ -47,10 +62,12 @@
+ # CONFIG_PA7000 is not set
+ CONFIG_PA7100LC=y
+ # CONFIG_PA7200 is not set
++# CONFIG_PA7300LC is not set
+ # CONFIG_PA8X00 is not set
+ CONFIG_PA11=y
+ # CONFIG_64BIT is not set
+ # CONFIG_SMP is not set
++# CONFIG_DISCONTIGMEM is not set
+ # CONFIG_PREEMPT is not set
+ # CONFIG_HPUX is not set
+ 
+@@ -61,17 +78,30 @@
+ # CONFIG_HPPB is not set
+ # CONFIG_IOMMU_CCIO is not set
+ CONFIG_GSC_LASI=y
+-CONFIG_GSC_WAX=y
++# CONFIG_GSC_WAX is not set
+ # CONFIG_EISA is not set
+ # CONFIG_PCI is not set
+-# CONFIG_CHASSIS_LCD_LED is not set
++CONFIG_CHASSIS_LCD_LED=y
+ # CONFIG_PDC_CHASSIS is not set
+ 
+ #
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# PC-card bridges
++#
++
++#
++# PCI Hotplug Support
++#
++
++#
+ # Executable file formats
+ #
+ CONFIG_BINFMT_ELF=y
+-# CONFIG_BINFMT_MISC is not set
++CONFIG_BINFMT_MISC=m
+ 
+ #
+ # Device Drivers
+@@ -80,7 +110,10 @@
+ #
+ # Generic Driver Options
+ #
+-CONFIG_DEBUG_DRIVER=y
++CONFIG_STANDALONE=y
++# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++CONFIG_FW_LOADER=m
++# CONFIG_DEBUG_DRIVER is not set
+ 
+ #
+ # Memory Technology Devices (MTD)
+@@ -91,9 +124,10 @@
+ # Parallel port support
+ #
+ CONFIG_PARPORT=y
+-CONFIG_PARPORT_PC=y
+-CONFIG_PARPORT_PC_CML1=y
+-# CONFIG_PARPORT_SERIAL is not set
++CONFIG_PARPORT_PC=m
++CONFIG_PARPORT_PC_CML1=m
++# CONFIG_PARPORT_PC_FIFO is not set
++# CONFIG_PARPORT_PC_SUPERIO is not set
+ CONFIG_PARPORT_GSC=y
+ # CONFIG_PARPORT_OTHER is not set
+ # CONFIG_PARPORT_1284 is not set
+@@ -110,7 +144,20 @@
+ CONFIG_BLK_DEV_LOOP=y
+ CONFIG_BLK_DEV_CRYPTOLOOP=y
+ # CONFIG_BLK_DEV_NBD is not set
+-# CONFIG_BLK_DEV_RAM is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=6144
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_CDROM_PKTCDVD is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
+ 
+ #
+ # ATA/ATAPI/MFM/RLL support
+@@ -137,7 +184,6 @@
+ # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+ #
+ # CONFIG_SCSI_MULTI_LUN is not set
+-# CONFIG_SCSI_REPORT_LUNS is not set
+ # CONFIG_SCSI_CONSTANTS is not set
+ # CONFIG_SCSI_LOGGING is not set
+ 
+@@ -145,31 +191,33 @@
+ # SCSI Transport Attributes
+ #
+ CONFIG_SCSI_SPI_ATTRS=y
+-CONFIG_SCSI_FC_ATTRS=y
++# CONFIG_SCSI_FC_ATTRS is not set
+ 
+ #
+ # SCSI low-level drivers
+ #
+-# CONFIG_SCSI_AIC7XXX_OLD is not set
+-# CONFIG_SCSI_EATA_PIO is not set
++# CONFIG_SCSI_SATA is not set
+ # CONFIG_SCSI_PPA is not set
+ # CONFIG_SCSI_IMM is not set
+ CONFIG_SCSI_LASI700=y
+ CONFIG_53C700_MEM_MAPPED=y
+ CONFIG_53C700_LE_ON_BE=y
+ # CONFIG_SCSI_ZALON is not set
+-# CONFIG_SCSI_DEBUG is not set
++CONFIG_SCSI_DEBUG=m
+ 
+ #
+ # Multi-device support (RAID and LVM)
+ #
+ CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=y
+-CONFIG_MD_RAID0=y
+-CONFIG_MD_RAID1=y
+-CONFIG_MD_RAID5=y
++CONFIG_BLK_DEV_MD=m
++CONFIG_MD_LINEAR=m
++CONFIG_MD_RAID0=m
++CONFIG_MD_RAID1=m
++# CONFIG_MD_RAID10 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_RAID6 is not set
+ # CONFIG_MD_MULTIPATH is not set
++# CONFIG_MD_FAULTY is not set
+ # CONFIG_BLK_DEV_DM is not set
+ 
+ #
+@@ -197,49 +245,151 @@
+ CONFIG_PACKET_MMAP=y
+ CONFIG_NETLINK_DEV=y
+ CONFIG_UNIX=y
+-# CONFIG_NET_KEY is not set
++CONFIG_NET_KEY=m
+ CONFIG_INET=y
+ CONFIG_IP_MULTICAST=y
+ # CONFIG_IP_ADVANCED_ROUTER is not set
+ CONFIG_IP_PNP=y
+-# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_DHCP=y
+ CONFIG_IP_PNP_BOOTP=y
+ # CONFIG_IP_PNP_RARP is not set
+ # CONFIG_NET_IPIP is not set
+ # CONFIG_NET_IPGRE is not set
+ # CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
+ # CONFIG_SYN_COOKIES is not set
+-# CONFIG_INET_AH is not set
+-# CONFIG_INET_ESP is not set
++CONFIG_INET_AH=m
++CONFIG_INET_ESP=m
+ # CONFIG_INET_IPCOMP is not set
+-# CONFIG_DECNET is not set
++CONFIG_INET_TUNNEL=m
++CONFIG_IP_TCPDIAG=y
++# CONFIG_IP_TCPDIAG_IPV6 is not set
++
++#
++# IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++
++#
++# IP: Netfilter Configuration
++#
++CONFIG_IP_NF_CONNTRACK=m
++# CONFIG_IP_NF_CT_ACCT is not set
++CONFIG_IP_NF_CONNTRACK_MARK=y
++CONFIG_IP_NF_CT_PROTO_SCTP=m
++CONFIG_IP_NF_FTP=m
++CONFIG_IP_NF_IRC=m
++CONFIG_IP_NF_TFTP=m
++CONFIG_IP_NF_AMANDA=m
++CONFIG_IP_NF_QUEUE=m
++CONFIG_IP_NF_IPTABLES=m
++CONFIG_IP_NF_MATCH_LIMIT=m
++CONFIG_IP_NF_MATCH_IPRANGE=m
++CONFIG_IP_NF_MATCH_MAC=m
++CONFIG_IP_NF_MATCH_PKTTYPE=m
++CONFIG_IP_NF_MATCH_MARK=m
++CONFIG_IP_NF_MATCH_MULTIPORT=m
++CONFIG_IP_NF_MATCH_TOS=m
++CONFIG_IP_NF_MATCH_RECENT=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_DSCP=m
++CONFIG_IP_NF_MATCH_AH_ESP=m
++CONFIG_IP_NF_MATCH_LENGTH=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_MATCH_TCPMSS=m
++CONFIG_IP_NF_MATCH_HELPER=m
++CONFIG_IP_NF_MATCH_STATE=m
++CONFIG_IP_NF_MATCH_CONNTRACK=m
++CONFIG_IP_NF_MATCH_OWNER=m
++# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
++# CONFIG_IP_NF_MATCH_REALM is not set
++CONFIG_IP_NF_MATCH_SCTP=m
++CONFIG_IP_NF_MATCH_COMMENT=m
++CONFIG_IP_NF_MATCH_CONNMARK=m
++CONFIG_IP_NF_MATCH_HASHLIMIT=m
++CONFIG_IP_NF_FILTER=m
++CONFIG_IP_NF_TARGET_REJECT=m
++CONFIG_IP_NF_TARGET_LOG=m
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_IP_NF_TARGET_TCPMSS=m
++CONFIG_IP_NF_NAT=m
++CONFIG_IP_NF_NAT_NEEDED=y
++CONFIG_IP_NF_TARGET_MASQUERADE=m
++CONFIG_IP_NF_TARGET_REDIRECT=m
++CONFIG_IP_NF_TARGET_NETMAP=m
++CONFIG_IP_NF_TARGET_SAME=m
++# CONFIG_IP_NF_NAT_LOCAL is not set
++CONFIG_IP_NF_NAT_SNMP_BASIC=m
++CONFIG_IP_NF_NAT_IRC=m
++CONFIG_IP_NF_NAT_FTP=m
++CONFIG_IP_NF_NAT_TFTP=m
++CONFIG_IP_NF_NAT_AMANDA=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_TOS=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_DSCP=m
++CONFIG_IP_NF_TARGET_MARK=m
++CONFIG_IP_NF_TARGET_CLASSIFY=m
++CONFIG_IP_NF_TARGET_CONNMARK=m
++CONFIG_IP_NF_TARGET_CLUSTERIP=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_TARGET_NOTRACK=m
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++CONFIG_XFRM=y
++CONFIG_XFRM_USER=m
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++# CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
+-# CONFIG_NETFILTER is not set
+ # CONFIG_VLAN_8021Q is not set
+-# CONFIG_LLC2 is not set
++# CONFIG_DECNET is not set
++CONFIG_LLC=m
++CONFIG_LLC2=m
+ # 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
++# CONFIG_NET_CLS_ROUTE is not set
+ 
+ #
+ # Network testing
+ #
+-# CONFIG_NET_PKTGEN is not set
++CONFIG_NET_PKTGEN=m
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
+ CONFIG_NETDEVICES=y
+-# CONFIG_DUMMY is not set
+-# CONFIG_BONDING is not set
++CONFIG_DUMMY=m
++CONFIG_BONDING=m
+ # CONFIG_EQUALIZER is not set
+-# CONFIG_TUN is not set
++CONFIG_TUN=m
++# CONFIG_ETHERTAP is not set
+ 
+ #
+ # Ethernet (10 or 100Mbit)
+ #
+ CONFIG_NET_ETHERNET=y
+-# CONFIG_MII is not set
++CONFIG_MII=m
+ CONFIG_LASI_82596=y
+ 
+ #
+@@ -249,14 +399,10 @@
+ #
+ # Ethernet (10000 Mbit)
+ #
+-# CONFIG_PLIP is not set
+-CONFIG_PPP=y
+-# CONFIG_PPP_FILTER is not set
+-# CONFIG_PPP_ASYNC is not set
+-# CONFIG_PPP_SYNC_TTY is not set
+-# CONFIG_PPP_DEFLATE is not set
+-# CONFIG_PPP_BSDCOMP is not set
+-# CONFIG_SLIP is not set
++
++#
++# Token Ring devices
++#
+ 
+ #
+ # Wireless LAN (non-hamradio)
+@@ -267,32 +413,24 @@
+ # Obsolete Wireless cards support (pre-802.11)
+ #
+ # CONFIG_STRIP is not set
+-
+-#
+-# Token Ring devices
+-#
++# CONFIG_ATMEL is not set
+ 
+ #
+ # Wan interfaces
+ #
+ # CONFIG_WAN is not set
+-
+-#
+-# Amateur Radio support
+-#
+-# CONFIG_HAMRADIO is not set
+-
+-#
+-# IrDA (infrared) support
+-#
+-# CONFIG_IRDA is not set
+-
+-#
+-# Bluetooth support
+-#
+-# CONFIG_BT is not set
+-# CONFIG_NETPOLL is not set
+-# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=m
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPPOE=m
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
+ 
+ #
+ # ISDN subsystem
+@@ -318,7 +456,7 @@
+ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+ # CONFIG_INPUT_JOYDEV is not set
+ # CONFIG_INPUT_TSDEV is not set
+-CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVDEV is not set
+ # CONFIG_INPUT_EVBUG is not set
+ 
+ #
+@@ -327,33 +465,33 @@
+ # CONFIG_GAMEPORT is not set
+ CONFIG_SOUND_GAMEPORT=y
+ CONFIG_SERIO=y
+-# CONFIG_SERIO_SERPORT is not set
++CONFIG_SERIO_SERPORT=y
+ # CONFIG_SERIO_PARKBD is not set
+ CONFIG_SERIO_GSCPS2=y
+-# CONFIG_HP_SDC is not set
++CONFIG_HP_SDC=y
++CONFIG_HIL_MLC=y
++# CONFIG_SERIO_RAW is not set
+ 
+ #
+ # Input Device Drivers
+ #
+ CONFIG_INPUT_KEYBOARD=y
+-# CONFIG_KEYBOARD_ATKBD is not set
++CONFIG_KEYBOARD_ATKBD=y
++CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
++# CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES is not set
+ # CONFIG_KEYBOARD_SUNKBD is not set
+ # CONFIG_KEYBOARD_LKKBD is not set
+ # CONFIG_KEYBOARD_XTKBD is not set
+ # CONFIG_KEYBOARD_NEWTON is not set
+-# CONFIG_KEYBOARD_HIL_OLD is not set
+ # CONFIG_KEYBOARD_HIL is not set
+ CONFIG_INPUT_MOUSE=y
+-# CONFIG_MOUSE_PS2 is not set
+-# CONFIG_MOUSE_SERIAL is not set
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_SERIAL=m
+ # CONFIG_MOUSE_VSXXXAA is not set
+-# CONFIG_MOUSE_HIL is not set
++CONFIG_MOUSE_HIL=m
+ # CONFIG_INPUT_JOYSTICK is not set
+ # CONFIG_INPUT_TOUCHSCREEN is not set
+-CONFIG_INPUT_MISC=y
+-# CONFIG_INPUT_PCSPKR is not set
+-# CONFIG_INPUT_UINPUT is not set
+-# CONFIG_HP_SDC_RTC is not set
++# CONFIG_INPUT_MISC is not set
+ 
+ #
+ # Character devices
+@@ -368,7 +506,7 @@
+ #
+ CONFIG_SERIAL_8250=y
+ CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_SERIAL_8250_NR_UARTS=4
++CONFIG_SERIAL_8250_NR_UARTS=8
+ CONFIG_SERIAL_8250_EXTENDED=y
+ CONFIG_SERIAL_8250_MANY_PORTS=y
+ CONFIG_SERIAL_8250_SHARE_IRQ=y
+@@ -380,17 +518,16 @@
+ # Non-8250 serial port support
+ #
+ # CONFIG_SERIAL_MUX is not set
+-# CONFIG_PDC_CONSOLE is not set
++CONFIG_PDC_CONSOLE=y
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
+ CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
+-CONFIG_PRINTER=y
++CONFIG_LEGACY_PTY_COUNT=64
++CONFIG_PRINTER=m
+ # CONFIG_LP_CONSOLE is not set
+-# CONFIG_PPDEV is not set
++CONFIG_PPDEV=m
+ # CONFIG_TIPAR is not set
+-# CONFIG_QIC02_TAPE is not set
+ 
+ #
+ # IPMI
+@@ -402,18 +539,17 @@
+ #
+ # CONFIG_WATCHDOG is not set
+ CONFIG_GEN_RTC=y
+-# CONFIG_GEN_RTC_X is not set
++CONFIG_GEN_RTC_X=y
+ # CONFIG_DTLK is not set
+ # CONFIG_R3964 is not set
+-# CONFIG_APPLICOM is not set
+ 
+ #
+ # Ftape, the floppy tape device driver
+ #
+-# CONFIG_FTAPE is not set
+ # CONFIG_AGP is not set
+ # CONFIG_DRM is not set
+-# CONFIG_RAW_DRIVER is not set
++CONFIG_RAW_DRIVER=y
++CONFIG_MAX_RAW_DEVS=256
+ 
+ #
+ # I2C support
+@@ -421,6 +557,11 @@
+ # CONFIG_I2C is not set
+ 
+ #
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
+ # Misc devices
+ #
+ 
+@@ -438,40 +579,86 @@
+ # Graphics support
+ #
+ CONFIG_FB=y
++CONFIG_FB_MODE_HELPERS=y
++CONFIG_FB_TILEBLITTING=y
+ CONFIG_FB_STI=y
+ # CONFIG_FB_VIRTUAL is not set
+ 
+ #
+ # Console display driver support
+ #
+-# CONFIG_MDA_CONSOLE is not set
+ CONFIG_STI_CONSOLE=y
+-CONFIG_DUMMY_CONSOLE_COLUMNS=160
+-CONFIG_DUMMY_CONSOLE_ROWS=64
++CONFIG_DUMMY_CONSOLE_COLUMNS=128
++CONFIG_DUMMY_CONSOLE_ROWS=48
+ CONFIG_DUMMY_CONSOLE=y
+ CONFIG_FRAMEBUFFER_CONSOLE=y
+-CONFIG_PCI_CONSOLE=y
+-# CONFIG_FONTS is not set
++CONFIG_FONTS=y
+ CONFIG_FONT_8x8=y
+ CONFIG_FONT_8x16=y
++# CONFIG_FONT_6x11 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
+ 
+ #
+ # Logo configuration
+ #
+ CONFIG_LOGO=y
+-CONFIG_LOGO_LINUX_MONO=y
+-CONFIG_LOGO_LINUX_VGA16=y
+-CONFIG_LOGO_LINUX_CLUT224=y
++# CONFIG_LOGO_LINUX_MONO is not set
++# CONFIG_LOGO_LINUX_VGA16 is not set
++# CONFIG_LOGO_LINUX_CLUT224 is not set
+ CONFIG_LOGO_PARISC_CLUT224=y
+ 
+ #
+ # Sound
+ #
+-# CONFIG_SOUND is not set
++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_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
++
++#
++# GSC devices
++#
++CONFIG_SND_HARMONY=y
++
++#
++# Open Sound System
++#
++# CONFIG_SOUND_PRIME is not set
+ 
+ #
+ # USB support
+ #
++# CONFIG_USB_ARCH_HAS_HCD is not set
++# CONFIG_USB_ARCH_HAS_OHCI is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
++#
+ 
+ #
+ # USB Gadget Support
+@@ -488,11 +675,20 @@
+ CONFIG_JBD=y
+ # CONFIG_JBD_DEBUG is not set
+ # CONFIG_REISERFS_FS is not set
+-# CONFIG_JFS_FS is not set
+-# CONFIG_XFS_FS is not set
++CONFIG_JFS_FS=m
++# CONFIG_JFS_POSIX_ACL is not set
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++CONFIG_FS_POSIX_ACL=y
++CONFIG_XFS_FS=m
++# CONFIG_XFS_RT is not set
++# CONFIG_XFS_QUOTA is not set
++# CONFIG_XFS_SECURITY is not set
++# CONFIG_XFS_POSIX_ACL is not set
+ # CONFIG_MINIX_FS is not set
+ # CONFIG_ROMFS_FS is not set
+ # CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
+ # CONFIG_AUTOFS_FS is not set
+ # CONFIG_AUTOFS4_FS is not set
+ 
+@@ -502,12 +698,17 @@
+ CONFIG_ISO9660_FS=y
+ CONFIG_JOLIET=y
+ # CONFIG_ZISOFS is not set
+-# CONFIG_UDF_FS is not set
++CONFIG_UDF_FS=m
++CONFIG_UDF_NLS=y
+ 
+ #
+ # DOS/FAT/NT Filesystems
+ #
+-# CONFIG_FAT_FS is not set
++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
+ 
+ #
+@@ -515,38 +716,63 @@
+ #
+ CONFIG_PROC_FS=y
+ CONFIG_PROC_KCORE=y
++CONFIG_SYSFS=y
++# CONFIG_DEVFS_FS is not set
+ # CONFIG_DEVPTS_FS_XATTR is not set
+ CONFIG_TMPFS=y
++CONFIG_TMPFS_XATTR=y
++# CONFIG_TMPFS_SECURITY is not set
++# CONFIG_HUGETLBFS is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ CONFIG_RAMFS=y
+ 
+ #
+ # 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
++CONFIG_UFS_FS=m
++# CONFIG_UFS_FS_WRITE is not set
+ 
+ #
+ # Network File Systems
+ #
+ CONFIG_NFS_FS=y
+ CONFIG_NFS_V3=y
+-CONFIG_NFSD=y
++CONFIG_NFS_V4=y
++CONFIG_NFS_DIRECTIO=y
++CONFIG_NFSD=m
+ CONFIG_NFSD_V3=y
++CONFIG_NFSD_V4=y
++CONFIG_NFSD_TCP=y
+ CONFIG_ROOT_NFS=y
+ CONFIG_LOCKD=y
+ CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=y
++CONFIG_EXPORTFS=m
+ CONFIG_SUNRPC=y
+-# CONFIG_SMB_FS is not set
+-# CONFIG_CIFS is not set
++CONFIG_SUNRPC_GSS=y
++CONFIG_RPCSEC_GSS_KRB5=y
++CONFIG_RPCSEC_GSS_SPKM3=m
++CONFIG_SMB_FS=m
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp437"
++CONFIG_CIFS=m
++# CONFIG_CIFS_STATS is not set
++# CONFIG_CIFS_XATTR is not set
++# CONFIG_CIFS_POSIX is not set
+ # CONFIG_NCP_FS is not set
+ # CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
+ 
+ #
+ # Partition Types
+@@ -559,85 +785,102 @@
+ #
+ CONFIG_NLS=y
+ 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_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
++CONFIG_NLS_CODEPAGE_437=m
++CONFIG_NLS_CODEPAGE_737=m
++CONFIG_NLS_CODEPAGE_775=m
++CONFIG_NLS_CODEPAGE_850=m
++CONFIG_NLS_CODEPAGE_852=m
++CONFIG_NLS_CODEPAGE_855=m
++CONFIG_NLS_CODEPAGE_857=m
++CONFIG_NLS_CODEPAGE_860=m
++CONFIG_NLS_CODEPAGE_861=m
++CONFIG_NLS_CODEPAGE_862=m
++CONFIG_NLS_CODEPAGE_863=m
++CONFIG_NLS_CODEPAGE_864=m
++CONFIG_NLS_CODEPAGE_865=m
++CONFIG_NLS_CODEPAGE_866=m
++CONFIG_NLS_CODEPAGE_869=m
++CONFIG_NLS_CODEPAGE_936=m
++CONFIG_NLS_CODEPAGE_950=m
++CONFIG_NLS_CODEPAGE_932=m
++CONFIG_NLS_CODEPAGE_949=m
++CONFIG_NLS_CODEPAGE_874=m
++CONFIG_NLS_ISO8859_8=m
++CONFIG_NLS_CODEPAGE_1250=m
++CONFIG_NLS_CODEPAGE_1251=m
++CONFIG_NLS_ASCII=m
++CONFIG_NLS_ISO8859_1=m
++CONFIG_NLS_ISO8859_2=m
++CONFIG_NLS_ISO8859_3=m
++CONFIG_NLS_ISO8859_4=m
++CONFIG_NLS_ISO8859_5=m
++CONFIG_NLS_ISO8859_6=m
++CONFIG_NLS_ISO8859_7=m
++CONFIG_NLS_ISO8859_9=m
++CONFIG_NLS_ISO8859_13=m
++CONFIG_NLS_ISO8859_14=m
++CONFIG_NLS_ISO8859_15=m
++CONFIG_NLS_KOI8_R=m
++CONFIG_NLS_KOI8_U=m
++CONFIG_NLS_UTF8=m
++
++#
++# Profiling support
++#
++CONFIG_PROFILING=y
++CONFIG_OPROFILE=m
+ 
+ #
+ # Kernel hacking
+ #
+ CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SLAB is not set
+ CONFIG_MAGIC_SYSRQ=y
+-CONFIG_FRAME_POINTER=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_KOBJECT is not set
+ # CONFIG_DEBUG_INFO is not set
+ 
+ #
+ # Security options
+ #
+-CONFIG_SECURITY=y
+-# CONFIG_SECURITY_NETWORK is not set
+-CONFIG_SECURITY_CAPABILITIES=y
+-# CONFIG_SECURITY_SELINUX is not set
++CONFIG_KEYS=y
++CONFIG_KEYS_DEBUG_PROC_KEYS=y
++# CONFIG_SECURITY is not set
+ 
+ #
+ # Cryptographic options
+ #
+ CONFIG_CRYPTO=y
+-# CONFIG_CRYPTO_HMAC is not set
+-# CONFIG_CRYPTO_NULL is not set
+-# CONFIG_CRYPTO_MD4 is not set
+-# CONFIG_CRYPTO_MD5 is not set
+-# CONFIG_CRYPTO_SHA1 is not set
+-# CONFIG_CRYPTO_SHA256 is not set
+-# CONFIG_CRYPTO_SHA512 is not set
+-# CONFIG_CRYPTO_DES is not set
+-# CONFIG_CRYPTO_BLOWFISH is not set
+-# CONFIG_CRYPTO_TWOFISH is not set
+-# CONFIG_CRYPTO_SERPENT is not set
+-# CONFIG_CRYPTO_AES is not set
+-# CONFIG_CRYPTO_CAST5 is not set
+-# CONFIG_CRYPTO_CAST6 is not set
+-# CONFIG_CRYPTO_ARC4 is not set
+-# CONFIG_CRYPTO_DEFLATE is not set
+-# CONFIG_CRYPTO_MICHAEL_MIC is not set
+-# CONFIG_CRYPTO_TEST is not set
++CONFIG_CRYPTO_HMAC=y
++CONFIG_CRYPTO_NULL=m
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_WP512=m
++CONFIG_CRYPTO_DES=y
++CONFIG_CRYPTO_BLOWFISH=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_AES=m
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_ARC4=m
++CONFIG_CRYPTO_KHAZAD=m
++CONFIG_CRYPTO_ANUBIS=m
++CONFIG_CRYPTO_DEFLATE=m
++CONFIG_CRYPTO_MICHAEL_MIC=m
++CONFIG_CRYPTO_CRC32C=m
++CONFIG_CRYPTO_TEST=m
+ 
+ #
+ # Library routines
+ #
+-# CONFIG_CRC32 is not set
++CONFIG_CRC_CCITT=m
++CONFIG_CRC32=y
++CONFIG_LIBCRC32C=m
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
+Index: debian-kernel-hppa-2.6.10/arch/parisc/configs/a500_defconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/configs/a500_defconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/configs/a500_defconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -1,5 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
++# Linux kernel version: 2.6.10-rc1-pa10
++# Thu Nov  4 15:09:46 2004
+ #
+ CONFIG_PARISC=y
+ CONFIG_MMU=y
+@@ -17,6 +19,7 @@
+ #
+ # General setup
+ #
++CONFIG_LOCALVERSION=""
+ CONFIG_SWAP=y
+ CONFIG_SYSVIPC=y
+ CONFIG_POSIX_MQUEUE=y
+@@ -25,6 +28,7 @@
+ # CONFIG_AUDIT is not set
+ CONFIG_LOG_BUF_SHIFT=16
+ CONFIG_HOTPLUG=y
++CONFIG_KOBJECT_UEVENT=y
+ CONFIG_IKCONFIG=y
+ CONFIG_IKCONFIG_PROC=y
+ CONFIG_EMBEDDED=y
+@@ -33,11 +37,9 @@
+ # CONFIG_KALLSYMS_EXTRA_PASS is not set
+ CONFIG_FUTEX=y
+ CONFIG_EPOLL=y
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+ # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SHMEM=y
++# CONFIG_TINY_SHMEM is not set
+ 
+ #
+ # Loadable module support
+@@ -47,6 +49,7 @@
+ CONFIG_MODULE_FORCE_UNLOAD=y
+ CONFIG_OBSOLETE_MODPARM=y
+ # CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
+ CONFIG_KMOD=y
+ CONFIG_STOP_MACHINE=y
+ 
+@@ -64,10 +67,10 @@
+ CONFIG_64BIT=y
+ CONFIG_SMP=y
+ CONFIG_HOTPLUG_CPU=y
+-# CONFIG_DISCONTIGMEM is not set
++CONFIG_DISCONTIGMEM=y
+ # CONFIG_PREEMPT is not set
+ CONFIG_COMPAT=y
+-CONFIG_NR_CPUS=4
++CONFIG_NR_CPUS=8
+ 
+ #
+ # Bus options (PCI, PCMCIA, EISA, GSC, ISA)
+@@ -84,15 +87,21 @@
+ CONFIG_PDC_CHASSIS=y
+ 
+ #
+-# PCMCIA/CardBus support
++# PCCARD (PCMCIA/CardBus) support
+ #
++CONFIG_PCCARD=m
++# CONFIG_PCMCIA_DEBUG is not set
++# CONFIG_PCMCIA_OBSOLETE is not set
+ CONFIG_PCMCIA=m
+-CONFIG_PCMCIA_DEBUG=y
+-CONFIG_YENTA=m
+ CONFIG_CARDBUS=y
+-# CONFIG_PD6729 is not set
+-# CONFIG_I82092 is not set
+-# CONFIG_TCIC is not set
++
++#
++# PC-card bridges
++#
++CONFIG_YENTA=m
++CONFIG_PD6729=m
++CONFIG_I82092=m
++CONFIG_TCIC=m
+ 
+ #
+ # PCI Hotplug Support
+@@ -146,6 +155,16 @@
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_SIZE=6144
+ CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_CDROM_PKTCDVD is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
+ 
+ #
+ # ATA/ATAPI/MFM/RLL support
+@@ -192,7 +211,8 @@
+ # CONFIG_SCSI_AIC7XXX_OLD is not set
+ # CONFIG_SCSI_AIC79XX is not set
+ # CONFIG_SCSI_ADVANSYS is not set
+-# CONFIG_SCSI_MEGARAID is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
+ # CONFIG_SCSI_SATA is not set
+ # CONFIG_SCSI_BUSLOGIC is not set
+ # CONFIG_SCSI_CPQFCTS is not set
+@@ -216,6 +236,7 @@
+ CONFIG_SCSI_QLOGIC_FC=m
+ # CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
+ CONFIG_SCSI_QLOGIC_1280=m
++# CONFIG_SCSI_QLOGIC_1280_1040 is not set
+ CONFIG_SCSI_QLA2XXX=y
+ # CONFIG_SCSI_QLA21XX is not set
+ # CONFIG_SCSI_QLA22XX is not set
+@@ -230,9 +251,9 @@
+ #
+ # PCMCIA SCSI adapter support
+ #
+-# CONFIG_PCMCIA_FDOMAIN is not set
+-# CONFIG_PCMCIA_QLOGIC is not set
+-# CONFIG_PCMCIA_SYM53C500 is not set
++CONFIG_PCMCIA_FDOMAIN=m
++CONFIG_PCMCIA_QLOGIC=m
++CONFIG_PCMCIA_SYM53C500=m
+ 
+ #
+ # Multi-device support (RAID and LVM)
+@@ -242,6 +263,7 @@
+ CONFIG_MD_LINEAR=y
+ CONFIG_MD_RAID0=y
+ CONFIG_MD_RAID1=y
++# CONFIG_MD_RAID10 is not set
+ # CONFIG_MD_RAID5 is not set
+ # CONFIG_MD_RAID6 is not set
+ # CONFIG_MD_MULTIPATH is not set
+@@ -252,7 +274,6 @@
+ #
+ CONFIG_FUSION=m
+ CONFIG_FUSION_MAX_SGE=40
+-CONFIG_FUSION_ISENSE=m
+ CONFIG_FUSION_CTL=m
+ 
+ #
+@@ -293,6 +314,7 @@
+ CONFIG_INET_AH=m
+ CONFIG_INET_ESP=m
+ # CONFIG_INET_IPCOMP is not set
++CONFIG_INET_TUNNEL=m
+ 
+ #
+ # IP: Virtual Server Configuration
+@@ -306,6 +328,9 @@
+ # IP: Netfilter Configuration
+ #
+ CONFIG_IP_NF_CONNTRACK=m
++# CONFIG_IP_NF_CT_ACCT is not set
++CONFIG_IP_NF_CONNTRACK_MARK=y
++CONFIG_IP_NF_CT_PROTO_SCTP=m
+ CONFIG_IP_NF_FTP=m
+ CONFIG_IP_NF_IRC=m
+ CONFIG_IP_NF_TFTP=m
+@@ -330,8 +355,17 @@
+ CONFIG_IP_NF_MATCH_STATE=m
+ CONFIG_IP_NF_MATCH_CONNTRACK=m
+ CONFIG_IP_NF_MATCH_OWNER=m
++# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
++# CONFIG_IP_NF_MATCH_REALM is not set
++CONFIG_IP_NF_MATCH_SCTP=m
++CONFIG_IP_NF_MATCH_COMMENT=m
++CONFIG_IP_NF_MATCH_CONNMARK=m
++CONFIG_IP_NF_MATCH_HASHLIMIT=m
+ CONFIG_IP_NF_FILTER=m
+ CONFIG_IP_NF_TARGET_REJECT=m
++CONFIG_IP_NF_TARGET_LOG=m
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_IP_NF_TARGET_TCPMSS=m
+ CONFIG_IP_NF_NAT=m
+ CONFIG_IP_NF_NAT_NEEDED=y
+ CONFIG_IP_NF_TARGET_MASQUERADE=m
+@@ -350,18 +384,15 @@
+ CONFIG_IP_NF_TARGET_DSCP=m
+ CONFIG_IP_NF_TARGET_MARK=m
+ CONFIG_IP_NF_TARGET_CLASSIFY=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_IP_NF_TARGET_TCPMSS=m
++CONFIG_IP_NF_TARGET_CONNMARK=m
++CONFIG_IP_NF_TARGET_CLUSTERIP=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_TARGET_NOTRACK=m
+ CONFIG_IP_NF_ARPTABLES=m
+ CONFIG_IP_NF_ARPFILTER=m
+ CONFIG_IP_NF_ARP_MANGLE=m
+ # CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+ # CONFIG_IP_NF_COMPAT_IPFWADM is not set
+-CONFIG_IP_NF_TARGET_NOTRACK=m
+-CONFIG_IP_NF_RAW=m
+-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+-# CONFIG_IP_NF_MATCH_REALM is not set
+ CONFIG_XFRM=y
+ CONFIG_XFRM_USER=m
+ 
+@@ -435,7 +466,7 @@
+ # CONFIG_WINBOND_840 is not set
+ # CONFIG_DM9102 is not set
+ CONFIG_PCMCIA_XIRCOM=m
+-CONFIG_PCMCIA_XIRTULIP=m
++# CONFIG_PCMCIA_XIRTULIP is not set
+ CONFIG_HP100=m
+ CONFIG_NET_PCI=y
+ CONFIG_PCNET32=m
+@@ -501,13 +532,13 @@
+ # Obsolete Wireless cards support (pre-802.11)
+ #
+ # CONFIG_STRIP is not set
+-CONFIG_PCMCIA_WAVELAN=m
++# CONFIG_PCMCIA_WAVELAN is not set
+ CONFIG_PCMCIA_NETWAVE=m
+ 
+ #
+ # Wireless 802.11 Frequency Hopping cards support
+ #
+-# CONFIG_PCMCIA_RAYCS is not set
++CONFIG_PCMCIA_RAYCS=m
+ 
+ #
+ # Wireless 802.11b ISA/PCI cards support
+@@ -523,7 +554,7 @@
+ #
+ CONFIG_PCMCIA_HERMES=m
+ CONFIG_AIRO_CS=m
+-# CONFIG_PCMCIA_WL3501 is not set
++CONFIG_PCMCIA_WL3501=m
+ 
+ #
+ # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+@@ -616,7 +647,7 @@
+ #
+ CONFIG_SERIAL_8250=y
+ CONFIG_SERIAL_8250_CONSOLE=y
+-# CONFIG_SERIAL_8250_CS is not set
++CONFIG_SERIAL_8250_CS=m
+ CONFIG_SERIAL_8250_NR_UARTS=8
+ CONFIG_SERIAL_8250_EXTENDED=y
+ CONFIG_SERIAL_8250_MANY_PORTS=y
+@@ -634,7 +665,6 @@
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
+ # CONFIG_LEGACY_PTYS is not set
+-# CONFIG_QIC02_TAPE is not set
+ 
+ #
+ # IPMI
+@@ -696,7 +726,6 @@
+ #
+ # Console display driver support
+ #
+-# CONFIG_MDA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE_COLUMNS=160
+ CONFIG_DUMMY_CONSOLE_ROWS=64
+ CONFIG_DUMMY_CONSOLE=y
+@@ -730,6 +759,7 @@
+ # CONFIG_JFS_POSIX_ACL is not set
+ # CONFIG_JFS_DEBUG is not set
+ # CONFIG_JFS_STATISTICS is not set
++CONFIG_FS_POSIX_ACL=y
+ CONFIG_XFS_FS=m
+ # CONFIG_XFS_RT is not set
+ # CONFIG_XFS_QUOTA is not set
+@@ -808,6 +838,7 @@
+ CONFIG_SUNRPC=m
+ CONFIG_SUNRPC_GSS=m
+ CONFIG_RPCSEC_GSS_KRB5=m
++CONFIG_RPCSEC_GSS_SPKM3=m
+ CONFIG_SMB_FS=m
+ CONFIG_SMB_NLS_DEFAULT=y
+ CONFIG_SMB_NLS_REMOTE="cp437"
+@@ -879,16 +910,18 @@
+ # Kernel hacking
+ #
+ CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SLAB is not set
+ CONFIG_MAGIC_SYSRQ=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_RWLOCK is not set
+-# CONFIG_FRAME_POINTER is not set
+ # CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_RWLOCK is not set
+ 
+ #
+ # Security options
+ #
++CONFIG_KEYS=y
++CONFIG_KEYS_DEBUG_PROC_KEYS=y
+ # CONFIG_SECURITY is not set
+ 
+ #
+@@ -902,6 +935,7 @@
+ CONFIG_CRYPTO_SHA1=m
+ CONFIG_CRYPTO_SHA256=m
+ CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_WP512=m
+ CONFIG_CRYPTO_DES=m
+ CONFIG_CRYPTO_BLOWFISH=m
+ CONFIG_CRYPTO_TWOFISH=m
+Index: debian-kernel-hppa-2.6.10/arch/parisc/configs/c3000_defconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/configs/c3000_defconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/configs/c3000_defconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -481,10 +481,10 @@
+ CONFIG_DE2104X=m
+ CONFIG_TULIP=y
+ # CONFIG_TULIP_MWI is not set
+-# CONFIG_TULIP_MMIO is not set
++CONFIG_TULIP_MMIO=y
+ # CONFIG_TULIP_NAPI is not set
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
++# CONFIG_DE4X5 is not set
++# CONFIG_WINBOND_840 is not set
+ # CONFIG_DM9102 is not set
+ CONFIG_PCMCIA_XIRCOM=m
+ CONFIG_PCMCIA_XIRTULIP=m
+Index: debian-kernel-hppa-2.6.10/arch/parisc/hpux/entry_hpux.S
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/hpux/entry_hpux.S	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/hpux/entry_hpux.S	2005-01-21 12:16:45.000000000 -0500
+@@ -227,7 +227,7 @@
+ 	ENTRY_NAME(hpux_unimplemented_wrapper)
+ 	ENTRY_NAME(hpux_unimplemented_wrapper)      /* 195 */
+ 	ENTRY_NAME(hpux_statfs)
+-	ENTRY_NAME(hpux_unimplemented_wrapper)
++	ENTRY_NAME(hpux_fstatfs)
+ 	ENTRY_NAME(hpux_unimplemented_wrapper)
+ 	ENTRY_NAME(hpux_unimplemented_wrapper)
+ 	ENTRY_NAME(sys_waitpid)	/* 200 */
+Index: debian-kernel-hppa-2.6.10/arch/parisc/hpux/sys_hpux.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/hpux/sys_hpux.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/hpux/sys_hpux.c	2005-01-21 12:16:45.000000000 -0500
+@@ -22,14 +22,16 @@
+  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  */
+ 
++#include <linux/file.h>
+ #include <linux/fs.h>
++#include <linux/namei.h>
+ #include <linux/sched.h>
+ #include <linux/slab.h>
+ #include <linux/smp_lock.h>
+ #include <linux/syscalls.h>
+ #include <linux/utsname.h>
+-#include <linux/vmalloc.h>
+ #include <linux/vfs.h>
++#include <linux/vmalloc.h>
+ 
+ #include <asm/errno.h>
+ #include <asm/pgalloc.h>
+@@ -65,7 +67,6 @@
+ 
+ int hpux_setpgrp(void)
+ {
+-	extern int sys_setpgid(int, int);
+ 	return sys_setpgid(0,0);
+ }
+ 
+@@ -133,7 +134,7 @@
+  *  aid in porting forward if and when sys_ustat() is changed from
+  *  its form in kernel 2.2.5.
+  */
+-static int hpux_ustat(dev_t dev, struct hpux_ustat *ubuf)
++static int hpux_ustat(dev_t dev, struct hpux_ustat __user *ubuf)
+ {
+ 	struct super_block *s;
+ 	struct hpux_ustat tmp;  /* Changed to hpux_ustat */
+@@ -148,14 +149,13 @@
+ 	if (err)
+ 		goto out;
+ 
+-	memset(&tmp,0,sizeof(struct hpux_ustat));  /* Changed to hpux_ustat */
++	memset(&tmp,0,sizeof(tmp));
+ 
+ 	tmp.f_tfree = (int32_t)sbuf.f_bfree;
+ 	tmp.f_tinode = (u_int32_t)sbuf.f_ffree;
+ 	tmp.f_blksize = (u_int32_t)sbuf.f_bsize;  /*  Added this line  */
+ 
+-	/* Changed to hpux_ustat:  */
+-	err = copy_to_user(ubuf,&tmp,sizeof(struct hpux_ustat)) ? -EFAULT : 0;
++	err = copy_to_user(ubuf, &tmp, sizeof(tmp)) ? -EFAULT : 0;
+ out:
+ 	return err;
+ }
+@@ -185,37 +185,62 @@
+      int16_t f_pad;
+ };
+ 
+-/* hpux statfs */
+-int hpux_statfs(const char *path, struct hpux_statfs *buf)
++static int vfs_statfs_hpux(struct super_block *sb, struct hpux_statfs *buf)
+ {
+-	int error;
+-	int len;
+-	char *kpath;
+-
+-	len = strlen_user((char *)path); 
+-
+-	kpath = (char *) kmalloc(len+1, GFP_KERNEL);
+-	if ( !kpath ) {
+-	printk(KERN_DEBUG "failed to kmalloc kpath\n");
+-	return 0;
+-	}
++	struct kstatfs st;
++	int retval;
++	
++	retval = vfs_statfs(sb, &st);
++	if (retval)
++		return retval;
++
++	memset(buf, 0, sizeof(*buf));
++	buf->f_type = st.f_type;
++	buf->f_bsize = st.f_bsize;
++	buf->f_blocks = st.f_blocks;
++	buf->f_bfree = st.f_bfree;
++	buf->f_bavail = st.f_bavail;
++	buf->f_files = st.f_files;
++	buf->f_ffree = st.f_ffree;
++	buf->f_fsid[0] = st.f_fsid.val[0];
++	buf->f_fsid[1] = st.f_fsid.val[1];
+ 
+-	if ( copy_from_user(kpath, (char *)path, len+1) ) {
+-	printk(KERN_DEBUG "failed to copy_from_user kpath\n");
+-	kfree(kpath);
+ 	return 0;
+-	}
+-
+-	printk(KERN_DEBUG "hpux_statfs(\"%s\",-)\n", kpath);
++}
+ 
+-	kfree(kpath);
++/* hpux statfs */
++asmlinkage long hpux_statfs(const char __user *path,
++						struct hpux_statfs __user *buf)
++{
++	struct nameidata nd;
++	int error;
+ 
+-	/* just fake it, beginning of structures match */
+-	error = sys_statfs(path, (struct statfs *) buf);
++	error = user_path_walk(path, &nd);
++	if (!error) {
++		struct hpux_statfs tmp;
++		error = vfs_statfs_hpux(nd.dentry->d_inode->i_sb, &tmp);
++		if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
++			error = -EFAULT;
++		path_release(&nd);
++	}
++	return error;
++}
+ 
+-	/* ignoring rest of statfs struct, but it should be zeros. Need to do 
+-		something with f_fsid[1], which is the fstype for sysfs */
++asmlinkage long hpux_fstatfs(unsigned int fd, struct hpux_statfs __user * buf)
++{
++	struct file *file;
++	struct hpux_statfs tmp;
++	int error;
+ 
++	error = -EBADF;
++	file = fget(fd);
++	if (!file)
++		goto out;
++	error = vfs_statfs_hpux(file->f_dentry->d_inode->i_sb, &tmp);
++	if (!error && copy_to_user(buf, &tmp, sizeof(tmp)))
++		error = -EFAULT;
++	fput(file);
++ out:
+ 	return error;
+ }
+ 
+@@ -671,8 +696,8 @@
+ 	"setdomainname",         
+ 	"async_daemon",          
+ 	"getdirentries",          /* 195 */
+-	"statfs",                
+-	"fstatfs",               
++	NULL,                
++	NULL,               
+ 	"vfsmount",              
+ 	NULL,                    
+ 	"waitpid",                /* 200 */
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/cache.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/cache.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/cache.c	2005-01-21 12:16:45.000000000 -0500
+@@ -55,6 +55,11 @@
+ {
+ 	on_each_cpu((void (*)(void *))flush_data_cache_local, NULL, 1, 1);
+ }
++void 
++flush_instruction_cache(void)
++{
++	on_each_cpu((void (*)(void *))flush_instruction_cache_local, NULL, 1, 1);
++}
+ #endif
+ 
+ void
+@@ -327,3 +332,35 @@
+ 	__clear_user_page_asm(page, vaddr);
+ 	purge_tlb_end();
+ }
++
++#define FLUSH_THRESHOLD 0x80000 /* 0.5MB */
++int parisc_cache_flush_threshold = FLUSH_THRESHOLD;
++
++void parisc_setup_cache_timing(void)
++{
++	unsigned long rangetime, alltime;
++	extern char _text;	/* start of kernel code, defined by linker */
++	extern char _end;	/* end of BSS, defined by linker */
++	unsigned long size;
++
++	alltime = mfctl(16);
++	flush_data_cache();
++	alltime = mfctl(16) - alltime;
++
++	size = (unsigned long)(&_end - _text);
++	rangetime = mfctl(16);
++	flush_kernel_dcache_range((unsigned long)&_text, size);
++	rangetime = mfctl(16) - rangetime;
++
++	printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
++		alltime, size, rangetime);
++
++	/* Racy, but if we see an intermediate value, it's ok too... */
++	parisc_cache_flush_threshold = size * alltime / rangetime;
++
++	parisc_cache_flush_threshold = (parisc_cache_flush_threshold + L1_CACHE_BYTES - 1) &~ (L1_CACHE_BYTES - 1); 
++	if (!parisc_cache_flush_threshold)
++		parisc_cache_flush_threshold = FLUSH_THRESHOLD;
++
++	printk("Setting cache flush threshold to %x (%d CPUs online)\n", parisc_cache_flush_threshold, num_online_cpus());
++}
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/drivers.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/drivers.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/drivers.c	2005-01-21 12:16:45.000000000 -0500
+@@ -10,9 +10,21 @@
+  * Copyright (c) 2001 Matthew Wilcox for Hewlett Packard
+  * Copyright (c) 2001 Helge Deller <deller at gmx.de>
+  * Copyright (c) 2001,2002 Ryan Bradetich 
++ * Copyright (c) 2004 Thibaut VARENE <varenet at parisc-linux.org>
+  * 
+  * The file handles registering devices and drivers, then matching them.
+  * It's the closest we get to a dating agency.
++ *
++ * If you're thinking about modifying this file, here are some gotchas to
++ * bear in mind:
++ *  - 715/Mirage device paths have a dummy device between Lasi and its children
++ *  - The EISA adapter may show up as a sibling or child of Wax
++ *  - Dino has an optionally functional serial port.  If firmware enables it,
++ *    it shows up as a child of Dino.  If firmware disables it, the buswalk
++ *    finds it and it shows up as a child of Cujo
++ *  - Dino has both parisc and pci devices as children
++ *  - parisc devices are discovered in a random order, including children
++ *    before parents in some cases.
+  */
+ 
+ #include <linux/slab.h>
+@@ -30,13 +42,16 @@
+ struct hppa_dma_ops *hppa_dma_ops;
+ EXPORT_SYMBOL(hppa_dma_ops);
+ 
+-static struct parisc_device root;
++static struct device root = {
++	.bus_id = "parisc",
++};
+ 
+-#define for_each_padev(dev) \
+-	for (dev = root.child; dev != NULL; dev = next_dev(dev))
++#define for_each_padev(padev) \
++	for (padev = next_dev(&root); padev != NULL; \
++			padev = next_dev(&padev->dev))
+ 
+-#define check_dev(dev) \
+-	(dev->id.hw_type != HPHW_FAULTY) ? dev : next_dev(dev)
++#define check_dev(padev) \
++	(padev->id.hw_type != HPHW_FAULTY) ? padev : next_dev(&padev->dev)
+ 
+ /**
+  * next_dev - enumerates registered devices
+@@ -45,20 +60,20 @@
+  * next_dev does a depth-first search of the tree, returning parents
+  * before children.  Returns NULL when there are no more devices.
+  */
+-struct parisc_device *next_dev(struct parisc_device *dev)
++static struct parisc_device *next_dev(struct device *dev)
+ {
+-	if (dev->child) {
+-		return check_dev(dev->child);
+-	} else if (dev->sibling) {
+-		return dev->sibling;
++	if (!list_empty(&dev->children)) {
++		dev = list_to_dev(dev->children.next);
++		return check_dev(to_parisc_device(dev));
+ 	}
+ 
+-	/* Exhausted tree at this level, time to go up. */
+-	do {
++	while (dev != &root) {
++		if (dev->node.next != &dev->parent->children) {
++			dev = list_to_dev(dev->node.next);
++			return to_parisc_device(dev);
++		}
+ 		dev = dev->parent;
+-		if (dev && dev->sibling)
+-			return dev->sibling;
+-	} while (dev != &root);
++	}
+ 
+ 	return NULL;
+ }
+@@ -209,24 +224,58 @@
+  * Walks up the device tree looking for a device of the specified type.
+  * If it finds it, it returns it.  If not, it returns NULL.
+  */
+-const struct parisc_device *find_pa_parent_type(const struct parisc_device *dev, int type)
++const struct parisc_device *
++find_pa_parent_type(const struct parisc_device *padev, int type)
+ {
++	const struct device *dev = &padev->dev;
+ 	while (dev != &root) {
+-		if (dev->id.hw_type == type)
+-			return dev;
++		struct parisc_device *candidate = to_parisc_device(dev);
++		if (candidate->id.hw_type == type)
++			return candidate;
+ 		dev = dev->parent;
+ 	}
+ 
+ 	return NULL;
+ }
+ 
+-static void
+-get_node_path(struct parisc_device *dev, struct hardware_path *path)
++#ifdef CONFIG_PCI
++static inline int is_pci_dev(struct device *dev)
++{
++	return dev->bus == &pci_bus_type;
++}
++#else
++static inline int is_pci_dev(struct device *dev)
++{
++	return 0;
++}
++#endif
++
++/*
++ * get_node_path fills in @path with the firmware path to the device.
++ * Note that if @node is a parisc device, we don't fill in the 'mod' field.
++ * This is because both callers pass the parent and fill in the mod
++ * themselves.  If @node is a PCI device, we do fill it in, even though this
++ * is inconsistent.
++ */
++static void get_node_path(struct device *dev, struct hardware_path *path)
+ {
+ 	int i = 5;
+ 	memset(&path->bc, -1, 6);
++
++	if (is_pci_dev(dev)) {
++		unsigned int devfn = to_pci_dev(dev)->devfn;
++		path->mod = PCI_FUNC(devfn);
++		path->bc[i--] = PCI_SLOT(devfn);
++		dev = dev->parent;
++	}
++
+ 	while (dev != &root) {
+-		path->bc[i--] = dev->hw_path;
++		if (is_pci_dev(dev)) {
++			unsigned int devfn = to_pci_dev(dev)->devfn;
++			path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn)<< 5);
++		} else if (dev->bus == &parisc_bus_type) {
++			path->bc[i--] = to_parisc_device(dev)->hw_path;
++		}
+ 		dev = dev->parent;
+ 	}
+ }
+@@ -256,7 +305,7 @@
+ {
+ 	struct hardware_path path;
+ 
+-	get_node_path(dev->parent, &path);
++	get_node_path(dev->dev.parent, &path);
+ 	path.mod = dev->hw_path;
+ 	return print_hwpath(&path, output);
+ }
+@@ -264,33 +313,17 @@
+ 
+ #if defined(CONFIG_PCI) || defined(CONFIG_ISA)
+ /**
+- * get_pci_node_path - Returns hardware path for PCI devices
+- * dev: The device to return the path for
+- * output: Pointer to a previously-allocated array to place the path in.
++ * get_pci_node_path - Determines the hardware path for a PCI device
++ * @pdev: The device to return the path for
++ * @path: Pointer to a previously-allocated array to place the path in.
+  *
+  * This function fills in the hardware_path structure with the route to
+  * the specified PCI device.  This structure is suitable for passing to
+  * PDC calls.
+  */
+-void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path)
++void get_pci_node_path(struct pci_dev *pdev, struct hardware_path *path)
+ {
+-	struct pci_bus *bus;
+-	const struct parisc_device *padev;
+-	int i = 5;
+-
+-	memset(&path->bc, -1, 6);
+-	path->mod = PCI_FUNC(dev->devfn);
+-	path->bc[i--] = PCI_SLOT(dev->devfn);
+-	for (bus = dev->bus; bus->parent; bus = bus->parent) {
+-		unsigned int devfn = bus->self->devfn;
+-		path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn) << 5);
+-	}
+-
+-	padev = HBA_DATA(bus->bridge->platform_data)->dev;
+-	while (padev != &root) {
+-		path->bc[i--] = padev->hw_path;
+-		padev = padev->parent;
+-	}
++	get_node_path(&pdev->dev, path);
+ }
+ EXPORT_SYMBOL(get_pci_node_path);
+ 
+@@ -314,19 +347,43 @@
+ 
+ #endif /* defined(CONFIG_PCI) || defined(CONFIG_ISA) */
+ 
++static void setup_bus_id(struct parisc_device *padev)
++{
++	struct hardware_path path;
++	char *output = padev->dev.bus_id;
++	int i;
++
++	get_node_path(padev->dev.parent, &path);
++
++	for (i = 0; i < 6; i++) {
++		if (path.bc[i] == -1)
++			continue;
++		output += sprintf(output, "%u:", (unsigned char) path.bc[i]);
++	}
++	sprintf(output, "%u", (unsigned char) padev->hw_path);
++}
+ 
+-struct parisc_device * create_tree_node(char id, struct parisc_device *parent,
+-		struct parisc_device **insert)
++struct parisc_device * create_tree_node(char id, struct device *parent)
+ {
+ 	struct parisc_device *dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+ 	if (!dev)
+ 		return NULL;
++
+ 	memset(dev, 0, sizeof(*dev));
+ 	dev->hw_path = id;
+ 	dev->id.hw_type = HPHW_FAULTY;
+-	dev->parent = parent;
+-	dev->sibling = *insert;
+-	*insert = dev;
++
++	dev->dev.parent = parent;
++	setup_bus_id(dev);
++
++	dev->dev.bus = &parisc_bus_type;
++	dev->dma_mask = 0xffffffffUL;	/* PARISC devices are 32-bit */
++
++	/* make the generic dma mask a pointer to the parisc one */
++	dev->dev.dma_mask = &dev->dma_mask;
++	dev->dev.coherent_dma_mask = dev->dma_mask;
++	device_register(&dev->dev);
++
+ 	return dev;
+ }
+ 
+@@ -338,36 +395,27 @@
+  * Checks all the children of @parent for a matching @id.  If none
+  * found, it allocates a new device and returns it.
+  */
+-struct parisc_device *
+-alloc_tree_node(struct parisc_device *parent, char id)
++static struct parisc_device * alloc_tree_node(struct device *parent, char id)
+ {
+-	struct parisc_device *prev;
+-	if ((!parent->child) || (parent->child->hw_path > id)) {
+-		return create_tree_node(id, parent, &parent->child);
+-	}
+-
+-	prev = parent->child;
+-	if (prev->hw_path == id)
+-		return prev;
++	struct device *dev;
+ 
+-	while (prev->sibling && prev->sibling->hw_path < id) {
+-		prev = prev->sibling;
++	list_for_each_entry(dev, &parent->children, node) {
++		struct parisc_device *padev = to_parisc_device(dev);
++		if (padev->hw_path == id)
++			return padev;
+ 	}
+ 
+-	if ((prev->sibling) && (prev->sibling->hw_path == id))
+-		return prev->sibling;
+-
+-	return create_tree_node(id, parent, &prev->sibling);
++	return create_tree_node(id, parent);
+ }
+ 
+-static struct parisc_device *find_parisc_device(struct hardware_path *modpath)
++static struct parisc_device *create_parisc_device(struct hardware_path *modpath)
+ {
+ 	int i;
+-	struct parisc_device *parent = &root;
++	struct device *parent = &root;
+ 	for (i = 0; i < 6; i++) {
+ 		if (modpath->bc[i] == -1)
+ 			continue;
+-		parent = alloc_tree_node(parent, modpath->bc[i]);
++		parent = &alloc_tree_node(parent, modpath->bc[i])->dev;
+ 	}
+ 	return alloc_tree_node(parent, modpath->mod);
+ }
+@@ -389,7 +437,7 @@
+ 	if (status != PDC_OK)
+ 		return NULL;
+ 
+-	dev = find_parisc_device(mod_path);
++	dev = create_parisc_device(mod_path);
+ 	if (dev->id.hw_type != HPHW_FAULTY) {
+ 		char p[64];
+ 		print_pa_hwpath(dev, p);
+@@ -414,12 +462,37 @@
+ 
+ static int parisc_generic_match(struct device *dev, struct device_driver *drv)
+ {
+-	return  match_device(to_parisc_driver(drv), to_parisc_device(dev));
++	return match_device(to_parisc_driver(drv), to_parisc_device(dev));
+ }
+ 
++#define pa_dev_attr(name, field, format_string)				\
++static ssize_t name##_show(struct device *dev, char *buf)		\
++{									\
++	struct parisc_device *padev = to_parisc_device(dev);		\
++	return sprintf(buf, format_string, padev->field);		\
++}
++
++#define pa_dev_attr_id(field, format) pa_dev_attr(field, id.field, format)
++
++pa_dev_attr(irq, irq, "%u\n");
++pa_dev_attr_id(hw_type, "0x%02x\n");
++pa_dev_attr(rev, id.hversion_rev, "0x%x\n");
++pa_dev_attr_id(hversion, "0x%03x\n");
++pa_dev_attr_id(sversion, "0x%05x\n");
++
++static struct device_attribute parisc_device_attrs[] = {
++	__ATTR_RO(irq),
++	__ATTR_RO(hw_type),
++	__ATTR_RO(rev),
++	__ATTR_RO(hversion),
++	__ATTR_RO(sversion),
++	__ATTR_NULL,
++};
++
+ struct bus_type parisc_bus_type = {
+ 	.name = "parisc",
+ 	.match = parisc_generic_match,
++	.dev_attrs = parisc_device_attrs,
+ };
+ 
+ /**
+@@ -440,6 +513,104 @@
+ 	return 0;
+ }
+ 
++/**
++ * match_pci_device - Matches a pci device against a given hardware path
++ * entry.
++ * @dev: the generic device (known to be contained by a pci_dev).
++ * @index: the current BC index
++ * @modpath: the hardware path.
++ * @return: true if the device matches the hardware path.
++ */
++static int match_pci_device(struct device *dev, int index,
++		struct hardware_path *modpath)
++{
++	struct pci_dev *pdev = to_pci_dev(dev);
++	int id;
++
++	if (index == 5) {
++		/* we are at the end of the path, and on the actual device */
++		unsigned int devfn = pdev->devfn;
++		return ((modpath->bc[5] == PCI_SLOT(devfn)) &&
++					(modpath->mod == PCI_FUNC(devfn)));
++	}
++
++	id = PCI_SLOT(pdev->devfn) | (PCI_FUNC(pdev->devfn) << 5);
++	return (modpath->bc[index] == id);
++}
++
++/**
++ * match_parisc_device - Matches a parisc device against a given hardware
++ * path entry.
++ * @dev: the generic device (known to be contained by a parisc_device).
++ * @index: the current BC index
++ * @modpath: the hardware path.
++ * @return: true if the device matches the hardware path.
++ */
++static int match_parisc_device(struct device *dev, int index,
++		struct hardware_path *modpath)
++{
++	struct parisc_device *curr = to_parisc_device(dev);
++	char id = (index == 6) ? modpath->mod : modpath->bc[index];
++
++	return (curr->hw_path == id);
++}
++
++/**
++ * parse_tree_node - returns a device entry in the iotree
++ * @parent: the parent node in the tree
++ * @index: the current BC index
++ * @modpath: the hardware_path struct to match a device against
++ * @return: The corresponding device if found, NULL otherwise.
++ *
++ * Checks all the children of @parent for a matching @id.  If none
++ * found, it returns NULL.
++ */
++static struct device *
++parse_tree_node(struct device *parent, int index, struct hardware_path *modpath)
++{
++	struct device *device;
++	 
++	list_for_each_entry(device, &parent->children, node) {
++		if (device->bus == &parisc_bus_type) {
++			if (match_parisc_device(device, index, modpath))
++				return device;
++		} else if (is_pci_dev(device)) {
++			if (match_pci_device(device, index, modpath))
++				return device;
++		} else if (device->bus == NULL) {
++			/* we are on a bus bridge */
++			struct device *new = parse_tree_node(device, index, modpath);
++			if (new)
++				return new;
++		}
++	}
++
++	return NULL;
++}
++
++/**
++ * hwpath_to_device - Finds the generic device corresponding to a given hardware path.
++ * @modpath: the hardware path.
++ * @return: The target device, NULL if not found.
++ */
++struct device *hwpath_to_device(struct hardware_path *modpath)
++{
++	int i;
++	struct device *parent = &root;
++	for (i = 0; i < 6; i++) {
++		if (modpath->bc[i] == -1)
++			continue;
++		parent = parse_tree_node(parent, i, modpath);
++		if (!parent)
++			return NULL;
++	}
++	if (is_pci_dev(parent)) /* pci devices already parse MOD */
++		return parent;
++	else
++		return parse_tree_node(parent, 6, modpath);
++}
++EXPORT_SYMBOL(hwpath_to_device);
++
+ #define BC_PORT_MASK 0x8
+ #define BC_LOWER_PORT 0x8
+ 
+@@ -447,7 +618,7 @@
+         ((dev->id.hw_type == HPHW_IOA) || (dev->id.hw_type == HPHW_BCPORT))
+ 
+ #define IS_LOWER_PORT(dev) \
+-        ((gsc_readl(&((struct bc_module *)dev->hpa)->io_status) \
++        ((gsc_readl(dev->hpa + offsetof(struct bc_module, io_status)) \
+                 & BC_PORT_MASK) == BC_LOWER_PORT)
+ 
+ #define MAX_NATIVE_DEVICES 64
+@@ -456,11 +627,11 @@
+ #define FLEX_MASK 	F_EXTEND(0xfffc0000)
+ #define IO_IO_LOW	offsetof(struct bc_module, io_io_low)
+ #define IO_IO_HIGH	offsetof(struct bc_module, io_io_high)
+-#define READ_IO_IO_LOW(dev)  (unsigned long)(signed int)__raw_readl(dev->hpa + IO_IO_LOW)
+-#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)__raw_readl(dev->hpa + IO_IO_HIGH)
++#define READ_IO_IO_LOW(dev)  (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_LOW)
++#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa + IO_IO_HIGH)
+ 
+ static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
+-                            struct parisc_device *parent);
++                            struct device *parent);
+ 
+ void walk_lower_bus(struct parisc_device *dev)
+ {
+@@ -477,7 +648,7 @@
+ 		io_io_high = (READ_IO_IO_HIGH(dev)+ ~FLEX_MASK) & FLEX_MASK;
+ 	}
+ 
+-	walk_native_bus(io_io_low, io_io_high, dev);
++	walk_native_bus(io_io_low, io_io_high, &dev->dev);
+ }
+ 
+ /**
+@@ -493,7 +664,7 @@
+  * keyboard ports).  This problem is not yet solved.
+  */
+ static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
+-                            struct parisc_device *parent)
++                            struct device *parent)
+ {
+ 	int i, devices_found = 0;
+ 	unsigned long hpa = io_io_low;
+@@ -538,18 +709,24 @@
+ void fixup_child_irqs(struct parisc_device *parent, int base,
+ 			int (*choose_irq)(struct parisc_device *))
+ {
+-	struct parisc_device *dev;
++	struct device *dev;
+ 
+-	if (!parent->child)
+-		return;
++	list_for_each_entry(dev, &parent->dev.children, node) {
++		struct parisc_device *padev = to_parisc_device(dev);
++
++		int irq;
++
++		/* work-around for 715/64 and others which have parent 
++		   at path [5] and childs at path [5/0/x] */
++		if (padev->id.hw_type == HPHW_FAULTY)
++			return fixup_child_irqs(padev, base, choose_irq);
+ 
+-	for (dev = check_dev(parent->child); dev; dev = dev->sibling) {
+-		int irq = choose_irq(dev);
++		irq = choose_irq(padev);
+ 		if (irq > 0) {
+ #ifdef __LP64__
+ 			irq += 32;
+ #endif
+-			dev->irq = base + irq;
++			padev->irq = base + irq;
+ 		}
+ 	}
+ }
+@@ -573,68 +750,14 @@
+ 	printk("\n");
+ }
+ 
+-void print_subdevices(struct parisc_device *parent)
+-{
+-	struct parisc_device *dev;
+-	for (dev = parent->child; dev != parent->sibling; dev = next_dev(dev)) {
+-		print_parisc_device(dev);
+-	}
+-}
+-
+-
+-/*
+- * parisc_generic_device_register_recursive() - internal function to recursively
+- * 	register all parisc devices
+- */
+-static void parisc_generic_device_register_recursive( struct parisc_device *dev )
+-{
+-	char tmp1[32];
+-	
+-	/* has this device been registered already ? */
+-	if (dev->dev.dma_mask != NULL)
+-		return;
+-	
+-	/* register all parents recursively */
+-	if (dev->parent && dev->parent!=&root)
+-		parisc_generic_device_register_recursive(dev->parent);
+-	
+-	/* set up the generic device tree for this */
+-	snprintf(tmp1, sizeof(tmp1), "%d", dev->hw_path);
+-	if (dev->parent && dev->parent != &root) {
+-		struct parisc_device *ndev;
+-		char tmp2[32];
+-
+-		dev->dev.parent = &dev->parent->dev;
+-		for(ndev = dev->parent; ndev != &root;
+-		    ndev = ndev->parent) {
+-			snprintf(tmp2, sizeof(tmp2), "%d:%s",
+-				 ndev->hw_path, tmp1);
+-			strlcpy(tmp1, tmp2, sizeof(tmp1));
+-		}
+-	}
+-
+-	dev->dev.bus = &parisc_bus_type;
+-	snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), "parisc%s",
+-		 tmp1);
+-	/* make the generic dma mask a pointer to the parisc one */
+-	dev->dev.dma_mask = &dev->dma_mask;
+-	dev->dev.coherent_dma_mask = dev->dma_mask;
+-	pr_debug("device_register(%s)\n", dev->dev.bus_id);
+-	device_register(&dev->dev);
+-}
+-
+-/*
+- * parisc_generic_device_register() - register all parisc devices
++/**
++ * init_parisc_bus - Some preparation to be done before inventory
+  */
+-void parisc_generic_device_register(void)
++void init_parisc_bus(void)
+ {
+-	struct parisc_device *dev;
+-	
+ 	bus_register(&parisc_bus_type);
+-
+-	for_each_padev(dev) {
+-		parisc_generic_device_register_recursive( dev );
+-	}
++	device_register(&root);
++	get_device(&root);
+ }
+ 
+ /**
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/entry.S
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/entry.S	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/entry.S	2005-01-21 12:16:45.000000000 -0500
+@@ -1079,7 +1079,7 @@
+ 	BL	do_signal,%r2
+ 	copy	%r0, %r26			/* sigset_t *oldset = NULL */
+ 
+-	b	intr_restore
++	b	intr_check_sig
+ 	nop
+ 
+ 	/*
+@@ -2282,7 +2282,7 @@
+ 	ldo	TASK_REGS(%r1), %r20		/* reload pt_regs */
+ 	reg_restore %r20
+ 
+-	b,n     syscall_restore
++	b,n     syscall_check_sig
+ 
+ 	/*
+ 	 * get_register is used by the non access tlb miss handlers to
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/firmware.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/firmware.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/firmware.c	2005-01-21 12:16:45.000000000 -0500
+@@ -11,6 +11,7 @@
+  * Copyright 1999 The Puffin Group, (Alex deVries, David Kennedy)
+  * Copyright 2003 Grant Grundler <grundler parisc-linux org>
+  * Copyright 2003,2004 Ryan Bradetich <rbrad at parisc-linux.org>
++ * Copyright 2004 Thibaut VARENE <varenet at parisc-linux.org>
+  *
+  *    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
+@@ -119,10 +120,10 @@
+ #ifdef __LP64__
+ 	if(unlikely(parisc_narrow_firmware)) {
+ 		if((address & 0xff000000) == 0xf0000000)
+-			return 0xf0f0f0f000000000 | (u32)address;
++			return 0xf0f0f0f000000000UL | (u32)address;
+ 
+ 		if((address & 0xf0000000) == 0xf0000000)
+-			return 0xffffffff00000000 | (u32)address;
++			return 0xffffffff00000000UL | (u32)address;
+ 	}
+ #endif
+ 	return address;
+@@ -573,14 +574,118 @@
+ }
+ EXPORT_SYMBOL(pdc_lan_station_id);
+ 
++/**
++ * pdc_stable_read - Read data from Stable Storage.
++ * @staddr: Stable Storage address to access.
++ * @memaddr: The memory address where Stable Storage data shall be copied.
++ * @count: number of bytes to transfert. count is multiple of 4.
++ *
++ * This PDC call reads from the Stable Storage address supplied in staddr
++ * and copies count bytes to the memory address memaddr.
++ * The call will fail if staddr+count > PDC_STABLE size.
++ */
++int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count)
++{
++       int retval;
++
++       spin_lock_irq(&pdc_lock);
++       retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_READ, staddr,
++               __pa(pdc_result), count);
++       convert_to_wide(pdc_result);
++       memcpy(memaddr, pdc_result, count);
++       spin_unlock_irq(&pdc_lock);
++
++       return retval;
++}
++EXPORT_SYMBOL(pdc_stable_read);
++
++/**
++ * pdc_stable_write - Write data to Stable Storage.
++ * @staddr: Stable Storage address to access.
++ * @memaddr: The memory address where Stable Storage data shall be read from.
++ * @count: number of bytes to transfert. count is multiple of 4.
++ *
++ * This PDC call reads count bytes from the supplied memaddr address,
++ * and copies count bytes to the Stable Storage address staddr.
++ * The call will fail if staddr+count > PDC_STABLE size.
++ */
++int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count)
++{
++       int retval;
++
++       spin_lock_irq(&pdc_lock);
++       memcpy(pdc_result, memaddr, count);
++       convert_to_wide(pdc_result);
++       retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_WRITE, staddr,
++               __pa(pdc_result), count);
++       spin_unlock_irq(&pdc_lock);
++
++       return retval;
++}
++EXPORT_SYMBOL(pdc_stable_write);
++
++/**
++ * pdc_stable_get_size - Get Stable Storage size in bytes.
++ * @size: pointer where the size will be stored.
++ *
++ * This PDC call returns the number of bytes in the processor's Stable
++ * Storage, which is the number of contiguous bytes implemented in Stable
++ * Storage starting from staddr=0. size in an unsigned 64-bit integer
++ * which is a multiple of four.
++ */
++int pdc_stable_get_size(unsigned long *size)
++{
++       int retval;
++
++       spin_lock_irq(&pdc_lock);
++       retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_RETURN_SIZE, __pa(pdc_result));
++       *size = pdc_result[0];
++       spin_unlock_irq(&pdc_lock);
++
++       return retval;
++}
++EXPORT_SYMBOL(pdc_stable_get_size);
++
++/**
++ * pdc_stable_verify_contents - Checks that Stable Storage contents are valid.
++ *
++ * This PDC call is meant to be used to check the integrity of the current
++ * contents of Stable Storage.
++ */
++int pdc_stable_verify_contents(void)
++{
++       int retval;
++
++       spin_lock_irq(&pdc_lock);
++       retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_VERIFY_CONTENTS);
++       spin_unlock_irq(&pdc_lock);
++
++       return retval;
++}
++EXPORT_SYMBOL(pdc_stable_verify_contents);
++
++/**
++ * pdc_stable_initialize - Sets Stable Storage contents to zero and initialize
++ * the validity indicator.
++ *
++ * This PDC call will erase all contents of Stable Storage. Use with care!
++ */
++int pdc_stable_initialize(void)
++{
++       int retval;
++
++       spin_lock_irq(&pdc_lock);
++       retval = mem_pdc_call(PDC_STABLE, PDC_STABLE_INITIALIZE);
++       spin_unlock_irq(&pdc_lock);
++
++       return retval;
++}
++EXPORT_SYMBOL(pdc_stable_initialize);
+ 
+ /**
+  * pdc_get_initiator - Get the SCSI Interface Card params (SCSI ID, SDTR, SE or LVD)
+  * @hwpath: fully bc.mod style path to the device.
+- * @scsi_id: what someone told firmware the ID should be.
+- * @period: time in cycles 
+- * @width: 8 or 16-bit wide bus
+- * @mode: 0,1,2 -> SE,HVD,LVD signalling mode
++ * @initiator: the array to return the result into
+  *
+  * Get the SCSI operational parameters from PDC.
+  * Needed since HPUX never used BIOS or symbios card NVRAM.
+@@ -591,8 +696,7 @@
+  *    o cable too long (ie SE scsi 10Mhz won't support 6m length),
+  *    o bus width exported is less than what the interface chip supports.
+  */
+-int pdc_get_initiator(struct hardware_path *hwpath, unsigned char *scsi_id,
+-		unsigned long *period, char *width, char *mode)
++int pdc_get_initiator(struct hardware_path *hwpath, struct pdc_initiator *initiator)
+ {
+ 	int retval;
+ 
+@@ -604,44 +708,38 @@
+ 
+ 	retval = mem_pdc_call(PDC_INITIATOR, PDC_GET_INITIATOR, 
+ 			      __pa(pdc_result), __pa(hwpath));
+-
+ 	if (retval < PDC_OK)
+-		goto fail;
+-
+-	*scsi_id = (unsigned char) pdc_result[0];
++		goto out;
+ 
+-	/* convert Bus speed in Mhz to period (in 1/10 ns) */
+-	switch (pdc_result[1]) {
+-		/*
+-		 * case  0:   driver determines rate
+-		 * case -1:   Settings are uninitialized.
+-		 */
+-		case  5:  *period = 2000; break;
+-		case 10:  *period = 1000; break;
+-		case 20:  *period = 500; break;
+-		case 40:  *period = 250; break;
+-		case 80:  *period = 125; break;
+-		default: /* Do nothing */ break;
++	if (pdc_result[0] < 16) {
++		initiator->host_id = pdc_result[0];
++	} else {
++		initiator->host_id = -1;
+ 	}
+ 
+-	/* 
+-	 * pdc_result[2]	PDC suggested SCSI id
+-	 * pdc_result[3]	PDC suggested SCSI rate
++	/*
++	 * Sprockets and Piranha return 20 or 40 (MT/s).  Prelude returns
++	 * 1, 2, 5 or 10 for 5, 10, 20 or 40 MT/s, respectively
+ 	 */
++	switch (pdc_result[1]) {
++		case  1: initiator->factor = 50; break;
++		case  2: initiator->factor = 25; break;
++		case  5: initiator->factor = 12; break;
++		case 25: initiator->factor = 10; break;
++		case 20: initiator->factor = 12; break;
++		case 40: initiator->factor = 10; break;
++		default: initiator->factor = -1; break;
++	}
+ 
+ 	if (IS_SPROCKETS()) {
+-		/* 0 == 8-bit, 1 == 16-bit */
+-		*width = (char) pdc_result[4];
+-
+-		/* ...in case someone needs it in the future.
+-		 * sym53c8xx.c comments say it can't autodetect
+-		 * for 825/825A/875 chips.
+-		 *	0 == SE, 1 == HVD, 2 == LVD
+-		 */
+-		*mode = (char) pdc_result[5]; 
++		initiator->width = pdc_result[4];
++		initiator->mode = pdc_result[5];
++	} else {
++		initiator->width = -1;
++		initiator->mode = -1;
+ 	}
+ 
+- fail:
++ out:
+ 	spin_unlock_irq(&pdc_lock);
+ 	return (retval >= PDC_OK);
+ }
+@@ -814,7 +912,7 @@
+  *
+  * Reset the system.
+  */
+-int pdc_do_reset()
++int pdc_do_reset(void)
+ {
+         int retval;
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/hardware.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/hardware.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/hardware.c	2005-01-21 12:16:45.000000000 -0500
+@@ -1296,18 +1296,18 @@
+ };
+ 
+ char *cpu_name_version[][2] = {
+-	[pcx]	{ "PA7000 (PCX)",	"1.0" },
+-	[pcxs]	{ "PA7000 (PCX-S)",	"1.1a" },
+-	[pcxt]	{ "PA7100 (PCX-T)",	"1.1b" },
+-	[pcxt_]	{ "PA7200 (PCX-T')",	"1.1c" },
+-	[pcxl]	{ "PA7100LC (PCX-L)",	"1.1d" },
+-	[pcxl2]	{ "PA7300LC (PCX-L2)",	"1.1e" },
+-	[pcxu]	{ "PA8000 (PCX-U)",	"2.0" },
+-	[pcxu_]	{ "PA8200 (PCX-U+)",	"2.0" },
+-	[pcxw]	{ "PA8500 (PCX-W)",	"2.0" },
+-	[pcxw_]	{ "PA8600 (PCX-W+)",	"2.0" },
+-	[pcxw2]	{ "PA8700 (PCX-W2)",	"2.0" },
+-	[mako]	{ "PA8800 (Mako)",	"2.0" }
++	[pcx]	= { "PA7000 (PCX)",	"1.0" },
++	[pcxs]	= { "PA7000 (PCX-S)",	"1.1a" },
++	[pcxt]	= { "PA7100 (PCX-T)",	"1.1b" },
++	[pcxt_]	= { "PA7200 (PCX-T')",	"1.1c" },
++	[pcxl]	= { "PA7100LC (PCX-L)",	"1.1d" },
++	[pcxl2]	= { "PA7300LC (PCX-L2)",	"1.1e" },
++	[pcxu]	= { "PA8000 (PCX-U)",	"2.0" },
++	[pcxu_]	= { "PA8200 (PCX-U+)",	"2.0" },
++	[pcxw]	= { "PA8500 (PCX-W)",	"2.0" },
++	[pcxw_]	= { "PA8600 (PCX-W+)",	"2.0" },
++	[pcxw2]	= { "PA8700 (PCX-W2)",	"2.0" },
++	[mako]	= { "PA8800 (Mako)",	"2.0" }
+ };
+ 
+ const char * __init
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/head.S
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/head.S	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/head.S	2005-01-21 12:16:45.000000000 -0500
+@@ -71,47 +71,42 @@
+ 	stw,ma          %arg2,4(%r1)
+ 	stw,ma          %arg3,4(%r1)
+ 
+-	/* Initialize startup VM. Just map first 8 MB of memory */
+-	load32		PA(pg0),%r1
+-
+-#ifdef __LP64__
+-	load32		PA(pmd0),%r5
+-	shrd            %r5,PxD_VALUE_SHIFT,%r3	
+-#else
+-	shr		%r1,PxD_VALUE_SHIFT,%r3
+-#endif
+-        ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3	
+-	
++	/* Initialize startup VM. Just map first 8/16 MB of memory */
+ 	load32		PA(swapper_pg_dir),%r4
+ 	mtctl		%r4,%cr24	/* Initialize kernel root pointer */
+ 	mtctl		%r4,%cr25	/* Initialize user root pointer */
+ 
+ #ifdef __LP64__
++	/* Set pmd in pgd */
++	load32		PA(pmd0),%r5
++	shrd            %r5,PxD_VALUE_SHIFT,%r3	
++        ldo             (PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3	
+ 	stw		%r3,ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4)
+-	shrd		%r1,PxD_VALUE_SHIFT,%r3
+-	ldo		(PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
+-	ldo		ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r5
++	ldo		ASM_PMD_ENTRY*ASM_PMD_ENTRY_SIZE(%r5),%r4
+ #else
++	/* 2-level page table, so pmd == pgd */
+         ldo             ASM_PGD_ENTRY*ASM_PGD_ENTRY_SIZE(%r4),%r4
+ #endif
++
++	/* Fill in pmd with enough pte directories */
++	load32		PA(pg0),%r1
++	SHRREG		%r1,PxD_VALUE_SHIFT,%r3
++	ldo		(PxD_FLAG_PRESENT+PxD_FLAG_VALID)(%r3),%r3
++
+ 	ldi		ASM_PT_INITIAL,%r1
+ 
+ 1:
+-#ifdef __LP64__
+-	stw             %r3,0(%r5)
+-#else
+-	stw             %r3,0(%r4)
+-#endif
+-	
++	stw		%r3,0(%r4)
+ 	ldo		(ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3
+ 	addib,>		-1,%r1,1b
+-
+ #ifdef __LP64__
+-	ldo		ASM_PMD_ENTRY_SIZE(%r5),%r5
++	ldo             ASM_PMD_ENTRY_SIZE(%r4),%r4
+ #else
+-	ldo		ASM_PGD_ENTRY_SIZE(%r4),%r4
++	ldo             ASM_PGD_ENTRY_SIZE(%r4),%r4
+ #endif
+ 
++
++	/* Now initialize the PTEs themselves */
+ 	ldo		_PAGE_KERNEL(%r0),%r3 /* Hardwired 0 phys addr start */
+ 	load32		PA(pg0),%r1
+ 
+@@ -306,7 +301,7 @@
+ 	mtctl		%r11,%cr18	/* IIAOQ head */
+ 	ldo		4(%r11),%r11
+ 	mtctl		%r11,%cr18	/* IIAOQ tail */
+-
++	
+ 	/* Jump to hyperspace */
+ 	rfi
+ 	nop
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/init_task.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/init_task.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/init_task.c	2005-01-21 12:16:45.000000000 -0500
+@@ -55,11 +55,15 @@
+ 
+ #ifdef __LP64__
+ /* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout
+- * with the first pmd adjacent to the pgd and below it */
+-pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
++ * with the first pmd adjacent to the pgd and below it. gcc doesn't actually
++ * guarantee that global objects will be laid out in memory in the same order 
++ * as the order of declaration, so put these in different sections and use
++ * the linker script to order them. */
++pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pmd"))) = { {0}, };
++
+ #endif
+-pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
+-pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) = { {0}, };
++pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pgd"))) = { {0}, };
++pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((aligned(PAGE_SIZE))) __attribute__ ((__section__ (".data.vm0.pte")))  = { {0}, };
+ 
+ /*
+  * Initial task structure.
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/inventory.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/inventory.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/inventory.c	2005-01-21 12:16:45.000000000 -0500
+@@ -518,7 +518,7 @@
+ }
+ 
+ /**
+- * do_system_map_inventory - Retrieve firmware devices via SYSTEM_MAP.
++ * system_map_inventory - Retrieve firmware devices via SYSTEM_MAP.
+  *
+  * This function attempts to retrieve and register all the devices firmware
+  * knows about via the SYSTEM_MAP PDC call.
+@@ -528,16 +528,18 @@
+ 	int i;
+ 	long status = PDC_OK;
+     
+-	for (i = 0; status != PDC_BAD_PROC && status != PDC_NE_MOD; i++) {
++	for (i = 0; i < 256; i++) {
+ 		struct parisc_device *dev;
+ 		struct pdc_system_map_mod_info module_result;
+ 		struct pdc_module_path module_path;
+ 
+ 		status = pdc_system_map_find_mods(&module_result,
+ 				&module_path, i);
++		if ((status == PDC_BAD_PROC) || (status == PDC_NE_MOD))
++			break;
+ 		if (status != PDC_OK)
+ 			continue;
+-		
++
+ 		dev = alloc_pa_dev(module_result.mod_addr, &module_path.path);
+ 		if (!dev)
+ 			continue;
+@@ -584,10 +586,10 @@
+ 
+ void __init do_device_inventory(void)
+ {
+-	extern void parisc_generic_device_register(void);
+-
+ 	printk(KERN_INFO "Searching for devices...\n");
+ 
++	init_parisc_bus();
++
+ 	switch (pdc_type) {
+ 
+ 	case PDC_TYPE_PAT:
+@@ -605,7 +607,6 @@
+ 	default:
+ 		panic("Unknown PDC type!\n");
+ 	}
+-	parisc_generic_device_register();
+ 	printk(KERN_INFO "Found devices:\n");
+ 	print_parisc_devices();
+ }
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/ioctl32.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/ioctl32.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/ioctl32.c	2005-01-21 12:16:45.000000000 -0500
+@@ -563,7 +563,7 @@
+ 
+ #endif
+ 
+-#define HANDLE_IOCTL(cmd, handler) { cmd, (ioctl_trans_handler_t)handler, 0 },
++#define HANDLE_IOCTL(cmd, handler) { cmd, (ioctl_trans_handler_t)handler, NULL },
+ #define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd, sys_ioctl) 
+ 
+ #define IOCTL_TABLE_START  struct ioctl_trans ioctl_start[] = {
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/irq.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/irq.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/irq.c	2005-01-21 12:16:45.000000000 -0500
+@@ -85,22 +85,6 @@
+         on_each_cpu(cpu_set_eiem, (void *) cpu_eiem, 1, 1);
+ }
+ 
+-/* mask and disable are the same at the CPU level
+-** Difference is enable clears pending interrupts
+-*/
+-#define mask_cpu_irq	disable_cpu_irq
+-
+-static inline void unmask_cpu_irq(void *unused, int irq)
+-{
+-	unsigned long eirr_bit = EIEM_MASK(irq);
+-	cpu_eiem |= eirr_bit;
+-	/* NOTE: sending an IPI will cause do_cpu_irq_mask() to
+-	** handle *any* unmasked pending interrupts.
+-	** ie We don't need to check for pending interrupts here.
+-	*/
+-        on_each_cpu(cpu_set_eiem, (void *) cpu_eiem, 1, 1);
+-}
+-
+ /*
+  * XXX cpu_irq_actions[] will become 2 dimensional for per CPU EIR support.
+  * correspond changes needed in:
+@@ -126,8 +110,6 @@
+ 	.ops	= {
+ 			.disable_irq	= disable_cpu_irq,
+ 			.enable_irq	= enable_cpu_irq,
+-			.mask_irq	= unmask_cpu_irq,
+-			.unmask_irq	= unmask_cpu_irq
+ 	},
+ 	.data	= {
+ 			.dev		= &cpu_data[0],
+@@ -145,36 +127,10 @@
+ 
+ /*
+ ** Generic interfaces that device drivers can use:
+-**    mask_irq()	block IRQ
+-**    unmask_irq()	re-enable IRQ and trigger if IRQ is pending
+ **    disable_irq()	block IRQ
+ **    enable_irq()	clear pending and re-enable IRQ
+ */
+ 
+-void mask_irq(int irq)
+-{
+-	struct irq_region *region;
+-
+-	DBG_IRQ(irq, ("mask_irq(%d) %d+%d eiem 0x%lx\n", irq,
+-				IRQ_REGION(irq), IRQ_OFFSET(irq), cpu_eiem));
+-	irq = irq_canonicalize(irq);
+-	region = irq_region[IRQ_REGION(irq)];
+-	if (region->ops.mask_irq)
+-		region->ops.mask_irq(region->data.dev, IRQ_OFFSET(irq));
+-}
+-
+-void unmask_irq(int irq)
+-{
+-	struct irq_region *region;
+-
+-	DBG_IRQ(irq, ("unmask_irq(%d) %d+%d eiem 0x%lx\n", irq,
+-				IRQ_REGION(irq), IRQ_OFFSET(irq), cpu_eiem));
+-	irq = irq_canonicalize(irq);
+-	region = irq_region[IRQ_REGION(irq)];
+-	if (region->ops.unmask_irq)
+-		region->ops.unmask_irq(region->data.dev, IRQ_OFFSET(irq));
+-}
+-
+ void disable_irq(int irq)
+ {
+ 	struct irq_region *region;
+@@ -495,9 +451,9 @@
+ 		mask &= ~bit;	/* clear bit in mask - can exit loop sooner */
+ 		irq_num = region->data.irqbase + irq;
+ 
+-		mask_irq(irq_num);
++		disable_irq(irq_num);
+ 		do_irq(&region->action[irq], irq_num, regs);
+-		unmask_irq(irq_num);
++		enable_irq(irq_num);
+ 	}
+ }
+ 
+@@ -550,11 +506,6 @@
+ 	    count = IRQ_PER_REGION;
+ 	}
+ 
+-	/* if either mask *or* unmask is set, both have to be set. */
+-	if((ops->mask_irq || ops->unmask_irq) &&
+-		!(ops->mask_irq && ops->unmask_irq))
+-			return NULL;
+-
+ 	/* ditto for enable/disable */
+ 	if( (ops->disable_irq || ops->enable_irq) &&
+ 		!(ops->disable_irq && ops->enable_irq) )
+@@ -701,6 +652,8 @@
+ #ifdef CONFIG_SMP
+ void synchronize_irq(unsigned int irqnum)
+ {
++	if (irqnum == NO_IRQ)
++		return;
+ 	while (in_irq()) ;
+ }
+ EXPORT_SYMBOL(synchronize_irq);
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/module.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/module.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/module.c	2005-01-21 12:16:45.000000000 -0500
+@@ -2,7 +2,7 @@
+  *
+  *    The best reference for this stuff is probably the Processor-
+  *    Specific ELF Supplement for PA-RISC:
+- *        http://ftp.parisc-linux.org/docs/elf-pa-hp.pdf
++ *        http://ftp.parisc-linux.org/docs/arch/elf-pa-hp.pdf
+  *
+  *    Linux/PA-RISC Project (http://www.parisc-linux.org/)
+  *    Copyright (C) 2003 Randolph Chung <tausq at debian . org>
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/pacache.S
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/pacache.S	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/pacache.S	2005-01-21 12:16:45.000000000 -0500
+@@ -27,17 +27,17 @@
+  */
+ 
+ #ifdef __LP64__
+-#define ADDIB   addib,*
+-#define CMPB    cmpb,*
+-#define ANDCM   andcm,*
++#define ADDIB	addib,*
++#define CMPB	cmpb,*
++#define ANDCM	andcm,*
+ 
+-	.level 2.0w
++	.level	2.0w
+ #else
+-#define ADDIB   addib,
+-#define CMPB    cmpb,
+-#define ANDCM   andcm
++#define ADDIB	addib,
++#define CMPB	cmpb,
++#define ANDCM	andcm
+ 
+-	.level 2.0
++	.level	2.0
+ #endif
+ 
+ #include <asm/assembly.h>
+@@ -46,7 +46,7 @@
+ #include <asm/cache.h>
+ 
+ 	.text
+-	.align 128
++	.align	128
+ 
+ 	.export flush_tlb_all_local,code
+ 
+@@ -68,7 +68,7 @@
+ 	 * consolidated.
+ 	 */
+ 
+-	rsm     PSW_SM_I,%r19	/* relied upon translation! PA 2.0 Arch. F-5 */
++	rsm		PSW_SM_I, %r19		/* relied upon translation! PA 2.0 Arch. F-5 */
+ 	nop
+ 	nop
+ 	nop
+@@ -77,127 +77,127 @@
+ 	nop
+ 	nop
+ 	
+-	rsm     PSW_SM_Q,%r0       /* Turn off Q bit to load iia queue */
+-	ldil    L%REAL_MODE_PSW, %r1
+-	ldo     R%REAL_MODE_PSW(%r1), %r1
+-	mtctl	%r1, %cr22
+-	mtctl	%r0, %cr17	/* Clear IIASQ tail */
+-	mtctl	%r0, %cr17	/* Clear IIASQ head */
+-	ldil    L%PA(1f),%r1
+-	ldo     R%PA(1f)(%r1),%r1
+-	mtctl	%r1, %cr18	/* IIAOQ head */
+-	ldo	4(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ tail */
++	rsm		PSW_SM_Q, %r0		/* Turn off Q bit to load iia queue */
++	ldil		L%REAL_MODE_PSW, %r1
++	ldo		R%REAL_MODE_PSW(%r1), %r1
++	mtctl		%r1, %cr22
++	mtctl		%r0, %cr17		/* Clear IIASQ tail */
++	mtctl		%r0, %cr17		/* Clear IIASQ head */
++	ldil		L%PA(1f), %r1
++	ldo		R%PA(1f)(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ head */
++	ldo		4(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ tail */
+ 	rfi
+ 	nop
+ 
+-1:      ldil            L%PA(cache_info),%r1
+-	ldo             R%PA(cache_info)(%r1),%r1
++1:      ldil		L%PA(cache_info), %r1
++	ldo		R%PA(cache_info)(%r1), %r1
+ 
+ 	/* Flush Instruction Tlb */
+ 
+-	LDREG           ITLB_SID_BASE(%r1),%r20
+-	LDREG           ITLB_SID_STRIDE(%r1),%r21
+-	LDREG           ITLB_SID_COUNT(%r1),%r22
+-	LDREG           ITLB_OFF_BASE(%r1),%arg0
+-	LDREG           ITLB_OFF_STRIDE(%r1),%arg1
+-	LDREG           ITLB_OFF_COUNT(%r1),%arg2
+-	LDREG           ITLB_LOOP(%r1),%arg3
+-
+-	ADDIB=          -1,%arg3,fitoneloop     /* Preadjust and test */
+-	movb,<,n        %arg3,%r31,fitdone      /* If loop < 0, skip */
+-	copy            %arg0,%r28              /* Init base addr */
+-
+-fitmanyloop:                                    /* Loop if LOOP >= 2 */
+-	mtsp            %r20,%sr1
+-	add             %r21,%r20,%r20          /* increment space */
+-	copy            %arg2,%r29              /* Init middle loop count */
+-
+-fitmanymiddle:                                  /* Loop if LOOP >= 2 */
+-	ADDIB>          -1,%r31,fitmanymiddle   /* Adjusted inner loop decr */
+-	pitlbe          0(%sr1,%r28)
+-	pitlbe,m        %arg1(%sr1,%r28)        /* Last pitlbe and addr adjust */
+-	ADDIB>          -1,%r29,fitmanymiddle   /* Middle loop decr */
+-	copy            %arg3,%r31              /* Re-init inner loop count */
+-
+-	movb,tr         %arg0,%r28,fitmanyloop  /* Re-init base addr */
+-	ADDIB<=,n       -1,%r22,fitdone         /* Outer loop count decr */
+-
+-fitoneloop:                                     /* Loop if LOOP = 1 */
+-	mtsp            %r20,%sr1
+-	copy            %arg0,%r28              /* init base addr */
+-	copy            %arg2,%r29              /* init middle loop count */
+-
+-fitonemiddle:                                   /* Loop if LOOP = 1 */
+-	ADDIB>          -1,%r29,fitonemiddle    /* Middle loop count decr */
+-	pitlbe,m        %arg1(%sr1,%r28)        /* pitlbe for one loop */
++	LDREG		ITLB_SID_BASE(%r1), %r20
++	LDREG		ITLB_SID_STRIDE(%r1), %r21
++	LDREG		ITLB_SID_COUNT(%r1), %r22
++	LDREG		ITLB_OFF_BASE(%r1), %arg0
++	LDREG		ITLB_OFF_STRIDE(%r1), %arg1
++	LDREG		ITLB_OFF_COUNT(%r1), %arg2
++	LDREG		ITLB_LOOP(%r1), %arg3
++
++	ADDIB=		-1, %arg3, fitoneloop	/* Preadjust and test */
++	movb,<,n	%arg3, %r31, fitdone	/* If loop < 0, skip */
++	copy		%arg0, %r28		/* Init base addr */
++
++fitmanyloop:					/* Loop if LOOP >= 2 */
++	mtsp		%r20, %sr1
++	add		%r21, %r20, %r20	/* increment space */
++	copy		%arg2, %r29		/* Init middle loop count */
++
++fitmanymiddle:					/* Loop if LOOP >= 2 */
++	ADDIB>		-1, %r31, fitmanymiddle	/* Adjusted inner loop decr */
++	pitlbe		0(%sr1, %r28)
++	pitlbe,m	%arg1(%sr1, %r28)	/* Last pitlbe and addr adjust */
++	ADDIB>		-1, %r29, fitmanymiddle	/* Middle loop decr */
++	copy		%arg3, %r31		/* Re-init inner loop count */
++
++	movb,tr		%arg0, %r28, fitmanyloop /* Re-init base addr */
++	ADDIB<=,n	-1, %r22, fitdone	/* Outer loop count decr */
++
++fitoneloop:					/* Loop if LOOP = 1 */
++	mtsp		%r20, %sr1
++	copy		%arg0, %r28		/* init base addr */
++	copy		%arg2, %r29		/* init middle loop count */
++
++fitonemiddle:					/* Loop if LOOP = 1 */
++	ADDIB>		-1, %r29, fitonemiddle	/* Middle loop count decr */
++	pitlbe,m	%arg1(%sr1, %r28)	/* pitlbe for one loop */
+ 
+-	ADDIB>          -1,%r22,fitoneloop      /* Outer loop count decr */
+-	add             %r21,%r20,%r20          /* increment space */
++	ADDIB>		-1, %r22, fitoneloop	/* Outer loop count decr */
++	add		%r21, %r20, %r20		/* increment space */
+ 
+ fitdone:
+ 
+ 	/* Flush Data Tlb */
+ 
+-	LDREG           DTLB_SID_BASE(%r1),%r20
+-	LDREG           DTLB_SID_STRIDE(%r1),%r21
+-	LDREG           DTLB_SID_COUNT(%r1),%r22
+-	LDREG           DTLB_OFF_BASE(%r1),%arg0
+-	LDREG           DTLB_OFF_STRIDE(%r1),%arg1
+-	LDREG           DTLB_OFF_COUNT(%r1),%arg2
+-	LDREG           DTLB_LOOP(%r1),%arg3
+-
+-	ADDIB=          -1,%arg3,fdtoneloop     /* Preadjust and test */
+-	movb,<,n        %arg3,%r31,fdtdone      /* If loop < 0, skip */
+-	copy            %arg0,%r28              /* Init base addr */
+-
+-fdtmanyloop:                                    /* Loop if LOOP >= 2 */
+-	mtsp            %r20,%sr1
+-	add             %r21,%r20,%r20          /* increment space */
+-	copy            %arg2,%r29              /* Init middle loop count */
+-
+-fdtmanymiddle:                                  /* Loop if LOOP >= 2 */
+-	ADDIB>          -1,%r31,fdtmanymiddle   /* Adjusted inner loop decr */
+-	pdtlbe          0(%sr1,%r28)
+-	pdtlbe,m        %arg1(%sr1,%r28)        /* Last pdtlbe and addr adjust */
+-	ADDIB>          -1,%r29,fdtmanymiddle   /* Middle loop decr */
+-	copy            %arg3,%r31              /* Re-init inner loop count */
+-
+-	movb,tr         %arg0,%r28,fdtmanyloop  /* Re-init base addr */
+-	ADDIB<=,n       -1,%r22,fdtdone         /* Outer loop count decr */
+-
+-fdtoneloop:                                     /* Loop if LOOP = 1 */
+-	mtsp            %r20,%sr1
+-	copy            %arg0,%r28              /* init base addr */
+-	copy            %arg2,%r29              /* init middle loop count */
+-
+-fdtonemiddle:                                   /* Loop if LOOP = 1 */
+-	ADDIB>          -1,%r29,fdtonemiddle    /* Middle loop count decr */
+-	pdtlbe,m        %arg1(%sr1,%r28)        /* pdtlbe for one loop */
++	LDREG		DTLB_SID_BASE(%r1), %r20
++	LDREG		DTLB_SID_STRIDE(%r1), %r21
++	LDREG		DTLB_SID_COUNT(%r1), %r22
++	LDREG		DTLB_OFF_BASE(%r1), %arg0
++	LDREG		DTLB_OFF_STRIDE(%r1), %arg1
++	LDREG		DTLB_OFF_COUNT(%r1), %arg2
++	LDREG		DTLB_LOOP(%r1), %arg3
++
++	ADDIB=		-1, %arg3, fdtoneloop	/* Preadjust and test */
++	movb,<,n	%arg3, %r31, fdtdone	/* If loop < 0, skip */
++	copy		%arg0, %r28		/* Init base addr */
++
++fdtmanyloop:					/* Loop if LOOP >= 2 */
++	mtsp		%r20, %sr1
++	add		%r21, %r20, %r20	/* increment space */
++	copy		%arg2, %r29		/* Init middle loop count */
++
++fdtmanymiddle:					/* Loop if LOOP >= 2 */
++	ADDIB>		-1, %r31, fdtmanymiddle	/* Adjusted inner loop decr */
++	pdtlbe		0(%sr1, %r28)
++	pdtlbe,m	%arg1(%sr1, %r28)	/* Last pdtlbe and addr adjust */
++	ADDIB>		-1, %r29, fdtmanymiddle	/* Middle loop decr */
++	copy		%arg3, %r31		/* Re-init inner loop count */
++
++	movb,tr		%arg0, %r28, fdtmanyloop /* Re-init base addr */
++	ADDIB<=,n	-1, %r22,fdtdone	/* Outer loop count decr */
++
++fdtoneloop:					/* Loop if LOOP = 1 */
++	mtsp		%r20, %sr1
++	copy		%arg0, %r28		/* init base addr */
++	copy		%arg2, %r29		/* init middle loop count */
++
++fdtonemiddle:					/* Loop if LOOP = 1 */
++	ADDIB>		-1, %r29, fdtonemiddle	/* Middle loop count decr */
++	pdtlbe,m	%arg1(%sr1, %r28)	/* pdtlbe for one loop */
+ 
+-	ADDIB>          -1,%r22,fdtoneloop      /* Outer loop count decr */
+-	add             %r21,%r20,%r20          /* increment space */
++	ADDIB>		-1, %r22, fdtoneloop	/* Outer loop count decr */
++	add		%r21, %r20, %r20	/* increment space */
+ 
+ fdtdone:
+ 
+ 	/* Switch back to virtual mode */
+ 
+-	rsm     PSW_SM_Q,%r0       /* clear Q bit to load iia queue */
+-	ldil	L%KERNEL_PSW, %r1
+-	ldo	R%KERNEL_PSW(%r1), %r1
+-	or      %r1,%r19,%r1    /* Set I bit if set on entry */
+-	mtctl	%r1, %cr22
+-	mtctl	%r0, %cr17	/* Clear IIASQ tail */
+-	mtctl	%r0, %cr17	/* Clear IIASQ head */
+-	ldil    L%(2f), %r1
+-	ldo     R%(2f)(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ head */
+-	ldo	4(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ tail */
++	rsm		PSW_SM_Q, %r0		/* clear Q bit to load iia queue */
++	ldil		L%KERNEL_PSW, %r1
++	ldo		R%KERNEL_PSW(%r1), %r1
++	or		%r1, %r19, %r1		/* Set I bit if set on entry */
++	mtctl		%r1, %cr22
++	mtctl		%r0, %cr17		/* Clear IIASQ tail */
++	mtctl		%r0, %cr17		/* Clear IIASQ head */
++	ldil		L%(2f), %r1
++	ldo		R%(2f)(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ head */
++	ldo		4(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ tail */
+ 	rfi
+ 	nop
+ 
+-2:      bv      %r0(%r2)
++2:      bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -211,78 +211,78 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	mtsp            %r0,%sr1
+-	ldil            L%cache_info,%r1
+-	ldo             R%cache_info(%r1),%r1
++	mtsp		%r0, %sr1
++	ldil		L%cache_info, %r1
++	ldo		R%cache_info(%r1), %r1
+ 
+ 	/* Flush Instruction Cache */
+ 
+-	LDREG           ICACHE_BASE(%r1),%arg0
+-	LDREG           ICACHE_STRIDE(%r1),%arg1
+-	LDREG           ICACHE_COUNT(%r1),%arg2
+-	LDREG           ICACHE_LOOP(%r1),%arg3
+-	rsm             PSW_SM_I,%r22		/* No mmgt ops during loop*/
+-	ADDIB=          -1,%arg3,fioneloop      /* Preadjust and test */
+-	movb,<,n        %arg3,%r31,fisync       /* If loop < 0, do sync */
+-
+-fimanyloop:                                     /* Loop if LOOP >= 2 */
+-	ADDIB>          -1,%r31,fimanyloop      /* Adjusted inner loop decr */
+-	fice            0(%sr1,%arg0)
+-	fice,m          %arg1(%sr1,%arg0)       /* Last fice and addr adjust */
+-	movb,tr         %arg3,%r31,fimanyloop   /* Re-init inner loop count */
+-	ADDIB<=,n       -1,%arg2,fisync         /* Outer loop decr */
+-
+-fioneloop:                                      /* Loop if LOOP = 1 */
+-	ADDIB>          -1,%arg2,fioneloop      /* Outer loop count decr */
+-	fice,m          %arg1(%sr1,%arg0)       /* Fice for one loop */
++	LDREG		ICACHE_BASE(%r1), %arg0
++	LDREG		ICACHE_STRIDE(%r1), %arg1
++	LDREG		ICACHE_COUNT(%r1), %arg2
++	LDREG		ICACHE_LOOP(%r1), %arg3
++	rsm             PSW_SM_I, %r22		/* No mmgt ops during loop*/
++	ADDIB=		-1, %arg3, fioneloop	/* Preadjust and test */
++	movb,<,n	%arg3, %r31, fisync	/* If loop < 0, do sync */
++
++fimanyloop:					/* Loop if LOOP >= 2 */
++	ADDIB>		-1, %r31, fimanyloop	/* Adjusted inner loop decr */
++	fice            0(%sr1, %arg0)
++	fice,m		%arg1(%sr1, %arg0)	/* Last fice and addr adjust */
++	movb,tr		%arg3, %r31, fimanyloop	/* Re-init inner loop count */
++	ADDIB<=,n	-1, %arg2, fisync	/* Outer loop decr */
++
++fioneloop:					/* Loop if LOOP = 1 */
++	ADDIB>		-1, %arg2, fioneloop	/* Outer loop count decr */
++	fice,m		%arg1(%sr1, %arg0)	/* Fice for one loop */
+ 
+ fisync:
+ 	sync
+-	mtsm	%r22
+-	bv      %r0(%r2)
++	mtsm		%r22
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+ 	.procend
+ 
+-	.export flush_data_cache_local,code
+-	.import cache_info,data
++	.export flush_data_cache_local, code
++	.import cache_info, data
+ 
+ flush_data_cache_local:
+ 	.proc
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	mtsp            %r0,%sr1
+-	ldil            L%cache_info,%r1
+-	ldo             R%cache_info(%r1),%r1
++	mtsp		%r0, %sr1
++	ldil		L%cache_info, %r1
++	ldo		R%cache_info(%r1), %r1
+ 
+ 	/* Flush Data Cache */
+ 
+-	LDREG           DCACHE_BASE(%r1),%arg0
+-	LDREG           DCACHE_STRIDE(%r1),%arg1
+-	LDREG           DCACHE_COUNT(%r1),%arg2
+-	LDREG           DCACHE_LOOP(%r1),%arg3
+-	rsm             PSW_SM_I,%r22
+-	ADDIB=          -1,%arg3,fdoneloop      /* Preadjust and test */
+-	movb,<,n        %arg3,%r31,fdsync       /* If loop < 0, do sync */
+-
+-fdmanyloop:                                     /* Loop if LOOP >= 2 */
+-	ADDIB>          -1,%r31,fdmanyloop      /* Adjusted inner loop decr */
+-	fdce            0(%sr1,%arg0)
+-	fdce,m          %arg1(%sr1,%arg0)       /* Last fdce and addr adjust */
+-	movb,tr         %arg3,%r31,fdmanyloop   /* Re-init inner loop count */
+-	ADDIB<=,n       -1,%arg2,fdsync         /* Outer loop decr */
+-
+-fdoneloop:                                      /* Loop if LOOP = 1 */
+-	ADDIB>          -1,%arg2,fdoneloop      /* Outer loop count decr */
+-	fdce,m          %arg1(%sr1,%arg0)       /* Fdce for one loop */
++	LDREG		DCACHE_BASE(%r1), %arg0
++	LDREG		DCACHE_STRIDE(%r1), %arg1
++	LDREG		DCACHE_COUNT(%r1), %arg2
++	LDREG		DCACHE_LOOP(%r1), %arg3
++	rsm		PSW_SM_I, %r22
++	ADDIB=		-1, %arg3, fdoneloop	/* Preadjust and test */
++	movb,<,n	%arg3, %r31, fdsync	/* If loop < 0, do sync */
++
++fdmanyloop:					/* Loop if LOOP >= 2 */
++	ADDIB>		-1, %r31, fdmanyloop	/* Adjusted inner loop decr */
++	fdce		0(%sr1, %arg0)
++	fdce,m		%arg1(%sr1, %arg0)	/* Last fdce and addr adjust */
++	movb,tr		%arg3, %r31, fdmanyloop	/* Re-init inner loop count */
++	ADDIB<=,n	-1, %arg2, fdsync	/* Outer loop decr */
++
++fdoneloop:					/* Loop if LOOP = 1 */
++	ADDIB>		-1, %arg2, fdoneloop	/* Outer loop count decr */
++	fdce,m		%arg1(%sr1, %arg0)	/* Fdce for one loop */
+ 
+ fdsync:
+ 	syncdma
+ 	sync
+-	mtsm    %r22
+-	bv      %r0(%r2)
++	mtsm		%r22
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -295,7 +295,7 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldi 64,%r1
++	ldi		64, %r1
+ 
+ 	/*
+ 	 * This loop is optimized for PCXL/PCXL2 ldw/ldw and stw/stw
+@@ -308,43 +308,43 @@
+ 
+ 
+ 1:
+-	ldw 0(%r25),%r19
+-	ldw 4(%r25),%r20
+-	ldw 8(%r25),%r21
+-	ldw 12(%r25),%r22
+-	stw %r19,0(%r26)
+-	stw %r20,4(%r26)
+-	stw %r21,8(%r26)
+-	stw %r22,12(%r26)
+-	ldw 16(%r25),%r19
+-	ldw 20(%r25),%r20
+-	ldw 24(%r25),%r21
+-	ldw 28(%r25),%r22
+-	stw %r19,16(%r26)
+-	stw %r20,20(%r26)
+-	stw %r21,24(%r26)
+-	stw %r22,28(%r26)
+-	ldw 32(%r25),%r19
+-	ldw 36(%r25),%r20
+-	ldw 40(%r25),%r21
+-	ldw 44(%r25),%r22
+-	stw %r19,32(%r26)
+-	stw %r20,36(%r26)
+-	stw %r21,40(%r26)
+-	stw %r22,44(%r26)
+-	ldw 48(%r25),%r19
+-	ldw 52(%r25),%r20
+-	ldw 56(%r25),%r21
+-	ldw 60(%r25),%r22
+-	stw %r19,48(%r26)
+-	stw %r20,52(%r26)
+-	stw %r21,56(%r26)
+-	stw %r22,60(%r26)
+-	ldo 64(%r26),%r26
+-	ADDIB>  -1,%r1,1b
+-	ldo 64(%r25),%r25
++	ldw		0(%r25), %r19
++	ldw		4(%r25), %r20
++	ldw		8(%r25), %r21
++	ldw		12(%r25), %r22
++	stw		%r19, 0(%r26)
++	stw		%r20, 4(%r26)
++	stw		%r21, 8(%r26)
++	stw		%r22, 12(%r26)
++	ldw		16(%r25), %r19
++	ldw		20(%r25), %r20
++	ldw		24(%r25), %r21
++	ldw		28(%r25), %r22
++	stw		%r19, 16(%r26)
++	stw		%r20, 20(%r26)
++	stw		%r21, 24(%r26)
++	stw		%r22, 28(%r26)
++	ldw		32(%r25), %r19
++	ldw		36(%r25), %r20
++	ldw		40(%r25), %r21
++	ldw		44(%r25), %r22
++	stw		%r19, 32(%r26)
++	stw		%r20, 36(%r26)
++	stw		%r21, 40(%r26)
++	stw		%r22, 44(%r26)
++	ldw		48(%r25), %r19
++	ldw		52(%r25), %r20
++	ldw		56(%r25), %r21
++	ldw		60(%r25), %r22
++	stw		%r19, 48(%r26)
++	stw		%r20, 52(%r26)
++	stw		%r21, 56(%r26)
++	stw		%r22, 60(%r26)
++	ldo		64(%r26), %r26
++	ADDIB>		-1, %r1, 1b
++	ldo		64(%r25), %r25
+ 
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -393,33 +393,33 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%(__PAGE_OFFSET),%r1
+-	sub     %r26,%r1,%r26
+-	sub     %r25,%r1,%r23  /* move physical addr into non shadowed reg */
+-
+-	ldil    L%(TMPALIAS_MAP_START),%r28
+-#ifdef __LP64__
+-	extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */
+-	extrd,u %r23,56,32,%r23 /* convert phys addr to tlb insert format */
+-	depd    %r24,63,22,%r28 /* Form aliased virtual address 'to' */
+-	depdi   0,63,12,%r28    /* Clear any offset bits */
+-	copy    %r28,%r29
+-	depdi   1,41,1,%r29     /* Form aliased virtual address 'from' */
++	ldil		L%(__PAGE_OFFSET), %r1
++	sub		%r26, %r1, %r26
++	sub		%r25, %r1, %r23		/* move physical addr into non shadowed reg */
++
++	ldil		L%(TMPALIAS_MAP_START), %r28
++#ifdef __LP64__
++	extrd,u		%r26,56,32, %r26		/* convert phys addr to tlb insert format */
++	extrd,u		%r23,56,32, %r23		/* convert phys addr to tlb insert format */
++	depd		%r24,63,22, %r28		/* Form aliased virtual address 'to' */
++	depdi		0, 63,12, %r28		/* Clear any offset bits */
++	copy		%r28, %r29
++	depdi		1, 41,1, %r29		/* Form aliased virtual address 'from' */
+ #else
+-	extrw,u %r26,24,25,%r26 /* convert phys addr to tlb insert format */
+-	extrw,u %r23,24,25,%r23 /* convert phys addr to tlb insert format */
+-	depw    %r24,31,22,%r28 /* Form aliased virtual address 'to' */
+-	depwi   0,31,12,%r28    /* Clear any offset bits */
+-	copy    %r28,%r29
+-	depwi   1,9,1,%r29      /* Form aliased virtual address 'from' */
++	extrw,u		%r26, 24,25, %r26	/* convert phys addr to tlb insert format */
++	extrw,u		%r23, 24,25, %r23	/* convert phys addr to tlb insert format */
++	depw		%r24, 31,22, %r28	/* Form aliased virtual address 'to' */
++	depwi		0, 31,12, %r28		/* Clear any offset bits */
++	copy		%r28, %r29
++	depwi		1, 9,1, %r29		/* Form aliased virtual address 'from' */
+ #endif
+ 
+ 	/* Purge any old translations */
+ 
+-	pdtlb   0(%r28)
+-	pdtlb   0(%r29)
++	pdtlb		0(%r28)
++	pdtlb		0(%r29)
+ 
+-	ldi 64,%r1
++	ldi		64, %r1
+ 
+ 	/*
+ 	 * This loop is optimized for PCXL/PCXL2 ldw/ldw and stw/stw
+@@ -432,43 +432,43 @@
+ 
+ 
+ 1:
+-	ldw 0(%r29),%r19
+-	ldw 4(%r29),%r20
+-	ldw 8(%r29),%r21
+-	ldw 12(%r29),%r22
+-	stw %r19,0(%r28)
+-	stw %r20,4(%r28)
+-	stw %r21,8(%r28)
+-	stw %r22,12(%r28)
+-	ldw 16(%r29),%r19
+-	ldw 20(%r29),%r20
+-	ldw 24(%r29),%r21
+-	ldw 28(%r29),%r22
+-	stw %r19,16(%r28)
+-	stw %r20,20(%r28)
+-	stw %r21,24(%r28)
+-	stw %r22,28(%r28)
+-	ldw 32(%r29),%r19
+-	ldw 36(%r29),%r20
+-	ldw 40(%r29),%r21
+-	ldw 44(%r29),%r22
+-	stw %r19,32(%r28)
+-	stw %r20,36(%r28)
+-	stw %r21,40(%r28)
+-	stw %r22,44(%r28)
+-	ldw 48(%r29),%r19
+-	ldw 52(%r29),%r20
+-	ldw 56(%r29),%r21
+-	ldw 60(%r29),%r22
+-	stw %r19,48(%r28)
+-	stw %r20,52(%r28)
+-	stw %r21,56(%r28)
+-	stw %r22,60(%r28)
+-	ldo 64(%r28),%r28
+-	ADDIB>  -1,%r1,1b
+-	ldo 64(%r29),%r29
++	ldw		0(%r29), %r19
++	ldw		4(%r29), %r20
++	ldw		8(%r29), %r21
++	ldw		12(%r29), %r22
++	stw		%r19, 0(%r28)
++	stw		%r20, 4(%r28)
++	stw		%r21, 8(%r28)
++	stw		%r22, 12(%r28)
++	ldw		16(%r29), %r19
++	ldw		20(%r29), %r20
++	ldw		24(%r29), %r21
++	ldw		28(%r29), %r22
++	stw		%r19, 16(%r28)
++	stw		%r20, 20(%r28)
++	stw		%r21, 24(%r28)
++	stw		%r22, 28(%r28)
++	ldw		32(%r29), %r19
++	ldw		36(%r29), %r20
++	ldw		40(%r29), %r21
++	ldw		44(%r29), %r22
++	stw		%r19, 32(%r28)
++	stw		%r20, 36(%r28)
++	stw		%r21, 40(%r28)
++	stw		%r22, 44(%r28)
++	ldw		48(%r29), %r19
++	ldw		52(%r29), %r20
++	ldw		56(%r29), %r21
++	ldw		60(%r29), %r22
++	stw		%r19, 48(%r28)
++	stw		%r20, 52(%r28)
++	stw		%r21, 56(%r28)
++	stw		%r22, 60(%r28)
++	ldo		64(%r28), %r28
++	ADDIB>		-1, %r1,1b
++	ldo		64(%r29), %r29
+ 
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -482,49 +482,77 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	tophys_r1 %r26
++	tophys_r1	%r26
+ 
+-	ldil    L%(TMPALIAS_MAP_START),%r28
++	ldil		L%(TMPALIAS_MAP_START), %r28
+ #ifdef __LP64__
+ #if (TMPALIAS_MAP_START >= 0x80000000)
+-	depdi	0,31,32,%r28	/* clear any sign extension */
++	depdi		0, 31,32, %r28		/* clear any sign extension */
+ #endif
+-	extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */
+-	depd    %r25,63,22,%r28 /* Form aliased virtual address 'to' */
+-	depdi   0,63,12,%r28    /* Clear any offset bits */
++	extrd,u		%r26, 56,32, %r26	/* convert phys addr to tlb insert format */
++	depd		%r25, 63,22, %r28	/* Form aliased virtual address 'to' */
++	depdi		0, 63,12, %r28		/* Clear any offset bits */
+ #else
+-	extrw,u %r26,24,25,%r26 /* convert phys addr to tlb insert format */
+-	depw    %r25,31,22,%r28 /* Form aliased virtual address 'to' */
+-	depwi   0,31,12,%r28    /* Clear any offset bits */
++	extrw,u		%r26, 24,25, %r26	/* convert phys addr to tlb insert format */
++	depw		%r25, 31,22, %r28	/* Form aliased virtual address 'to' */
++	depwi		0, 31,12, %r28		/* Clear any offset bits */
+ #endif
+ 
+ 	/* Purge any old translation */
+ 
+-	pdtlb   0(%r28)
++	pdtlb		0(%r28)
++
++#ifdef __LP64__
++	ldi		32, %r1			/* PAGE_SIZE/128 == 32 */
++
++	/* PREFETCH (Write) has not (yet) been proven to help here */
++/* #define	PREFETCHW_OP	ldd		256(%0), %r0 */
++
++1:	std		%r0, 0(%r28)
++	std		%r0, 8(%r28)
++	std		%r0, 16(%r28)
++	std		%r0, 24(%r28)
++	std		%r0, 32(%r28)
++	std		%r0, 40(%r28)
++	std		%r0, 48(%r28)
++	std		%r0, 56(%r28)
++	std		%r0, 64(%r28)
++	std		%r0, 72(%r28)
++	std		%r0, 80(%r28)
++	std		%r0, 88(%r28)
++	std		%r0, 96(%r28)
++	std		%r0, 104(%r28)
++	std		%r0, 112(%r28)
++	std		%r0, 120(%r28)
++	ADDIB>		-1, %r1, 1b
++	ldo		128(%r28), %r28
++
++#else	/* ! __LP64 */
+ 
+-	ldi 64,%r1
++	ldi		64, %r1			/* PAGE_SIZE/64 == 64 */
+ 
+ 1:
+-	stw %r0,0(%r28)
+-	stw %r0,4(%r28)
+-	stw %r0,8(%r28)
+-	stw %r0,12(%r28)
+-	stw %r0,16(%r28)
+-	stw %r0,20(%r28)
+-	stw %r0,24(%r28)
+-	stw %r0,28(%r28)
+-	stw %r0,32(%r28)
+-	stw %r0,36(%r28)
+-	stw %r0,40(%r28)
+-	stw %r0,44(%r28)
+-	stw %r0,48(%r28)
+-	stw %r0,52(%r28)
+-	stw %r0,56(%r28)
+-	stw %r0,60(%r28)
+-	ADDIB>  -1,%r1,1b
+-	ldo 64(%r28),%r28
++	stw		%r0, 0(%r28)
++	stw		%r0, 4(%r28)
++	stw		%r0, 8(%r28)
++	stw		%r0, 12(%r28)
++	stw		%r0, 16(%r28)
++	stw		%r0, 20(%r28)
++	stw		%r0, 24(%r28)
++	stw		%r0, 28(%r28)
++	stw		%r0, 32(%r28)
++	stw		%r0, 36(%r28)
++	stw		%r0, 40(%r28)
++	stw		%r0, 44(%r28)
++	stw		%r0, 48(%r28)
++	stw		%r0, 52(%r28)
++	stw		%r0, 56(%r28)
++	stw		%r0, 60(%r28)
++	ADDIB>		-1, %r1, 1b
++	ldo		64(%r28), %r28
++#endif	/* __LP64 */
+ 
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -537,38 +565,38 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r25
++	depdi,z		1, 63-PAGE_SHIFT,1, %r25
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r25
++	depwi,z		1, 31-PAGE_SHIFT,1, %r25
+ #endif
+-	add     %r26,%r25,%r25
+-	sub     %r25,%r23,%r25
++	add		%r26, %r25, %r25
++	sub		%r25, %r23, %r25
+ 
+ 
+-1:      fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	fdc,m   %r23(%r26)
+-	CMPB<<  %r26,%r25,1b
+-	fdc,m   %r23(%r26)
++1:      fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	fdc,m		%r23(%r26)
++	CMPB<<		%r26, %r25,1b
++	fdc,m		%r23(%r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -581,38 +609,38 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r25
++	depdi,z		1,63-PAGE_SHIFT,1, %r25
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r25
++	depwi,z		1,31-PAGE_SHIFT,1, %r25
+ #endif
+-	add     %r26,%r25,%r25
+-	sub     %r25,%r23,%r25
++	add		%r26, %r25, %r25
++	sub		%r25, %r23, %r25
+ 
+ 
+-1:      fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	fdc,m   %r23(%sr3,%r26)
+-	CMPB<<  %r26,%r25,1b
+-	fdc,m   %r23(%sr3,%r26)
++1:      fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	fdc,m		%r23(%sr3, %r26)
++	CMPB<<		%r26, %r25,1b
++	fdc,m		%r23(%sr3, %r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -625,38 +653,38 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r25
++	depdi,z		1, 63-PAGE_SHIFT,1, %r25
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r25
++	depwi,z		1, 31-PAGE_SHIFT,1, %r25
+ #endif
+-	add     %r26,%r25,%r25
+-	sub     %r25,%r23,%r25
++	add		%r26, %r25, %r25
++	sub		%r25, %r23, %r25
+ 
+ 
+-1:      fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	fic,m   %r23(%sr3,%r26)
+-	CMPB<<  %r26,%r25,1b
+-	fic,m   %r23(%sr3,%r26)
++1:      fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	fic,m		%r23(%sr3, %r26)
++	CMPB<<		%r26, %r25,1b
++	fic,m		%r23(%sr3, %r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -670,37 +698,37 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r25
++	depdi,z		1, 63-PAGE_SHIFT,1, %r25
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r25
++	depwi,z		1, 31-PAGE_SHIFT,1, %r25
+ #endif
+-	add      %r26,%r25,%r25
+-	sub      %r25,%r23,%r25
++	add		%r26, %r25, %r25
++	sub		%r25, %r23, %r25
+ 
+-1:      pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	pdc,m   %r23(%r26)
+-	CMPB<<  %r26,%r25,1b
+-	pdc,m   %r23(%r26)
++1:      pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	pdc,m		%r23(%r26)
++	CMPB<<		%r26, %r25, 1b
++	pdc,m		%r23(%r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -718,54 +746,54 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	tophys_r1 %r26
++	tophys_r1		%r26
+ 
+-	ldil    L%(TMPALIAS_MAP_START),%r28
++	ldil		L%(TMPALIAS_MAP_START), %r28
+ #ifdef __LP64__
+-	extrd,u %r26,56,32,%r26 /* convert phys addr to tlb insert format */
+-	depd    %r25,63,22,%r28 /* Form aliased virtual address 'to' */
+-	depdi   0,63,12,%r28    /* Clear any offset bits */
++	extrd,u		%r26, 56,32, %r26	/* convert phys addr to tlb insert format */
++	depd		%r25, 63,22, %r28	/* Form aliased virtual address 'to' */
++	depdi		0, 63,12, %r28		/* Clear any offset bits */
+ #else
+-	extrw,u %r26,24,25,%r26 /* convert phys addr to tlb insert format */
+-	depw    %r25,31,22,%r28 /* Form aliased virtual address 'to' */
+-	depwi   0,31,12,%r28    /* Clear any offset bits */
++	extrw,u		%r26, 24,25, %r26	/* convert phys addr to tlb insert format */
++	depw		%r25, 31,22, %r28	/* Form aliased virtual address 'to' */
++	depwi		0, 31,12, %r28		/* Clear any offset bits */
+ #endif
+ 
+ 	/* Purge any old translation */
+ 
+-	pdtlb   0(%r28)
++	pdtlb		0(%r28)
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r29
++	depdi,z		1, 63-PAGE_SHIFT,1, %r29
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r29
++	depwi,z		1, 31-PAGE_SHIFT,1, %r29
+ #endif
+-	add      %r28,%r29,%r29
+-	sub      %r29,%r23,%r29
++	add		%r28, %r29, %r29
++	sub		%r29, %r23, %r29
+ 
+-1:      fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	fdc,m   %r23(%r28)
+-	CMPB<<  %r28,%r29,1b
+-	fdc,m   %r23(%r28)
++1:      fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	fdc,m		%r23(%r28)
++	CMPB<<		%r28, %r29, 1b
++	fdc,m		%r23(%r28)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -779,16 +807,16 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
+-	ldo     -1(%r23),%r21
+-	ANDCM   %r26,%r21,%r26
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
++	ldo		-1(%r23), %r21
++	ANDCM		%r26, %r21, %r26
+ 
+-1:      CMPB<<,n %r26,%r25,1b
+-	fdc,m   %r23(%sr3,%r26)
++1:      CMPB<<,n	%r26, %r25, 1b
++	fdc,m		%r23(%sr3, %r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -801,17 +829,17 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%dcache_stride,%r1
+-	ldw     R%dcache_stride(%r1),%r23
+-	ldo     -1(%r23),%r21
+-	ANDCM   %r26,%r21,%r26
++	ldil		L%dcache_stride, %r1
++	ldw		R%dcache_stride(%r1), %r23
++	ldo		-1(%r23), %r21
++	ANDCM		%r26, %r21, %r26
+ 
+-1:      CMPB<<,n %r26,%r25,1b
+-	fdc,m   %r23(%r26)
++1:      CMPB<<,n	%r26, %r25,1b
++	fdc,m		%r23(%r26)
+ 
+ 	sync
+ 	syncdma
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -824,16 +852,16 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%icache_stride,%r1
+-	ldw     R%icache_stride(%r1),%r23
+-	ldo     -1(%r23),%r21
+-	ANDCM   %r26,%r21,%r26
++	ldil		L%icache_stride, %r1
++	ldw		R%icache_stride(%r1), %r23
++	ldo		-1(%r23), %r21
++	ANDCM		%r26, %r21, %r26
+ 
+-1:      CMPB<<,n %r26,%r25,1b
+-	fic,m   %r23(%sr3,%r26)
++1:      CMPB<<,n	%r26, %r25,1b
++	fic,m		%r23(%sr3, %r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -846,38 +874,38 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%icache_stride,%r1
+-	ldw     R%icache_stride(%r1),%r23
++	ldil		L%icache_stride, %r1
++	ldw		R%icache_stride(%r1), %r23
+ 
+ #ifdef __LP64__
+-	depdi,z 1,63-PAGE_SHIFT,1,%r25
++	depdi,z		1, 63-PAGE_SHIFT,1, %r25
+ #else
+-	depwi,z 1,31-PAGE_SHIFT,1,%r25
++	depwi,z		1, 31-PAGE_SHIFT,1, %r25
+ #endif
+-	add     %r26,%r25,%r25
+-	sub     %r25,%r23,%r25
++	add		%r26, %r25, %r25
++	sub		%r25, %r23, %r25
+ 
+ 
+-1:      fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	fic,m   %r23(%r26)
+-	CMPB<<  %r26,%r25,1b
+-	fic,m   %r23(%r26)
++1:      fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	fic,m		%r23(%r26)
++	CMPB<<		%r26, %r25, 1b
++	fic,m		%r23(%r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+@@ -890,22 +918,22 @@
+ 	.callinfo NO_CALLS
+ 	.entry
+ 
+-	ldil    L%icache_stride,%r1
+-	ldw     R%icache_stride(%r1),%r23
+-	ldo     -1(%r23),%r21
+-	ANDCM   %r26,%r21,%r26
++	ldil		L%icache_stride, %r1
++	ldw		R%icache_stride(%r1), %r23
++	ldo		-1(%r23), %r21
++	ANDCM		%r26, %r21, %r26
+ 
+-1:      CMPB<<,n %r26,%r25,1b
+-	fic,m   %r23(%r26)
++1:      CMPB<<,n	%r26, %r25, 1b
++	fic,m		%r23(%r26)
+ 
+ 	sync
+-	bv      %r0(%r2)
++	bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+ 	.procend
+ 
+-	.align 128
++	.align	128
+ 
+ 	.export disable_sr_hashing_asm,code
+ 
+@@ -916,7 +944,7 @@
+ 
+ 	/* Switch to real mode */
+ 
+-	ssm     0,%r0           /* relied upon translation! */
++	ssm		0, %r0			/* relied upon translation! */
+ 	nop
+ 	nop
+ 	nop
+@@ -925,73 +953,73 @@
+ 	nop
+ 	nop
+ 	
+-	rsm     (PSW_SM_Q|PSW_SM_I),%r0 /* disable Q&I to load the iia queue */
+-	ldil    L%REAL_MODE_PSW, %r1
+-	ldo     R%REAL_MODE_PSW(%r1), %r1
+-	mtctl	%r1, %cr22
+-	mtctl	%r0, %cr17	/* Clear IIASQ tail */
+-	mtctl	%r0, %cr17	/* Clear IIASQ head */
+-	ldil    L%PA(1f),%r1
+-	ldo     R%PA(1f)(%r1),%r1
+-	mtctl	%r1, %cr18	/* IIAOQ head */
+-	ldo	4(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ tail */
++	rsm		(PSW_SM_Q|PSW_SM_I), %r0 /* disable Q&I to load the iia queue */
++	ldil		L%REAL_MODE_PSW, %r1
++	ldo		R%REAL_MODE_PSW(%r1), %r1
++	mtctl		%r1, %cr22
++	mtctl		%r0, %cr17		/* Clear IIASQ tail */
++	mtctl		%r0, %cr17		/* Clear IIASQ head */
++	ldil		L%PA(1f), %r1
++	ldo		R%PA(1f)(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ head */
++	ldo		4(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ tail */
+ 	rfi
+ 	nop
+ 
+-1:      cmpib,=,n SRHASH_PCXST,%r26,srdis_pcxs
+-	cmpib,=,n SRHASH_PCXL,%r26,srdis_pcxl
+-	cmpib,=,n SRHASH_PA20,%r26,srdis_pa20
+-	b,n       srdis_done
++1:      cmpib,=,n	SRHASH_PCXST, %r26,srdis_pcxs
++	cmpib,=,n	SRHASH_PCXL, %r26,srdis_pcxl
++	cmpib,=,n	SRHASH_PA20, %r26,srdis_pa20
++	b,n		srdis_done
+ 
+ srdis_pcxs:
+ 
+ 	/* Disable Space Register Hashing for PCXS,PCXT,PCXT' */
+ 
+-	.word           0x141c1a00  /* mfdiag %dr0,%r28 */
+-	.word           0x141c1a00  /* must issue twice */
+-	depwi           0,18,1,%r28 /* Clear DHE (dcache hash enable) */
+-	depwi           0,20,1,%r28 /* Clear IHE (icache hash enable) */
+-	.word           0x141c1600  /* mtdiag %r28,%dr0 */
+-	.word           0x141c1600  /* must issue twice */
+-	b,n             srdis_done
++	.word		0x141c1a00		/* mfdiag %dr0, %r28 */
++	.word		0x141c1a00		/* must issue twice */
++	depwi		0,18,1, %r28		/* Clear DHE (dcache hash enable) */
++	depwi		0,20,1, %r28		/* Clear IHE (icache hash enable) */
++	.word		0x141c1600		/* mtdiag %r28, %dr0 */
++	.word		0x141c1600		/* must issue twice */
++	b,n		srdis_done
+ 
+ srdis_pcxl:
+ 
+ 	/* Disable Space Register Hashing for PCXL */
+ 
+-	.word           0x141c0600  /* mfdiag %dr0,%r28 */
+-	depwi           0,28,2,%r28 /* Clear DHASH_EN & IHASH_EN */
+-	.word           0x141c0240  /* mtdiag %r28,%dr0 */
+-	b,n             srdis_done
++	.word		0x141c0600		/* mfdiag %dr0, %r28 */
++	depwi           0,28,2, %r28		/* Clear DHASH_EN & IHASH_EN */
++	.word		0x141c0240		/* mtdiag %r28, %dr0 */
++	b,n		srdis_done
+ 
+ srdis_pa20:
+ 
+ 	/* Disable Space Register Hashing for PCXU,PCXU+,PCXW,PCXW+ */
+ 
+-	.word           0x144008bc  /* mfdiag %dr2,%r28 */
+-	depdi           0,54,1,%r28 /* clear DIAG_SPHASH_ENAB (bit 54) */
+-	.word           0x145c1840  /* mtdiag %r28,%dr2 */
++	.word		0x144008bc		/* mfdiag %dr2, %r28 */
++	depdi		0, 54,1, %r28		/* clear DIAG_SPHASH_ENAB (bit 54) */
++	.word		0x145c1840		/* mtdiag %r28, %dr2 */
+ 
+ srdis_done:
+ 
+ 	/* Switch back to virtual mode */
+ 
+-	rsm     PSW_SM_Q,%r0           /* clear Q bit to load iia queue */
+-	ldil	L%KERNEL_PSW, %r1
+-	ldo	R%KERNEL_PSW(%r1), %r1
+-	mtctl	%r1, %cr22
+-	mtctl	%r0, %cr17	/* Clear IIASQ tail */
+-	mtctl	%r0, %cr17	/* Clear IIASQ head */
+-	ldil    L%(2f), %r1
+-	ldo     R%(2f)(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ head */
+-	ldo	4(%r1), %r1
+-	mtctl	%r1, %cr18	/* IIAOQ tail */
++	rsm		PSW_SM_Q, %r0		/* clear Q bit to load iia queue */
++	ldil		L%KERNEL_PSW, %r1
++	ldo		R%KERNEL_PSW(%r1), %r1
++	mtctl		%r1, %cr22
++	mtctl		%r0, %cr17		/* Clear IIASQ tail */
++	mtctl		%r0, %cr17		/* Clear IIASQ head */
++	ldil 	   	L%(2f), %r1
++	ldo     	R%(2f)(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ head */
++	ldo		4(%r1), %r1
++	mtctl		%r1, %cr18		/* IIAOQ tail */
+ 	rfi
+ 	nop
+ 
+-2:      bv      %r0(%r2)
++2:      bv		%r0(%r2)
+ 	nop
+ 	.exit
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/parisc_ksyms.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/parisc_ksyms.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/parisc_ksyms.c	2005-01-21 12:16:45.000000000 -0500
+@@ -87,9 +87,9 @@
+ #include <asm/io.h>
+ EXPORT_SYMBOL(__ioremap);
+ EXPORT_SYMBOL(iounmap);
+-EXPORT_SYMBOL(__memcpy_toio);
+-EXPORT_SYMBOL(__memcpy_fromio);
+-EXPORT_SYMBOL(__memset_io);
++EXPORT_SYMBOL(memcpy_toio);
++EXPORT_SYMBOL(memcpy_fromio);
++EXPORT_SYMBOL(memset_io);
+ 
+ #include <asm/unistd.h>
+ EXPORT_SYMBOL(sys_open);
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/pci-dma.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/pci-dma.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/pci-dma.c	2005-01-21 12:16:45.000000000 -0500
+@@ -32,18 +32,6 @@
+ #include <asm/pgalloc.h>
+ #include <asm/uaccess.h>
+ 
+-#ifdef DEBUG_PCI
+-#undef ASSERT
+-#define ASSERT(expr) \
+-	if(!(expr)) { \
+-		printk("\n%s:%d: Assertion " #expr " failed!\n", \
+-				__FILE__, __LINE__); \
+-		panic(#expr); \
+-	}
+-#else
+-#define ASSERT(expr)
+-#endif
+-
+ 
+ static struct proc_dir_entry * proc_gsc_root = NULL;
+ static int pcxl_proc_info(char *buffer, char **start, off_t offset, int length);
+@@ -259,10 +247,6 @@
+ 	u_long mask, flags;
+ 	unsigned int pages_needed = size >> PAGE_SHIFT;
+ 
+-	ASSERT(pages_needed);
+-	ASSERT((pages_needed * PAGE_SIZE) < DMA_CHUNK_SIZE);
+-	ASSERT(pages_needed < (BITS_PER_LONG - PAGE_SHIFT));
+-
+ 	mask = (u_long) -1L;
+  	mask >>= BITS_PER_LONG - pages_needed;
+ 
+@@ -306,7 +290,7 @@
+ 
+ #define PCXL_FREE_MAPPINGS(idx, m, size) \
+ 		u##size *res_ptr = (u##size *)&(pcxl_res_map[(idx) + (((size >> 3) - 1) & (~((size >> 3) - 1)))]); \
+-		ASSERT((*res_ptr & m) == m); \
++		/* BUG_ON((*res_ptr & m) != m); */ \
+ 		*res_ptr &= ~m;
+ 
+ /*
+@@ -319,10 +303,6 @@
+ 	unsigned int res_idx = (vaddr - pcxl_dma_start) >> (PAGE_SHIFT + 3);
+ 	unsigned int pages_mapped = size >> PAGE_SHIFT;
+ 
+-	ASSERT(pages_mapped);
+-	ASSERT((pages_mapped * PAGE_SIZE) < DMA_CHUNK_SIZE);
+-	ASSERT(pages_mapped < (BITS_PER_LONG - PAGE_SHIFT));
+-
+ 	mask = (u_long) -1L;
+  	mask >>= BITS_PER_LONG - pages_mapped;
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/pci.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/pci.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/pci.c	2005-01-21 12:16:45.000000000 -0500
+@@ -202,7 +202,8 @@
+ pcibios_link_hba_resources( struct resource *hba_res, struct resource *r)
+ {
+ 	if (!r->parent) {
+-		printk(KERN_EMERG "PCI: Tell willy he's wrong\n");
++		printk(KERN_EMERG "PCI: resource not parented! [%lx-%lx]\n",
++				r->start, r->end);
+ 		r->parent = hba_res;
+ 
+ 		/* reverse link is harder *sigh*  */
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/perf.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/perf.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/perf.c	2005-01-21 12:16:45.000000000 -0500
+@@ -157,16 +157,16 @@
+  * this array.
+  */
+ static uint64_t perf_bitmasks[] = {
+-	0x0000000000000000,     /* first dbl word must be zero */
+-	0xfdffe00000000000,     /* RDR0 bitmask */
+-	0x003f000000000000,     /* RDR1 bitmask */
+-	0x00ffffffffffffff,     /* RDR20-RDR21 bitmask (152 bits) */
+-	0xffffffffffffffff,
+-	0xfffffffc00000000,
+-	0xffffffffffffffff,     /* RDR22-RDR23 bitmask (233 bits) */
+-	0xffffffffffffffff,
+-	0xfffffffffffffffc,
+-	0xff00000000000000
++	0x0000000000000000ul,     /* first dbl word must be zero */
++	0xfdffe00000000000ul,     /* RDR0 bitmask */
++	0x003f000000000000ul,     /* RDR1 bitmask */
++	0x00fffffffffffffful,     /* RDR20-RDR21 bitmask (152 bits) */
++	0xfffffffffffffffful,
++	0xfffffffc00000000ul,
++	0xfffffffffffffffful,     /* RDR22-RDR23 bitmask (233 bits) */
++	0xfffffffffffffffful,
++	0xfffffffffffffffcul,
++	0xff00000000000000ul
+ };
+ 
+ /*
+@@ -174,16 +174,16 @@
+  * somethings have changed slightly.
+  */
+ static uint64_t perf_bitmasks_piranha[] = {
+-	0x0000000000000000,     /* first dbl word must be zero */
+-	0xfdffe00000000000,     /* RDR0 bitmask */
+-	0x003f000000000000,     /* RDR1 bitmask */
+-	0x00ffffffffffffff,     /* RDR20-RDR21 bitmask (158 bits) */
+-	0xffffffffffffffff,
+-	0xfffffffc00000000,
+-	0xffffffffffffffff,     /* RDR22-RDR23 bitmask (210 bits) */
+-	0xffffffffffffffff,
+-	0xffffffffffffffff,
+-	0xfffc000000000000
++	0x0000000000000000ul,     /* first dbl word must be zero */
++	0xfdffe00000000000ul,     /* RDR0 bitmask */
++	0x003f000000000000ul,     /* RDR1 bitmask */
++	0x00fffffffffffffful,     /* RDR20-RDR21 bitmask (158 bits) */
++	0xfffffffffffffffful,
++	0xfffffffc00000000ul,
++	0xfffffffffffffffful,     /* RDR22-RDR23 bitmask (210 bits) */
++	0xfffffffffffffffful,
++	0xfffffffffffffffful,
++	0xfffc000000000000ul
+ };
+ 
+ static uint64_t *bitmask_array;   /* array of bitmasks to use */
+@@ -194,8 +194,8 @@
+ static int perf_config(uint32_t *image_ptr);
+ static int perf_release(struct inode *inode, struct file *file);
+ static int perf_open(struct inode *inode, struct file *file);
+-static ssize_t perf_read(struct file *file, char *buf, size_t cnt, loff_t *ppos);
+-static ssize_t perf_write(struct file *file, const char *buf, size_t count, 
++static ssize_t perf_read(struct file *file, char __user *buf, size_t cnt, loff_t *ppos);
++static ssize_t perf_write(struct file *file, const char __user *buf, size_t count, 
+ 	loff_t *ppos);
+ static int perf_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+ 	unsigned long arg);
+@@ -287,7 +287,7 @@
+ /*
+  * Read does nothing for this driver
+  */
+-static ssize_t perf_read(struct file *file, char *buf, size_t cnt, loff_t *ppos)
++static ssize_t perf_read(struct file *file, char __user *buf, size_t cnt, loff_t *ppos)
+ {
+ 	return 0;
+ }
+@@ -299,7 +299,7 @@
+  * called on the processor that the download should happen
+  * on.
+  */
+-static ssize_t perf_write(struct file *file, const char *buf, size_t count, 
++static ssize_t perf_write(struct file *file, const char __user *buf, size_t count, 
+ 	loff_t *ppos)
+ {
+ 	int err;
+@@ -460,7 +460,7 @@
+ 			}
+ 
+ 			/* copy out the Counters */
+-			if (copy_to_user((void *)arg, raddr, 
++			if (copy_to_user((void __user *)arg, raddr, 
+ 					sizeof (raddr)) != 0) {
+ 				return -EFAULT;
+ 			}
+@@ -607,7 +607,7 @@
+ 		 * all of dword 22 and 58 bits (plus 6 don't care bits) of
+ 		 * dword 23.
+ 		 */
+-		userbuf[21] &= 0xfffffffffffffc00;	/* 0 to last 10 bits */
++		userbuf[21] &= 0xfffffffffffffc00ul;	/* 0 to last 10 bits */
+ 		userbuf[22] = 0;
+ 		userbuf[23] = 0;
+ 
+@@ -802,8 +802,8 @@
+ 	proc_hpa = cpu_device->hpa;
+ 
+ 	/* Merge intrigue bits into Runway STATUS 0 */
+-	tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecffffffffffff;
+-	__raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000), proc_hpa + RUNWAY_STATUS);
++	tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecfffffffffffful;
++	__raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul), proc_hpa + RUNWAY_STATUS);
+ 	
+ 	/* Write RUNWAY DEBUG registers */
+ 	for (i = 0; i < 8; i++) {
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/process.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/process.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/process.c	2005-01-21 12:16:45.000000000 -0500
+@@ -251,7 +251,7 @@
+ sys_clone(unsigned long clone_flags, unsigned long usp,
+ 	  struct pt_regs *regs)
+ {
+-	int *user_tid = (int *)regs->gr[26];
++	int __user *user_tid = (int __user *)regs->gr[26];
+ 
+ 	/* usp must be word aligned.  This also prevents users from
+ 	 * passing in the value 1 (which is the signal for a special
+@@ -357,12 +357,12 @@
+ 	int error;
+ 	char *filename;
+ 
+-	filename = getname((char *) regs->gr[26]);
++	filename = getname((const char __user *) regs->gr[26]);
+ 	error = PTR_ERR(filename);
+ 	if (IS_ERR(filename))
+ 		goto out;
+-	error = do_execve(filename, (char **) regs->gr[25],
+-		(char **) regs->gr[24], regs);
++	error = do_execve(filename, (char __user **) regs->gr[25],
++		(char __user **) regs->gr[24], regs);
+ 	if (error == 0) {
+ 		task_lock(current);
+ 		current->ptrace &= ~PT_DTRACE;
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/processor.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/processor.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/processor.c	2005-01-21 12:16:45.000000000 -0500
+@@ -153,7 +153,7 @@
+ 	p->cpuid = cpuid;	/* save CPU id */
+ 	p->txn_addr = txn_addr;	/* save CPU IRQ address */
+ #ifdef CONFIG_SMP
+-	p->lock = SPIN_LOCK_UNLOCKED;
++	spin_lock_init(&p->lock);
+ 
+ 	/*
+ 	** FIXME: review if any other initialization is clobbered
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/ptrace.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/ptrace.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/ptrace.c	2005-01-21 12:16:45.000000000 -0500
+@@ -30,9 +30,9 @@
+ #undef DEBUG_PTRACE
+ 
+ #ifdef DEBUG_PTRACE
+-#define DBG(x)	printk x
++#define DBG(x...)	printk(x)
+ #else
+-#define DBG(x)
++#define DBG(x...)
+ #endif
+ 
+ #ifdef __LP64__
+@@ -138,9 +138,9 @@
+ 			if (copied != sizeof(tmp))
+ 				goto out_tsk;
+ 			ret = put_user(tmp,(unsigned int *) data);
+-			DBG(("sys_ptrace(PEEK%s, %d, %lx, %lx) returning %ld, data %x\n",
++			DBG("sys_ptrace(PEEK%s, %d, %lx, %lx) returning %ld, data %x\n",
+ 				request == PTRACE_PEEKTEXT ? "TEXT" : "DATA",
+-				pid, oaddr, odata, ret, tmp));
++				pid, oaddr, odata, ret, tmp);
+ 		}
+ 		else
+ #endif
+@@ -163,9 +163,9 @@
+ #ifdef __LP64__
+ 		if (is_compat_task(child)) {
+ 			unsigned int tmp = (unsigned int)data;
+-			DBG(("sys_ptrace(POKE%s, %d, %lx, %lx)\n",
++			DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n",
+ 				request == PTRACE_POKETEXT ? "TEXT" : "DATA",
+-				pid, oaddr, odata));
++				pid, oaddr, odata);
+ 			addr &= 0xffffffffL;
+ 			if (access_process_vm(child, addr, &tmp, sizeof(tmp), 1) == sizeof(tmp))
+ 				goto out_tsk;
+@@ -194,8 +194,8 @@
+ 
+ 			tmp = *(unsigned int *) ((char *) task_regs(child) + addr);
+ 			ret = put_user(tmp, (unsigned int *) data);
+-			DBG(("sys_ptrace(PEEKUSR, %d, %lx, %lx) returning %ld, addr %lx, data %x\n",
+-				pid, oaddr, odata, ret, addr, tmp));
++			DBG("sys_ptrace(PEEKUSR, %d, %lx, %lx) returning %ld, addr %lx, data %x\n",
++				pid, oaddr, odata, ret, addr, tmp);
+ 		}
+ 		else
+ #endif
+@@ -234,8 +234,8 @@
+ 			 * BEWARE, if you set N, and then single step, it won't
+ 			 * stop on the nullified instruction.
+ 			 */
+-			DBG(("sys_ptrace(POKEUSR, %d, %lx, %lx)\n",
+-				pid, oaddr, odata));
++			DBG("sys_ptrace(POKEUSR, %d, %lx, %lx)\n",
++				pid, oaddr, odata);
+ 			data &= USER_PSW_BITS;
+ 			task_regs(child)->gr[0] &= ~USER_PSW_BITS;
+ 			task_regs(child)->gr[0] |= data;
+@@ -248,9 +248,9 @@
+ 				goto out_tsk;
+ 			if ((addr = translate_usr_offset(addr)) < 0)
+ 				goto out_tsk;
+-			DBG(("sys_ptrace(POKEUSR, %d, %lx, %lx) addr %lx\n",
+-				pid, oaddr, odata, addr));
+-			if (addr >= PT_FR0 && addr <= PT_FR31) {
++			DBG("sys_ptrace(POKEUSR, %d, %lx, %lx) addr %lx\n",
++				pid, oaddr, odata, addr);
++			if (addr >= PT_FR0 && addr <= PT_FR31 + 4) {
+ 				/* Special case, fp regs are 64 bits anyway */
+ 				*(unsigned int *) ((char *) task_regs(child) + addr) = data;
+ 				ret = 0;
+@@ -272,7 +272,7 @@
+ 				goto out_tsk;
+ 			if ((addr >= PT_GR1 && addr <= PT_GR31) ||
+ 					addr == PT_IAOQ0 || addr == PT_IAOQ1 ||
+-					(addr >= PT_FR0 && addr <= PT_FR31) ||
++					(addr >= PT_FR0 && addr <= PT_FR31 + 4) ||
+ 					addr == PT_SAR) {
+ 				*(unsigned long *) ((char *) task_regs(child) + addr) = data;
+ 				ret = 0;
+@@ -283,8 +283,8 @@
+ 	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
+ 	case PTRACE_CONT:
+ 		ret = -EIO;
+-		DBG(("sys_ptrace(%s)\n",
+-			request == PTRACE_SYSCALL ? "SYSCALL" : "CONT"));
++		DBG("sys_ptrace(%s)\n",
++			request == PTRACE_SYSCALL ? "SYSCALL" : "CONT");
+ 		if ((unsigned long) data > _NSIG)
+ 			goto out_tsk;
+ 		child->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP);
+@@ -302,14 +302,14 @@
+ 		 * sigkill.  perhaps it should be put in the status
+ 		 * that it wants to exit.
+ 		 */
+-		DBG(("sys_ptrace(KILL)\n"));
++		DBG("sys_ptrace(KILL)\n");
+ 		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */
+ 			goto out_tsk;
+ 		child->exit_code = SIGKILL;
+ 		goto out_wake_notrap;
+ 
+ 	case PTRACE_SINGLEBLOCK:
+-		DBG(("sys_ptrace(SINGLEBLOCK)\n"));
++		DBG("sys_ptrace(SINGLEBLOCK)\n");
+ 		ret = -EIO;
+ 		if ((unsigned long) data > _NSIG)
+ 			goto out_tsk;
+@@ -326,10 +326,11 @@
+ 		goto out_wake;
+ 
+ 	case PTRACE_SINGLESTEP:
+-		DBG(("sys_ptrace(SINGLESTEP)\n"));
++		DBG("sys_ptrace(SINGLESTEP)\n");
+ 		ret = -EIO;
+ 		if ((unsigned long) data > _NSIG)
+ 			goto out_tsk;
++
+ 		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
+ 		child->ptrace &= ~PT_BLOCKSTEP;
+ 		child->ptrace |= PT_SINGLESTEP;
+@@ -351,7 +352,7 @@
+ 			/* Don't wake up the child, but let the
+ 			   parent know something happened. */
+ 			si.si_code = TRAP_TRACE;
+-			si.si_addr = (void *) (task_regs(child)->iaoq[0] & ~3);
++			si.si_addr = (void __user *) (task_regs(child)->iaoq[0] & ~3);
+ 			si.si_signo = SIGTRAP;
+ 			si.si_errno = 0;
+ 			force_sig_info(SIGTRAP, &si, child);
+@@ -397,8 +398,8 @@
+ 	put_task_struct(child);
+ out:
+ 	unlock_kernel();
+-	DBG(("sys_ptrace(%ld, %d, %lx, %lx) returning %ld\n",
+-		request, pid, oaddr, odata, ret));
++	DBG("sys_ptrace(%ld, %d, %lx, %lx) returning %ld\n",
++		request, pid, oaddr, odata, ret);
+ 	return ret;
+ }
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/setup.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/setup.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/setup.c	2005-01-21 12:16:45.000000000 -0500
+@@ -53,6 +53,10 @@
+ struct proc_dir_entry * proc_gsc_root = NULL;
+ struct proc_dir_entry * proc_mckinley_root = NULL;
+ 
++#if !defined(CONFIG_PA20) && (defined(CONFIG_IOMMU_CCIO) || defined(CONFIG_IOMMU_SBA))
++int parisc_bus_is_phys = 1;	/* Assume no IOMMU is present */
++EXPORT_SYMBOL(parisc_bus_is_phys);
++#endif
+ 
+ void __init setup_cmdline(char **cmdline_p)
+ {
+@@ -112,6 +116,10 @@
+ 
+ void __init setup_arch(char **cmdline_p)
+ {
++#ifdef __LP64__
++	extern int parisc_narrow_firmware;
++#endif
++
+ 	init_per_cpu(smp_processor_id());	/* Set Modes & Enable FP */
+ 
+ #ifdef __LP64__
+@@ -123,7 +131,6 @@
+ 	pdc_console_init();
+ 
+ #ifdef __LP64__
+-	extern int parisc_narrow_firmware;
+ 	if(parisc_narrow_firmware) {
+ 		printk(KERN_INFO "Kernel is using PDC in 32-bit mode.\n");
+ 	}
+@@ -199,7 +206,7 @@
+ 	case pcxl2:
+ 		if (NULL == proc_gsc_root)
+ 		{
+-			proc_gsc_root = proc_mkdir("bus/gsc", 0);
++			proc_gsc_root = proc_mkdir("bus/gsc", NULL);
+ 		}
+ 		break;
+         case pcxt_:
+@@ -210,13 +217,13 @@
+         case pcxw2:
+                 if (NULL == proc_runway_root)
+                 {
+-                        proc_runway_root = proc_mkdir("bus/runway", 0);
++                        proc_runway_root = proc_mkdir("bus/runway", NULL);
+                 }
+                 break;
+ 	case mako:
+                 if (NULL == proc_mckinley_root)
+                 {
+-                        proc_mckinley_root = proc_mkdir("bus/mckinley", 0);
++                        proc_mckinley_root = proc_mkdir("bus/mckinley", NULL);
+                 }
+                 break;
+ 	default:
+@@ -307,6 +314,8 @@
+ 			boot_cpu_data.cpu_hz / 1000000,
+ 			boot_cpu_data.cpu_hz % 1000000	);
+ 
++	parisc_setup_cache_timing();
++
+ 	/* These are in a non-obvious order, will fix when we have an iotree */
+ #if defined(CONFIG_IOSAPIC)
+ 	iosapic_init();
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/signal.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal.c	2005-01-21 12:16:45.000000000 -0500
+@@ -32,6 +32,7 @@
+ #include <asm/uaccess.h>
+ #include <asm/pgalloc.h>
+ #include <asm/cacheflush.h>
++#include <asm/offsets.h>
+ 
+ #ifdef CONFIG_COMPAT
+ #include <linux/compat.h>
+@@ -69,7 +70,7 @@
+ #endif
+ 
+ asmlinkage int
+-sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs *regs)
++sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs *regs)
+ {
+ 	sigset_t saveset, newset;
+ #ifdef __LP64__
+@@ -79,7 +80,7 @@
+ 		/* XXX: Don't preclude handling different sized sigset_t's.  */
+ 		if (sigsetsize != sizeof(compat_sigset_t))
+ 			return -EINVAL;
+-		if (copy_from_user(&newset32, (compat_sigset_t *)unewset, sizeof(newset32)))
++		if (copy_from_user(&newset32, (compat_sigset_t __user *)unewset, sizeof(newset32)))
+ 			return -EFAULT;
+ 		sigset_32to64(&newset,&newset32);
+ 		
+@@ -125,7 +126,7 @@
+ #define INSN_DIE_HORRIBLY 0x68000ccc /* stw %r0,0x666(%sr0,%r0) */
+ 
+ static long
+-restore_sigcontext(struct sigcontext *sc, struct pt_regs *regs)
++restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs)
+ {
+ 	long err = 0;
+ 
+@@ -143,14 +144,14 @@
+ void
+ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
+ {
+-	struct rt_sigframe *frame;
++	struct rt_sigframe __user *frame;
+ 	struct siginfo si;
+ 	sigset_t set;
+ 	unsigned long usp = (regs->gr[30] & ~(0x01UL));
+ 	unsigned long sigframe_size = PARISC_RT_SIGFRAME_SIZE;
+ #ifdef __LP64__
+ 	compat_sigset_t compat_set;
+-	struct compat_rt_sigframe * compat_frame;
++	struct compat_rt_sigframe __user * compat_frame;
+ 	
+ 	if(personality(current->personality) == PER_LINUX32)
+ 		sigframe_size = PARISC_RT_SIGFRAME_SIZE32;
+@@ -158,12 +159,12 @@
+ 
+ 
+ 	/* Unwind the user stack to get the rt_sigframe structure. */
+-	frame = (struct rt_sigframe *)
++	frame = (struct rt_sigframe __user *)
+ 		(usp - sigframe_size);
+ 	DBG(2,"sys_rt_sigreturn: frame is %p\n", frame);
+ 
+ #ifdef __LP64__
+-	compat_frame = (struct compat_rt_sigframe *)frame;
++	compat_frame = (struct compat_rt_sigframe __user *)frame;
+ 	
+ 	if(personality(current->personality) == PER_LINUX32){
+ 		DBG(2,"sys_rt_sigreturn: ELF32 process.\n");
+@@ -238,7 +239,7 @@
+  * Set up a signal frame.
+  */
+ 
+-static inline void *
++static inline void __user *
+ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)
+ {
+ 	/*FIXME: ELF32 vs. ELF64 has different frame_size, but since we
+@@ -251,11 +252,11 @@
+ 		sp = current->sas_ss_sp; /* Stacks grow up! */
+ 
+ 	DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp);
+-	return (void *) sp; /* Stacks grow up.  Fun. */
++	return (void __user *) sp; /* Stacks grow up.  Fun. */
+ }
+ 
+ static long
+-setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, int in_syscall)
++setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, int in_syscall)
+ 		 
+ {
+ 	unsigned long flags = 0;
+@@ -292,14 +293,14 @@
+ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
+ 	       sigset_t *set, struct pt_regs *regs, int in_syscall)
+ {
+-	struct rt_sigframe *frame;
++	struct rt_sigframe __user *frame;
+ 	unsigned long rp, usp;
+ 	unsigned long haddr, sigframe_size;
+ 	struct siginfo si;
+ 	int err = 0;
+ #ifdef __LP64__
+ 	compat_int_t compat_val;
+-	struct compat_rt_sigframe * compat_frame;
++	struct compat_rt_sigframe __user * compat_frame;
+ 	compat_sigset_t compat_set;
+ #endif
+ 	
+@@ -313,7 +314,7 @@
+ 	
+ #ifdef __LP64__
+ 
+-	compat_frame = (struct compat_rt_sigframe *)frame;
++	compat_frame = (struct compat_rt_sigframe __user *)frame;
+ 	
+ 	if(personality(current->personality) == PER_LINUX32) {
+ 		DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info);
+@@ -396,7 +397,7 @@
+ #endif
+ 		if (haddr & PA_PLABEL_FDESC) {
+ 			Elf32_Fdesc fdesc;
+-			Elf32_Fdesc *ufdesc = (Elf32_Fdesc *)A(haddr & ~3);
++			Elf32_Fdesc __user *ufdesc = (Elf32_Fdesc __user *)A(haddr & ~3);
+ 
+ 			err = __copy_from_user(&fdesc, ufdesc, sizeof(fdesc));
+ 
+@@ -409,7 +410,7 @@
+ #ifdef __LP64__
+ 	} else {
+ 		Elf64_Fdesc fdesc;
+-		Elf64_Fdesc *ufdesc = (Elf64_Fdesc *)A(haddr & ~3);
++		Elf64_Fdesc __user *ufdesc = (Elf64_Fdesc __user *)A(haddr & ~3);
+ 		
+ 		err = __copy_from_user(&fdesc, ufdesc, sizeof(fdesc));
+ 		
+@@ -443,6 +444,18 @@
+ 			psw |= PSW_W;
+ #endif
+ 
++		/* If we are singlestepping, arrange a trap to be delivered
++		   when we return to userspace. Note the semantics -- we
++		   should trap before the first insn in the handler is
++		   executed. Ref:
++			http://sources.redhat.com/ml/gdb/2004-11/msg00245.html
++		 */
++		if (pa_psw(current)->r) {
++			pa_psw(current)->r = 0;
++			psw |= PSW_R;
++			mtctl(-1, 0);
++		}
++
+ 		regs->gr[0] = psw;
+ 		regs->iaoq[0] = haddr | 3;
+ 		regs->iaoq[1] = regs->iaoq[0] + 4;
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal32.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/signal32.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal32.c	2005-01-21 12:16:45.000000000 -0500
+@@ -65,7 +65,7 @@
+ }
+ 
+ static int
+-put_sigset32(compat_sigset_t *up, sigset_t *set, size_t sz)
++put_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)
+ {
+ 	compat_sigset_t s;
+ 
+@@ -76,7 +76,7 @@
+ }
+ 
+ static int
+-get_sigset32(compat_sigset_t *up, sigset_t *set, size_t sz)
++get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)
+ {
+ 	compat_sigset_t s;
+ 	int r;
+@@ -90,7 +90,7 @@
+ 	return r;
+ }
+ 
+-int sys32_rt_sigprocmask(int how, compat_sigset_t *set, compat_sigset_t *oset,
++int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, compat_sigset_t __user *oset,
+ 				    unsigned int sigsetsize)
+ {
+ 	sigset_t old_set, new_set;
+@@ -99,8 +99,8 @@
+ 	if (set && get_sigset32(set, &new_set, sigsetsize))
+ 		return -EFAULT;
+ 	
+-	KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? &new_set : NULL,
+-				 oset ? &old_set : NULL, sigsetsize);
++	KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? (sigset_t __user *)&new_set : NULL,
++				 oset ? (sigset_t __user *)&old_set : NULL, sigsetsize);
+ 
+ 	if (!ret && oset && put_sigset32(oset, &old_set, sigsetsize))
+ 		return -EFAULT;
+@@ -109,12 +109,12 @@
+ }
+ 
+ 
+-int sys32_rt_sigpending(compat_sigset_t *uset, unsigned int sigsetsize)
++int sys32_rt_sigpending(compat_sigset_t __user *uset, unsigned int sigsetsize)
+ {
+ 	int ret;
+ 	sigset_t set;
+ 
+-	KERNEL_SYSCALL(ret, sys_rt_sigpending, &set, sigsetsize);
++	KERNEL_SYSCALL(ret, sys_rt_sigpending, (sigset_t __user *)&set, sigsetsize);
+ 
+ 	if (!ret && put_sigset32(uset, &set, sigsetsize))
+ 		return -EFAULT;
+@@ -123,7 +123,7 @@
+ }
+ 
+ long
+-sys32_rt_sigaction(int sig, const struct sigaction32 *act, struct sigaction32 *oact,
++sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigaction32 __user *oact,
+                  size_t sigsetsize)
+ {
+ 	struct k_sigaction32 new_sa32, old_sa32;
+@@ -151,7 +151,7 @@
+ }
+ 
+ int 
+-do_sigaltstack32 (const compat_stack_t *uss32, compat_stack_t *uoss32, unsigned long sp)
++do_sigaltstack32 (const compat_stack_t __user *uss32, compat_stack_t __user *uoss32, unsigned long sp)
+ {
+ 	compat_stack_t ss32, oss32;
+ 	stack_t ss, oss;
+@@ -162,7 +162,7 @@
+ 		if (copy_from_user(&ss32, uss32, sizeof ss32))
+ 			return -EFAULT;
+ 
+-		ss.ss_sp = (void *)(unsigned long)ss32.ss_sp;
++		ss.ss_sp = (void __user *)(unsigned long)ss32.ss_sp;
+ 		ss.ss_flags = ss32.ss_flags;
+ 		ss.ss_size = ss32.ss_size;
+ 
+@@ -172,7 +172,7 @@
+ 	if (uoss32)
+ 		ossp = &oss;
+ 
+-	KERNEL_SYSCALL(ret, do_sigaltstack, ssp, ossp, sp);
++	KERNEL_SYSCALL(ret, do_sigaltstack, (const stack_t __user *)ssp, (stack_t __user *)ossp, sp);
+ 
+ 	if (!ret && uoss32) {
+ 		oss32.ss_sp = (unsigned int)(unsigned long)oss.ss_sp;
+@@ -186,7 +186,7 @@
+ }
+ 
+ long
+-restore_sigcontext32(struct compat_sigcontext *sc, struct compat_regfile * rf,
++restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf,
+ 		struct pt_regs *regs)
+ {
+ 	long err = 0;
+@@ -265,7 +265,7 @@
+  * truncate for a 32-bit userspace.
+  */
+ long
+-setup_sigcontext32(struct compat_sigcontext *sc, struct compat_regfile * rf, 
++setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf, 
+ 		struct pt_regs *regs, int in_syscall)		 
+ {
+ 	compat_int_t flags = 0;
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal32.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/signal32.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/signal32.h	2005-01-21 12:16:45.000000000 -0500
+@@ -31,13 +31,13 @@
+ 
+ void sigset_32to64(sigset_t *s64, compat_sigset_t *s32);
+ void sigset_64to32(compat_sigset_t *s32, sigset_t *s64);
+-int do_sigaltstack32 (const compat_stack_t *uss32, 
+-		compat_stack_t *uoss32, unsigned long sp);
+-long restore_sigcontext32(struct compat_sigcontext *sc, 
+-		struct compat_regfile *rf,
++int do_sigaltstack32 (const compat_stack_t __user *uss32, 
++		compat_stack_t __user *uoss32, unsigned long sp);
++long restore_sigcontext32(struct compat_sigcontext __user *sc, 
++		struct compat_regfile __user *rf,
+ 		struct pt_regs *regs);
+-long setup_sigcontext32(struct compat_sigcontext *sc, 
+-		struct compat_regfile *rf,
++long setup_sigcontext32(struct compat_sigcontext __user *sc, 
++		struct compat_regfile __user *rf,
+ 		struct pt_regs *regs, int in_syscall);
+ 
+ #endif
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/sys_parisc.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/sys_parisc.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/sys_parisc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -32,7 +32,7 @@
+ #include <linux/smp_lock.h>
+ #include <linux/syscalls.h>
+ 
+-int sys_pipe(int *fildes)
++int sys_pipe(int __user *fildes)
+ {
+ 	int fd[2];
+ 	int error;
+@@ -161,7 +161,7 @@
+ 	}
+ }
+ 
+-long sys_shmat_wrapper(int shmid, char *shmaddr, int shmflag)
++long sys_shmat_wrapper(int shmid, char __user *shmaddr, int shmflag)
+ {
+ 	unsigned long raddr;
+ 	int r;
+@@ -175,7 +175,7 @@
+ /* Fucking broken ABI */
+ 
+ #ifdef CONFIG_PARISC64
+-asmlinkage long parisc_truncate64(const char * path,
++asmlinkage long parisc_truncate64(const char __user * path,
+ 					unsigned int high, unsigned int low)
+ {
+ 	return sys_truncate(path, (long)high << 32 | low);
+@@ -189,7 +189,7 @@
+ 
+ /* stubs for the benefit of the syscall_table since truncate64 and truncate 
+  * are identical on LP64 */
+-asmlinkage long sys_truncate64(const char * path, unsigned long length)
++asmlinkage long sys_truncate64(const char __user * path, unsigned long length)
+ {
+ 	return sys_truncate(path, length);
+ }
+@@ -203,7 +203,7 @@
+ }
+ #else
+ 
+-asmlinkage long parisc_truncate64(const char * path,
++asmlinkage long parisc_truncate64(const char __user * path,
+ 					unsigned int high, unsigned int low)
+ {
+ 	return sys_truncate64(path, (loff_t)high << 32 | low);
+@@ -216,13 +216,13 @@
+ }
+ #endif
+ 
+-asmlinkage ssize_t parisc_pread64(unsigned int fd, char *buf, size_t count,
++asmlinkage ssize_t parisc_pread64(unsigned int fd, char __user *buf, size_t count,
+ 					unsigned int high, unsigned int low)
+ {
+ 	return sys_pread64(fd, buf, count, (loff_t)high << 32 | low);
+ }
+ 
+-asmlinkage ssize_t parisc_pwrite64(unsigned int fd, const char *buf,
++asmlinkage ssize_t parisc_pwrite64(unsigned int fd, const char __user *buf,
+ 			size_t count, unsigned int high, unsigned int low)
+ {
+ 	return sys_pwrite64(fd, buf, count, (loff_t)high << 32 | low);
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/sys_parisc32.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/sys_parisc32.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/sys_parisc32.c	2005-01-21 12:16:45.000000000 -0500
+@@ -74,7 +74,7 @@
+ 	char *filename;
+ 
+ 	DBG(("sys32_execve(%p) r26 = 0x%lx\n", regs, regs->gr[26]));
+-	filename = getname((char *) regs->gr[26]);
++	filename = getname((const char __user *) regs->gr[26]);
+ 	error = PTR_ERR(filename);
+ 	if (IS_ERR(filename))
+ 		goto out;
+@@ -111,13 +111,13 @@
+ 	u32 __unused[4];
+ };
+ 
+-asmlinkage long sys32_sysctl(struct __sysctl_args32 *args)
++asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
+ {
+ 	struct __sysctl_args32 tmp;
+ 	int error;
+ 	unsigned int oldlen32;
+ 	size_t oldlen, *oldlenp = NULL;
+-	unsigned long addr = (((long)&args->__unused[0]) + 7) & ~7;
++	unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7;
+ 	extern int do_sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
+ 	       void *newval, size_t newlen);
+ 
+@@ -159,7 +159,7 @@
+ 					error = -EFAULT;
+ 			}
+ 		}
+-		if (copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)))
++		if (copy_to_user(&args->__unused[0], tmp.__unused, sizeof(tmp.__unused)))
+ 			error = -EFAULT;
+ 	}
+ 	return error;
+@@ -174,19 +174,19 @@
+ #endif /* CONFIG_SYSCTL */
+ 
+ asmlinkage long sys32_sched_rr_get_interval(pid_t pid,
+-	struct compat_timespec *interval)
++	struct compat_timespec __user *interval)
+ {
+ 	struct timespec t;
+ 	int ret;
+-	
+-	KERNEL_SYSCALL(ret, sys_sched_rr_get_interval, pid, &t);
++
++	KERNEL_SYSCALL(ret, sys_sched_rr_get_interval, pid, (struct timespec __user *)&t);
+ 	if (put_compat_timespec(&t, interval))
+ 		return -EFAULT;
+ 	return ret;
+ }
+ 
+ static int
+-put_compat_timeval(struct compat_timeval *u, struct timeval *t)
++put_compat_timeval(struct compat_timeval __user *u, struct timeval *t)
+ {
+ 	struct compat_timeval t32;
+ 	t32.tv_sec = t->tv_sec;
+@@ -194,7 +194,7 @@
+ 	return copy_to_user(u, &t32, sizeof t32);
+ }
+ 
+-static inline long get_ts32(struct timespec *o, struct compat_timeval *i)
++static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
+ {
+ 	long usec;
+ 
+@@ -222,7 +222,7 @@
+ }
+ 
+ asmlinkage int
+-sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz)
++sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
+ {
+     extern void do_gettimeofday(struct timeval *tv);
+ 
+@@ -241,7 +241,7 @@
+ }
+ 
+ asmlinkage 
+-int sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz)
++int sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
+ {
+ 	struct timespec kts;
+ 	struct timezone ktz;
+@@ -258,7 +258,7 @@
+ 	return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
+ }
+ 
+-int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf)
++int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
+ {
+ 	int err;
+ 
+@@ -315,24 +315,24 @@
+ };
+ 
+ struct getdents32_callback {
+-	struct linux32_dirent * current_dir;
+-	struct linux32_dirent * previous;
++	struct linux32_dirent __user * current_dir;
++	struct linux32_dirent __user * previous;
+ 	int count;
+ 	int error;
+ };
+ 
+ struct readdir32_callback {
+-	struct old_linux32_dirent * dirent;
++	struct old_linux32_dirent __user * dirent;
+ 	int count;
+ };
+ 
+ #define ROUND_UP(x,a)	((__typeof__(x))(((unsigned long)(x) + ((a) - 1)) & ~((a) - 1)))
+-#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
++#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
+ static int
+ filldir32 (void *__buf, const char *name, int namlen, loff_t offset, ino_t ino,
+ 	   unsigned int d_type)
+ {
+-	struct linux32_dirent * dirent;
++	struct linux32_dirent __user * dirent;
+ 	struct getdents32_callback * buf = (struct getdents32_callback *) __buf;
+ 	int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1, 4);
+ 
+@@ -348,17 +348,17 @@
+ 	put_user(reclen, &dirent->d_reclen);
+ 	copy_to_user(dirent->d_name, name, namlen);
+ 	put_user(0, dirent->d_name + namlen);
+-	dirent = (struct linux32_dirent *)((char *)dirent + reclen);
++	dirent = ((void __user *)dirent) + reclen;
+ 	buf->current_dir = dirent;
+ 	buf->count -= reclen;
+ 	return 0;
+ }
+ 
+ asmlinkage long
+-sys32_getdents (unsigned int fd, void * dirent, unsigned int count)
++sys32_getdents (unsigned int fd, void __user * dirent, unsigned int count)
+ {
+ 	struct file * file;
+-	struct linux32_dirent * lastdirent;
++	struct linux32_dirent __user * lastdirent;
+ 	struct getdents32_callback buf;
+ 	int error;
+ 
+@@ -367,7 +367,7 @@
+ 	if (!file)
+ 		goto out;
+ 
+-	buf.current_dir = (struct linux32_dirent *) dirent;
++	buf.current_dir = (struct linux32_dirent __user *) dirent;
+ 	buf.previous = NULL;
+ 	buf.count = count;
+ 	buf.error = 0;
+@@ -393,7 +393,7 @@
+ 	      unsigned int d_type)
+ {
+ 	struct readdir32_callback * buf = (struct readdir32_callback *) __buf;
+-	struct old_linux32_dirent * dirent;
++	struct old_linux32_dirent __user * dirent;
+ 
+ 	if (buf->count)
+ 		return -EINVAL;
+@@ -408,7 +408,7 @@
+ }
+ 
+ asmlinkage long
+-sys32_readdir (unsigned int fd, void * dirent, unsigned int count)
++sys32_readdir (unsigned int fd, void __user * dirent, unsigned int count)
+ {
+ 	int error;
+ 	struct file * file;
+@@ -498,7 +498,7 @@
+ };
+ 
+ asmlinkage long sys32_msgsnd(int msqid,
+-				struct msgbuf32 *umsgp32,
++				struct msgbuf32 __user *umsgp32,
+ 				size_t msgsz, int msgflg)
+ {
+ 	struct msgbuf *mb;
+@@ -515,14 +515,14 @@
+ 	if (err)
+ 		err = -EFAULT;
+ 	else
+-		KERNEL_SYSCALL(err, sys_msgsnd, msqid, mb, msgsz, msgflg);
++		KERNEL_SYSCALL(err, sys_msgsnd, msqid, (struct msgbuf __user *)mb, msgsz, msgflg);
+ 
+ 	kfree(mb);
+ 	return err;
+ }
+ 
+ asmlinkage long sys32_msgrcv(int msqid,
+-				struct msgbuf32 *umsgp32,
++				struct msgbuf32 __user *umsgp32,
+ 				size_t msgsz, long msgtyp, int msgflg)
+ {
+ 	struct msgbuf *mb;
+@@ -532,7 +532,7 @@
+ 	if ((mb = kmalloc(msgsz + sizeof *mb + 4, GFP_KERNEL)) == NULL)
+ 		return -ENOMEM;
+ 
+-	KERNEL_SYSCALL(err, sys_msgrcv, msqid, mb, msgsz, msgtyp, msgflg);
++	KERNEL_SYSCALL(err, sys_msgrcv, msqid, (struct msgbuf __user *)mb, msgsz, msgtyp, msgflg);
+ 
+ 	if (err >= 0) {
+ 		len = err;
+@@ -549,7 +549,7 @@
+ 	return err;
+ }
+ 
+-asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, s32 count)
++asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count)
+ {
+         mm_segment_t old_fs = get_fs();
+         int ret;
+@@ -559,7 +559,7 @@
+                 return -EFAULT;
+ 
+         set_fs(KERNEL_DS);
+-        ret = sys_sendfile(out_fd, in_fd, offset ? &of : NULL, count);
++        ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *)&of : NULL, count);
+         set_fs(old_fs);
+ 
+         if (offset && put_user(of, offset))
+@@ -568,9 +568,7 @@
+         return ret;
+ }
+ 
+-typedef long __kernel_loff_t32;		/* move this to asm/posix_types.h? */
+-
+-asmlinkage int sys32_sendfile64(int out_fd, int in_fd, __kernel_loff_t32 *offset, s32 count)
++asmlinkage int sys32_sendfile64(int out_fd, int in_fd, compat_loff_t __user *offset, s32 count)
+ {
+ 	mm_segment_t old_fs = get_fs();
+ 	int ret;
+@@ -580,7 +578,7 @@
+ 		return -EFAULT;
+ 		
+ 	set_fs(KERNEL_DS);
+-	ret = sys_sendfile64(out_fd, in_fd, offset ? &lof : NULL, count);
++	ret = sys_sendfile64(out_fd, in_fd, offset ? (loff_t __user *)&lof : NULL, count);
+ 	set_fs(old_fs);
+ 	
+ 	if (offset && put_user(lof, offset))
+@@ -619,7 +617,7 @@
+ 	int  :32; int  :32; int  :32; int  :32;
+ };
+ 
+-asmlinkage long sys32_adjtimex(struct timex32 *txc_p32)
++asmlinkage long sys32_adjtimex(struct timex32 __user *txc_p32)
+ {
+ 	struct timex txc;
+ 	struct timex32 t32;
+@@ -668,7 +666,7 @@
+  * damage, I decided to just duplicate the code from sys_sysinfo here.
+  */
+ 
+-asmlinkage int sys32_sysinfo(struct sysinfo32 *info)
++asmlinkage int sys32_sysinfo(struct sysinfo32 __user *info)
+ {
+ 	struct sysinfo val;
+ 	int err;
+@@ -735,7 +733,7 @@
+ 	return sys_semctl (semid, semnum, cmd, arg);
+ }
+ 
+-long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf,
++long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf,
+ 			  size_t len)
+ {
+ 	return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/traps.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/traps.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/traps.c	2005-01-21 12:16:45.000000000 -0500
+@@ -242,7 +242,7 @@
+ 	struct siginfo si;
+ 
+ 	si.si_code = wot;
+-	si.si_addr = (void *) (regs->iaoq[0] & ~3);
++	si.si_addr = (void __user *) (regs->iaoq[0] & ~3);
+ 	si.si_signo = SIGTRAP;
+ 	si.si_errno = 0;
+ 	force_sig_info(SIGTRAP, &si, current);
+@@ -263,7 +263,7 @@
+ 		show_regs(regs);
+ #endif
+ 		si.si_code = TRAP_BRKPT;
+-		si.si_addr = (void *) (regs->iaoq[0] & ~3);
++		si.si_addr = (void __user *) (regs->iaoq[0] & ~3);
+ 		si.si_signo = SIGTRAP;
+ 		force_sig_info(SIGTRAP, &si, current);
+ 		break;
+@@ -281,7 +281,7 @@
+ #endif
+ 		si.si_signo = SIGTRAP;
+ 		si.si_code = TRAP_BRKPT;
+-		si.si_addr = (void *) (regs->iaoq[0] & ~3);
++		si.si_addr = (void __user *) (regs->iaoq[0] & ~3);
+ 		force_sig_info(SIGTRAP, &si, current);
+ 		return;
+ 	}
+@@ -569,7 +569,7 @@
+ 	give_sigill:
+ 		si.si_signo = SIGILL;
+ 		si.si_errno = 0;
+-		si.si_addr = (void *) regs->iaoq[0];
++		si.si_addr = (void __user *) regs->iaoq[0];
+ 		force_sig_info(SIGILL, &si, current);
+ 		return;
+ 
+@@ -577,7 +577,7 @@
+ 		/* Overflow Trap, let the userland signal handler do the cleanup */
+ 		si.si_signo = SIGFPE;
+ 		si.si_code = FPE_INTOVF;
+-		si.si_addr = (void *) regs->iaoq[0];
++		si.si_addr = (void __user *) regs->iaoq[0];
+ 		force_sig_info(SIGFPE, &si, current);
+ 		return;
+ 		
+@@ -699,9 +699,9 @@
+ 		si.si_signo = SIGSEGV;
+ 		si.si_errno = 0;
+ 		if (code == 7)
+-		    si.si_addr = (void *) regs->iaoq[0];
++		    si.si_addr = (void __user *) regs->iaoq[0];
+ 		else
+-		    si.si_addr = (void *) regs->ior;
++		    si.si_addr = (void __user *) regs->ior;
+ 		force_sig_info(SIGSEGV, &si, current);
+ 		return;
+ 
+@@ -721,7 +721,7 @@
+ 			si.si_signo = SIGBUS;
+ 			si.si_code = BUS_OBJERR;
+ 			si.si_errno = 0;
+-			si.si_addr = (void *) regs->ior;
++			si.si_addr = (void __user *) regs->ior;
+ 			force_sig_info(SIGBUS, &si, current);
+ 			return;
+ 		}
+@@ -732,7 +732,7 @@
+ 	}
+ 
+ 	if (user_mode(regs)) {
+-	    if ((fault_space>>SPACEID_SHIFT) != (regs->sr[7] >> SPACEID_SHIFT)) {
++	    if ((fault_space >> SPACEID_SHIFT) != (regs->sr[7] >> SPACEID_SHIFT)) {
+ #ifdef PRINT_USER_FAULTS
+ 		if (fault_space == 0)
+ 			printk(KERN_DEBUG "User Fault on Kernel Space ");
+@@ -745,7 +745,7 @@
+ 		si.si_signo = SIGSEGV;
+ 		si.si_errno = 0;
+ 		si.si_code = SEGV_MAPERR;
+-		si.si_addr = (void *) regs->ior;
++		si.si_addr = (void __user *) regs->ior;
+ 		force_sig_info(SIGSEGV, &si, current);
+ 		return;
+ 	    }
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/unaligned.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/unaligned.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/unaligned.c	2005-01-21 12:16:45.000000000 -0500
+@@ -744,7 +744,7 @@
+ 			si.si_signo = SIGSEGV;
+ 			si.si_errno = 0;
+ 			si.si_code = SEGV_MAPERR;
+-			si.si_addr = (void *)regs->ior;
++			si.si_addr = (void __user *)regs->ior;
+ 			force_sig_info(SIGSEGV, &si, current);
+ 		}
+ 		else
+@@ -754,7 +754,7 @@
+ 			si.si_signo = SIGBUS;
+ 			si.si_errno = 0;
+ 			si.si_code = BUS_ADRALN;
+-			si.si_addr = (void *)regs->ior;
++			si.si_addr = (void __user *)regs->ior;
+ 			force_sig_info(SIGBUS, &si, current);
+ 		}
+ 		
+Index: debian-kernel-hppa-2.6.10/arch/parisc/kernel/vmlinux.lds.S
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/kernel/vmlinux.lds.S	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/kernel/vmlinux.lds.S	2005-01-21 12:16:45.000000000 -0500
+@@ -84,6 +84,9 @@
+  
+   .data : {			/* Data */
+ 	*(.data)
++	*(.data.vm0.pmd)
++	*(.data.vm0.pgd)
++	*(.data.vm0.pte)
+ 	CONSTRUCTORS
+ 	}
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/lib/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/lib/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/lib/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -4,4 +4,6 @@
+ 
+ lib-y	:= lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
+ 
++obj-y	:= iomap.o
++
+ lib-$(CONFIG_SMP) += debuglocks.o
+Index: debian-kernel-hppa-2.6.10/arch/parisc/lib/checksum.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/lib/checksum.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/lib/checksum.c	2005-01-21 12:16:45.000000000 -0500
+@@ -131,7 +131,7 @@
+  * Copy from userspace and compute checksum.  If we catch an exception
+  * then zero the rest of the buffer.
+  */
+-unsigned int csum_partial_copy_from_user (const char *src, char *dst,
++unsigned int csum_partial_copy_from_user (const char __user *src, char *dst,
+                                           int len, unsigned int sum,
+                                           int *err_ptr)
+ {
+Index: debian-kernel-hppa-2.6.10/arch/parisc/lib/io.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/lib/io.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/lib/io.c	2005-01-21 12:16:45.000000000 -0500
+@@ -15,24 +15,24 @@
+  * Assumes the device can cope with 32-bit transfers.  If it can't,
+  * don't use this function.
+  */
+-void __memcpy_toio(unsigned long dest, unsigned long src, int count)
++void memcpy_toio(volatile void __iomem *dst, const void *src, int count)
+ {
+-	if ((dest & 3) != (src & 3))
++	if (((unsigned long)dst & 3) != ((unsigned long)src & 3))
+ 		goto bytecopy;
+-	while (dest & 3) {
+-		writeb(*(char *)src, dest++);
++	while ((unsigned long)dst & 3) {
++		writeb(*(char *)src, dst++);
+ 		src++;
+ 		count--;
+ 	}
+ 	while (count > 3) {
+-		__raw_writel(*(u32 *)src, dest);
++		__raw_writel(*(u32 *)src, dst);
+ 		src += 4;
+-		dest += 4;
++		dst += 4;
+ 		count -= 4;
+ 	}
+  bytecopy:
+ 	while (count--) {
+-		writeb(*(char *)src, dest++);
++		writeb(*(char *)src, dst++);
+ 		src++;
+ 	}
+ }
+@@ -50,51 +50,51 @@
+ **      Minimize total number of transfers at cost of CPU cycles.
+ **	TODO: only look at src alignment and adjust the stores to dest.
+ */
+-void __memcpy_fromio(unsigned long dest, unsigned long src, int count)
++void memcpy_fromio(void *dst, const volatile void __iomem *src, int count)
+ {
+ 	/* first compare alignment of src/dst */ 
+-	if ( ((dest ^ src) & 1) || (count < 2) )
++	if ( (((unsigned long)dst ^ (unsigned long)src) & 1) || (count < 2) )
+ 		goto bytecopy;
+ 
+-	if ( ((dest ^ src) & 2) || (count < 4) )
++	if ( (((unsigned long)dst ^ (unsigned long)src) & 2) || (count < 4) )
+ 		goto shortcopy;
+ 
+ 	/* Then check for misaligned start address */
+-	if (src & 1) {
+-		*(u8 *)dest = readb(src);
++	if ((unsigned long)src & 1) {
++		*(u8 *)dst = readb(src);
+ 		src++;
+-		dest++;
++		dst++;
+ 		count--;
+ 		if (count < 2) goto bytecopy;
+ 	}
+ 
+-	if (src & 2) {
+-		*(u16 *)dest = __raw_readw(src);
++	if ((unsigned long)src & 2) {
++		*(u16 *)dst = __raw_readw(src);
+ 		src += 2;
+-		dest += 2;
++		dst += 2;
+ 		count -= 2;
+ 	}
+ 
+ 	while (count > 3) {
+-		*(u32 *)dest = __raw_readl(src);
+-		dest += 4;
++		*(u32 *)dst = __raw_readl(src);
++		dst += 4;
+ 		src += 4;
+ 		count -= 4;
+ 	}
+ 
+  shortcopy:
+ 	while (count > 1) {
+-		*(u16 *)dest = __raw_readw(src);
++		*(u16 *)dst = __raw_readw(src);
+ 		src += 2;
+-		dest += 2;
++		dst += 2;
+ 		count -= 2;
+ 	}
+ 
+  bytecopy:
+ 	while (count--) {
+-		*(char *)dest = readb(src);
++		*(char *)dst = readb(src);
+ 		src++;
+-		dest++;
++		dst++;
+ 	}
+ }
+ 
+@@ -102,20 +102,20 @@
+  * Assumes the device can cope with 32-bit transfers.  If it can't,
+  * don't use this function.
+  */
+-void __memset_io(unsigned long dest, char fill, int count)
++void memset_io(volatile void __iomem *addr, unsigned char val, int count)
+ {
+-	u32 fill32 = (fill << 24) | (fill << 16) | (fill << 8) | fill;
+-	while (dest & 3) {
+-		writeb(fill, dest++);
++	u32 val32 = (val << 24) | (val << 16) | (val << 8) | val;
++	while ((unsigned long)addr & 3) {
++		writeb(val, addr++);
+ 		count--;
+ 	}
+ 	while (count > 3) {
+-		__raw_writel(fill32, dest);
+-		dest += 4;
++		__raw_writel(val32, addr);
++		addr += 4;
+ 		count -= 4;
+ 	}
+ 	while (count--) {
+-		writeb(fill, dest++);
++		writeb(val, addr++);
+ 	}
+ }
+ 
+Index: debian-kernel-hppa-2.6.10/arch/parisc/lib/iomap.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/arch/parisc/lib/iomap.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,418 @@
++/*
++ * iomap.c - Implement iomap interface for PA-RISC
++ * Copyright (c) 2004 Matthew Wilcox
++ */
++
++#include <linux/ioport.h>
++#include <linux/pci.h>
++#include <asm/io.h>
++
++/*
++ * The iomap space on 32-bit PA-RISC is intended to look like this:
++ * 00000000-7fffffff virtual mapped IO
++ * 80000000-8fffffff ISA/EISA port space that can't be virtually mapped
++ * 90000000-9fffffff Dino port space
++ * a0000000-afffffff Astro port space
++ * b0000000-bfffffff PAT port space
++ * c0000000-cfffffff non-swapped memory IO
++ * f0000000-ffffffff legacy IO memory pointers
++ *
++ * For the moment, here's what it looks like:
++ * 80000000-8fffffff All ISA/EISA port space
++ * f0000000-ffffffff legacy IO memory pointers
++ *
++ * On 64-bit, everything is extended, so:
++ * 8000000000000000-8fffffffffffffff All ISA/EISA port space
++ * f000000000000000-ffffffffffffffff legacy IO memory pointers
++ */
++
++/*
++ * Technically, this should be 'if (VMALLOC_START < addr < VMALLOC_END),
++ * but that's slow and we know it'll be within the first 2GB.
++ */
++#ifdef CONFIG_64BIT
++#define INDIRECT_ADDR(addr)	(((unsigned long)(addr) & 1UL<<63) != 0)
++#define ADDR_TO_REGION(addr)    (((unsigned long)addr >> 60) & 7)
++#define IOPORT_MAP_BASE		(8UL << 60)
++#else
++#define INDIRECT_ADDR(addr)     (((unsigned long)(addr) & 1UL<<31) != 0)
++#define ADDR_TO_REGION(addr)    (((unsigned long)addr >> 28) & 7)
++#define IOPORT_MAP_BASE		(8UL << 28)
++#endif
++
++struct iomap_ops {
++	unsigned int (*read8)(void __iomem *);
++	unsigned int (*read16)(void __iomem *);
++	unsigned int (*read32)(void __iomem *);
++	void (*write8)(u8, void __iomem *);
++	void (*write16)(u16, void __iomem *);
++	void (*write32)(u32, void __iomem *);
++	void (*read8r)(void __iomem *, void *, unsigned long);
++	void (*read16r)(void __iomem *, void *, unsigned long);
++	void (*read32r)(void __iomem *, void *, unsigned long);
++	void (*write8r)(void __iomem *, const void *, unsigned long);
++	void (*write16r)(void __iomem *, const void *, unsigned long);
++	void (*write32r)(void __iomem *, const void *, unsigned long);
++};
++
++/* Generic ioport ops.  To be replaced later by specific dino/elroy/wax code */
++
++#define ADDR2PORT(addr) ((unsigned long __force)(addr) & 0xffffff)
++
++static unsigned int ioport_read8(void __iomem *addr)
++{
++	return inb(ADDR2PORT(addr));
++}
++
++static unsigned int ioport_read16(void __iomem *addr)
++{
++	return inw(ADDR2PORT(addr));
++}
++
++static unsigned int ioport_read32(void __iomem *addr)
++{
++	return inl(ADDR2PORT(addr));
++}
++
++static void ioport_write8(u8 datum, void __iomem *addr)
++{
++	outb(datum, ADDR2PORT(addr));
++}
++
++static void ioport_write16(u16 datum, void __iomem *addr)
++{
++	outw(datum, ADDR2PORT(addr));
++}
++
++static void ioport_write32(u32 datum, void __iomem *addr)
++{
++	outl(datum, ADDR2PORT(addr));
++}
++
++static void ioport_read8r(void __iomem *addr, void *dst, unsigned long count)
++{
++	insb(ADDR2PORT(addr), dst, count);
++}
++
++static void ioport_read16r(void __iomem *addr, void *dst, unsigned long count)
++{
++	insw(ADDR2PORT(addr), dst, count);
++}
++
++static void ioport_read32r(void __iomem *addr, void *dst, unsigned long count)
++{
++	insl(ADDR2PORT(addr), dst, count);
++}
++
++static void ioport_write8r(void __iomem *addr, const void *s, unsigned long n)
++{
++	outsb(ADDR2PORT(addr), s, n);
++}
++
++static void ioport_write16r(void __iomem *addr, const void *s, unsigned long n)
++{
++	outsw(ADDR2PORT(addr), s, n);
++}
++
++static void ioport_write32r(void __iomem *addr, const void *s, unsigned long n)
++{
++	outsl(ADDR2PORT(addr), s, n);
++}
++
++static const struct iomap_ops ioport_ops = {
++	ioport_read8,
++	ioport_read16,
++	ioport_read32,
++	ioport_write8,
++	ioport_write16,
++	ioport_write32,
++	ioport_read8r,
++	ioport_read16r,
++	ioport_read32r,
++	ioport_write8r,
++	ioport_write16r,
++	ioport_write32r,
++};
++
++/* Legacy I/O memory ops */
++
++static unsigned int iomem_read8(void __iomem *addr)
++{
++	return readb(addr);
++}
++
++static unsigned int iomem_read16(void __iomem *addr)
++{
++	return readw(addr);
++}
++
++static unsigned int iomem_read32(void __iomem *addr)
++{
++	return readl(addr);
++}
++
++static void iomem_write8(u8 datum, void __iomem *addr)
++{
++	writeb(datum, addr);
++}
++
++static void iomem_write16(u16 datum, void __iomem *addr)
++{
++	writew(datum, addr);
++}
++
++static void iomem_write32(u32 datum, void __iomem *addr)
++{
++	writel(datum, addr);
++}
++
++static void iomem_read8r(void __iomem *addr, void *dst, unsigned long count)
++{
++	while (count--) {
++		*(u8 *)dst = __raw_readb(addr);
++		dst++;
++	}
++}
++
++static void iomem_read16r(void __iomem *addr, void *dst, unsigned long count)
++{
++	while (count--) {
++		*(u16 *)dst = __raw_readw(addr);
++		dst += 2;
++	}
++}
++
++static void iomem_read32r(void __iomem *addr, void *dst, unsigned long count)
++{
++	while (count--) {
++		*(u32 *)dst = __raw_readl(addr);
++		dst += 4;
++	}
++}
++
++static void iomem_write8r(void __iomem *addr, const void *s, unsigned long n)
++{
++	while (n--) {
++		__raw_writeb(*(u8 *)s, addr);
++		s++;
++	}
++}
++
++static void iomem_write16r(void __iomem *addr, const void *s, unsigned long n)
++{
++	while (n--) {
++		__raw_writew(*(u16 *)s, addr);
++		s += 2;
++	}
++}
++
++static void iomem_write32r(void __iomem *addr, const void *s, unsigned long n)
++{
++	while (n--) {
++		__raw_writel(*(u32 *)s, addr);
++		s += 4;
++	}
++}
++
++static const struct iomap_ops iomem_ops = {
++	iomem_read8,
++	iomem_read16,
++	iomem_read32,
++	iomem_write8,
++	iomem_write16,
++	iomem_write32,
++	iomem_read8r,
++	iomem_read16r,
++	iomem_read32r,
++	iomem_write8r,
++	iomem_write16r,
++	iomem_write32r,
++};
++
++const struct iomap_ops *iomap_ops[8] = {
++	[0] = &ioport_ops,
++	[7] = &iomem_ops
++};
++
++
++unsigned int ioread8(void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr)))
++		return iomap_ops[ADDR_TO_REGION(addr)]->read8(addr);
++	return *((u8 *)addr);
++}
++
++unsigned int ioread16(void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr)))
++		return iomap_ops[ADDR_TO_REGION(addr)]->read16(addr);
++	return le16_to_cpup((u16 *)addr);
++}
++
++unsigned int ioread32(void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr)))
++		return iomap_ops[ADDR_TO_REGION(addr)]->read32(addr);
++	return le32_to_cpup((u32 *)addr);
++}
++
++void iowrite8(u8 datum, void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write8(datum, addr);
++	} else {
++		*((u8 *)addr) = datum;
++	}
++}
++
++void iowrite16(u16 datum, void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write16(datum, addr);
++	} else {
++		*((u16 *)addr) = cpu_to_le16(datum);
++	}
++}
++
++void iowrite32(u32 datum, void __iomem *addr)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write32(datum, addr);
++	} else {
++		*((u32 *)addr) = cpu_to_le32(datum);
++	}
++}
++
++/* Repeating interfaces */
++
++void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->read8r(addr, dst, count);
++	} else {
++		while (count--) {
++			*(u8 *)dst = *(u8 *)addr;
++			dst++;
++		}
++	}
++}
++
++void ioread16_rep(void __iomem *addr, void *dst, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->read16r(addr, dst, count);
++	} else {
++		while (count--) {
++			*(u16 *)dst = *(u16 *)addr;
++			dst += 2;
++		}
++	}
++}
++
++void ioread32_rep(void __iomem *addr, void *dst, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->read32r(addr, dst, count);
++	} else {
++		while (count--) {
++			*(u32 *)dst = *(u32 *)addr;
++			dst += 4;
++		}
++	}
++}
++
++void iowrite8_rep(void __iomem *addr, const void *src, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write8r(addr, src, count);
++	} else {
++		while (count--) {
++			*(u8 *)addr = *(u8 *)src;
++			src++;
++		}
++	}
++}
++
++void iowrite16_rep(void __iomem *addr, const void *src, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write16r(addr, src, count);
++	} else {
++		while (count--) {
++			*(u16 *)addr = *(u16 *)src;
++			src += 2;
++		}
++	}
++}
++
++void iowrite32_rep(void __iomem *addr, const void *src, unsigned long count)
++{
++	if (unlikely(INDIRECT_ADDR(addr))) {
++		iomap_ops[ADDR_TO_REGION(addr)]->write32r(addr, src, count);
++	} else {
++		while (count--) {
++			*(u32 *)addr = *(u32 *)src;
++			src += 4;
++		}
++	}
++}
++
++/* Mapping interfaces */
++
++void __iomem *ioport_map(unsigned long port, unsigned int nr)
++{
++	return (void __iomem *)(IOPORT_MAP_BASE | port);
++}
++
++void ioport_unmap(void __iomem *addr)
++{
++	if (!INDIRECT_ADDR(addr)) {
++		iounmap(addr);
++	}
++}
++
++/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
++void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
++{
++	unsigned long start = pci_resource_start(dev, bar);
++	unsigned long len = pci_resource_len(dev, bar);
++	unsigned long flags = pci_resource_flags(dev, bar);
++
++	if (!len || !start)
++		return NULL;
++	if (maxlen && len > maxlen)
++		len = maxlen;
++	if (flags & IORESOURCE_IO)
++		return ioport_map(start, len);
++	if (flags & IORESOURCE_MEM) {
++		if (flags & IORESOURCE_CACHEABLE)
++			return ioremap(start, len);
++		return ioremap_nocache(start, len);
++	}
++	/* What? */
++	return NULL;
++}
++
++void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
++{
++	if (!INDIRECT_ADDR(addr)) {
++		iounmap(addr);
++	}
++}
++
++EXPORT_SYMBOL(ioread8);
++EXPORT_SYMBOL(ioread16);
++EXPORT_SYMBOL(ioread32);
++EXPORT_SYMBOL(iowrite8);
++EXPORT_SYMBOL(iowrite16);
++EXPORT_SYMBOL(iowrite32);
++EXPORT_SYMBOL(ioread8_rep);
++EXPORT_SYMBOL(ioread16_rep);
++EXPORT_SYMBOL(ioread32_rep);
++EXPORT_SYMBOL(iowrite8_rep);
++EXPORT_SYMBOL(iowrite16_rep);
++EXPORT_SYMBOL(iowrite32_rep);
++EXPORT_SYMBOL(ioport_map);
++EXPORT_SYMBOL(ioport_unmap);
++EXPORT_SYMBOL(pci_iomap);
++EXPORT_SYMBOL(pci_iounmap);
+Index: debian-kernel-hppa-2.6.10/arch/parisc/lib/memcpy.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/lib/memcpy.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/lib/memcpy.c	2005-01-21 12:16:45.000000000 -0500
+@@ -111,7 +111,7 @@
+ 	"\t" EXC_WORD "\t" #_e "\n"			\
+ 	"\t.previous\n"					\
+ 	: _tt(_t), "+r"(_a)				\
+-	: "1"(_a)					\
++	: 						\
+ 	: "r8")
+ 
+ #define def_store_ai_insn(_insn,_sz,_tt,_s,_a,_t,_e) 	\
+@@ -122,7 +122,7 @@
+ 	"\t" EXC_WORD "\t" #_e "\n"			\
+ 	"\t.previous\n"					\
+ 	: "+r"(_a) 					\
+-	: _tt(_t), "0"(_a)				\
++	: _tt(_t)					\
+ 	: "r8")
+ 
+ #define ldbma(_s, _a, _t, _e) def_load_ai_insn(ldbs,1,"=r",_s,_a,_t,_e)
+@@ -297,7 +297,7 @@
+ unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len)
+ {
+ 	register unsigned long src, dst, t1, t2, t3;
+-	register char *pcs, *pcd;
++	register unsigned char *pcs, *pcd;
+ 	register unsigned int *pws, *pwd;
+ 	register double *pds, *pdd;
+ 	unsigned long ret = 0;
+Index: debian-kernel-hppa-2.6.10/arch/parisc/math-emu/driver.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/math-emu/driver.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/math-emu/driver.c	2005-01-21 12:16:45.000000000 -0500
+@@ -120,7 +120,7 @@
+ 	    si.si_signo = signalcode >> 24;
+ 	    si.si_errno = 0;
+ 	    si.si_code = signalcode & 0xffffff;
+-	    si.si_addr = (void *) regs->iaoq[0];
++	    si.si_addr = (void __user *) regs->iaoq[0];
+ 	    force_sig_info(si.si_signo, &si, current);
+ 	    return -1;
+ 	}
+Index: debian-kernel-hppa-2.6.10/arch/parisc/mm/fault.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/mm/fault.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/mm/fault.c	2005-01-21 12:16:45.000000000 -0500
+@@ -225,7 +225,7 @@
+ 		si.si_signo = SIGSEGV;
+ 		si.si_errno = 0;
+ 		si.si_code = SEGV_MAPERR;
+-		si.si_addr = (void *) address;
++		si.si_addr = (void __user *) address;
+ 		force_sig_info(SIGSEGV, &si, current);
+ 		return;
+ 	}
+Index: debian-kernel-hppa-2.6.10/arch/parisc/mm/init.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/mm/init.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/mm/init.c	2005-01-21 12:16:45.000000000 -0500
+@@ -59,8 +59,6 @@
+ 
+ static struct resource sysram_resources[MAX_PHYSMEM_RANGES];
+ 
+-static unsigned long max_pfn;
+-
+ /* The following array is initialized from the firmware specific
+  * information retrieved in kernel/inventory.c.
+  */
+Index: debian-kernel-hppa-2.6.10/arch/parisc/mm/ioremap.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/arch/parisc/mm/ioremap.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/arch/parisc/mm/ioremap.c	2005-01-21 12:16:45.000000000 -0500
+@@ -107,7 +107,7 @@
+  * have to convert them into an offset in a page-aligned mapping, but the
+  * caller shouldn't need to know that small detail.
+  */
+-void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
++void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
+ {
+ #if !(USE_HPPA_IOREMAP)
+ 
+@@ -118,7 +118,7 @@
+ 		phys_addr |= 0xfc000000;
+ 	}
+ 
+-	return (void *)phys_addr;
++	return (void __iomem *)phys_addr;
+ 
+ #else
+ 	void * addr;
+@@ -163,16 +163,16 @@
+ 		vfree(addr);
+ 		return NULL;
+ 	}
+-	return (void *) (offset + (char *)addr);
++	return (void __iomem *) (offset + (char *)addr);
+ #endif
+ }
+ 
+-void iounmap(void *addr)
++void iounmap(void __iomem *addr)
+ {
+ #if !(USE_HPPA_IOREMAP)
+ 	return;
+ #else
+ 	if (addr > high_memory)
+-		return vfree((void *) (PAGE_MASK & (unsigned long) addr));
++		return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
+ #endif
+ }
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/keyboard/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -29,6 +29,44 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called atkbd.
+ 
++config KEYBOARD_ATKBD_HP_KEYCODES
++	bool "Use HP keyboard scancodes"
++	depends on PARISC && KEYBOARD_ATKBD
++	default y
++	help
++	  Say Y here if you have a PA-RISC machine and want to use an AT or
++	  PS/2 keyboard, and your keyboard uses keycodes that are specific to
++	  PA-RISC keyboards.
++
++	  Say N if you use a standard keyboard.
++
++config KEYBOARD_ATKBD_RDI_KEYCODES
++	bool "Use PrecisionBook keyboard scancodes"
++	depends on KEYBOARD_ATKBD_HP_KEYCODES
++	default n
++	help
++	  If you have an RDI PrecisionBook, say Y here if you want to use its
++	  built-in keyboard (as opposed to an external keyboard).
++
++	  The PrecisionBook has five keys that conflict with those used by most
++	  AT and PS/2 keyboards. These are as follows:
++
++	    PrecisionBook    Standard AT or PS/2
++
++	    F1               F12
++	    Left Ctrl        Left Alt
++	    Caps Lock        Left Ctrl
++	    Right Ctrl       Caps Lock
++	    Left             102nd key (the key to the right of Left Shift)
++
++	  If you say N here, and use the PrecisionBook keyboard, then each key
++	  in the left-hand column will be interpreted as the corresponding key
++	  in the right-hand column.
++
++	  If you say Y here, and use an external keyboard, then each key in the
++	  right-hand column will be interpreted as the key shown in the
++	  left-hand column.
++
+ config KEYBOARD_SUNKBD
+ 	tristate "Sun Type 4 and Type 5 keyboard support"
+ 	depends on INPUT && INPUT_KEYBOARD
+@@ -96,3 +134,34 @@
+ 
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called amikbd.
++
++config KEYBOARD_HIL_OLD
++	tristate "HP HIL keyboard support (simple driver)"
++	depends on GSC && INPUT && INPUT_KEYBOARD && !HIL_MLC
++	default y
++	help
++	  The "Human Interface Loop" is a older, 8-channel USB-like
++	  controller used in several Hewlett Packard models. This driver
++	  was adapted from the one written for m68k/hp300, and implements
++	  support for a keyboard attached to the HIL port, but not for
++	  any other types of HIL input devices like mice or tablets.
++	  However, it has been thoroughly tested and is stable.
++
++	  If you want full HIL support including support for multiple
++	  keyboards, mices and tablets, you have to enable the
++	  "HP System Device Controller i8042 Support" in the input/serio
++	  submenu.
++
++config KEYBOARD_HIL
++	tristate "HP HIL keyboard support"
++	depends on GSC && INPUT && INPUT_KEYBOARD
++	default y
++	select HP_SDC
++ 	select HIL_MLC
++	select SERIO
++	help
++	  The "Human Interface Loop" is a older, 8-channel USB-like
++	  controller used in several Hewlett Packard models.
++	  This driver implements support for HIL-keyboards attached
++	  to your machine, so normally you should say Y here.
++
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/keyboard/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -2,8 +2,6 @@
+ # Makefile for the input core drivers.
+ #
+ 
+-# Each configuration option enables a list of files.
+-
+ obj-$(CONFIG_KEYBOARD_ATKBD)		+= atkbd.o
+ obj-$(CONFIG_KEYBOARD_MAPLE)		+= maple_keyb.o
+ obj-$(CONFIG_KEYBOARD_SUNKBD)		+= sunkbd.o
+@@ -12,3 +10,5 @@
+ obj-$(CONFIG_KEYBOARD_AMIGA)		+= amikbd.o
+ obj-$(CONFIG_KEYBOARD_NEWTON)		+= newtonkbd.o
+ obj-$(CONFIG_KEYBOARD_98KBD)		+= 98kbd.o
++obj-$(CONFIG_KEYBOARD_HIL)		+= hil_kbd.o
++obj-$(CONFIG_KEYBOARD_HIL_OLD)		+= hilkbd.o
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/atkbd.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/keyboard/atkbd.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/atkbd.c	2005-01-21 12:16:45.000000000 -0500
+@@ -70,12 +70,15 @@
+  * are loadable via an userland utility.
+  */
+ 
+-#if defined(__hppa__)
+-#include "hpps2atkbd.h"
+-#else
+-
+ static unsigned char atkbd_set2_keycode[512] = {
+ 
++#ifdef CONFIG_KEYBOARD_ATKBD_HP_KEYCODES
++
++/* XXX: need a more general approach */
++
++#include "hpps2atkbd.h"	/* include the keyboard scancodes */
++
++#else
+ 	  0, 67, 65, 63, 61, 59, 60, 88,  0, 68, 66, 64, 62, 15, 41,117,
+ 	  0, 56, 42, 93, 29, 16,  2,  0,  0,  0, 44, 31, 30, 17,  3,  0,
+ 	  0, 46, 45, 32, 18,  5,  4, 95,  0, 57, 47, 33, 20, 19,  6,183,
+@@ -95,9 +98,8 @@
+ 	110,111,108,112,106,103,  0,119,  0,118,109,  0, 99,104,119,  0,
+ 
+ 	  0,  0,  0, 65, 99,
+-};
+-
+ #endif
++};
+ 
+ static unsigned char atkbd_set3_keycode[512] = {
+ 
+@@ -252,8 +254,8 @@
+ 	int scroll = 0, click = -1;
+ 	int value;
+ 
+-#ifdef ATKBD_DEBUG
+-	printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
++#if 0 || defined(ATKBD_DEBUG)   /* CHANGEME */
++	printk(KERN_ERR "atkbd.c: Received %02x flags %02x\n", data, flags);
+ #endif
+ 
+ #if !defined(__i386__) && !defined (__x86_64__)
+@@ -412,6 +414,9 @@
+ 					break;
+ 			}
+ 
++#if 0  /* CHANGEME */
++			printk(KERN_ERR "Reporting: %#x, emul=%d\n", code, atkbd->emul);
++#endif
+ 			atkbd_report_key(&atkbd->dev, regs, atkbd->keycode[code], value);
+ 	}
+ 
+@@ -645,7 +650,12 @@
+  * controller may confuse the keyboard need a full reset of the keyboard. On
+  * these systems the BIOS also usually doesn't do it for us.
+  */
+-
++/* XXX: I think this is wrong. We can't assume, that this definitively is a
++        keyboard. Since we are still in probing phase, it could be a mouse or 
++	anything else and just sending a ATKBD_CMD_RESET_BAT might confuse the
++	device. IMHO those lines should be moved to the end of atkbd_probe().
++	Helge Deller
++ */
+ 	if (atkbd_reset)
+ 		if (atkbd_command(atkbd, NULL, ATKBD_CMD_RESET_BAT))
+ 			printk(KERN_WARNING "atkbd.c: keyboard reset failed on %s\n", atkbd->serio->phys);
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/hil_kbd.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/hil_kbd.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,375 @@
++/*
++ * Generic linux-input device driver for keyboard devices
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ */
++
++#include <linux/hil.h>
++#include <linux/input.h>
++#include <linux/serio.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/pci_ids.h>
++
++#define PREFIX "HIL KEYB: "
++#define HIL_GENERIC_NAME "HIL keyboard"
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION(HIL_GENERIC_NAME " driver");
++MODULE_LICENSE("Dual BSD/GPL");
++
++#define HIL_KBD_MAX_LENGTH 16
++
++#define HIL_KBD_SET1_UPBIT 0x01
++#define HIL_KBD_SET1_SHIFT 1
++static unsigned int hil_kbd_set1[HIL_KEYCODES_SET1_TBLSIZE] = 
++	{ HIL_KEYCODES_SET1 };
++
++#define HIL_KBD_SET2_UPBIT 0x01
++#define HIL_KBD_SET2_SHIFT 1
++/* Set2 is user defined */
++
++#define HIL_KBD_SET3_UPBIT 0x80
++#define HIL_KBD_SET3_SHIFT 0
++static unsigned int hil_kbd_set3[HIL_KEYCODES_SET3_TBLSIZE] =
++	{ HIL_KEYCODES_SET3 };
++
++static char hil_language[][16] = { HIL_LOCALE_MAP };
++
++struct hil_kbd {
++	struct input_dev dev;
++	struct serio *serio;
++
++	/* Input buffer and index for packets from HIL bus. */
++	hil_packet data[HIL_KBD_MAX_LENGTH];
++	int idx4; /* four counts per packet */
++
++	/* Raw device info records from HIL bus, see hil.h for fields. */
++	char	idd[HIL_KBD_MAX_LENGTH];	/* DID byte and IDD record */
++	char	rsc[HIL_KBD_MAX_LENGTH];	/* RSC record */
++	char	exd[HIL_KBD_MAX_LENGTH];	/* EXD record */
++	char	rnm[HIL_KBD_MAX_LENGTH + 1];	/* RNM record + NULL term. */
++
++	/* Something to sleep around with. */
++	struct semaphore sem;
++};
++
++/* Process a complete packet after transfer from the HIL */
++static void hil_kbd_process_record(struct hil_kbd *kbd)
++{
++	struct input_dev *dev = &kbd->dev;
++	hil_packet *data = kbd->data;
++	hil_packet p;
++	int idx, i, cnt;
++
++	idx = kbd->idx4/4;
++	p = data[idx - 1];
++
++	if ((p & ~HIL_CMDCT_POL) == 
++	    (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) goto report;
++	if ((p & ~HIL_CMDCT_RPL) == 
++	    (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_RPL)) goto report;
++
++	/* Not a poll response.  See if we are loading config records. */
++	switch (p & HIL_PKT_DATA_MASK) {
++	case HIL_CMD_IDD:
++		for (i = 0; i < idx; i++)
++			kbd->idd[i] = kbd->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_KBD_MAX_LENGTH; i++)
++			kbd->idd[i] = 0;
++		break;
++	case HIL_CMD_RSC:
++		for (i = 0; i < idx; i++)
++			kbd->rsc[i] = kbd->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_KBD_MAX_LENGTH; i++)
++			kbd->rsc[i] = 0;
++		break;
++	case HIL_CMD_EXD:
++		for (i = 0; i < idx; i++)
++			kbd->exd[i] = kbd->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_KBD_MAX_LENGTH; i++)
++			kbd->exd[i] = 0;
++		break;
++	case HIL_CMD_RNM:
++		for (i = 0; i < idx; i++)
++			kbd->rnm[i] = kbd->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_KBD_MAX_LENGTH + 1; i++)
++			kbd->rnm[i] = '\0';
++		break;
++	default:
++		/* These occur when device isn't present */
++		if (p == (HIL_ERR_INT | HIL_PKT_CMD)) break; 
++		/* Anything else we'd like to know about. */
++		printk(KERN_WARNING PREFIX "Device sent unknown record %x\n", p);
++		break;
++	}
++	goto out;
++
++ report:
++	cnt = 1;
++	switch (kbd->data[0] & HIL_POL_CHARTYPE_MASK) {
++	case HIL_POL_CHARTYPE_NONE:
++		break;
++	case HIL_POL_CHARTYPE_ASCII:
++		while (cnt < idx - 1)
++			input_report_key(dev, kbd->data[cnt++] & 0x7f, 1);
++		break;
++	case HIL_POL_CHARTYPE_RSVD1:
++	case HIL_POL_CHARTYPE_RSVD2:
++	case HIL_POL_CHARTYPE_BINARY:
++		while (cnt < idx - 1)
++			input_report_key(dev, kbd->data[cnt++], 1);
++		break;
++	case HIL_POL_CHARTYPE_SET1:
++		while (cnt < idx - 1) {
++			unsigned int key;
++			int up;
++			key = kbd->data[cnt++];
++			up = key & HIL_KBD_SET1_UPBIT;
++			key &= (~HIL_KBD_SET1_UPBIT & 0xff);
++			key = hil_kbd_set1[key >> HIL_KBD_SET1_SHIFT];
++			if (key != KEY_RESERVED)
++				input_report_key(dev, key, !up);
++		}
++		break;
++	case HIL_POL_CHARTYPE_SET2:
++		while (cnt < idx - 1) {
++			unsigned int key;
++			int up;
++			key = kbd->data[cnt++];
++			up = key & HIL_KBD_SET2_UPBIT;
++			key &= (~HIL_KBD_SET1_UPBIT & 0xff);
++			key = key >> HIL_KBD_SET2_SHIFT;
++			if (key != KEY_RESERVED)
++				input_report_key(dev, key, !up);
++		}
++		break;
++	case HIL_POL_CHARTYPE_SET3:
++		while (cnt < idx - 1) {
++			unsigned int key;
++			int up;
++			key = kbd->data[cnt++];
++			up = key & HIL_KBD_SET3_UPBIT;
++			key &= (~HIL_KBD_SET1_UPBIT & 0xff);
++			key = hil_kbd_set3[key >> HIL_KBD_SET3_SHIFT];
++			if (key != KEY_RESERVED)
++				input_report_key(dev, key, !up);
++		}
++		break;
++	}
++ out:
++	kbd->idx4 = 0;
++	up(&kbd->sem);
++}
++
++static void hil_kbd_process_err(struct hil_kbd *kbd) {
++	printk(KERN_WARNING PREFIX "errored HIL packet\n");
++	kbd->idx4 = 0;
++	up(&kbd->sem);
++}
++
++static irqreturn_t hil_kbd_interrupt(struct serio *serio, 
++	      unsigned char data, unsigned int flags, struct pt_regs *regs)
++{
++	struct hil_kbd *kbd;
++	hil_packet packet;
++	int idx;
++
++	kbd = (struct hil_kbd *)serio->private;
++	if (kbd == NULL) {
++		BUG();
++		return IRQ_HANDLED;
++	}
++
++	if (kbd->idx4 >= (HIL_KBD_MAX_LENGTH * sizeof(hil_packet))) {
++		hil_kbd_process_err(kbd);
++		return IRQ_HANDLED;
++	}
++	idx = kbd->idx4/4;
++	if (!(kbd->idx4 % 4)) kbd->data[idx] = 0;
++	packet = kbd->data[idx];
++	packet |= ((hil_packet)data) << ((3 - (kbd->idx4 % 4)) * 8);
++	kbd->data[idx] = packet;
++
++	/* Records of N 4-byte hil_packets must terminate with a command. */
++	if ((++(kbd->idx4)) % 4) return IRQ_HANDLED;
++	if ((packet & 0xffff0000) != HIL_ERR_INT) {
++		hil_kbd_process_err(kbd);
++		return IRQ_HANDLED;
++	}
++	if (packet & HIL_PKT_CMD) hil_kbd_process_record(kbd);
++	return IRQ_HANDLED;
++}
++
++static void hil_kbd_disconnect(struct serio *serio)
++{
++	struct hil_kbd *kbd;
++
++	kbd = (struct hil_kbd *)serio->private;
++	if (kbd == NULL) {
++		BUG();
++		return;
++	}
++
++	input_unregister_device(&kbd->dev);
++	serio_close(serio);
++	kfree(kbd);
++}
++
++static void hil_kbd_connect(struct serio *serio, struct serio_driver *drv)
++{
++	struct hil_kbd	*kbd;
++	uint8_t		did, *idd;
++	int		i;
++	
++	if (serio->type != (SERIO_HIL_MLC | SERIO_HIL)) return;
++
++	if (!(kbd = kmalloc(sizeof(struct hil_kbd), GFP_KERNEL))) return;
++	memset(kbd, 0, sizeof(struct hil_kbd));
++
++	if (serio_open(serio, drv)) goto bail0;
++
++	serio->private = kbd;
++	kbd->serio = serio;
++	kbd->dev.private = kbd;
++
++	init_MUTEX_LOCKED(&(kbd->sem));
++
++	/* Get device info.  MLC driver supplies devid/status/etc. */
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_IDD);
++	down(&(kbd->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_RSC);
++	down(&(kbd->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_RNM);
++	down(&(kbd->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_EXD);
++	down(&(kbd->sem));
++
++	up(&(kbd->sem));
++
++	did = kbd->idd[0];
++	idd = kbd->idd + 1;
++	switch (did & HIL_IDD_DID_TYPE_MASK) {
++	case HIL_IDD_DID_TYPE_KB_INTEGRAL:
++	case HIL_IDD_DID_TYPE_KB_ITF:
++	case HIL_IDD_DID_TYPE_KB_RSVD:
++	case HIL_IDD_DID_TYPE_CHAR:
++		printk(KERN_INFO PREFIX "HIL keyboard found (did = 0x%02x, lang = %s)\n",
++			did, hil_language[did & HIL_IDD_DID_TYPE_KB_LANG_MASK]);
++		break;
++	default:
++		goto bail1;
++	}
++
++	if(HIL_IDD_NUM_BUTTONS(idd) || HIL_IDD_NUM_AXES_PER_SET(*idd)) {
++		printk(KERN_INFO PREFIX "keyboards only, no combo devices supported.\n");
++		goto bail1;
++	}
++
++
++	kbd->dev.evbit[0]	= BIT(EV_KEY) | BIT(EV_REP);
++	kbd->dev.ledbit[0]	= BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
++	kbd->dev.keycodemax	= HIL_KEYCODES_SET1_TBLSIZE;
++	kbd->dev.keycodesize	= sizeof(hil_kbd_set1[0]);
++	kbd->dev.keycode	= hil_kbd_set1;
++	kbd->dev.name		= strlen(kbd->rnm) ? kbd->rnm : HIL_GENERIC_NAME;
++	kbd->dev.phys		= "hpkbd/input0";	/* XXX */
++
++	kbd->dev.id.bustype	= BUS_HIL;
++	kbd->dev.id.vendor	= PCI_VENDOR_ID_HP;
++	kbd->dev.id.product	= 0x0001; /* TODO: get from kbd->rsc */
++	kbd->dev.id.version	= 0x0100; /* TODO: get from kbd->rsc */
++	kbd->dev.dev		= &serio->dev;
++
++	for (i = 0; i < 128; i++) {
++		set_bit(hil_kbd_set1[i], kbd->dev.keybit);
++		set_bit(hil_kbd_set3[i], kbd->dev.keybit);
++	}
++	clear_bit(0, kbd->dev.keybit);
++
++	input_register_device(&kbd->dev);
++	printk(KERN_INFO "input: %s, ID: %d\n",
++		kbd->dev.name, did);
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_EK1); /* Enable Keyswitch Autorepeat 1 */
++	down(&(kbd->sem));
++	up(&(kbd->sem));
++
++	return;
++ bail1:
++	serio_close(serio);
++ bail0:
++	kfree(kbd);
++}
++
++
++struct serio_driver hil_kbd_serio_drv = {
++	.driver		= {
++		.name	= "hil_kbd",
++	},
++	.description	= "HP HIL keyboard driver",
++	.connect 	= hil_kbd_connect,
++	.disconnect 	= hil_kbd_disconnect,
++	.interrupt 	= hil_kbd_interrupt
++};
++
++static int __init hil_kbd_init(void)
++{
++	serio_register_driver(&hil_kbd_serio_drv);
++        return 0;
++}
++                
++static void __exit hil_kbd_exit(void)
++{
++	serio_unregister_driver(&hil_kbd_serio_drv);
++}
++                        
++module_init(hil_kbd_init);
++module_exit(hil_kbd_exit);
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/hilkbd.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/hilkbd.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,343 @@
++/*
++ *  linux/drivers/hil/hilkbd.c
++ *
++ *  Copyright (C) 1998 Philip Blundell <philb at gnu.org>
++ *  Copyright (C) 1999 Matthew Wilcox <willy at bofh.ai>
++ *  Copyright (C) 1999-2003 Helge Deller <deller at gmx.de>
++ *
++ *  Very basic HP Human Interface Loop (HIL) driver.
++ *  This driver handles the keyboard on HP300 (m68k) and on some 
++ *  HP700 (parisc) series machines.
++ *
++ * 
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License version 2.  See the file COPYING in the main directory of this
++ * archive for more details.
++ */
++
++#include <linux/pci_ids.h>
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/config.h>
++#include <linux/errno.h>
++#include <linux/input.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/hil.h>
++#include <linux/spinlock.h>
++
++
++MODULE_AUTHOR("Philip Blundell, Matthew Wilcox, Helge Deller");
++MODULE_DESCRIPTION("HIL keyboard driver (basic functionality)");
++MODULE_LICENSE("GPL v2");
++
++
++#if defined(CONFIG_PARISC)
++
++ #include <asm/io.h>
++ #include <asm/hardware.h>
++ #include <asm/parisc-device.h>
++ static unsigned long hil_base;	/* HPA for the HIL device */
++ static unsigned int hil_irq;
++ #define HILBASE		hil_base /* HPPA (parisc) port address */
++ #define HIL_DATA		0x800
++ #define HIL_CMD		0x801
++ #define HIL_IRQ		hil_irq
++ #define hil_readb(p)		gsc_readb(p)
++ #define hil_writeb(v,p)	gsc_writeb((v),(p))
++
++#elif defined(CONFIG_HP300)
++
++ #define HILBASE		0xf0428000 /* HP300 (m86k) port address */
++ #define HIL_DATA		0x1
++ #define HIL_CMD		0x3
++ #define HIL_IRQ		2
++ #define hil_readb(p)		readb(p)
++ #define hil_writeb(v,p)	writeb((v),(p))
++
++#else
++#error "HIL is not supported on this platform"
++#endif
++
++
++ 
++/* HIL helper functions */
++ 
++#define hil_busy()              (hil_readb(HILBASE + HIL_CMD) & HIL_BUSY)
++#define hil_data_available()    (hil_readb(HILBASE + HIL_CMD) & HIL_DATA_RDY)
++#define hil_status()            (hil_readb(HILBASE + HIL_CMD))
++#define hil_command(x)          do { hil_writeb((x), HILBASE + HIL_CMD); } while (0)
++#define hil_read_data()         (hil_readb(HILBASE + HIL_DATA))
++#define hil_write_data(x)       do { hil_writeb((x), HILBASE + HIL_DATA); } while (0)
++
++/* HIL constants */
++ 
++#define	HIL_BUSY		0x02
++#define	HIL_DATA_RDY		0x01
++
++#define	HIL_SETARD		0xA0		/* set auto-repeat delay */
++#define	HIL_SETARR		0xA2		/* set auto-repeat rate */
++#define	HIL_SETTONE		0xA3		/* set tone generator */
++#define	HIL_CNMT		0xB2		/* clear nmi */
++#define	HIL_INTON		0x5C		/* Turn on interrupts. */
++#define	HIL_INTOFF		0x5D		/* Turn off interrupts. */
++
++#define	HIL_READKBDSADR	 	0xF9
++#define	HIL_WRITEKBDSADR 	0xE9
++
++static unsigned int hphilkeyb_keycode[HIL_KEYCODES_SET1_TBLSIZE] = 
++	{ HIL_KEYCODES_SET1 };
++
++/* HIL structure */
++static struct {
++	struct input_dev dev;
++
++	unsigned int curdev;
++	
++	unsigned char s;
++	unsigned char c;
++	int valid;
++	
++	unsigned char data[16];
++	unsigned int ptr;
++	spinlock_t lock;
++
++	void *dev_id;	/* native bus device */
++} hil_dev;
++
++
++static void poll_finished(void)
++{
++	int down;
++	int key;
++	unsigned char scode;
++	
++	switch (hil_dev.data[0]) {
++	case 0x40:
++		down = (hil_dev.data[1] & 1) == 0;
++		scode = hil_dev.data[1] >> 1;
++		key = hphilkeyb_keycode[scode];
++		input_report_key(&hil_dev.dev, key, down);
++		break;
++	}
++	hil_dev.curdev = 0;
++}
++
++static inline void handle_status(unsigned char s, unsigned char c)
++{
++	if (c & 0x8) {
++		/* End of block */
++		if (c & 0x10)
++			poll_finished();
++	} else {
++		if (c & 0x10) {
++			if (hil_dev.curdev)
++				poll_finished();  /* just in case */
++			hil_dev.curdev = c & 7;
++			hil_dev.ptr = 0;
++		}
++	}
++}
++
++static inline void handle_data(unsigned char s, unsigned char c)
++{
++	if (hil_dev.curdev) {
++		hil_dev.data[hil_dev.ptr++] = c;
++		hil_dev.ptr &= 15;
++	}
++}
++
++
++/* 
++ * Handle HIL interrupts.
++ */
++static irqreturn_t hil_interrupt(int irq, void *handle, struct pt_regs *regs)
++{
++	unsigned char s, c;
++	
++	s = hil_status();
++	c = hil_read_data();
++
++	switch (s >> 4) {
++	case 0x5:
++		handle_status(s, c);
++		break;
++	case 0x6:
++		handle_data(s, c);
++		break;
++	case 0x4:
++		hil_dev.s = s;
++		hil_dev.c = c;
++		mb();
++		hil_dev.valid = 1;
++		break;
++	}
++	return IRQ_HANDLED;
++}
++
++/*
++ * Send a command to the HIL
++ */
++
++static void hil_do(unsigned char cmd, unsigned char *data, unsigned int len)
++{
++	unsigned long flags;
++
++	spin_lock_irqsave(&hil_dev.lock, flags);
++	while (hil_busy())
++		/* wait */;
++	hil_command(cmd);
++	while (len--) {
++		while (hil_busy())
++			/* wait */;
++		hil_write_data(*(data++));
++	}
++	spin_unlock_irqrestore(&hil_dev.lock, flags);
++}
++
++
++/*
++ * Initialise HIL. 
++ */
++
++static int __init
++hil_keyb_init(void)
++{
++	unsigned char c;
++	unsigned int i, kbid;
++	wait_queue_head_t hil_wait;
++
++	if (hil_dev.dev.id.bustype) {
++		return -ENODEV; /* already initialized */
++	}
++	
++#if defined(CONFIG_HP300)
++	if (!hwreg_present((void *)(HILBASE + HIL_DATA)))
++		return -ENODEV;
++	
++	request_region(HILBASE+HIL_DATA, 2, "hil");
++#endif
++	
++	request_irq(HIL_IRQ, hil_interrupt, 0, "hil", hil_dev.dev_id);
++
++	/* Turn on interrupts */
++	hil_do(HIL_INTON, NULL, 0);
++
++	/* Look for keyboards */
++	hil_dev.valid = 0;	/* clear any pending data */
++	hil_do(HIL_READKBDSADR, NULL, 0);
++
++	init_waitqueue_head(&hil_wait);
++	wait_event_interruptible_timeout(hil_wait, hil_dev.valid, 3*HZ);
++	if (!hil_dev.valid) {
++		printk(KERN_WARNING "HIL: timed out, assuming no keyboard present.\n");
++	}
++
++	c = hil_dev.c; 
++	hil_dev.valid = 0;
++	if (c == 0) {
++		kbid = -1;
++		printk(KERN_WARNING "HIL: no keyboard present.\n");
++	} else {
++		kbid = ffz(~c);
++		/* printk(KERN_INFO "HIL: keyboard found at id %d\n", kbid); */
++	}
++
++	/* set it to raw mode */
++	c = 0;
++	hil_do(HIL_WRITEKBDSADR, &c, 1);
++	
++	init_input_dev(&hil_dev.dev);
++
++	for (i = 0; i < HIL_KEYCODES_SET1_TBLSIZE; i++)
++		if (hphilkeyb_keycode[i] != KEY_RESERVED)
++			set_bit(hphilkeyb_keycode[i], hil_dev.dev.keybit);
++
++	hil_dev.dev.evbit[0]    = BIT(EV_KEY) | BIT(EV_REP);
++	hil_dev.dev.ledbit[0]   = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL);
++	hil_dev.dev.keycodemax  = HIL_KEYCODES_SET1_TBLSIZE;
++        hil_dev.dev.keycodesize = sizeof(hphilkeyb_keycode[0]);
++	hil_dev.dev.keycode     = hphilkeyb_keycode;
++	hil_dev.dev.name 	= "HIL keyboard";
++	hil_dev.dev.phys 	= "hpkbd/input0";
++
++	hil_dev.dev.id.bustype	= BUS_HIL;
++	hil_dev.dev.id.vendor	= PCI_VENDOR_ID_HP;
++	hil_dev.dev.id.product	= 0x0001;
++	hil_dev.dev.id.version	= 0x0010;
++
++	input_register_device(&hil_dev.dev);
++	printk(KERN_INFO "input: %s, ID %d at 0x%08lx (irq %d) found and attached\n",
++		hil_dev.dev.name, kbid, HILBASE, HIL_IRQ);
++
++	return 0;
++}
++
++#if defined(CONFIG_PARISC)
++static int __init
++hil_init_chip(struct parisc_device *dev)
++{
++	if (!dev->irq) {
++		printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa);
++		return -ENODEV;
++	}
++
++	hil_base = dev->hpa;
++	hil_irq  = dev->irq;
++	hil_dev.dev_id = dev;
++	
++	printk(KERN_INFO "Found HIL bus at 0x%08lx, IRQ %d\n", hil_base, hil_irq);
++
++	return hil_keyb_init();
++}
++
++static struct parisc_device_id hil_tbl[] = {
++	{ HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x00073 },
++	{ 0, }
++};
++
++MODULE_DEVICE_TABLE(parisc, hil_tbl);
++
++static struct parisc_driver hil_driver = {
++	.name =		"HIL",
++	.id_table =	hil_tbl,
++	.probe =	hil_init_chip,
++};
++#endif /* CONFIG_PARISC */
++
++
++
++
++
++static int __init hil_init(void)
++{
++#if defined(CONFIG_PARISC)
++	return register_parisc_driver(&hil_driver);
++#else
++	return hil_keyb_init();
++#endif
++}
++
++
++static void __exit hil_exit(void)
++{
++	if (HIL_IRQ) {
++		disable_irq(HIL_IRQ);
++		free_irq(HIL_IRQ, hil_dev.dev_id);
++	}
++
++	/* Turn off interrupts */
++	hil_do(HIL_INTOFF, NULL, 0);
++
++	input_unregister_device(&hil_dev.dev);
++
++#if defined(CONFIG_PARISC)
++	unregister_parisc_driver(&hil_driver);
++#else
++	release_region(HILBASE+HIL_DATA, 2);
++#endif
++}
++
++module_init(hil_init);
++module_exit(hil_exit);
++
+Index: debian-kernel-hppa-2.6.10/drivers/input/keyboard/hpps2atkbd.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/keyboard/hpps2atkbd.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/keyboard/hpps2atkbd.h	2005-01-21 12:16:45.000000000 -0500
+@@ -14,10 +14,8 @@
+  */
+ 
+ 
+-/* undefine if you have a RDI PRECISIONBOOK */
+-#define STANDARD_KEYBOARD
+-
+-#if defined(STANDARD_KEYBOARD)
++/* Is the keyboard an RDI PrecisionBook? */
++#ifndef CONFIG_KEYBOARD_ATKBD_RDI_KEYCODES
+ # define CONFLICT(x,y) x
+ #else
+ # define CONFLICT(x,y) y
+@@ -50,10 +48,10 @@
+ /* 60 */  KEY_DOWN,     C_61,          KEY_PAUSE,     KEY_UP,        KEY_DELETE,    KEY_END,      KEY_BACKSPACE, KEY_INSERT,
+ /* 68 */  KEY_RESERVED, KEY_KP1,       KEY_RIGHT,     KEY_KP4,       KEY_KP7,       KEY_PAGEDOWN, KEY_HOME,      KEY_PAGEUP,
+ /* 70 */  KEY_KP0,      KEY_KPDOT,     KEY_KP2,       KEY_KP5,       KEY_KP6,       KEY_KP8,      KEY_ESC,       KEY_NUMLOCK,
+-/* 78 */  KEY_F11,      KEY_KPPLUS,    KEY_KP3,       KEY_KPMINUS,   KEY_KPASTERISK,KEY_KP9,      KEY_SCROLLLOCK,KEY_103RD,
++/* 78 */  KEY_F11,      KEY_KPPLUS,    KEY_KP3,       KEY_KPMINUS,   KEY_KPASTERISK,KEY_KP9,      KEY_SCROLLLOCK,KEY_102ND,
+ /* 80 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,
+ /* 88 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,
+-/* 90 */  KEY_RESERVED, KEY_RIGHTALT,  KEY_SYSRQ,     KEY_RESERVED,  KEY_RIGHTCTRL, KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,
++/* 90 */  KEY_RESERVED, KEY_RIGHTALT,  255,           KEY_RESERVED,  KEY_RIGHTCTRL, KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,
+ /* 98 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_CAPSLOCK, KEY_RESERVED,  KEY_LEFTMETA,
+ /* a0 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_RIGHTMETA,
+ /* a8 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_COMPOSE,
+@@ -103,7 +101,6 @@
+ /* f0 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,
+ /* f8 */  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED,  KEY_RESERVED, KEY_RESERVED,  KEY_RESERVED
+ 
+-#undef STANDARD_KEYBOARD
+ #undef CONFLICT
+ #undef C_07
+ #undef C_11
+Index: debian-kernel-hppa-2.6.10/drivers/input/misc/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/misc/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/misc/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -50,3 +50,11 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called uinput.
+ 
++config HP_SDC_RTC
++	tristate "HP SDC Real Time Clock"
++	depends on INPUT && INPUT_MISC && GSC
++	select HP_SDC
++	help
++	  Say Y here if you want to support the built-in real time clock
++	  of the HP SDC controller.
++
+Index: debian-kernel-hppa-2.6.10/drivers/input/misc/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/misc/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/misc/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -9,3 +9,4 @@
+ obj-$(CONFIG_INPUT_M68K_BEEP)		+= m68kspkr.o
+ obj-$(CONFIG_INPUT_98SPKR)		+= 98spkr.o
+ obj-$(CONFIG_INPUT_UINPUT)		+= uinput.o
++obj-$(CONFIG_HP_SDC_RTC)		+= hp_sdc_rtc.o
+Index: debian-kernel-hppa-2.6.10/drivers/input/misc/hp_sdc_rtc.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/misc/hp_sdc_rtc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,724 @@
++/*
++ * HP i8042 SDC + MSM-58321 BBRTC driver.
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * System Device Controller Microprocessor Firmware Theory of Operation
++ *      for Part Number 1820-4784 Revision B.  Dwg No. A-1820-4784-2
++ * efirtc.c by Stephane Eranian/Hewlett Packard
++ *
++ */
++
++#include <linux/hp_sdc.h>
++#include <linux/errno.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/time.h>
++#include <linux/miscdevice.h>
++#include <linux/proc_fs.h>
++#include <linux/poll.h>
++#include <linux/rtc.h>
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION("HP i8042 SDC + MSM-58321 RTC Driver");
++MODULE_LICENSE("Dual BSD/GPL");
++
++#define RTC_VERSION "1.10d"
++
++static unsigned long epoch = 2000;
++
++static struct semaphore i8042tregs;
++
++static hp_sdc_irqhook hp_sdc_rtc_isr;
++
++static struct fasync_struct *hp_sdc_rtc_async_queue;
++
++static DECLARE_WAIT_QUEUE_HEAD(hp_sdc_rtc_wait);
++
++static loff_t hp_sdc_rtc_llseek(struct file *file, loff_t offset, int origin);
++
++static ssize_t hp_sdc_rtc_read(struct file *file, char *buf,
++			       size_t count, loff_t *ppos);
++
++static int hp_sdc_rtc_ioctl(struct inode *inode, struct file *file,
++			    unsigned int cmd, unsigned long arg);
++
++static unsigned int hp_sdc_rtc_poll(struct file *file, poll_table *wait);
++
++static int hp_sdc_rtc_open(struct inode *inode, struct file *file);
++static int hp_sdc_rtc_release(struct inode *inode, struct file *file);
++static int hp_sdc_rtc_fasync (int fd, struct file *filp, int on);
++
++static int hp_sdc_rtc_read_proc(char *page, char **start, off_t off,
++				int count, int *eof, void *data);
++
++static void hp_sdc_rtc_isr (int irq, void *dev_id, 
++			    uint8_t status, uint8_t data) 
++{
++	return;
++}
++
++static int hp_sdc_rtc_do_read_bbrtc (struct rtc_time *rtctm)
++{
++	struct semaphore tsem;
++	hp_sdc_transaction t;
++	uint8_t tseq[91];
++	int i;
++	
++	i = 0;
++	while (i < 91) {
++		tseq[i++] = HP_SDC_ACT_DATAREG |
++			HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN;
++		tseq[i++] = 0x01;			/* write i8042[0x70] */
++	  	tseq[i]   = i / 7;			/* BBRTC reg address */
++		i++;
++		tseq[i++] = HP_SDC_CMD_DO_RTCR;		/* Trigger command   */
++		tseq[i++] = 2;		/* expect 1 stat/dat pair back.   */
++		i++; i++;               /* buffer for stat/dat pair       */
++	}
++	tseq[84] |= HP_SDC_ACT_SEMAPHORE;
++	t.endidx =		91;
++	t.seq =			tseq;
++	t.act.semaphore =	&tsem;
++	init_MUTEX_LOCKED(&tsem);
++	
++	if (hp_sdc_enqueue_transaction(&t)) return -1;
++	
++	down_interruptible(&tsem);  /* Put ourselves to sleep for results. */
++	
++	/* Check for nonpresence of BBRTC */
++	if (!((tseq[83] | tseq[90] | tseq[69] | tseq[76] |
++	       tseq[55] | tseq[62] | tseq[34] | tseq[41] |
++	       tseq[20] | tseq[27] | tseq[6]  | tseq[13]) & 0x0f))
++		return -1;
++
++	memset(rtctm, 0, sizeof(struct rtc_time));
++	rtctm->tm_year = (tseq[83] & 0x0f) + (tseq[90] & 0x0f) * 10;
++	rtctm->tm_mon  = (tseq[69] & 0x0f) + (tseq[76] & 0x0f) * 10;
++	rtctm->tm_mday = (tseq[55] & 0x0f) + (tseq[62] & 0x0f) * 10;
++	rtctm->tm_wday = (tseq[48] & 0x0f);
++	rtctm->tm_hour = (tseq[34] & 0x0f) + (tseq[41] & 0x0f) * 10;
++	rtctm->tm_min  = (tseq[20] & 0x0f) + (tseq[27] & 0x0f) * 10;
++	rtctm->tm_sec  = (tseq[6]  & 0x0f) + (tseq[13] & 0x0f) * 10;
++	
++	return 0;
++}
++
++static int hp_sdc_rtc_read_bbrtc (struct rtc_time *rtctm)
++{
++	struct rtc_time tm, tm_last;
++	int i = 0;
++
++	/* MSM-58321 has no read latch, so must read twice and compare. */
++
++	if (hp_sdc_rtc_do_read_bbrtc(&tm_last)) return -1;
++	if (hp_sdc_rtc_do_read_bbrtc(&tm)) return -1;
++
++	while (memcmp(&tm, &tm_last, sizeof(struct rtc_time))) {
++		if (i++ > 4) return -1;
++		memcpy(&tm_last, &tm, sizeof(struct rtc_time));
++		if (hp_sdc_rtc_do_read_bbrtc(&tm)) return -1;
++	}
++
++	memcpy(rtctm, &tm, sizeof(struct rtc_time));
++
++	return 0;
++}
++
++
++static int64_t hp_sdc_rtc_read_i8042timer (uint8_t loadcmd, int numreg)
++{
++	hp_sdc_transaction t;
++	uint8_t tseq[26] = {
++		HP_SDC_ACT_PRECMD | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN,
++		0,
++		HP_SDC_CMD_READ_T1, 2, 0, 0,
++		HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN, 
++		HP_SDC_CMD_READ_T2, 2, 0, 0,
++		HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN, 
++		HP_SDC_CMD_READ_T3, 2, 0, 0,
++		HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN, 
++		HP_SDC_CMD_READ_T4, 2, 0, 0,
++		HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN, 
++		HP_SDC_CMD_READ_T5, 2, 0, 0
++	};
++
++	t.endidx = numreg * 5;
++
++	tseq[1] = loadcmd;
++	tseq[t.endidx - 4] |= HP_SDC_ACT_SEMAPHORE; /* numreg assumed > 1 */
++
++	t.seq =			tseq;
++	t.act.semaphore =	&i8042tregs;
++
++	down_interruptible(&i8042tregs);  /* Sleep if output regs in use. */
++
++	if (hp_sdc_enqueue_transaction(&t)) return -1;
++	
++	down_interruptible(&i8042tregs);  /* Sleep until results come back. */
++	up(&i8042tregs);
++
++	return (tseq[5] | 
++		((uint64_t)(tseq[10]) << 8)  | ((uint64_t)(tseq[15]) << 16) |
++		((uint64_t)(tseq[20]) << 24) | ((uint64_t)(tseq[25]) << 32));
++}
++
++
++/* Read the i8042 real-time clock */
++static inline int hp_sdc_rtc_read_rt(struct timeval *res) {
++	int64_t raw;
++	uint32_t tenms; 
++	unsigned int days;
++
++	raw = hp_sdc_rtc_read_i8042timer(HP_SDC_CMD_LOAD_RT, 5);
++	if (raw < 0) return -1;
++
++	tenms = (uint32_t)raw & 0xffffff;
++	days  = (unsigned int)(raw >> 24) & 0xffff;
++
++	res->tv_usec = (suseconds_t)(tenms % 100) * 10000;
++	res->tv_sec =  (time_t)(tenms / 100) + days * 86400;
++
++	return 0;
++}
++
++
++/* Read the i8042 fast handshake timer */
++static inline int hp_sdc_rtc_read_fhs(struct timeval *res) {
++	uint64_t raw;
++	unsigned int tenms;
++
++	raw = hp_sdc_rtc_read_i8042timer(HP_SDC_CMD_LOAD_FHS, 2);
++	if (raw < 0) return -1;
++
++	tenms = (unsigned int)raw & 0xffff;
++
++	res->tv_usec = (suseconds_t)(tenms % 100) * 10000;
++	res->tv_sec  = (time_t)(tenms / 100);
++
++	return 0;
++}
++
++
++/* Read the i8042 match timer (a.k.a. alarm) */
++static inline int hp_sdc_rtc_read_mt(struct timeval *res) {
++	int64_t raw;	
++	uint32_t tenms; 
++
++	raw = hp_sdc_rtc_read_i8042timer(HP_SDC_CMD_LOAD_MT, 3);
++	if (raw < 0) return -1;
++
++	tenms = (uint32_t)raw & 0xffffff;
++
++	res->tv_usec = (suseconds_t)(tenms % 100) * 10000;
++	res->tv_sec  = (time_t)(tenms / 100);
++
++	return 0;
++}
++
++
++/* Read the i8042 delay timer */
++static inline int hp_sdc_rtc_read_dt(struct timeval *res) {
++	int64_t raw;
++	uint32_t tenms;
++
++	raw = hp_sdc_rtc_read_i8042timer(HP_SDC_CMD_LOAD_DT, 3);
++	if (raw < 0) return -1;
++
++	tenms = (uint32_t)raw & 0xffffff;
++
++	res->tv_usec = (suseconds_t)(tenms % 100) * 10000;
++	res->tv_sec  = (time_t)(tenms / 100);
++
++	return 0;
++}
++
++
++/* Read the i8042 cycle timer (a.k.a. periodic) */
++static inline int hp_sdc_rtc_read_ct(struct timeval *res) {
++	int64_t raw;
++	uint32_t tenms;
++
++	raw = hp_sdc_rtc_read_i8042timer(HP_SDC_CMD_LOAD_CT, 3);
++	if (raw < 0) return -1;
++
++	tenms = (uint32_t)raw & 0xffffff;
++
++	res->tv_usec = (suseconds_t)(tenms % 100) * 10000;
++	res->tv_sec  = (time_t)(tenms / 100);
++
++	return 0;
++}
++
++
++/* Set the i8042 real-time clock */
++static int hp_sdc_rtc_set_rt (struct timeval *setto)
++{
++	uint32_t tenms;
++	unsigned int days;
++	hp_sdc_transaction t;
++	uint8_t tseq[11] = {
++		HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT,
++		HP_SDC_CMD_SET_RTMS, 3, 0, 0, 0,
++		HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT,
++		HP_SDC_CMD_SET_RTD, 2, 0, 0 
++	};
++
++	t.endidx = 10;
++
++	if (0xffff < setto->tv_sec / 86400) return -1;
++	days = setto->tv_sec / 86400;
++	if (0xffff < setto->tv_usec / 1000000 / 86400) return -1;
++	days += ((setto->tv_sec % 86400) + setto->tv_usec / 1000000) / 86400;
++	if (days > 0xffff) return -1;
++
++	if (0xffffff < setto->tv_sec) return -1;
++	tenms  = setto->tv_sec * 100;
++	if (0xffffff < setto->tv_usec / 10000) return -1;
++	tenms += setto->tv_usec / 10000;
++	if (tenms > 0xffffff) return -1;
++
++	tseq[3] = (uint8_t)(tenms & 0xff);
++	tseq[4] = (uint8_t)((tenms >> 8)  & 0xff);
++	tseq[5] = (uint8_t)((tenms >> 16) & 0xff);
++
++	tseq[9] = (uint8_t)(days & 0xff);
++	tseq[10] = (uint8_t)((days >> 8) & 0xff);
++
++	t.seq =	tseq;
++
++	if (hp_sdc_enqueue_transaction(&t)) return -1;
++	return 0;
++}
++
++/* Set the i8042 fast handshake timer */
++static int hp_sdc_rtc_set_fhs (struct timeval *setto)
++{
++	uint32_t tenms;
++	hp_sdc_transaction t;
++	uint8_t tseq[5] = {
++		HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT,
++		HP_SDC_CMD_SET_FHS, 2, 0, 0
++	};
++
++	t.endidx = 4;
++
++	if (0xffff < setto->tv_sec) return -1;
++	tenms  = setto->tv_sec * 100;
++	if (0xffff < setto->tv_usec / 10000) return -1;
++	tenms += setto->tv_usec / 10000;
++	if (tenms > 0xffff) return -1;
++
++	tseq[3] = (uint8_t)(tenms & 0xff);
++	tseq[4] = (uint8_t)((tenms >> 8)  & 0xff);
++
++	t.seq =	tseq;
++
++	if (hp_sdc_enqueue_transaction(&t)) return -1;
++	return 0;
++}
++
++
++/* Set the i8042 match timer (a.k.a. alarm) */
++#define hp_sdc_rtc_set_mt (setto) \
++	hp_sdc_rtc_set_i8042timer(setto, HP_SDC_CMD_SET_MT)
++
++/* Set the i8042 delay timer */
++#define hp_sdc_rtc_set_dt (setto) \
++	hp_sdc_rtc_set_i8042timer(setto, HP_SDC_CMD_SET_DT)
++
++/* Set the i8042 cycle timer (a.k.a. periodic) */
++#define hp_sdc_rtc_set_ct (setto) \
++	hp_sdc_rtc_set_i8042timer(setto, HP_SDC_CMD_SET_CT)
++
++/* Set one of the i8042 3-byte wide timers */
++static int hp_sdc_rtc_set_i8042timer (struct timeval *setto, uint8_t setcmd)
++{
++	uint32_t tenms;
++	hp_sdc_transaction t;
++	uint8_t tseq[6] = {
++		HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT,
++		0, 3, 0, 0, 0
++	};
++
++	t.endidx = 6;
++
++	if (0xffffff < setto->tv_sec) return -1;
++	tenms  = setto->tv_sec * 100;
++	if (0xffffff < setto->tv_usec / 10000) return -1;
++	tenms += setto->tv_usec / 10000;
++	if (tenms > 0xffffff) return -1;
++
++	tseq[1] = setcmd;
++	tseq[3] = (uint8_t)(tenms & 0xff);
++	tseq[4] = (uint8_t)((tenms >> 8)  & 0xff);
++	tseq[5] = (uint8_t)((tenms >> 16)  & 0xff);
++
++	t.seq =			tseq;
++
++	if (hp_sdc_enqueue_transaction(&t)) { 
++		return -1;
++	}
++	return 0;
++}
++
++static loff_t hp_sdc_rtc_llseek(struct file *file, loff_t offset, int origin)
++{
++        return -ESPIPE;
++}
++
++static ssize_t hp_sdc_rtc_read(struct file *file, char *buf,
++			       size_t count, loff_t *ppos) {
++	ssize_t retval;
++
++        if (count < sizeof(unsigned long))
++                return -EINVAL;
++
++	retval = put_user(68, (unsigned long *)buf);
++	return retval;
++}
++
++static unsigned int hp_sdc_rtc_poll(struct file *file, poll_table *wait)
++{
++        unsigned long l;
++
++	l = 0;
++        if (l != 0)
++                return POLLIN | POLLRDNORM;
++        return 0;
++}
++
++static int hp_sdc_rtc_open(struct inode *inode, struct file *file)
++{
++        return 0;
++}
++
++static int hp_sdc_rtc_release(struct inode *inode, struct file *file)
++{
++	/* Turn off interrupts? */
++
++        if (file->f_flags & FASYNC) {
++                hp_sdc_rtc_fasync (-1, file, 0);
++        }
++
++        return 0;
++}
++
++static int hp_sdc_rtc_fasync (int fd, struct file *filp, int on)
++{
++        return fasync_helper (fd, filp, on, &hp_sdc_rtc_async_queue);
++}
++
++static int hp_sdc_rtc_proc_output (char *buf)
++{
++#define YN(bit) ("no")
++#define NY(bit) ("yes")
++        char *p;
++        struct rtc_time tm;
++	struct timeval tv;
++
++	memset(&tm, 0, sizeof(struct rtc_time));
++
++	p = buf;
++
++	if (hp_sdc_rtc_read_bbrtc(&tm)) {
++		p += sprintf(p, "BBRTC\t\t: READ FAILED!\n");
++	} else {
++		p += sprintf(p,
++			     "rtc_time\t: %02d:%02d:%02d\n"
++			     "rtc_date\t: %04d-%02d-%02d\n"
++			     "rtc_epoch\t: %04lu\n",
++			     tm.tm_hour, tm.tm_min, tm.tm_sec,
++			     tm.tm_year + 1900, tm.tm_mon + 1, 
++			     tm.tm_mday, epoch);
++	}
++
++	if (hp_sdc_rtc_read_rt(&tv)) {
++		p += sprintf(p, "i8042 rtc\t: READ FAILED!\n");
++	} else {
++		p += sprintf(p, "i8042 rtc\t: %ld.%02d seconds\n", 
++			     tv.tv_sec, tv.tv_usec/1000);
++	}
++
++	if (hp_sdc_rtc_read_fhs(&tv)) {
++		p += sprintf(p, "handshake\t: READ FAILED!\n");
++	} else {
++        	p += sprintf(p, "handshake\t: %ld.%02d seconds\n", 
++			     tv.tv_sec, tv.tv_usec/1000);
++	}
++
++	if (hp_sdc_rtc_read_mt(&tv)) {
++		p += sprintf(p, "alarm\t\t: READ FAILED!\n");
++	} else {
++		p += sprintf(p, "alarm\t\t: %ld.%02d seconds\n", 
++			     tv.tv_sec, tv.tv_usec/1000);
++	}
++
++	if (hp_sdc_rtc_read_dt(&tv)) {
++		p += sprintf(p, "delay\t\t: READ FAILED!\n");
++	} else {
++		p += sprintf(p, "delay\t\t: %ld.%02d seconds\n", 
++			     tv.tv_sec, tv.tv_usec/1000);
++	}
++
++	if (hp_sdc_rtc_read_ct(&tv)) {
++		p += sprintf(p, "periodic\t: READ FAILED!\n");
++	} else {
++		p += sprintf(p, "periodic\t: %ld.%02d seconds\n", 
++			     tv.tv_sec, tv.tv_usec/1000);
++	}
++
++        p += sprintf(p,
++                     "DST_enable\t: %s\n"
++                     "BCD\t\t: %s\n"
++                     "24hr\t\t: %s\n"
++                     "square_wave\t: %s\n"
++                     "alarm_IRQ\t: %s\n"
++                     "update_IRQ\t: %s\n"
++                     "periodic_IRQ\t: %s\n"
++		     "periodic_freq\t: %ld\n"
++                     "batt_status\t: %s\n",
++                     YN(RTC_DST_EN),
++                     NY(RTC_DM_BINARY),
++                     YN(RTC_24H),
++                     YN(RTC_SQWE),
++                     YN(RTC_AIE),
++                     YN(RTC_UIE),
++                     YN(RTC_PIE),
++                     1UL,
++                     1 ? "okay" : "dead");
++
++        return  p - buf;
++#undef YN
++#undef NY
++}
++
++static int hp_sdc_rtc_read_proc(char *page, char **start, off_t off,
++                         int count, int *eof, void *data)
++{
++	int len = hp_sdc_rtc_proc_output (page);
++        if (len <= off+count) *eof = 1;
++        *start = page + off;
++        len -= off;
++        if (len>count) len = count;
++        if (len<0) len = 0;
++        return len;
++}
++
++static int hp_sdc_rtc_ioctl(struct inode *inode, struct file *file, 
++			    unsigned int cmd, unsigned long arg)
++{
++#if 1
++	return -EINVAL;
++#else
++	
++        struct rtc_time wtime; 
++	struct timeval ttime;
++	int use_wtime = 0;
++
++	/* This needs major work. */
++
++        switch (cmd) {
++
++        case RTC_AIE_OFF:       /* Mask alarm int. enab. bit    */
++        case RTC_AIE_ON:        /* Allow alarm interrupts.      */
++	case RTC_PIE_OFF:       /* Mask periodic int. enab. bit */
++        case RTC_PIE_ON:        /* Allow periodic ints          */
++        case RTC_UIE_ON:        /* Allow ints for RTC updates.  */
++        case RTC_UIE_OFF:       /* Allow ints for RTC updates.  */
++        {
++		/* We cannot mask individual user timers and we
++		   cannot tell them apart when they occur, so it 
++		   would be disingenuous to succeed these IOCTLs */
++		return -EINVAL;
++        }
++        case RTC_ALM_READ:      /* Read the present alarm time */
++        {
++		if (hp_sdc_rtc_read_mt(&ttime)) return -EFAULT;
++		if (hp_sdc_rtc_read_bbrtc(&wtime)) return -EFAULT;
++
++		wtime.tm_hour = ttime.tv_sec / 3600;  ttime.tv_sec %= 3600;
++		wtime.tm_min  = ttime.tv_sec / 60;    ttime.tv_sec %= 60;
++		wtime.tm_sec  = ttime.tv_sec;
++                
++		break;
++        }
++        case RTC_IRQP_READ:     /* Read the periodic IRQ rate.  */
++        {
++                return put_user(hp_sdc_rtc_freq, (unsigned long *)arg);
++        }
++        case RTC_IRQP_SET:      /* Set periodic IRQ rate.       */
++        {
++                /* 
++                 * The max we can do is 100Hz.
++		 */
++
++                if ((arg < 1) || (arg > 100)) return -EINVAL;
++		ttime.tv_sec = 0;
++		ttime.tv_usec = 1000000 / arg;
++		if (hp_sdc_rtc_set_ct(&ttime)) return -EFAULT;
++		hp_sdc_rtc_freq = arg;
++                return 0;
++        }
++        case RTC_ALM_SET:       /* Store a time into the alarm */
++        {
++                /*
++                 * This expects a struct hp_sdc_rtc_time. Writing 0xff means
++                 * "don't care" or "match all" for PC timers.  The HP SDC
++		 * does not support that perk, but it could be emulated fairly
++		 * easily.  Only the tm_hour, tm_min and tm_sec are used.
++		 * We could do it with 10ms accuracy with the HP SDC, if the 
++		 * rtc interface left us a way to do that.
++                 */
++                struct hp_sdc_rtc_time alm_tm;
++
++                if (copy_from_user(&alm_tm, (struct hp_sdc_rtc_time*)arg,
++                                   sizeof(struct hp_sdc_rtc_time)))
++                       return -EFAULT;
++
++                if (alm_tm.tm_hour > 23) return -EINVAL;
++		if (alm_tm.tm_min  > 59) return -EINVAL;
++		if (alm_tm.tm_sec  > 59) return -EINVAL;  
++
++		ttime.sec = alm_tm.tm_hour * 3600 + 
++		  alm_tm.tm_min * 60 + alm_tm.tm_sec;
++		ttime.usec = 0;
++		if (hp_sdc_rtc_set_mt(&ttime)) return -EFAULT;
++                return 0;
++        }
++        case RTC_RD_TIME:       /* Read the time/date from RTC  */
++        {
++		if (hp_sdc_rtc_read_bbrtc(&wtime)) return -EFAULT;
++                break;
++        }
++        case RTC_SET_TIME:      /* Set the RTC */
++        {
++                struct rtc_time hp_sdc_rtc_tm;
++                unsigned char mon, day, hrs, min, sec, leap_yr;
++                unsigned int yrs;
++
++                if (!capable(CAP_SYS_TIME))
++                        return -EACCES;
++		if (copy_from_user(&hp_sdc_rtc_tm, (struct rtc_time *)arg,
++                                   sizeof(struct rtc_time)))
++                        return -EFAULT;
++
++                yrs = hp_sdc_rtc_tm.tm_year + 1900;
++                mon = hp_sdc_rtc_tm.tm_mon + 1;   /* tm_mon starts at zero */
++                day = hp_sdc_rtc_tm.tm_mday;
++                hrs = hp_sdc_rtc_tm.tm_hour;
++                min = hp_sdc_rtc_tm.tm_min;
++                sec = hp_sdc_rtc_tm.tm_sec;
++
++                if (yrs < 1970)
++                        return -EINVAL;
++
++                leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
++
++                if ((mon > 12) || (day == 0))
++                        return -EINVAL;
++                if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr)))
++                        return -EINVAL;
++		if ((hrs >= 24) || (min >= 60) || (sec >= 60))
++                        return -EINVAL;
++
++                if ((yrs -= eH) > 255)    /* They are unsigned */
++                        return -EINVAL;
++
++
++                return 0;
++        }
++        case RTC_EPOCH_READ:    /* Read the epoch.      */
++        {
++                return put_user (epoch, (unsigned long *)arg);
++        }
++        case RTC_EPOCH_SET:     /* Set the epoch.       */
++        {
++                /* 
++                 * There were no RTC clocks before 1900.
++                 */
++                if (arg < 1900)
++		  return -EINVAL;
++		if (!capable(CAP_SYS_TIME))
++		  return -EACCES;
++		
++                epoch = arg;
++                return 0;
++        }
++        default:
++                return -EINVAL;
++        }
++        return copy_to_user((void *)arg, &wtime, sizeof wtime) ? -EFAULT : 0;
++#endif
++}
++
++static struct file_operations hp_sdc_rtc_fops = {
++        .owner =	THIS_MODULE,
++        .llseek =	hp_sdc_rtc_llseek,
++        .read =		hp_sdc_rtc_read,
++        .poll =		hp_sdc_rtc_poll,
++        .ioctl =	hp_sdc_rtc_ioctl,
++        .open =		hp_sdc_rtc_open,
++        .release =	hp_sdc_rtc_release,
++        .fasync =	hp_sdc_rtc_fasync,
++};
++
++static struct miscdevice hp_sdc_rtc_dev = {
++        .minor =	RTC_MINOR,
++        .name =		"rtc_HIL",
++        .fops =		&hp_sdc_rtc_fops
++};
++
++static int __init hp_sdc_rtc_init(void)
++{
++	int ret;
++
++	init_MUTEX(&i8042tregs);
++
++	if ((ret = hp_sdc_request_timer_irq(&hp_sdc_rtc_isr)))
++		return ret;
++	misc_register(&hp_sdc_rtc_dev);
++        create_proc_read_entry ("driver/rtc", 0, 0, 
++				hp_sdc_rtc_read_proc, NULL);
++
++	printk(KERN_INFO "HP i8042 SDC + MSM-58321 RTC support loaded "
++			 "(RTC v " RTC_VERSION ")\n");
++
++	return 0;
++}
++
++static void __exit hp_sdc_rtc_exit(void)
++{
++	remove_proc_entry ("driver/rtc", NULL);
++        misc_deregister(&hp_sdc_rtc_dev);
++	hp_sdc_release_timer_irq(hp_sdc_rtc_isr);
++        printk(KERN_INFO "HP i8042 SDC + MSM-58321 RTC support unloaded\n");
++}
++
++module_init(hp_sdc_rtc_init);
++module_exit(hp_sdc_rtc_exit);
+Index: debian-kernel-hppa-2.6.10/drivers/input/mouse/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/mouse/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/mouse/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -128,3 +128,10 @@
+ 	  described in the source file). This driver also works with the
+ 	  digitizer (VSXXX-AB) DEC produced.
+ 
++config MOUSE_HIL
++	tristate "HIL pointers (mice etc)."
++	depends on GSC && INPUT_MOUSE
++	select HP_SDC
++	select HIL_MLC
++	help
++	  Say Y here to support HIL pointers.
+Index: debian-kernel-hppa-2.6.10/drivers/input/mouse/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/mouse/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/mouse/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -12,6 +12,7 @@
+ obj-$(CONFIG_MOUSE_PC110PAD)	+= pc110pad.o
+ obj-$(CONFIG_MOUSE_PS2)		+= psmouse.o
+ obj-$(CONFIG_MOUSE_SERIAL)	+= sermouse.o
++obj-$(CONFIG_MOUSE_HIL)		+= hil_ptr.o
+ obj-$(CONFIG_MOUSE_VSXXXAA)	+= vsxxxaa.o
+ 
+ psmouse-objs  := psmouse-base.o logips2pp.o synaptics.o
+Index: debian-kernel-hppa-2.6.10/drivers/input/mouse/hil_ptr.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/mouse/hil_ptr.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,414 @@
++/*
++ * Generic linux-input device driver for axis-bearing devices
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ */
++
++#include <linux/hil.h>
++#include <linux/input.h>
++#include <linux/serio.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/pci_ids.h>
++
++#define PREFIX "HIL PTR: "
++#define HIL_GENERIC_NAME "HIL pointer device"
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION(HIL_GENERIC_NAME " driver");
++MODULE_LICENSE("Dual BSD/GPL");
++
++
++#define TABLET_SIMULATES_MOUSE	/* allow tablet to be used as mouse */
++#undef  TABLET_AUTOADJUST	/* auto-adjust valid tablet ranges */
++
++
++#define HIL_PTR_MAX_LENGTH 16
++
++struct hil_ptr {
++	struct input_dev dev;
++	struct serio *serio;
++
++	/* Input buffer and index for packets from HIL bus. */
++	hil_packet data[HIL_PTR_MAX_LENGTH];
++	int idx4; /* four counts per packet */
++
++	/* Raw device info records from HIL bus, see hil.h for fields. */
++	char	idd[HIL_PTR_MAX_LENGTH];	/* DID byte and IDD record */
++	char	rsc[HIL_PTR_MAX_LENGTH];	/* RSC record */
++	char	exd[HIL_PTR_MAX_LENGTH];	/* EXD record */
++	char	rnm[HIL_PTR_MAX_LENGTH + 1];	/* RNM record + NULL term. */
++
++	/* Extra device details not contained in struct input_dev. */
++	unsigned int nbtn, naxes;
++	unsigned int btnmap[7];
++
++	/* Something to sleep around with. */
++	struct semaphore sem;
++};
++
++/* Process a complete packet after transfer from the HIL */
++static void hil_ptr_process_record(struct hil_ptr *ptr)
++{
++	struct input_dev *dev = &ptr->dev;
++	hil_packet *data = ptr->data;
++	hil_packet p;
++	int idx, i, cnt, laxis;
++	int ax16, absdev;
++
++	idx = ptr->idx4/4;
++	p = data[idx - 1];
++
++	if ((p & ~HIL_CMDCT_POL) == 
++	    (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) goto report;
++	if ((p & ~HIL_CMDCT_RPL) == 
++	    (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_RPL)) goto report;
++
++	/* Not a poll response.  See if we are loading config records. */
++	switch (p & HIL_PKT_DATA_MASK) {
++	case HIL_CMD_IDD:
++		for (i = 0; i < idx; i++)
++			ptr->idd[i] = ptr->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_PTR_MAX_LENGTH; i++)
++			ptr->idd[i] = 0;
++		break;
++	case HIL_CMD_RSC:
++		for (i = 0; i < idx; i++)
++			ptr->rsc[i] = ptr->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_PTR_MAX_LENGTH; i++)
++			ptr->rsc[i] = 0;
++		break;
++	case HIL_CMD_EXD:
++		for (i = 0; i < idx; i++)
++			ptr->exd[i] = ptr->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_PTR_MAX_LENGTH; i++)
++			ptr->exd[i] = 0;
++		break;
++	case HIL_CMD_RNM:
++		for (i = 0; i < idx; i++)
++			ptr->rnm[i] = ptr->data[i] & HIL_PKT_DATA_MASK;
++		for (; i < HIL_PTR_MAX_LENGTH + 1; i++)
++			ptr->rnm[i] = '\0';
++		break;
++	default:
++		/* These occur when device isn't present */
++		if (p == (HIL_ERR_INT | HIL_PKT_CMD)) break; 
++		/* Anything else we'd like to know about. */
++		printk(KERN_WARNING PREFIX "Device sent unknown record %x\n", p);
++		break;
++	}
++	goto out;
++
++ report:
++	if ((p & HIL_CMDCT_POL) != idx - 1) {
++		printk(KERN_WARNING PREFIX "Malformed poll packet %x (idx = %i)\n", p, idx);
++		goto out;
++	}
++
++	i = (ptr->data[0] & HIL_POL_AXIS_ALT) ? 3 : 0;
++	laxis = ptr->data[0] & HIL_POL_NUM_AXES_MASK;
++	laxis += i;
++
++	ax16 = ptr->idd[1] & HIL_IDD_HEADER_16BIT; /* 8 or 16bit resolution */
++	absdev = ptr->idd[1] & HIL_IDD_HEADER_ABS; 
++
++	for (cnt = 1; i < laxis; i++) {
++		unsigned int lo,hi,val;
++		lo = ptr->data[cnt++] & HIL_PKT_DATA_MASK;
++		hi = ax16 ? (ptr->data[cnt++] & HIL_PKT_DATA_MASK) : 0;
++		if (absdev) {
++			val = lo + (hi<<8);
++#ifdef TABLET_AUTOADJUST
++			if (val < ptr->dev.absmin[ABS_X + i])
++				ptr->dev.absmin[ABS_X + i] = val;
++			if (val > ptr->dev.absmax[ABS_X + i])
++				ptr->dev.absmax[ABS_X + i] = val;
++#endif
++			if (i%3) val = ptr->dev.absmax[ABS_X + i] - val;
++			input_report_abs(dev, ABS_X + i, val);
++		} else {
++			val = (int) (((int8_t)lo) | ((int8_t)hi<<8));
++			if (i%3) val *= -1;
++			input_report_rel(dev, REL_X + i, val);
++		}
++	}
++
++	while (cnt < idx - 1) {
++		unsigned int btn;
++		int up;
++		btn = ptr->data[cnt++];
++		up = btn & 1;
++		btn &= 0xfe;
++		if (btn == 0x8e) {
++			continue; /* TODO: proximity == touch? */
++		}
++		else if ((btn > 0x8c) || (btn < 0x80)) continue;
++		btn = (btn - 0x80) >> 1;
++		btn = ptr->btnmap[btn];
++		input_report_key(dev, btn, !up);
++	}
++	input_sync(dev);
++ out:
++	ptr->idx4 = 0;
++	up(&ptr->sem);
++}
++
++static void hil_ptr_process_err(struct hil_ptr *ptr) {
++	printk(KERN_WARNING PREFIX "errored HIL packet\n");
++	ptr->idx4 = 0;
++	up(&ptr->sem);
++	return;
++}
++
++static irqreturn_t hil_ptr_interrupt(struct serio *serio, 
++        unsigned char data, unsigned int flags, struct pt_regs *regs)
++{
++	struct hil_ptr *ptr;
++	hil_packet packet;
++	int idx;
++
++	ptr = (struct hil_ptr *)serio->private;
++	if (ptr == NULL) {
++		BUG();
++		return IRQ_HANDLED;
++	}
++
++	if (ptr->idx4 >= (HIL_PTR_MAX_LENGTH * sizeof(hil_packet))) {
++		hil_ptr_process_err(ptr);
++		return IRQ_HANDLED;
++	}
++	idx = ptr->idx4/4;
++	if (!(ptr->idx4 % 4)) ptr->data[idx] = 0;
++	packet = ptr->data[idx];
++	packet |= ((hil_packet)data) << ((3 - (ptr->idx4 % 4)) * 8);
++	ptr->data[idx] = packet;
++
++	/* Records of N 4-byte hil_packets must terminate with a command. */
++	if ((++(ptr->idx4)) % 4) return IRQ_HANDLED;
++	if ((packet & 0xffff0000) != HIL_ERR_INT) {
++		hil_ptr_process_err(ptr);
++		return IRQ_HANDLED;
++	}
++	if (packet & HIL_PKT_CMD) 
++		hil_ptr_process_record(ptr);
++	return IRQ_HANDLED;
++}
++
++static void hil_ptr_disconnect(struct serio *serio)
++{
++	struct hil_ptr *ptr;
++
++	ptr = (struct hil_ptr *)serio->private;
++	if (ptr == NULL) {
++		BUG();
++		return;
++	}
++
++	input_unregister_device(&ptr->dev);
++	serio_close(serio);
++	kfree(ptr);
++}
++
++static void hil_ptr_connect(struct serio *serio, struct serio_driver *driver)
++{
++	struct hil_ptr	*ptr;
++	char		*txt;
++	unsigned int	i, naxsets, btntype;
++	uint8_t		did, *idd;
++
++	if (serio->type != (SERIO_HIL_MLC | SERIO_HIL)) return;
++
++	if (!(ptr = kmalloc(sizeof(struct hil_ptr), GFP_KERNEL))) return;
++	memset(ptr, 0, sizeof(struct hil_ptr));
++
++	if (serio_open(serio, driver)) goto bail0;
++
++	serio->private = ptr;
++	ptr->serio = serio;
++	ptr->dev.private = ptr;
++
++	init_MUTEX_LOCKED(&(ptr->sem));
++
++	/* Get device info.  MLC driver supplies devid/status/etc. */
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_IDD);
++	down(&(ptr->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_RSC);
++	down(&(ptr->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_RNM);
++	down(&(ptr->sem));
++
++	serio->write(serio, 0);
++	serio->write(serio, 0);
++	serio->write(serio, HIL_PKT_CMD >> 8);
++	serio->write(serio, HIL_CMD_EXD);
++	down(&(ptr->sem));
++
++	up(&(ptr->sem));
++
++	init_input_dev(&ptr->dev);
++	did = ptr->idd[0];
++	idd = ptr->idd + 1;
++	txt = "unknown";
++	if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) {
++		ptr->dev.evbit[0] = BIT(EV_REL);
++		txt = "relative";
++	}
++
++	if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_ABS) {
++		ptr->dev.evbit[0] = BIT(EV_ABS);
++		txt = "absolute";
++	}
++	if (!ptr->dev.evbit[0]) {
++		goto bail1;
++	}
++
++	ptr->nbtn = HIL_IDD_NUM_BUTTONS(idd);
++	if (ptr->nbtn) ptr->dev.evbit[0] |= BIT(EV_KEY);
++
++	naxsets = HIL_IDD_NUM_AXSETS(*idd);
++	ptr->naxes = HIL_IDD_NUM_AXES_PER_SET(*idd);
++
++	printk(KERN_INFO PREFIX "HIL pointer device found (did: 0x%02x, axis: %s)\n",
++			did, txt);
++	printk(KERN_INFO PREFIX "HIL pointer has %i buttons and %i sets of %i axes\n",
++			ptr->nbtn, naxsets, ptr->naxes);
++	
++	btntype = BTN_MISC;
++	if ((did & HIL_IDD_DID_ABS_TABLET_MASK) == HIL_IDD_DID_ABS_TABLET)
++#ifdef TABLET_SIMULATES_MOUSE
++		btntype = BTN_TOUCH;
++#else
++		btntype = BTN_DIGI;
++#endif
++	if ((did & HIL_IDD_DID_ABS_TSCREEN_MASK) == HIL_IDD_DID_ABS_TSCREEN)
++		btntype = BTN_TOUCH;
++		
++	if ((did & HIL_IDD_DID_REL_MOUSE_MASK) == HIL_IDD_DID_REL_MOUSE)
++		btntype = BTN_MOUSE;
++
++	for (i = 0; i < ptr->nbtn; i++) {
++		set_bit(btntype | i, ptr->dev.keybit);
++		ptr->btnmap[i] = btntype | i;
++	}
++
++	if (btntype == BTN_MOUSE) {
++		/* Swap buttons 2 and 3 */
++		ptr->btnmap[1] = BTN_MIDDLE;
++		ptr->btnmap[2] = BTN_RIGHT;
++	}
++
++	if ((did & HIL_IDD_DID_TYPE_MASK) == HIL_IDD_DID_TYPE_REL) {
++		for (i = 0; i < ptr->naxes; i++) {
++			set_bit(REL_X + i, ptr->dev.relbit);
++		}
++		for (i = 3; (i < ptr->naxes + 3) && (naxsets > 1); i++) {
++			set_bit(REL_X + i, ptr->dev.relbit);
++		}
++	} else {
++		for (i = 0; i < ptr->naxes; i++) {
++	  		set_bit(ABS_X + i, ptr->dev.absbit);
++			ptr->dev.absmin[ABS_X + i] = 0;
++			ptr->dev.absmax[ABS_X + i] = 
++				HIL_IDD_AXIS_MAX((ptr->idd + 1), i);
++		}
++		for (i = 3; (i < ptr->naxes + 3) && (naxsets > 1); i++) {
++			set_bit(ABS_X + i, ptr->dev.absbit);
++			ptr->dev.absmin[ABS_X + i] = 0;
++			ptr->dev.absmax[ABS_X + i] = 
++				HIL_IDD_AXIS_MAX((ptr->idd + 1), (i - 3));
++		}
++#ifdef TABLET_AUTOADJUST
++		for (i = 0; i < ABS_MAX; i++) {
++			int diff = ptr->dev.absmax[ABS_X + i] / 10;
++			ptr->dev.absmin[ABS_X + i] += diff;
++			ptr->dev.absmax[ABS_X + i] -= diff;
++		}
++#endif
++	}
++
++	ptr->dev.name = strlen(ptr->rnm) ? ptr->rnm : HIL_GENERIC_NAME;
++
++	ptr->dev.id.bustype	= BUS_HIL;
++	ptr->dev.id.vendor	= PCI_VENDOR_ID_HP;
++	ptr->dev.id.product	= 0x0001; /* TODO: get from ptr->rsc */
++	ptr->dev.id.version	= 0x0100; /* TODO: get from ptr->rsc */
++	ptr->dev.dev		= &serio->dev;
++
++	input_register_device(&ptr->dev);
++	printk(KERN_INFO "input: %s (%s), ID: %d\n",
++                ptr->dev.name, 
++		(btntype == BTN_MOUSE) ? "HIL mouse":"HIL tablet or touchpad",
++		did);
++
++	return;
++ bail1:
++	serio_close(serio);
++ bail0:
++	kfree(ptr);
++	return;
++}
++
++
++static struct serio_driver hil_ptr_serio_driver = {
++	.driver		= {
++		.name	= "hil_ptr",
++	},
++	.description	= "HP HIL mouse/tablet driver",
++	.connect =	hil_ptr_connect,
++	.disconnect =	hil_ptr_disconnect,
++	.interrupt =	hil_ptr_interrupt
++};
++
++static int __init hil_ptr_init(void)
++{
++	serio_register_driver(&hil_ptr_serio_driver);
++        return 0;
++}
++                
++static void __exit hil_ptr_exit(void)
++{
++	serio_unregister_driver(&hil_ptr_serio_driver);
++}
++                        
++module_init(hil_ptr_init);
++module_exit(hil_ptr_exit);
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/serio/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -48,8 +48,7 @@
+ 
+ config SERIO_CT82C710
+ 	tristate "ct82c710 Aux port controller"
+-	depends on SERIO
+-	depends on !PARISC
++	depends on X86 && SERIO
+ 	---help---
+ 	  Say Y here if you have a Texas Instruments TravelMate notebook
+ 	  equipped with the ct82c710 chip and want to use a mouse connected
+@@ -111,6 +110,32 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called gscps2.
+ 
++config HP_SDC
++	tristate "HP System Device Controller i8042 Support"
++	depends on GSC && SERIO
++	default y
++	---help---
++	  This option enables supports for the the "System Device
++	  Controller", an i8042 carrying microcode to manage a
++	  few miscellanous devices on some Hewlett Packard systems.
++	  The SDC itself contains a 10ms resolution timer/clock capable
++	  of delivering interrupts on a periodic and one-shot basis.
++	  The SDC may also be connected to a battery-backed real-time
++	  clock, a basic audio waveform generator, and an HP-HIL Master
++	  Link Controller serving up to seven input devices.
++
++	  By itself this option is rather useless, but enabling it will
++	  enable selection of drivers for the abovementioned devices.
++	  It is, however, incompatible with the old, reliable HIL keyboard
++	  driver, and the new HIL driver is experimental, so if you plan
++	  to use a HIL keyboard as your primary keyboard, you may wish
++	  to keep using that driver until the new HIL drivers have had
++	  more testing.
++
++config HIL_MLC
++	tristate "HIL MLC Support (needed for HIL input devices)"
++	depends on HP_SDC
++
+ config SERIO_PCIPS2
+ 	tristate "PCI PS/2 keyboard and PS/2 mouse controller"
+ 	depends on PCI && SERIO
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/serio/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -2,8 +2,6 @@
+ # Makefile for the input core drivers.
+ #
+ 
+-# Each configuration option enables a list of files.
+-
+ obj-$(CONFIG_SERIO)		+= serio.o
+ obj-$(CONFIG_SERIO_I8042)	+= i8042.o
+ obj-$(CONFIG_SERIO_PARKBD)	+= parkbd.o
+@@ -15,6 +13,8 @@
+ obj-$(CONFIG_SERIO_Q40KBD)	+= q40kbd.o
+ obj-$(CONFIG_SERIO_98KBD)	+= 98kbd-io.o
+ obj-$(CONFIG_SERIO_GSCPS2)	+= gscps2.o
++obj-$(CONFIG_HP_SDC)		+= hp_sdc.o
++obj-$(CONFIG_HIL_MLC)		+= hp_sdc_mlc.o hil_mlc.o
+ obj-$(CONFIG_SERIO_PCIPS2)	+= pcips2.o
+ obj-$(CONFIG_SERIO_MACEPS2)	+= maceps2.o
+ obj-$(CONFIG_SERIO_RAW)		+= serio_raw.o
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/gscps2.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/input/serio/gscps2.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/gscps2.c	2005-01-21 12:16:45.000000000 -0500
+@@ -38,7 +38,7 @@
+ #include <asm/parisc-device.h>
+ 
+ MODULE_AUTHOR("Laurent Canet <canetl at esiee.fr>, Thibaut Varene <varenet at esiee.fr>, Helge Deller <deller at gmx.de>");
+-MODULE_DESCRIPTION("HP GSC PS/2 port driver");
++MODULE_DESCRIPTION("HP GSC PS2 port driver");
+ MODULE_LICENSE("GPL");
+ MODULE_DEVICE_TABLE(parisc, gscps2_device_tbl);
+ 
+@@ -322,19 +322,6 @@
+ 	gscps2_enable(ps2port, DISABLE);
+ }
+ 
+-static struct serio gscps2_serio_port =
+-{
+-	.name =		"GSC PS/2",
+-	.idbus =	BUS_GSC,
+-	.idvendor =	PCI_VENDOR_ID_HP,
+-	.idproduct =	0x0001,
+-	.idversion =	0x0010,
+-	.type =		SERIO_8042,
+-	.write =	gscps2_write,
+-	.open =		gscps2_open,
+-	.close =	gscps2_close,
+-};
+-
+ /**
+  * gscps2_probe() - Probes PS2 devices
+  * @return: success/error report
+@@ -461,7 +448,7 @@
+ };
+ 
+ static struct parisc_driver parisc_ps2_driver = {
+-	.name		= "GSC PS/2",
++	.name		= "GSC PS2",
+ 	.id_table	= gscps2_device_tbl,
+ 	.probe		= gscps2_probe,
+ 	.remove		= gscps2_remove,
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/hil_mlc.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/hil_mlc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,949 @@
++/*
++ * HIL MLC state machine and serio interface driver
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ *
++ *	Driver theory of operation:
++ *
++ *	Some access methods and an ISR is defined by the sub-driver 
++ *	(e.g. hp_sdc_mlc.c).  These methods are expected to provide a 
++ *	few bits of logic in addition to raw access to the HIL MLC, 
++ *	specifically, the ISR, which is entirely registered by the 
++ *	sub-driver and invoked directly, must check for record 
++ *	termination or packet match, at which point a semaphore must
++ *	be cleared and then the hil_mlcs_tasklet must be scheduled.
++ *
++ *	The hil_mlcs_tasklet processes the state machine for all MLCs
++ *	each time it runs, checking each MLC's progress at the current
++ *	node in the state machine, and moving the MLC to subsequent nodes
++ *	in the state machine when appropriate.  It will reschedule
++ *	itself if output is pending.  (This rescheduling should be replaced
++ *	at some point with a sub-driver-specific mechanism.)
++ *
++ *	A timer task prods the tasklet once per second to prevent 
++ *	hangups when attached devices do not return expected data
++ *	and to initiate probes of the loop for new devices.
++ */
++
++#include <linux/hil_mlc.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/timer.h>
++#include <linux/sched.h>
++#include <linux/list.h>
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION("HIL MLC serio");
++MODULE_LICENSE("Dual BSD/GPL");
++
++EXPORT_SYMBOL(hil_mlc_register);
++EXPORT_SYMBOL(hil_mlc_unregister);
++
++#define PREFIX "HIL MLC: "
++
++static LIST_HEAD(hil_mlcs);
++static rwlock_t			hil_mlcs_lock = RW_LOCK_UNLOCKED;
++static struct timer_list	hil_mlcs_kicker;
++static int			hil_mlcs_probe;
++
++static void hil_mlcs_process(unsigned long unused);
++DECLARE_TASKLET_DISABLED(hil_mlcs_tasklet, hil_mlcs_process, 0);
++
++
++/* #define HIL_MLC_DEBUG */
++
++/********************** Device info/instance management **********************/
++
++static void hil_mlc_clear_di_map (hil_mlc *mlc, int val) {
++	int j;
++	for (j = val; j < 7 ; j++) {
++		mlc->di_map[j] = -1;
++	}
++}
++
++static void hil_mlc_clear_di_scratch (hil_mlc *mlc) {
++	memset(&(mlc->di_scratch), 0, sizeof(mlc->di_scratch));
++}
++
++static void hil_mlc_copy_di_scratch (hil_mlc *mlc, int idx) {
++	memcpy(&(mlc->di[idx]), &(mlc->di_scratch), sizeof(mlc->di_scratch));
++}
++
++static int hil_mlc_match_di_scratch (hil_mlc *mlc) {
++	int idx;
++
++	for (idx = 0; idx < HIL_MLC_DEVMEM; idx++) {
++		int j, found;
++
++		/* In-use slots are not eligible. */
++		found = 0;
++		for (j = 0; j < 7 ; j++) {
++			if (mlc->di_map[j] == idx) found++;
++		}
++		if (found) continue;
++		if (!memcmp(mlc->di + idx, 
++			    &(mlc->di_scratch), 
++			    sizeof(mlc->di_scratch))) break;
++	}
++	return((idx >= HIL_MLC_DEVMEM) ? -1 : idx);
++}
++
++static int hil_mlc_find_free_di(hil_mlc *mlc) {
++	int idx;
++	/* TODO: Pick all-zero slots first, failing that, 
++	 * randomize the slot picked among those eligible. 
++	 */
++	for (idx = 0; idx < HIL_MLC_DEVMEM; idx++) {
++		int j, found;
++		found = 0;
++		for (j = 0; j < 7 ; j++) {
++			if (mlc->di_map[j] == idx) found++;
++		}
++		if (!found) break;
++	}
++	return(idx); /* Note: It is guaranteed at least one above will match */
++}
++
++static inline void hil_mlc_clean_serio_map(hil_mlc *mlc) {
++	int idx;
++	for (idx = 0; idx < HIL_MLC_DEVMEM; idx++) {
++		int j, found;
++		found = 0;
++		for (j = 0; j < 7 ; j++) {
++			if (mlc->di_map[j] == idx) found++;
++		}
++		if (!found) mlc->serio_map[idx].di_revmap = -1;
++	}
++}
++
++static void hil_mlc_send_polls(hil_mlc *mlc) {
++	int did, i, cnt;
++	struct serio *serio;
++	struct serio_driver *drv;
++
++	i = cnt = 0;
++	did = (mlc->ipacket[0] & HIL_PKT_ADDR_MASK) >> 8;
++	serio = did ? mlc->serio[mlc->di_map[did - 1]] : NULL;
++	drv = (serio != NULL) ? serio->drv : NULL;
++
++	while (mlc->icount < 15 - i) {
++		hil_packet p;
++		p = mlc->ipacket[i];
++		if (did != (p & HIL_PKT_ADDR_MASK) >> 8) {
++			if (drv == NULL || drv->interrupt == NULL) goto skip;
++
++			drv->interrupt(serio, 0, 0, NULL);
++			drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL);
++			drv->interrupt(serio, HIL_PKT_CMD >> 8,  0, NULL);
++			drv->interrupt(serio, HIL_CMD_POL + cnt, 0, NULL);
++		skip:
++			did = (p & HIL_PKT_ADDR_MASK) >> 8;
++			serio = did ? mlc->serio[mlc->di_map[did-1]] : NULL;
++			drv = (serio != NULL) ? serio->drv : NULL;
++			cnt = 0;
++		}
++		cnt++; i++;
++		if (drv == NULL || drv->interrupt == NULL) continue;
++		drv->interrupt(serio, (p >> 24), 0, NULL);
++		drv->interrupt(serio, (p >> 16) & 0xff, 0, NULL);
++		drv->interrupt(serio, (p >> 8) & ~HIL_PKT_ADDR_MASK, 0, NULL);
++		drv->interrupt(serio, p & 0xff, 0, NULL);
++	}
++}
++
++/*************************** State engine *********************************/
++
++#define HILSEN_SCHED	0x000100	/* Schedule the tasklet		*/
++#define HILSEN_BREAK	0x000200	/* Wait until next pass		*/
++#define HILSEN_UP	0x000400	/* relative node#, decrement	*/
++#define HILSEN_DOWN	0x000800	/* relative node#, increment	*/
++#define HILSEN_FOLLOW	0x001000	/* use retval as next node#	*/
++
++#define HILSEN_MASK	0x0000ff
++#define HILSEN_START	0
++#define HILSEN_RESTART	1
++#define HILSEN_DHR	9
++#define HILSEN_DHR2	10
++#define HILSEN_IFC	14
++#define HILSEN_HEAL0	16
++#define HILSEN_HEAL	18
++#define HILSEN_ACF      21
++#define HILSEN_ACF2	22
++#define HILSEN_DISC0	25
++#define HILSEN_DISC	27
++#define HILSEN_MATCH	40
++#define HILSEN_OPERATE	41
++#define HILSEN_PROBE	44
++#define HILSEN_DSR	52
++#define HILSEN_REPOLL	55
++#define HILSEN_IFCACF	58
++#define HILSEN_END	60
++
++#define HILSEN_NEXT	(HILSEN_DOWN | 1)
++#define HILSEN_SAME	(HILSEN_DOWN | 0)
++#define HILSEN_LAST	(HILSEN_UP | 1)
++
++#define HILSEN_DOZE	(HILSEN_SAME | HILSEN_SCHED | HILSEN_BREAK)
++#define HILSEN_SLEEP	(HILSEN_SAME | HILSEN_BREAK)
++
++static int hilse_match(hil_mlc *mlc, int unused) {
++	int rc;
++	rc = hil_mlc_match_di_scratch(mlc);
++	if (rc == -1) {
++		rc = hil_mlc_find_free_di(mlc);
++		if (rc == -1) goto err;
++#ifdef HIL_MLC_DEBUG
++		printk(KERN_DEBUG PREFIX "new in slot %i\n", rc);
++#endif
++		hil_mlc_copy_di_scratch(mlc, rc);
++		mlc->di_map[mlc->ddi] = rc;
++		mlc->serio_map[rc].di_revmap = mlc->ddi;
++		hil_mlc_clean_serio_map(mlc);
++		serio_rescan(mlc->serio[rc]);
++		return -1;
++	}
++	mlc->di_map[mlc->ddi] = rc;
++#ifdef HIL_MLC_DEBUG
++	printk(KERN_DEBUG PREFIX "same in slot %i\n", rc);
++#endif
++	mlc->serio_map[rc].di_revmap = mlc->ddi;
++	hil_mlc_clean_serio_map(mlc);
++	return 0;
++ err:
++	printk(KERN_ERR PREFIX "Residual device slots exhausted, close some serios!\n");
++	return 1;
++}
++
++/* An LCV used to prevent runaway loops, forces 5 second sleep when reset. */
++static int hilse_init_lcv(hil_mlc *mlc, int unused) {
++	struct timeval tv;
++
++	do_gettimeofday(&tv);
++
++	if(mlc->lcv == 0) goto restart;  /* First init, no need to dally */
++	if(tv.tv_sec - mlc->lcv_tv.tv_sec < 5) return -1;
++ restart:
++	mlc->lcv_tv = tv;
++	mlc->lcv = 0;
++	return 0;
++}
++
++static int hilse_inc_lcv(hil_mlc *mlc, int lim) {
++	if (mlc->lcv++ >= lim) return -1;
++	return 0;
++}
++
++#if 0
++static int hilse_set_lcv(hil_mlc *mlc, int val) {
++	mlc->lcv = val;
++	return 0;
++}
++#endif
++
++/* Management of the discovered device index (zero based, -1 means no devs) */
++static int hilse_set_ddi(hil_mlc *mlc, int val) {
++	mlc->ddi = val;
++	hil_mlc_clear_di_map(mlc, val + 1);
++	return 0;
++}
++
++static int hilse_dec_ddi(hil_mlc *mlc, int unused) {
++	mlc->ddi--;
++	if (mlc->ddi <= -1) { 
++		mlc->ddi = -1;
++		hil_mlc_clear_di_map(mlc, 0);
++		return -1;
++	}
++	hil_mlc_clear_di_map(mlc, mlc->ddi + 1);
++	return 0;
++}
++
++static int hilse_inc_ddi(hil_mlc *mlc, int unused) {
++	if (mlc->ddi >= 6) {
++		BUG();
++		return -1;
++	}
++	mlc->ddi++;
++	return 0;
++}
++
++static int hilse_take_idd(hil_mlc *mlc, int unused) {
++	int i;
++
++	/* Help the state engine: 
++	 * Is this a real IDD response or just an echo? 
++	 *
++	 * Real IDD response does not start with a command. 
++	 */
++	if (mlc->ipacket[0] & HIL_PKT_CMD) goto bail;
++	/* Should have the command echoed further down. */
++	for (i = 1; i < 16; i++) {
++		if (((mlc->ipacket[i] & HIL_PKT_ADDR_MASK) == 
++		     (mlc->ipacket[0] & HIL_PKT_ADDR_MASK)) &&
++		    (mlc->ipacket[i] & HIL_PKT_CMD) && 
++		    ((mlc->ipacket[i] & HIL_PKT_DATA_MASK) == HIL_CMD_IDD))
++			break;
++	}
++	if (i > 15) goto bail;
++	/* And the rest of the packets should still be clear. */
++	while (++i < 16) {
++		if (mlc->ipacket[i]) break;
++	}
++	if (i < 16) goto bail;
++	for (i = 0; i < 16; i++) {
++		mlc->di_scratch.idd[i] = 
++			mlc->ipacket[i] & HIL_PKT_DATA_MASK;
++	}
++	/* Next step is to see if RSC supported */
++	if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_RSC) 
++		return HILSEN_NEXT;
++	if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_EXD) 
++		return HILSEN_DOWN | 4;
++	return 0;
++ bail:
++	mlc->ddi--;
++	return -1; /* This should send us off to ACF */
++}
++
++static int hilse_take_rsc(hil_mlc *mlc, int unused) {
++	int i;
++
++	for (i = 0; i < 16; i++) {
++		mlc->di_scratch.rsc[i] = 
++			mlc->ipacket[i] & HIL_PKT_DATA_MASK;
++	}
++	/* Next step is to see if EXD supported (IDD has already been read) */
++	if (mlc->di_scratch.idd[1] & HIL_IDD_HEADER_EXD) 
++		return HILSEN_NEXT;
++	return 0;
++}
++
++static int hilse_take_exd(hil_mlc *mlc, int unused) {
++	int i;
++
++	for (i = 0; i < 16; i++) {
++		mlc->di_scratch.exd[i] = 
++			mlc->ipacket[i] & HIL_PKT_DATA_MASK;
++	}
++	/* Next step is to see if RNM supported. */
++	if (mlc->di_scratch.exd[0] & HIL_EXD_HEADER_RNM) 
++		return HILSEN_NEXT;
++	return 0;
++}
++
++static int hilse_take_rnm(hil_mlc *mlc, int unused) {
++	int i;
++
++	for (i = 0; i < 16; i++) {
++		mlc->di_scratch.rnm[i] = 
++			mlc->ipacket[i] & HIL_PKT_DATA_MASK;
++	}
++	do {
++	  char nam[17];
++	  snprintf(nam, 16, "%s", mlc->di_scratch.rnm);
++	  nam[16] = '\0';
++	  printk(KERN_INFO PREFIX "Device name gotten: %s\n", nam);
++	} while (0);
++	return 0;
++}
++
++static int hilse_operate(hil_mlc *mlc, int repoll) { 
++
++	if (mlc->opercnt == 0) hil_mlcs_probe = 0;
++	mlc->opercnt = 1;
++
++	hil_mlc_send_polls(mlc);
++
++	if (!hil_mlcs_probe) return 0;
++	hil_mlcs_probe = 0;
++	mlc->opercnt = 0;
++	return 1;
++}
++
++#define FUNC(funct, funct_arg, zero_rc, neg_rc, pos_rc) \
++{ HILSE_FUNC,		{ func: &funct }, funct_arg, zero_rc, neg_rc, pos_rc },
++#define OUT(pack) \
++{ HILSE_OUT,		{ packet: pack }, 0, HILSEN_NEXT, HILSEN_DOZE, 0 },
++#define CTS \
++{ HILSE_CTS,		{ packet: 0    }, 0, HILSEN_NEXT | HILSEN_SCHED | HILSEN_BREAK, HILSEN_DOZE, 0 },
++#define EXPECT(comp, to, got, got_wrong, timed_out) \
++{ HILSE_EXPECT,		{ packet: comp }, to, got, got_wrong, timed_out },
++#define EXPECT_LAST(comp, to, got, got_wrong, timed_out) \
++{ HILSE_EXPECT_LAST,	{ packet: comp }, to, got, got_wrong, timed_out },
++#define EXPECT_DISC(comp, to, got, got_wrong, timed_out) \
++{ HILSE_EXPECT_DISC,	{ packet: comp }, to, got, got_wrong, timed_out },
++#define IN(to, got, got_error, timed_out) \
++{ HILSE_IN,		{ packet: 0    }, to, got, got_error, timed_out },
++#define OUT_DISC(pack) \
++{ HILSE_OUT_DISC,	{ packet: pack }, 0, 0, 0, 0 },
++#define OUT_LAST(pack) \
++{ HILSE_OUT_LAST,	{ packet: pack }, 0, 0, 0, 0 },
++
++struct hilse_node hil_mlc_se[HILSEN_END] = {
++
++	/* 0  HILSEN_START */
++	FUNC(hilse_init_lcv, 0,	HILSEN_NEXT,	HILSEN_SLEEP,	0)
++
++	/* 1  HILSEN_RESTART */
++	FUNC(hilse_inc_lcv, 10,	HILSEN_NEXT,	HILSEN_START,  0)
++	OUT(HIL_CTRL_ONLY)			/* Disable APE */
++	CTS
++
++#define TEST_PACKET(x) \
++(HIL_PKT_CMD | (x << HIL_PKT_ADDR_SHIFT) | x << 4 | x)
++
++	OUT(HIL_DO_ALTER_CTRL | HIL_CTRL_TEST | TEST_PACKET(0x5))
++	EXPECT(HIL_ERR_INT | TEST_PACKET(0x5),
++	       2000,		HILSEN_NEXT,	HILSEN_RESTART,	HILSEN_RESTART)
++	OUT(HIL_DO_ALTER_CTRL | HIL_CTRL_TEST | TEST_PACKET(0xa))
++	EXPECT(HIL_ERR_INT | TEST_PACKET(0xa),
++	       2000,		HILSEN_NEXT,	HILSEN_RESTART,	HILSEN_RESTART)
++	OUT(HIL_CTRL_ONLY | 0)			/* Disable test mode */
++	
++	/* 9  HILSEN_DHR */
++	FUNC(hilse_init_lcv, 0,	HILSEN_NEXT,	HILSEN_SLEEP,	0)
++
++	/* 10 HILSEN_DHR2 */
++	FUNC(hilse_inc_lcv, 10,	HILSEN_NEXT,	HILSEN_START,	0)
++	FUNC(hilse_set_ddi, -1,	HILSEN_NEXT,	0,		0)
++	OUT(HIL_PKT_CMD | HIL_CMD_DHR)
++	IN(300000,		HILSEN_DHR2,	HILSEN_DHR2,	HILSEN_NEXT)
++
++	/* 14 HILSEN_IFC */
++  	OUT(HIL_PKT_CMD | HIL_CMD_IFC)
++	EXPECT(HIL_PKT_CMD | HIL_CMD_IFC | HIL_ERR_INT,
++	       20000,		HILSEN_DISC,	HILSEN_DHR2,	HILSEN_NEXT )
++
++	/* If devices are there, they weren't in PUP or other loopback mode.
++	 * We're more concerned at this point with restoring operation
++	 * to devices than discovering new ones, so we try to salvage
++	 * the loop configuration by closing off the loop.
++	 */
++
++	/* 16 HILSEN_HEAL0 */
++	FUNC(hilse_dec_ddi, 0,	HILSEN_NEXT,	HILSEN_ACF,	0)
++	FUNC(hilse_inc_ddi, 0,	HILSEN_NEXT,	0,		0)
++
++	/* 18 HILSEN_HEAL */
++	OUT_LAST(HIL_CMD_ELB)
++	EXPECT_LAST(HIL_CMD_ELB | HIL_ERR_INT, 
++		    20000,	HILSEN_REPOLL,	HILSEN_DSR,	HILSEN_NEXT)
++	FUNC(hilse_dec_ddi, 0,	HILSEN_HEAL,	HILSEN_NEXT,	0)
++
++	/* 21 HILSEN_ACF */
++	FUNC(hilse_init_lcv, 0,	HILSEN_NEXT,	HILSEN_DOZE,	0)
++
++	/* 22 HILSEN_ACF2 */
++	FUNC(hilse_inc_lcv, 10,	HILSEN_NEXT,	HILSEN_START,	0)
++	OUT(HIL_PKT_CMD | HIL_CMD_ACF | 1)
++	IN(20000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_NEXT)
++
++	/* 25 HILSEN_DISC0 */
++	OUT_DISC(HIL_PKT_CMD | HIL_CMD_ELB)
++	EXPECT_DISC(HIL_PKT_CMD | HIL_CMD_ELB | HIL_ERR_INT,
++	       20000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_DSR)
++
++	/* Only enter here if response just received */
++	/* 27 HILSEN_DISC */
++	OUT_DISC(HIL_PKT_CMD | HIL_CMD_IDD)
++	EXPECT_DISC(HIL_PKT_CMD | HIL_CMD_IDD | HIL_ERR_INT,
++	       20000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_START)
++	FUNC(hilse_inc_ddi,  0,	HILSEN_NEXT,	HILSEN_START,	0)
++	FUNC(hilse_take_idd, 0,	HILSEN_MATCH,	HILSEN_IFCACF,	HILSEN_FOLLOW)
++	OUT_LAST(HIL_PKT_CMD | HIL_CMD_RSC)
++	EXPECT_LAST(HIL_PKT_CMD | HIL_CMD_RSC | HIL_ERR_INT,
++	       30000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_DSR)
++	FUNC(hilse_take_rsc, 0,	HILSEN_MATCH,	0,		HILSEN_FOLLOW)
++	OUT_LAST(HIL_PKT_CMD | HIL_CMD_EXD)
++	EXPECT_LAST(HIL_PKT_CMD | HIL_CMD_EXD | HIL_ERR_INT,
++	       30000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_DSR)
++	FUNC(hilse_take_exd, 0,	HILSEN_MATCH,	0,		HILSEN_FOLLOW)
++	OUT_LAST(HIL_PKT_CMD | HIL_CMD_RNM)
++	EXPECT_LAST(HIL_PKT_CMD | HIL_CMD_RNM | HIL_ERR_INT,
++	       30000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_DSR)
++	FUNC(hilse_take_rnm, 0, HILSEN_MATCH,	0,		0)
++
++	/* 40 HILSEN_MATCH */
++	FUNC(hilse_match, 0,	HILSEN_NEXT,	HILSEN_NEXT,	/* TODO */ 0)
++
++	/* 41 HILSEN_OPERATE */
++	OUT(HIL_PKT_CMD | HIL_CMD_POL)
++	EXPECT(HIL_PKT_CMD | HIL_CMD_POL | HIL_ERR_INT,
++	       20000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_NEXT)
++	FUNC(hilse_operate, 0,	HILSEN_OPERATE,	HILSEN_IFC,	HILSEN_NEXT)
++
++	/* 44 HILSEN_PROBE */
++	OUT_LAST(HIL_PKT_CMD | HIL_CMD_EPT)
++	IN(10000, 		HILSEN_DISC,	HILSEN_DSR,	HILSEN_NEXT)
++	OUT_DISC(HIL_PKT_CMD | HIL_CMD_ELB)
++	IN(10000,		HILSEN_DISC,	HILSEN_DSR,	HILSEN_NEXT)
++	OUT(HIL_PKT_CMD | HIL_CMD_ACF | 1)
++	IN(10000,		HILSEN_DISC0,	HILSEN_DSR,	HILSEN_NEXT)
++	OUT_LAST(HIL_PKT_CMD | HIL_CMD_ELB)
++	IN(10000,		HILSEN_OPERATE,	HILSEN_DSR,	HILSEN_DSR)
++
++	/* 52 HILSEN_DSR */
++	FUNC(hilse_set_ddi, -1,	HILSEN_NEXT,	0,		0)
++	OUT(HIL_PKT_CMD | HIL_CMD_DSR)
++	IN(20000, 		HILSEN_DHR,	HILSEN_DHR,	HILSEN_IFC)
++
++	/* 55 HILSEN_REPOLL */
++	OUT(HIL_PKT_CMD | HIL_CMD_RPL)
++	EXPECT(HIL_PKT_CMD | HIL_CMD_RPL | HIL_ERR_INT,
++	       20000,		HILSEN_NEXT,	HILSEN_DSR,	HILSEN_NEXT)
++	FUNC(hilse_operate, 1,	HILSEN_OPERATE,	HILSEN_IFC,	HILSEN_PROBE)
++
++	/* 58 HILSEN_IFCACF */
++  	OUT(HIL_PKT_CMD | HIL_CMD_IFC)
++	EXPECT(HIL_PKT_CMD | HIL_CMD_IFC | HIL_ERR_INT,
++	       20000,		HILSEN_ACF2,	HILSEN_DHR2,	HILSEN_HEAL)
++
++	/* 60 HILSEN_END */
++};
++
++static inline void hilse_setup_input(hil_mlc *mlc, struct hilse_node *node) {
++
++	switch (node->act) {
++	case HILSE_EXPECT_DISC:
++		mlc->imatch = node->object.packet;
++		mlc->imatch |= ((mlc->ddi + 2) << HIL_PKT_ADDR_SHIFT);
++		break;
++	case HILSE_EXPECT_LAST:
++		mlc->imatch = node->object.packet;
++		mlc->imatch |= ((mlc->ddi + 1) << HIL_PKT_ADDR_SHIFT);
++		break;
++	case HILSE_EXPECT:
++		mlc->imatch = node->object.packet;
++		break;
++	case HILSE_IN:
++		mlc->imatch = 0;
++		break;
++	default:
++		BUG();
++	}
++	mlc->istarted = 1;
++	mlc->intimeout = node->arg;
++	do_gettimeofday(&(mlc->instart));
++	mlc->icount = 15;
++	memset(mlc->ipacket, 0, 16 * sizeof(hil_packet));
++	if (down_trylock(&(mlc->isem))) BUG();
++
++	return;
++}
++
++#ifdef HIL_MLC_DEBUG
++static int doze = 0;
++static int seidx; /* For debug */
++static int kick = 1;
++#endif
++
++static int hilse_donode (hil_mlc *mlc) {
++	struct hilse_node *node;
++	int nextidx = 0;
++	int sched_long = 0;
++	unsigned long flags;
++
++#ifdef HIL_MLC_DEBUG
++	if (mlc->seidx && (mlc->seidx != seidx)  && mlc->seidx != 41 && mlc->seidx != 42 && mlc->seidx != 43) {
++	  printk(KERN_DEBUG PREFIX "z%i \n%s {%i}", doze, kick ? "K" : "", mlc->seidx);
++		doze = 0;
++	}
++	kick = 0;
++
++	seidx = mlc->seidx;
++#endif
++	node = hil_mlc_se + mlc->seidx;
++
++	switch (node->act) {
++		int rc;
++		hil_packet pack;
++
++	case HILSE_FUNC:
++		if (node->object.func == NULL) break;
++		rc = node->object.func(mlc, node->arg);
++		nextidx = (rc > 0) ? node->ugly : 
++			((rc < 0) ? node->bad : node->good);
++		if (nextidx == HILSEN_FOLLOW) nextidx = rc;
++		break;
++	case HILSE_EXPECT_LAST:
++	case HILSE_EXPECT_DISC:
++	case HILSE_EXPECT:
++	case HILSE_IN:
++		/* Already set up from previous HILSE_OUT_* */
++		write_lock_irqsave(&(mlc->lock), flags);
++		rc = mlc->in(mlc, node->arg);
++		if (rc == 2)  {
++			nextidx = HILSEN_DOZE;
++			sched_long = 1;
++			write_unlock_irqrestore(&(mlc->lock), flags);
++			break;
++		}
++		if (rc == 1)		nextidx = node->ugly;
++		else if (rc == 0)	nextidx = node->good;
++		else			nextidx = node->bad;
++		mlc->istarted = 0;
++		write_unlock_irqrestore(&(mlc->lock), flags);
++		break;
++	case HILSE_OUT_LAST:
++		write_lock_irqsave(&(mlc->lock), flags);
++		pack = node->object.packet;
++		pack |= ((mlc->ddi + 1) << HIL_PKT_ADDR_SHIFT);
++		goto out;
++	case HILSE_OUT_DISC:
++		write_lock_irqsave(&(mlc->lock), flags);
++		pack = node->object.packet;
++		pack |= ((mlc->ddi + 2) << HIL_PKT_ADDR_SHIFT);
++		goto out;
++	case HILSE_OUT:
++		write_lock_irqsave(&(mlc->lock), flags);
++		pack = node->object.packet;
++	out:
++		if (mlc->istarted) goto out2;
++		/* Prepare to receive input */
++		if ((node + 1)->act & HILSE_IN)
++			hilse_setup_input(mlc, node + 1);
++
++	out2:
++		write_unlock_irqrestore(&(mlc->lock), flags);
++
++		if (down_trylock(&mlc->osem)) {
++			nextidx = HILSEN_DOZE;
++			break;
++		}
++		up(&mlc->osem);
++
++		write_lock_irqsave(&(mlc->lock), flags);
++		if (!(mlc->ostarted)) {
++			mlc->ostarted = 1;
++			mlc->opacket = pack;
++			mlc->out(mlc);
++			nextidx = HILSEN_DOZE;
++			write_unlock_irqrestore(&(mlc->lock), flags);
++			break;
++		}
++		mlc->ostarted = 0;
++		do_gettimeofday(&(mlc->instart));
++		write_unlock_irqrestore(&(mlc->lock), flags);
++		nextidx = HILSEN_NEXT;
++		break;
++	case HILSE_CTS:
++		nextidx = mlc->cts(mlc) ? node->bad : node->good;
++		break;
++	default:
++		BUG();
++		nextidx = 0;
++		break;
++	}
++
++#ifdef HIL_MLC_DEBUG
++	if (nextidx == HILSEN_DOZE) doze++;
++#endif
++
++	while (nextidx & HILSEN_SCHED) {
++		struct timeval tv;
++
++		if (!sched_long) goto sched;
++
++		do_gettimeofday(&tv);
++		tv.tv_usec += 1000000 * (tv.tv_sec - mlc->instart.tv_sec);
++		tv.tv_usec -= mlc->instart.tv_usec;
++		if (tv.tv_usec >= mlc->intimeout) goto sched;
++		tv.tv_usec = (mlc->intimeout - tv.tv_usec) * HZ / 1000000;
++		if (!tv.tv_usec) goto sched;
++		mod_timer(&hil_mlcs_kicker, jiffies + tv.tv_usec);
++		break;
++	sched:
++		tasklet_schedule(&hil_mlcs_tasklet);
++		break;
++	} 
++	if (nextidx & HILSEN_DOWN) mlc->seidx += nextidx & HILSEN_MASK;
++	else if (nextidx & HILSEN_UP) mlc->seidx -= nextidx & HILSEN_MASK;
++	else mlc->seidx = nextidx & HILSEN_MASK;
++
++	if (nextidx & HILSEN_BREAK)	return 1;
++	return 0;
++}
++
++/******************** tasklet context functions **************************/
++static void hil_mlcs_process(unsigned long unused) {
++	struct list_head *tmp;
++
++	read_lock(&hil_mlcs_lock);
++	list_for_each(tmp, &hil_mlcs) {
++		struct hil_mlc *mlc = list_entry(tmp, hil_mlc, list);
++		while (hilse_donode(mlc) == 0) {
++#ifdef HIL_MLC_DEBUG
++		  if (mlc->seidx != 41 && 
++		      mlc->seidx != 42 && 
++		      mlc->seidx != 43) 
++		    printk(KERN_DEBUG PREFIX " + ");
++#endif
++		};
++	}
++	read_unlock(&hil_mlcs_lock);
++}
++
++/************************* Keepalive timer task *********************/
++
++void hil_mlcs_timer (unsigned long data) {
++	hil_mlcs_probe = 1;
++	tasklet_schedule(&hil_mlcs_tasklet);
++	/* Re-insert the periodic task. */
++	if (!timer_pending(&hil_mlcs_kicker))
++		mod_timer(&hil_mlcs_kicker, jiffies + HZ);
++}
++
++/******************** user/kernel context functions **********************/
++
++static int hil_mlc_serio_write(struct serio *serio, unsigned char c) {
++	struct hil_mlc_serio_map *map;
++	struct hil_mlc *mlc;
++	struct serio_driver *drv;
++	uint8_t *idx, *last;
++
++	map = serio->port_data;
++	if (map == NULL) {
++		BUG();
++		return -EIO;
++	}
++	mlc = map->mlc;
++	if (mlc == NULL) {
++		BUG();
++		return -EIO;
++	}
++	mlc->serio_opacket[map->didx] |= 
++		((hil_packet)c) << (8 * (3 - mlc->serio_oidx[map->didx]));
++
++	if (mlc->serio_oidx[map->didx] >= 3) {
++		/* for now only commands */
++		if (!(mlc->serio_opacket[map->didx] & HIL_PKT_CMD)) 
++			return -EIO;
++		switch (mlc->serio_opacket[map->didx] & HIL_PKT_DATA_MASK) {
++		case HIL_CMD_IDD:
++			idx = mlc->di[map->didx].idd;
++			goto emu;
++		case HIL_CMD_RSC:
++			idx = mlc->di[map->didx].rsc;
++			goto emu;
++		case HIL_CMD_EXD:
++			idx = mlc->di[map->didx].exd;
++			goto emu;
++		case HIL_CMD_RNM:
++			idx = mlc->di[map->didx].rnm;
++			goto emu;
++		default:
++			break;
++		}
++		mlc->serio_oidx[map->didx] = 0;
++		mlc->serio_opacket[map->didx] = 0;
++	}
++
++	mlc->serio_oidx[map->didx]++;
++	return -EIO;
++ emu:
++	drv = serio->drv;
++	if (drv == NULL) {
++		BUG();
++		return -EIO;
++	}
++	last = idx + 15;
++	while ((last != idx) && (*last == 0)) last--;
++
++	while (idx != last) {
++		drv->interrupt(serio, 0, 0, NULL);
++		drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL);
++		drv->interrupt(serio, 0, 0, NULL);
++		drv->interrupt(serio, *idx, 0, NULL);
++		idx++;
++	}
++	drv->interrupt(serio, 0, 0, NULL);
++	drv->interrupt(serio, HIL_ERR_INT >> 16, 0, NULL);
++	drv->interrupt(serio, HIL_PKT_CMD >> 8, 0, NULL);
++	drv->interrupt(serio, *idx, 0, NULL);
++	
++	mlc->serio_oidx[map->didx] = 0;
++	mlc->serio_opacket[map->didx] = 0;
++
++	return 0;
++}
++
++static int hil_mlc_serio_open(struct serio *serio) {
++	struct hil_mlc_serio_map *map;
++	struct hil_mlc *mlc;
++
++	if (serio->private != NULL) return -EBUSY;
++
++	map = serio->port_data;
++	if (map == NULL) {
++		BUG();
++		return -ENODEV;
++	}
++	mlc = map->mlc;
++	if (mlc == NULL) {
++		BUG();
++		return -ENODEV;
++	}
++
++	return 0;
++}
++
++static void hil_mlc_serio_close(struct serio *serio) {
++	struct hil_mlc_serio_map *map;
++	struct hil_mlc *mlc;
++
++	map = serio->port_data;
++	if (map == NULL) {
++		BUG();
++		return;
++	}
++	mlc = map->mlc;
++	if (mlc == NULL) {
++		BUG();
++		return;
++	}
++
++	serio->private = NULL;
++	serio->drv = NULL;
++	/* TODO wake up interruptable */
++}
++
++int hil_mlc_register(hil_mlc *mlc) {
++	int i;
++        unsigned long flags;
++
++	if (mlc == NULL) {
++		return -EINVAL;
++	}
++
++	mlc->istarted = 0;
++        mlc->ostarted = 0;
++
++        mlc->lock = RW_LOCK_UNLOCKED;
++        init_MUTEX(&(mlc->osem));
++
++        init_MUTEX(&(mlc->isem));
++        mlc->icount = -1;
++        mlc->imatch = 0;
++
++	mlc->opercnt = 0;
++
++        init_MUTEX_LOCKED(&(mlc->csem));
++
++	hil_mlc_clear_di_scratch(mlc);
++	hil_mlc_clear_di_map(mlc, 0);
++	for (i = 0; i < HIL_MLC_DEVMEM; i++) {
++		struct serio *mlc_serio;
++		hil_mlc_copy_di_scratch(mlc, i);
++		mlc_serio = kmalloc(sizeof(*mlc_serio), GFP_KERNEL);
++		mlc->serio[i] = mlc_serio;
++		memset(mlc_serio, 0, sizeof(*mlc_serio));
++		mlc_serio->type			= SERIO_HIL | SERIO_HIL_MLC;
++		mlc_serio->write		= hil_mlc_serio_write;
++		mlc_serio->open			= hil_mlc_serio_open;
++		mlc_serio->close		= hil_mlc_serio_close;
++		mlc_serio->port_data		= &(mlc->serio_map[i]);
++		mlc->serio_map[i].mlc		= mlc;
++		mlc->serio_map[i].didx		= i;
++		mlc->serio_map[i].di_revmap	= -1;
++		mlc->serio_opacket[i]		= 0;
++		mlc->serio_oidx[i]		= 0;
++		serio_register_port(mlc_serio);
++	}
++
++	mlc->tasklet = &hil_mlcs_tasklet;
++
++	write_lock_irqsave(&hil_mlcs_lock, flags);
++	list_add_tail(&mlc->list, &hil_mlcs);
++	mlc->seidx = HILSEN_START;
++	write_unlock_irqrestore(&hil_mlcs_lock, flags);
++
++	tasklet_schedule(&hil_mlcs_tasklet);
++	return 0;
++}
++
++int hil_mlc_unregister(hil_mlc *mlc) {
++	struct list_head *tmp;
++        unsigned long flags;
++	int i;
++
++	if (mlc == NULL)
++		return -EINVAL;
++
++	write_lock_irqsave(&hil_mlcs_lock, flags);
++	list_for_each(tmp, &hil_mlcs) {
++		if (list_entry(tmp, hil_mlc, list) == mlc)
++			goto found;
++	}
++
++	/* not found in list */
++	write_unlock_irqrestore(&hil_mlcs_lock, flags);
++	tasklet_schedule(&hil_mlcs_tasklet);
++	return -ENODEV;
++
++ found:
++	list_del(tmp);
++        write_unlock_irqrestore(&hil_mlcs_lock, flags);
++
++	for (i = 0; i < HIL_MLC_DEVMEM; i++) {
++		serio_unregister_port(mlc->serio[i]);
++		mlc->serio[i] = NULL;
++	}
++
++	tasklet_schedule(&hil_mlcs_tasklet);
++	return 0;
++}
++
++/**************************** Module interface *************************/
++
++static int __init hil_mlc_init(void)
++{
++	init_timer(&hil_mlcs_kicker);
++	hil_mlcs_kicker.expires = jiffies + HZ;
++	hil_mlcs_kicker.function = &hil_mlcs_timer;
++	add_timer(&hil_mlcs_kicker);
++
++	tasklet_enable(&hil_mlcs_tasklet);
++
++	return 0;
++}
++                
++static void __exit hil_mlc_exit(void)
++{
++	del_timer(&hil_mlcs_kicker);
++
++	tasklet_disable(&hil_mlcs_tasklet);
++	tasklet_kill(&hil_mlcs_tasklet);
++}
++                        
++module_init(hil_mlc_init);
++module_exit(hil_mlc_exit);
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/hp_sdc.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/hp_sdc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,1055 @@
++/*
++ * HP i8042-based System Device Controller driver.
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * System Device Controller Microprocessor Firmware Theory of Operation
++ *      for Part Number 1820-4784 Revision B.  Dwg No. A-1820-4784-2
++ * Helge Deller's original hilkbd.c port for PA-RISC.
++ *
++ *
++ * Driver theory of operation:
++ *
++ * hp_sdc_put does all writing to the SDC.  ISR can run on a different 
++ * CPU than hp_sdc_put, but only one CPU runs hp_sdc_put at a time 
++ * (it cannot really benefit from SMP anyway.)  A tasket fit this perfectly.
++ *
++ * All data coming back from the SDC is sent via interrupt and can be read 
++ * fully in the ISR, so there are no latency/throughput problems there.  
++ * The problem is with output, due to the slow clock speed of the SDC 
++ * compared to the CPU.  This should not be too horrible most of the time, 
++ * but if used with HIL devices that support the multibyte transfer command, 
++ * keeping outbound throughput flowing at the 6500KBps that the HIL is 
++ * capable of is more than can be done at HZ=100.
++ *
++ * Busy polling for IBF clear wastes CPU cycles and bus cycles.  hp_sdc.ibf 
++ * is set to 0 when the IBF flag in the status register has cleared.  ISR 
++ * may do this, and may also access the parts of queued transactions related 
++ * to reading data back from the SDC, but otherwise will not touch the 
++ * hp_sdc state. Whenever a register is written hp_sdc.ibf is set to 1.
++ *
++ * The i8042 write index and the values in the 4-byte input buffer
++ * starting at 0x70 are kept track of in hp_sdc.wi, and .r7[], respectively,
++ * to minimize the amount of IO needed to the SDC.  However these values 
++ * do not need to be locked since they are only ever accessed by hp_sdc_put.
++ *
++ * A timer task schedules the tasklet once per second just to make
++ * sure it doesn't freeze up and to allow for bad reads to time out.
++ */
++
++#include <linux/hp_sdc.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/ioport.h>
++#include <linux/time.h>
++#include <linux/slab.h>
++#include <linux/hil.h>
++#include <asm/io.h>
++#include <asm/system.h>
++
++/* Machine-specific abstraction */
++
++#if defined(__hppa__)
++# include <asm/parisc-device.h>
++# define sdc_readb(p)		gsc_readb(p)
++# define sdc_writeb(v,p)	gsc_writeb((v),(p))
++#elif defined(__mc68000__)
++# include <asm/uaccess.h>
++# define sdc_readb(p)		in_8(p)
++# define sdc_writeb(v,p)	out_8((p),(v))
++#else
++# error "HIL is not supported on this platform"
++#endif
++
++#define PREFIX "HP SDC: "
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION("HP i8042-based SDC Driver");
++MODULE_LICENSE("Dual BSD/GPL");
++
++EXPORT_SYMBOL(hp_sdc_request_timer_irq);
++EXPORT_SYMBOL(hp_sdc_request_hil_irq);
++EXPORT_SYMBOL(hp_sdc_request_cooked_irq);
++
++EXPORT_SYMBOL(hp_sdc_release_timer_irq);
++EXPORT_SYMBOL(hp_sdc_release_hil_irq);
++EXPORT_SYMBOL(hp_sdc_release_cooked_irq);
++
++EXPORT_SYMBOL(hp_sdc_enqueue_transaction);
++EXPORT_SYMBOL(hp_sdc_dequeue_transaction);
++
++static hp_i8042_sdc	hp_sdc;	/* All driver state is kept in here. */
++
++/*************** primitives for use in any context *********************/
++static inline uint8_t hp_sdc_status_in8 (void) {
++	uint8_t status;
++	unsigned long flags;
++
++	write_lock_irqsave(&hp_sdc.ibf_lock, flags);
++	status = sdc_readb(hp_sdc.status_io);
++	if (!(status & HP_SDC_STATUS_IBF)) hp_sdc.ibf = 0;
++	write_unlock_irqrestore(&hp_sdc.ibf_lock, flags);
++
++	return status;
++}
++
++static inline uint8_t hp_sdc_data_in8 (void) {
++	return sdc_readb(hp_sdc.data_io); 
++}
++
++static inline void hp_sdc_status_out8 (uint8_t val) {
++	unsigned long flags;
++
++	write_lock_irqsave(&hp_sdc.ibf_lock, flags);
++	hp_sdc.ibf = 1;
++	if ((val & 0xf0) == 0xe0) hp_sdc.wi = 0xff;
++	sdc_writeb(val, hp_sdc.status_io);
++	write_unlock_irqrestore(&hp_sdc.ibf_lock, flags);
++}
++
++static inline void hp_sdc_data_out8 (uint8_t val) {
++	unsigned long flags;
++
++	write_lock_irqsave(&hp_sdc.ibf_lock, flags);
++	hp_sdc.ibf = 1;
++	sdc_writeb(val, hp_sdc.data_io);
++	write_unlock_irqrestore(&hp_sdc.ibf_lock, flags);
++}
++
++/*	Care must be taken to only invoke hp_sdc_spin_ibf when 
++ *	absolutely needed, or in rarely invoked subroutines.  
++ *	Not only does it waste CPU cycles, it also wastes bus cycles. 
++ */
++static inline void hp_sdc_spin_ibf(void) {
++	unsigned long flags;
++	rwlock_t *lock;
++
++	lock = &hp_sdc.ibf_lock;
++
++	read_lock_irqsave(lock, flags);
++	if (!hp_sdc.ibf) {
++		read_unlock_irqrestore(lock, flags);
++		return;
++	}
++	read_unlock(lock);
++	write_lock(lock);
++	while (sdc_readb(hp_sdc.status_io) & HP_SDC_STATUS_IBF) {};
++	hp_sdc.ibf = 0;
++	write_unlock_irqrestore(lock, flags);
++}
++
++
++/************************ Interrupt context functions ************************/
++static void hp_sdc_take (int irq, void *dev_id, uint8_t status, uint8_t data) {
++	hp_sdc_transaction *curr;
++
++	read_lock(&hp_sdc.rtq_lock);
++	if (hp_sdc.rcurr < 0) {
++	  	read_unlock(&hp_sdc.rtq_lock);
++		return;
++	}
++	curr = hp_sdc.tq[hp_sdc.rcurr];
++	read_unlock(&hp_sdc.rtq_lock);
++
++	curr->seq[curr->idx++] = status;
++	curr->seq[curr->idx++] = data;
++	hp_sdc.rqty -= 2;
++	do_gettimeofday(&hp_sdc.rtv);
++
++	if (hp_sdc.rqty <= 0) {
++		/* All data has been gathered. */
++		if(curr->seq[curr->actidx] & HP_SDC_ACT_SEMAPHORE) {
++			if (curr->act.semaphore) up(curr->act.semaphore);
++		}
++		if(curr->seq[curr->actidx] & HP_SDC_ACT_CALLBACK) {
++			if (curr->act.irqhook)
++				curr->act.irqhook(irq, dev_id, status, data);
++		}
++		curr->actidx = curr->idx;
++		curr->idx++;
++		/* Return control of this transaction */
++		write_lock(&hp_sdc.rtq_lock);
++		hp_sdc.rcurr = -1; 
++		hp_sdc.rqty = 0;
++		write_unlock(&hp_sdc.rtq_lock);
++		tasklet_schedule(&hp_sdc.task);
++	}
++}
++
++static irqreturn_t hp_sdc_isr(int irq, void *dev_id, struct pt_regs * regs) {
++	uint8_t status, data;
++
++	status = hp_sdc_status_in8();
++	/* Read data unconditionally to advance i8042. */
++	data =   hp_sdc_data_in8();
++
++	/* For now we are ignoring these until we get the SDC to behave. */
++	if (((status & 0xf1) == 0x51) && data == 0x82) {
++	  return IRQ_HANDLED;
++	}
++
++	switch(status & HP_SDC_STATUS_IRQMASK) {
++	      case 0: /* This case is not documented. */
++		break;
++	      case HP_SDC_STATUS_USERTIMER:
++	      case HP_SDC_STATUS_PERIODIC:
++	      case HP_SDC_STATUS_TIMER:
++		read_lock(&hp_sdc.hook_lock);
++	      	if (hp_sdc.timer != NULL)
++			hp_sdc.timer(irq, dev_id, status, data);
++		read_unlock(&hp_sdc.hook_lock);
++		break;
++	      case HP_SDC_STATUS_REG:
++		hp_sdc_take(irq, dev_id, status, data);
++		break;
++	      case HP_SDC_STATUS_HILCMD:
++	      case HP_SDC_STATUS_HILDATA:
++		read_lock(&hp_sdc.hook_lock);
++		if (hp_sdc.hil != NULL)
++			hp_sdc.hil(irq, dev_id, status, data);
++		read_unlock(&hp_sdc.hook_lock);
++		break;
++	      case HP_SDC_STATUS_PUP:
++		read_lock(&hp_sdc.hook_lock);
++		if (hp_sdc.pup != NULL)
++			hp_sdc.pup(irq, dev_id, status, data);
++		else printk(KERN_INFO PREFIX "HP SDC reports successful PUP.\n");
++		read_unlock(&hp_sdc.hook_lock);
++		break;
++	      default:
++		read_lock(&hp_sdc.hook_lock);
++		if (hp_sdc.cooked != NULL)
++			hp_sdc.cooked(irq, dev_id, status, data);
++		read_unlock(&hp_sdc.hook_lock);
++		break;
++	}
++	return IRQ_HANDLED;
++}
++
++
++static irqreturn_t hp_sdc_nmisr(int irq, void *dev_id, struct pt_regs * regs) {
++	int status;
++	
++	status = hp_sdc_status_in8();
++	printk(KERN_WARNING PREFIX "NMI !\n");
++
++#if 0	
++	if (status & HP_SDC_NMISTATUS_FHS) {
++		read_lock(&hp_sdc.hook_lock);
++	      	if (hp_sdc.timer != NULL)
++			hp_sdc.timer(irq, dev_id, status, 0);
++		read_unlock(&hp_sdc.hook_lock);
++	}
++	else {
++		/* TODO: pass this on to the HIL handler, or do SAK here? */
++		printk(KERN_WARNING PREFIX "HIL NMI\n");
++	}
++#endif
++	return IRQ_HANDLED;
++}
++
++
++/***************** Kernel (tasklet) context functions ****************/
++
++unsigned long hp_sdc_put(void);
++
++static void hp_sdc_tasklet(unsigned long foo) {
++
++	write_lock_irq(&hp_sdc.rtq_lock);
++	if (hp_sdc.rcurr >= 0) {
++		struct timeval tv;
++		do_gettimeofday(&tv);
++		if (tv.tv_sec > hp_sdc.rtv.tv_sec) tv.tv_usec += 1000000;
++		if (tv.tv_usec - hp_sdc.rtv.tv_usec > HP_SDC_MAX_REG_DELAY) {
++			hp_sdc_transaction *curr;
++			uint8_t tmp;
++
++			curr = hp_sdc.tq[hp_sdc.rcurr];
++			/* If this turns out to be a normal failure mode
++			 * we'll need to figure out a way to communicate
++			 * it back to the application. and be less verbose.
++			 */
++			printk(KERN_WARNING PREFIX "read timeout (%ius)!\n",
++			       tv.tv_usec - hp_sdc.rtv.tv_usec);
++			curr->idx += hp_sdc.rqty;
++			hp_sdc.rqty = 0;
++			tmp = curr->seq[curr->actidx];
++			curr->seq[curr->actidx] |= HP_SDC_ACT_DEAD;
++			if(tmp & HP_SDC_ACT_SEMAPHORE) {
++				if (curr->act.semaphore) 
++					up(curr->act.semaphore);
++			}
++			if(tmp & HP_SDC_ACT_CALLBACK) {
++				/* Note this means that irqhooks may be called
++				 * in tasklet/bh context.
++				 */
++				if (curr->act.irqhook) 
++					curr->act.irqhook(0, 0, 0, 0);
++			}
++			curr->actidx = curr->idx;
++			curr->idx++;
++			hp_sdc.rcurr = -1; 
++		}
++	}
++	write_unlock_irq(&hp_sdc.rtq_lock);
++	hp_sdc_put();
++}
++
++unsigned long hp_sdc_put(void) {
++	hp_sdc_transaction *curr;
++	uint8_t act;
++	int idx, curridx;
++
++	int limit = 0;
++
++	write_lock(&hp_sdc.lock);
++
++	/* If i8042 buffers are full, we cannot do anything that
++	   requires output, so we skip to the administrativa. */
++	if (hp_sdc.ibf) {
++		hp_sdc_status_in8();
++		if (hp_sdc.ibf) goto finish;
++	}
++
++ anew:
++	/* See if we are in the middle of a sequence. */
++	if (hp_sdc.wcurr < 0) hp_sdc.wcurr = 0;
++	read_lock_irq(&hp_sdc.rtq_lock);
++	if (hp_sdc.rcurr == hp_sdc.wcurr) hp_sdc.wcurr++;
++	read_unlock_irq(&hp_sdc.rtq_lock);
++	if (hp_sdc.wcurr >= HP_SDC_QUEUE_LEN) hp_sdc.wcurr = 0;
++	curridx = hp_sdc.wcurr;
++
++	if (hp_sdc.tq[curridx] != NULL) goto start;
++
++	while (++curridx != hp_sdc.wcurr) {
++		if (curridx >= HP_SDC_QUEUE_LEN) {
++			curridx = -1; /* Wrap to top */
++			continue;
++		}
++		read_lock_irq(&hp_sdc.rtq_lock);
++		if (hp_sdc.rcurr == curridx) {
++			read_unlock_irq(&hp_sdc.rtq_lock);
++			continue;
++		}
++		read_unlock_irq(&hp_sdc.rtq_lock);
++		if (hp_sdc.tq[curridx] != NULL) break; /* Found one. */
++	}
++	if (curridx == hp_sdc.wcurr) { /* There's nothing queued to do. */
++		curridx = -1;
++	}
++	hp_sdc.wcurr = curridx;
++
++ start:
++
++	/* Check to see if the interrupt mask needs to be set. */
++	if (hp_sdc.set_im) {
++		hp_sdc_status_out8(hp_sdc.im | HP_SDC_CMD_SET_IM);
++		hp_sdc.set_im = 0;
++		goto finish;
++	}
++
++	if (hp_sdc.wcurr == -1) goto done;
++
++	curr = hp_sdc.tq[curridx];
++	idx = curr->actidx;
++
++	if (curr->actidx >= curr->endidx) {
++		hp_sdc.tq[curridx] = NULL;
++		/* Interleave outbound data between the transactions. */
++		hp_sdc.wcurr++;
++		if (hp_sdc.wcurr >= HP_SDC_QUEUE_LEN) hp_sdc.wcurr = 0;
++		goto finish;	
++	}
++
++	act = curr->seq[idx];
++	idx++;
++
++	if (curr->idx >= curr->endidx) {
++		if (act & HP_SDC_ACT_DEALLOC) kfree(curr);
++		hp_sdc.tq[curridx] = NULL;
++		/* Interleave outbound data between the transactions. */
++		hp_sdc.wcurr++;
++		if (hp_sdc.wcurr >= HP_SDC_QUEUE_LEN) hp_sdc.wcurr = 0;
++		goto finish;	
++	}
++
++	while (act & HP_SDC_ACT_PRECMD) {
++		if (curr->idx != idx) {
++			idx++;
++			act &= ~HP_SDC_ACT_PRECMD;
++			break;
++		}
++		hp_sdc_status_out8(curr->seq[idx]);
++		curr->idx++;
++		/* act finished? */
++		if ((act & HP_SDC_ACT_DURING) == HP_SDC_ACT_PRECMD)
++		  goto actdone;
++		/* skip quantity field if data-out sequence follows. */
++		if (act & HP_SDC_ACT_DATAOUT) curr->idx++;
++		goto finish;
++	}
++	if (act & HP_SDC_ACT_DATAOUT) {
++		int qty;
++
++		qty = curr->seq[idx];
++		idx++;
++		if (curr->idx - idx < qty) {
++			hp_sdc_data_out8(curr->seq[curr->idx]);
++			curr->idx++;
++			/* act finished? */
++			if ((curr->idx - idx >= qty) && 
++			    ((act & HP_SDC_ACT_DURING) == HP_SDC_ACT_DATAOUT))
++				goto actdone;
++			goto finish;
++		}
++		idx += qty;
++		act &= ~HP_SDC_ACT_DATAOUT;
++	}
++	else while (act & HP_SDC_ACT_DATAREG) {
++		int mask;
++		uint8_t w7[4];
++
++		mask = curr->seq[idx];
++		if (idx != curr->idx) {
++			idx++;
++			idx += !!(mask & 1);
++			idx += !!(mask & 2);
++			idx += !!(mask & 4);
++			idx += !!(mask & 8);
++			act &= ~HP_SDC_ACT_DATAREG;
++			break;
++		}
++		
++		w7[0] = (mask & 1) ? curr->seq[++idx] : hp_sdc.r7[0];
++		w7[1] = (mask & 2) ? curr->seq[++idx] : hp_sdc.r7[1];
++		w7[2] = (mask & 4) ? curr->seq[++idx] : hp_sdc.r7[2];
++		w7[3] = (mask & 8) ? curr->seq[++idx] : hp_sdc.r7[3];
++		
++		if (hp_sdc.wi > 0x73 || hp_sdc.wi < 0x70 ||
++		        w7[hp_sdc.wi-0x70] == hp_sdc.r7[hp_sdc.wi-0x70]) {
++			int i = 0;
++
++			/* Need to point the write index register */	
++			while ((i < 4) && w7[i] == hp_sdc.r7[i]) i++;
++			if (i < 4) {
++				hp_sdc_status_out8(HP_SDC_CMD_SET_D0 + i);
++				hp_sdc.wi = 0x70 + i;
++				goto finish;
++			}
++			idx++;
++			if ((act & HP_SDC_ACT_DURING) == HP_SDC_ACT_DATAREG)
++				goto actdone;
++			curr->idx = idx;
++			act &= ~HP_SDC_ACT_DATAREG;
++			break;
++		}
++
++		hp_sdc_data_out8(w7[hp_sdc.wi - 0x70]);
++		hp_sdc.r7[hp_sdc.wi - 0x70] = w7[hp_sdc.wi - 0x70];
++		hp_sdc.wi++; /* write index register autoincrements */
++		{
++			int i = 0;
++
++			while ((i < 4) && w7[i] == hp_sdc.r7[i]) i++;
++			if (i >= 4) {
++				curr->idx = idx + 1;
++				if ((act & HP_SDC_ACT_DURING) == 
++				    HP_SDC_ACT_DATAREG)
++				        goto actdone;
++			}
++		}
++		goto finish;
++	}
++	/* We don't go any further in the command if there is a pending read,
++	   because we don't want interleaved results. */
++	read_lock_irq(&hp_sdc.rtq_lock);
++	if (hp_sdc.rcurr >= 0) {
++		read_unlock_irq(&hp_sdc.rtq_lock);
++		goto finish;
++	}
++	read_unlock_irq(&hp_sdc.rtq_lock);
++
++
++	if (act & HP_SDC_ACT_POSTCMD) {
++	  	uint8_t postcmd;
++
++		/* curr->idx should == idx at this point. */
++		postcmd = curr->seq[idx];
++		curr->idx++;
++		if (act & HP_SDC_ACT_DATAIN) {
++
++			/* Start a new read */
++	  		hp_sdc.rqty = curr->seq[curr->idx];
++			do_gettimeofday(&hp_sdc.rtv);
++			curr->idx++;
++			/* Still need to lock here in case of spurious irq. */
++			write_lock_irq(&hp_sdc.rtq_lock);
++			hp_sdc.rcurr = curridx; 
++			write_unlock_irq(&hp_sdc.rtq_lock);
++			hp_sdc_status_out8(postcmd);
++			goto finish;
++		}
++		hp_sdc_status_out8(postcmd);
++		goto actdone;
++	}
++
++actdone:
++	if (act & HP_SDC_ACT_SEMAPHORE) {
++		up(curr->act.semaphore);
++	}
++	else if (act & HP_SDC_ACT_CALLBACK) {
++		curr->act.irqhook(0,0,0,0);
++	}
++	if (curr->idx >= curr->endidx) { /* This transaction is over. */
++		if (act & HP_SDC_ACT_DEALLOC) kfree(curr);
++		hp_sdc.tq[curridx] = NULL;
++	}
++	else {
++		curr->actidx = idx + 1;
++		curr->idx = idx + 2;
++	}
++	/* Interleave outbound data between the transactions. */
++	hp_sdc.wcurr++;
++	if (hp_sdc.wcurr >= HP_SDC_QUEUE_LEN) hp_sdc.wcurr = 0;
++
++ finish:
++	/* If by some quirk IBF has cleared and our ISR has run to 
++	   see that that has happened, do it all again. */
++	if (!hp_sdc.ibf && limit++ < 20) goto anew;
++
++ done:
++	if (hp_sdc.wcurr >= 0) tasklet_schedule(&hp_sdc.task);
++	write_unlock(&hp_sdc.lock);
++	return 0;
++}
++
++/******* Functions called in either user or kernel context ****/
++int hp_sdc_enqueue_transaction(hp_sdc_transaction *this) {
++	unsigned long flags;
++	int i;
++
++	if (this == NULL) {
++		tasklet_schedule(&hp_sdc.task);
++		return -EINVAL;
++	};
++
++	write_lock_irqsave(&hp_sdc.lock, flags);
++
++	/* Can't have same transaction on queue twice */
++	for (i=0; i < HP_SDC_QUEUE_LEN; i++)
++		if (hp_sdc.tq[i] == this) goto fail;
++
++	this->actidx = 0;
++	this->idx = 1;
++
++	/* Search for empty slot */
++	for (i=0; i < HP_SDC_QUEUE_LEN; i++) {
++		if (hp_sdc.tq[i] == NULL) {
++			hp_sdc.tq[i] = this;
++			write_unlock_irqrestore(&hp_sdc.lock, flags);
++			tasklet_schedule(&hp_sdc.task);
++			return 0;
++		}
++	}
++	write_unlock_irqrestore(&hp_sdc.lock, flags);
++	printk(KERN_WARNING PREFIX "No free slot to add transaction.\n");
++	return -EBUSY;
++
++ fail:
++	write_unlock_irqrestore(&hp_sdc.lock,flags);
++	printk(KERN_WARNING PREFIX "Transaction add failed: transaction already queued?\n");
++	return -EINVAL;
++}
++
++int hp_sdc_dequeue_transaction(hp_sdc_transaction *this) {
++	unsigned long flags;
++	int i;
++
++	write_lock_irqsave(&hp_sdc.lock, flags);
++
++	/* TODO: don't remove it if it's not done. */
++
++	for (i=0; i < HP_SDC_QUEUE_LEN; i++)
++		if (hp_sdc.tq[i] == this) hp_sdc.tq[i] = NULL;
++
++	write_unlock_irqrestore(&hp_sdc.lock, flags);
++	return 0;
++}
++
++
++
++/********************** User context functions **************************/
++int hp_sdc_request_timer_irq(hp_sdc_irqhook *callback) {
++
++	if (callback == NULL || hp_sdc.dev == NULL) {
++		return -EINVAL;
++	}
++	write_lock_irq(&hp_sdc.hook_lock);
++	if (hp_sdc.timer != NULL) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EBUSY;
++	}
++
++	hp_sdc.timer = callback;
++	/* Enable interrupts from the timers */
++	hp_sdc.im &= ~HP_SDC_IM_FH;
++        hp_sdc.im &= ~HP_SDC_IM_PT;
++	hp_sdc.im &= ~HP_SDC_IM_TIMERS;
++	hp_sdc.set_im = 1;
++	write_unlock_irq(&hp_sdc.hook_lock);
++
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++int hp_sdc_request_hil_irq(hp_sdc_irqhook *callback) {
++
++	if (callback == NULL || hp_sdc.dev == NULL) {
++		return -EINVAL;
++	}
++	write_lock_irq(&hp_sdc.hook_lock);
++	if (hp_sdc.hil != NULL) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EBUSY;
++	}
++
++	hp_sdc.hil = callback;
++	hp_sdc.im &= ~(HP_SDC_IM_HIL | HP_SDC_IM_RESET);
++	hp_sdc.set_im = 1;
++	write_unlock_irq(&hp_sdc.hook_lock);
++
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++int hp_sdc_request_cooked_irq(hp_sdc_irqhook *callback) {
++
++	if (callback == NULL || hp_sdc.dev == NULL) {
++		return -EINVAL;
++	}
++	write_lock_irq(&hp_sdc.hook_lock);
++	if (hp_sdc.cooked != NULL) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EBUSY;
++	}
++
++	/* Enable interrupts from the HIL MLC */
++	hp_sdc.cooked = callback;
++	hp_sdc.im &= ~(HP_SDC_IM_HIL | HP_SDC_IM_RESET);
++	hp_sdc.set_im = 1;
++	write_unlock_irq(&hp_sdc.hook_lock);
++
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++int hp_sdc_release_timer_irq(hp_sdc_irqhook *callback) {
++
++
++	write_lock_irq(&hp_sdc.hook_lock);
++	if ((callback != hp_sdc.timer) ||
++	    (hp_sdc.timer == NULL)) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EINVAL;
++	}
++
++	/* Disable interrupts from the timers */
++	hp_sdc.timer = NULL;
++	hp_sdc.im |= HP_SDC_IM_TIMERS;
++	hp_sdc.im |= HP_SDC_IM_FH;
++	hp_sdc.im |= HP_SDC_IM_PT;
++	hp_sdc.set_im = 1;
++	write_unlock_irq(&hp_sdc.hook_lock);
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++int hp_sdc_release_hil_irq(hp_sdc_irqhook *callback) {
++
++	write_lock_irq(&hp_sdc.hook_lock);
++	if ((callback != hp_sdc.hil) ||
++	    (hp_sdc.hil == NULL)) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EINVAL;
++	}
++
++	hp_sdc.hil = NULL;
++	/* Disable interrupts from HIL only if there is no cooked driver. */
++	if(hp_sdc.cooked == NULL) {
++		hp_sdc.im |= (HP_SDC_IM_HIL | HP_SDC_IM_RESET);
++		hp_sdc.set_im = 1;
++	}
++	write_unlock_irq(&hp_sdc.hook_lock);
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++int hp_sdc_release_cooked_irq(hp_sdc_irqhook *callback) {
++
++	write_lock_irq(&hp_sdc.hook_lock);
++	if ((callback != hp_sdc.cooked) ||
++	    (hp_sdc.cooked == NULL)) {
++		write_unlock_irq(&hp_sdc.hook_lock);
++		return -EINVAL;
++	}
++
++	hp_sdc.cooked = NULL;
++	/* Disable interrupts from HIL only if there is no raw HIL driver. */
++	if(hp_sdc.hil == NULL) {
++		hp_sdc.im |= (HP_SDC_IM_HIL | HP_SDC_IM_RESET);
++		hp_sdc.set_im = 1;
++	}
++	write_unlock_irq(&hp_sdc.hook_lock);
++	tasklet_schedule(&hp_sdc.task);
++
++	return 0;
++}
++
++/************************* Keepalive timer task *********************/
++
++void hp_sdc_kicker (unsigned long data) {
++	tasklet_schedule(&hp_sdc.task);
++	/* Re-insert the periodic task. */
++	mod_timer(&hp_sdc.kicker, jiffies + HZ);
++}
++
++/************************** Module Initialization ***************************/
++
++#if defined(__hppa__)
++
++static struct parisc_device_id hp_sdc_tbl[] = {
++	{
++		.hw_type =	HPHW_FIO, 
++		.hversion_rev =	HVERSION_REV_ANY_ID,
++		.hversion =	HVERSION_ANY_ID,
++		.sversion =	0x73, 
++	 },
++	{ 0, }
++};
++
++MODULE_DEVICE_TABLE(parisc, hp_sdc_tbl);
++
++static int __init hp_sdc_init_hppa(struct parisc_device *d);
++
++static struct parisc_driver hp_sdc_driver = {
++	.name =		"HP SDC",
++	.id_table =	hp_sdc_tbl,
++	.probe =	hp_sdc_init_hppa,
++};
++
++#endif /* __hppa__ */
++
++static int __init hp_sdc_init(void)
++{
++	int i;
++	char *errstr;
++	hp_sdc_transaction t_sync;
++	uint8_t ts_sync[6];
++	struct semaphore s_sync;
++
++  	hp_sdc.lock		= RW_LOCK_UNLOCKED;
++  	hp_sdc.ibf_lock		= RW_LOCK_UNLOCKED;
++  	hp_sdc.rtq_lock		= RW_LOCK_UNLOCKED;
++  	hp_sdc.hook_lock	= RW_LOCK_UNLOCKED;
++
++	hp_sdc.timer		= NULL;
++	hp_sdc.hil		= NULL;
++	hp_sdc.pup		= NULL;
++	hp_sdc.cooked		= NULL;
++	hp_sdc.im		= HP_SDC_IM_MASK;  /* Mask maskable irqs */
++	hp_sdc.set_im		= 1;
++	hp_sdc.wi		= 0xff;
++	hp_sdc.r7[0]		= 0xff;
++	hp_sdc.r7[1]		= 0xff;
++	hp_sdc.r7[2]		= 0xff;
++	hp_sdc.r7[3]		= 0xff;
++	hp_sdc.ibf		= 1;
++
++	for (i = 0; i < HP_SDC_QUEUE_LEN; i++) hp_sdc.tq[i] = NULL;
++	hp_sdc.wcurr		= -1;
++        hp_sdc.rcurr		= -1;
++	hp_sdc.rqty		= 0;
++
++	hp_sdc.dev_err = -ENODEV;
++
++	errstr = "IO not found for";
++	if (!hp_sdc.base_io) goto err0;
++
++	errstr = "IRQ not found for";
++	if (!hp_sdc.irq) goto err0;
++
++	hp_sdc.dev_err = -EBUSY;
++
++#if defined(__hppa__)
++	errstr = "IO not available for";
++        if (request_region(hp_sdc.data_io, 2, hp_sdc_driver.name)) goto err0;
++#endif	
++
++	errstr = "IRQ not available for";
++        if(request_irq(hp_sdc.irq, &hp_sdc_isr, 0, "HP SDC",
++		       (void *) hp_sdc.base_io)) goto err1;
++
++	errstr = "NMI not available for";
++	if (request_irq(hp_sdc.nmi, &hp_sdc_nmisr, 0, "HP SDC NMI", 
++			(void *) hp_sdc.base_io)) goto err2;
++
++	printk(KERN_INFO PREFIX "HP SDC at 0x%p, IRQ %d (NMI IRQ %d)\n", 
++	       (void *)hp_sdc.base_io, hp_sdc.irq, hp_sdc.nmi);
++
++	hp_sdc_status_in8();
++	hp_sdc_data_in8();
++
++	tasklet_init(&hp_sdc.task, hp_sdc_tasklet, 0);
++
++	/* Sync the output buffer registers, thus scheduling hp_sdc_tasklet. */
++	t_sync.actidx	= 0;
++	t_sync.idx	= 1;
++	t_sync.endidx	= 6;
++	t_sync.seq	= ts_sync;
++	ts_sync[0]	= HP_SDC_ACT_DATAREG | HP_SDC_ACT_SEMAPHORE;
++	ts_sync[1]	= 0x0f;
++	ts_sync[2] = ts_sync[3]	= ts_sync[4] = ts_sync[5] = 0;
++	t_sync.act.semaphore = &s_sync;
++	init_MUTEX_LOCKED(&s_sync);
++	hp_sdc_enqueue_transaction(&t_sync);
++	down(&s_sync); /* Wait for t_sync to complete */
++
++	/* Create the keepalive task */
++	init_timer(&hp_sdc.kicker);
++	hp_sdc.kicker.expires = jiffies + HZ;
++	hp_sdc.kicker.function = &hp_sdc_kicker;
++	add_timer(&hp_sdc.kicker);
++
++	hp_sdc.dev_err = 0;
++	return 0;
++ err2:
++	free_irq(hp_sdc.irq, NULL);
++ err1:
++	release_region(hp_sdc.data_io, 2);
++ err0:
++	printk(KERN_WARNING PREFIX ": %s SDC IO=0x%p IRQ=0x%x NMI=0x%x\n", 
++		errstr, (void *)hp_sdc.base_io, hp_sdc.irq, hp_sdc.nmi);
++	hp_sdc.dev = NULL;
++	return hp_sdc.dev_err;
++}
++
++#if defined(__hppa__)
++
++static int __init hp_sdc_init_hppa(struct parisc_device *d)
++{
++	if (!d) return 1;
++	if (hp_sdc.dev != NULL) return 1;	/* We only expect one SDC */
++
++	hp_sdc.dev		= d;
++	hp_sdc.irq		= d->irq;
++	/* TODO: Is NMI == IRQ - 1 all cases, or is there a way to query? */
++	hp_sdc.nmi		= d->irq - 1;
++	hp_sdc.base_io		= (unsigned long) d->hpa;
++	hp_sdc.data_io		= (unsigned long) d->hpa + 0x800;
++	hp_sdc.status_io	= (unsigned long) d->hpa + 0x801;
++
++	return hp_sdc_init();
++}
++
++#endif /* __hppa__ */
++
++#if !defined(__mc68000__) /* Link error on m68k! */
++static void __exit hp_sdc_exit(void)
++#else
++static void hp_sdc_exit(void)
++#endif
++{
++	write_lock_irq(&hp_sdc.lock);
++
++	/* Turn off all maskable "sub-function" irq's. */
++	hp_sdc_spin_ibf();
++	sdc_writeb(HP_SDC_CMD_SET_IM | HP_SDC_IM_MASK, hp_sdc.status_io);
++
++	/* Wait until we know this has been processed by the i8042 */
++	hp_sdc_spin_ibf();
++
++	free_irq(hp_sdc.nmi, NULL);
++	free_irq(hp_sdc.irq, NULL);
++	write_unlock_irq(&hp_sdc.lock);
++
++	del_timer(&hp_sdc.kicker);
++
++	tasklet_kill(&hp_sdc.task);
++
++/*        release_region(hp_sdc.data_io, 2); */
++
++#if defined(__hppa__)
++	if (unregister_parisc_driver(&hp_sdc_driver)) 
++		printk(KERN_WARNING PREFIX "Error unregistering HP SDC");
++#endif
++}
++
++static int __init hp_sdc_register(void)
++{
++	hp_sdc_transaction tq_init;
++	uint8_t tq_init_seq[5];
++	struct semaphore tq_init_sem;
++#if defined(__mc68000__)
++	mm_segment_t fs;
++	unsigned char i;
++#endif
++	
++	hp_sdc.dev = NULL;
++	hp_sdc.dev_err = 0;
++#if defined(__hppa__)
++	if (register_parisc_driver(&hp_sdc_driver)) {
++		printk(KERN_WARNING PREFIX "Error registering SDC with system bus tree.\n");
++		return -ENODEV;
++	}
++#elif defined(__mc68000__)
++	if (!MACH_IS_HP300)
++	    return -ENODEV;
++
++	hp_sdc.irq	 = 1;
++	hp_sdc.nmi	 = 7;
++	hp_sdc.base_io	 = (unsigned long) 0xf0428000;
++	hp_sdc.data_io	 = (unsigned long) hp_sdc.base_io + 1;
++	hp_sdc.status_io = (unsigned long) hp_sdc.base_io + 3;
++	fs = get_fs();
++	set_fs(KERNEL_DS);
++	if (!get_user(i, (unsigned char *)hp_sdc.data_io))
++		hp_sdc.dev = (void *)1;
++	set_fs(fs);
++	hp_sdc.dev_err   = hp_sdc_init();
++#endif
++	if (hp_sdc.dev == NULL) {
++		printk(KERN_WARNING PREFIX "No SDC found.\n");
++		return hp_sdc.dev_err;
++	}
++
++	init_MUTEX_LOCKED(&tq_init_sem);
++
++	tq_init.actidx		= 0;
++	tq_init.idx		= 1;
++	tq_init.endidx		= 5;
++	tq_init.seq		= tq_init_seq;
++	tq_init.act.semaphore	= &tq_init_sem;
++
++	tq_init_seq[0] = 
++	  HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN | HP_SDC_ACT_SEMAPHORE;
++	tq_init_seq[1] = HP_SDC_CMD_READ_KCC;
++	tq_init_seq[2] = 1;
++	tq_init_seq[3] = 0;
++	tq_init_seq[4] = 0;
++
++	hp_sdc_enqueue_transaction(&tq_init);
++
++	down(&tq_init_sem);
++	up(&tq_init_sem);
++
++	if ((tq_init_seq[0] & HP_SDC_ACT_DEAD) == HP_SDC_ACT_DEAD) {
++		printk(KERN_WARNING PREFIX "Error reading config byte.\n");
++		hp_sdc_exit();
++		return -ENODEV;
++	}
++	hp_sdc.r11 = tq_init_seq[4];
++	if (hp_sdc.r11 & HP_SDC_CFG_NEW) {
++		char *str;
++		printk(KERN_INFO PREFIX "New style SDC\n");
++		tq_init_seq[1] = HP_SDC_CMD_READ_XTD;
++		tq_init.actidx		= 0;
++		tq_init.idx		= 1;
++		down(&tq_init_sem);
++		hp_sdc_enqueue_transaction(&tq_init);		
++		down(&tq_init_sem);
++		up(&tq_init_sem);
++		if ((tq_init_seq[0] & HP_SDC_ACT_DEAD) == HP_SDC_ACT_DEAD) {
++			printk(KERN_WARNING PREFIX "Error reading extended config byte.\n");
++			return -ENODEV;
++		}
++		hp_sdc.r7e = tq_init_seq[4];
++		HP_SDC_XTD_REV_STRINGS(hp_sdc.r7e & HP_SDC_XTD_REV, str)
++		printk(KERN_INFO PREFIX "Revision: %s\n", str);
++		if (hp_sdc.r7e & HP_SDC_XTD_BEEPER) {
++			printk(KERN_INFO PREFIX "TI SN76494 beeper present\n");
++		}
++		if (hp_sdc.r7e & HP_SDC_XTD_BBRTC) {
++			printk(KERN_INFO PREFIX "OKI MSM-58321 BBRTC present\n");
++		}
++		printk(KERN_INFO PREFIX "Spunking the self test register to force PUP "
++		       "on next firmware reset.\n");
++		tq_init_seq[0] = HP_SDC_ACT_PRECMD | 
++			HP_SDC_ACT_DATAOUT | HP_SDC_ACT_SEMAPHORE;
++		tq_init_seq[1] = HP_SDC_CMD_SET_STR;
++		tq_init_seq[2] = 1;
++		tq_init_seq[3] = 0;
++		tq_init.actidx		= 0;
++		tq_init.idx		= 1;
++		tq_init.endidx		= 4;
++		down(&tq_init_sem);
++		hp_sdc_enqueue_transaction(&tq_init);		
++		down(&tq_init_sem);
++		up(&tq_init_sem);
++	}
++	else {
++		printk(KERN_INFO PREFIX "Old style SDC (1820-%s).\n", 
++		       (hp_sdc.r11 & HP_SDC_CFG_REV) ? "3300" : "2564/3087");
++	}
++
++        return 0;
++}
++
++module_init(hp_sdc_register);
++module_exit(hp_sdc_exit);
++
++/* Timing notes:  These measurements taken on my 64MHz 7100-LC (715/64) 
++ *                                              cycles cycles-adj    time
++ * between two consecutive mfctl(16)'s:              4        n/a    63ns
++ * hp_sdc_spin_ibf when idle:                      119        115   1.7us
++ * gsc_writeb status register:                      83         79   1.2us
++ * IBF to clear after sending SET_IM:             6204       6006    93us
++ * IBF to clear after sending LOAD_RT:            4467       4352    68us  
++ * IBF to clear after sending two LOAD_RTs:      18974      18859   295us
++ * READ_T1, read status/data, IRQ, call handler: 35564        n/a   556us
++ * cmd to ~IBF READ_T1 2nd time right after:   5158403        n/a    81ms
++ * between IRQ received and ~IBF for above:    2578877        n/a    40ms
++ *
++ * Performance stats after a run of this module configuring HIL and
++ * receiving a few mouse events:
++ *
++ * status in8  282508 cycles 7128 calls
++ * status out8   8404 cycles  341 calls
++ * data out8     1734 cycles   78 calls
++ * isr         174324 cycles  617 calls (includes take)
++ * take          1241 cycles    2 calls
++ * put        1411504 cycles 6937 calls
++ * task       1655209 cycles 6937 calls (includes put)
++ *
++ */
+Index: debian-kernel-hppa-2.6.10/drivers/input/serio/hp_sdc_mlc.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/drivers/input/serio/hp_sdc_mlc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,358 @@
++/*
++ * Access to HP-HIL MLC through HP System Device Controller.
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ * System Device Controller Microprocessor Firmware Theory of Operation
++ *      for Part Number 1820-4784 Revision B.  Dwg No. A-1820-4784-2
++ *
++ */
++
++#include <linux/hil_mlc.h>
++#include <linux/hp_sdc.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/string.h>
++
++#define PREFIX "HP SDC MLC: "
++
++static hil_mlc hp_sdc_mlc;
++
++MODULE_AUTHOR("Brian S. Julin <bri at calyx.com>");
++MODULE_DESCRIPTION("Glue for onboard HIL MLC in HP-PARISC machines");
++MODULE_LICENSE("Dual BSD/GPL");
++
++struct hp_sdc_mlc_priv_s {
++	int emtestmode;
++	hp_sdc_transaction trans;
++	u8 tseq[16];
++	int got5x;
++} hp_sdc_mlc_priv;
++
++/************************* Interrupt context ******************************/
++static void hp_sdc_mlc_isr (int irq, void *dev_id, 
++			    uint8_t status, uint8_t data) {
++  	int idx;
++	hil_mlc *mlc = &hp_sdc_mlc;
++
++	write_lock(&(mlc->lock));
++	if (mlc->icount < 0) {
++		printk(KERN_WARNING PREFIX "HIL Overflow!\n");
++		up(&mlc->isem);
++		goto out;
++	}
++	idx = 15 - mlc->icount;
++	if ((status & HP_SDC_STATUS_IRQMASK) == HP_SDC_STATUS_HILDATA) {
++		mlc->ipacket[idx] |= data | HIL_ERR_INT;
++		mlc->icount--;
++		if (hp_sdc_mlc_priv.got5x) goto check;
++		if (!idx) goto check;
++		if ((mlc->ipacket[idx-1] & HIL_PKT_ADDR_MASK) !=
++		    (mlc->ipacket[idx] & HIL_PKT_ADDR_MASK)) {
++			mlc->ipacket[idx] &= ~HIL_PKT_ADDR_MASK;
++			mlc->ipacket[idx] |= (mlc->ipacket[idx-1] 
++						    & HIL_PKT_ADDR_MASK);
++		}
++		goto check;
++	}
++	/* We know status is 5X */
++	if (data & HP_SDC_HIL_ISERR) goto err;
++	mlc->ipacket[idx] = 
++		(data & HP_SDC_HIL_R1MASK) << HIL_PKT_ADDR_SHIFT;
++	hp_sdc_mlc_priv.got5x = 1;
++	goto out;
++
++ check:
++	hp_sdc_mlc_priv.got5x = 0;
++	if (mlc->imatch == 0) goto done;
++	if ((mlc->imatch == (HIL_ERR_INT | HIL_PKT_CMD | HIL_CMD_POL)) 
++	    && (mlc->ipacket[idx] == (mlc->imatch | idx))) goto done;
++	if (mlc->ipacket[idx] == mlc->imatch) goto done;
++	goto out;
++
++ err:				
++	printk(KERN_DEBUG PREFIX "err code %x\n", data);
++	switch (data) {
++	case HP_SDC_HIL_RC_DONE:
++		printk(KERN_WARNING PREFIX "Bastard SDC reconfigured loop!\n");
++		break;
++	case HP_SDC_HIL_ERR:
++		mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_PERR | 
++		  HIL_ERR_FERR | HIL_ERR_FOF;
++		break;
++	case HP_SDC_HIL_TO:
++		mlc->ipacket[idx] |= HIL_ERR_INT | HIL_ERR_LERR;
++		break;
++	case HP_SDC_HIL_RC:
++		printk(KERN_WARNING PREFIX "Bastard SDC decided to reconfigure loop!\n");
++		break;
++	default:
++		printk(KERN_WARNING PREFIX "Unkown HIL Error status (%x)!\n", data);
++		break;
++	}
++	/* No more data will be coming due to an error. */
++ done:
++	tasklet_schedule(mlc->tasklet);
++	up(&(mlc->isem));
++ out:
++	write_unlock(&(mlc->lock));
++}
++
++
++/******************** Tasklet or userspace context functions ****************/
++
++static int hp_sdc_mlc_in (hil_mlc *mlc, suseconds_t timeout) {
++	unsigned long flags;
++	struct hp_sdc_mlc_priv_s *priv;
++	int rc = 2;
++
++	priv = mlc->priv;
++
++	write_lock_irqsave(&(mlc->lock), flags);
++
++	/* Try to down the semaphore */
++	if (down_trylock(&(mlc->isem))) {
++		struct timeval tv;
++		if (priv->emtestmode) {
++			mlc->ipacket[0] = 
++				HIL_ERR_INT | (mlc->opacket & 
++					       (HIL_PKT_CMD | 
++						HIL_PKT_ADDR_MASK | 
++						HIL_PKT_DATA_MASK));
++			mlc->icount = 14;
++			/* printk(KERN_DEBUG PREFIX ">[%x]\n", mlc->ipacket[0]); */
++			goto wasup;
++		}
++		do_gettimeofday(&tv);
++		tv.tv_usec += 1000000 * (tv.tv_sec - mlc->instart.tv_sec);
++		if (tv.tv_usec - mlc->instart.tv_usec > mlc->intimeout) {
++		  /*		  printk("!%i %i", 
++				  tv.tv_usec - mlc->instart.tv_usec, 
++				  mlc->intimeout);
++		  */
++			rc = 1;
++			up(&(mlc->isem));
++		}
++		goto done;
++	}
++ wasup:
++	up(&(mlc->isem));
++	rc = 0;
++	goto done;
++ done:
++	write_unlock_irqrestore(&(mlc->lock), flags);
++	return rc;
++}
++
++static int hp_sdc_mlc_cts (hil_mlc *mlc) {
++	struct hp_sdc_mlc_priv_s *priv;
++	unsigned long flags;
++
++	priv = mlc->priv;	
++
++	write_lock_irqsave(&(mlc->lock), flags);
++
++	/* Try to down the semaphores -- they should be up. */
++	if (down_trylock(&(mlc->isem))) {
++		BUG();
++		goto busy;
++	}
++	if (down_trylock(&(mlc->osem))) {
++	 	BUG();
++		up(&(mlc->isem));
++		goto busy;
++	}
++	up(&(mlc->isem));
++	up(&(mlc->osem));
++
++	if (down_trylock(&(mlc->csem))) {
++		if (priv->trans.act.semaphore != &(mlc->csem)) goto poll;
++		goto busy;
++	}
++	if (!(priv->tseq[4] & HP_SDC_USE_LOOP)) goto done;
++
++ poll:
++	priv->trans.act.semaphore = &(mlc->csem);
++	priv->trans.actidx = 0;
++	priv->trans.idx = 1;
++	priv->trans.endidx = 5;
++	priv->tseq[0] = 
++		HP_SDC_ACT_POSTCMD | HP_SDC_ACT_DATAIN | HP_SDC_ACT_SEMAPHORE;
++	priv->tseq[1] = HP_SDC_CMD_READ_USE;
++	priv->tseq[2] = 1;
++	priv->tseq[3] = 0;
++	priv->tseq[4] = 0;
++	hp_sdc_enqueue_transaction(&(priv->trans));
++ busy:
++	write_unlock_irqrestore(&(mlc->lock), flags);
++	return 1;
++ done:
++	priv->trans.act.semaphore = &(mlc->osem);
++	up(&(mlc->csem));
++	write_unlock_irqrestore(&(mlc->lock), flags);
++	return 0;
++}
++
++static void hp_sdc_mlc_out (hil_mlc *mlc) {
++	struct hp_sdc_mlc_priv_s *priv;
++	unsigned long flags;
++
++	priv = mlc->priv;
++
++	write_lock_irqsave(&(mlc->lock), flags);
++	
++	/* Try to down the semaphore -- it should be up. */
++	if (down_trylock(&(mlc->osem))) {
++	 	BUG();
++		goto done;
++	}
++
++	if (mlc->opacket & HIL_DO_ALTER_CTRL) goto do_control;
++
++ do_data:
++	if (priv->emtestmode) {
++		up(&(mlc->osem));
++		goto done;
++	}
++	/* Shouldn't be sending commands when loop may be busy */
++	if (down_trylock(&(mlc->csem))) {
++	 	BUG();
++		goto done;
++	}
++	up(&(mlc->csem));
++
++	priv->trans.actidx = 0;
++	priv->trans.idx = 1;
++	priv->trans.act.semaphore = &(mlc->osem);
++	priv->trans.endidx = 6;
++	priv->tseq[0] = 
++		HP_SDC_ACT_DATAREG | HP_SDC_ACT_POSTCMD | HP_SDC_ACT_SEMAPHORE;
++	priv->tseq[1] = 0x7;
++	priv->tseq[2] = 
++		(mlc->opacket & 
++		 (HIL_PKT_ADDR_MASK | HIL_PKT_CMD))
++		   >> HIL_PKT_ADDR_SHIFT;
++	priv->tseq[3] = 
++		(mlc->opacket & HIL_PKT_DATA_MASK) 
++		  >> HIL_PKT_DATA_SHIFT;
++	priv->tseq[4] = 0;  /* No timeout */
++	if (priv->tseq[3] == HIL_CMD_DHR) priv->tseq[4] = 1;
++	priv->tseq[5] = HP_SDC_CMD_DO_HIL;
++	goto enqueue;
++
++ do_control:
++	priv->emtestmode = mlc->opacket & HIL_CTRL_TEST;
++	if ((mlc->opacket & (HIL_CTRL_APE | HIL_CTRL_IPF)) == HIL_CTRL_APE) {
++		BUG(); /* we cannot emulate this, it should not be used. */
++	}
++	if ((mlc->opacket & HIL_CTRL_ONLY) == HIL_CTRL_ONLY) goto control_only;
++	if (mlc->opacket & HIL_CTRL_APE) { 
++		BUG(); /* Should not send command/data after engaging APE */
++		goto done;
++	}
++	/* Disengaging APE this way would not be valid either since 
++	 * the loop must be allowed to idle.
++	 *
++	 * So, it works out that we really never actually send control 
++	 * and data when using SDC, we just send the data. 
++	 */
++	goto do_data;
++
++ control_only:
++	priv->trans.actidx = 0;
++	priv->trans.idx = 1;
++	priv->trans.act.semaphore = &(mlc->osem);
++	priv->trans.endidx = 4;
++	priv->tseq[0] = 
++	  HP_SDC_ACT_PRECMD | HP_SDC_ACT_DATAOUT | HP_SDC_ACT_SEMAPHORE;
++	priv->tseq[1] = HP_SDC_CMD_SET_LPC;
++	priv->tseq[2] = 1;
++	//	priv->tseq[3] = (mlc->ddc + 1) | HP_SDC_LPS_ACSUCC;
++	priv->tseq[3] = 0;
++	if (mlc->opacket & HIL_CTRL_APE) {
++		priv->tseq[3] |= HP_SDC_LPC_APE_IPF;
++		down_trylock(&(mlc->csem));
++	} 
++ enqueue:
++	hp_sdc_enqueue_transaction(&(priv->trans));
++ done:
++	write_unlock_irqrestore(&(mlc->lock), flags);
++}
++
++static int __init hp_sdc_mlc_init(void)
++{
++	hil_mlc *mlc = &hp_sdc_mlc;
++
++	printk(KERN_INFO PREFIX "Registering the System Domain Controller's HIL MLC.\n");
++
++	hp_sdc_mlc_priv.emtestmode = 0;
++	hp_sdc_mlc_priv.trans.seq = hp_sdc_mlc_priv.tseq;
++	hp_sdc_mlc_priv.trans.act.semaphore = &(mlc->osem);
++	hp_sdc_mlc_priv.got5x = 0;
++
++	mlc->cts		= &hp_sdc_mlc_cts;
++	mlc->in			= &hp_sdc_mlc_in;
++	mlc->out		= &hp_sdc_mlc_out;
++
++	if (hil_mlc_register(mlc)) {
++		printk(KERN_WARNING PREFIX "Failed to register MLC structure with hil_mlc\n");
++		goto err0;
++	}
++	mlc->priv		= &hp_sdc_mlc_priv;
++
++	if (hp_sdc_request_hil_irq(&hp_sdc_mlc_isr)) {
++		printk(KERN_WARNING PREFIX "Request for raw HIL ISR hook denied\n");
++		goto err1;
++	}
++	return 0;
++ err1:
++	if (hil_mlc_unregister(mlc)) {
++		printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n"
++			"This is bad.  Could cause an oops.\n");
++	}
++ err0:
++	return -EBUSY;
++}
++
++static void __exit hp_sdc_mlc_exit(void)
++{
++	hil_mlc *mlc = &hp_sdc_mlc;
++	if (hp_sdc_release_hil_irq(&hp_sdc_mlc_isr)) {
++		printk(KERN_ERR PREFIX "Failed to release the raw HIL ISR hook.\n"
++			"This is bad.  Could cause an oops.\n");
++	}
++	if (hil_mlc_unregister(mlc)) {
++		printk(KERN_ERR PREFIX "Failed to unregister MLC structure with hil_mlc.\n"
++			"This is bad.  Could cause an oops.\n");
++	}
++}
++
++module_init(hp_sdc_mlc_init);
++module_exit(hp_sdc_mlc_exit);
+Index: debian-kernel-hppa-2.6.10/drivers/net/tulip/media.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/net/tulip/media.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/net/tulip/media.c	2005-01-21 12:16:45.000000000 -0500
+@@ -44,8 +44,10 @@
+ 
+ /* MII transceiver control section.
+    Read and write the MII registers using software-generated serial
+-   MDIO protocol.  See the MII specifications or DP83840A data sheet
+-   for details. */
++   MDIO protocol.
++   See IEEE 802.3-2002.pdf (Section 2, Chapter "22.2.4 Management functions")
++   or DP83840A data sheet for more details.
++   */
+ 
+ int tulip_mdio_read(struct net_device *dev, int phy_id, int location)
+ {
+@@ -272,13 +274,29 @@
+ 				int reset_length = p[2 + init_length];
+ 				misc_info = (u16*)(reset_sequence + reset_length);
+ 				if (startup) {
++					int timeout = 10;	/* max 1 ms */
+ 					iowrite32(mtable->csr12dir | 0x100, ioaddr + CSR12);
+ 					for (i = 0; i < reset_length; i++)
+ 						iowrite32(reset_sequence[i], ioaddr + CSR12);
++
++					/* flush posted writes */
++					ioread32(ioaddr + CSR12);
++
++					/* Sect 3.10.3 in DP83840A.pdf (p39) */
++					udelay(500);
++
++					/* Section 4.2 in DP83840A.pdf (p43) */
++					/* and IEEE 802.3 "22.2.4.1.1 Reset" */
++					while (timeout-- &&
++						(tulip_mdio_read (dev, phy_num, MII_BMCR) & BMCR_RESET))
++						udelay(100);
+ 				}
+ 				for (i = 0; i < init_length; i++)
+ 					iowrite32(init_sequence[i], ioaddr + CSR12);
++
++				ioread32(ioaddr + CSR12);	/* flush posted writes */
+ 			}
++
+ 			tmp_info = get_u16(&misc_info[1]);
+ 			if (tmp_info)
+ 				tp->advertising[phy_num] = tmp_info | 1;
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/asp.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/asp.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/asp.c	2005-01-21 12:16:45.000000000 -0500
+@@ -103,13 +103,13 @@
+ 
+ 	fixup_child_irqs(dev, asp->busdev_region->data.irqbase, asp_choose_irq);
+ 	/* Mongoose is a sibling of Asp, not a child... */
+-	fixup_child_irqs(dev->parent, asp->busdev_region->data.irqbase,
++	fixup_child_irqs(parisc_parent(dev), asp->busdev_region->data.irqbase,
+ 			asp_choose_irq);
+ 
+ 	/* initialize the chassis LEDs */ 
+ #ifdef CONFIG_CHASSIS_LCD_LED	
+ 	register_led_driver(DISPLAY_MODEL_OLD_ASP, LED_CMD_REG_NONE, 
+-		    (char *)ASP_LED_ADDR);
++		    ASP_LED_ADDR);
+ #endif
+ 
+ 	return 0;
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/ccio-dma.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/ccio-dma.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/ccio-dma.c	2005-01-21 12:16:45.000000000 -0500
+@@ -1198,9 +1198,10 @@
+  * to/from certain pages.  To avoid this happening, we mark these pages
+  * as `used', and ensure that nothing will try to allocate from them.
+  */
+-void ccio_cujo20_fixup(struct parisc_device *dev, u32 iovp)
++void ccio_cujo20_fixup(struct parisc_device *cujo, u32 iovp)
+ {
+ 	unsigned int idx;
++	struct parisc_device *dev = parisc_parent(cujo);
+ 	struct ioc *ioc = ccio_get_iommu(dev);
+ 	u8 *res_ptr;
+ 
+@@ -1556,9 +1557,12 @@
+ 		create_proc_read_entry(MODULE_NAME"-bitmap", S_IRWXU,
+ 				       proc_runway_root, ccio_resource_map, NULL);
+ 	}
++
++	ioc_count++;
++
+ 	parisc_vmerge_boundary = IOVP_SIZE;
+ 	parisc_vmerge_max_size = BITS_PER_LONG * IOVP_SIZE;
+-	ioc_count++;
++	parisc_has_iommu();
+ 	return 0;
+ }
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/dino.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/dino.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/dino.c	2005-01-21 12:16:45.000000000 -0500
+@@ -299,7 +299,7 @@
+ };
+ 
+ static void
+-dino_mask_irq(void *irq_dev, int irq)
++dino_disable_irq(void *irq_dev, int irq)
+ {
+ 	struct dino_device *dino_dev = DINO_DEV(irq_dev);
+ 
+@@ -318,16 +318,23 @@
+ 	}
+ }
+ 
+-
+ static void
+-dino_unmask_irq(void *irq_dev, int irq)
++dino_enable_irq(void *irq_dev, int irq)
+ {
+ 	struct dino_device *dino_dev = DINO_DEV(irq_dev);
+ 	u32 tmp;
+ 
+ 	DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq);
+ 
+-	if (NULL == irq_dev || irq > DINO_IRQS) {
++	/*
++	** clear pending IRQ bits
++	**
++	** This does NOT change ILR state!
++	** See comment below for ILR usage.
++	*/
++	gsc_readl(dino_dev->hba.base_addr+DINO_IPR);
++
++	if (irq > DINO_IRQS) {
+ 		printk(KERN_WARNING "%s(): %d not a dino irq?\n",
+ 				__FUNCTION__, irq);
+ 		BUG();
+@@ -356,29 +363,9 @@
+ }
+ 
+ 
+-
+-static void
+-dino_enable_irq(void *irq_dev, int irq)
+-{
+-	struct dino_device *dino_dev = DINO_DEV(irq_dev);
+-
+-	/*
+-	** clear pending IRQ bits
+-	**
+-	** This does NOT change ILR state!
+-	** See comments in dino_unmask_irq() for ILR usage.
+-	*/
+-	gsc_readl(dino_dev->hba.base_addr+DINO_IPR);
+-
+-	dino_unmask_irq(irq_dev, irq);
+-}
+-
+-
+ static struct irq_region_ops dino_irq_ops = {
+-	.disable_irq	= dino_mask_irq,	/* ??? */
++	.disable_irq	= dino_disable_irq,
+ 	.enable_irq	= dino_enable_irq, 
+-	.mask_irq	= dino_mask_irq,
+-	.unmask_irq	= dino_unmask_irq
+ };
+ 
+ 
+@@ -563,7 +550,7 @@
+         struct dino_device *dino_dev = DINO_DEV(parisc_walk_tree(bus->bridge));
+ 	int port_base = HBA_PORT_BASE(dino_dev->hba.hba_num);
+ 
+-	DBG(KERN_WARNING "%s(0x%p) bus %d sysdata 0x%p\n",
++	DBG(KERN_WARNING "%s(0x%p) bus %d platform_data 0x%p\n",
+ 			__FUNCTION__, bus, bus->secondary, bus->bridge->platform_data);
+ 
+ 	/* Firmware doesn't set up card-mode dino, so we have to */
+@@ -974,9 +961,9 @@
+ #ifdef CONFIG_IOMMU_CCIO
+ 		printk(KERN_WARNING "Enabling Cujo 2.0 bug workaround\n");
+ 		if (dev->hpa == (unsigned long)CUJO_RAVEN_ADDR) {
+-			ccio_cujo20_fixup(dev->parent, CUJO_RAVEN_BADPAGE);
++			ccio_cujo20_fixup(dev, CUJO_RAVEN_BADPAGE);
+ 		} else if (dev->hpa == (unsigned long)CUJO_FIREHAWK_ADDR) {
+-			ccio_cujo20_fixup(dev->parent, CUJO_FIREHAWK_BADPAGE);
++			ccio_cujo20_fixup(dev, CUJO_FIREHAWK_BADPAGE);
+ 		} else {
+ 			printk("Don't recognise Cujo at address 0x%lx, not enabling workaround\n", dev->hpa);
+ 		}
+@@ -1005,7 +992,7 @@
+ 	dino_dev->hba.dev = dev;
+ 	dino_dev->hba.base_addr = dev->hpa;  /* faster access */
+ 	dino_dev->hba.lmmio_space_offset = 0;	/* CPU addrs == bus addrs */
+-	dino_dev->dinosaur_pen = SPIN_LOCK_UNLOCKED;
++	spin_lock_init(&dino_dev->dinosaur_pen);
+ 	dino_dev->hba.iommu = ccio_get_iommu(dev);
+ 
+ 	if (is_card_dino(&dev->id)) {
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/eisa.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/eisa.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/eisa.c	2005-01-21 12:16:45.000000000 -0500
+@@ -180,45 +180,14 @@
+ 	EISA_DBG("pic1 mask %02x\n", eisa_in8(0xa1));
+ }
+ 
+-static void eisa_mask_irq(void *irq_dev, int irq)
+-{
+-	unsigned long flags;
+-	EISA_DBG("mask irq %d\n", irq);
+-	
+-        /* mask irq */
+-	spin_lock_irqsave(&eisa_irq_lock, flags);
+-	if (irq & 8) {
+-		slave_mask |= (1 << (irq&7));
+-		eisa_out8(slave_mask, 0xa1);
+-	} else {
+-		master_mask |= (1 << (irq&7));
+-		eisa_out8(master_mask, 0x21);
+-	}
+-	spin_unlock_irqrestore(&eisa_irq_lock, flags);
+-}
+-
+-static void eisa_unmask_irq(void *irq_dev, int irq)
+-{
+-	unsigned long flags;
+-	EISA_DBG("unmask irq %d\n", irq);
+-        
+-	/* unmask */
+-	spin_lock_irqsave(&eisa_irq_lock, flags);
+-	if (irq & 8) {
+-		slave_mask &= ~(1 << (irq&7));
+-		eisa_out8(slave_mask, 0xa1);
+-	} else {
+-		master_mask &= ~(1 << (irq&7));
+-		eisa_out8(master_mask, 0x21);
+-	}
+-	spin_unlock_irqrestore(&eisa_irq_lock, flags);
+-}
+-
+ static struct irqaction action[IRQ_PER_REGION];
+ 
+ /* EISA needs to be fixed at IRQ region #0 (EISA_IRQ_REGION) */
+ static struct irq_region eisa_irq_region = {
+-	.ops	= { eisa_disable_irq, eisa_enable_irq, eisa_mask_irq, eisa_unmask_irq },
++	.ops	= {
++		.disable_irq = eisa_disable_irq,
++		.enable_irq = eisa_enable_irq
++	},
+ 	.data	= { .name = "EISA", .irqbase = 0 },
+ 	.action	= action,
+ };
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/gsc.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/gsc.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/gsc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -139,29 +139,12 @@
+ 
+ /* FIXME: read IPR to make sure the IRQ isn't already pending.
+ **   If so, we need to read IRR and manually call do_irq_mask().
+-**   This code should be shared with busdev_unmask_irq().
+-*/
+-}
+-
+-static void
+-busdev_mask_irq(void *irq_dev, int irq)
+-{
+-/* FIXME: Clear the IMR bit in busdev for that IRQ */
+-}
+-
+-static void
+-busdev_unmask_irq(void *irq_dev, int irq)
+-{
+-/* FIXME: Read IPR. Set the IMR bit in busdev for that IRQ.
+-   call do_irq_mask() if IPR is non-zero
+ */
+ }
+ 
+ struct irq_region_ops busdev_irq_ops = {
+ 	.disable_irq =	busdev_disable_irq,
+ 	.enable_irq =	busdev_enable_irq,
+-	.mask_irq =	busdev_mask_irq,
+-	.unmask_irq =	busdev_unmask_irq
+ };
+ 
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/iosapic.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/iosapic.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/iosapic.c	2005-01-21 12:16:45.000000000 -0500
+@@ -160,10 +160,9 @@
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+ #include <linux/spinlock.h>
+-#include <linux/pci.h>		/* pci cfg accessor functions  */
++#include <linux/pci.h>
+ #include <linux/init.h>
+ #include <linux/slab.h>
+-#include <linux/smp_lock.h>
+ #include <linux/interrupt.h>	/* irqaction */
+ #include <linux/irq.h>		/* irq_region support */
+ 
+@@ -190,31 +189,9 @@
+ 
+ 
+ #ifdef DEBUG_IOSAPIC
+-static char assert_buf[128];
+-
+-static int
+-assert_failed (char *a, char *f, int l)
+-{
+-        sprintf(assert_buf,
+-			"ASSERT(%s) failed!\nline %d in %s\n",
+-			a,      /* assertion text */
+-			l,      /* line number */
+-			f);     /* file name */
+-        panic(assert_buf);
+-	return 0;
+-}
+-
+-#undef ASSERT
+-#define ASSERT(EX) { if (!(EX)) assert_failed(# EX, __FILE__, __LINE__); }
+-
+ #define DBG(x...) printk(x)
+-
+ #else /* DEBUG_IOSAPIC */
+-
+ #define DBG(x...)
+-#undef	ASSERT
+-#define ASSERT(EX)
+-
+ #endif /* DEBUG_IOSAPIC */
+ 
+ #ifdef DEBUG_IOSAPIC_IRT
+@@ -233,13 +210,13 @@
+ #define IOSAPIC_IRDT_ENTRY(idx)		(0x10+(idx)*2)
+ #define IOSAPIC_IRDT_ENTRY_HI(idx)	(0x11+(idx)*2)
+ 
+-static inline unsigned int iosapic_read(unsigned long iosapic, unsigned int reg)
++static inline unsigned int iosapic_read(void __iomem *iosapic, unsigned int reg)
+ {
+ 	writel(reg, iosapic + IOSAPIC_REG_SELECT);
+ 	return readl(iosapic + IOSAPIC_REG_WINDOW);
+ }
+ 
+-static inline void iosapic_write(unsigned long iosapic, unsigned int reg, u32 val)
++static inline void iosapic_write(void __iomem *iosapic, unsigned int reg, u32 val)
+ {
+ 	writel(reg, iosapic + IOSAPIC_REG_SELECT);
+ 	writel(val, iosapic + IOSAPIC_REG_WINDOW);
+@@ -256,10 +233,6 @@
+ #define IOSAPIC_FREE(addr, f_type, cnt) kfree((void *)addr)
+ 
+ 
+-#define	IOSAPIC_LOCK(lck)	spin_lock_irqsave(lck, irqflags)
+-#define	IOSAPIC_UNLOCK(lck)	spin_unlock_irqrestore(lck, irqflags)
+-
+-
+ #define IOSAPIC_VERSION_MASK	0x000000ff
+ #define	IOSAPIC_VERSION(ver)	((int) (ver & IOSAPIC_VERSION_MASK))
+ 
+@@ -278,8 +251,7 @@
+ #define IOSAPIC_IRDT_ID_EID_SHIFT              0x10
+ 
+ 
+-static struct iosapic_info *iosapic_list;
+-static spinlock_t iosapic_lock;
++static spinlock_t iosapic_lock = SPIN_LOCK_UNLOCKED;
+ static int iosapic_count;
+ 
+ 
+@@ -297,50 +269,50 @@
+ 
+ 
+ 
+-/*
+-** iosapic_load_irt
+-**
+-** The "Get PCI INT Routing Table Size" option returns the number of 
+-** entries in the PCI interrupt routing table for the cell specified 
+-** in the cell_number argument.  The cell number must be for a cell 
+-** within the caller's protection domain.
+-**
+-** The "Get PCI INT Routing Table" option returns, for the cell 
+-** specified in the cell_number argument, the PCI interrupt routing 
+-** table in the caller allocated memory pointed to by mem_addr.
+-** We assume the IRT only contains entries for I/O SAPIC and
+-** calculate the size based on the size of I/O sapic entries.
+-**
+-** The PCI interrupt routing table entry format is derived from the
+-** IA64 SAL Specification 2.4.   The PCI interrupt routing table defines
+-** the routing of PCI interrupt signals between the PCI device output
+-** "pins" and the IO SAPICs' input "lines" (including core I/O PCI
+-** devices).  This table does NOT include information for devices/slots
+-** behind PCI to PCI bridges. See PCI to PCI Bridge Architecture Spec.
+-** for the architected method of routing of IRQ's behind PPB's.
+-*/
++/**
++ * iosapic_load_irt - Fill in the interrupt routing table
++ * @cell_num: The cell number of the CPU we're currently executing on
++ * @irt: The address to place the new IRT at
++ * @return The number of entries found
++ *
++ * The "Get PCI INT Routing Table Size" option returns the number of 
++ * entries in the PCI interrupt routing table for the cell specified 
++ * in the cell_number argument.  The cell number must be for a cell 
++ * within the caller's protection domain.
++ *
++ * The "Get PCI INT Routing Table" option returns, for the cell 
++ * specified in the cell_number argument, the PCI interrupt routing 
++ * table in the caller allocated memory pointed to by mem_addr.
++ * We assume the IRT only contains entries for I/O SAPIC and
++ * calculate the size based on the size of I/O sapic entries.
++ *
++ * The PCI interrupt routing table entry format is derived from the
++ * IA64 SAL Specification 2.4.   The PCI interrupt routing table defines
++ * the routing of PCI interrupt signals between the PCI device output
++ * "pins" and the IO SAPICs' input "lines" (including core I/O PCI
++ * devices).  This table does NOT include information for devices/slots
++ * behind PCI to PCI bridges. See PCI to PCI Bridge Architecture Spec.
++ * for the architected method of routing of IRQ's behind PPB's.
++ */
+ 
+ 
+-static int __init /* return number of entries as success/fail flag */
++static int __init
+ iosapic_load_irt(unsigned long cell_num, struct irt_entry **irt)
+ {
+ 	long status;              /* PDC return value status */
+ 	struct irt_entry *table;  /* start of interrupt routing tbl */
+ 	unsigned long num_entries = 0UL;
+ 
+-	ASSERT(NULL != irt);
++	BUG_ON(!irt);
+ 
+ 	if (is_pdc_pat()) {
+-
+ 		/* Use pat pdc routine to get interrupt routing table size */
+ 		DBG("calling get_irt_size (cell %ld)\n", cell_num);
+ 		status = pdc_pat_get_irt_size(&num_entries, cell_num);
+ 		DBG("get_irt_size: %ld\n", status);
+ 
+-		ASSERT(status == PDC_OK);
+-
+-		/* save the number of entries in the table */
+-		ASSERT(0UL != num_entries);
++		BUG_ON(status != PDC_OK);
++		BUG_ON(num_entries == 0);
+ 
+ 		/*
+ 		** allocate memory for interrupt routing table
+@@ -357,36 +329,36 @@
+ 		/* get PCI INT routing table */
+ 		status = pdc_pat_get_irt(table, cell_num);
+ 		DBG("pdc_pat_get_irt: %ld\n", status);
+-		ASSERT(status == PDC_OK);
++		WARN_ON(status != PDC_OK);
+ 	} else {
+ 		/*
+ 		** C3000/J5000 (and similar) platforms with Sprockets PDC
+ 		** will return exactly one IRT for all iosapics.
+ 		** So if we have one, don't need to get it again.
+ 		*/
+-		if (NULL != irt_cell)
++		if (irt_cell)
+ 			return 0;
+ 
+ 		/* Should be using the Elroy's HPA, but it's ignored anyway */
+ 		status = pdc_pci_irt_size(&num_entries, 0);
+ 		DBG("pdc_pci_irt_size: %ld\n", status);
+ 
+-		if (PDC_OK != status) {
++		if (status != PDC_OK) {
+ 			/* Not a "legacy" system with I/O SAPIC either */
+ 			return 0;
+ 		}
+ 
+-		ASSERT(0UL != num_entries);
++		BUG_ON(num_entries == 0);
+ 
+ 		table = IOSAPIC_KALLOC(struct irt_entry, num_entries);
+-		if (table == NULL) {
++		if (!table) {
+ 			printk(KERN_WARNING MODULE_NAME ": read_irt : can not alloc mem for IRT\n");
+ 			return 0;
+ 		}
+ 
+ 		/* HPA ignored by this call too. */
+ 		status = pdc_pci_irt(num_entries, 0, table);
+-		ASSERT(PDC_OK == status);
++		BUG_ON(status != PDC_OK);
+ 	}
+ 
+ 	/* return interrupt table address */
+@@ -420,16 +392,10 @@
+ 
+ 
+ 
+-void __init
+-iosapic_init(void)
++void __init iosapic_init(void)
+ {
+ 	unsigned long cell = 0;
+ 
+-	/* init global data */
+-	iosapic_lock = SPIN_LOCK_UNLOCKED;
+-        iosapic_list = (struct iosapic_info *) NULL;
+-	iosapic_count = 0;
+-
+ 	DBG("iosapic_init()\n");
+ 
+ #ifdef __LP64__
+@@ -444,11 +410,9 @@
+ 	}
+ #endif
+ 
+-	/*
+-	**  get IRT for this cell.
+-	*/
+-	irt_num_entry =  iosapic_load_irt(cell, &irt_cell);
+-	if (0 == irt_num_entry)
++	/* get interrupt routing table for this cell */
++	irt_num_entry = iosapic_load_irt(cell, &irt_cell);
++	if (irt_num_entry == 0)
+ 		irt_cell = NULL;	/* old PDC w/o iosapic */
+ }
+ 
+@@ -509,7 +473,7 @@
+ 		return i;
+ 	}
+ 
+-	printk(KERN_WARNING MODULE_NAME ": 0x%lx : no IRT entry for slot %d, pin %d\n",
++	printk(KERN_WARNING MODULE_NAME ": 0x%p : no IRT entry for slot %d, pin %d\n",
+ 			isi->isi_hpa, slot, intr_pin);
+ 	return NULL;
+ }
+@@ -536,10 +500,10 @@
+ 
+ 	pci_read_config_byte(pcidev, PCI_INTERRUPT_PIN, &intr_pin);
+ 
+-	DBG_IRT("iosapic_xlate_pin() SLOT %d pin %d\n",
+-		PCI_SLOT(pcidev->devfn), intr_pin);
++	DBG_IRT("iosapic_xlate_pin(%s) SLOT %d pin %d\n",
++		pcidev->slot_name, PCI_SLOT(pcidev->devfn), intr_pin);
+ 
+-	if (0 == intr_pin) {
++	if (intr_pin == 0) {
+ 		/* The device does NOT support/use IRQ lines.  */
+ 		return NULL;
+ 	}
+@@ -681,7 +645,6 @@
+ 	pcidev->irq = isi->isi_region->data.irqbase + isi_line;
+ 
+ 	/* get vector info for this input line */
+-	ASSERT(NULL != isi->isi_vector);
+ 	vi = &(isi->isi_vector[isi_line]);
+ 	DBG_IRT("iosapic_fixup_irq:  line %d vi 0x%p\n", isi_line, vi);
+ 
+@@ -706,15 +669,14 @@
+ 	/* enable_irq() will use txn_* to program IRdT */
+ 	vi->txn_addr = txn_alloc_addr(vi->txn_irq);
+ 	vi->txn_data = txn_alloc_data(vi->txn_irq, 8);
+-        ASSERT(vi->txn_data < 256);  /* matches 8 above */
++        WARN_ON(vi->txn_data >= 256);  /* matches 8 above */
+ 
+ 	tmp = request_irq(vi->txn_irq, iosapic_interrupt, 0,
+ 						vi->name, vi);
+-	ASSERT(tmp == 0);
++	WARN_ON(tmp != 0);
+ 
+ 	vi->eoi_addr = (u32 *) (isi->isi_hpa + IOSAPIC_REG_EOI);
+ 	vi->eoi_data = cpu_to_le32(vi->txn_data);
+-	ASSERT(NULL != isi->isi_region);
+ 
+ 	DBG_IRT("iosapic_fixup_irq() %d:%d %x %x line %d irq %d\n",
+ 		PCI_SLOT(pcidev->devfn), PCI_FUNC(pcidev->irq),
+@@ -740,8 +702,6 @@
+ {
+ 	struct iosapic_info *isp = vi->iosapic;
+ 
+-	ASSERT(NULL != isp);
+-	ASSERT(0 != isp->isi_hpa);
+ 	DBG_IRT("iosapic_wr_irt_entry(): irq %d hpa %p 0x%x 0x%x\n",
+ 		vi->irqline,
+ 		isp->isi_hpa,
+@@ -769,7 +729,6 @@
+ {
+ 	u32 mode = 0;
+ 	struct irt_entry *p = vi->irte;
+-	ASSERT(NULL != vi->irte);
+ 
+ 	if ((p->polarity_trigger & IRT_PO_MASK) == IRT_ACTIVE_LO)
+ 		mode |= IOSAPIC_IRDT_PO_LOW;
+@@ -782,7 +741,6 @@
+ 	** PA doesn't support EXTINT or LPRIO bits.
+ 	*/
+ 
+-	ASSERT(vi->txn_data);
+ 	*dp0 = mode | (u32) vi->txn_data;
+ 
+ 	/*
+@@ -813,13 +771,13 @@
+ static void
+ iosapic_disable_irq(void *irq_dev, int irq)
+ {
+-	ulong irqflags;
++	unsigned long flags;
+ 	struct vector_info *vi = &(((struct vector_info *) irq_dev)[irq]);
+ 	u32 d0, d1;
+ 
+-	ASSERT(NULL != vi);
++	BUG_ON(!vi);
+ 
+-	IOSAPIC_LOCK(&iosapic_lock);
++	spin_lock_irqsave(&iosapic_lock, flags);
+ 
+ #ifdef REVISIT_DESIGN_ISSUE
+ /* 
+@@ -847,7 +805,7 @@
+ 	d0 |= IOSAPIC_IRDT_ENABLE;
+ 	iosapic_wr_irt_entry(vi, d0, d1);
+ 
+-	IOSAPIC_UNLOCK(&iosapic_lock);
++	spin_unlock_irqrestore(&iosapic_lock, flags);
+ 
+ 	/* disable ISR for parent */
+ 	disable_irq(vi->txn_irq);
+@@ -860,12 +818,9 @@
+ 	struct vector_info *vi = &(((struct vector_info *) dev)[irq]);
+ 	u32 d0, d1;
+ 
+-	ASSERT(NULL != vi);
+-	ASSERT(NULL != vi->irte);
+-
+ 	/* data is initialized by fixup_irq */
+-	ASSERT(0 < vi->txn_irq);
+-	ASSERT(0UL != vi->txn_data);
++	WARN_ON(vi->txn_irq  == 0);
++	WARN_ON(vi->txn_data == 0UL);
+ 
+ 	iosapic_set_irt_data(vi, &d0, &d1);
+ 	iosapic_wr_irt_entry(vi, d0, d1);
+@@ -901,25 +856,9 @@
+ }
+ 
+ 
+-static void
+-iosapic_mask_irq(void *dev, int irq)
+-{
+-	BUG();
+-}
+-
+-
+-static void
+-iosapic_unmask_irq(void *dev, int irq)
+-{
+-	BUG();
+-}
+-
+-
+ static struct irq_region_ops iosapic_irq_ops = {
+ 	.disable_irq =	iosapic_disable_irq,
+ 	.enable_irq =	iosapic_enable_irq,
+-	.mask_irq =	iosapic_mask_irq,
+-	.unmask_irq =	iosapic_unmask_irq
+ };
+ 
+ 
+@@ -929,9 +868,6 @@
+ static unsigned int
+ iosapic_rd_version(struct iosapic_info *isi)
+ {
+-	ASSERT(isi);
+-	ASSERT(isi->isi_hpa);
+-
+ 	return iosapic_read(isi->isi_hpa, IOSAPIC_REG_VERSION);
+ }
+ 
+@@ -962,9 +898,8 @@
+ 	** Search the IRT and ignore iosapic's which aren't
+ 	** in the IRT.
+ 	*/
+-	ASSERT(NULL != irte);	/* always have built-in devices */
+ 	for (cnt=0; cnt < irt_num_entry; cnt++, irte++) {
+-		ASSERT(IRT_IOSAPIC_TYPE == irte->entry_type);
++		WARN_ON(IRT_IOSAPIC_TYPE != irte->entry_type);
+ 		/*
+ 		** We need sign extension of the hpa on 32-bit kernels.
+ 		** The address in the IRT is *always* 64 bit and really
+@@ -974,8 +909,10 @@
+ 			break;
+ 	}
+ 
+-	if (cnt  >= irt_num_entry)
++	if (cnt  >= irt_num_entry) {
++		DBG("iosapic_register() ignoring 0x%lx (NOT FOUND)\n", hpa);
+ 		return (NULL);
++	}
+ 
+ 	if ((isi = IOSAPIC_KALLOC(struct iosapic_info, 1)) == NULL) {
+ 		BUG();
+@@ -984,7 +921,7 @@
+ 
+ 	memset(isi, 0, sizeof(struct iosapic_info));
+ 
+-	isi->isi_hpa         = hpa;
++	isi->isi_hpa         = (void __iomem *) hpa;
+ 	isi->isi_version     = iosapic_rd_version(isi);
+ 	isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1;
+ 
+@@ -1012,7 +949,7 @@
+ 				&iosapic_irq_ops, isi->isi_name,
+ 				(void *) isi->isi_vector);
+ 
+-	ASSERT(NULL != isi->isi_region);
++	WARN_ON(isi->isi_region == NULL);
+ 	return ((void *) isi);
+ }
+ 
+@@ -1024,7 +961,6 @@
+ {
+ 	unsigned int i, *irp = (unsigned int *) irt;
+ 
+-	ASSERT(NULL != irt);
+ 
+ 	printk(KERN_DEBUG MODULE_NAME ": Interrupt Routing Table (%lx entries)\n", num_entry);
+ 
+@@ -1038,8 +974,6 @@
+ static void
+ iosapic_prt_vi(struct vector_info *vi)
+ {
+-	ASSERT(NULL != vi);
+-
+ 	printk(KERN_DEBUG MODULE_NAME ": vector_info[%d] is at %p\n", vi->irqline, vi);
+ 	printk(KERN_DEBUG "\t\tstatus:	 %.4x\n", vi->status);
+ 	printk(KERN_DEBUG "\t\ttxn_irq:  %d\n",  vi->txn_irq);
+@@ -1053,7 +987,6 @@
+ static void
+ iosapic_prt_isi(struct iosapic_info *isi)
+ {
+-	ASSERT(NULL != isi);
+ 	printk(KERN_DEBUG MODULE_NAME ": io_sapic_info at %p\n", isi);
+ 	printk(KERN_DEBUG "\t\tisi_hpa:       %lx\n", isi->isi_hpa);
+ 	printk(KERN_DEBUG "\t\tisi_status:     %x\n", isi->isi_status);
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/iosapic_private.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/iosapic_private.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/iosapic_private.h	2005-01-21 12:16:45.000000000 -0500
+@@ -145,7 +145,7 @@
+ 
+ struct iosapic_info {
+ 	struct iosapic_info  *isi_next;      /* list of I/O SAPIC          */
+-	unsigned long	     isi_hpa;	     /* physical base address */
++	void __iomem         *isi_hpa;	     /* physical base address */
+ 	struct irq_region    *isi_region;    /* each I/O SAPIC is one region */
+ 	struct vector_info   *isi_vector;    /* IRdT (IRQ line) array  */
+ 	int                  isi_num_vectors; /* size of IRdT array */
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/lasi.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/lasi.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/lasi.c	2005-01-21 12:16:45.000000000 -0500
+@@ -142,7 +142,7 @@
+ 		break;
+ 	}
+ 
+-	register_led_driver(DISPLAY_MODEL_LASI, LED_CMD_REG_NONE, (char *)datareg);
++	register_led_driver(DISPLAY_MODEL_LASI, LED_CMD_REG_NONE, datareg);
+ }
+ #endif
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/lba_pci.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/lba_pci.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/lba_pci.c	2005-01-21 12:16:45.000000000 -0500
+@@ -90,18 +90,6 @@
+ #define DBG_PAT(x...)
+ #endif
+ 
+-#ifdef DEBUG_LBA
+-#undef ASSERT
+-#define ASSERT(expr) \
+-	if(!(expr)) { \
+-		printk("\n%s:%d: Assertion " #expr " failed!\n", \
+-				__FILE__, __LINE__); \
+-		panic(#expr); \
+-	}
+-#else
+-#define ASSERT(expr)
+-#endif
+-
+ 
+ /*
+ ** Config accessor functions only pass in the 8-bit bus number and not
+@@ -185,7 +173,7 @@
+ #define LBA_IOSAPIC_BASE	0x800 /* Offset of IRQ logic */
+ 
+ /* non-postable I/O port space, densely packed */
+-#define LBA_PORT_BASE	(PCI_F_EXTEND | 0xfee00000UL)
++#define LBA_PORT_BASE	((void __iomem *)(PCI_F_EXTEND | 0xfee00000UL))
+ 
+ #define ELROY_HVERS	0x782
+ #define MERCURY_HVERS	0x783
+@@ -262,13 +250,13 @@
+ #define WRITE_U16(value, addr) __raw_writew(value, addr)
+ #define WRITE_U32(value, addr) __raw_writel(value, addr)
+ 
+-#define READ_REG8(addr)  readb(addr)
+-#define READ_REG16(addr) readw(addr)
+-#define READ_REG32(addr) readl(addr)
+-#define READ_REG64(addr) readq(addr)
+-#define WRITE_REG8(value, addr)  writeb(value, addr)
+-#define WRITE_REG16(value, addr) writew(value, addr)
+-#define WRITE_REG32(value, addr) writel(value, addr)
++#define READ_REG8(addr)  readb((void __iomem *) addr)
++#define READ_REG16(addr) readw((void __iomem *) addr)
++#define READ_REG32(addr) readl((void __iomem *) addr)
++#define READ_REG64(addr) readq((void __iomem *) addr)
++#define WRITE_REG8(value, addr)  writeb(value, (void __iomem *) addr)
++#define WRITE_REG16(value, addr) writew(value, (void __iomem *) addr)
++#define WRITE_REG32(value, addr) writel(value, (void __iomem *) addr)
+ 
+ 
+ #define LBA_CFG_TOK(bus,dfn) ((u32) ((bus)<<16 | (dfn)<<8))
+@@ -321,10 +309,6 @@
+ 	u8 first_bus = d->hba.hba_bus->secondary;
+ 	u8 last_sub_bus = d->hba.hba_bus->subordinate;
+ 
+-	ASSERT(bus >= first_bus);
+-	ASSERT(bus <= last_sub_bus);
+-	ASSERT((bus - first_bus) < LBA_MAX_NUM_BUSES);
+-
+ 	if ((bus < first_bus) ||
+ 	    (bus > last_sub_bus) ||
+ 	    ((bus - first_bus) >= LBA_MAX_NUM_BUSES))
+@@ -387,7 +371,7 @@
+      * Make sure write has completed before proceeding further,		\
+      * i.e. before setting clear enable.				\
+      */									\
+-    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR);		\
++    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR);	\
+ }
+ 
+ 
+@@ -443,7 +427,7 @@
+ 
+ #define LBA_CFG_TR4_ADDR_SETUP(d, addr) \
+     WRITE_REG32(((addr) & ~3), (d)->hba.base_addr + LBA_PCI_CFG_ADDR); \
+-    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR)
++    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR);
+ 
+ #define LBA_CFG_ADDR_SETUP(d, addr) {				\
+     WRITE_REG32(((addr) & ~3), (d)->hba.base_addr + LBA_PCI_CFG_ADDR);	\
+@@ -454,7 +438,7 @@
+      * Read address register to ensure that LBA is the bus master,	\
+      * which implies that DMA traffic has stopped when DMA arb is off.	\
+      */									\
+-    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR);		\
++    lba_t32 = READ_REG32((d)->hba.base_addr + LBA_PCI_CFG_ADDR);	\
+ }
+ 
+ 
+@@ -480,39 +464,23 @@
+ static unsigned int
+ lba_rd_cfg(struct lba_device *d, u32 tok, u8 reg, u32 size)
+ {
+-	u32 data = ~0;
++	u32 data = ~0U;
+ 	int error = 0;
+ 	u32 arb_mask = 0;	/* used by LBA_CFG_SETUP/RESTORE */
+ 	u32 error_config = 0;	/* used by LBA_CFG_SETUP/RESTORE */
+ 	u32 status_control = 0;	/* used by LBA_CFG_SETUP/RESTORE */
+ 
+-	ASSERT((size == sizeof(u8)) ||
+-		(size == sizeof(u16)) ||
+-		(size == sizeof(u32)));
+-
+-	if ((size != sizeof(u8)) &&
+-		(size != sizeof(u16)) &&
+-		(size != sizeof(u32))) {
+-		return(data);
+-	}
+-
+ 	LBA_CFG_SETUP(d, tok);
+ 	LBA_CFG_PROBE(d, tok);
+ 	LBA_CFG_MASTER_ABORT_CHECK(d, d->hba.base_addr, tok, error);
+ 	if (!error) {
++		void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
++
+ 		LBA_CFG_ADDR_SETUP(d, tok | reg);
+ 		switch (size) {
+-		case sizeof(u8):
+-			data = (u32) READ_REG8(d->hba.base_addr + LBA_PCI_CFG_DATA + (reg & 3));
+-			break;
+-		case sizeof(u16):
+-			data = (u32) READ_REG16(d->hba.base_addr + LBA_PCI_CFG_DATA + (reg & 2));
+-			break;
+-		case sizeof(u32):
+-			data = READ_REG32(d->hba.base_addr + LBA_PCI_CFG_DATA);
+-			break;
+-		default:
+-			break; /* leave data as -1 */
++		case 1: data = (u32) READ_REG8(data_reg + (reg & 3)); break;
++		case 2: data = (u32) READ_REG16(data_reg+ (reg & 2)); break;
++		case 4: data = READ_REG32(data_reg); break;
+ 		}
+ 	}
+ 	LBA_CFG_RESTORE(d, d->hba.base_addr);
+@@ -520,130 +488,12 @@
+ }
+ 
+ 
+-#if USE_PAT_PDC_CFG
+-
+-/* PAT PDC needs to be relocated in order to perform properly.
+- * tg3 driver does about 1600 PCI Cfg writes to initialize the card.
+- * On 440Mhz A500, PDC takes ~20ms/write, or ~30 seconds per card.
+- * On PA8800, that takes about 5ms/write (8 seconds).
+- * But relocating PDC will burn at least 4MB of RAM.
+- * Easier/Cheaper to just maintain our own mercury cfg ops.
+- */
+-#define pat_cfg_addr(bus, devfn, addr) (((bus) << 16) | ((devfn) << 8) | (addr))
+-
+-static int pat_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
+-{
+-	int tok = pat_cfg_addr(bus->number, devfn, pos);
+-	u32 tmp;
+-	int ret = pdc_pat_io_pci_cfg_read(tok, size, &tmp);
+-
+-	DBG_CFG("%s(%d:%d.%d+0x%02x) -> 0x%x %d\n", __FUNCTION__, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), pos, tmp, ret);
+-
+-	switch (size) {
+-		case 1: *data = (u8)  tmp; return (tmp == (u8)  ~0);
+-		case 2: *data = (u16) tmp; return (tmp == (u16) ~0);
+-		case 4: *data = (u32) tmp; return (tmp == (u32) ~0);
+-	}
+-	*data = ~0;
+-	return (ret);
+-}
+-
+-static int pat_cfg_write(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 data)
+-{
+-	int tok = pat_cfg_addr(bus->number, devfn, pos);
+-	int ret = pdc_pat_io_pci_cfg_write(tok, size, data);
+-
+-	DBG_CFG("%s(%d:%d.%d+0x%02x, 0x%lx/%d)\n", __FUNCTION__, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), pos, data, size);
+-	return (ret);
+-}
+-
+-static struct pci_ops pat_cfg_ops = {
+-	.read =		pat_cfg_read,
+-	.write =	pat_cfg_write,
+-};
+-#endif
+-
+-
+-#ifdef CONFIG_PARISC64
+-static int mercury_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
+-{
+-	struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
+-	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+-	u32 tok = LBA_CFG_TOK(local_bus, devfn);
+-
+-	/* Basic Algorithm
+-	** Should only get here on fully working LBA rev.
+-	** This is how simple the original LBA code should have been.
+-	*/
+-	LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
+-	switch(size) {
+-	case 1: *(u8 *)  data = READ_REG8(d->hba.base_addr + LBA_PCI_CFG_DATA
+-							+ (pos & 3));
+-		DBG_CFG("%s(%x+%2x) -> 0x%x (c)\n", __FUNCTION__, tok, pos,
+-				*(u8 *)data);
+-		return(*(u8 *)data == (u8) ~0U);
+-	case 2: *(u16 *) data = READ_REG16(d->hba.base_addr + LBA_PCI_CFG_DATA
+-							+ (pos & 2));
+-		DBG_CFG("%s(%x+%2x) -> 0x%x (c)\n", __FUNCTION__, tok, pos,
+-				*(u16 *)data);
+-		return(*(u16 *)data == (u16) ~0U);
+-	case 4: *(u32 *) data = READ_REG32(d->hba.base_addr + LBA_PCI_CFG_DATA);
+-		DBG_CFG("%s(%x+%2x) -> 0x%x (c)\n", __FUNCTION__, tok, pos, *data);
+-		return(*data == ~0U);
+-	}
+-	DBG_CFG("%s(%x+%2x) -> bad size (%d)\n", __FUNCTION__, tok, pos, size);
+-	*data = ~0U;
+-	return(!PCIBIOS_SUCCESSFUL);	/* failed */
+-}
+-
+-/*
+- * LBA 4.0 config write code implements non-postable semantics
+- * by doing a read of CONFIG ADDR after the write.
+- */
+-
+-static int mercury_cfg_write(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 data)
+-{
+-	struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
+-	unsigned long data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
+-	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+-	u32 tok = LBA_CFG_TOK(local_bus,devfn);
+-
+- 	ASSERT((tok & 0xff) == 0);
+-	ASSERT(pos < 0x100);
+-
+-	DBG_CFG("%s(%x+%2x) <- 0x%x (c)\n", __FUNCTION__, tok, pos, data);
+-
+-	/* Basic Algorithm */
+-	LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
+-	switch(size) {
+-	case 1:		WRITE_REG8 (data, data_reg + (pos & 3)); break;
+-	case 2:		WRITE_REG16(data, data_reg + (pos & 2)); break;
+-	case 4:		WRITE_REG32(data, data_reg);             break;
+-	default: 
+-		DBG_CFG("%s(%x+%2x) WTF! size %d\n", __FUNCTION__, tok, pos,
+-				size);
+-	}
+-
+-	/* flush posted write */
+-	lba_t32 = READ_U32(d->hba.base_addr + LBA_PCI_CFG_ADDR);
+-	return PCIBIOS_SUCCESSFUL;
+-}
+-
+-
+-static struct pci_ops mercury_cfg_ops = {
+-	.read =		mercury_cfg_read,
+-	.write =	mercury_cfg_write,
+-};
+-#else
+-#define mercury_cfg_ops lba_cfg_ops
+-#endif /* CONFIG_PARISC64 */
+-
+-
+ static int lba_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
+ {
+ 	struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
+ 	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+ 	u32 tok = LBA_CFG_TOK(local_bus, devfn);
++	void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
+ 
+ /* FIXME: B2K/C3600 workaround is always use old method... */
+ 	/* if (!LBA_TR4PLUS(d) && !LBA_SKIP_PROBE(d)) */ {
+@@ -668,12 +518,9 @@
+ 	*/
+ 	LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
+ 	switch(size) {
+-	case 1: *(u8 *)  data = READ_REG8(d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 3));
+-		break;
+-	case 2: *(u16 *) data = READ_REG16(d->hba.base_addr + LBA_PCI_CFG_DATA + (pos & 2));
+-		break;
+-	case 4: *(u32 *) data = READ_REG32(d->hba.base_addr + LBA_PCI_CFG_DATA);
+-	   break;
++	case 1: *data = READ_REG8 (data_reg + (pos & 3)); break;
++	case 2: *data = READ_REG16(data_reg + (pos & 2)); break;
++	case 4: *data = READ_REG32(data_reg); break;
+ 	}
+ 	DBG_CFG("%s(%x+%2x) -> 0x%x (c)\n", __FUNCTION__, tok, pos, *data);
+ 	return(*data == ~0U);
+@@ -687,31 +534,14 @@
+ 	u32 arb_mask = 0;
+ 	u32 error_config = 0;
+ 	u32 status_control = 0;
+-
+-	ASSERT((size == sizeof(u8)) ||
+-		(size == sizeof(u16)) ||
+-		(size == sizeof(u32)));
+-
+-	if ((size != sizeof(u8)) &&
+-		(size != sizeof(u16)) &&
+-		(size != sizeof(u32))) {
+-			return;
+-	}
++	void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
+ 
+ 	LBA_CFG_SETUP(d, tok);
+ 	LBA_CFG_ADDR_SETUP(d, tok | reg);
+ 	switch (size) {
+-	case sizeof(u8):
+-		WRITE_REG8((u8) data, d->hba.base_addr + LBA_PCI_CFG_DATA + (reg&3));
+-		break;
+-	case sizeof(u16):
+-		WRITE_REG16((u8) data, d->hba.base_addr + LBA_PCI_CFG_DATA +(reg&2));
+-		break;
+-	case sizeof(u32):
+-		WRITE_REG32(data, d->hba.base_addr + LBA_PCI_CFG_DATA);
+-		break;
+-	default:
+-		break;
++	case 1: WRITE_REG8 (data, data_reg + (reg & 3)); break;
++	case 2: WRITE_REG16(data, data_reg + (reg & 2)); break;
++	case 4: WRITE_REG32(data, data_reg);             break;
+ 	}
+ 	LBA_CFG_MASTER_ABORT_CHECK(d, d->hba.base_addr, tok, error);
+ 	LBA_CFG_RESTORE(d, d->hba.base_addr);
+@@ -729,8 +559,8 @@
+ 	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
+ 	u32 tok = LBA_CFG_TOK(local_bus,devfn);
+ 
+- 	ASSERT((tok & 0xff) == 0);
+-	ASSERT(pos < 0x100);
++ 	BUG_ON((tok & 0xff) != 0);
++	WARN_ON(pos >= 0x100);
+ 
+ 	if (!LBA_TR4PLUS(d) && !LBA_SKIP_PROBE(d)) {
+ 		/* Original Workaround */
+@@ -768,6 +598,78 @@
+ };
+ 
+ 
++#ifdef CONFIG_PARISC64
++static int mercury_cfg_read(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 *data)
++{
++	struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
++	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
++	u32 tok = LBA_CFG_TOK(local_bus, devfn);
++	void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
++
++	*data = 0U;
++
++	/* Basic Algorithm
++	** Should only get here on fully working LBA rev.
++	** This is how simple the original LBA code should have been.
++	*/
++	LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
++	switch(size) {
++	case 1: *data = READ_REG8 (data_reg + (pos & 3)); break;
++	case 2: *data = READ_REG16(data_reg + (pos & 2)); break;
++	case 4: *data = READ_REG32(data_reg);             break;
++	default:
++		DBG_CFG("%s(%x+%2x) -> bad size (%d)\n", __FUNCTION__, tok, pos, size);
++		return(!PCIBIOS_SUCCESSFUL);	/* failed */
++	}
++
++	DBG_CFG("mercury_cfg_read(%x+%2x) -> 0x%x\n", tok, pos, *data);
++	return(*data == ~0U);
++}
++
++/*
++ * LBA 4.0 config write code implements non-postable semantics
++ * by doing a read of CONFIG ADDR after the write.
++ */
++
++static int mercury_cfg_write(struct pci_bus *bus, unsigned int devfn, int pos, int size, u32 data)
++{
++	struct lba_device *d = LBA_DEV(parisc_walk_tree(bus->bridge));
++	void __iomem *data_reg = d->hba.base_addr + LBA_PCI_CFG_DATA;
++	u32 local_bus = (bus->parent == NULL) ? 0 : bus->secondary;
++	u32 tok = LBA_CFG_TOK(local_bus,devfn);
++
++ 	BUG_ON((tok & 0xff) != 0);
++	WARN_ON(pos >= 0x100);
++
++	DBG_CFG("%s(%x+%2x) <- 0x%x (c)\n", __FUNCTION__, tok, pos, data);
++
++	/* Basic Algorithm */
++	LBA_CFG_TR4_ADDR_SETUP(d, tok | pos);
++	switch(size) {
++	case 1:		WRITE_REG8 (data, data_reg + (pos & 3)); break;
++	case 2:		WRITE_REG16(data, data_reg + (pos & 2)); break;
++	case 4:		WRITE_REG32(data, data_reg);             break;
++	default: 
++		DBG_CFG("%s(%x+%2x) WTF! size %d\n", __FUNCTION__, tok, pos, size);
++		return !PCIBIOS_SUCCESSFUL;
++
++	}
++
++	/* flush posted write */
++	lba_t32 = READ_U32(d->hba.base_addr + LBA_PCI_CFG_ADDR);
++	return PCIBIOS_SUCCESSFUL;
++}
++
++
++static struct pci_ops mercury_cfg_ops = {
++	.read =		mercury_cfg_read,
++	.write =	mercury_cfg_write,
++};
++#else
++#define mercury_cfg_ops lba_cfg_ops
++#endif /* CONFIG_PARISC64 */
++
++
+ static void
+ lba_bios_init(void)
+ {
+@@ -837,7 +739,7 @@
+ 	struct lba_device *ldev = LBA_DEV(parisc_walk_tree(bus->bridge));
+ 	int lba_portbase = HBA_PORT_BASE(ldev->hba.hba_num);
+ 
+-	DBG("lba_fixup_bus(0x%p) bus %d sysdata 0x%p\n",
++	DBG("lba_fixup_bus(0x%p) bus %d platform_data 0x%p\n",
+ 		bus, bus->secondary, bus->bridge->platform_data);
+ 
+ 	/*
+@@ -1077,7 +979,6 @@
+ #define LBA_PORT_OUT(size, mask) \
+ static void lba_astro_out##size (struct pci_hba_data *d, u16 addr, u##size val) \
+ { \
+-	ASSERT(d != NULL); \
+ 	DBG_PORT("%s(0x%p, 0x%x, 0x%x)\n", __FUNCTION__, d, addr, val); \
+ 	WRITE_REG##size(val, LBA_PORT_BASE + addr); \
+ 	if (LBA_DEV(d)->hw_rev < 3) \
+@@ -1308,7 +1209,7 @@
+ 	** PCI bus walk *should* end up with the same result.
+ 	** FIXME: But we don't have sanity checks in PCI or LBA.
+ 	*/
+-	lba_num = READ_REG32(pa_dev->hpa + LBA_FW_SCRATCH);
++	lba_num = READ_REG32((void __iomem *) pa_dev->hpa + LBA_FW_SCRATCH);
+ 	r = &(lba_dev->hba.bus_num);
+ 	r->name = "LBA PCI Busses";
+ 	r->start = lba_num & 0xff;
+@@ -1389,7 +1290,7 @@
+ 	 *
+ 	 * All is well now.
+ 	 */
+-	r->start = (long) READ_REG32(pa_dev->hpa + LBA_LMMIO_BASE);
++	r->start = (long) READ_REG32((void __iomem *) pa_dev->hpa + LBA_LMMIO_BASE);
+ 	if (r->start & 1) {
+ 		unsigned long rsize;
+ 
+@@ -1397,7 +1298,7 @@
+ 		/* mmio_mask also clears Enable bit */
+ 		r->start &= mmio_mask;
+ 		r->start = PCI_HOST_ADDR(HBA_DATA(lba_dev), r->start);
+-		rsize = ~ READ_REG32(pa_dev->hpa + LBA_LMMIO_MASK);
++		rsize = ~ READ_REG32((void __iomem *) pa_dev->hpa + LBA_LMMIO_MASK);
+ 
+ 		/*
+ 		** Each rope only gets part of the distributed range.
+@@ -1435,7 +1336,7 @@
+ 	/* See comment which precedes call to sba_directed_lmmio() */
+ 	sba_directed_lmmio(pa_dev, r);
+ #else
+-	r->start = READ_REG32(pa_dev->hpa + LBA_ELMMIO_BASE);
++	r->start = READ_REG32((void __iomem *) pa_dev->hpa + LBA_ELMMIO_BASE);
+ 
+ 	if (r->start & 1) {
+ 		unsigned long rsize;
+@@ -1443,7 +1344,7 @@
+ 		/* mmio_mask also clears Enable bit */
+ 		r->start &= mmio_mask;
+ 		r->start = PCI_HOST_ADDR(HBA_DATA(lba_dev), r->start);
+-		rsize = READ_REG32(pa_dev->hpa + LBA_ELMMIO_MASK);
++		rsize = READ_REG32((void __iomem *) pa_dev->hpa + LBA_ELMMIO_MASK);
+ 		r->end = r->start + ~rsize;
+ 	}
+ #endif
+@@ -1453,8 +1354,8 @@
+ 					(int) lba_dev->hba.bus_num.start);
+ 	r->name  = lba_dev->hba.io_name;
+ 	r->flags = IORESOURCE_IO;
+-	r->start = READ_REG32(pa_dev->hpa + LBA_IOS_BASE) & ~1L;
+-	r->end   = r->start + (READ_REG32(pa_dev->hpa + LBA_IOS_MASK) ^ (HBA_PORT_SPACE_SIZE - 1));
++	r->start = READ_REG32((void __iomem *) pa_dev->hpa + LBA_IOS_BASE) & ~1L;
++	r->end   = r->start + (READ_REG32((void __iomem *) pa_dev->hpa + LBA_IOS_MASK) ^ (HBA_PORT_SPACE_SIZE - 1));
+ 
+ 	/* Virtualize the I/O Port space ranges */
+ 	lba_num = HBA_PORT_BASE(lba_dev->hba.hba_num);
+@@ -1565,7 +1466,7 @@
+ {
+ 	pci_bios = &lba_bios_ops;
+ 	pcibios_register_hba(HBA_DATA(lba_dev));
+-	lba_dev->lba_lock = SPIN_LOCK_UNLOCKED;	
++	spin_lock_init(&lba_dev->lba_lock);
+ 
+ 	/*
+ 	** Set flags which depend on hw_rev
+@@ -1592,7 +1493,7 @@
+ 	char *version;
+ 
+ 	/* Read HW Rev First */
+-	func_class = READ_REG32(dev->hpa + LBA_FCLASS);
++	func_class = READ_REG32((void __iomem *) dev->hpa + LBA_FCLASS);
+ 
+ 	if (IS_ELROY(dev)) {	
+ 		func_class &= 0xf;
+@@ -1652,7 +1553,7 @@
+ 	*/
+ 	lba_dev->hw_rev = func_class;
+ 
+-	lba_dev->hba.base_addr = dev->hpa;  /* faster access */
++	lba_dev->hba.base_addr = (void __iomem *) dev->hpa;  /* faster access */
+ 	lba_dev->hba.dev = dev;
+ 	lba_dev->iosapic_obj = tmp_obj;  /* save interrupt handle */
+ 	lba_dev->hba.iommu = sba_get_iommu(dev);  /* get iommu data */
+@@ -1751,12 +1652,13 @@
+ void
+ lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)
+ {
+-	unsigned long base_addr = lba->hpa;
++	void __iomem * base_addr = (void __iomem *) lba->hpa;
+ 
+ 	imask <<= 2;	/* adjust for hints - 2 more bits */
+ 
+-	ASSERT((ibase & 0x003fffff) == 0);
+-	ASSERT((imask & 0x003fffff) == 0);
++	/* Make sure we aren't trying to set bits that aren't writeable. */
++	WARN_ON((ibase & 0x001fffff) != 0);
++	WARN_ON((imask & 0x001fffff) != 0);
+ 	
+ 	DBG("%s() ibase 0x%x imask 0x%x\n", __FUNCTION__, ibase, imask);
+ 	WRITE_REG32( imask, base_addr + LBA_IMASK);
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/led.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/led.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/led.c	2005-01-21 12:16:45.000000000 -0500
+@@ -77,8 +77,8 @@
+ struct pdc_chassis_lcd_info_ret_block {
+ 	unsigned long model:16;		/* DISPLAY_MODEL_XXXX */
+ 	unsigned long lcd_width:16;	/* width of the LCD in chars (DISPLAY_MODEL_LCD only) */
+-	char *lcd_cmd_reg_addr;		/* ptr to LCD cmd-register & data ptr for LED */
+-	char *lcd_data_reg_addr;	/* ptr to LCD data-register (LCD only) */
++	unsigned long lcd_cmd_reg_addr;	/* ptr to LCD cmd-register & data ptr for LED */
++	unsigned long lcd_data_reg_addr; /* ptr to LCD data-register (LCD only) */
+ 	unsigned int min_cmd_delay;	/* delay in uS after cmd-write (LCD only) */
+ 	unsigned char reset_cmd1;	/* command #1 for writing LCD string (LCD only) */
+ 	unsigned char reset_cmd2;	/* command #2 for writing LCD string (LCD only) */
+@@ -102,8 +102,8 @@
+ {
+ 	.model =		DISPLAY_MODEL_LCD,
+ 	.lcd_width =		16,
+-	.lcd_cmd_reg_addr =	(char *) KITTYHAWK_LCD_CMD,
+-	.lcd_data_reg_addr =	(char *) KITTYHAWK_LCD_DATA,
++	.lcd_cmd_reg_addr =	KITTYHAWK_LCD_CMD,
++	.lcd_data_reg_addr =	KITTYHAWK_LCD_DATA,
+ 	.min_cmd_delay =	40,
+ 	.reset_cmd1 =		0x80,
+ 	.reset_cmd2 =		0xc0,
+@@ -540,20 +540,20 @@
+    ** 
+  */
+ 
+-int __init register_led_driver(int model, char *cmd_reg, char *data_reg)
++int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long data_reg)
+ {
+ 	static int initialized;
+ 	
+ 	if (initialized || !data_reg)
+-	    return 1;
++		return 1;
+ 	
+ 	lcd_info.model = model;		/* store the values */
+-	LCD_CMD_REG = (cmd_reg == LED_CMD_REG_NONE) ? NULL : cmd_reg;
++	LCD_CMD_REG = (cmd_reg == LED_CMD_REG_NONE) ? 0 : cmd_reg;
+ 
+ 	switch (lcd_info.model) {
+ 	case DISPLAY_MODEL_LCD:
+ 		LCD_DATA_REG = data_reg;
+-		printk(KERN_INFO "LCD display at %p,%p registered\n", 
++		printk(KERN_INFO "LCD display at %lu,%lu registered\n", 
+ 			LCD_CMD_REG , LCD_DATA_REG);
+ 		led_func_ptr = led_LCD_driver;
+ 		lcd_print( lcd_text_default );
+@@ -563,14 +563,14 @@
+ 	case DISPLAY_MODEL_LASI:
+ 		LED_DATA_REG = data_reg;
+ 		led_func_ptr = led_LASI_driver;
+-		printk(KERN_INFO "LED display at %p registered\n", LED_DATA_REG);
++		printk(KERN_INFO "LED display at %lu registered\n", LED_DATA_REG);
+ 		led_type = LED_NOLCD;
+ 		break;
+ 
+ 	case DISPLAY_MODEL_OLD_ASP:
+ 		LED_DATA_REG = data_reg;
+ 		led_func_ptr = led_ASP_driver;
+-		printk(KERN_INFO "LED (ASP-style) display at %p registered\n", 
++		printk(KERN_INFO "LED (ASP-style) display at %lu registered\n", 
+ 		    LED_DATA_REG);
+ 		led_type = LED_NOLCD;
+ 		break;
+@@ -692,7 +692,8 @@
+ 	lcd_info.model = DISPLAY_MODEL_NONE;
+ 	chassis_info.actcnt = chassis_info.maxcnt = 0;
+ 
+-	if ((ret = pdc_chassis_info(&chassis_info, &lcd_info, sizeof(lcd_info))) == PDC_OK) {
++	ret = pdc_chassis_info(&chassis_info, &lcd_info, sizeof(lcd_info));
++	if (ret == PDC_OK) {
+ 		DPRINTK((KERN_INFO "%s: chassis info: model=%d (%s), "
+ 			 "lcd_width=%d, cmd_delay=%u,\n"
+ 			 "%s: sizecnt=%d, actcnt=%ld, maxcnt=%ld\n",
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/sba_iommu.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/sba_iommu.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/sba_iommu.c	2005-01-21 12:16:45.000000000 -0500
+@@ -58,7 +58,6 @@
+ ** Don't even think about messing with it unless you have
+ ** plenty of 710's to sacrifice to the computer gods. :^)
+ */
+-#undef DEBUG_SBA_ASSERT
+ #undef DEBUG_SBA_INIT
+ #undef DEBUG_SBA_RUN
+ #undef DEBUG_SBA_RUN_SG
+@@ -92,19 +91,6 @@
+ #define DBG_RES(x...)
+ #endif
+ 
+-#ifdef DEBUG_SBA_ASSERT
+-#undef ASSERT
+-#define ASSERT(expr) \
+-	if(!(expr)) { \
+-		printk("\n%s:%d: Assertion " #expr " failed!\n", \
+-				__FILE__, __LINE__); \
+-		panic(#expr); \
+-	}
+-#else
+-#define ASSERT(expr)
+-#endif
+-
+-
+ #if defined(__LP64__) && !defined(CONFIG_PDC_NARROW)
+ /* "low end" PA8800 machines use ZX1 chipset */
+ #define ZX1_SUPPORT
+@@ -157,7 +143,7 @@
+ /* Ike's IOC's occupy functions 2 and 3 (not 0 and 1) */
+ #define IKE_IOC_OFFSET(p) ((p+2)*SBA_FUNC_SIZE)
+ 
+-#define PLUTO_IOC_OFFSET 0x1000
++#define PLUTO_IOC_OFFSET 0x1000UL
+ 
+ #define IOC_CTRL          0x8	/* IOC_CTRL offset */
+ #define IOC_CTRL_TC       (1 << 0) /* TOC Enable */
+@@ -246,9 +232,9 @@
+ 
+ 
+ struct ioc {
+-	unsigned long	ioc_hpa;	/* I/O MMU base address */
+-	char	*res_map;	/* resource map, bit == pdir entry */
+-	u64	*pdir_base;	/* physical base address */
++	void __iomem	*ioc_hpa;	/* I/O MMU base address */
++	char		*res_map;	/* resource map, bit == pdir entry */
++	u64		*pdir_base;	/* physical base address */
+ 	unsigned long	ibase;	/* pdir IOV Space base - shared w/lba_pci */
+ 	unsigned long	imask;	/* pdir IOV Space mask - shared w/lba_pci */
+ #ifdef ZX1_SUPPORT
+@@ -295,7 +281,7 @@
+ 	struct parisc_device	*dev;	/* dev found in bus walk */
+ 	struct parisc_device_id	*iodc;	/* data about dev from firmware */
+ 	const char 		*name;
+-	unsigned long		sba_hpa; /* base address */
++	void __iomem		*sba_hpa; /* base address */
+ 	spinlock_t		sba_lock;
+ 	unsigned int		flags;  /* state/functionality enabled */
+ 	unsigned int		hw_rev;  /* HW revision of chip */
+@@ -345,11 +331,11 @@
+ #define WRITE_REG64(val, addr) __raw_writeq(cpu_to_le64(val), addr)
+ 
+ #ifdef __LP64__
+-#define READ_REG(addr)		READ_REG64(addr)
+-#define WRITE_REG(value, addr)	WRITE_REG64(value, addr)
++#define READ_REG(addr)		READ_REG64((void __iomem *) addr)
++#define WRITE_REG(value, addr)	WRITE_REG64(value, (void __iomem *) addr)
+ #else
+-#define READ_REG(addr)		READ_REG32(addr)
+-#define WRITE_REG(value, addr)	WRITE_REG32(value, addr)
++#define READ_REG(addr)		READ_REG32((void __iomem *) addr)
++#define WRITE_REG(value, addr)	WRITE_REG32(value, (void __iomem *) addr)
+ #endif
+ 
+ #ifdef DEBUG_SBA_INIT
+@@ -547,8 +533,6 @@
+ 	unsigned long *res_end = (unsigned long *) &(ioc->res_map[ioc->res_size]);
+ 	unsigned long pide = ~0UL;
+ 
+-	ASSERT(((unsigned long) ioc->res_hint & (sizeof(unsigned long) - 1UL)) == 0);
+-	ASSERT(res_ptr < res_end);
+ 	if (bits_wanted > (BITS_PER_LONG/2)) {
+ 		/* Search word at a time - no mask needed */
+ 		for(; res_ptr < res_end; ++res_ptr) {
+@@ -583,8 +567,8 @@
+ 		while(res_ptr < res_end)
+ 		{ 
+ 			DBG_RES("    %p %lx %lx\n", res_ptr, mask, *res_ptr);
+-			BUG_ON(0 == mask);
+-			if(0 == ((*res_ptr) & mask)) {
++			WARN_ON(mask == 0);
++			if(((*res_ptr) & mask) == 0) {
+ 				*res_ptr |= mask;     /* mark resources busy! */
+ 				pide = ((unsigned long)res_ptr - (unsigned long)ioc->res_map);
+ 				pide <<= 3;	/* convert to bit address */
+@@ -593,7 +577,7 @@
+ 			}
+ 			mask >>= o;
+ 			bitshiftcnt += o;
+-			if (0 == mask) {
++			if (mask == 0) {
+ 				mask = RESMAP_MASK(bits_wanted);
+ 				bitshiftcnt=0;
+ 				res_ptr++;
+@@ -631,21 +615,11 @@
+ #endif
+ 	unsigned long pide;
+ 
+-	ASSERT(pages_needed);
+-	ASSERT((pages_needed * IOVP_SIZE) <= DMA_CHUNK_SIZE);
+-	ASSERT(pages_needed <= BITS_PER_LONG);
+-	ASSERT(0 == (size & ~IOVP_MASK));
+-
+-	/*
+-	** "seek and ye shall find"...praying never hurts either...
+-	** ggg sacrifices another 710 to the computer gods.
+-	*/
+-
+ 	pide = sba_search_bitmap(ioc, pages_needed);
+ 	if (pide >= (ioc->res_size << 3)) {
+ 		pide = sba_search_bitmap(ioc, pages_needed);
+ 		if (pide >= (ioc->res_size << 3))
+-			panic("%s: I/O MMU @ %lx is out of mapping resources\n",
++			panic("%s: I/O MMU @ %p is out of mapping resources\n",
+ 			      __FILE__, ioc->ioc_hpa);
+ 	}
+ 
+@@ -707,11 +681,6 @@
+ 	ioc->used_pages -= bits_not_wanted;
+ #endif
+ 
+-	ASSERT(m != 0);
+-	ASSERT(bits_not_wanted);
+-	ASSERT((bits_not_wanted * IOVP_SIZE) <= DMA_CHUNK_SIZE);
+-	ASSERT(bits_not_wanted <= BITS_PER_LONG);
+-	ASSERT((*res_ptr & m) == m); /* verify same bits are set */
+ 	*res_ptr &= ~m;
+ }
+ 
+@@ -732,8 +701,9 @@
+ /**
+  * sba_io_pdir_entry - fill in one IO PDIR entry
+  * @pdir_ptr:  pointer to IO PDIR entry
+- * @sid: process Space ID
++ * @sid: process Space ID - currently only support KERNEL_SPACE
+  * @vba: Virtual CPU address of buffer to map
++ * @hint: DMA hint set to use for this mapping
+  *
+  * SBA Mapping Routine
+  *
+@@ -768,7 +738,6 @@
+  * IOMMU uses little endian for the pdir.
+  */
+ 
+-
+ void SBA_INLINE
+ sba_io_pdir_entry(u64 *pdir_ptr, space_t sid, unsigned long vba,
+ 		  unsigned long hint)
+@@ -776,12 +745,6 @@
+ 	u64 pa; /* physical address */
+ 	register unsigned ci; /* coherent index */
+ 
+-	/* We currently only support kernel addresses.
+-	 * fdc instr below will need to reload sr1 with KERNEL_SPACE
+-	 * once we try to support direct DMA to user space.
+-	 */
+-	ASSERT(sid == KERNEL_SPACE);
+-
+ 	pa = virt_to_phys(vba);
+ 	pa &= IOVP_MASK;
+ 
+@@ -830,10 +793,6 @@
+ 	*/
+ 	int off = PDIR_INDEX(iovp)*sizeof(u64)+7;
+ 
+-	/* Must be non-zero and rounded up */
+-	ASSERT(byte_cnt > 0);
+-	ASSERT(0 == (byte_cnt & ~IOVP_MASK));
+-
+ #ifdef ASSERT_PDIR_SANITY
+ 	/* Assert first pdir entry is set */
+ 	if (0x80 != (((u8 *) ioc->pdir_base)[off])) {
+@@ -843,8 +802,6 @@
+ 
+ 	if (byte_cnt <= IOVP_SIZE)
+ 	{
+-		ASSERT( off < ioc->pdir_size);
+-
+ 		iovp |= IOVP_SHIFT;     /* set "size" field for PCOM */
+ 
+ 		/*
+@@ -858,11 +815,7 @@
+ 		u32 t = get_order(byte_cnt) + PAGE_SHIFT;
+ 
+ 		iovp |= t;
+-		ASSERT(t <= 31);   /* 2GB! Max value of "size" field */
+-
+ 		do {
+-			/* verify this pdir entry is enabled */
+-			ASSERT(0x80 == (((u8 *) ioc->pdir_base)[off] & 0x80));
+ 			/* clear I/O Pdir entry "valid" bit first */
+ 			((u8 *)(ioc->pdir_base))[off] = 0;
+ 			off += sizeof(u64);
+@@ -880,17 +833,21 @@
+  *
+  * See Documentation/DMA-mapping.txt
+  */
+-static int
+-sba_dma_supported( struct device *dev, u64 mask)
++static int sba_dma_supported( struct device *dev, u64 mask)
+ {
++	struct ioc *ioc;
+ 	if (dev == NULL) {
+ 		printk(KERN_ERR MODULE_NAME ": EISA/ISA/et al not supported\n");
+ 		BUG();
+ 		return(0);
+ 	}
+ 
+-	/* only support 32-bit PCI devices - no DAC support (yet) */
+-	return((int) (mask == 0xffffffffUL));
++	ioc = GET_IOC(dev);
++
++	/* check if mask is > than the largest IO Virt Address */
++
++	return((int) (mask >= (ioc->ibase +
++				(ioc->pdir_size / sizeof(u64) * IOVP_SIZE) )));
+ }
+ 
+ 
+@@ -914,11 +871,7 @@
+ 	u64 *pdir_start;
+ 	int pide;
+ 
+-	ASSERT(size > 0);
+-	ASSERT(size <= DMA_CHUNK_SIZE);
+-
+ 	ioc = GET_IOC(dev);
+-	ASSERT(ioc);
+ 
+ 	/* save offset bits */
+ 	offset = ((dma_addr_t) (long) addr) & ~IOVP_MASK;
+@@ -944,7 +897,6 @@
+ 	pdir_start = &(ioc->pdir_base[pide]);
+ 
+ 	while (size > 0) {
+-		ASSERT(((u8 *)pdir_start)[7] == 0); /* verify availability */
+ 		sba_io_pdir_entry(pdir_start, KERNEL_SPACE, (unsigned long) addr, 0);
+ 
+ 		DBG_RUN("	pdir 0x%p %02x%02x%02x%02x%02x%02x%02x%02x\n",
+@@ -992,14 +944,10 @@
+ 	unsigned long flags; 
+ 	dma_addr_t offset;
+ 
+-	ioc = GET_IOC(dev);
+-	ASSERT(ioc);
++	DBG_RUN("%s() iovp 0x%lx/%x\n", __FUNCTION__, (long) iova, size);
+ 
++	ioc = GET_IOC(dev);
+ 	offset = iova & ~IOVP_MASK;
+-
+-	DBG_RUN("%s() iovp 0x%lx/%x\n",
+-		__FUNCTION__, (long) iova, size);
+-
+ 	iova ^= offset;        /* clear offset bits */
+ 	size += offset;
+ 	size = ROUNDUP(size, IOVP_SIZE);
+@@ -1131,7 +1079,6 @@
+ 	DBG_RUN_SG("%s() START %d entries\n", __FUNCTION__, nents);
+ 
+ 	ioc = GET_IOC(dev);
+-	ASSERT(ioc);
+ 
+ 	/* Fast path single entry scatterlists. */
+ 	if (nents == 1) {
+@@ -1186,7 +1133,6 @@
+ 
+ 	spin_unlock_irqrestore(&ioc->res_lock, flags);
+ 
+-	ASSERT(coalesced == filled);
+ 	DBG_RUN_SG("%s() DONE %d mappings\n", __FUNCTION__, filled);
+ 
+ 	return filled;
+@@ -1215,7 +1161,6 @@
+ 		__FUNCTION__, nents, sg_virt_addr(sglist), sglist->length);
+ 
+ 	ioc = GET_IOC(dev);
+-	ASSERT(ioc);
+ 
+ #ifdef SBA_COLLECT_STATS
+ 	ioc->usg_calls++;
+@@ -1394,16 +1339,27 @@
+ 	return (void *) pdir_base;
+ }
+ 
+-static void
+-sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
++/* setup Mercury or Elroy IBASE/IMASK registers. */
++static void setup_ibase_imask(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
+ {
+-        /* lba_set_iregs() is in arch/parisc/kernel/lba_pci.c */
++        /* lba_set_iregs() is in drivers/parisc/lba_pci.c */
+         extern void lba_set_iregs(struct parisc_device *, u32, u32);
++	struct device *dev;
++
++	list_for_each_entry(dev, &sba->dev.children, node) {
++		struct parisc_device *lba = to_parisc_device(dev);
++		int rope_num = (lba->hpa >> 13) & 0xf;
++		if (rope_num >> 3 == ioc_num)
++			lba_set_iregs(lba, ioc->ibase, ioc->imask);
++	}
++}
+ 
++static void
++sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
++{
+ 	u32 iova_space_mask;
+ 	u32 iova_space_size;
+ 	int iov_order, tcnfg;
+-	struct parisc_device *lba;
+ #if SBA_AGP_SUPPORT
+ 	int agp_found = 0;
+ #endif
+@@ -1449,7 +1405,7 @@
+ 		ioc->hint_shift_pdir, ioc->hint_mask_pdir);
+ #endif
+ 
+-	ASSERT((((unsigned long) ioc->pdir_base) & PAGE_MASK) == (unsigned long) ioc->pdir_base);
++	WARN_ON((((unsigned long) ioc->pdir_base) & PAGE_MASK) != (unsigned long) ioc->pdir_base);
+ 	WRITE_REG(virt_to_phys(ioc->pdir_base), ioc->ioc_hpa + IOC_PDIR_BASE);
+ 
+ 	/* build IMASK for IOC and Elroy */
+@@ -1461,14 +1417,7 @@
+ #endif
+ 	sba_dump_tlb(ioc->ioc_hpa);
+ 
+-	/*
+-	** setup Mercury IBASE/IMASK registers as well.
+-	*/
+-	for (lba = sba->child; lba; lba = lba->sibling) {
+-		int rope_num = (lba->hpa >> 13) & 0xf;
+-		if (rope_num >> 3 == ioc_num)
+-			lba_set_iregs(lba, ioc->ibase, ioc->imask);
+-	}
++	setup_ibase_imask(sba, ioc, ioc_num);
+ 
+ 	WRITE_REG(ioc->imask, ioc->ioc_hpa + IOC_IMASK);
+ 
+@@ -1534,13 +1483,9 @@
+ static void
+ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
+ {
+-	/* lba_set_iregs() is in arch/parisc/kernel/lba_pci.c */
+-	extern void lba_set_iregs(struct parisc_device *, u32, u32);
+-
+ 	u32 iova_space_size, iova_space_mask;
+ 	int pdir_size, iov_order;
+ 	unsigned long physmem;
+-	struct parisc_device *lba;
+ 
+ 	/*
+ 	** Determine IOVA Space size from memory size.
+@@ -1575,16 +1520,14 @@
+ 	** PIRANHA BUG: Exception is when IO Pdir is 2MB (gets reduced)
+ 	*/
+ 	iov_order = get_order(iova_space_size >> (IOVP_SHIFT-PAGE_SHIFT));
+-	ASSERT(iov_order <= (30 - IOVP_SHIFT));   /* iova_space_size <= 1GB */
+-	ASSERT(iov_order >= (20 - IOVP_SHIFT));   /* iova_space_size >= 1MB */
++	WARN_ON(iov_order > (30 - IOVP_SHIFT));   /* iova_space_size <= 1GB */
++	WARN_ON(iov_order < (20 - IOVP_SHIFT));   /* iova_space_size >= 1MB */
+ 	iova_space_size = 1 << (iov_order + IOVP_SHIFT);
+ 
+ 	ioc->pdir_size = pdir_size = (iova_space_size/IOVP_SIZE) * sizeof(u64);
+ 
+-	ASSERT(pdir_size < 4*1024*1024);   /* max pdir size == 2MB */
+-
+ 	/* Verify it's a power of two */
+-	ASSERT((1 << get_order(pdir_size)) == (pdir_size >> PAGE_SHIFT));
++	WARN_ON((1 << get_order(pdir_size)) != (pdir_size >> PAGE_SHIFT));
+ 
+ 	DBG_INIT("%s() hpa 0x%lx mem %dMB IOV %dMB (%d bits) PDIR size 0x%0x\n",
+ 		__FUNCTION__, ioc->ioc_hpa, (int) (physmem>>20),
+@@ -1604,7 +1547,6 @@
+ 			ioc->hint_shift_pdir, ioc->hint_mask_pdir);
+ #endif
+ 
+-	ASSERT((((unsigned long) ioc->pdir_base) & PAGE_MASK) == (unsigned long) ioc->pdir_base);
+ 	WRITE_REG64(virt_to_phys(ioc->pdir_base), ioc->ioc_hpa + IOC_PDIR_BASE);
+ 
+ 	/* build IMASK for IOC and Elroy */
+@@ -1630,14 +1572,7 @@
+ 	** can't reprogram them the way drivers want.
+ 	*/
+ 
+-	/*
+-	** setup Elroy IBASE/IMASK registers as well.
+-	*/
+-	for (lba = sba->child; lba; lba = lba->sibling) {
+-		int rope_num = (lba->hpa >> 13) & 0xf;
+-		if (rope_num >> 3 == ioc_num)
+-			lba_set_iregs(lba, ioc->ibase, ioc->imask);
+-	}
++	setup_ibase_imask(sba, ioc, ioc_num);
+ 
+ 	/*
+ 	** Program the IOC's ibase and enable IOVA translation
+@@ -1682,18 +1617,47 @@
+ 	if (!is_pdc_pat()) {
+ 		/* Shutdown the USB controller on Astro-based workstations.
+ 		** Once we reprogram the IOMMU, the next DMA performed by
+-		** USB will HPMC the box.
++		** USB will HPMC the box. USB is only enabled if a
++		** keyboard is present and found.
++		**
++		** With serial console, j6k v5.0 firmware says:
++		**   mem_kbd hpa 0xfee003f8 sba 0x0 pad 0x0 cl_class 0x7
++		**
++		** FIXME: Using GFX+USB console at power up but direct
++		**	linux to serial console is still broken.
++		**	USB could generate DMA so we must reset USB.
++		**	The proper sequence would be:
++		**	o block console output
++		**	o reset USB device
++		**	o reprogram serial port
++		**	o unblock console output
+ 		*/
+-		pdc_io_reset_devices();
++		if (PAGE0->mem_kbd.cl_class == CL_KEYBD) {
++			pdc_io_reset_devices();
++		}
+ 
+-		/*
+-		** XXX May need something more sophisticated to deal
+-		**     with DMA from LAN. Maybe use page zero boot device
+-		**     as a handle to talk to PDC about which device to
+-		**     shutdown. This also needs to work for is_pdc_pat(). 
+-		*/
+ 	}
+ 
++
++#if 0
++printk("sba_hw_init(): mem_boot 0x%x 0x%x 0x%x 0x%x\n", PAGE0->mem_boot.hpa,
++	PAGE0->mem_boot.spa, PAGE0->mem_boot.pad, PAGE0->mem_boot.cl_class);
++
++	/*
++	** Need to deal with DMA from LAN.
++	**	Maybe use page zero boot device as a handle to talk
++	**	to PDC about which device to shutdown.
++	**
++	** Netbooting, j6k v5.0 firmware says:
++	** 	mem_boot hpa 0xf4008000 sba 0x0 pad 0x0 cl_class 0x1002
++	** ARGH! invalid class.
++	*/
++	if ((PAGE0->mem_boot.cl_class != CL_RANDOM)
++		&& (PAGE0->mem_boot.cl_class != CL_SEQU)) {
++			pdc_io_reset();
++	}
++#endif
++
+ 	if (!IS_PLUTO(sba_dev->iodc)) {
+ 		ioc_ctl = READ_REG(sba_dev->sba_hpa+IOC_CTRL);
+ 		DBG_INIT("%s() hpa 0x%lx ioc_ctl 0x%Lx ->",
+@@ -1712,7 +1676,7 @@
+ 	if (IS_ASTRO(sba_dev->iodc)) {
+ 		int err;
+ 		/* PAT_PDC (L-class) also reports the same goofy base */
+-		sba_dev->ioc[0].ioc_hpa = ASTRO_IOC_OFFSET;
++		sba_dev->ioc[0].ioc_hpa = (void __iomem *) ASTRO_IOC_OFFSET;
+ 		num_ioc = 1;
+ 
+ 		sba_dev->chip_resv.name = "Astro Intr Ack";
+@@ -1730,20 +1694,20 @@
+                  * corrected when we add it with IKE's IOC offset.
+ 		 * Doesnt look clean, but fewer code. 
+                  */
+-		sba_dev->ioc[0].ioc_hpa = -PLUTO_IOC_OFFSET;
++		sba_dev->ioc[0].ioc_hpa -= PLUTO_IOC_OFFSET;
+ 		num_ioc = 1;
+ 
+ 		sba_dev->chip_resv.name = "Pluto Intr/PIOP/VGA";
+ 		sba_dev->chip_resv.start = PCI_F_EXTEND | 0xfee00000UL;
+ 		sba_dev->chip_resv.end   = PCI_F_EXTEND | (0xff200000UL - 1);
+ 		err = request_resource(&iomem_resource, &(sba_dev->chip_resv));
+-		BUG_ON(err < 0);
++		WARN_ON(err < 0);
+ 
+ 		sba_dev->iommu_resv.name = "IOVA Space";
+ 		sba_dev->iommu_resv.start = 0x40000000UL;
+ 		sba_dev->iommu_resv.end   = 0x50000000UL - 1;
+ 		err = request_resource(&iomem_resource, &(sba_dev->iommu_resv));
+-		BUG_ON(err < 0);
++		WARN_ON(err < 0);
+ 	} else {
+ 		/* IS_IKE (ie N-class, L3000, L1500) */
+ 		sba_dev->ioc[0].ioc_hpa = sba_dev->ioc[1].ioc_hpa = 0;
+@@ -1754,7 +1718,8 @@
+ 
+ 	sba_dev->num_ioc = num_ioc;
+ 	for (i = 0; i < num_ioc; i++) {
+-		sba_dev->ioc[i].ioc_hpa += sba_dev->sba_hpa + IKE_IOC_OFFSET(i);
++		sba_dev->ioc[i].ioc_hpa += (unsigned long) sba_dev->sba_hpa
++						 + IKE_IOC_OFFSET(i);
+ 
+ 		/*
+ 		** Make sure the box crashes if we get any errors on a rope.
+@@ -1861,7 +1826,7 @@
+ 			__FUNCTION__, i, res_size, sba_dev->ioc[i].res_map);
+ 	}
+ 
+-	sba_dev->sba_lock = SPIN_LOCK_UNLOCKED;
++	spin_lock_init(&sba_dev->sba_lock);
+ 	ioc_needs_fdc = boot_cpu_data.pdc.capabilities & PDC_MODEL_IOPDIR_FDC;
+ 
+ #ifdef DEBUG_SBA_INIT
+@@ -2066,7 +2031,7 @@
+ 		return(1);
+ 	}
+ 
+-	dev->sysdata = (void *) sba_dev;
++	dev->dev.driver_data = sba_dev;
+ 	memset(sba_dev, 0, sizeof(struct sba_device));
+ 
+ 	for(i=0; i<MAX_IOC; i++)
+@@ -2076,7 +2041,7 @@
+ 	sba_dev->hw_rev = func_class;
+ 	sba_dev->iodc = &dev->id;
+ 	sba_dev->name = dev->name;
+-	sba_dev->sba_hpa = dev->hpa;  /* faster access */
++	sba_dev->sba_hpa = (void __iomem *) dev->hpa;  /* faster access */
+ 
+ 	sba_get_pat_resources(sba_dev);
+ 	sba_hw_init(sba_dev);
+@@ -2100,7 +2065,7 @@
+ #endif
+ 	parisc_vmerge_boundary = IOVP_SIZE;
+ 	parisc_vmerge_max_size = IOVP_SIZE * BITS_PER_LONG;
+-
++	parisc_has_iommu();
+ 	return 0;
+ }
+ 
+@@ -2129,7 +2094,7 @@
+ 	char t = sba_dev->id.hw_type;
+ 	int iocnum = (pci_hba->hw_path >> 3);	/* rope # */
+ 
+-	BUG_ON((t != HPHW_IOA) && (t != HPHW_BCPORT));
++	WARN_ON((t != HPHW_IOA) && (t != HPHW_BCPORT));
+ 
+ 	return &(sba->ioc[iocnum]);
+ }
+@@ -2159,7 +2124,7 @@
+ 	/* Astro has 4 directed ranges. Not sure about Ike/Pluto/et al */
+ 	for (i=0; i<4; i++) {
+ 		int base, size;
+-		unsigned long reg = sba->sba_hpa + i*0x18;
++		void __iomem *reg = sba->sba_hpa + i*0x18;
+ 
+ 		base = READ_REG32(reg + LMMIO_DIRECT0_BASE);
+ 		if ((base & 1) == 0)
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/superio.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/superio.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/superio.c	2005-01-21 12:16:45.000000000 -0500
+@@ -316,23 +316,9 @@
+ }
+ 
+ 
+-static void
+-superio_mask_irq(void *dev, int local_irq)
+-{
+-	BUG();
+-}
+-
+-static void
+-superio_unmask_irq(void *dev, int local_irq)
+-{
+-	BUG();
+-}
+-
+ static struct irq_region_ops superio_irq_ops = {
+ 	.disable_irq =	superio_disable_irq,
+ 	.enable_irq =	superio_enable_irq,
+-	.mask_irq =	superio_mask_irq,
+-	.unmask_irq =	superio_unmask_irq
+ };
+ 
+ #ifdef DEBUG_SUPERIO_INIT
+@@ -421,9 +407,6 @@
+ {
+ #ifdef CONFIG_SERIAL_8250
+ 	int retval;
+-#ifdef CONFIG_SERIAL_8250_CONSOLE
+-	extern void serial8250_console_init(void); /* drivers/serial/8250.c */
+-#endif        
+         
+ 	if (!sio_dev.irq_region)
+ 		return; /* superio not present */
+@@ -442,10 +425,6 @@
+ 		return;
+ 	}
+ 
+-#ifdef CONFIG_SERIAL_8250_CONSOLE
+-	serial8250_console_init();
+-#endif
+-        
+ 	serial[1].iobase = sio_dev.sp2_base;
+ 	serial[1].irq = sio_dev.irq_region->data.irqbase + SP2_IRQ;
+ 	retval = early_serial_setup(&serial[1]);
+Index: debian-kernel-hppa-2.6.10/drivers/parisc/wax.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/parisc/wax.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/parisc/wax.c	2005-01-21 12:16:45.000000000 -0500
+@@ -70,6 +70,7 @@
+ wax_init_chip(struct parisc_device *dev)
+ {
+ 	struct busdevice *wax;
++	struct parisc_device *parent;
+ 	struct gsc_irq gsc_irq;
+ 	int irq, ret;
+ 
+@@ -118,8 +119,9 @@
+ 	fixup_child_irqs(dev, wax->busdev_region->data.irqbase,
+ 			wax_choose_irq);
+ 	/* On 715-class machines, Wax EISA is a sibling of Wax, not a child. */
+-	if (dev->parent->id.hw_type != HPHW_IOA) {
+-		fixup_child_irqs(dev->parent, wax->busdev_region->data.irqbase,
++	parent = parisc_parent(dev);
++	if (parent->id.hw_type != HPHW_IOA) {
++		fixup_child_irqs(parent, wax->busdev_region->data.irqbase,
+ 				wax_choose_irq);
+ 	}
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/pci/quirks.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/pci/quirks.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/pci/quirks.c	2005-01-21 12:16:45.000000000 -0500
+@@ -546,7 +546,7 @@
+ 		return;
+ 	pci_write_config_dword(dev, PCI_CB_LEGACY_MODE_BASE, 0);
+ }
+-DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID,		PCI_ANY_ID,			quirk_cardbus_legacy );
++DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, quirk_cardbus_legacy);
+ 
+ /*
+  * Following the PCI ordering rules is optional on the AMD762. I'm not
+@@ -664,7 +664,7 @@
+        printk(KERN_INFO "PCI: Ignoring BAR%d-%d of IDE controller %s\n",
+               first_bar, last_bar, pci_name(dev));
+ }
+-DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID,             PCI_ANY_ID,                     quirk_ide_bases );
++DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_ide_bases);
+ 
+ /*
+  *	Ensure C0 rev restreaming is off. This is normally done by
+@@ -1237,6 +1237,8 @@
+ 	}
+ }
+ 
++extern struct pci_fixup __start_pci_fixups_early[];
++extern struct pci_fixup __end_pci_fixups_early[];
+ extern struct pci_fixup __start_pci_fixups_header[];
+ extern struct pci_fixup __end_pci_fixups_header[];
+ extern struct pci_fixup __start_pci_fixups_final[];
+@@ -1250,6 +1252,11 @@
+ 	struct pci_fixup *start, *end;
+ 
+ 	switch(pass) {
++	case pci_fixup_early:
++		start = __start_pci_fixups_early;
++		end = __end_pci_fixups_early;
++		break;
++
+ 	case pci_fixup_header:
+ 		start = __start_pci_fixups_header;
+ 		end = __end_pci_fixups_header;
+Index: debian-kernel-hppa-2.6.10/drivers/pcmcia/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/pcmcia/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/pcmcia/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -169,7 +169,11 @@
+ 
+ config PCMCIA_PROBE
+ 	bool
+-	default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X
++	default y if ISA && !ARCH_SA1100 && !ARCH_CLPS711X && !PARISC
++
++config PCMCIA_PROBE_MEM
++	bool
++	default y if !PARISC
+ 
+ config M32R_PCC
+ 	bool "M32R PCMCIA I/F"
+Index: debian-kernel-hppa-2.6.10/drivers/pcmcia/rsrc_mgr.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/pcmcia/rsrc_mgr.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/pcmcia/rsrc_mgr.c	2005-01-21 12:16:45.000000000 -0500
+@@ -59,7 +59,11 @@
+ 
+ #define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444)
+ 
++#ifdef CONFIG_PCMCIA_PROBE_MEM
+ INT_MODULE_PARM(probe_mem,	1);		/* memory probe? */
++#else
++INT_MODULE_PARM(probe_mem,	0);		/* memory probe? */
++#endif
+ #ifdef CONFIG_PCMCIA_PROBE
+ INT_MODULE_PARM(probe_io,	1);		/* IO port probe? */
+ INT_MODULE_PARM(mem_limit,	0x10000);
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/lasi700.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/lasi700.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/lasi700.c	2005-01-21 12:16:45.000000000 -0500
+@@ -54,13 +54,33 @@
+ #include <scsi/scsi_transport.h>
+ #include <scsi/scsi_transport_spi.h>
+ 
+-#include "lasi700.h"
+ #include "53c700.h"
+ 
+ MODULE_AUTHOR("James Bottomley");
+ MODULE_DESCRIPTION("lasi700 SCSI Driver");
+ MODULE_LICENSE("GPL");
+ 
++#define LASI_700_SVERSION 0x00071
++#define LASI_710_SVERSION 0x00082
++
++#define LASI700_ID_TABLE {			\
++	.hw_type	= HPHW_FIO,		\
++	.sversion	= LASI_700_SVERSION,	\
++	.hversion	= HVERSION_ANY_ID,	\
++	.hversion_rev	= HVERSION_REV_ANY_ID,	\
++}
++
++#define LASI710_ID_TABLE {			\
++	.hw_type	= HPHW_FIO,		\
++	.sversion	= LASI_710_SVERSION,	\
++	.hversion	= HVERSION_ANY_ID,	\
++	.hversion_rev	= HVERSION_REV_ANY_ID,	\
++}
++
++#define LASI700_CLOCK	25
++#define LASI710_CLOCK	40
++#define LASI_SCSI_CORE_OFFSET 0x100
++
+ static struct parisc_device_id lasi700_ids[] = {
+ 	LASI700_ID_TABLE,
+ 	LASI710_ID_TABLE,
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/lasi700.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/lasi700.h	2005-01-21 12:16:37.000000000 -0500
++++ /dev/null	1970-01-01 00:00:00.000000000 +0000
+@@ -1,49 +0,0 @@
+-/* -*- mode: c; c-basic-offset: 8 -*- */
+-
+-/* PARISC LASI driver for the 53c700 chip
+- *
+- * Copyright (C) 2001 by James.Bottomley at HansenPartnership.com
+-**-----------------------------------------------------------------------------
+-**  
+-**  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., 675 Mass Ave, Cambridge, MA 02139, USA.
+-**
+-**-----------------------------------------------------------------------------
+- */
+-
+-#ifndef _LASI700_H
+-#define _LASI700_H
+-
+-#define LASI_710_SVERSION	0x082
+-#define LASI_700_SVERSION	0x071
+-
+-#define LASI700_ID_TABLE {			\
+-	.hw_type	= HPHW_FIO,		\
+-	.sversion	= LASI_700_SVERSION,	\
+-	.hversion	= HVERSION_ANY_ID,	\
+-	.hversion_rev	= HVERSION_REV_ANY_ID,	\
+-}
+-
+-#define LASI710_ID_TABLE {			\
+-	.hw_type	= HPHW_FIO,		\
+-	.sversion	= LASI_710_SVERSION,	\
+-	.hversion	= HVERSION_ANY_ID,	\
+-	.hversion_rev	= HVERSION_REV_ANY_ID,	\
+-}
+-
+-#define LASI700_CLOCK	25
+-#define LASI710_CLOCK	40
+-#define LASI_SCSI_CORE_OFFSET 0x100
+-
+-#endif
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_conf.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_conf.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_conf.h	2005-01-21 12:16:45.000000000 -0500
+@@ -79,14 +79,6 @@
+ /* #define SYM_CONF_IARB_SUPPORT */
+ 
+ /*
+- *  Number of lists for the optimization of the IO timeout handling.
+- *  Not used under FreeBSD and Linux.
+- */
+-#ifndef SYM_CONF_TIMEOUT_ORDER_MAX
+-#define SYM_CONF_TIMEOUT_ORDER_MAX	(8)
+-#endif
+-
+-/*
+  *  Only relevant if IARB support configured.
+  *  - Max number of successive settings of IARB hints.
+  *  - Set IARB on arbitration lost.
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_defs.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_defs.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_defs.h	2005-01-21 12:16:45.000000000 -0500
+@@ -44,26 +44,6 @@
+ #define SYM_DRIVER_NAME	"sym-" SYM_VERSION
+ 
+ /*
+- *  PCI device identifier of SYMBIOS chips.
+- */
+-#define PCI_ID_SYM53C810	PCI_DEVICE_ID_NCR_53C810
+-#define PCI_ID_SYM53C810AP	PCI_DEVICE_ID_LSI_53C810AP
+-#define PCI_ID_SYM53C815	PCI_DEVICE_ID_NCR_53C815
+-#define PCI_ID_SYM53C820	PCI_DEVICE_ID_NCR_53C820
+-#define PCI_ID_SYM53C825	PCI_DEVICE_ID_NCR_53C825
+-#define PCI_ID_SYM53C860	PCI_DEVICE_ID_NCR_53C860
+-#define PCI_ID_SYM53C875	PCI_DEVICE_ID_NCR_53C875
+-#define PCI_ID_SYM53C875_2	PCI_DEVICE_ID_NCR_53C875J
+-#define PCI_ID_SYM53C885	PCI_DEVICE_ID_NCR_53C885
+-#define PCI_ID_SYM53C895	PCI_DEVICE_ID_NCR_53C895
+-#define PCI_ID_SYM53C896	PCI_DEVICE_ID_NCR_53C896
+-#define PCI_ID_SYM53C895A	PCI_DEVICE_ID_LSI_53C895A
+-#define PCI_ID_SYM53C875A	PCI_DEVICE_ID_LSI_53C875A
+-#define PCI_ID_LSI53C1010_33	PCI_DEVICE_ID_LSI_53C1010_33
+-#define PCI_ID_LSI53C1010_66	PCI_DEVICE_ID_LSI_53C1010_66
+-#define PCI_ID_LSI53C1510D	PCI_DEVICE_ID_LSI_53C1510
+-
+-/*
+  *	SYM53C8XX device features descriptor.
+  */
+ struct sym_pci_chip {
+@@ -764,27 +744,27 @@
+ #define	M_RESTORE_DP	RESTORE_POINTERS
+ #define	M_DISCONNECT	DISCONNECT
+ #define	M_ID_ERROR	INITIATOR_ERROR
+-#define	M_ABORT		ABORT
++#define	M_ABORT		ABORT_TASK_SET
+ #define	M_REJECT	MESSAGE_REJECT
+ #define	M_NOOP		NOP
+ #define	M_PARITY	MSG_PARITY_ERROR
+ #define	M_LCOMPLETE	LINKED_CMD_COMPLETE
+ #define	M_FCOMPLETE	LINKED_FLG_CMD_COMPLETE
+-#define	M_RESET		BUS_DEVICE_RESET
+-#define	M_ABORT_TAG	(0x0d)
+-#define	M_CLEAR_QUEUE	(0x0e)
++#define	M_RESET		TARGET_RESET
++#define	M_ABORT_TAG	ABORT_TASK
++#define	M_CLEAR_QUEUE	CLEAR_TASK_SET
+ #define	M_INIT_REC	INITIATE_RECOVERY
+ #define	M_REL_REC	RELEASE_RECOVERY
+ #define	M_TERMINATE	(0x11)
+ #define	M_SIMPLE_TAG	SIMPLE_QUEUE_TAG
+ #define	M_HEAD_TAG	HEAD_OF_QUEUE_TAG
+ #define	M_ORDERED_TAG	ORDERED_QUEUE_TAG
+-#define	M_IGN_RESIDUE	(0x23)
++#define	M_IGN_RESIDUE	IGNORE_WIDE_RESIDUE
+ 
+ #define	M_X_MODIFY_DP	EXTENDED_MODIFY_DATA_POINTER
+ #define	M_X_SYNC_REQ	EXTENDED_SDTR
+ #define	M_X_WIDE_REQ	EXTENDED_WDTR
+-#define	M_X_PPR_REQ	(0x04)
++#define	M_X_PPR_REQ	EXTENDED_PPR
+ 
+ /*
+  *	PPR protocol options
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_fw.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_fw.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_fw.c	2005-01-21 12:16:45.000000000 -0500
+@@ -223,13 +223,13 @@
+ 	 *  Remove a couple of work-arounds specific to C1010 if 
+ 	 *  they are not desirable. See `sym_fw2.h' for more details.
+ 	 */
+-	if (!(np->device_id == PCI_ID_LSI53C1010_66 &&
++	if (!(np->device_id == PCI_DEVICE_ID_LSI_53C1010_66 &&
+ 	      np->revision_id < 0x1 &&
+ 	      np->pciclk_khz < 60000)) {
+ 		scripta0->datao_phase[0] = cpu_to_scr(SCR_NO_OP);
+ 		scripta0->datao_phase[1] = cpu_to_scr(0);
+ 	}
+-	if (!(np->device_id == PCI_ID_LSI53C1010_33 &&
++	if (!(np->device_id == PCI_DEVICE_ID_LSI_53C1010_33 &&
+ 	      /* np->revision_id < 0xff */ 1)) {
+ 		scripta0->sel_done[0] = cpu_to_scr(SCR_NO_OP);
+ 		scripta0->sel_done[1] = cpu_to_scr(0);
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_glue.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_glue.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_glue.c	2005-01-21 12:16:45.000000000 -0500
+@@ -55,6 +55,15 @@
+ #define NAME53C		"sym53c"
+ #define NAME53C8XX	"sym53c8xx"
+ 
++/* SPARC just has to be different ... */
++#ifdef __sparc__
++#define IRQ_FMT "%s"
++#define IRQ_PRM(x) __irq_itoa(x)
++#else
++#define IRQ_FMT "%d"
++#define IRQ_PRM(x) (x)
++#endif
++
+ struct sym_driver_setup sym_driver_setup = SYM_LINUX_DRIVER_SETUP;
+ unsigned int sym_debug_flags = 0;
+ 
+@@ -147,7 +156,7 @@
+ }
+ 
+ /* This lock protects only the memory allocation/free.  */
+-spinlock_t sym53c8xx_lock = SPIN_LOCK_UNLOCKED;
++static spinlock_t sym53c8xx_lock = SPIN_LOCK_UNLOCKED;
+ 
+ static struct scsi_transport_template *sym2_transport_template = NULL;
+ 
+@@ -285,7 +294,7 @@
+ 	ccb->scsi_done(ccb);
+ }
+ 
+-void sym_xpt_done2(struct sym_hcb *np, struct scsi_cmnd *ccb, int cam_status)
++static void sym_xpt_done2(struct sym_hcb *np, struct scsi_cmnd *ccb, int cam_status)
+ {
+ 	sym_set_cam_status(ccb, cam_status);
+ 	sym_xpt_done(np, ccb);
+@@ -379,7 +388,7 @@
+ 			/*
+ 			 *  Bounce back the sense data to user.
+ 			 */
+-			bzero(&csio->sense_buffer, sizeof(csio->sense_buffer));
++			memset(&csio->sense_buffer, 0, sizeof(csio->sense_buffer));
+ 			memcpy(csio->sense_buffer, cp->sns_bbuf,
+ 			      min(sizeof(csio->sense_buffer),
+ 				  (size_t)SYM_SNS_BBUF_LEN));
+@@ -513,7 +522,7 @@
+ 	}
+ 
+ 	/*
+-	 *  Retreive the target descriptor.
++	 *  Retrieve the target descriptor.
+ 	 */
+ 	tp = &np->target[ccb->device->id];
+ 
+@@ -1277,7 +1286,7 @@
+ 	int		arg_len;
+ 	u_long 		target;
+ 
+-	bzero(uc, sizeof(*uc));
++	memset(uc, 0, sizeof(*uc));
+ 
+ 	if (len > 0 && ptr[len-1] == '\n')
+ 		--len;
+@@ -1467,18 +1476,8 @@
+ 	copy_info(&info, "Chip " NAME53C "%s, device id 0x%x, "
+ 			 "revision id 0x%x\n",
+ 			 np->s.chip_name, np->device_id, np->revision_id);
+-	copy_info(&info, "At PCI address %s, "
+-#ifdef __sparc__
+-		"IRQ %s\n",
+-#else
+-		"IRQ %d\n",
+-#endif
+-		pci_name(np->s.device),
+-#ifdef __sparc__
+-		__irq_itoa(np->s.irq));
+-#else
+-		(int) np->s.irq);
+-#endif
++	copy_info(&info, "At PCI address %s, IRQ " IRQ_FMT "\n",
++		pci_name(np->s.device), IRQ_PRM(np->s.irq));
+ 	copy_info(&info, "Min. period factor %d, %s SCSI BUS%s\n",
+ 			 (int) (np->minsync_dt ? np->minsync_dt : np->minsync),
+ 			 np->maxwide ? "Wide" : "Narrow",
+@@ -1558,32 +1557,23 @@
+  */
+ static int sym_setup_bus_dma_mask(struct sym_hcb *np)
+ {
+-#if   SYM_CONF_DMA_ADDRESSING_MODE == 0
+-	if (pci_set_dma_mask(np->s.device, 0xffffffffUL))
+-		goto out_err32;
+-#else
++#if SYM_CONF_DMA_ADDRESSING_MODE > 0
+ #if   SYM_CONF_DMA_ADDRESSING_MODE == 1
+-#define	PciDmaMask	0xffffffffffULL
++#define	DMA_DAC_MASK	0x000000ffffffffffULL /* 40-bit */
+ #elif SYM_CONF_DMA_ADDRESSING_MODE == 2
+-#define	PciDmaMask	0xffffffffffffffffULL
++#define	DMA_DAC_MASK	DMA_64BIT_MASK
+ #endif
+-	if (np->features & FE_DAC) {
+-		if (!pci_set_dma_mask(np->s.device, PciDmaMask)) {
+-			np->use_dac = 1;
+-			printf_info("%s: using 64 bit DMA addressing\n",
+-					sym_name(np));
+-		} else {
+-			if (pci_set_dma_mask(np->s.device, 0xffffffffUL))
+-				goto out_err32;
+-		}
++	if ((np->features & FE_DAC) &&
++			!pci_set_dma_mask(np->s.device, DMA_DAC_MASK)) {
++		np->use_dac = 1;
++		return 0;
+ 	}
+-#undef	PciDmaMask
+ #endif
+-	return 0;
+ 
+-out_err32:
+-	printf_warning("%s: 32 BIT DMA ADDRESSING NOT SUPPORTED\n",
+-			sym_name(np));
++	if (!pci_set_dma_mask(np->s.device, DMA_32BIT_MASK))
++		return 0;
++
++	printf_warning("%s: No suitable DMA available\n", sym_name(np));
+ 	return -1;
+ }
+ 
+@@ -1606,19 +1596,9 @@
+ 	struct sym_fw *fw;
+ 
+ 	printk(KERN_INFO
+-		"sym%d: <%s> rev 0x%x at pci %s "
+-#ifdef __sparc__
+-		"irq %s\n",
+-#else
+-		"irq %d\n",
+-#endif
++		"sym%d: <%s> rev 0x%x at pci %s irq " IRQ_FMT "\n",
+ 		unit, dev->chip.name, dev->chip.revision_id,
+-		pci_name(dev->pdev),
+-#ifdef __sparc__
+-		__irq_itoa(dev->s.irq));
+-#else
+-		dev->s.irq);
+-#endif
++		pci_name(dev->pdev), IRQ_PRM(dev->s.irq));
+ 
+ 	/*
+ 	 *  Get the firmware for this chip.
+@@ -1672,9 +1652,6 @@
+ 	strlcpy(np->s.chip_name, dev->chip.name, sizeof(np->s.chip_name));
+ 	sprintf(np->s.inst_name, "sym%d", np->s.unit);
+ 
+-	/*
+-	 *  Ask/tell the system about DMA addressing.
+-	 */
+ 	if (sym_setup_bus_dma_mask(np))
+ 		goto attach_failed;
+ 
+@@ -2010,7 +1987,7 @@
+  * the preset SCSI ID (which may be zero) must be read in from
+  * a special configuration space register of the 875.
+  */
+-void sym_config_pqs(struct pci_dev *pdev, struct sym_device *sym_dev)
++static void sym_config_pqs(struct pci_dev *pdev, struct sym_device *sym_dev)
+ {
+ 	int slot;
+ 	u8 tmp;
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_glue.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_glue.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_glue.h	2005-01-21 12:16:45.000000000 -0500
+@@ -58,13 +58,6 @@
+ #include <scsi/scsi_device.h>
+ #include <scsi/scsi_host.h>
+ 
+-#ifndef bzero
+-#define bzero(d, n)	memset((d), 0, (n))
+-#endif
+-
+-/*
+- *  General driver includes.
+- */
+ #include "sym_conf.h"
+ #include "sym_defs.h"
+ #include "sym_misc.h"
+@@ -123,14 +116,6 @@
+ typedef struct sym_tcb *tcb_p;
+ typedef struct sym_lcb *lcb_p;
+ typedef struct sym_ccb *ccb_p;
+-typedef struct sym_hcb *hcb_p;
+-
+-/*
+- *  Define a reference to the O/S dependent IO request.
+- */
+-typedef struct scsi_cmnd *cam_ccb_p;	/* Generic */
+-typedef struct scsi_cmnd *cam_scsiio_p;/* SCSI I/O */
+-
+ 
+ /*
+  *  IO functions definition for big/little endian CPU support.
+@@ -525,7 +510,7 @@
+ /*
+  *  Async handler for negotiations.
+  */
+-void sym_xpt_async_nego_wide(hcb_p np, int target);
++void sym_xpt_async_nego_wide(struct sym_hcb *np, int target);
+ #define sym_xpt_async_nego_sync(np, target)	\
+ 	sym_announce_transfer_rate(np, target)
+ #define sym_xpt_async_nego_ppr(np, target)	\
+@@ -534,14 +519,14 @@
+ /*
+  *  Build CAM result for a successful IO and for a failed IO.
+  */
+-static __inline void sym_set_cam_result_ok(hcb_p np, ccb_p cp, int resid)
++static __inline void sym_set_cam_result_ok(struct sym_hcb *np, ccb_p cp, int resid)
+ {
+ 	struct scsi_cmnd *cmd = cp->cam_ccb;
+ 
+ 	cmd->resid = resid;
+ 	cmd->result = (((DID_OK) << 16) + ((cp->ssss_status) & 0x7f));
+ }
+-void sym_set_cam_result_error(hcb_p np, ccb_p cp, int resid);
++void sym_set_cam_result_error(struct sym_hcb *np, ccb_p cp, int resid);
+ 
+ /*
+  *  Other O/S specific methods.
+@@ -549,13 +534,12 @@
+ #define sym_cam_target_id(ccb)	(ccb)->target
+ #define sym_cam_target_lun(ccb)	(ccb)->lun
+ #define	sym_freeze_cam_ccb(ccb)	do { ; } while (0)
+-void sym_xpt_done(hcb_p np, cam_ccb_p ccb);
+-void sym_xpt_done2(hcb_p np, cam_ccb_p ccb, int cam_status);
++void sym_xpt_done(struct sym_hcb *np, struct scsi_cmnd *ccb);
+ void sym_print_addr (ccb_p cp);
+-void sym_xpt_async_bus_reset(hcb_p np);
+-void sym_xpt_async_sent_bdr(hcb_p np, int target);
+-int  sym_setup_data_and_start (hcb_p np, cam_scsiio_p csio, ccb_p cp);
+-void sym_log_bus_error(hcb_p np);
+-void sym_sniff_inquiry(hcb_p np, struct scsi_cmnd *cmd, int resid);
++void sym_xpt_async_bus_reset(struct sym_hcb *np);
++void sym_xpt_async_sent_bdr(struct sym_hcb *np, int target);
++int  sym_setup_data_and_start (struct sym_hcb *np, struct scsi_cmnd *csio, ccb_p cp);
++void sym_log_bus_error(struct sym_hcb *np);
++void sym_sniff_inquiry(struct sym_hcb *np, struct scsi_cmnd *cmd, int resid);
+ 
+ #endif /* SYM_GLUE_H */
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_hipd.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_hipd.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_hipd.c	2005-01-21 12:16:45.000000000 -0500
+@@ -47,14 +47,14 @@
+ /*
+  *  Needed function prototypes.
+  */
+-static void sym_int_ma (hcb_p np);
+-static void sym_int_sir (hcb_p np);
+-static ccb_p sym_alloc_ccb(hcb_p np);
+-static ccb_p sym_ccb_from_dsa(hcb_p np, u32 dsa);
+-static void sym_alloc_lcb_tags (hcb_p np, u_char tn, u_char ln);
+-static void sym_complete_error (hcb_p np, ccb_p cp);
+-static void sym_complete_ok (hcb_p np, ccb_p cp);
+-static int sym_compute_residual(hcb_p np, ccb_p cp);
++static void sym_int_ma (struct sym_hcb *np);
++static void sym_int_sir (struct sym_hcb *np);
++static ccb_p sym_alloc_ccb(struct sym_hcb *np);
++static ccb_p sym_ccb_from_dsa(struct sym_hcb *np, u32 dsa);
++static void sym_alloc_lcb_tags (struct sym_hcb *np, u_char tn, u_char ln);
++static void sym_complete_error (struct sym_hcb *np, ccb_p cp);
++static void sym_complete_ok (struct sym_hcb *np, ccb_p cp);
++static int sym_compute_residual(struct sym_hcb *np, ccb_p cp);
+ 
+ /*
+  *  Returns the name of this driver.
+@@ -86,12 +86,12 @@
+  *  Print something which allows to retrieve the controler type, 
+  *  unit, target, lun concerned by a kernel message.
+  */
+-static void sym_print_target (hcb_p np, int target)
++static void sym_print_target (struct sym_hcb *np, int target)
+ {
+ 	printf ("%s:%d:", sym_name(np), target);
+ }
+ 
+-static void sym_print_lun(hcb_p np, int target, int lun)
++static void sym_print_lun(struct sym_hcb *np, int target, int lun)
+ {
+ 	printf ("%s:%d:%d:", sym_name(np), target, lun);
+ }
+@@ -126,7 +126,7 @@
+ 	printf (".\n");
+ }
+ 
+-static void sym_print_nego_msg (hcb_p np, int target, char *label, u_char *msg)
++static void sym_print_nego_msg (struct sym_hcb *np, int target, char *label, u_char *msg)
+ {
+ 	PRINT_TARGET(np, target);
+ 	if (label)
+@@ -184,7 +184,7 @@
+  *  On the other hand, LVD devices need some delay 
+  *  to settle and report actual BUS mode in STEST4.
+  */
+-static void sym_chip_reset (hcb_p np)
++static void sym_chip_reset (struct sym_hcb *np)
+ {
+ 	OUTB (nc_istat, SRST);
+ 	UDELAY (10);
+@@ -201,7 +201,7 @@
+  *  So, we need to abort the current operation prior to 
+  *  soft resetting the chip.
+  */
+-static void sym_soft_reset (hcb_p np)
++static void sym_soft_reset (struct sym_hcb *np)
+ {
+ 	u_char istat = 0;
+ 	int i;
+@@ -234,12 +234,12 @@
+  *
+  *  The interrupt handler will reinitialize the chip.
+  */
+-static void sym_start_reset(hcb_p np)
++static void sym_start_reset(struct sym_hcb *np)
+ {
+ 	(void) sym_reset_scsi_bus(np, 1);
+ }
+  
+-int sym_reset_scsi_bus(hcb_p np, int enab_int)
++int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int)
+ {
+ 	u32 term;
+ 	int retv = 0;
+@@ -293,7 +293,7 @@
+ /*
+  *  Select SCSI clock frequency
+  */
+-static void sym_selectclock(hcb_p np, u_char scntl3)
++static void sym_selectclock(struct sym_hcb *np, u_char scntl3)
+ {
+ 	/*
+ 	 *  If multiplier not present or not selected, leave here.
+@@ -348,7 +348,7 @@
+ /*
+  *  calculate SCSI clock frequency (in KHz)
+  */
+-static unsigned getfreq (hcb_p np, int gen)
++static unsigned getfreq (struct sym_hcb *np, int gen)
+ {
+ 	unsigned int ms = 0;
+ 	unsigned int f;
+@@ -420,7 +420,7 @@
+ 	return f;
+ }
+ 
+-static unsigned sym_getfreq (hcb_p np)
++static unsigned sym_getfreq (struct sym_hcb *np)
+ {
+ 	u_int f1, f2;
+ 	int gen = 8;
+@@ -435,7 +435,7 @@
+ /*
+  *  Get/probe chip SCSI clock frequency
+  */
+-static void sym_getclock (hcb_p np, int mult)
++static void sym_getclock (struct sym_hcb *np, int mult)
+ {
+ 	unsigned char scntl3 = np->sv_scntl3;
+ 	unsigned char stest1 = np->sv_stest1;
+@@ -492,7 +492,7 @@
+ /*
+  *  Get/probe PCI clock frequency
+  */
+-static int sym_getpciclock (hcb_p np)
++static int sym_getpciclock (struct sym_hcb *np)
+ {
+ 	int f = 0;
+ 
+@@ -528,7 +528,7 @@
+  *  synchronous factor period.
+  */
+ static int 
+-sym_getsync(hcb_p np, u_char dt, u_char sfac, u_char *divp, u_char *fakp)
++sym_getsync(struct sym_hcb *np, u_char dt, u_char sfac, u_char *divp, u_char *fakp)
+ {
+ 	u32	clk = np->clock_khz;	/* SCSI clock frequency in kHz	*/
+ 	int	div = np->clock_divn;	/* Number of divisors supported	*/
+@@ -648,7 +648,7 @@
+ /*
+  *  Set initial io register bits from burst code.
+  */
+-static __inline void sym_init_burst(hcb_p np, u_char bc)
++static __inline void sym_init_burst(struct sym_hcb *np, u_char bc)
+ {
+ 	np->rv_ctest4	&= ~0x80;
+ 	np->rv_dmode	&= ~(0x3 << 6);
+@@ -668,7 +668,7 @@
+ /*
+  * Print out the list of targets that have some flag disabled by user.
+  */
+-static void sym_print_targets_flag(hcb_p np, int mask, char *msg)
++static void sym_print_targets_flag(struct sym_hcb *np, int mask, char *msg)
+ {
+ 	int cnt;
+ 	int i;
+@@ -696,7 +696,7 @@
+  *  is not safe on paper, but it seems to work quite 
+  *  well. :)
+  */
+-static void sym_save_initial_setting (hcb_p np)
++static void sym_save_initial_setting (struct sym_hcb *np)
+ {
+ 	np->sv_scntl0	= INB(nc_scntl0) & 0x0a;
+ 	np->sv_scntl3	= INB(nc_scntl3) & 0x07;
+@@ -716,44 +716,11 @@
+ 		np->sv_ctest5	= INB(nc_ctest5) & 0x24;
+ }
+ 
+-#ifdef CONFIG_PARISC
+-static u32 parisc_setup_hcb(hcb_p np, u32 period)
+-{
+-	unsigned long pdc_period;
+-	char scsi_mode;
+-	struct hardware_path hwpath;
+-
+-	/* Host firmware (PDC) keeps a table for crippling SCSI capabilities.
+-	 * Many newer machines export one channel of 53c896 chip
+-	 * as SE, 50-pin HD.  Also used for Multi-initiator SCSI clusters
+-	 * to set the SCSI Initiator ID.
+-	 */
+-	get_pci_node_path(np->s.device, &hwpath);
+-	if (!pdc_get_initiator(&hwpath, &np->myaddr, &pdc_period,
+-				&np->maxwide, &scsi_mode))
+-		return period;
+-
+-	if (scsi_mode >= 0) {
+-		/* C3000 PDC reports period/mode */
+-		SYM_SETUP_SCSI_DIFF = 0;
+-		switch(scsi_mode) {
+-		case 0:	np->scsi_mode = SMODE_SE; break;
+-		case 1:	np->scsi_mode = SMODE_HVD; break;
+-		case 2:	np->scsi_mode = SMODE_LVD; break;
+-		default:	break;
+-		}
+-	}
+-
+-	return (u32) pdc_period;
+-}
+-#else
+-static inline int parisc_setup_hcb(hcb_p np, u32 period) { return period; }
+-#endif
+ /*
+  *  Prepare io register values used by sym_start_up() 
+  *  according to selected and supported features.
+  */
+-static int sym_prepare_setting(hcb_p np, struct sym_nvram *nvram)
++static int sym_prepare_setting(struct sym_hcb *np, struct sym_nvram *nvram)
+ {
+ 	u_char	burst_max;
+ 	u32	period;
+@@ -816,8 +783,6 @@
+ 	 */
+ 	period = (4 * div_10M[0] + np->clock_khz - 1) / np->clock_khz;
+ 
+-	period = parisc_setup_hcb(np, period);
+-
+ 	if	(period <= 250)		np->minsync = 10;
+ 	else if	(period <= 303)		np->minsync = 11;
+ 	else if	(period <= 500)		np->minsync = 12;
+@@ -880,7 +845,7 @@
+ 	 *  In dual channel mode, contention occurs if internal cycles
+ 	 *  are used. Disable internal cycles.
+ 	 */
+-	if (np->device_id == PCI_ID_LSI53C1010_33 &&
++	if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_33 &&
+ 	    np->revision_id < 0x1)
+ 		np->rv_ccntl0	|=  DILS;
+ 
+@@ -904,9 +869,9 @@
+ 	 *  this driver. The generic ncr driver that does not use 
+ 	 *  LOAD/STORE instructions does not need this work-around.
+ 	 */
+-	if ((np->device_id == PCI_ID_SYM53C810 &&
++	if ((np->device_id == PCI_DEVICE_ID_NCR_53C810 &&
+ 	     np->revision_id >= 0x10 && np->revision_id <= 0x11) ||
+-	    (np->device_id == PCI_ID_SYM53C860 &&
++	    (np->device_id == PCI_DEVICE_ID_NCR_53C860 &&
+ 	     np->revision_id <= 0x1))
+ 		np->features &= ~(FE_WRIE|FE_ERL|FE_ERMP);
+ 
+@@ -1000,7 +965,7 @@
+ 	if ((SYM_SETUP_SCSI_LED || 
+ 	     (nvram->type == SYM_SYMBIOS_NVRAM ||
+ 	      (nvram->type == SYM_TEKRAM_NVRAM &&
+-	       np->device_id == PCI_ID_SYM53C895))) &&
++	       np->device_id == PCI_DEVICE_ID_NCR_53C895))) &&
+ 	    !(np->features & FE_LEDC) && !(np->sv_gpcntl & 0x01))
+ 		np->features |= FE_LED0;
+ 
+@@ -1091,7 +1056,7 @@
+  *  Has to be called with interrupts disabled.
+  */
+ #ifndef SYM_CONF_IOMAPPED
+-static int sym_regtest (hcb_p np)
++static int sym_regtest (struct sym_hcb *np)
+ {
+ 	register volatile u32 data;
+ 	/*
+@@ -1115,7 +1080,7 @@
+ }
+ #endif
+ 
+-static int sym_snooptest (hcb_p np)
++static int sym_snooptest (struct sym_hcb *np)
+ {
+ 	u32	sym_rd, sym_wr, sym_bk, host_rd, host_wr, pc, dstat;
+ 	int	i, err=0;
+@@ -1241,7 +1206,7 @@
+  *  First 24 register of the chip:
+  *  	r0..rf
+  */
+-static void sym_log_hard_error(hcb_p np, u_short sist, u_char dstat)
++static void sym_log_hard_error(struct sym_hcb *np, u_short sist, u_char dstat)
+ {
+ 	u32	dsp;
+ 	int	script_ofs;
+@@ -1299,85 +1264,85 @@
+ }
+ 
+ static struct sym_pci_chip sym_pci_dev_table[] = {
+- {PCI_ID_SYM53C810, 0x0f, "810", 4, 8, 4, 64,
++ {PCI_DEVICE_ID_NCR_53C810, 0x0f, "810", 4, 8, 4, 64,
+  FE_ERL}
+  ,
+ #ifdef SYM_DEBUG_GENERIC_SUPPORT
+- {PCI_ID_SYM53C810, 0xff, "810a", 4,  8, 4, 1,
++ {PCI_DEVICE_ID_NCR_53C810, 0xff, "810a", 4,  8, 4, 1,
+  FE_BOF}
+  ,
+ #else
+- {PCI_ID_SYM53C810, 0xff, "810a", 4,  8, 4, 1,
++ {PCI_DEVICE_ID_NCR_53C810, 0xff, "810a", 4,  8, 4, 1,
+  FE_CACHE_SET|FE_LDSTR|FE_PFEN|FE_BOF}
+  ,
+ #endif
+- {PCI_ID_SYM53C815, 0xff, "815", 4,  8, 4, 64,
++ {PCI_DEVICE_ID_NCR_53C815, 0xff, "815", 4,  8, 4, 64,
+  FE_BOF|FE_ERL}
+  ,
+- {PCI_ID_SYM53C825, 0x0f, "825", 6,  8, 4, 64,
++ {PCI_DEVICE_ID_NCR_53C825, 0x0f, "825", 6,  8, 4, 64,
+  FE_WIDE|FE_BOF|FE_ERL|FE_DIFF}
+  ,
+- {PCI_ID_SYM53C825, 0xff, "825a", 6,  8, 4, 2,
++ {PCI_DEVICE_ID_NCR_53C825, 0xff, "825a", 6,  8, 4, 2,
+  FE_WIDE|FE_CACHE0_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM|FE_DIFF}
+  ,
+- {PCI_ID_SYM53C860, 0xff, "860", 4,  8, 5, 1,
++ {PCI_DEVICE_ID_NCR_53C860, 0xff, "860", 4,  8, 5, 1,
+  FE_ULTRA|FE_CACHE_SET|FE_BOF|FE_LDSTR|FE_PFEN}
+  ,
+- {PCI_ID_SYM53C875, 0x01, "875", 6, 16, 5, 2,
++ {PCI_DEVICE_ID_NCR_53C875, 0x01, "875", 6, 16, 5, 2,
+  FE_WIDE|FE_ULTRA|FE_CACHE0_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_DIFF|FE_VARCLK}
+  ,
+- {PCI_ID_SYM53C875, 0xff, "875", 6, 16, 5, 2,
++ {PCI_DEVICE_ID_NCR_53C875, 0xff, "875", 6, 16, 5, 2,
+  FE_WIDE|FE_ULTRA|FE_DBLR|FE_CACHE0_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_DIFF|FE_VARCLK}
+  ,
+- {PCI_ID_SYM53C875_2, 0xff, "875", 6, 16, 5, 2,
++ {PCI_DEVICE_ID_NCR_53C875J, 0xff, "875J", 6, 16, 5, 2,
+  FE_WIDE|FE_ULTRA|FE_DBLR|FE_CACHE0_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_DIFF|FE_VARCLK}
+  ,
+- {PCI_ID_SYM53C885, 0xff, "885", 6, 16, 5, 2,
++ {PCI_DEVICE_ID_NCR_53C885, 0xff, "885", 6, 16, 5, 2,
+  FE_WIDE|FE_ULTRA|FE_DBLR|FE_CACHE0_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_DIFF|FE_VARCLK}
+  ,
+ #ifdef SYM_DEBUG_GENERIC_SUPPORT
+- {PCI_ID_SYM53C895, 0xff, "895", 6, 31, 7, 2,
++ {PCI_DEVICE_ID_NCR_53C895, 0xff, "895", 6, 31, 7, 2,
+  FE_WIDE|FE_ULTRA2|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|
+  FE_RAM|FE_LCKFRQ}
+  ,
+ #else
+- {PCI_ID_SYM53C895, 0xff, "895", 6, 31, 7, 2,
++ {PCI_DEVICE_ID_NCR_53C895, 0xff, "895", 6, 31, 7, 2,
+  FE_WIDE|FE_ULTRA2|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_LCKFRQ}
+  ,
+ #endif
+- {PCI_ID_SYM53C896, 0xff, "896", 6, 31, 7, 4,
++ {PCI_DEVICE_ID_NCR_53C896, 0xff, "896", 6, 31, 7, 4,
+  FE_WIDE|FE_ULTRA2|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_RAM8K|FE_64BIT|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_LCKFRQ}
+  ,
+- {PCI_ID_SYM53C895A, 0xff, "895a", 6, 31, 7, 4,
++ {PCI_DEVICE_ID_LSI_53C895A, 0xff, "895a", 6, 31, 7, 4,
+  FE_WIDE|FE_ULTRA2|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_RAM8K|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_LCKFRQ}
+  ,
+- {PCI_ID_SYM53C875A, 0xff, "875a", 6, 31, 7, 4,
++ {PCI_DEVICE_ID_LSI_53C875A, 0xff, "875a", 6, 31, 7, 4,
+  FE_WIDE|FE_ULTRA|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_LCKFRQ}
+  ,
+- {PCI_ID_LSI53C1010_33, 0x00, "1010-33", 6, 31, 7, 8,
++ {PCI_DEVICE_ID_LSI_53C1010_33, 0x00, "1010-33", 6, 31, 7, 8,
+  FE_WIDE|FE_ULTRA3|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFBC|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_RAM8K|FE_64BIT|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_CRC|
+  FE_C10}
+  ,
+- {PCI_ID_LSI53C1010_33, 0xff, "1010-33", 6, 31, 7, 8,
++ {PCI_DEVICE_ID_LSI_53C1010_33, 0xff, "1010-33", 6, 31, 7, 8,
+  FE_WIDE|FE_ULTRA3|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFBC|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_RAM8K|FE_64BIT|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_CRC|
+  FE_C10|FE_U3EN}
+  ,
+- {PCI_ID_LSI53C1010_66, 0xff, "1010-66", 6, 31, 7, 8,
++ {PCI_DEVICE_ID_LSI_53C1010_66, 0xff, "1010-66", 6, 31, 7, 8,
+  FE_WIDE|FE_ULTRA3|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFBC|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_RAM8K|FE_64BIT|FE_DAC|FE_IO256|FE_NOPM|FE_LEDC|FE_66MHZ|FE_CRC|
+  FE_C10|FE_U3EN}
+  ,
+- {PCI_ID_LSI53C1510D, 0xff, "1510d", 6, 31, 7, 4,
++ {PCI_DEVICE_ID_LSI_53C1510, 0xff, "1510d", 6, 31, 7, 4,
+  FE_WIDE|FE_ULTRA2|FE_QUAD|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|
+  FE_RAM|FE_IO256|FE_LEDC}
+ };
+@@ -1415,7 +1380,7 @@
+  *  This is only used if the direct mapping 
+  *  has been unsuccessful.
+  */
+-int sym_lookup_dmap(hcb_p np, u32 h, int s)
++int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s)
+ {
+ 	int i;
+ 
+@@ -1448,7 +1413,7 @@
+  *  Update IO registers scratch C..R so they will be 
+  *  in sync. with queued CCB expectations.
+  */
+-static void sym_update_dmap_regs(hcb_p np)
++static void sym_update_dmap_regs(struct sym_hcb *np)
+ {
+ 	int o, i;
+ 
+@@ -1490,7 +1455,8 @@
+ 		st->options &= ~PPR_OPT_DT;
+ 	}
+ 
+-	if (!(np->features & FE_ULTRA3))
++	/* Some targets fail to properly negotiate using PPR in SE mode */
++	if (!((np->scsi_mode == SMODE_LVD) && (np->features & FE_ULTRA3)))
+ 		st->options &= ~PPR_OPT_DT;
+ 
+ 	if (st->options & PPR_OPT_DT) {
+@@ -1520,7 +1486,7 @@
+  *  negotiation and the nego_status field of the CCB.
+  *  Returns the size of the message in bytes.
+  */
+-static int sym_prepare_nego(hcb_p np, ccb_p cp, int nego, u_char *msgptr)
++static int sym_prepare_nego(struct sym_hcb *np, ccb_p cp, int nego, u_char *msgptr)
+ {
+ 	tcb_p tp = &np->target[cp->target];
+ 	int msglen = 0;
+@@ -1598,7 +1564,7 @@
+ /*
+  *  Insert a job into the start queue.
+  */
+-void sym_put_start_queue(hcb_p np, ccb_p cp)
++void sym_put_start_queue(struct sym_hcb *np, ccb_p cp)
+ {
+ 	u_short	qidx;
+ 
+@@ -1630,13 +1596,6 @@
+ #endif
+ 
+ 	/*
+-	 *  Optionnaly, set the IO timeout condition.
+-	 */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	sym_timeout_ccb(np, cp, sym_cam_timeout(cp->cam_ccb));
+-#endif
+-
+-	/*
+ 	 *  Insert first the idle task and then our job.
+ 	 *  The MBs should ensure proper ordering.
+ 	 */
+@@ -1664,7 +1623,7 @@
+ /*
+  *  Start next ready-to-start CCBs.
+  */
+-void sym_start_next_ccbs(hcb_p np, lcb_p lp, int maxn)
++void sym_start_next_ccbs(struct sym_hcb *np, lcb_p lp, int maxn)
+ {
+ 	SYM_QUEHEAD *qp;
+ 	ccb_p cp;
+@@ -1718,7 +1677,7 @@
+  *  prevent out of order LOADs by the CPU from having 
+  *  prefetched stale data prior to DMA having occurred.
+  */
+-static int sym_wakeup_done (hcb_p np)
++static int sym_wakeup_done (struct sym_hcb *np)
+ {
+ 	ccb_p cp;
+ 	int i, n;
+@@ -1752,10 +1711,64 @@
+ }
+ 
+ /*
++ *  Complete all CCBs queued to the COMP queue.
++ *
++ *  These CCBs are assumed:
++ *  - Not to be referenced either by devices or 
++ *    SCRIPTS-related queues and datas.
++ *  - To have to be completed with an error condition 
++ *    or requeued.
++ *
++ *  The device queue freeze count is incremented 
++ *  for each CCB that does not prevent this.
++ *  This function is called when all CCBs involved 
++ *  in error handling/recovery have been reaped.
++ */
++static void sym_flush_comp_queue(struct sym_hcb *np, int cam_status)
++{
++	SYM_QUEHEAD *qp;
++	ccb_p cp;
++
++	while ((qp = sym_remque_head(&np->comp_ccbq)) != 0) {
++		struct scsi_cmnd *ccb;
++		cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
++		sym_insque_tail(&cp->link_ccbq, &np->busy_ccbq);
++		/* Leave quiet CCBs waiting for resources */
++		if (cp->host_status == HS_WAIT)
++			continue;
++		ccb = cp->cam_ccb;
++		if (cam_status)
++			sym_set_cam_status(ccb, cam_status);
++#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
++		if (sym_get_cam_status(ccb) == CAM_REQUEUE_REQ) {
++			tcb_p tp = &np->target[cp->target];
++			lcb_p lp = sym_lp(np, tp, cp->lun);
++			if (lp) {
++				sym_remque(&cp->link2_ccbq);
++				sym_insque_tail(&cp->link2_ccbq,
++				                &lp->waiting_ccbq);
++				if (cp->started) {
++					if (cp->tag != NO_TAG)
++						--lp->started_tags;
++					else
++						--lp->started_no_tag;
++				}
++			}
++			cp->started = 0;
++			continue;
++		}
++#endif
++		sym_free_ccb(np, cp);
++		sym_freeze_cam_ccb(ccb);
++		sym_xpt_done(np, ccb);
++	}
++}
++
++/*
+  *  Complete all active CCBs with error.
+  *  Used on CHIP/SCSI RESET.
+  */
+-static void sym_flush_busy_queue (hcb_p np, int cam_status)
++static void sym_flush_busy_queue (struct sym_hcb *np, int cam_status)
+ {
+ 	/*
+ 	 *  Move all active CCBs to the COMP queue 
+@@ -1774,7 +1787,7 @@
+  *     1: SCSI BUS RESET delivered or received.
+  *     2: SCSI BUS MODE changed.
+  */
+-void sym_start_up (hcb_p np, int reason)
++void sym_start_up (struct sym_hcb *np, int reason)
+ {
+  	int	i;
+ 	u32	phys;
+@@ -1865,7 +1878,7 @@
+ 	/*
+ 	 *  For now, disable AIP generation on C1010-66.
+ 	 */
+-	if (np->device_id == PCI_ID_LSI53C1010_66)
++	if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_66)
+ 		OUTB (nc_aipcntl1, DISAIP);
+ 
+ 	/*
+@@ -1875,7 +1888,7 @@
+ 	 *  that from SCRIPTS for each selection/reselection, but 
+ 	 *  I just don't want. :)
+ 	 */
+-	if (np->device_id == PCI_ID_LSI53C1010_33 &&
++	if (np->device_id == PCI_DEVICE_ID_LSI_53C1010_33 &&
+ 	    np->revision_id < 1)
+ 		OUTB (nc_stest1, INB(nc_stest1) | 0x30);
+ 
+@@ -1884,9 +1897,9 @@
+ 	 *  Disable overlapped arbitration for some dual function devices, 
+ 	 *  regardless revision id (kind of post-chip-design feature. ;-))
+ 	 */
+-	if (np->device_id == PCI_ID_SYM53C875)
++	if (np->device_id == PCI_DEVICE_ID_NCR_53C875)
+ 		OUTB (nc_ctest0, (1<<5));
+-	else if (np->device_id == PCI_ID_SYM53C896)
++	else if (np->device_id == PCI_DEVICE_ID_NCR_53C896)
+ 		np->rv_ccntl0 |= DPR;
+ 
+ 	/*
+@@ -2010,7 +2023,7 @@
+ /*
+  *  Switch trans mode for current job and it's target.
+  */
+-static void sym_settrans(hcb_p np, int target, u_char opts, u_char ofs,
++static void sym_settrans(struct sym_hcb *np, int target, u_char opts, u_char ofs,
+ 			 u_char per, u_char wide, u_char div, u_char fak)
+ {
+ 	SYM_QUEHEAD *qp;
+@@ -2119,7 +2132,7 @@
+  *  We received a WDTR.
+  *  Let everything be aware of the changes.
+  */
+-static void sym_setwide(hcb_p np, int target, u_char wide)
++static void sym_setwide(struct sym_hcb *np, int target, u_char wide)
+ {
+ 	tcb_p tp = &np->target[target];
+ 
+@@ -2138,7 +2151,7 @@
+  *  Let everything be aware of the changes.
+  */
+ static void
+-sym_setsync(hcb_p np, int target,
++sym_setsync(struct sym_hcb *np, int target,
+             u_char ofs, u_char per, u_char div, u_char fak)
+ {
+ 	tcb_p tp = &np->target[target];
+@@ -2164,7 +2177,7 @@
+  *  Let everything be aware of the changes.
+  */
+ static void 
+-sym_setpprot(hcb_p np, int target, u_char opts, u_char ofs,
++sym_setpprot(struct sym_hcb *np, int target, u_char opts, u_char ofs,
+              u_char per, u_char wide, u_char div, u_char fak)
+ {
+ 	tcb_p tp = &np->target[target];
+@@ -2205,7 +2218,7 @@
+  *  pushes a DSA into a queue, we can trust it when it 
+  *  points to a CCB.
+  */
+-static void sym_recover_scsi_int (hcb_p np, u_char hsts)
++static void sym_recover_scsi_int (struct sym_hcb *np, u_char hsts)
+ {
+ 	u32	dsp	= INL (nc_dsp);
+ 	u32	dsa	= INL (nc_dsa);
+@@ -2256,7 +2269,7 @@
+ /*
+  *  chip exception handler for selection timeout
+  */
+-static void sym_int_sto (hcb_p np)
++static void sym_int_sto (struct sym_hcb *np)
+ {
+ 	u32 dsp	= INL (nc_dsp);
+ 
+@@ -2271,7 +2284,7 @@
+ /*
+  *  chip exception handler for unexpected disconnect
+  */
+-static void sym_int_udc (hcb_p np)
++static void sym_int_udc (struct sym_hcb *np)
+ {
+ 	printf ("%s: unexpected disconnect\n", sym_name(np));
+ 	sym_recover_scsi_int(np, HS_UNEXPECTED);
+@@ -2287,7 +2300,7 @@
+  *  mode to eight bit asynchronous, etc...
+  *  So, just reinitializing all except chip should be enough.
+  */
+-static void sym_int_sbmc (hcb_p np)
++static void sym_int_sbmc (struct sym_hcb *np)
+ {
+ 	u_char scsi_mode = INB (nc_stest4) & SMODE;
+ 
+@@ -2328,7 +2341,7 @@
+  *    The chip will load the DSP with the phase mismatch 
+  *    JUMP address and interrupt the host processor.
+  */
+-static void sym_int_par (hcb_p np, u_short sist)
++static void sym_int_par (struct sym_hcb *np, u_short sist)
+ {
+ 	u_char	hsts	= INB (HS_PRT);
+ 	u32	dsp	= INL (nc_dsp);
+@@ -2416,7 +2429,7 @@
+  *  We have to construct a new transfer descriptor,
+  *  to transfer the rest of the current block.
+  */
+-static void sym_int_ma (hcb_p np)
++static void sym_int_ma (struct sym_hcb *np)
+ {
+ 	u32	dbc;
+ 	u32	rest;
+@@ -2826,7 +2839,7 @@
+  *  Use at your own decision and risk.
+  */
+ 
+-void sym_interrupt (hcb_p np)
++void sym_interrupt (struct sym_hcb *np)
+ {
+ 	u_char	istat, istatc;
+ 	u_char	dstat;
+@@ -2981,7 +2994,7 @@
+  *  It is called with SCRIPTS not running.
+  */
+ static int 
+-sym_dequeue_from_squeue(hcb_p np, int i, int target, int lun, int task)
++sym_dequeue_from_squeue(struct sym_hcb *np, int i, int target, int lun, int task)
+ {
+ 	int j;
+ 	ccb_p cp;
+@@ -3025,60 +3038,6 @@
+ }
+ 
+ /*
+- *  Complete all CCBs queued to the COMP queue.
+- *
+- *  These CCBs are assumed:
+- *  - Not to be referenced either by devices or 
+- *    SCRIPTS-related queues and datas.
+- *  - To have to be completed with an error condition 
+- *    or requeued.
+- *
+- *  The device queue freeze count is incremented 
+- *  for each CCB that does not prevent this.
+- *  This function is called when all CCBs involved 
+- *  in error handling/recovery have been reaped.
+- */
+-void sym_flush_comp_queue(hcb_p np, int cam_status)
+-{
+-	SYM_QUEHEAD *qp;
+-	ccb_p cp;
+-
+-	while ((qp = sym_remque_head(&np->comp_ccbq)) != 0) {
+-		cam_ccb_p ccb;
+-		cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
+-		sym_insque_tail(&cp->link_ccbq, &np->busy_ccbq);
+-		/* Leave quiet CCBs waiting for resources */
+-		if (cp->host_status == HS_WAIT)
+-			continue;
+-		ccb = cp->cam_ccb;
+-		if (cam_status)
+-			sym_set_cam_status(ccb, cam_status);
+-#ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+-		if (sym_get_cam_status(ccb) == CAM_REQUEUE_REQ) {
+-			tcb_p tp = &np->target[cp->target];
+-			lcb_p lp = sym_lp(np, tp, cp->lun);
+-			if (lp) {
+-				sym_remque(&cp->link2_ccbq);
+-				sym_insque_tail(&cp->link2_ccbq,
+-				                &lp->waiting_ccbq);
+-				if (cp->started) {
+-					if (cp->tag != NO_TAG)
+-						--lp->started_tags;
+-					else
+-						--lp->started_no_tag;
+-				}
+-			}
+-			cp->started = 0;
+-			continue;
+-		}
+-#endif
+-		sym_free_ccb(np, cp);
+-		sym_freeze_cam_ccb(ccb);
+-		sym_xpt_done(np, ccb);
+-	}
+-}
+-
+-/*
+  *  chip handler for bad SCSI status condition
+  *
+  *  In case of bad SCSI status, we unqueue all the tasks 
+@@ -3096,7 +3055,7 @@
+  *  SCRATCHA is assumed to have been loaded with STARTPOS 
+  *  before the SCRIPTS called the C code.
+  */
+-static void sym_sir_bad_scsi_status(hcb_p np, int num, ccb_p cp)
++static void sym_sir_bad_scsi_status(struct sym_hcb *np, int num, ccb_p cp)
+ {
+ 	tcb_p tp	= &np->target[cp->target];
+ 	u32		startp;
+@@ -3213,7 +3172,7 @@
+ 		/*
+ 		 *  sense data
+ 		 */
+-		bzero(cp->sns_bbuf, SYM_SNS_BBUF_LEN);
++		memset(cp->sns_bbuf, 0, SYM_SNS_BBUF_LEN);
+ 		cp->phys.sense.addr	= cpu_to_scr(vtobus(cp->sns_bbuf));
+ 		cp->phys.sense.size	= cpu_to_scr(SYM_SNS_BBUF_LEN);
+ 
+@@ -3263,7 +3222,7 @@
+  *  - lun=-1  means any logical UNIT otherwise a given one.
+  *  - task=-1 means any task, otherwise a given one.
+  */
+-int sym_clear_tasks(hcb_p np, int cam_status, int target, int lun, int task)
++int sym_clear_tasks(struct sym_hcb *np, int cam_status, int target, int lun, int task)
+ {
+ 	SYM_QUEHEAD qtmp, *qp;
+ 	int i = 0;
+@@ -3282,7 +3241,7 @@
+ 	 *  the BUSY queue.
+ 	 */
+ 	while ((qp = sym_remque_head(&qtmp)) != 0) {
+-		cam_ccb_p ccb;
++		struct scsi_cmnd *ccb;
+ 		cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
+ 		ccb = cp->cam_ccb;
+ 		if (cp->host_status != HS_DISCONNECT ||
+@@ -3346,7 +3305,7 @@
+  *  all the CCBs that should have been aborted by the 
+  *  target according to our message.
+  */
+-static void sym_sir_task_recovery(hcb_p np, int num)
++static void sym_sir_task_recovery(struct sym_hcb *np, int num)
+ {
+ 	SYM_QUEHEAD *qp;
+ 	ccb_p cp;
+@@ -3698,7 +3657,7 @@
+  *  the corresponding values of dp_sg and dp_ofs.
+  */
+ 
+-static int sym_evaluate_dp(hcb_p np, ccb_p cp, u32 scr, int *ofs)
++static int sym_evaluate_dp(struct sym_hcb *np, ccb_p cp, u32 scr, int *ofs)
+ {
+ 	u32	dp_scr;
+ 	int	dp_ofs, dp_sg, dp_sgmin;
+@@ -3816,7 +3775,7 @@
+  *  is equivalent to a MODIFY DATA POINTER (offset=-1).
+  */
+ 
+-static void sym_modify_dp(hcb_p np, tcb_p tp, ccb_p cp, int ofs)
++static void sym_modify_dp(struct sym_hcb *np, tcb_p tp, ccb_p cp, int ofs)
+ {
+ 	int dp_ofs	= ofs;
+ 	u32	dp_scr	= sym_get_script_dp (np, cp);
+@@ -3915,7 +3874,7 @@
+  *  a relevant information. :)
+  */
+ 
+-int sym_compute_residual(hcb_p np, ccb_p cp)
++int sym_compute_residual(struct sym_hcb *np, ccb_p cp)
+ {
+ 	int dp_sg, dp_sgmin, resid = 0;
+ 	int dp_ofs = 0;
+@@ -4015,7 +3974,7 @@
+  *  chip handler for SYNCHRONOUS DATA TRANSFER REQUEST (SDTR) message.
+  */
+ static int  
+-sym_sync_nego_check(hcb_p np, int req, int target)
++sym_sync_nego_check(struct sym_hcb *np, int req, int target)
+ {
+ 	u_char	chg, ofs, per, fak, div;
+ 
+@@ -4096,7 +4055,7 @@
+ 	return -1;
+ }
+ 
+-static void sym_sync_nego(hcb_p np, tcb_p tp, ccb_p cp)
++static void sym_sync_nego(struct sym_hcb *np, tcb_p tp, ccb_p cp)
+ {
+ 	int req = 1;
+ 	int result;
+@@ -4133,7 +4092,7 @@
+  *  chip handler for PARALLEL PROTOCOL REQUEST (PPR) message.
+  */
+ static int 
+-sym_ppr_nego_check(hcb_p np, int req, int target)
++sym_ppr_nego_check(struct sym_hcb *np, int req, int target)
+ {
+ 	tcb_p tp = &np->target[target];
+ 	unsigned char fak, div;
+@@ -4242,7 +4201,7 @@
+ 	return -1;
+ }
+ 
+-static void sym_ppr_nego(hcb_p np, tcb_p tp, ccb_p cp)
++static void sym_ppr_nego(struct sym_hcb *np, tcb_p tp, ccb_p cp)
+ {
+ 	int req = 1;
+ 	int result;
+@@ -4279,7 +4238,7 @@
+  *  chip handler for WIDE DATA TRANSFER REQUEST (WDTR) message.
+  */
+ static int  
+-sym_wide_nego_check(hcb_p np, int req, int target)
++sym_wide_nego_check(struct sym_hcb *np, int req, int target)
+ {
+ 	u_char	chg, wide;
+ 
+@@ -4344,7 +4303,7 @@
+ 	return -1;
+ }
+ 
+-static void sym_wide_nego(hcb_p np, tcb_p tp, ccb_p cp)
++static void sym_wide_nego(struct sym_hcb *np, tcb_p tp, ccb_p cp)
+ {
+ 	int req = 1;
+ 	int result;
+@@ -4413,7 +4372,7 @@
+  *  So, if a PPR makes problems, we may just want to 
+  *  try a legacy negotiation later.
+  */
+-static void sym_nego_default(hcb_p np, tcb_p tp, ccb_p cp)
++static void sym_nego_default(struct sym_hcb *np, tcb_p tp, ccb_p cp)
+ {
+ 	switch (cp->nego_status) {
+ 	case NS_PPR:
+@@ -4443,7 +4402,7 @@
+  *  chip handler for MESSAGE REJECT received in response to 
+  *  PPR, WIDE or SYNCHRONOUS negotiation.
+  */
+-static void sym_nego_rejected(hcb_p np, tcb_p tp, ccb_p cp)
++static void sym_nego_rejected(struct sym_hcb *np, tcb_p tp, ccb_p cp)
+ {
+ 	sym_nego_default(np, tp, cp);
+ 	OUTB (HS_PRT, HS_BUSY);
+@@ -4452,7 +4411,7 @@
+ /*
+  *  chip exception handler for programmed interrupts.
+  */
+-static void sym_int_sir (hcb_p np)
++static void sym_int_sir (struct sym_hcb *np)
+ {
+ 	u_char	num	= INB (nc_dsps);
+ 	u32	dsa	= INL (nc_dsa);
+@@ -4726,7 +4685,7 @@
+ /*
+  *  Acquire a control block
+  */
+-ccb_p sym_get_ccb (hcb_p np, u_char tn, u_char ln, u_char tag_order)
++ccb_p sym_get_ccb (struct sym_hcb *np, u_char tn, u_char ln, u_char tag_order)
+ {
+ 	tcb_p tp = &np->target[tn];
+ 	lcb_p lp = sym_lp(np, tp, ln);
+@@ -4875,7 +4834,7 @@
+ /*
+  *  Release one control block
+  */
+-void sym_free_ccb (hcb_p np, ccb_p cp)
++void sym_free_ccb (struct sym_hcb *np, ccb_p cp)
+ {
+ 	tcb_p tp = &np->target[cp->target];
+ 	lcb_p lp = sym_lp(np, tp, cp->lun);
+@@ -4960,13 +4919,6 @@
+ 	sym_remque(&cp->link_ccbq);
+ 	sym_insque_head(&cp->link_ccbq, &np->free_ccbq);
+ 
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	/*
+-	 *  Cancel any pending timeout condition.
+-	 */
+-	sym_untimeout_ccb(np, cp);
+-#endif
+-
+ #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+ 	if (lp) {
+ 		sym_remque(&cp->link2_ccbq);
+@@ -4985,7 +4937,7 @@
+ /*
+  *  Allocate a CCB from memory and initialize its fixed part.
+  */
+-static ccb_p sym_alloc_ccb(hcb_p np)
++static ccb_p sym_alloc_ccb(struct sym_hcb *np)
+ {
+ 	ccb_p cp = NULL;
+ 	int hcode;
+@@ -5053,9 +5005,6 @@
+ 	/*
+ 	 *  Chain into optionnal lists.
+ 	 */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	sym_insque_head(&cp->tmo_linkq, &np->tmo0_ccbq);
+-#endif
+ #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+ 	sym_insque_head(&cp->link2_ccbq, &np->dummy_ccbq);
+ #endif
+@@ -5072,7 +5021,7 @@
+ /*
+  *  Look up a CCB from a DSA value.
+  */
+-static ccb_p sym_ccb_from_dsa(hcb_p np, u32 dsa)
++static ccb_p sym_ccb_from_dsa(struct sym_hcb *np, u32 dsa)
+ {
+ 	int hcode;
+ 	ccb_p cp;
+@@ -5092,7 +5041,7 @@
+  *  Target control block initialisation.
+  *  Nothing important to do at the moment.
+  */
+-static void sym_init_tcb (hcb_p np, u_char tn)
++static void sym_init_tcb (struct sym_hcb *np, u_char tn)
+ {
+ #if 0	/*  Hmmm... this checking looks paranoid. */
+ 	/*
+@@ -5108,7 +5057,7 @@
+ /*
+  *  Lun control block allocation and initialization.
+  */
+-lcb_p sym_alloc_lcb (hcb_p np, u_char tn, u_char ln)
++lcb_p sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln)
+ {
+ 	tcb_p tp = &np->target[tn];
+ 	lcb_p lp = sym_lp(np, tp, ln);
+@@ -5210,7 +5159,7 @@
+ /*
+  *  Allocate LCB resources for tagged command queuing.
+  */
+-static void sym_alloc_lcb_tags (hcb_p np, u_char tn, u_char ln)
++static void sym_alloc_lcb_tags (struct sym_hcb *np, u_char tn, u_char ln)
+ {
+ 	tcb_p tp = &np->target[tn];
+ 	lcb_p lp = sym_lp(np, tp, ln);
+@@ -5262,7 +5211,7 @@
+ /*
+  *  Queue a SCSI IO to the controller.
+  */
+-int sym_queue_scsiio(hcb_p np, cam_scsiio_p csio, ccb_p cp)
++int sym_queue_scsiio(struct sym_hcb *np, struct scsi_cmnd *csio, ccb_p cp)
+ {
+ 	tcb_p	tp;
+ 	lcb_p	lp;
+@@ -5273,7 +5222,7 @@
+ 	/*
+ 	 *  Keep track of the IO in our CCB.
+ 	 */
+-	cp->cam_ccb = (cam_ccb_p) csio;
++	cp->cam_ccb = csio;
+ 
+ 	/*
+ 	 *  Retrieve the target descriptor.
+@@ -5401,7 +5350,7 @@
+ /*
+  *  Reset a SCSI target (all LUNs of this target).
+  */
+-int sym_reset_scsi_target(hcb_p np, int target)
++int sym_reset_scsi_target(struct sym_hcb *np, int target)
+ {
+ 	tcb_p tp;
+ 
+@@ -5420,7 +5369,7 @@
+ /*
+  *  Abort a SCSI IO.
+  */
+-int sym_abort_ccb(hcb_p np, ccb_p cp, int timed_out)
++int sym_abort_ccb(struct sym_hcb *np, ccb_p cp, int timed_out)
+ {
+ 	/*
+ 	 *  Check that the IO is active.
+@@ -5450,7 +5399,7 @@
+ 	return 0;
+ }
+ 
+-int sym_abort_scsiio(hcb_p np, cam_ccb_p ccb, int timed_out)
++int sym_abort_scsiio(struct sym_hcb *np, struct scsi_cmnd *ccb, int timed_out)
+ {
+ 	ccb_p cp;
+ 	SYM_QUEHEAD *qp;
+@@ -5480,7 +5429,7 @@
+  *  SCRATCHA is assumed to have been loaded with STARTPOS 
+  *  before the SCRIPTS called the C code.
+  */
+-void sym_complete_error (hcb_p np, ccb_p cp)
++void sym_complete_error (struct sym_hcb *np, ccb_p cp)
+ {
+ 	tcb_p tp;
+ 	lcb_p lp;
+@@ -5614,11 +5563,11 @@
+  *  The SCRIPTS processor is running while we are 
+  *  completing successful commands.
+  */
+-void sym_complete_ok (hcb_p np, ccb_p cp)
++void sym_complete_ok (struct sym_hcb *np, ccb_p cp)
+ {
+ 	tcb_p tp;
+ 	lcb_p lp;
+-	cam_ccb_p ccb;
++	struct scsi_cmnd *ccb;
+ 	int resid;
+ 
+ 	/*
+@@ -5724,7 +5673,7 @@
+ /*
+  *  Soft-attach the controller.
+  */
+-int sym_hcb_attach(hcb_p np, struct sym_fw *fw, struct sym_nvram *nvram)
++int sym_hcb_attach(struct sym_hcb *np, struct sym_fw *fw, struct sym_nvram *nvram)
+ {
+ 	int i;
+ 
+@@ -5815,17 +5764,9 @@
+ 	sym_que_init(&np->comp_ccbq);
+ 
+ 	/*
+-	 *  Initializations for optional handling 
+-	 *  of IO timeouts and device queueing.
++	 *  Initialization for optional handling 
++	 *  of device queueing.
+ 	 */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	sym_que_init(&np->tmo0_ccbq);
+-	np->tmo_ccbq =
+-		sym_calloc(2*SYM_CONF_TIMEOUT_ORDER_MAX*sizeof(SYM_QUEHEAD),
+-			   "TMO_CCBQ");
+-	for (i = 0 ; i < 2*SYM_CONF_TIMEOUT_ORDER_MAX ; i++)
+-		sym_que_init(&np->tmo_ccbq[i]);
+-#endif
+ #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+ 	sym_que_init(&np->dummy_ccbq);
+ #endif
+@@ -5957,7 +5898,7 @@
+ /*
+  *  Free everything that has been allocated for this device.
+  */
+-void sym_hcb_free(hcb_p np)
++void sym_hcb_free(struct sym_hcb *np)
+ {
+ 	SYM_QUEHEAD *qp;
+ 	ccb_p cp;
+@@ -5971,12 +5912,6 @@
+ 		sym_mfree_dma(np->scriptb0, np->scriptb_sz, "SCRIPTB0");
+ 	if (np->scripta0)
+ 		sym_mfree_dma(np->scripta0, np->scripta_sz, "SCRIPTA0");
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	if (np->tmo_ccbq)
+-		sym_mfree(np->tmo_ccbq,
+-			  2*SYM_CONF_TIMEOUT_ORDER_MAX*sizeof(SYM_QUEHEAD),
+-			  "TMO_CCBQ");
+-#endif
+ 	if (np->squeue)
+ 		sym_mfree_dma(np->squeue, sizeof(u32)*(MAX_QUEUE*2), "SQUEUE");
+ 	if (np->dqueue)
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_hipd.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_hipd.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_hipd.h	2005-01-21 12:16:45.000000000 -0500
+@@ -749,7 +749,7 @@
+ 	/*
+ 	 *  Pointer to CAM ccb and related stuff.
+ 	 */
+-	cam_ccb_p cam_ccb;	/* CAM scsiio ccb		*/
++	struct scsi_cmnd *cam_ccb;	/* CAM scsiio ccb		*/
+ 	u8	cdb_buf[16];	/* Copy of CDB			*/
+ 	u8	*sns_bbuf;	/* Bounce buffer for sense data	*/
+ #ifndef	SYM_SNS_BBUF_LEN
+@@ -796,10 +796,6 @@
+ 	/*
+ 	 *  Other fields.
+ 	 */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	SYM_QUEHEAD tmo_linkq;	/* Optional timeout handling	*/
+-	u_int	tmo_clock;	/* (link and dealine value)	*/
+-#endif
+ 	u32	ccb_ba;		/* BUS address of this CCB	*/
+ 	u_short	tag;		/* Tag for this transfer	*/
+ 				/*  NO_TAG means no tag		*/
+@@ -946,8 +942,8 @@
+ 	struct sym_fwa_ba fwa_bas;	/* Useful SCRIPTA bus addresses	*/
+ 	struct sym_fwb_ba fwb_bas;	/* Useful SCRIPTB bus addresses	*/
+ 	struct sym_fwz_ba fwz_bas;	/* Useful SCRIPTZ bus addresses	*/
+-	void		(*fw_setup)(hcb_p np, struct sym_fw *fw);
+-	void		(*fw_patch)(hcb_p np);
++	void		(*fw_setup)(struct sym_hcb *np, struct sym_fw *fw);
++	void		(*fw_patch)(struct sym_hcb *np);
+ 	char		*fw_name;
+ 
+ 	/*
+@@ -1025,15 +1021,6 @@
+ #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+ 	SYM_QUEHEAD	dummy_ccbq;
+ #endif
+-	/*
+-	 *  Optional handling of IO timeouts.
+-	 */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-	SYM_QUEHEAD tmo0_ccbq;
+-	SYM_QUEHEAD *tmo_ccbq;	/* [2*SYM_TIMEOUT_ORDER_MAX] */
+-	u_int	tmo_clock;
+-	u_int	tmo_actq;
+-#endif
+ 
+ 	/*
+ 	 *  IMMEDIATE ARBITRATION (IARB) control.
+@@ -1082,54 +1069,39 @@
+  *  FIRMWARES (sym_fw.c)
+  */
+ struct sym_fw * sym_find_firmware(struct sym_pci_chip *chip);
+-void sym_fw_bind_script (hcb_p np, u32 *start, int len);
++void sym_fw_bind_script (struct sym_hcb *np, u32 *start, int len);
+ 
+ /*
+  *  Driver methods called from O/S specific code.
+  */
+ char *sym_driver_name(void);
+ void sym_print_xerr(ccb_p cp, int x_status);
+-int sym_reset_scsi_bus(hcb_p np, int enab_int);
++int sym_reset_scsi_bus(struct sym_hcb *np, int enab_int);
+ struct sym_pci_chip *
+ sym_lookup_pci_chip_table (u_short device_id, u_char revision);
+-void sym_put_start_queue(hcb_p np, ccb_p cp);
++void sym_put_start_queue(struct sym_hcb *np, ccb_p cp);
+ #ifdef SYM_OPT_HANDLE_DEVICE_QUEUEING
+-void sym_start_next_ccbs(hcb_p np, lcb_p lp, int maxn);
++void sym_start_next_ccbs(struct sym_hcb *np, lcb_p lp, int maxn);
+ #endif
+-void sym_start_up (hcb_p np, int reason);
+-void sym_interrupt (hcb_p np);
+-void sym_flush_comp_queue(hcb_p np, int cam_status);
+-int sym_clear_tasks(hcb_p np, int cam_status, int target, int lun, int task);
+-ccb_p sym_get_ccb (hcb_p np, u_char tn, u_char ln, u_char tag_order);
+-void sym_free_ccb (hcb_p np, ccb_p cp);
+-lcb_p sym_alloc_lcb (hcb_p np, u_char tn, u_char ln);
+-int sym_queue_scsiio(hcb_p np, cam_scsiio_p csio, ccb_p cp);
+-int sym_abort_scsiio(hcb_p np, cam_ccb_p ccb, int timed_out);
+-int sym_abort_ccb(hcb_p np, ccb_p cp, int timed_out);
+-int sym_reset_scsi_target(hcb_p np, int target);
+-void sym_hcb_free(hcb_p np);
+-int sym_hcb_attach(hcb_p np, struct sym_fw *fw, struct sym_nvram *nvram);
+-
+-/*
+- *  Optionnaly, the driver may handle IO timeouts.
+- */
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-int sym_abort_ccb(hcb_p np, ccb_p cp, int timed_out);
+-void sym_timeout_ccb(hcb_p np, ccb_p cp, u_int ticks);
+-static void __inline sym_untimeout_ccb(hcb_p np, ccb_p cp)
+-{
+-	sym_remque(&cp->tmo_linkq);
+-	sym_insque_head(&cp->tmo_linkq, &np->tmo0_ccbq);
+-}
+-void sym_clock(hcb_p np);
+-#endif	/* SYM_OPT_HANDLE_IO_TIMEOUT */
++void sym_start_up (struct sym_hcb *np, int reason);
++void sym_interrupt (struct sym_hcb *np);
++int sym_clear_tasks(struct sym_hcb *np, int cam_status, int target, int lun, int task);
++ccb_p sym_get_ccb (struct sym_hcb *np, u_char tn, u_char ln, u_char tag_order);
++void sym_free_ccb (struct sym_hcb *np, ccb_p cp);
++lcb_p sym_alloc_lcb (struct sym_hcb *np, u_char tn, u_char ln);
++int sym_queue_scsiio(struct sym_hcb *np, struct scsi_cmnd *csio, ccb_p cp);
++int sym_abort_scsiio(struct sym_hcb *np, struct scsi_cmnd *ccb, int timed_out);
++int sym_abort_ccb(struct sym_hcb *np, ccb_p cp, int timed_out);
++int sym_reset_scsi_target(struct sym_hcb *np, int target);
++void sym_hcb_free(struct sym_hcb *np);
++int sym_hcb_attach(struct sym_hcb *np, struct sym_fw *fw, struct sym_nvram *nvram);
+ 
+ /*
+  *  Optionnaly, the driver may provide a function
+  *  to announce transfer rate changes.
+  */
+ #ifdef	SYM_OPT_ANNOUNCE_TRANSFER_RATE
+-void sym_announce_transfer_rate(hcb_p np, int target);
++void sym_announce_transfer_rate(struct sym_hcb *np, int target);
+ #endif
+ 
+ /*
+@@ -1153,9 +1125,9 @@
+ 	(data)->size = cpu_to_scr((((badd) >> 8) & 0xff000000) + len);	\
+ } while (0)
+ #elif SYM_CONF_DMA_ADDRESSING_MODE == 2
+-int sym_lookup_dmap(hcb_p np, u32 h, int s);
++int sym_lookup_dmap(struct sym_hcb *np, u32 h, int s);
+ static __inline void 
+-sym_build_sge(hcb_p np, struct sym_tblmove *data, u64 badd, int len)
++sym_build_sge(struct sym_hcb *np, struct sym_tblmove *data, u64 badd, int len)
+ {
+ 	u32 h = (badd>>32);
+ 	int s = (h&SYM_DMAP_MASK);
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_malloc.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_malloc.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_malloc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -170,7 +170,7 @@
+ 	}
+ 
+ 	if (p)
+-		bzero(p, size);
++		memset(p, 0, size);
+ 	else if (uflags & SYM_MEM_WARN)
+ 		printf ("__sym_calloc2: failed to allocate %s[%d]\n", name, size);
+ 	return p;
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_misc.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_misc.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_misc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -37,109 +37,13 @@
+  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  */
+ 
+-#ifdef __FreeBSD__
+-#include <dev/sym/sym_glue.h>
+-#else
+ #include "sym_glue.h"
+-#endif
+-
+-#ifdef	SYM_OPT_HANDLE_IO_TIMEOUT
+-/*
+- *  Optional CCB timeout handling.
+- *
+- *  This code is useful for O/Ses that allow or expect 
+- *  SIMs (low-level drivers) to handle SCSI IO timeouts.
+- *  It uses a power-of-two based algorithm of my own:) 
+- *  that avoids scanning of lists, provided that:
+- *
+- *  - The IO does complete in less than half the associated
+- *    timeout value.
+- *  - The greatest delay between the queuing of the IO and 
+- *    its completion is less than 
+- *          (1<<(SYM_CONF_TIMEOUT_ORDER_MAX-1))/2 ticks.
+- *
+- *  For example, if tick is 1 second and the max order is 8,
+- *  any IO that is completed within less than 64 seconds will 
+- *  just be put into some list at queuing and be removed 
+- *  at completion without any additionnal overhead.
+- */
+-
+-/*
+- *  Set a timeout condition on a CCB.
+- */ 
+-void sym_timeout_ccb(hcb_p np, ccb_p cp, u_int ticks)
+-{
+-	sym_remque(&cp->tmo_linkq);
+-	cp->tmo_clock = np->tmo_clock + ticks;
+-	if (!ticks) {
+-		sym_insque_head(&cp->tmo_linkq, &np->tmo0_ccbq);
+-	}
+-	else {
+-		int i = SYM_CONF_TIMEOUT_ORDER_MAX - 1;
+-		while (i > 0) {
+-			if (ticks >= (1<<(i+1)))
+-				break;
+-			--i;
+-		}
+-		if (!(np->tmo_actq & (1<<i)))
+-			i += SYM_CONF_TIMEOUT_ORDER_MAX;
+-		sym_insque_head(&cp->tmo_linkq, &np->tmo_ccbq[i]);
+-	}
+-}
+-
+-/*
+- *  Walk a list of CCB and handle timeout conditions.
+- *  Should never be called in normal situations.
+- */
+-static void sym_walk_ccb_tmo_list(hcb_p np, SYM_QUEHEAD *tmoq)
+-{
+-	SYM_QUEHEAD qtmp, *qp;
+-	ccb_p cp;
+-
+-	sym_que_move(tmoq, &qtmp);
+-	while ((qp = sym_remque_head(&qtmp)) != 0) {
+-		sym_insque_head(qp, &np->tmo0_ccbq);
+-		cp = sym_que_entry(qp, struct sym_ccb, tmo_linkq);
+-		if (cp->tmo_clock     != np->tmo_clock &&
+-		    cp->tmo_clock + 1 != np->tmo_clock)
+-			sym_timeout_ccb(np, cp, cp->tmo_clock - np->tmo_clock);
+-		else
+-			sym_abort_ccb(np, cp, 1);
+-	}
+-}
+-
+-/*
+- * Our clock handler called from the O/S specific side.
+- */
+-void sym_clock(hcb_p np)
+-{
+-	int i, j;
+-	u_int tmp;
+-
+-	tmp = np->tmo_clock;
+-	tmp ^= (++np->tmo_clock);
+-
+-	for (i = 0; i < SYM_CONF_TIMEOUT_ORDER_MAX; i++, tmp >>= 1) {
+-		if (!(tmp & 1))
+-			continue;
+-		j = i;
+-		if (np->tmo_actq & (1<<i))
+-			j += SYM_CONF_TIMEOUT_ORDER_MAX;
+-
+-		if (!sym_que_empty(&np->tmo_ccbq[j])) {
+-			sym_walk_ccb_tmo_list(np, &np->tmo_ccbq[j]);
+-		}
+-		np->tmo_actq ^= (1<<i);
+-	}
+-}
+-#endif	/* SYM_OPT_HANDLE_IO_TIMEOUT */
+-
+ 
+ #ifdef	SYM_OPT_ANNOUNCE_TRANSFER_RATE
+ /*
+  *  Announce transfer rate if anything changed since last announcement.
+  */
+-void sym_announce_transfer_rate(hcb_p np, int target)
++void sym_announce_transfer_rate(struct sym_hcb *np, int target)
+ {
+ 	tcb_p tp = &np->target[target];
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_nvram.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_nvram.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_nvram.c	2005-01-21 12:16:45.000000000 -0500
+@@ -68,6 +68,21 @@
+ 	case SYM_TEKRAM_NVRAM:
+ 		np->myaddr = nvram->data.Tekram.host_id & 0x0f;
+ 		break;
++#ifdef CONFIG_PARISC
++	case SYM_PARISC_PDC:
++		if (nvram->data.parisc.host_id != -1)
++			np->myaddr = nvram->data.parisc.host_id;
++		if (nvram->data.parisc.factor != -1)
++			np->minsync = nvram->data.parisc.factor;
++		if (nvram->data.parisc.width != -1)
++			np->maxwide = nvram->data.parisc.width;
++		switch (nvram->data.parisc.mode) {
++			case 0: np->scsi_mode = SMODE_SE; break;
++			case 1: np->scsi_mode = SMODE_HVD; break;
++			case 2: np->scsi_mode = SMODE_LVD; break;
++			default: break;
++		}
++#endif
+ 	default:
+ 		break;
+ 	}
+@@ -702,6 +717,28 @@
+ 	return 0;
+ }
+ 
++#ifdef CONFIG_PARISC
++/*
++ * Host firmware (PDC) keeps a table for altering SCSI capabilities.
++ * Many newer machines export one channel of 53c896 chip as SE, 50-pin HD.
++ * Also used for Multi-initiator SCSI clusters to set the SCSI Initiator ID.
++ */
++static int sym_read_parisc_pdc(struct sym_device *np, struct pdc_initiator *pdc)
++{
++	struct hardware_path hwpath;
++	get_pci_node_path(np->pdev, &hwpath);
++	if (!pdc_get_initiator(&hwpath, pdc))
++		return 0;
++
++	return SYM_PARISC_PDC;
++}
++#else
++static int sym_read_parisc_pdc(struct sym_device *np, struct pdc_initiator *x)
++{
++	return 0;
++}
++#endif
++
+ /*
+  *  Try reading Symbios or Tekram NVRAM
+  */
+@@ -714,7 +751,7 @@
+ 		nvp->type = SYM_TEKRAM_NVRAM;
+ 		sym_display_Tekram_nvram(np, &nvp->data.Tekram);
+ 	} else {
+-		nvp->type = 0;
++		nvp->type = sym_read_parisc_pdc(np, &nvp->data.parisc);
+ 	}
+ 	return nvp->type;
+ }
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_nvram.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_2/sym_nvram.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_2/sym_nvram.h	2005-01-21 12:16:45.000000000 -0500
+@@ -171,6 +171,10 @@
+ typedef struct Tekram_nvram	Tekram_nvram;
+ typedef struct Tekram_target	Tekram_target;
+ 
++#ifndef CONFIG_PARISC
++struct pdc_initiator { int dummy; };
++#endif
++
+ /*
+  *  Union of supported NVRAM formats.
+  */
+@@ -178,10 +182,12 @@
+ 	int type;
+ #define	SYM_SYMBIOS_NVRAM	(1)
+ #define	SYM_TEKRAM_NVRAM	(2)
++#define SYM_PARISC_PDC		(3)
+ #if SYM_CONF_NVRAM_SUPPORT
+ 	union {
+ 		Symbios_nvram Symbios;
+ 		Tekram_nvram Tekram;
++		struct pdc_initiator parisc;
+ 	} data;
+ #endif
+ };
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_comm.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/sym53c8xx_comm.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/sym53c8xx_comm.h	2005-01-21 12:16:45.000000000 -0500
+@@ -505,8 +505,6 @@
+ #define unmap_scsi_data(np, cmd)	__unmap_scsi_data(np->dev, cmd)
+ #define map_scsi_single_data(np, cmd)	__map_scsi_single_data(np->dev, cmd)
+ #define map_scsi_sg_data(np, cmd)	__map_scsi_sg_data(np->dev, cmd)
+-#define sync_scsi_data_for_cpu(np, cmd)	__sync_scsi_data_for_cpu(np->dev, cmd)
+-#define sync_scsi_data_for_device(np, cmd) __sync_scsi_data_for_device(np->dev, cmd)
+ 
+ /*==========================================================
+ **
+Index: debian-kernel-hppa-2.6.10/drivers/scsi/zalon.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/scsi/zalon.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/scsi/zalon.c	2005-01-21 12:16:45.000000000 -0500
+@@ -87,7 +87,7 @@
+ {
+ 	struct gsc_irq gsc_irq;
+ 	u32 zalon_vers;
+-	int irq, error = -ENODEV;
++	int error = -ENODEV;
+ 	unsigned long zalon = dev->hpa;
+ 	unsigned long io_port = zalon + GSC_SCSI_ZALON_OFFSET;
+ 	static int unit = 0;
+@@ -107,10 +107,10 @@
+ 	/* Setup the interrupts first.
+ 	** Later on request_irq() will register the handler.
+ 	*/
+-	irq = gsc_alloc_irq(&gsc_irq);
++	dev->irq = gsc_alloc_irq(&gsc_irq);
+ 
+ 	printk("%s: Zalon vers field is 0x%x, IRQ %d\n", __FUNCTION__,
+-		zalon_vers, irq);
++		zalon_vers, dev->irq);
+ 
+ 	__raw_writel(gsc_irq.txn_addr | gsc_irq.txn_data, dev->hpa + IO_MODULE_EIM);
+ 
+@@ -130,16 +130,16 @@
+ 	device.dev		= &dev->dev;
+ 	device.slot.base	= (u_long)io_port;
+ 	device.slot.base_c	= (u_long)io_port;
+-	device.slot.irq		= irq;
++	device.slot.irq		= dev->irq;
+ 	device.differential	= 2;
+ 
+ 	host = ncr_attach(&zalon7xx_template, unit, &device);
+ 	if (!host)
+ 		goto fail;
+ 
+-	if (request_irq(irq, ncr53c8xx_intr, SA_SHIRQ, dev->dev.bus_id, host)) {
++	if (request_irq(dev->irq, ncr53c8xx_intr, SA_SHIRQ, "zalon", host)) {
+ 		printk(KERN_ERR "%s: irq problem with %d, detaching\n ",
+-			dev->dev.bus_id, irq);
++			dev->dev.bus_id, dev->irq);
+ 		goto fail;
+ 	}
+ 
+@@ -155,7 +155,7 @@
+ 	return 0;
+ 
+  fail_free_irq:
+-	free_irq(irq, host);
++	free_irq(dev->irq, host);
+  fail:
+ 	ncr53c8xx_release(host);
+ 	return error;
+@@ -171,18 +171,16 @@
+ static int __exit zalon_remove(struct parisc_device *dev)
+ {
+ 	struct Scsi_Host *host = dev_get_drvdata(&dev->dev);
+-	int irq = host->irq;
+ 
+ 	scsi_remove_host(host);
+ 	ncr53c8xx_release(host);
+-	free_irq(irq, host);
++	free_irq(dev->irq, host);
+ 
+ 	return 0;
+ }
+-	
+ 
+ static struct parisc_driver zalon_driver = {
+-	.name =		"GSC SCSI (Zalon)",
++	.name =		"zalon",
+ 	.id_table =	zalon_tbl,
+ 	.probe =	zalon_probe,
+ 	.remove =	__devexit_p(zalon_remove),
+@@ -201,6 +199,7 @@
+ static void __exit zalon7xx_exit(void)
+ {
+ 	unregister_parisc_driver(&zalon_driver);
++	ncr53c8xx_exit();
+ }
+ 
+ module_init(zalon7xx_init);
+Index: debian-kernel-hppa-2.6.10/drivers/serial/8250_gsc.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/serial/8250_gsc.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/serial/8250_gsc.c	2005-01-21 12:16:45.000000000 -0500
+@@ -40,7 +40,7 @@
+ 		 * what we have here is a missing parent device, so tell
+ 		 * the user what they're missing.
+ 		 */
+-		if (dev->parent->id.hw_type != HPHW_IOA) {
++		if (parisc_parent(dev)->id.hw_type != HPHW_IOA) {
+ 			printk(KERN_INFO "Serial: device 0x%lx not configured.\n"
+ 				"Enable support for Wax, Lasi, Asp or Dino.\n", dev->hpa);
+ 		}
+@@ -65,7 +65,7 @@
+ 		printk(KERN_WARNING "serial8250_register_port returned error %d\n", err);
+ 		return err;
+ 	}
+-
++        
+ 	return 0;
+ }
+ 
+Index: debian-kernel-hppa-2.6.10/drivers/serial/mux.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/serial/mux.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/serial/mux.c	2005-01-21 12:16:45.000000000 -0500
+@@ -27,6 +27,7 @@
+ #include <linux/delay.h> /* for udelay */
+ #include <linux/device.h>
+ #include <asm/io.h>
++#include <asm/irq.h>
+ #include <asm/parisc-device.h>
+ 
+ #ifdef CONFIG_MAGIC_SYSRQ
+@@ -475,7 +476,7 @@
+ 		port->membase	= ioremap(port->mapbase, MUX_LINE_OFFSET);
+ 		port->iotype	= SERIAL_IO_MEM;
+ 		port->type	= PORT_MUX;
+-		port->irq	= SERIAL_IRQ_NONE;
++		port->irq	= NO_IRQ;
+ 		port->uartclk	= 0;
+ 		port->fifosize	= MUX_FIFO_SIZE;
+ 		port->ops	= &mux_pops;
+Index: debian-kernel-hppa-2.6.10/drivers/serial/serial_core.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/serial/serial_core.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/serial/serial_core.c	2005-01-21 12:16:45.000000000 -0500
+@@ -1915,7 +1915,14 @@
+ 		printk("MMIO 0x%lx", port->mapbase);
+ 		break;
+ 	}
+-	printk(" (irq = %d) is a %s\n", port->irq, uart_type(port));
++#ifndef NO_IRQ
++#define NO_IRQ (-1)
++#endif
++	if (port->irq == NO_IRQ) {
++		printk(" (polled) is a %s\n", uart_type(port));
++	} else {
++		printk(" (irq = %d) is a %s\n", port->irq, uart_type(port));
++	}
+ }
+ 
+ static void
+Index: debian-kernel-hppa-2.6.10/drivers/video/console/sticore.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/video/console/sticore.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/video/console/sticore.c	2005-01-21 12:16:45.000000000 -0500
+@@ -1013,7 +1013,7 @@
+ MODULE_DEVICE_TABLE(pci, sti_pci_tbl);
+ 
+ static struct pci_driver pci_sti_driver = {
+-	.name		= "sti (pci)",
++	.name		= "sti",
+ 	.id_table	= sti_pci_tbl,
+ 	.probe		= sticore_pci_init,
+ 	.remove		= sticore_pci_remove,
+@@ -1026,7 +1026,7 @@
+ };
+ 
+ static struct parisc_driver pa_sti_driver = {
+-	.name		= "sti (native)",
++	.name		= "sti",
+ 	.id_table	= sti_pa_tbl,
+ 	.probe		= sticore_pa_init,
+ };
+Index: debian-kernel-hppa-2.6.10/drivers/video/stifb.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/drivers/video/stifb.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/drivers/video/stifb.c	2005-01-21 12:16:45.000000000 -0500
+@@ -112,11 +112,10 @@
+ 	ngle_rom_t ngle_rom;
+ 	struct sti_struct *sti;
+ 	int deviceSpecificConfig;
+-	u32 pseudo_palette[16];
++	u32 pseudo_palette[256];
+ };
+ 
+-static int __initdata bpp = 8;	/* parameter from modprobe */
+-static int __initdata stifb_force_bpp[MAX_STI_ROMS];
++static int __initdata stifb_bpp_pref[MAX_STI_ROMS];
+ 
+ /* ------------------- chipset specific functions -------------------------- */
+ 
+@@ -155,15 +154,15 @@
+ #define REG_44		0x210030
+ #define REG_45		0x210034
+ 
+-#define READ_BYTE(fb,reg)		__raw_readb((fb)->info.fix.mmio_start + (reg))
+-#define READ_WORD(fb,reg)		__raw_readl((fb)->info.fix.mmio_start + (reg))
++#define READ_BYTE(fb,reg)		gsc_readb((fb)->info.fix.mmio_start + (reg))
++#define READ_WORD(fb,reg)		gsc_readl((fb)->info.fix.mmio_start + (reg))
+ 
+ 
+ #ifndef DEBUG_STIFB_REGS
+ # define  DEBUG_OFF()
+ # define  DEBUG_ON()
+-# define WRITE_BYTE(value,fb,reg)	__raw_writeb((value),(fb)->info.fix.mmio_start + (reg))
+-# define WRITE_WORD(value,fb,reg)	__raw_writel((value),(fb)->info.fix.mmio_start + (reg))
++# define WRITE_BYTE(value,fb,reg)	gsc_writeb((value),(fb)->info.fix.mmio_start + (reg))
++# define WRITE_WORD(value,fb,reg)	gsc_writel((value),(fb)->info.fix.mmio_start + (reg))
+ #else
+   static int debug_on = 1;
+ # define  DEBUG_OFF() debug_on=0
+@@ -171,11 +170,11 @@
+ # define WRITE_BYTE(value,fb,reg)	do { if (debug_on) \
+ 						printk(KERN_DEBUG "%30s: WRITE_BYTE(0x%06x) = 0x%02x (old=0x%02x)\n", \
+ 							__FUNCTION__, reg, value, READ_BYTE(fb,reg)); 		  \
+-					__raw_writeb((value),(fb)->info.fix.mmio_start + (reg)); } while (0)
++					gsc_writeb((value),(fb)->info.fix.mmio_start + (reg)); } while (0)
+ # define WRITE_WORD(value,fb,reg)	do { if (debug_on) \
+ 						printk(KERN_DEBUG "%30s: WRITE_WORD(0x%06x) = 0x%08x (old=0x%08x)\n", \
+ 							__FUNCTION__, reg, value, READ_WORD(fb,reg)); 		  \
+-					__raw_writel((value),(fb)->info.fix.mmio_start + (reg)); } while (0)
++					gsc_writel((value),(fb)->info.fix.mmio_start + (reg)); } while (0)
+ #endif /* DEBUG_STIFB_REGS */
+ 
+ 
+@@ -1018,6 +1017,15 @@
+ 			 (blue));
+ 	}
+ 
++	if (info->var.bits_per_pixel == 32) {
++		((u32 *)(info->pseudo_palette))[regno] =
++			(red   << info->var.red.offset)   |
++			(green << info->var.green.offset) |
++			(blue  << info->var.blue.offset);
++	} else {
++		((u32 *)(info->pseudo_palette))[regno] = regno;
++	}
++
+ 	WRITE_IMAGE_COLOR(fb, regno, color);
+ 	
+ 	if (fb->id == S9000_ID_HCRX) {
+@@ -1031,14 +1039,6 @@
+ 				/* 0x100 is same as used in WRITE_IMAGE_COLOR() */
+ 		START_COLORMAPLOAD(fb, lutBltCtl.all);
+ 		SETUP_FB(fb);
+-
+-		/* info->var.bits_per_pixel == 32 */
+-		if (regno < 16) 
+-		  ((u32 *)(info->pseudo_palette))[regno] =
+-			(red   << info->var.red.offset)   |
+-			(green << info->var.green.offset) |
+-			(blue  << info->var.blue.offset);
+-
+ 	} else {
+ 		/* cleanup colormap hardware */
+ 		FINISH_IMAGE_COLORMAP_ACCESS(fb);
+@@ -1156,7 +1156,7 @@
+  */
+ 
+ int __init
+-stifb_init_fb(struct sti_struct *sti, int force_bpp)
++stifb_init_fb(struct sti_struct *sti, int bpp_pref)
+ {
+ 	struct fb_fix_screeninfo *fix;
+ 	struct fb_var_screeninfo *var;
+@@ -1257,10 +1257,10 @@
+ #ifdef __LP64__
+ 	        sti_rom_address |= 0xffffffff00000000;
+ #endif
+-		fb->deviceSpecificConfig = __raw_readl(sti_rom_address);
++		fb->deviceSpecificConfig = gsc_readl(sti_rom_address);
+ 		if (IS_24_DEVICE(fb)) {
+-			if (force_bpp == 8 || force_bpp == 32)
+-				bpp = force_bpp;
++			if (bpp_pref == 8 || bpp_pref == 32)
++				bpp = bpp_pref;
+ 			else
+ 				bpp = 32;
+ 		} else
+@@ -1409,21 +1409,24 @@
+ 	
+ 	def_sti = sti_get_rom(0);
+ 	if (def_sti) {
+-		for (i = 1; i < MAX_STI_ROMS; i++) {
++		for (i = 1; i <= MAX_STI_ROMS; i++) {
+ 			sti = sti_get_rom(i);
+-			if (sti == def_sti && bpp > 0)
+-				stifb_force_bpp[i] = bpp;
++			if (!sti)
++				break;
++			if (sti == def_sti) {
++				stifb_init_fb(sti, stifb_bpp_pref[i - 1]);
++				break;
++			}
+ 		}
+-		stifb_init_fb(def_sti, stifb_force_bpp[i]);
+ 	}
+ 
+-	for (i = 1; i < MAX_STI_ROMS; i++) {
++	for (i = 1; i <= MAX_STI_ROMS; i++) {
+ 		sti = sti_get_rom(i);
+-		if (!sti || sti==def_sti)
++		if (!sti)
+ 			break;
+-		if (bpp > 0)
+-			stifb_force_bpp[i] = bpp;
+-		stifb_init_fb(sti, stifb_force_bpp[i]);
++		if (sti == def_sti)
++			continue;
++		stifb_init_fb(sti, stifb_bpp_pref[i - 1]);
+ 	}
+ 	return 0;
+ }
+@@ -1438,7 +1441,7 @@
+ 	struct sti_struct *sti;
+ 	int i;
+ 	
+-	for (i = 1; i < MAX_STI_ROMS; i++) {
++	for (i = 1; i <= MAX_STI_ROMS; i++) {
+ 		sti = sti_get_rom(i);
+ 		if (!sti)
+ 			break;
+@@ -1470,11 +1473,9 @@
+ 	if (strncmp(options, "bpp", 3) == 0) {
+ 		options += 3;
+ 		for (i = 0; i < MAX_STI_ROMS; i++) {
+-			if (*options++ == ':') {
+-				stifb_force_bpp[i] = simple_strtoul(options, &options, 10);
+-				bpp = -1;
+-			} else
++			if (*options++ != ':')
+ 				break;
++			stifb_bpp_pref[i] = simple_strtoul(options, &options, 10);
+ 		}
+ 	}
+ 	return 0;
+Index: debian-kernel-hppa-2.6.10/fs/smbfs/inode.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/fs/smbfs/inode.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/fs/smbfs/inode.c	2005-01-21 12:16:45.000000000 -0500
+@@ -563,6 +563,7 @@
+ 
+ 	mnt->ttl = SMB_TTL_DEFAULT;
+ 	if (ver == SMB_MOUNT_OLDVERSION) {
++#ifdef CONFIG_UID16
+ 		mnt->version = oldmnt->version;
+ 
+ 		SET_UID(mnt->uid, oldmnt->uid);
+@@ -573,6 +574,9 @@
+ 
+ 		mnt->flags = (oldmnt->file_mode >> 9) | SMB_MOUNT_UID |
+ 			SMB_MOUNT_GID | SMB_MOUNT_FMODE | SMB_MOUNT_DMODE;
++#else
++		goto out_bad_option;
++#endif
+ 	} else {
+ 		mnt->file_mode = S_IRWXU | S_IRGRP | S_IXGRP |
+ 				S_IROTH | S_IXOTH | S_IFREG;
+Index: debian-kernel-hppa-2.6.10/include/asm-generic/compat_signal.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/include/asm-generic/compat_signal.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,25 @@
++#ifndef _ASM_GENERIC_COMPAT_SIGNAL_H
++#define _ASM_GENERIC_COMPAT_SIGNAL_H
++
++#ifndef __ASSEMBLY__
++#include <linux/compat.h>
++
++typedef compat_uptr_t compat_sighandler_t;
++
++typedef struct compat_sigaltstack {
++	compat_uptr_t ss_sp;
++	compat_int_t ss_flags;
++	compat_size_t ss_size;
++} compat_stack_t;
++
++/* Most things should be clean enough to redefine this at will, if care
++   is taken to make libc match.  */
++
++struct compat_sigaction {
++	compat_sighandler_t sa_handler;
++	compat_uint_t sa_flags;
++	compat_sigset_t sa_mask;		/* mask last for extensibility */
++};
++
++#endif /* !__ASSEMBLY__ */
++#endif /* !_ASM_GENERIC_COMPAT_SIGNAL_H */
+Index: debian-kernel-hppa-2.6.10/include/asm-generic/siginfo.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-generic/siginfo.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-generic/siginfo.h	2005-01-21 12:16:45.000000000 -0500
+@@ -240,9 +240,13 @@
+ #define SIGEV_THREAD	2	/* deliver via thread creation */
+ #define SIGEV_THREAD_ID 4	/* deliver to thread */
+ 
++#ifndef __ARCH_SIGEV_PREAMBLE_SIZE
++#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(int) * 2 + sizeof(sigval_t))
++#endif
++
+ #define SIGEV_MAX_SIZE	64
+ #ifndef SIGEV_PAD_SIZE
+-#define SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE/sizeof(int)) - 3)
++#define SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE)/sizeof(int))
+ #endif
+ 
+ #ifndef HAVE_ARCH_SIGEVENT_T
+Index: debian-kernel-hppa-2.6.10/include/asm-ia64/compat.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-ia64/compat.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-ia64/compat.h	2005-01-21 12:16:45.000000000 -0500
+@@ -15,6 +15,9 @@
+ typedef s32		compat_pid_t;
+ typedef u16		compat_uid_t;
+ typedef u16		compat_gid_t;
++/* Define for use in compat_siginfo_t */
++#undef __ARCH_SI_COMPAT_UID_T
++#define __ARCH_SI_COMPAT_UID_T	compat_uid32_t
+ typedef u32		compat_uid32_t;
+ typedef u32		compat_gid32_t;
+ typedef u16		compat_mode_t;
+@@ -27,6 +30,7 @@
+ typedef s32		compat_daddr_t;
+ typedef u32		compat_caddr_t;
+ typedef __kernel_fsid_t	compat_fsid_t;
++typedef s32		compat_timer_t;
+ 
+ typedef s32		compat_int_t;
+ typedef s32		compat_long_t;
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/assembly.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/assembly.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/assembly.h	2005-01-21 12:16:45.000000000 -0500
+@@ -37,6 +37,7 @@
+ #define LDREGX  ldwx,s
+ #define LDREGM	ldwm
+ #define STREGM	stwm
++#define SHRREG  shr
+ #define RP_OFFSET	20
+ #define FRAME_SIZE	64
+ #define CALLEE_SAVE_FRAME_SIZE	128
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/cache.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/cache.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/cache.h	2005-01-21 12:16:45.000000000 -0500
+@@ -34,6 +34,7 @@
+ extern void flush_instruction_cache_local(void); /* flushes local code-cache only */
+ #ifdef CONFIG_SMP
+ extern void flush_data_cache(void); /* flushes data-cache only (all processors) */
++extern void flush_instruction_cache(void); /* flushes i-cache only (all processors) */
+ #else
+ #define flush_data_cache flush_data_cache_local
+ #define flush_instruction_cache flush_instruction_cache_local
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/cacheflush.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/cacheflush.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/cacheflush.h	2005-01-21 12:16:45.000000000 -0500
+@@ -33,36 +33,25 @@
+ #define flush_cache_vmap(start, end)		flush_cache_all()
+ #define flush_cache_vunmap(start, end)		flush_cache_all()
+ 
+-/* The following value needs to be tuned and probably scaled with the
+- * cache size.
+- */
+-
+-#define FLUSH_THRESHOLD 0x80000
++extern int parisc_cache_flush_threshold;
++void parisc_setup_cache_timing(void);
+ 
+ static inline void
+ flush_user_dcache_range(unsigned long start, unsigned long end)
+ {
+-#ifdef CONFIG_SMP
+-	flush_user_dcache_range_asm(start,end);
+-#else
+-	if ((end - start) < FLUSH_THRESHOLD)
++	if ((end - start) < parisc_cache_flush_threshold)
+ 		flush_user_dcache_range_asm(start,end);
+ 	else
+ 		flush_data_cache();
+-#endif
+ }
+ 
+ static inline void
+ flush_user_icache_range(unsigned long start, unsigned long end)
+ {
+-#ifdef CONFIG_SMP
+-	flush_user_icache_range_asm(start,end);
+-#else
+-	if ((end - start) < FLUSH_THRESHOLD)
++	if ((end - start) < parisc_cache_flush_threshold)
+ 		flush_user_icache_range_asm(start,end);
+ 	else
+ 		flush_instruction_cache();
+-#endif
+ }
+ 
+ extern void flush_dcache_page(struct page *page);
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/checksum.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/checksum.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/checksum.h	2005-01-21 12:16:45.000000000 -0500
+@@ -29,7 +29,7 @@
+  * this is a new version of the above that records errors it finds in *errp,
+  * but continues and zeros the rest of the buffer.
+  */
+-extern unsigned int csum_partial_copy_from_user(const char *src, char *dst, int len, unsigned int sum, int *errp);
++extern unsigned int csum_partial_copy_from_user(const char __user *src, char *dst, int len, unsigned int sum, int *errp);
+ 
+ /*
+  *	Optimized for IP headers, which always checksum on 4 octet boundaries.
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/compat.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/compat.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/compat.h	2005-01-21 12:16:45.000000000 -0500
+@@ -131,15 +131,15 @@
+  */
+ typedef	u32		compat_uptr_t;
+ 
+-static inline void *compat_ptr(compat_uptr_t uptr)
++static inline void __user *compat_ptr(compat_uptr_t uptr)
+ {
+-	return (void *)(unsigned long)uptr;
++	return (void __user *)(unsigned long)uptr;
+ }
+ 
+-static __inline__ void *compat_alloc_user_space(long len)
++static __inline__ void __user *compat_alloc_user_space(long len)
+ {
+ 	struct pt_regs *regs = &current->thread.regs;
+-	return (void *)regs->gr[30];
++	return (void __user *)regs->gr[30];
+ }
+ 
+ #endif /* _ASM_PARISC_COMPAT_H */
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/dma-mapping.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/dma-mapping.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/dma-mapping.h	2005-01-21 12:16:45.000000000 -0500
+@@ -1,8 +1,8 @@
+ #ifndef _PARISC_DMA_MAPPING_H
+ #define _PARISC_DMA_MAPPING_H
+ 
+-#include <linux/mm.h>
+ #include <linux/config.h>
++#include <linux/mm.h>
+ #include <asm/cacheflush.h>
+ #include <asm/scatterlist.h>
+ 
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/hardware.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/hardware.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/hardware.h	2005-01-21 12:16:45.000000000 -0500
+@@ -117,12 +117,13 @@
+ extern void walk_central_bus(void);
+ extern void fixup_child_irqs(struct parisc_device *parent, int irqbase,
+ 		int (*choose)(struct parisc_device *parent));
+-extern void print_subdevices(struct parisc_device *dev);
+ extern const struct parisc_device *find_pa_parent_type(const struct parisc_device *, int);
+ extern void print_parisc_devices(void);
+ extern char *print_pa_hwpath(struct parisc_device *dev, char *path);
+ extern char *print_pci_hwpath(struct pci_dev *dev, char *path);
+ extern void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path);
++extern void init_parisc_bus(void);
++extern struct device *hwpath_to_device(struct hardware_path *modpath);
+ 
+ 
+ /* inventory.c: */
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/ide.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/ide.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/ide.h	2005-01-21 12:16:45.000000000 -0500
+@@ -34,7 +34,7 @@
+ #define __ide_outsw	outsw
+ #define __ide_outsl	outsl
+ 
+-static __inline__ void __ide_mm_insw(unsigned long port, void *addr, u32 count)
++static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
+ {
+ 	while (count--) {
+ 		*(u16 *)addr = __raw_readw(port);
+@@ -42,7 +42,7 @@
+ 	}
+ }
+ 
+-static __inline__ void __ide_mm_insl(unsigned long port, void *addr, u32 count)
++static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
+ {
+ 	while (count--) {
+ 		*(u32 *)addr = __raw_readl(port);
+@@ -50,7 +50,7 @@
+ 	}
+ }
+ 
+-static __inline__ void __ide_mm_outsw(unsigned long port, void *addr, u32 count)
++static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
+ {
+ 	while (count--) {
+ 		__raw_writew(*(u16 *)addr, port);
+@@ -58,7 +58,7 @@
+ 	}
+ }
+ 
+-static __inline__ void __ide_mm_outsl(unsigned long port, void *addr, u32 count)
++static __inline__ void __ide_mm_outsl(void __iomem *port, void *addr, u32 count)
+ {
+ 	while (count--) {
+ 		__raw_writel(*(u32 *)addr, port);
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/io.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/io.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/io.h	2005-01-21 12:16:45.000000000 -0500
+@@ -1,14 +1,6 @@
+ #ifndef _ASM_IO_H
+ #define _ASM_IO_H
+ 
+-/* USE_HPPA_IOREMAP IS THE MAGIC FLAG TO ENABLE OR DISABLE REAL IOREMAP() FUNCTIONALITY */
+-/* FOR 712 or 715 MACHINES THIS SHOULD BE ENABLED, 
+-   NEWER MACHINES STILL HAVE SOME ISSUES IN THE SCSI AND/OR NETWORK DRIVERS AND 
+-   BECAUSE OF THAT I WILL LEAVE IT DISABLED FOR NOW <deller at gmx.de> */
+-/* WHEN THOSE ISSUES ARE SOLVED, USE_HPPA_IOREMAP WILL GO AWAY */
+-#define USE_HPPA_IOREMAP 0
+-
+-
+ #include <linux/config.h>
+ #include <linux/types.h>
+ #include <asm/pgtable.h>
+@@ -26,32 +18,10 @@
+ 
+ /* Memory mapped IO */
+ 
+-extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
+-
+-extern inline void * ioremap(unsigned long offset, unsigned long size)
+-{
+-	return __ioremap(offset, size, 0);
+-}
+-
+-/*
+- * This one maps high address device memory and turns off caching for that area.
+- * it's useful if some control registers are in such an area and write combining
+- * or read caching is not desirable:
+- */
+-extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
+-{
+-        return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */);
+-}
+-
+-extern void iounmap(void *addr);
+-
+-/*
+- * __raw_ variants have no defined meaning.  on hppa, it means `i was
+- * too lazy to ioremap first'.  kind of like isa_, except that there's
+- * no additional base address to add on.
++/* 
++ * These functions support PA-RISC drivers which don't yet call ioremap().
+  */
+-#define __raw_readb(a) ___raw_readb((unsigned long)(a))
+-extern __inline__ unsigned char ___raw_readb(unsigned long addr)
++static inline unsigned char gsc_readb(unsigned long addr)
+ {
+ 	long flags;
+ 	unsigned char ret;
+@@ -65,8 +35,7 @@
+ 	return ret;
+ }
+ 
+-#define __raw_readw(a) ___raw_readw((unsigned long)(a))
+-extern __inline__ unsigned short ___raw_readw(unsigned long addr)
++static inline unsigned short gsc_readw(unsigned long addr)
+ {
+ 	long flags;
+ 	unsigned short ret;
+@@ -80,8 +49,7 @@
+ 	return ret;
+ }
+ 
+-#define __raw_readl(a) ___raw_readl((unsigned long)(a))
+-extern __inline__ unsigned int ___raw_readl(unsigned long addr)
++static inline unsigned int gsc_readl(unsigned long addr)
+ {
+ 	u32 ret;
+ 
+@@ -92,8 +60,7 @@
+ 	return ret;
+ }
+ 
+-#define __raw_readq(a) ___raw_readq((unsigned long)(a))
+-extern __inline__ unsigned long long ___raw_readq(unsigned long addr)
++static inline unsigned long long gsc_readq(unsigned long addr)
+ {
+ 	unsigned long long ret;
+ #ifdef __LP64__
+@@ -102,14 +69,13 @@
+ 	:  "=r" (ret) : "r" (addr) );
+ #else
+ 	/* two reads may have side effects.. */
+-	ret = ((u64) __raw_readl(addr)) << 32;
+-	ret |= __raw_readl(addr+4);
++	ret = ((u64) gsc_readl(addr)) << 32;
++	ret |= gsc_readl(addr+4);
+ #endif
+ 	return ret;
+ }
+ 
+-#define __raw_writeb(a,b) ___raw_writeb(a, (unsigned long)(b))
+-extern __inline__ void ___raw_writeb(unsigned char val, unsigned long addr)
++static inline void gsc_writeb(unsigned char val, unsigned long addr)
+ {
+ 	long flags;
+ 	__asm__ __volatile__(
+@@ -119,8 +85,7 @@
+ 	: "=&r" (flags) :  "r" (val), "r" (addr) );
+ }
+ 
+-#define __raw_writew(a,b) ___raw_writew(a, (unsigned long)(b))
+-extern __inline__ void ___raw_writew(unsigned short val, unsigned long addr)
++static inline void gsc_writew(unsigned short val, unsigned long addr)
+ {
+ 	long flags;
+ 	__asm__ __volatile__(
+@@ -130,16 +95,14 @@
+ 	: "=&r" (flags) :  "r" (val), "r" (addr) );
+ }
+ 
+-#define __raw_writel(a,b) ___raw_writel(a, (unsigned long)(b))
+-extern __inline__ void ___raw_writel(unsigned int val, unsigned long addr)
++static inline void gsc_writel(unsigned int val, unsigned long addr)
+ {
+ 	__asm__ __volatile__(
+ 	"	stwas	%0,0(%1)\n"
+ 	: :  "r" (val), "r" (addr) );
+ }
+ 
+-#define __raw_writeq(a,b) ___raw_writeq(a, (unsigned long)(b))
+-extern __inline__ void ___raw_writeq(unsigned long long val, unsigned long addr)
++static inline void gsc_writeq(unsigned long long val, unsigned long addr)
+ {
+ #ifdef __LP64__
+ 	__asm__ __volatile__(
+@@ -147,71 +110,145 @@
+ 	: :  "r" (val), "r" (addr) );
+ #else
+ 	/* two writes may have side effects.. */
+-	__raw_writel(val >> 32, addr);
+-	__raw_writel(val, addr+4);
++	gsc_writel(val >> 32, addr);
++	gsc_writel(val, addr+4);
+ #endif
+ }
+ 
++/*
++ * The standard PCI ioremap interfaces
++ */
++
++extern void __iomem * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
++
++extern inline void __iomem * ioremap(unsigned long offset, unsigned long size)
++{
++	return __ioremap(offset, size, 0);
++}
++
++/*
++ * This one maps high address device memory and turns off caching for that area.
++ * it's useful if some control registers are in such an area and write combining
++ * or read caching is not desirable:
++ */
++extern inline void * ioremap_nocache(unsigned long offset, unsigned long size)
++{
++        return __ioremap(offset, size, _PAGE_NO_CACHE /* _PAGE_PCD */);
++}
++
++extern void iounmap(void __iomem *addr);
++
++/*
++ * USE_HPPA_IOREMAP is the magic flag to enable or disable real ioremap()
++ * functionality.  It's currently disabled because it may not work on some
++ * machines.
++ */
++#define USE_HPPA_IOREMAP 0
++
+ #if USE_HPPA_IOREMAP
+-#define readb(addr) (*(volatile unsigned char *) (addr))
+-#define readw(addr) (*(volatile unsigned short *) (addr))
+-#define readl(addr) (*(volatile unsigned int *) (addr))
+-#define readq(addr) (*(volatile u64 *) (addr))
+-#define writeb(b,addr) (*(volatile unsigned char *) (addr) = (b))
+-#define writew(b,addr) (*(volatile unsigned short *) (addr) = (b))
+-#define writel(b,addr) (*(volatile unsigned int *) (addr) = (b))
+-#define writeq(b,addr) (*(volatile u64 *) (addr) = (b))
++static inline unsigned char __raw_readb(const volatile void __iomem *addr)
++{
++	return (*(volatile unsigned char __force *) (addr));
++}
++static inline unsigned short __raw_readw(const volatile void __iomem *addr)
++{
++	return *(volatile unsigned short __force *) addr;
++}
++static inline unsigned int __raw_readl(const volatile void __iomem *addr)
++{
++	return *(volatile unsigned int __force *) addr;
++}
++static inline unsigned long long __raw_readq(const volatile void __iomem *addr)
++{
++	return *(volatile unsigned long long __force *) addr;
++}
++
++static inline void __raw_writeb(unsigned char b, volatile void __iomem *addr)
++{
++	*(volatile unsigned char __force *) addr = b;
++}
++static inline void __raw_writew(unsigned short b, volatile void __iomem *addr)
++{
++	*(volatile unsigned short __force *) addr = b;
++}
++static inline void __raw_writel(unsigned int b, volatile void __iomem *addr)
++{
++	*(volatile unsigned int __force *) addr = b;
++}
++static inline void __raw_writeq(unsigned long long b, volatile void __iomem *addr)
++{
++	*(volatile unsigned long long __force *) addr = b;
++}
+ #else /* !USE_HPPA_IOREMAP */
++static inline unsigned char __raw_readb(const volatile void __iomem *addr)
++{
++	return gsc_readb((unsigned long) addr);
++}
++static inline unsigned short __raw_readw(const volatile void __iomem *addr)
++{
++	return gsc_readw((unsigned long) addr);
++}
++static inline unsigned int __raw_readl(const volatile void __iomem *addr)
++{
++	return gsc_readl((unsigned long) addr);
++}
++static inline unsigned long long __raw_readq(const volatile void __iomem *addr)
++{
++	return gsc_readq((unsigned long) addr);
++}
++
++static inline void __raw_writeb(unsigned char b, volatile void __iomem *addr)
++{
++	gsc_writeb(b, (unsigned long) addr);
++}
++static inline void __raw_writew(unsigned short b, volatile void __iomem *addr)
++{
++	gsc_writew(b, (unsigned long) addr);
++}
++static inline void __raw_writel(unsigned int b, volatile void __iomem *addr)
++{
++	gsc_writel(b, (unsigned long) addr);
++}
++static inline void __raw_writeq(unsigned long long b, volatile void __iomem *addr)
++{
++	gsc_writeq(b, (unsigned long) addr);
++}
++#endif /* !USE_HPPA_IOREMAP */
++
+ #define readb(addr) __raw_readb(addr)
+ #define readw(addr) le16_to_cpu(__raw_readw(addr))
+ #define readl(addr) le32_to_cpu(__raw_readl(addr))
+ #define readq(addr) le64_to_cpu(__raw_readq(addr))
+-#define writeb(b,addr) __raw_writeb(b,addr)
+-#define writew(b,addr) __raw_writew(cpu_to_le16(b),addr)
+-#define writel(b,addr) __raw_writel(cpu_to_le32(b),addr)
+-#define writeq(b,addr) __raw_writeq(cpu_to_le64(b),addr)
+-#endif /* !USE_HPPA_IOREMAP */
++#define writeb(b, addr) __raw_writeb(b, addr)
++#define writew(b, addr) __raw_writew(cpu_to_le16(b), addr)
++#define writel(b, addr) __raw_writel(cpu_to_le32(b), addr)
++#define writeq(b, addr) __raw_writeq(cpu_to_le64(b), addr)
+ 
+ #define readb_relaxed(addr) readb(addr)
+ #define readw_relaxed(addr) readw(addr)
+ #define readl_relaxed(addr) readl(addr)
+ #define readq_relaxed(addr) readq(addr)
+ 
+-#define mmiowb()
++#define mmiowb() do { } while (0)
+ 
+-extern void __memcpy_fromio(unsigned long dest, unsigned long src, int count);
+-extern void __memcpy_toio(unsigned long dest, unsigned long src, int count);
+-extern void __memset_io(unsigned long dest, char fill, int count);
+-
+-#define memcpy_fromio(a,b,c) __memcpy_fromio((unsigned long)(a), (unsigned long)(b), (c))
+-#define memcpy_toio(a,b,c)   __memcpy_toio((unsigned long)(a), (unsigned long)(b), (c))
+-#define memset_io(a,b,c)     __memset_io((unsigned long)(a), (b), (c))
++void memset_io(volatile void __iomem *addr, unsigned char val, int count);
++void memcpy_fromio(void *dst, const volatile void __iomem *src, int count);
++void memcpy_toio(volatile void __iomem *dst, const void *src, int count);
+ 
+ /* Support old drivers which don't ioremap.
+  * NB this interface is scheduled to disappear in 2.5
+  */
+ 
+-#define EISA_BASE 0xfffffffffc000000UL
+-#define isa_readb(a) readb(EISA_BASE | (a))
+-#define isa_readw(a) readw(EISA_BASE | (a))
+-#define isa_readl(a) readl(EISA_BASE | (a))
+-#define isa_writeb(b,a) writeb((b), EISA_BASE | (a))
+-#define isa_writew(b,a) writew((b), EISA_BASE | (a))
+-#define isa_writel(b,a) writel((b), EISA_BASE | (a))
+-#define isa_memset_io(a,b,c) memset_io(EISA_BASE | (a), (b), (c))
+-#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a), EISA_BASE | (b), (c))
+-#define isa_memcpy_toio(a,b,c) memcpy_toio(EISA_BASE | (a), (b), (c))
+-
+-/* 
+- * These functions support PA-RISC drivers which don't yet call ioremap().
+- * They will disappear once the last of these drivers is gone.
+- */
+-#define gsc_readb(x) __raw_readb(x)
+-#define gsc_readw(x) __raw_readw(x)
+-#define gsc_readl(x) __raw_readl(x)
+-#define gsc_writeb(x, y) __raw_writeb(x, y)
+-#define gsc_writew(x, y) __raw_writew(x, y)
+-#define gsc_writel(x, y) __raw_writel(x, y)
++#define __isa_addr(x) (void __iomem *)(F_EXTEND(0xfc000000) | (x))
++#define isa_readb(a) readb(__isa_addr(a))
++#define isa_readw(a) readw(__isa_addr(a))
++#define isa_readl(a) readl(__isa_addr(a))
++#define isa_writeb(b,a) writeb((b), __isa_addr(a))
++#define isa_writew(b,a) writew((b), __isa_addr(a))
++#define isa_writel(b,a) writel((b), __isa_addr(a))
++#define isa_memset_io(a,b,c) memset_io(__isa_addr(a), (b), (c))
++#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a), __isa_addr(b), (c))
++#define isa_memcpy_toio(a,b,c) memcpy_toio(__isa_addr(a), (b), (c))
+ 
+ 
+ /*
+@@ -306,4 +343,6 @@
+  * value for either 32 or 64 bit mode */
+ #define F_EXTEND(x) ((unsigned long)((x) | (0xffffffff00000000ULL)))
+ 
++#include <asm-generic/iomap.h>
++
+ #endif
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/irq.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/irq.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/irq.h	2005-01-21 12:16:45.000000000 -0500
+@@ -19,6 +19,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/config.h>
+ 
++#define NO_IRQ	(-1)
+ 
+ #define CPU_IRQ_REGION		1
+ #define TIMER_IRQ		(IRQ_FROM_REGION(CPU_IRQ_REGION) | 0)
+@@ -47,8 +48,6 @@
+ struct irq_region_ops {
+ 	void (*disable_irq)(void *dev, int irq);
+ 	void (* enable_irq)(void *dev, int irq);
+-	void (*   mask_irq)(void *dev, int irq);
+-	void (* unmask_irq)(void *dev, int irq);
+ };
+ 
+ struct irq_region_data {
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/led.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/led.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/led.h	2005-01-21 12:16:45.000000000 -0500
+@@ -21,13 +21,13 @@
+ #define DISPLAY_MODEL_LASI 2		/* LASI style 8 bit LED */
+ #define DISPLAY_MODEL_OLD_ASP 0x7F	/* faked: ASP style 8 x 1 bit LED (only very old ASP versions) */
+ 
+-#define LED_CMD_REG_NONE NULL		/* NULL == no addr for the cmd register */
++#define LED_CMD_REG_NONE 0		/* NULL == no addr for the cmd register */
+ 
+ /* led tasklet struct */
+ extern struct tasklet_struct led_tasklet;
+ 
+ /* register_led_driver() */
+-int __init register_led_driver( int model, char *cmd_reg, char *data_reg );
++int __init register_led_driver(int model, unsigned long cmd_reg, unsigned long data_reg);
+ 
+ /* registers the LED regions for procfs */
+ void __init register_led_regions(void);
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/parisc-device.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/parisc-device.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/parisc-device.h	2005-01-21 12:16:45.000000000 -0500
+@@ -3,11 +3,7 @@
+ struct parisc_device {
+ 	unsigned long   hpa;		/* Hard Physical Address */
+ 	struct parisc_device_id id;
+-	struct parisc_device *parent;
+-	struct parisc_device *sibling;
+-	struct parisc_device *child;
+ 	struct parisc_driver *driver;	/* Driver for this device */
+-	void		*sysdata;	/* Driver instance private data */
+ 	char		name[80];	/* The hardware description */
+ 	int		irq;
+ 
+@@ -40,5 +36,18 @@
+ 
+ #define to_parisc_device(d)	container_of(d, struct parisc_device, dev)
+ #define to_parisc_driver(d)	container_of(d, struct parisc_driver, drv)
++#define parisc_parent(d)	to_parisc_device(d->dev.parent)
++
++static inline void
++parisc_set_drvdata(struct parisc_device *d, void *p)
++{
++	dev_set_drvdata(&d->dev, p);
++}
++
++static inline void *
++parisc_get_drvdata(struct parisc_device *d)
++{
++	return dev_get_drvdata(&d->dev);
++}
+ 
+ extern struct bus_type parisc_bus_type;
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/pci.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/pci.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/pci.h	2005-01-21 12:16:45.000000000 -0500
+@@ -28,7 +28,7 @@
+ ** Data needed by pcibios layer belongs here.
+ */
+ struct pci_hba_data {
+-	unsigned long	base_addr;	/* aka Host Physical Address */
++	void __iomem   *base_addr;	/* aka Host Physical Address */
+ 	const struct parisc_device *dev; /* device from PA bus walk */
+ 	struct pci_bus *hba_bus;	/* primary PCI bus below HBA */
+ 	int		hba_num;	/* I/O port space access "key" */
+@@ -106,11 +106,28 @@
+ struct pci_bus;
+ struct pci_dev;
+ 
+-/* The PCI address space does equal the physical memory
+- * address space.  The networking and block device layers use
++/*
++ * If the PCI device's view of memory is the same as the CPU's view of memory,
++ * PCI_DMA_BUS_IS_PHYS is true.  The networking and block device layers use
+  * this boolean for bounce buffer decisions.
+  */
+-#define PCI_DMA_BUS_IS_PHYS     (1)
++#ifdef CONFIG_PA20
++/* All PA-2.0 machines have an IOMMU. */
++#define PCI_DMA_BUS_IS_PHYS	0
++#define parisc_has_iommu()	do { } while (0)
++#else
++
++#if defined(CONFIG_IOMMU_CCIO) || defined(CONFIG_IOMMU_SBA)
++extern int parisc_bus_is_phys; 	/* in arch/parisc/kernel/setup.c */
++#define PCI_DMA_BUS_IS_PHYS	parisc_bus_is_phys
++#define parisc_has_iommu()	do { parisc_bus_is_phys = 0; } while (0)
++#else
++#define PCI_DMA_BUS_IS_PHYS	1
++#define parisc_has_iommu()	do { } while (0)
++#endif
++
++#endif	/* !CONFIG_PA20 */
++
+ 
+ /*
+ ** Most PCI devices (eg Tulip, NCR720) also export the same registers
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/pdc.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/pdc.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/pdc.h	2005-01-21 12:16:45.000000000 -0500
+@@ -471,6 +471,13 @@
+ 	unsigned long mod_pgs;
+ };
+ 
++struct pdc_initiator { /* PDC_INITIATOR */
++	int host_id;
++	int factor;
++	int width;
++	int mode;
++};
++
+ struct hardware_path {
+ 	char  flags;	/* see bit definitions below */
+ 	char  bc[6];	/* Bus Converter routing info to a specific */
+@@ -732,10 +739,16 @@
+ #endif /* !CONFIG_PA20 */
+ int pdc_lan_station_id(char *lan_addr, unsigned long net_hpa);
+ 
++int pdc_stable_read(unsigned long staddr, void *memaddr, unsigned long count);
++int pdc_stable_write(unsigned long staddr, void *memaddr, unsigned long count);
++int pdc_stable_get_size(unsigned long *size);
++int pdc_stable_verify_contents(void);
++int pdc_stable_initialize(void);
++
+ int pdc_pci_irt_size(unsigned long *num_entries, unsigned long hpa);
+ int pdc_pci_irt(unsigned long num_entries, unsigned long hpa, void *tbl);
+ 
+-int pdc_get_initiator(struct hardware_path *hwpath, unsigned char *scsi_id, unsigned long *period, char *width, char *mode);
++int pdc_get_initiator(struct hardware_path *, struct pdc_initiator *);
+ int pdc_tod_read(struct pdc_tod *tod);
+ int pdc_tod_set(unsigned long sec, unsigned long usec);
+ 
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/ptrace.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/ptrace.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/ptrace.h	2005-01-21 12:16:45.000000000 -0500
+@@ -47,7 +47,7 @@
+ 
+ /* XXX should we use iaoq[1] or iaoq[0] ? */
+ #define user_mode(regs)			(((regs)->iaoq[0] & 3) ? 1 : 0)
+-#define user_space(regs)		(((regs)->iasq[0] != 0) ? 1 : 0)
++#define user_space(regs)		(((regs)->iasq[1] != 0) ? 1 : 0)
+ #define instruction_pointer(regs)	((regs)->iaoq[0] & ~3)
+ #define profile_pc(regs) instruction_pointer(regs)
+ extern void show_regs(struct pt_regs *);
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/serial.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/serial.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/serial.h	2005-01-21 12:16:45.000000000 -0500
+@@ -13,21 +13,6 @@
+ #define LASI_BASE_BAUD ( 7272727 / 16 )
+ #define BASE_BAUD  LASI_BASE_BAUD
+ 
+-#ifdef CONFIG_SERIAL_DETECT_IRQ
+-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ)
+-#define STD_COM4_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_AUTO_IRQ)
+-#else
+-#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
+-#define STD_COM4_FLAGS ASYNC_BOOT_AUTOCONF
+-#endif
+-
+-#ifdef CONFIG_SERIAL_MANY_PORTS
+-#define FOURPORT_FLAGS ASYNC_FOURPORT
+-#define ACCENT_FLAGS 0
+-#define BOCA_FLAGS 0
+-#define HUB6_FLAGS 0
+-#endif
+-	
+ /*
+  * We don't use the ISA probing code, so these entries are just to reserve
+  * space.  Some example (maximal) configurations:
+Index: debian-kernel-hppa-2.6.10/include/asm-parisc/signal.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-parisc/signal.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-parisc/signal.h	2005-01-21 12:16:45.000000000 -0500
+@@ -123,13 +123,14 @@
+  * compiler doesn't support code which changes or tests the address of
+  * the function in the little struct.  This is really ugly -PB
+  */
+-typedef __kernel_caddr_t __sighandler_t;
++typedef char __user *__sighandler_t;
+ #else
+-typedef void (*__sighandler_t)(int);
++typedef void __signalfn_t(int);
++typedef __signalfn_t __user *__sighandler_t;
+ #endif
+ 
+ typedef struct sigaltstack {
+-	void *ss_sp;
++	void __user *ss_sp;
+ 	int ss_flags;
+ 	size_t ss_size;
+ } stack_t;
+Index: debian-kernel-hppa-2.6.10/include/asm-s390/compat.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-s390/compat.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-s390/compat.h	2005-01-21 12:16:45.000000000 -0500
+@@ -15,6 +15,9 @@
+ typedef s32		compat_pid_t;
+ typedef u16		compat_uid_t;
+ typedef u16		compat_gid_t;
++/* Define for use in compat_siginfo_t */
++#undef __ARCH_SI_COMPAT_UID_T
++#define __ARCH_SI_COMPAT_UID_T compat_uid32_t
+ typedef u32		compat_uid32_t;
+ typedef u32		compat_gid32_t;
+ typedef u16		compat_mode_t;
+Index: debian-kernel-hppa-2.6.10/include/asm-sparc64/compat.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/asm-sparc64/compat.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/asm-sparc64/compat.h	2005-01-21 12:16:45.000000000 -0500
+@@ -12,6 +12,9 @@
+ typedef s32		compat_time_t;
+ typedef s32		compat_clock_t;
+ typedef s32		compat_pid_t;
++/* Define for use in the compat_siginfo_t */
++#undef __ARCH_SI_COMPAT_UID_T
++#define __ARCH_SI_COMPAT_UID_T compat_uint_t
+ typedef u16		compat_uid_t;
+ typedef u16		compat_gid_t;
+ typedef u16		compat_mode_t;
+Index: debian-kernel-hppa-2.6.10/include/linux/compat.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/linux/compat.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/linux/compat.h	2005-01-21 12:16:45.000000000 -0500
+@@ -6,10 +6,16 @@
+  */
+ #include <linux/config.h>
+ 
+-#ifdef CONFIG_COMPAT
++#ifndef CONFIG_COMPAT
++
++/* Non-native task requiring compat... doesn't exist */
++#define is_compat_task(x) 0
++
++#else
+ 
+ #include <linux/stat.h>
+ #include <linux/param.h>	/* for HZ */
++#include <linux/personality.h>  /* Conditional process compat */
+ #include <linux/sem.h>
+ 
+ #include <asm/compat.h>
+@@ -18,6 +24,11 @@
+ #define compat_jiffies_to_clock_t(x)	\
+ 		(((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
+ 
++/* Non-native task requiring compat */
++#ifndef HAVE_ARCH_IS_COMPAT_TASK
++#define is_compat_task(x) (personality(x->personality) == PER_LINUX32)
++#endif
++	
+ struct compat_itimerspec { 
+ 	struct compat_timespec it_interval;
+ 	struct compat_timespec it_value;
+@@ -88,27 +99,6 @@
+ 	char		d_name[256];
+ };
+ 
+-typedef union compat_sigval {
+-	compat_int_t	sival_int;
+-	compat_uptr_t	sival_ptr;
+-} compat_sigval_t;
+-
+-typedef struct compat_sigevent {
+-	compat_sigval_t sigev_value;
+-	compat_int_t sigev_signo;
+-	compat_int_t sigev_notify;
+-	union {
+-		compat_int_t _pad[SIGEV_PAD_SIZE];
+-		compat_int_t _tid;
+-
+-		struct {
+-			compat_uptr_t _function;
+-			compat_uptr_t _attribute;
+-		} _sigev_thread;
+-	} _sigev_un;
+-} compat_sigevent_t;
+-
+-
+ long compat_sys_semctl(int first, int second, int third, void __user *uptr);
+ long compat_sys_msgsnd(int first, int second, int third, void __user *uptr);
+ long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
+Index: debian-kernel-hppa-2.6.10/include/linux/compat_siginfo.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/include/linux/compat_siginfo.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,184 @@
++#ifndef _ASM_GENERIC_COMPAT_SIGINFO_H
++#define _ASM_GENERIC_COMPAT_SIGINFO_H
++
++#include <linux/config.h>
++#include <linux/compat.h>
++
++#ifndef CONFIG_COMPAT
++
++/* No compatibility layer required, add empty definitions for the compiler */
++
++typedef struct compat_siginfo{
++} compat_siginfo_t;
++
++static inline int compat_copy_siginfo_to_user(compat_siginfo_t __user *to, 
++						struct siginfo *from)
++{
++	return -1;
++}
++
++static inline int compat_copy_siginfo_from_user(struct siginfo *to,
++                                                compat_siginfo_t __user *from)
++{
++        return -1;
++}
++
++#else
++
++#include <linux/compiler.h>
++#include <asm/siginfo.h>
++
++/* compat view of sigval_t */
++typedef union compat_sigval {
++	compat_int_t sival_int;
++	compat_uptr_t sival_ptr;
++} compat_sigval_t;
++
++/*
++ * This is the size (including padding) of the part of the
++ * struct siginfo that is before the union.
++ */
++#ifndef __ARCH_SI_COMPAT_PREAMBLE_SIZE
++#define __ARCH_SI_COMPAT_PREAMBLE_SIZE	(3 * sizeof(compat_int_t))
++#endif
++
++#define SI_COMPAT_MAX_SIZE	128
++#ifndef SI_COMPAT_PAD_SIZE
++#define SI_COMPAT_PAD_SIZE \
++  ((SI_COMPAT_MAX_SIZE - __ARCH_SI_COMPAT_PREAMBLE_SIZE) / sizeof(compat_int_t))
++#endif
++
++/* 32-bit view of si.uid_t */
++#ifndef __ARCH_SI_COMPAT_UID_T
++#define __ARCH_SI_COMPAT_UID_T compat_uid_t
++#endif
++
++/* 32-bit view of si.band_t */
++#ifndef __ARCH_SI_COMPAT_BAND_T
++#define __ARCH_SI_COMPAT_BAND_T compat_int_t
++#endif
++
++#ifndef HAVE_ARCH_COMPAT_SIGINFO_T
++
++/* Compat view of siginfo_t */
++typedef struct compat_siginfo {
++	compat_int_t si_signo;
++	compat_int_t si_errno;
++	compat_int_t si_code;
++
++	union {
++		compat_int_t _pad[SI_COMPAT_PAD_SIZE];
++
++		/* kill() */
++		struct {
++			compat_pid_t _pid;	/* sender's pid */
++			__ARCH_SI_COMPAT_UID_T _uid;	/* sender's uid */
++		} _kill;
++
++		/* POSIX.1b timers */
++		struct {
++			compat_timer_t _tid;	/* timer id */
++			compat_int_t _overrun;		/* overrun count */
++			char _pad[sizeof(__ARCH_SI_COMPAT_UID_T) - sizeof(compat_int_t)];
++			compat_sigval_t _sigval;	/* same as below */
++			compat_int_t _sys_private;       /* not to be passed to user */
++		} _timer;
++
++		/* POSIX.1b signals */
++		struct {
++			compat_pid_t _pid;		/* sender's pid */
++			__ARCH_SI_COMPAT_UID_T _uid;	/* sender's uid */
++			compat_sigval_t _sigval;
++		} _rt;
++
++		/* SIGCHLD */
++		struct {
++			compat_pid_t _pid;		/* which child */
++			__ARCH_SI_COMPAT_UID_T _uid;	/* sender's uid */
++			compat_int_t _status;		/* exit code */
++			compat_clock_t _utime;
++			compat_clock_t _stime;
++		} _sigchld;
++
++		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
++		struct {
++			compat_uptr_t _addr; /* faulting insn/memory ref. */
++#ifdef __ARCH_SI_COMPAT_TRAPNO
++			compat_int_t _trapno;	/* TRAP # which caused the signal */
++#endif
++		} _sigfault;
++
++		/* SIGPOLL */
++		struct {
++			__ARCH_SI_COMPAT_BAND_T _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
++			compat_int_t _fd;
++		} _sigpoll;
++	} _sifields;
++} compat_siginfo_t;
++#endif /* !HAVE_ARCH_COMPAT_SIGINFO_T */
++
++#ifdef __ARCH_SI_COMPAT_TRAPNO
++#define si_trapno	_sifields._sigfault._trapno
++#endif
++
++/*
++ * sigevent definitions
++ * 
++ * It seems likely that SIGEV_THREAD will have to be handled from 
++ * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
++ * thread manager then catches and does the appropriate nonsense.
++ * However, everything is written out here so as to not get lost.
++ */
++
++#ifndef __ARCH_SIGEV_COMPAT_PREAMBLE_SIZE
++#define __ARCH_SIGEV_COMPAT_PREAMBLE_SIZE (sizeof(compat_int_t) * 2 + sizeof(compat_sigval_t))
++#endif
++
++#define SIGEV_COMPAT_MAX_SIZE	64
++#ifndef SIGEV_COMPAT_PAD_SIZE
++#define SIGEV_COMPAT_PAD_SIZE	((SIGEV_COMPAT_MAX_SIZE - __ARCH_SIGEV_COMPAT_PREAMBLE_SIZE)/sizeof(compat_int_t))
++#endif
++
++#ifndef HAVE_ARCH_COMPAT_SIGEVENT_T
++
++/* 32-bit view of sigevent_t */
++typedef struct compat_sigevent {
++	compat_sigval_t sigev_value;
++	compat_int_t sigev_signo;
++	compat_int_t sigev_notify;
++	union {
++		compat_int_t _pad[SIGEV_COMPAT_PAD_SIZE];
++		compat_int_t _tid;
++
++		struct {
++			compat_uptr_t _function;
++			compat_uptr_t _attribute;	/* really pthread_attr_t */
++		} _sigev_thread;
++	} _sigev_un;
++} compat_sigevent_t;
++
++#endif /* HAVE_ARCH_COMPAT_SIGEVENT_T */
++
++#ifndef HAVE_ARCH_COMPAT_COPY_SIGINFO
++
++#include <linux/string.h>
++
++static inline void compat_copy_siginfo(struct compat_siginfo *to, struct compat_siginfo *from)
++{
++	if (from->si_code < 0)
++		memcpy(to, from, sizeof(*to));
++	else
++		/* _sigchld is currently the largest know union member */
++		memcpy(to, from, __ARCH_SI_COMPAT_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld));
++}
++
++#endif /* !HAVE_ARCH_COMPAT_COPY_SIGINFO */
++
++extern int compat_copy_siginfo_to_user(compat_siginfo_t __user *to, struct siginfo *from);
++extern int compat_copy_siginfo_from_user(struct siginfo *to, compat_siginfo_t __user *from);
++
++extern int compat_copy_sigevent_from_user(struct sigevent *to, compat_sigevent_t __user *from);
++
++#endif /* CONFIG_COMPAT */
++#endif /* _ASM_GENERIC_COMPAT_SIGINFO_H */
++
+Index: debian-kernel-hppa-2.6.10/include/linux/console.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/linux/console.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/linux/console.h	2005-01-21 12:16:45.000000000 -0500
+@@ -84,6 +84,7 @@
+ #define CON_PRINTBUFFER	(1)
+ #define CON_CONSDEV	(2) /* Last on the command line */
+ #define CON_ENABLED	(4)
++#define CON_BOOT	(8)
+ 
+ struct console
+ {
+Index: debian-kernel-hppa-2.6.10/include/linux/hil.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/include/linux/hil.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,483 @@
++#ifndef _HIL_H_
++#define _HIL_H_
++
++/*
++ * Hewlett Packard Human Interface Loop (HP-HIL) Protocol -- header.
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ * A note of thanks to HP for providing and shipping reference materials
++ * free of charge to help in the development of HIL support for Linux.
++ *
++ */
++
++#include <asm/types.h>
++
++/* Physical constants relevant to raw loop/device timing. 
++ */ 
++
++#define HIL_CLOCK		8MHZ
++#define HIL_EK1_CLOCK		30HZ
++#define HIL_EK2_CLOCK		60HZ
++
++#define HIL_TIMEOUT_DEV         5	/* ms */
++#define HIL_TIMEOUT_DEVS	10	/* ms */
++#define HIL_TIMEOUT_NORESP	10	/* ms */
++#define HIL_TIMEOUT_DEVS_DATA	16	/* ms */
++#define HIL_TIMEOUT_SELFTEST	200	/* ms */
++
++
++/* Actual wire line coding.  These will only be useful if someone is 
++ * implementing a software MLC to run HIL devices on a non-parisc machine.
++ */
++
++#define HIL_WIRE_PACKET_LEN	15
++enum hil_wire_bitpos {
++	HIL_WIRE_START		= 0,
++	HIL_WIRE_ADDR2,
++	HIL_WIRE_ADDR1,
++	HIL_WIRE_ADDR0,
++	HIL_WIRE_COMMAND,
++	HIL_WIRE_DATA7,
++	HIL_WIRE_DATA6,
++	HIL_WIRE_DATA5,
++	HIL_WIRE_DATA4,
++	HIL_WIRE_DATA3,
++	HIL_WIRE_DATA2,
++	HIL_WIRE_DATA1,
++	HIL_WIRE_DATA0,
++	HIL_WIRE_PARITY,
++	HIL_WIRE_STOP
++};
++
++/* HP documentation uses these bit positions to refer to commands;
++ * we will call these "packets".
++ */
++enum hil_pkt_bitpos {
++	HIL_PKT_CMD		= 0x00000800,
++	HIL_PKT_ADDR2		= 0x00000400,
++	HIL_PKT_ADDR1		= 0x00000200,
++	HIL_PKT_ADDR0		= 0x00000100,
++	HIL_PKT_ADDR_MASK	= 0x00000700,
++	HIL_PKT_ADDR_SHIFT	= 8,
++	HIL_PKT_DATA7		= 0x00000080,
++	HIL_PKT_DATA6		= 0x00000040,
++	HIL_PKT_DATA5		= 0x00000020,
++	HIL_PKT_DATA4		= 0x00000010,
++	HIL_PKT_DATA3		= 0x00000008,
++	HIL_PKT_DATA2		= 0x00000004,
++	HIL_PKT_DATA1		= 0x00000002,
++	HIL_PKT_DATA0		= 0x00000001,
++	HIL_PKT_DATA_MASK	= 0x000000FF,
++	HIL_PKT_DATA_SHIFT	= 0
++};
++
++/* The HIL MLC also has several error/status/control bits.  We extend the 
++ * "packet" to include these when direct access to the MLC is available,
++ * or emulate them in cases where they are not available. 
++ *
++ * This way the device driver knows that the underlying MLC driver
++ * has had to deal with loop errors.
++ */
++enum hil_error_bitpos {
++	HIL_ERR_OB	= 0x00000800, /* MLC is busy sending an auto-poll, 
++					 or we have filled up the output 
++					 buffer and must wait. */
++	HIL_ERR_INT	= 0x00010000, /* A normal interrupt has occurred. */
++	HIL_ERR_NMI	= 0x00020000, /* An NMI has occurred. */
++	HIL_ERR_LERR	= 0x00040000, /* A poll didn't come back. */
++	HIL_ERR_PERR	= 0x01000000, /* There was a Parity Error. */
++	HIL_ERR_FERR	= 0x02000000, /* There was a Framing Error. */
++	HIL_ERR_FOF	= 0x04000000  /* Input FIFO Overflowed. */
++};
++
++enum hil_control_bitpos {
++	HIL_CTRL_TEST	= 0x00010000,
++	HIL_CTRL_IPF	= 0x00040000,
++	HIL_CTRL_APE	= 0x02000000
++};
++
++/* Bits 30,31 are unused, we use them to control write behavior. */
++#define HIL_DO_ALTER_CTRL  0x40000000 /* Write MSW of packet to control 
++                                          before writing LSW to loop */
++#define HIL_CTRL_ONLY      0xc0000000 /* *Only* alter the control registers */
++
++/* This gives us a 32-bit "packet" 
++ */
++typedef u32 hil_packet;
++
++
++/* HIL Loop commands 
++ */
++enum hil_command {
++	HIL_CMD_IFC	= 0x00,	/* Interface Clear */
++	HIL_CMD_EPT	= 0x01,	/* Enter Pass-Thru Mode */
++	HIL_CMD_ELB	= 0x02,	/* Enter Loop-Back Mode */
++	HIL_CMD_IDD	= 0x03,	/* Identify and Describe */
++	HIL_CMD_DSR	= 0x04,	/* Device Soft Reset */
++	HIL_CMD_PST	= 0x05,	/* Perform Self Test */
++	HIL_CMD_RRG	= 0x06,	/* Read Register */
++	HIL_CMD_WRG	= 0x07,	/* Write Register */
++	HIL_CMD_ACF	= 0x08,	/* Auto Configure */
++	HIL_CMDID_ACF	= 0x07,	/* Auto Configure bits with incremented ID */
++	HIL_CMD_POL	= 0x10,	/* Poll */
++	HIL_CMDCT_POL	= 0x0f,	/* Poll command bits with item count  */
++	HIL_CMD_RPL	= 0x20,	/* RePoll */
++	HIL_CMDCT_RPL	= 0x0f,	/* RePoll command bits with item count */
++	HIL_CMD_RNM	= 0x30,	/* Report Name */
++	HIL_CMD_RST	= 0x31,	/* Report Status */
++	HIL_CMD_EXD	= 0x32,	/* Extended Describe */
++	HIL_CMD_RSC	= 0x33,	/* Report Security Code */
++
++	/* 0x34 to 0x3c reserved for future use  */
++
++	HIL_CMD_DKA	= 0x3d,	/* Disable Keyswitch Autorepeat */
++	HIL_CMD_EK1	= 0x3e,	/* Enable Keyswitch Autorepeat 1 */
++	HIL_CMD_EK2	= 0x3f,	/* Enable Keyswitch Autorepeat 2 */
++	HIL_CMD_PR1	= 0x40,	/* Prompt1 */  
++	HIL_CMD_PR2	= 0x41,	/* Prompt2 */
++	HIL_CMD_PR3	= 0x42,	/* Prompt3 */
++	HIL_CMD_PR4	= 0x43,	/* Prompt4 */
++	HIL_CMD_PR5	= 0x44,	/* Prompt5 */
++	HIL_CMD_PR6	= 0x45,	/* Prompt6 */
++	HIL_CMD_PR7	= 0x46,	/* Prompt7 */
++	HIL_CMD_PRM	= 0x47,	/* Prompt (General Purpose) */
++	HIL_CMD_AK1	= 0x48,	/* Acknowlege1 */  
++	HIL_CMD_AK2	= 0x49,	/* Acknowlege2 */
++	HIL_CMD_AK3	= 0x4a,	/* Acknowlege3 */
++	HIL_CMD_AK4	= 0x4b,	/* Acknowlege4 */
++	HIL_CMD_AK5	= 0x4c,	/* Acknowlege5 */
++	HIL_CMD_AK6	= 0x4d,	/* Acknowlege6 */
++	HIL_CMD_AK7	= 0x4e,	/* Acknowlege7 */
++	HIL_CMD_ACK	= 0x4f,	/* Acknowlege (General Purpose) */
++
++	/* 0x50 to 0x78 reserved for future use  */
++	/* 0x80 to 0xEF device-specific commands */
++	/* 0xf0 to 0xf9 reserved for future use  */
++
++	HIL_CMD_RIO	= 0xfa,	/* Register I/O Error */
++	HIL_CMD_SHR	= 0xfb,	/* System Hard Reset */
++	HIL_CMD_TER	= 0xfc,	/* Transmission Error */
++	HIL_CMD_CAE	= 0xfd,	/* Configuration Address Error */
++	HIL_CMD_DHR	= 0xfe,	/* Device Hard Reset */
++
++	/* 0xff is prohibited from use. */
++};
++
++
++/* 
++ * Response "records" to HIL commands
++ */
++
++/* Device ID byte 
++ */
++#define HIL_IDD_DID_TYPE_MASK		0xe0	/* Primary type bits */
++#define HIL_IDD_DID_TYPE_KB_INTEGRAL	0xa0	/* Integral keyboard */
++#define HIL_IDD_DID_TYPE_KB_ITF		0xc0	/* ITD keyboard */
++#define HIL_IDD_DID_TYPE_KB_RSVD	0xe0	/* Reserved keyboard type */
++#define HIL_IDD_DID_TYPE_KB_LANG_MASK	0x1f	/* Keyboard locale bits */
++#define HIL_IDD_DID_KBLANG_USE_ESD	0x00	/* Use ESD Locale instead */
++#define HIL_IDD_DID_TYPE_ABS		0x80    /* Absolute Positioners */
++#define HIL_IDD_DID_ABS_RSVD1_MASK	0xf8	/* Reserved */
++#define HIL_IDD_DID_ABS_RSVD1		0x98
++#define HIL_IDD_DID_ABS_TABLET_MASK	0xf8	/* Tablets and digitizers */
++#define HIL_IDD_DID_ABS_TABLET		0x90
++#define HIL_IDD_DID_ABS_TSCREEN_MASK	0xfc	/* Touch screens */
++#define HIL_IDD_DID_ABS_TSCREEN		0x8c
++#define HIL_IDD_DID_ABS_RSVD2_MASK	0xfc	/* Reserved */
++#define HIL_IDD_DID_ABS_RSVD2		0x88
++#define HIL_IDD_DID_ABS_RSVD3_MASK	0xfc	/* Reserved */
++#define HIL_IDD_DID_ABS_RSVD3		0x80
++#define HIL_IDD_DID_TYPE_REL		0x60    /* Relative Positioners */
++#define HIL_IDD_DID_REL_RSVD1_MASK	0xf0	/* Reserved */
++#define HIL_IDD_DID_REL_RSVD1		0x70
++#define HIL_IDD_DID_REL_RSVD2_MASK	0xfc	/* Reserved */
++#define HIL_IDD_DID_REL_RSVD2		0x6c
++#define HIL_IDD_DID_REL_MOUSE_MASK	0xfc	/* Mouse */
++#define HIL_IDD_DID_REL_MOUSE		0x68
++#define HIL_IDD_DID_REL_QUAD_MASK	0xf8	/* Other Quadrature Devices */
++#define HIL_IDD_DID_REL_QUAD		0x60
++#define HIL_IDD_DID_TYPE_CHAR		0x40    /* Character Entry */
++#define HIL_IDD_DID_CHAR_BARCODE_MASK	0xfc	/* Barcode Reader */
++#define HIL_IDD_DID_CHAR_BARCODE	0x5c
++#define HIL_IDD_DID_CHAR_RSVD1_MASK	0xfc	/* Reserved */
++#define HIL_IDD_DID_CHAR_RSVD1		0x58
++#define HIL_IDD_DID_CHAR_RSVD2_MASK	0xf8	/* Reserved */
++#define HIL_IDD_DID_CHAR_RSVD2		0x50
++#define HIL_IDD_DID_CHAR_RSVD3_MASK	0xf0	/* Reserved */
++#define HIL_IDD_DID_CHAR_RSVD3		0x40
++#define HIL_IDD_DID_TYPE_OTHER		0x20    /* Miscellaneous */
++#define HIL_IDD_DID_OTHER_RSVD1_MASK	0xf0	/* Reserved */
++#define HIL_IDD_DID_OTHER_RSVD1		0x30
++#define HIL_IDD_DID_OTHER_BARCODE_MASK	0xfc	/* Tone Generator */
++#define HIL_IDD_DID_OTHER_BARCODE	0x2c
++#define HIL_IDD_DID_OTHER_RSVD2_MASK	0xfc	/* Reserved */
++#define HIL_IDD_DID_OTHER_RSVD2		0x28
++#define HIL_IDD_DID_OTHER_RSVD3_MASK	0xf8	/* Reserved */
++#define HIL_IDD_DID_OTHER_RSVD3		0x20
++#define HIL_IDD_DID_TYPE_KEYPAD		0x00	/* Vectra Keyboard */
++
++/* IDD record header 
++ */
++#define HIL_IDD_HEADER_AXSET_MASK	0x03    /* Number of axis in a set */
++#define HIL_IDD_HEADER_RSC		0x04	/* Supports RSC command */
++#define HIL_IDD_HEADER_EXD		0x08	/* Supports EXD command */
++#define HIL_IDD_HEADER_IOD		0x10	/* IOD byte to follow */
++#define HIL_IDD_HEADER_16BIT		0x20	/* 16 (vs. 8) bit resolution */
++#define HIL_IDD_HEADER_ABS		0x40	/* Reports Absolute Position */
++#define HIL_IDD_HEADER_2X_AXIS		0x80	/* Two sets of 1-3 axis */
++
++/* I/O Descriptor
++ */
++#define HIL_IDD_IOD_NBUTTON_MASK	0x07	/* Number of buttons */
++#define HIL_IDD_IOD_PROXIMITY		0x08	/* Proximity in/out events */
++#define HIL_IDD_IOD_PROMPT_MASK		0x70	/* Number of prompts/acks */
++#define HIL_IDD_IOD_PROMPT_SHIFT	4
++#define HIL_IDD_IOD_PROMPT		0x80	/* Generic prompt/ack */
++
++#define HIL_IDD_NUM_AXES_PER_SET(header_packet) \
++((header_packet) & HIL_IDD_HEADER_AXSET_MASK)
++
++#define HIL_IDD_NUM_AXSETS(header_packet) \
++(2 - !((header_packet) & HIL_IDD_HEADER_2X_AXIS))
++
++#define HIL_IDD_LEN(header_packet) \
++((4 - !(header_packet & HIL_IDD_HEADER_IOD) -			\
++  2 * !(HIL_IDD_NUM_AXES_PER_SET(header_packet))) +		\
++  2 * HIL_IDD_NUM_AXES_PER_SET(header_packet) *			\
++ !!((header_packet) & HIL_IDD_HEADER_ABS))
++
++/* The following HIL_IDD_* macros assume you have an array of 
++ * packets and/or unpacked 8-bit data in the order that they 
++ * were received.
++ */
++
++#define HIL_IDD_AXIS_COUNTS_PER_M(header_ptr) \
++(!(HIL_IDD_NUM_AXSETS(*(header_ptr))) ? -1 :			\
++(((*(header_ptr + 1) & HIL_PKT_DATA_MASK) +			\
++  ((*(header_ptr + 2) & HIL_PKT_DATA_MASK)) << 8)		\
++* ((*(header_ptr) & HIL_IDD_HEADER_16BIT) ? 100 : 1)))
++
++#define HIL_IDD_AXIS_MAX(header_ptr, __axnum) \
++((!(*(header_ptr) & HIL_IDD_HEADER_ABS) ||			\
++  (HIL_IDD_NUM_AXES_PER_SET(*(header_ptr)) <= __axnum)) ? 0 :	\
++ ((HIL_PKT_DATA_MASK & *((header_ptr) + 3 + 2 * __axnum)) +	\
++  ((HIL_PKT_DATA_MASK & *((header_ptr) + 4 + 2 * __axnum)) << 8)))
++
++#define HIL_IDD_IOD(header_ptr) \
++(*(header_ptr + HIL_IDD_LEN((*header_ptr)) - 1))
++
++#define HIL_IDD_HAS_GEN_PROMPT(header_ptr) \
++((*header_ptr & HIL_IDD_HEADER_IOD) &&				\
++ (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROMPT))
++
++#define HIL_IDD_HAS_GEN_PROXIMITY(header_ptr) \
++((*header_ptr & HIL_IDD_HEADER_IOD) &&				\
++ (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROXIMITY))
++
++#define HIL_IDD_NUM_BUTTONS(header_ptr) \
++((*header_ptr & HIL_IDD_HEADER_IOD) ?				\
++ (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NBUTTON_MASK) : 0)
++
++#define HIL_IDD_NUM_PROMPTS(header_ptr) \
++((*header_ptr & HIL_IDD_HEADER_IOD) ?				\
++ ((HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NPROMPT_MASK)		\
++  >> HIL_IDD_IOD_PROMPT_SHIFT) : 0)
++
++/* The response to HIL EXD commands -- the "extended describe record" */
++#define	HIL_EXD_HEADER_WRG		0x03	/* Supports type2 WRG */
++#define HIL_EXD_HEADER_WRG_TYPE1	0x01	/* Supports type1 WRG */
++#define	HIL_EXD_HEADER_WRG_TYPE2	0x02	/* Supports type2 WRG */
++#define	HIL_EXD_HEADER_RRG		0x04	/* Supports RRG command */
++#define	HIL_EXD_HEADER_RNM		0x10	/* Supports RNM command */
++#define HIL_EXD_HEADER_RST		0x20	/* Supports RST command */
++#define HIL_EXD_HEADER_LOCALE		0x40	/* Contains locale code */
++
++#define HIL_EXD_NUM_RRG(header_ptr) \
++((*header_ptr & HIL_EXD_HEADER_RRG) ? \
++ (*(header_ptr + 1) & HIL_PKT_DATA_MASK) : 0)
++
++#define HIL_EXD_NUM_WWG(header_ptr) \
++((*header_ptr & HIL_EXD_HEADER_WRG) ?				\
++ (*(header_ptr + 2 - !(*header_ptr & HIL_EXD_HEADER_RRG)) &	\
++    HIL_PKT_DATA_MASK) : 0)
++
++#define HIL_EXD_LEN(header_ptr) \
++(!!(*header_ptr & HIL_EXD_HEADER_RRG) +				\
++ !!(*header_ptr & HIL_EXD_HEADER_WRG) +				\
++ !!(*header_ptr & HIL_EXD_HEADER_LOCALE) +			\
++ 2 * !!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) + 1)
++
++#define HIL_EXD_LOCALE(header_ptr) \
++(!(*header_ptr & HIL_EXD_HEADER_LOCALE) ? -1 :			\
++ (*(header_ptr + HIL_EXD_LEN(header_ptr) - 1) & HIL_PKT_DATA_MASK))
++
++#define HIL_EXD_WRG_TYPE2_LEN(header_ptr) \
++(!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) ? -1	:			\
++ (*(header_ptr + HIL_EXD_LEN(header_ptr) - 2 -                  	\
++    !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) +	\
++ ((*(header_ptr + HIL_EXD_LEN(header_ptr) - 1 -				\
++     !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) << 8))
++
++/* Device locale codes. */ 
++
++/* Last defined locale code.  Everything above this is "Reserved",
++   and note that this same table applies to the Device ID Byte where 
++   keyboards may have a nationality code which is only 5 bits. */
++#define HIL_LOCALE_MAX 0x1f
++
++/* Map to hopefully useful strings.  I was trying to make these look
++   like locale.aliases strings do; maybe that isn't the right table to
++   emulate.  In either case, I didn't have much to work on. */
++#define HIL_LOCALE_MAP \
++"",			/* 0x00 Reserved */		\
++"",			/* 0x01 Reserved */		\
++"",			/* 0x02 Reserved */		\
++"swiss.french",		/* 0x03 Swiss/French */		\
++"portuguese",		/* 0x04 Portuguese */		\
++"arabic",		/* 0x05 Arabic */		\
++"hebrew",		/* 0x06 Hebrew */		\
++"english.canadian",	/* 0x07 Canadian English */	\
++"turkish",		/* 0x08 Turkish */		\
++"greek",		/* 0x09 Greek */		\
++"thai",			/* 0x0a Thai (Thailand) */	\
++"italian",		/* 0x0b Italian */		\
++"korean",		/* 0x0c Hangul (Korea) */	\
++"dutch",		/* 0x0d Dutch */		\
++"swedish",		/* 0x0e Swedish */		\
++"german",		/* 0x0f German */		\
++"chinese",		/* 0x10 Chinese-PRC */		\
++"chinese",		/* 0x11 Chinese-ROC */		\
++"swiss.french",		/* 0x12 Swiss/French II */	\
++"spanish",		/* 0x13 Spanish */		\
++"swiss.german",		/* 0x14 Swiss/German II */	\
++"flemish",		/* 0x15 Belgian (Flemish) */	\
++"finnish",		/* 0x16 Finnish	*/		\
++"english.uk",		/* 0x17 United Kingdom */	\
++"french.canadian",	/* 0x18 French/Canadian */	\
++"swiss.german",		/* 0x19 Swiss/German */		\
++"norwegian",		/* 0x1a Norwegian */		\
++"french",		/* 0x1b French */		\
++"danish",		/* 0x1c Danish */		\
++"japanese",		/* 0x1d Katakana */		\
++"spanish",		/* 0x1e Latin American/Spanish*/\
++"english.us"		/* 0x1f United States */	\
++
++
++/* HIL keycodes */
++#define HIL_KEYCODES_SET1_TBLSIZE 128
++#define HIL_KEYCODES_SET1 	\
++   KEY_5,		KEY_RESERVED,	KEY_RIGHTALT,	KEY_LEFTALT,	\
++   KEY_RIGHTSHIFT,	KEY_LEFTSHIFT,	KEY_LEFTCTRL,	KEY_SYSRQ,	\
++   KEY_KP4,		KEY_KP8,	KEY_KP5,	KEY_KP9,	\
++   KEY_KP6,		KEY_KP7,	KEY_KPCOMMA,	KEY_KPENTER,	\
++   KEY_KP1,		KEY_KPSLASH,	KEY_KP2,	KEY_KPPLUS,	\
++   KEY_KP3,		KEY_KPASTERISK,	KEY_KP0,	KEY_KPMINUS,	\
++   KEY_B,		KEY_V,		KEY_C,		KEY_X,		\
++   KEY_Z,		KEY_RESERVED,	KEY_RESERVED,   KEY_ESC,	\
++   KEY_6,		KEY_F10,	KEY_3,		KEY_F11,	\
++   KEY_KPDOT,		KEY_F9,		KEY_TAB /*KP*/,	KEY_F12,	\
++   KEY_H,		KEY_G,		KEY_F,		KEY_D,		\
++   KEY_S,		KEY_A,		KEY_RESERVED,	KEY_CAPSLOCK,	\
++   KEY_U,		KEY_Y,		KEY_T,		KEY_R,		\
++   KEY_E,		KEY_W,		KEY_Q,		KEY_TAB,	\
++   KEY_7,		KEY_6,		KEY_5,		KEY_4,		\
++   KEY_3,		KEY_2,		KEY_1,		KEY_GRAVE,	\
++   KEY_F13,		KEY_F14,	KEY_F15,	KEY_F16,	\
++   KEY_F17,		KEY_F18,	KEY_F19,	KEY_F20,	\
++   KEY_MENU,		KEY_F4,		KEY_F3,		KEY_F2,		\
++   KEY_F1,		KEY_VOLUMEUP,	KEY_STOP,	KEY_SENDFILE,	\
++   KEY_SYSRQ,		KEY_F5,		KEY_F6,		KEY_F7,		\
++   KEY_F8,		KEY_VOLUMEDOWN,	KEY_DEL_EOL,	KEY_DEL_EOS,	\
++   KEY_8,		KEY_9,		KEY_0,		KEY_MINUS,	\
++   KEY_EQUAL,		KEY_BACKSPACE,	KEY_INS_LINE,	KEY_DEL_LINE,	\
++   KEY_I,		KEY_O,		KEY_P,		KEY_LEFTBRACE,	\
++   KEY_RIGHTBRACE,	KEY_BACKSLASH,	KEY_INSERT,	KEY_DELETE,	\
++   KEY_J,		KEY_K,		KEY_L,		KEY_SEMICOLON,	\
++   KEY_APOSTROPHE,	KEY_ENTER,	KEY_HOME,	KEY_PAGEUP,	\
++   KEY_M,		KEY_COMMA,	KEY_DOT,	KEY_SLASH,	\
++   KEY_BACKSLASH,	KEY_SELECT,	KEY_102ND,	KEY_PAGEDOWN,	\
++   KEY_N,		KEY_SPACE,	KEY_NEXT,	KEY_RESERVED,	\
++   KEY_LEFT,		KEY_DOWN,	KEY_UP,		KEY_RIGHT
++
++
++#define HIL_KEYCODES_SET3_TBLSIZE 128
++#define HIL_KEYCODES_SET3 	\
++  KEY_RESERVED,	KEY_ESC,	KEY_1,		KEY_2,			\
++  KEY_3,	KEY_4,		KEY_5,		KEY_6,			\
++  KEY_7,	KEY_8,		KEY_9,		KEY_0,			\
++  KEY_MINUS,	KEY_EQUAL,	KEY_BACKSPACE,	KEY_TAB,		\
++  KEY_Q,	KEY_W,		KEY_E,		KEY_R,			\
++  KEY_T,	KEY_Y,		KEY_U,		KEY_I,			\
++  KEY_O,	KEY_P,		KEY_LEFTBRACE,	KEY_RIGHTBRACE,		\
++  KEY_ENTER,	KEY_LEFTCTRL,	KEY_A,		KEY_S,			\
++  KEY_D,	KEY_F,		KEY_G,		KEY_H,			\
++  KEY_J,	KEY_K,		KEY_L,		KEY_SEMICOLON,		\
++  KEY_APOSTROPHE,KEY_GRAVE,	KEY_LEFTSHIFT,	KEY_BACKSLASH,		\
++  KEY_Z,	KEY_X,		KEY_C,		KEY_V,			\
++  KEY_B,	KEY_N,		KEY_M,		KEY_COMMA,		\
++  KEY_DOT,	KEY_SLASH,	KEY_RIGHTSHIFT,	KEY_KPASTERISK,		\
++  KEY_LEFTALT,	KEY_SPACE,	KEY_CAPSLOCK,	KEY_F1,			\
++  KEY_F2,	KEY_F3,		KEY_F4,		KEY_F5,			\
++  KEY_F6,	KEY_F7,		KEY_F8,		KEY_F9,			\
++  KEY_F10,	KEY_NUMLOCK,	KEY_SCROLLLOCK,	KEY_KP7,		\
++  KEY_KP8,	KEY_KP9,	KEY_KPMINUS,	KEY_KP4,		\
++  KEY_KP5,	KEY_KP6,	KEY_KPPLUS,	KEY_KP1,		\
++  KEY_KP2,	KEY_KP3,	KEY_KP0,	KEY_KPDOT,		\
++  KEY_SYSRQ,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,		\
++  KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,		\
++  KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,		\
++  KEY_UP,	KEY_LEFT,	KEY_DOWN,	KEY_RIGHT,		\
++  KEY_HOME,	KEY_PAGEUP,	KEY_END,	KEY_PAGEDOWN,		\
++  KEY_INSERT,	KEY_DELETE,	KEY_102ND,	KEY_RESERVED,		\
++  KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,		\
++  KEY_F1,	KEY_F2,		KEY_F3,		KEY_F4,			\
++  KEY_F5,	KEY_F6,		KEY_F7,		KEY_F8,			\
++  KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,		\
++  KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED,	KEY_RESERVED
++
++
++/* Response to POL command, the "poll record header" */
++
++#define HIL_POL_NUM_AXES_MASK	0x03	/* Number of axis reported */
++#define HIL_POL_CTS		0x04	/* Device ready to receive data */
++#define HIL_POL_STATUS_PENDING	0x08	/* Device has status to report */
++#define HIL_POL_CHARTYPE_MASK	0x70	/* Type of character data to follow */
++#define HIL_POL_CHARTYPE_NONE	0x00	/* No character data to follow */
++#define HIL_POL_CHARTYPE_RSVD1	0x10	/* Reserved Set 1 */
++#define HIL_POL_CHARTYPE_ASCII	0x20	/* U.S. ASCII */
++#define HIL_POL_CHARTYPE_BINARY	0x30	/* Binary data */
++#define HIL_POL_CHARTYPE_SET1	0x40	/* Keycode Set 1 */
++#define HIL_POL_CHARTYPE_RSVD2	0x50	/* Reserved Set 2 */
++#define HIL_POL_CHARTYPE_SET2	0x60	/* Keycode Set 2 */
++#define HIL_POL_CHARTYPE_SET3	0x70	/* Keycode Set 3 */
++#define HIL_POL_AXIS_ALT	0x80	/* Data is from axis set 2 */
++
++
++#endif /* _HIL_H_ */
+Index: debian-kernel-hppa-2.6.10/include/linux/hil_mlc.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/include/linux/hil_mlc.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,168 @@
++/*
++ * HP Human Interface Loop Master Link Controller driver.
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ */
++
++#include <linux/hil.h>
++#include <linux/time.h>
++#include <linux/interrupt.h>
++#include <asm/semaphore.h>
++#include <linux/serio.h>
++#include <linux/list.h>
++
++typedef struct hil_mlc hil_mlc;
++
++/* The HIL has a complicated state engine.
++ * We define the structure of nodes in the state engine here.
++ */
++enum hilse_act {
++  	/* HILSE_OUT prepares to receive input if the next node
++	 * is an IN or EXPECT, and then sends the given packet.
++	 */
++	HILSE_OUT = 0,
++
++  	/* HILSE_CTS checks if the loop is busy. */
++	HILSE_CTS,
++
++	/* HILSE_OUT_LAST sends the given command packet to 
++	 * the last configured/running device on the loop.
++	 */
++	HILSE_OUT_LAST,
++
++	/* HILSE_OUT_DISC sends the given command packet to
++	 * the next device past the last configured/running one.
++	 */
++	HILSE_OUT_DISC,
++
++	/* HILSE_FUNC runs a callback function with given arguments.
++	 * a positive return value causes the "ugly" branch to be taken.
++	 */
++	HILSE_FUNC,
++
++  	/* HILSE_IN simply expects any non-errored packet to arrive 
++	 * within arg usecs.
++	 */
++	HILSE_IN		= 0x100,
++
++  	/* HILSE_EXPECT expects a particular packet to arrive 
++	 * within arg usecs, any other packet is considered an error.
++	 */
++	HILSE_EXPECT,
++
++  	/* HILSE_EXPECT_LAST as above but dev field should be last 
++	 * discovered/operational device.
++	 */
++	HILSE_EXPECT_LAST,
++
++  	/* HILSE_EXPECT_LAST as above but dev field should be first 
++	 * undiscovered/inoperational device.
++	 */
++	HILSE_EXPECT_DISC
++};
++
++typedef int	(hilse_func) (hil_mlc *mlc, int arg);
++struct hilse_node {
++	enum hilse_act		act;	/* How to process this node         */
++	union {
++		hilse_func	*func;	/* Function to call if HILSE_FUNC   */
++		hil_packet	packet;	/* Packet to send or to compare     */
++	} object;
++	int			arg;	/* Timeout in usec or parm for func */
++	int			good;	/* Node to jump to on success       */
++	int			bad;	/* Node to jump to on error         */
++	int			ugly;	/* Node to jump to on timeout       */
++};
++
++/* Methods for back-end drivers, e.g. hp_sdc_mlc */
++typedef int	(hil_mlc_cts) (hil_mlc *mlc);
++typedef void	(hil_mlc_out) (hil_mlc *mlc);
++typedef int	(hil_mlc_in)  (hil_mlc *mlc, suseconds_t timeout);
++
++struct hil_mlc_devinfo {
++	uint8_t	idd[16];	/* Device ID Byte and Describe Record */
++	uint8_t	rsc[16];	/* Security Code Header and Record */
++	uint8_t	exd[16];	/* Extended Describe Record */
++	uint8_t	rnm[16];	/* Device name as returned by RNM command */
++};
++
++struct hil_mlc_serio_map {
++	hil_mlc *mlc;
++	int di_revmap;
++	int didx;
++};
++
++/* How many (possibly old/detached) devices the we try to keep track of */
++#define HIL_MLC_DEVMEM 16
++
++struct hil_mlc {
++	struct list_head	list;	/* hil_mlc is organized as linked list */
++
++	rwlock_t		lock;
++
++	void *priv; /* Data specific to a particular type of MLC */
++
++	int 			seidx;	/* Current node in state engine */
++	int			istarted, ostarted;
++
++	hil_mlc_cts		*cts;
++	struct semaphore	csem;   /* Raised when loop idle */
++
++	hil_mlc_out		*out;
++	struct semaphore	osem;   /* Raised when outpacket dispatched */
++	hil_packet		opacket;
++
++	hil_mlc_in		*in;
++	struct semaphore	isem;   /* Raised when a packet arrives */
++	hil_packet		ipacket[16];
++	hil_packet		imatch;
++	int			icount;
++	struct timeval		instart;
++	suseconds_t		intimeout;
++
++	int			ddi;	/* Last operational device id */
++	int			lcv;	/* LCV to throttle loops */
++	struct timeval		lcv_tv; /* Time loop was started */
++
++	int			di_map[7]; /* Maps below items to live devs */
++	struct hil_mlc_devinfo	di[HIL_MLC_DEVMEM];
++	struct serio		*serio[HIL_MLC_DEVMEM];
++	struct hil_mlc_serio_map serio_map[HIL_MLC_DEVMEM];
++	hil_packet		serio_opacket[HIL_MLC_DEVMEM];
++	int			serio_oidx[HIL_MLC_DEVMEM];
++	struct hil_mlc_devinfo	di_scratch; /* Temporary area */
++
++	int			opercnt;
++
++	struct tasklet_struct	*tasklet;
++};
++
++int hil_mlc_register(hil_mlc *mlc);
++int hil_mlc_unregister(hil_mlc *mlc);
+Index: debian-kernel-hppa-2.6.10/include/linux/hp_sdc.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/include/linux/hp_sdc.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,300 @@
++/*
++ * HP i8042 System Device Controller -- header
++ *
++ * Copyright (c) 2001 Brian S. Julin
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. The name of the author may not be used to endorse or promote products
++ *    derived from this software without specific prior written permission.
++ *
++ * Alternatively, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL").
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
++ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ *
++ * References:
++ * 
++ * HP-HIL Technical Reference Manual.  Hewlett Packard Product No. 45918A
++ *
++ * System Device Controller Microprocessor Firmware Theory of Operation
++ * 	for Part Number 1820-4784 Revision B.  Dwg No. A-1820-4784-2
++ *
++ */
++
++#ifndef _LINUX_HP_SDC_H
++#define _LINUX_HP_SDC_H
++
++#include <linux/interrupt.h>
++#include <linux/types.h>
++#include <linux/time.h>
++#include <linux/timer.h>
++#if defined(__hppa__)
++#include <asm/hardware.h>
++#endif
++
++
++/* No 4X status reads take longer than this (in usec).
++ */
++#define HP_SDC_MAX_REG_DELAY 20000
++
++typedef void (hp_sdc_irqhook) (int irq, void *dev_id, 
++			       uint8_t status, uint8_t data);
++
++int hp_sdc_request_timer_irq(hp_sdc_irqhook *callback);
++int hp_sdc_request_hil_irq(hp_sdc_irqhook *callback);
++int hp_sdc_request_cooked_irq(hp_sdc_irqhook *callback);
++int hp_sdc_release_timer_irq(hp_sdc_irqhook *callback);
++int hp_sdc_release_hil_irq(hp_sdc_irqhook *callback);
++int hp_sdc_release_cooked_irq(hp_sdc_irqhook *callback);
++
++typedef struct {
++	int actidx;	/* Start of act.  Acts are atomic WRT I/O to SDC */
++	int idx;	/* Index within the act */
++	int endidx;	/* transaction is over and done if idx == endidx */
++	uint8_t *seq;	/* commands/data for the transaction */
++	union {
++	  hp_sdc_irqhook   *irqhook;	/* Callback, isr or tasklet context */
++	  struct semaphore *semaphore;	/* Semaphore to sleep on. */
++	} act;
++} hp_sdc_transaction;
++int hp_sdc_enqueue_transaction(hp_sdc_transaction *this);
++int hp_sdc_dequeue_transaction(hp_sdc_transaction *this);
++
++/* The HP_SDC_ACT* values are peculiar to this driver.
++ * Nuance: never HP_SDC_ACT_DATAIN | HP_SDC_ACT_DEALLOC, use another
++ * act to perform the dealloc.
++ */
++#define HP_SDC_ACT_PRECMD	0x01		/* Send a command first */
++#define HP_SDC_ACT_DATAREG	0x02		/* Set data registers */
++#define HP_SDC_ACT_DATAOUT	0x04		/* Send data bytes */
++#define HP_SDC_ACT_POSTCMD      0x08            /* Send command after */
++#define HP_SDC_ACT_DATAIN	0x10		/* Collect data after */
++#define HP_SDC_ACT_DURING	0x1f
++#define HP_SDC_ACT_SEMAPHORE    0x20            /* Raise semaphore after */
++#define HP_SDC_ACT_CALLBACK	0x40		/* Pass data to IRQ handler */
++#define HP_SDC_ACT_DEALLOC	0x80		/* Destroy transaction after */
++#define HP_SDC_ACT_AFTER	0xe0
++#define HP_SDC_ACT_DEAD		0x60		/* Act timed out. */
++
++/* Rest of the flags are straightforward representation of the SDC interface */
++#define HP_SDC_STATUS_IBF	0x02	/* Input buffer full */
++
++#define HP_SDC_STATUS_IRQMASK	0xf0	/* Bits containing "level 1" irq */
++#define HP_SDC_STATUS_PERIODIC  0x10    /* Periodic 10ms timer */
++#define HP_SDC_STATUS_USERTIMER 0x20    /* "Special purpose" timer */
++#define HP_SDC_STATUS_TIMER     0x30    /* Both PERIODIC and USERTIMER */
++#define HP_SDC_STATUS_REG	0x40	/* Data from an i8042 register */
++#define HP_SDC_STATUS_HILCMD    0x50	/* Command from HIL MLC */
++#define HP_SDC_STATUS_HILDATA   0x60	/* Data from HIL MLC */
++#define HP_SDC_STATUS_PUP	0x70	/* Sucessful power-up self test */
++#define HP_SDC_STATUS_KCOOKED	0x80	/* Key from cooked kbd */
++#define HP_SDC_STATUS_KRPG	0xc0	/* Key from Repeat Gen */
++#define HP_SDC_STATUS_KMOD_SUP	0x10	/* Shift key is up */
++#define HP_SDC_STATUS_KMOD_CUP	0x20	/* Control key is up */
++
++#define HP_SDC_NMISTATUS_FHS	0x40	/* NMI is a fast handshake irq */
++
++/* Internal i8042 registers (there are more, but they are not too useful). */
++
++#define HP_SDC_USE		0x02	/* Resource usage (including OB bit) */
++#define HP_SDC_IM		0x04	/* Interrupt mask */
++#define HP_SDC_CFG		0x11	/* Configuration register */
++#define HP_SDC_KBLANGUAGE	0x12	/* Keyboard language */
++
++#define HP_SDC_D0		0x70	/* General purpose data buffer 0 */
++#define HP_SDC_D1		0x71	/* General purpose data buffer 1 */
++#define HP_SDC_D2		0x72	/* General purpose data buffer 2 */
++#define HP_SDC_D3		0x73	/* General purpose data buffer 3 */
++#define HP_SDC_VT1		0x74	/* Timer for voice 1 */
++#define HP_SDC_VT2		0x75	/* Timer for voice 2 */
++#define HP_SDC_VT3		0x76	/* Timer for voice 3 */
++#define HP_SDC_VT4		0x77	/* Timer for voice 4 */
++#define HP_SDC_KBN		0x78	/* Which HIL devs are Nimitz */
++#define HP_SDC_KBC		0x79	/* Which HIL devs are cooked kbds */
++#define HP_SDC_LPS		0x7a	/* i8042's view of HIL status */
++#define HP_SDC_LPC		0x7b	/* i8042's view of HIL "control" */
++#define HP_SDC_RSV  		0x7c	/* Reserved "for testing" */
++#define HP_SDC_LPR		0x7d    /* i8042 count of HIL reconfigs */
++#define HP_SDC_XTD		0x7e    /* "Extended Configuration" register */
++#define HP_SDC_STR		0x7f    /* i8042 self-test result */
++
++/* Bitfields for above registers */
++#define HP_SDC_USE_LOOP		0x04	/* Command is currently on the loop. */
++
++#define HP_SDC_IM_MASK          0x1f    /* these bits not part of cmd/status */
++#define HP_SDC_IM_FH		0x10	/* Mask the fast handshake irq */
++#define HP_SDC_IM_PT		0x08	/* Mask the periodic timer irq */
++#define HP_SDC_IM_TIMERS	0x04	/* Mask the MT/DT/CT irq */
++#define HP_SDC_IM_RESET		0x02	/* Mask the reset key irq */
++#define HP_SDC_IM_HIL		0x01	/* Mask the HIL MLC irq */
++
++#define HP_SDC_CFG_ROLLOVER	0x08	/* WTF is "N-key rollover"? */
++#define HP_SDC_CFG_KBD		0x10	/* There is a keyboard */
++#define HP_SDC_CFG_NEW		0x20	/* Supports/uses HIL MLC */
++#define HP_SDC_CFG_KBD_OLD	0x03	/* keyboard code for non-HIL */
++#define HP_SDC_CFG_KBD_NEW	0x07	/* keyboard code from HIL autoconfig */
++#define HP_SDC_CFG_REV		0x40	/* Code revision bit */
++#define HP_SDC_CFG_IDPROM	0x80	/* IDPROM present in kbd (not HIL) */
++
++#define HP_SDC_LPS_NDEV		0x07	/* # devices autoconfigured on HIL */
++#define HP_SDC_LPS_ACSUCC	0x08	/* loop autoconfigured successfully */
++#define HP_SDC_LPS_ACFAIL	0x80	/* last loop autoconfigure failed */
++
++#define HP_SDC_LPC_APE_IPF	0x01	/* HIL MLC APE/IPF (autopoll) set */
++#define HP_SDC_LPC_ARCONERR	0x02	/* i8042 autoreconfigs loop on err */
++#define HP_SDC_LPC_ARCQUIET	0x03	/* i8042 doesn't report autoreconfigs*/
++#define HP_SDC_LPC_COOK		0x10	/* i8042 cooks devices in _KBN */
++#define HP_SDC_LPC_RC		0x80	/* causes autoreconfig */
++
++#define HP_SDC_XTD_REV		0x07	/* contains revision code */
++#define HP_SDC_XTD_REV_STRINGS(val, str) \
++switch (val) {						\
++	case 0x1: str = "1820-3712"; break;		\
++	case 0x2: str = "1820-4379"; break;		\
++	case 0x3: str = "1820-4784"; break;		\
++	default: str = "unknown";			\
++};
++#define HP_SDC_XTD_BEEPER	0x08	/* TI SN76494 beeper available */
++#define HP_SDC_XTD_BBRTC	0x20	/* OKI MSM-58321 BBRTC present */
++
++#define HP_SDC_CMD_LOAD_RT	0x31	/* Load real time (from 8042) */
++#define HP_SDC_CMD_LOAD_FHS	0x36	/* Load the fast handshake timer */
++#define HP_SDC_CMD_LOAD_MT	0x38	/* Load the match timer */
++#define HP_SDC_CMD_LOAD_DT	0x3B	/* Load the delay timer */
++#define HP_SDC_CMD_LOAD_CT	0x3E	/* Load the cycle timer */
++
++#define HP_SDC_CMD_SET_IM	0x40    /* 010xxxxx == set irq mask */
++
++/* The documents provided do not explicitly state that all registers betweem 
++ * 0x01 and 0x1f inclusive can be read by sending their register index as a 
++ * command, but this is implied and appears to be the case.
++ */
++#define HP_SDC_CMD_READ_RAM	0x00	/* Load from i8042 RAM (autoinc) */
++#define HP_SDC_CMD_READ_USE	0x02	/* Undocumented! Load from usage reg */
++#define HP_SDC_CMD_READ_IM	0x04	/* Load current interrupt mask */
++#define HP_SDC_CMD_READ_KCC	0x11	/* Load primary kbd config code */
++#define HP_SDC_CMD_READ_KLC	0x12	/* Load primary kbd language code */
++#define HP_SDC_CMD_READ_T1	0x13	/* Load timer output buffer byte 1 */
++#define HP_SDC_CMD_READ_T2	0x14	/* Load timer output buffer byte 1 */
++#define HP_SDC_CMD_READ_T3	0x15	/* Load timer output buffer byte 1 */
++#define HP_SDC_CMD_READ_T4	0x16	/* Load timer output buffer byte 1 */
++#define HP_SDC_CMD_READ_T5	0x17	/* Load timer output buffer byte 1 */
++#define HP_SDC_CMD_READ_D0	0xf0	/* Load from i8042 RAM location 0x70 */
++#define HP_SDC_CMD_READ_D1	0xf1	/* Load from i8042 RAM location 0x71 */
++#define HP_SDC_CMD_READ_D2	0xf2	/* Load from i8042 RAM location 0x72 */
++#define HP_SDC_CMD_READ_D3	0xf3	/* Load from i8042 RAM location 0x73 */
++#define HP_SDC_CMD_READ_VT1	0xf4	/* Load from i8042 RAM location 0x74 */
++#define HP_SDC_CMD_READ_VT2	0xf5	/* Load from i8042 RAM location 0x75 */
++#define HP_SDC_CMD_READ_VT3	0xf6	/* Load from i8042 RAM location 0x76 */
++#define HP_SDC_CMD_READ_VT4	0xf7	/* Load from i8042 RAM location 0x77 */
++#define HP_SDC_CMD_READ_KBN	0xf8	/* Load from i8042 RAM location 0x78 */
++#define HP_SDC_CMD_READ_KBC	0xf9	/* Load from i8042 RAM location 0x79 */
++#define HP_SDC_CMD_READ_LPS	0xfa	/* Load from i8042 RAM location 0x7a */
++#define HP_SDC_CMD_READ_LPC	0xfb	/* Load from i8042 RAM location 0x7b */
++#define HP_SDC_CMD_READ_RSV	0xfc	/* Load from i8042 RAM location 0x7c */
++#define HP_SDC_CMD_READ_LPR	0xfd	/* Load from i8042 RAM location 0x7d */
++#define HP_SDC_CMD_READ_XTD	0xfe	/* Load from i8042 RAM location 0x7e */
++#define HP_SDC_CMD_READ_STR	0xff	/* Load from i8042 RAM location 0x7f */
++
++#define HP_SDC_CMD_SET_ARD	0xA0	/* Set emulated autorepeat delay */
++#define HP_SDC_CMD_SET_ARR	0xA2	/* Set emulated autorepeat rate */
++#define HP_SDC_CMD_SET_BELL	0xA3	/* Set voice 3 params for "beep" cmd */
++#define HP_SDC_CMD_SET_RPGR	0xA6	/* Set "RPG" irq rate (doesn't work) */
++#define HP_SDC_CMD_SET_RTMS	0xAD	/* Set the RTC time (milliseconds) */
++#define HP_SDC_CMD_SET_RTD	0xAF	/* Set the RTC time (days) */
++#define HP_SDC_CMD_SET_FHS	0xB2	/* Set fast handshake timer */
++#define HP_SDC_CMD_SET_MT	0xB4	/* Set match timer */
++#define HP_SDC_CMD_SET_DT	0xB7	/* Set delay timer */
++#define HP_SDC_CMD_SET_CT	0xBA	/* Set cycle timer */
++#define HP_SDC_CMD_SET_RAMP	0xC1	/* Reset READ_RAM autoinc counter */
++#define HP_SDC_CMD_SET_D0	0xe0	/* Load to i8042 RAM location 0x70 */
++#define HP_SDC_CMD_SET_D1	0xe1	/* Load to i8042 RAM location 0x71 */
++#define HP_SDC_CMD_SET_D2	0xe2	/* Load to i8042 RAM location 0x72 */
++#define HP_SDC_CMD_SET_D3	0xe3	/* Load to i8042 RAM location 0x73 */
++#define HP_SDC_CMD_SET_VT1	0xe4	/* Load to i8042 RAM location 0x74 */
++#define HP_SDC_CMD_SET_VT2	0xe5	/* Load to i8042 RAM location 0x75 */
++#define HP_SDC_CMD_SET_VT3	0xe6	/* Load to i8042 RAM location 0x76 */
++#define HP_SDC_CMD_SET_VT4	0xe7	/* Load to i8042 RAM location 0x77 */
++#define HP_SDC_CMD_SET_KBN	0xe8	/* Load to i8042 RAM location 0x78 */
++#define HP_SDC_CMD_SET_KBC	0xe9	/* Load to i8042 RAM location 0x79 */
++#define HP_SDC_CMD_SET_LPS	0xea	/* Load to i8042 RAM location 0x7a */
++#define HP_SDC_CMD_SET_LPC	0xeb	/* Load to i8042 RAM location 0x7b */
++#define HP_SDC_CMD_SET_RSV	0xec	/* Load to i8042 RAM location 0x7c */
++#define HP_SDC_CMD_SET_LPR	0xed	/* Load to i8042 RAM location 0x7d */
++#define HP_SDC_CMD_SET_XTD	0xee	/* Load to i8042 RAM location 0x7e */
++#define HP_SDC_CMD_SET_STR	0xef	/* Load to i8042 RAM location 0x7f */
++
++#define HP_SDC_CMD_DO_RTCW	0xc2	/* i8042 RAM 0x70 --> RTC */
++#define HP_SDC_CMD_DO_RTCR	0xc3	/* RTC[0x70 0:3] --> irq/status/data */
++#define HP_SDC_CMD_DO_BEEP	0xc4	/* i8042 RAM 0x70-74  --> beeper,VT3 */
++#define HP_SDC_CMD_DO_HIL	0xc5	/* i8042 RAM 0x70-73 --> 
++					   HIL MLC R0,R1 i8042 HIL watchdog */
++
++/* Values used to (de)mangle input/output to/from the HIL MLC */
++#define HP_SDC_DATA		0x40	/* Data from an 8042 register */
++#define HP_SDC_HIL_CMD		0x50	/* Data from HIL MLC R1/8042 */
++#define HP_SDC_HIL_R1MASK	0x0f	/* Contents of HIL MLC R1 0:3 */
++#define HP_SDC_HIL_AUTO		0x10	/* Set if POL results from i8042 */   
++#define HP_SDC_HIL_ISERR	0x80	/* Has meaning as in next 4 values */
++#define HP_SDC_HIL_RC_DONE	0x80	/* i8042 auto-configured loop */
++#define HP_SDC_HIL_ERR		0x81	/* HIL MLC R2 had a bit set */
++#define HP_SDC_HIL_TO		0x82	/* i8042 HIL watchdog expired */
++#define HP_SDC_HIL_RC		0x84	/* i8042 is auto-configuring loop */
++#define HP_SDC_HIL_DAT		0x60	/* Data from HIL MLC R0 */
++
++
++typedef struct {
++	rwlock_t	ibf_lock;
++	rwlock_t	lock;		/* user/tasklet lock */
++	rwlock_t	rtq_lock;	/* isr/tasklet lock */
++	rwlock_t	hook_lock;	/* isr/user lock for handler add/del */
++
++	unsigned int	irq, nmi;	/* Our IRQ lines */
++	unsigned long	base_io, status_io, data_io; /* Our IO ports */
++
++	uint8_t		im;		/* Interrupt mask */
++	int		set_im; 	/* Interrupt mask needs to be set. */
++
++	int		ibf;		/* Last known status of IBF flag */
++	uint8_t		wi;		/* current i8042 write index */
++	uint8_t		r7[4];          /* current i8042[0x70 - 0x74] values */
++	uint8_t		r11, r7e;	/* Values from version/revision regs */
++
++	hp_sdc_irqhook	*timer, *reg, *hil, *pup, *cooked;
++
++#define HP_SDC_QUEUE_LEN 16
++	hp_sdc_transaction *tq[HP_SDC_QUEUE_LEN]; /* All pending read/writes */
++
++	int		rcurr, rqty;	/* Current read transact in process */
++	struct timeval	rtv;		/* Time when current read started */
++	int		wcurr;		/* Current write transact in process */
++
++	int		dev_err;	/* carries status from registration */
++#if defined(__hppa__)
++	struct parisc_device	*dev;
++#elif defined(__mc68000__)
++	void		*dev;
++#else
++#error No support for device registration on this arch yet.
++#endif
++
++	struct timer_list kicker;	/* Keeps below task alive */
++	struct tasklet_struct	task;
++
++} hp_i8042_sdc;
++
++#endif /* _LINUX_HP_SDC_H */
+Index: debian-kernel-hppa-2.6.10/include/linux/input.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/linux/input.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/linux/input.h	2005-01-21 12:16:45.000000000 -0500
+@@ -610,6 +610,7 @@
+ #define BUS_ADB			0x17
+ #define BUS_I2C			0x18
+ #define BUS_HOST		0x19
++#define BUS_GSC			0x1A
+ 
+ /*
+  * Values describing the status of an effect
+Index: debian-kernel-hppa-2.6.10/include/linux/signal.h
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/include/linux/signal.h	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/include/linux/signal.h	2005-01-21 12:16:45.000000000 -0500
+@@ -220,6 +220,9 @@
+ extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
+ #endif
+ 
++int copy_siginfo_from_user(siginfo_t *to, siginfo_t __user *from);
++int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from);
++
+ #endif /* __KERNEL__ */
+ 
+ #endif /* _LINUX_SIGNAL_H */
+Index: debian-kernel-hppa-2.6.10/ipc/compat_mq.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/ipc/compat_mq.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/ipc/compat_mq.c	2005-01-21 12:16:45.000000000 -0500
+@@ -7,6 +7,7 @@
+  */
+ 
+ #include <linux/compat.h>
++#include <linux/compat_siginfo.h>
+ #include <linux/fs.h>
+ #include <linux/kernel.h>
+ #include <linux/mqueue.h>
+Index: debian-kernel-hppa-2.6.10/kernel/Makefile
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/Makefile	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/Makefile	2005-01-21 12:16:45.000000000 -0500
+@@ -17,7 +17,7 @@
+ obj-$(CONFIG_KALLSYMS) += kallsyms.o
+ obj-$(CONFIG_PM) += power/
+ obj-$(CONFIG_BSD_PROCESS_ACCT) += acct.o
+-obj-$(CONFIG_COMPAT) += compat.o
++obj-$(CONFIG_COMPAT) += compat.o compat_signal.o
+ obj-$(CONFIG_IKCONFIG) += configs.o
+ obj-$(CONFIG_IKCONFIG_PROC) += configs.o
+ obj-$(CONFIG_STOP_MACHINE) += stop_machine.o
+Index: debian-kernel-hppa-2.6.10/kernel/compat.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/compat.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/compat.c	2005-01-21 12:16:45.000000000 -0500
+@@ -13,6 +13,7 @@
+ 
+ #include <linux/linkage.h>
+ #include <linux/compat.h>
++#include <linux/compat_siginfo.h>
+ #include <linux/errno.h>
+ #include <linux/time.h>
+ #include <linux/signal.h>
+@@ -600,6 +601,26 @@
+ 
+ /* timer_create is architecture specific because it needs sigevent conversion */
+ 
++long compat_sys_timer_create(clockid_t which_clock,
++			     compat_sigevent_t __user *timer_event_spec,
++			     compat_timer_t __user * created_timer_id)
++{
++	sigevent_t kevent;
++	mm_segment_t old_fs = get_fs();
++	long ret;
++
++	if (timer_event_spec != NULL)
++		if (compat_copy_sigevent_from_user(&kevent, timer_event_spec) != 0)
++			return -EFAULT;
++
++	set_fs(KERNEL_DS);
++	ret = sys_timer_create(which_clock, timer_event_spec ? (sigevent_t __user *)&kevent : NULL, created_timer_id);
++	set_fs(old_fs);
++
++	return ret;
++}
++
++
+ long compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask,
+ 		       unsigned long bitmap_size)
+ {
+@@ -680,3 +701,37 @@
+ 
+ 	return 0;
+ }
++
++asmlinkage int compat_sys_waitid(int which, pid_t pid,
++				 compat_siginfo_t __user *infop, int options,
++				 struct compat_rusage __user *ru)
++{
++  	long ret;
++	siginfo_t ksiginfo;
++	struct rusage kru;
++	mm_segment_t old_fs = get_fs();
++	
++	memset(&ksiginfo, 0, sizeof(ksiginfo));
++
++	set_fs(KERNEL_DS);
++	ret = sys_waitid(which, pid, (siginfo_t __user *)&ksiginfo, options, (struct rusage __user *)&kru);
++	set_fs(old_fs);
++
++	/* If there was an error don't bother copying siginfo */
++	if (ret < 0 || ksiginfo.si_signo == 0)
++		return ret;
++
++	if (ru) {
++		ret = put_compat_rusage(&kru, ru);
++		if (ret)
++			return ret;
++	}
++
++	/* Tell copy_siginfo_to_user that it was __SI_CHLD */
++	ksiginfo.si_code |= __SI_CHLD;
++	
++	if (compat_copy_siginfo_to_user(infop, &ksiginfo) != 0)
++		return -EFAULT;
++
++	return 0;
++}
+Index: debian-kernel-hppa-2.6.10/kernel/compat_signal.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/kernel/compat_signal.c	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,244 @@
++/*
++ *  Copyright (C) 2003 Carlos O'Donell
++ * 
++ *  2003-12-20  Carlos O'Donell
++ *              Copied linux/kernel/compat_signal.c (copy_siginfo_to_user)
++ *              and modified to use compat_siginfo_t for thunking down to
++ *              32-bit userspace from a 64-bit kernel.
++ *              
++ * 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, GOOD TITLE or
++ * NON INFRINGEMENT.  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
++ *
++ */
++
++#include <linux/compat_siginfo.h>
++#include <asm/errno.h>
++#include <asm/uaccess.h>
++#include <asm/siginfo.h>
++
++#ifndef HAVE_ARCH_COMPAT_COPY_SIGINFO_TO_USER
++int compat_copy_siginfo_to_user(compat_siginfo_t __user *to, siginfo_t *from)
++{
++	int err;
++	compat_siginfo_t compat_from;	
++
++	if (!access_ok (VERIFY_WRITE, to, sizeof(compat_siginfo_t)))
++		return -EFAULT;
++	
++	/*
++	 * If you change compat_siginfo_t structure *or* siginfo_t, 
++	 * please be sure this code is fixed accordingly.
++	 * It should never copy any pad contained in the structure
++	 * to avoid security leaks, but must copy the generic
++	 * 3 ints plus the relevant union member.
++	 */
++
++	/* Convert structure, don't leak anything in the copy */
++	memset(&compat_from,'\0',sizeof(compat_siginfo_t));
++
++        /* Always copy si_signo, si_errno, and si_code */
++	compat_from.si_signo = (compat_int_t)(from->si_signo);
++	compat_from.si_errno = (compat_int_t)(from->si_errno);
++	/* si_code is only a (short) value, remove kernel bits. */
++	compat_from.si_code = (short)(from->si_code);
++        
++	err = __put_user(compat_from.si_signo, &to->si_signo);
++	err |= __put_user(compat_from.si_errno, &to->si_errno);
++	err |= __put_user(compat_from.si_code, &to->si_code);
++
++        /* siginfo_t came from userspace, so it is the right
++         * size, no need for conversion
++         */        
++	if (from->si_code < 0) {
++		return __copy_to_user(&to->_sifields._pad, 
++                                      &from->_sifields._pad, 
++                                      SI_COMPAT_PAD_SIZE)
++			? -EFAULT : 0;
++        }
++	
++	switch (from->si_code & __SI_MASK) {
++	case __SI_KILL:
++		compat_from.si_pid = (compat_pid_t)(from->si_pid);
++		compat_from.si_uid = (__ARCH_SI_COMPAT_UID_T)(from->si_uid);
++		err |= __put_user(compat_from.si_pid, &to->si_pid);
++		err |= __put_user(compat_from.si_uid, &to->si_uid);
++		break;
++	case __SI_TIMER:
++		compat_from.si_pid = (compat_timer_t)(from->si_tid);
++		compat_from.si_overrun = (compat_int_t)(from->si_overrun);
++		compat_from.si_ptr = (compat_uptr_t)((u64 __force)(from->si_ptr) & 0xffffffffUL);
++		err |= __put_user(compat_from.si_tid, &to->si_tid);
++		err |= __put_user(compat_from.si_overrun, &to->si_overrun);
++		err |= __put_user(compat_from.si_ptr, &to->si_ptr);
++		break;
++	case __SI_POLL:
++		compat_from.si_band = (__ARCH_SI_COMPAT_BAND_T)(from->si_band);
++		compat_from.si_fd = (compat_int_t)(from->si_fd);
++		err |= __put_user(compat_from.si_band, &to->si_band);
++		err |= __put_user(compat_from.si_fd, &to->si_fd);
++		break;
++	case __SI_FAULT:
++		compat_from.si_addr = (compat_uptr_t)((u64 __force)(from->si_addr) & 0xffffffffUL);
++		err |= __put_user(compat_from.si_addr, &to->si_addr);
++#ifdef __ARCH_SI_COMPAT_TRAPNO
++		compat_from.si_trapno = (compat_int_t)(from->si_addr);
++		err |= __put_user(compat_from.si_trapno, &to->si_trapno);
++#endif
++		break;
++	case __SI_CHLD:
++		compat_from.si_pid = (compat_pid_t)(from->si_pid);
++		compat_from.si_uid = (__ARCH_SI_COMPAT_UID_T)(from->si_uid);
++		compat_from.si_status = (compat_int_t)(from->si_status);
++		compat_from.si_utime = (compat_clock_t)(from->si_utime);
++		compat_from.si_stime = (compat_clock_t)(from->si_stime);
++		err |= __put_user(compat_from.si_pid, &to->si_pid);
++		err |= __put_user(compat_from.si_uid, &to->si_uid);
++		err |= __put_user(compat_from.si_status, &to->si_status);
++		err |= __put_user(compat_from.si_utime, &to->si_utime);
++		err |= __put_user(compat_from.si_stime, &to->si_stime);
++		break;
++	case __SI_RT: /* This is not generated by the kernel as of now. */
++	case __SI_MESGQ: /* But this is */
++		compat_from.si_pid = (compat_pid_t)(from->si_pid);
++		compat_from.si_uid = (__ARCH_SI_COMPAT_UID_T)(from->si_uid);
++		compat_from.si_int = (compat_int_t)(from->si_int);
++		compat_from.si_ptr = (compat_uptr_t)((u64 __force)(from->si_ptr) & 0xffffffffUL);
++		err |= __put_user(compat_from.si_pid, &to->si_pid);
++		err |= __put_user(compat_from.si_uid, &to->si_uid);
++		err |= __put_user(compat_from.si_int, &to->si_int);
++		err |= __put_user(compat_from.si_ptr, &to->si_ptr);
++		break;
++	default: /* this is just in case for now ... */
++		compat_from.si_pid = (compat_pid_t)(from->si_pid);
++		compat_from.si_uid = (__ARCH_SI_COMPAT_UID_T)(from->si_uid);
++		err |= __put_user(compat_from.si_pid, &to->si_pid);
++		err |= __put_user(compat_from.si_uid, &to->si_uid);
++		break;
++	}
++	return err;
++}
++#endif
++
++#ifndef HAVE_ARCH_COPY_SIGINFO_FROM_USER
++int compat_copy_siginfo_from_user(siginfo_t *to, compat_siginfo_t __user *from)
++{
++	int err;
++        u64 scratch;
++
++	if (!access_ok (VERIFY_READ, from, sizeof(compat_siginfo_t)))
++		return -EFAULT;
++	
++	/*
++	 * If you change compat_siginfo_t structure *or* siginfo_t, 
++	 * please be sure this code is fixed accordingly.
++	 */
++
++        /* Always copy si_signo, si_errno, and si_code */
++	err = __get_user(to->si_signo, &from->si_signo);
++	err |= __get_user(to->si_errno, &from->si_errno);
++	err |= __get_user(to->si_code, &from->si_code);
++        
++        /* siginfo_t came from userspace, so it is the right
++         * size, no need for conversion
++         */        
++	if (to->si_code < 0) {
++		return __copy_from_user(&to->_sifields._pad, 
++                                        &from->_sifields._pad, 
++                                        SI_COMPAT_PAD_SIZE)
++			? -EFAULT : 0;
++        }
++	
++	switch (to->si_code & __SI_MASK) {
++	case __SI_KILL:
++		err |= __get_user(to->si_pid, &from->si_pid);
++		err |= __get_user(to->si_uid, &from->si_uid);
++		break;
++	case __SI_TIMER:
++		err |= __get_user(to->si_tid, &from->si_tid);
++		err |= __get_user(to->si_overrun, &from->si_overrun);
++		err |= __get_user(scratch, &from->si_ptr);
++                to->si_ptr = (u64 __user*)scratch;                
++		break;
++	case __SI_POLL:
++		err |= __get_user(to->si_band, &from->si_band);
++		err |= __get_user(to->si_fd, &from->si_fd);
++		break;
++	case __SI_FAULT:
++		err |= __get_user(scratch, &from->si_addr);
++                to->si_addr = (u64 __user*)scratch;
++#ifdef __ARCH_SI_COMPAT_TRAPNO
++		err |= __get_user(to->si_trapno, &from->si_trapno);
++#endif
++		break;
++	case __SI_CHLD:
++		err |= __get_user(to->si_pid, &from->si_pid);
++		err |= __get_user(to->si_uid, &from->si_uid);
++		err |= __get_user(to->si_status, &from->si_status);
++		err |= __get_user(to->si_utime, &from->si_utime);
++		err |= __get_user(to->si_stime, &from->si_stime);
++		break;
++	case __SI_RT: /* This is not generated by the kernel as of now. */
++	case __SI_MESGQ: /* But this is */
++		err |= __get_user(to->si_pid, &from->si_pid);
++		err |= __get_user(to->si_uid, &from->si_uid);
++		err |= __get_user(to->si_int, &from->si_int);
++		err |= __get_user(scratch, &from->si_ptr);
++                to->si_ptr = (u64 __user*)scratch;
++		break;
++	default: /* this is just in case for now ... */
++		err |= __get_user(to->si_pid, &from->si_pid);
++		err |= __get_user(to->si_uid, &from->si_uid);
++		break;
++	}
++	return err;
++}
++#endif
++
++#ifndef HAVE_ARCH_COPY_SIGEVENT_FROM_USER
++int compat_copy_sigevent_from_user(sigevent_t *to, compat_sigevent_t __user *from)
++{
++	int err;
++	u64 scratch;
++	
++	/* copy sigval_t sigev_value 
++	 	int_t sival_int		(same)
++	 	uptr_t sival_ptr	(32 vs 64)*/
++	err = __get_user(to->sigev_value.sival_int, 
++	    		 &from->sigev_value.sival_int);
++	err |= __get_user(scratch, &from->sigev_value.sival_ptr);
++	to->sigev_value.sival_ptr = (u64 __user *)scratch;
++	
++	/* copy int_t sigev_signo 	(same)*/
++	err |= __get_user(to->sigev_signo, &from->sigev_signo);
++	
++	/* copy int_t sigev_notify	(same)*/
++	err |= __get_user(to->sigev_notify, &from->sigev_notify);
++
++	/* never copy _sigev_un padding */
++
++	/* copy int_t _tid 		(same),
++	   good_sigevent() uses this value of */
++	err |= __get_user(to->sigev_notify_thread_id, &from->sigev_notify_thread_id);
++	
++	/* XXX: Do not copy these, they aren't used by
++	   anyone. We would need to distinguish the uses of the union.
++	   copy _sigev_thread
++	  	uptr_t _function	(32 vs 64)
++	  	uptr_t _attribute	(32 vs 64)*/
++	
++	return err;
++}
++#endif
++
+Index: debian-kernel-hppa-2.6.10/kernel/printk.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/printk.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/printk.c	2005-01-21 12:16:45.000000000 -0500
+@@ -92,8 +92,8 @@
+  * must be masked before subscripting
+  */
+ static unsigned long log_start;	/* Index into log_buf: next char to be read by syslog() */
+-static unsigned long con_start;	/* Index into log_buf: next char to be sent to consoles */
+-static unsigned long log_end;	/* Index into log_buf: most-recently-written-char + 1 */
++unsigned long con_start;	/* Index into log_buf: next char to be sent to consoles */
++unsigned long log_end;	/* Index into log_buf: most-recently-written-char + 1 */
+ static unsigned long logged_chars; /* Number of chars produced since last read+clear operation */
+ 
+ /*
+@@ -790,6 +790,11 @@
+ 	if (!(console->flags & CON_ENABLED))
+ 		return;
+ 
++	if (console_drivers && (console_drivers->flags & CON_BOOT)) {
++		unregister_console(console_drivers);
++		console->flags &= ~CON_PRINTBUFFER;
++	}
++
+ 	/*
+ 	 *	Put this console in the list - keep the
+ 	 *	preferred driver at the head of the list.
+Index: debian-kernel-hppa-2.6.10/kernel/ptrace.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/ptrace.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/ptrace.c	2005-01-21 12:16:45.000000000 -0500
+@@ -328,7 +328,7 @@
+ {
+ 	if (child->last_siginfo == NULL)
+ 		return -EINVAL;
+-	if (copy_from_user(child->last_siginfo, data, sizeof (siginfo_t)) != 0)
++	if (copy_siginfo_from_user(child->last_siginfo, data) != 0)
+ 		return -EFAULT;
+ 	return 0;
+ }
+Index: debian-kernel-hppa-2.6.10/kernel/resource.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/resource.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/resource.c	2005-01-21 12:16:45.000000000 -0500
+@@ -181,6 +181,8 @@
+ {
+ 	struct resource *tmp, **p;
+ 
++	BUG_ON(old->child);
++
+ 	p = &old->parent->child;
+ 	for (;;) {
+ 		tmp = *p;
+Index: debian-kernel-hppa-2.6.10/kernel/signal.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/kernel/signal.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/kernel/signal.c	2005-01-21 12:16:45.000000000 -0500
+@@ -22,6 +22,7 @@
+ #include <linux/security.h>
+ #include <linux/syscalls.h>
+ #include <linux/ptrace.h>
++#include <linux/compat_siginfo.h>
+ #include <asm/param.h>
+ #include <asm/uaccess.h>
+ #include <asm/unistd.h>
+@@ -2064,17 +2065,35 @@
+ 	return do_sigpending(set, sigsetsize);
+ }
+ 
++#ifndef HAVE_ARCH_COPY_SIGINFO_FROM_USER
++
++int copy_siginfo_from_user(siginfo_t *to, siginfo_t __user *from)
++{
++        if(is_compat_task(current))
++                return compat_copy_siginfo_from_user(to,(compat_siginfo_t __user *)from);
++  
++        return copy_from_user(&to, from, sizeof(siginfo_t));
++}
++
++#endif
++
+ #ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER
+ 
+ int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
+ {
+ 	int err;
++	
++	/* Use compat_siginfo_t with 32-bit signals */
++	if(is_compat_task(current)){
++		return compat_copy_siginfo_to_user((compat_siginfo_t __user *)to,from);
++	}
+ 
+ 	if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
+ 		return -EFAULT;
+ 	if (from->si_code < 0)
+ 		return __copy_to_user(to, from, sizeof(siginfo_t))
+ 			? -EFAULT : 0;
++	
+ 	/*
+ 	 * If you change siginfo_t structure, please be sure
+ 	 * this code is fixed accordingly.
+@@ -2311,7 +2330,7 @@
+ {
+ 	siginfo_t info;
+ 
+-	if (copy_from_user(&info, uinfo, sizeof(siginfo_t)))
++	if (copy_siginfo_from_user(&info, uinfo))
+ 		return -EFAULT;
+ 
+ 	/* Not even root can pretend to send signals from the kernel.
+Index: debian-kernel-hppa-2.6.10/mm/shmem.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/mm/shmem.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/mm/shmem.c	2005-01-21 12:16:45.000000000 -0500
+@@ -462,7 +462,7 @@
+ 	} while (next);
+ }
+ 
+-static void shmem_truncate(struct inode *inode)
++/* static gcc-3.3 OPD bug - GGG */ void shmem_truncate(struct inode *inode)
+ {
+ 	struct shmem_inode_info *info = SHMEM_I(inode);
+ 	unsigned long idx;
+Index: debian-kernel-hppa-2.6.10/sound/parisc/Kconfig
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/sound/parisc/Kconfig	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/sound/parisc/Kconfig	2005-01-21 12:16:45.000000000 -0500
+@@ -1,6 +1,6 @@
+ # ALSA PA-RISC drivers
+ 
+-menu "ALSA GSC devices"
++menu "GSC devices"
+ 	depends on SND!=n && GSC
+ 
+ config SND_HARMONY
+Index: debian-kernel-hppa-2.6.10/sound/parisc/harmony.c
+===================================================================
+--- debian-kernel-hppa-2.6.10.orig/sound/parisc/harmony.c	2005-01-21 12:16:37.000000000 -0500
++++ debian-kernel-hppa-2.6.10/sound/parisc/harmony.c	2005-01-21 12:16:45.000000000 -0500
+@@ -1,264 +1,92 @@
+-/*
+- *  Harmony chipset driver
++/* Hewlett-Packard Harmony audio driver
+  *
+- *	This is a sound driver for ASP's and Lasi's Harmony sound chip
+- *	and is unlikely to be used for anything other than on a HP PA-RISC.
++ *   This is a driver for the Harmony audio chipset found
++ *   on the LASI ASIC of various early HP PA-RISC workstations.
+  *
+- *	Harmony is found in HP 712s, 715/new and many other GSC based machines.
+- *	On older 715 machines you'll find the technically identical chip 
+- *	called 'Vivace'. Both Harmony and Vivace are supported by this driver.
++ *   Copyright (C) 2004, Kyle McMartin <kyle@{debian.org,parisc-linux.org}>
+  *
+- *  this ALSA driver is based on OSS driver by:
+- *	Copyright 2000 (c) Linuxcare Canada, Alex deVries <alex at linuxcare.com>
+- *	Copyright 2000-2002 (c) Helge Deller <deller at gmx.de>
+- *	Copyright 2001 (c) Matthieu Delahaye <delahaym at esiee.fr>
++ *     Based on the previous Harmony incarnations by,
++ *       Copyright 2000 (c) Linuxcare Canada, Alex deVries
++ *       Copyright 2000-2003 (c) Helge Deller
++ *       Copyright 2001 (c) Matthieu Delahaye
++ *       Copyright 2001 (c) Jean-Christophe Vaugeois
++ *       Copyright 2003 (c) Laurent Canet
++ *       Copyright 2004 (c) Stuart Brady
+  *
+- * TODO:
+- * - use generic DMA interface and ioremap()/iounmap()
+- * - capture is still untested (and probaby non-working)
+- * - spin locks
+- * - implement non-consistent DMA pages
+- * - implement gain meter
+- * - module parameters
+- * - correct cleaning sequence
+- * - better error checking
+- * - try to have a better quality.
+- *   
+- */
+-
+-/*
+- * Harmony chipset 'modus operandi'.
+- * - This chipset is found in some HP 32bit workstations, like 712, or B132 class.
+- * most of controls are done through registers. Register are found at a fixed offset
+- * from the hard physical adress, given in struct dev by register_parisc_driver.
++ *   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.
+  *
+- * Playback and recording use 4kb pages (dma or not, depending on the machine).
+- *
+- * Most of PCM playback & capture is done through interrupt. When harmony needs
+- * a new buffer to put recorded data or read played PCM, it sends an interrupt.
+- * Bits 2 and 10 of DSTATUS register are '1' when harmony needs respectively
+- * a new page for recording and playing. 
+- * Interrupt are disabled/enabled by writing to bit 32 of DSTATUS. 
+- * Adresses of next page to be played is put in PNXTADD register, next page
+- * to be recorded is put in RNXTADD. There is 2 read-only registers, PCURADD and 
+- * RCURADD that provides adress of current page.
+- * 
+- * Harmony has no way to control full duplex or half duplex mode. It means
+- * that we always need to provide adresses of playback and capture data, even
+- * when this is not needed. That's why we statically alloc one graveyard
+- * buffer (to put recorded data in play-only mode) and a silence buffer.
+- * 
+- * Bitrate, number of channels and data format are controlled with
+- * the CNTL register.
++ *   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.
+  *
+- * Mixer work is done through one register (GAINCTL). Only input gain,
+- * output attenuation and general attenuation control is provided. There is
+- * also controls for enabling/disabling internal speaker and line
+- * input.
++ *   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., 675 Mass Ave, Cambridge, MA 02139, USA.
+  *
+- * Buffers used by this driver are all DMA consistent.
++ * Notes:
++ *   - graveyard and silence buffers last for lifetime of
++ *     the driver. playback and capture buffers are allocated
++ *     per _open()/_close().
++ * 
++ * TODO:
++ *   - Figure out why we break RTC saving...
++ *   - Figure out why we sometimes Code13 trap the kernel!
++ *   - Figure out why the previous happens after playing a
++ *     second time. Note! It doesn't happen when stop/starting
++ *     from the same instance.
+  */
+ 
+-#include <linux/delay.h>
+-#include <sound/driver.h>
+ #include <linux/init.h>
+-#include <linux/interrupt.h>
+ #include <linux/slab.h>
+ #include <linux/time.h>
+ #include <linux/wait.h>
+-#include <linux/moduleparam.h>
++#include <linux/delay.h>
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/spinlock.h>
++#include <linux/dma-mapping.h>
++
++#include <sound/driver.h>
+ #include <sound/core.h>
+-#include <sound/control.h>
+ #include <sound/pcm.h>
++#include <sound/control.h>
+ #include <sound/rawmidi.h>
+ #include <sound/initval.h>
+ #include <sound/info.h>
+-#include <asm/hardware.h>
++
+ #include <asm/io.h>
++#include <asm/hardware.h>
+ #include <asm/parisc-device.h>
+ 
+-MODULE_AUTHOR("Laurent Canet <canetl at esiee.fr>");
+-MODULE_DESCRIPTION("ALSA Harmony sound driver");
+-MODULE_LICENSE("GPL");
+-MODULE_SUPPORTED_DEVICE("{{ALSA,Harmony soundcard}}");
+-
+-#undef DEBUG
+-#ifdef DEBUG
+-# define DPRINTK printk 
+-#else
+-# define DPRINTK(x,...)
+-#endif
+-
+-#define PFX	"harmony: "
+-
+-#define MAX_PCM_DEVICES		1
+-#define MAX_PCM_SUBSTREAMS	4
+-#define MAX_MIDI_DEVICES	0
+-
+-#define HARMONY_BUF_SIZE	4096
+-#define MAX_BUFS		10
+-#define MAX_BUFFER_SIZE		(MAX_BUFS * HARMONY_BUF_SIZE)
+-
+-/* number of silence & graveyard buffers */
+-#define GRAVEYARD_BUFS		3
+-#define SILENCE_BUFS		3
+-
+-#define HARMONY_CNTL_C		0x80000000
+-
+-#define HARMONY_DSTATUS_PN	0x00000200
+-#define HARMONY_DSTATUS_RN	0x00000002
+-#define HARMONY_DSTATUS_IE	0x80000000
+-
+-#define HARMONY_DF_16BIT_LINEAR	0x00000000
+-#define HARMONY_DF_8BIT_ULAW	0x00000001
+-#define HARMONY_DF_8BIT_ALAW	0x00000002
+-
+-#define HARMONY_SS_MONO		0x00000000
+-#define HARMONY_SS_STEREO	0x00000001
+-
+-/*
+- * Channels Mask in mixer register
+- * try some "reasonable" default gain values
+- */
+-
+-#define HARMONY_GAIN_TOTAL_SILENCE 0x00F00FFF
+-
+-/* the following should be enough (mixer is 
+- * very sensible on harmony)
+- */
+-#define HARMONY_GAIN_DEFAULT       0x0F2FF082
+-
++#include "harmony.h"
+ 
+-/* useless since only one card is supported ATM */
+-static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
+-static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
+-static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE;
+-
+-module_param_array(index, int, NULL, 0444);
+-MODULE_PARM_DESC(index, "Index value for Harmony device.");
+-module_param_array(id, charp, NULL, 0444);
+-MODULE_PARM_DESC(id, "ID string for Harmony device.");
+-module_param_array(enable, bool, NULL, 0444);
+-MODULE_PARM_DESC(enable, "Enable Harmony device.");
+-
+-/* Register offset (from base hpa) */
+-#define REG_ID		0x00
+-#define REG_RESET	0x04
+-#define REG_CNTL	0x08
+-#define REG_GAINCTL	0x0C
+-#define REG_PNXTADD	0x10
+-#define REG_PCURADD	0x14
+-#define REG_RNXTADD	0x18
+-#define REG_RCURADD	0x1C
+-#define REG_DSTATUS	0x20
+-#define REG_OV		0x24
+-#define REG_PIO		0x28
+-#define REG_DIAG	0x3C
+-
+-/*
+- * main harmony structure
+- */
+-
+-typedef struct snd_card_harmony {
+-
+-	/* spinlocks (To be done) */
+-	spinlock_t mixer_lock;
+-	spinlock_t control_lock;
+-
+-	/* parameters */	
+-	int irq;
+-	unsigned long hpa;
+-	int id;
+-	int rev;
+-	
+-	u32 current_gain;
+-	int data_format;		/* HARMONY_DF_xx_BIT_xxx */
+-	int sample_rate;		/* HARMONY_SR_xx_KHZ */
+-	int stereo_select;	/* HARMONY_SS_MONO or HARMONY_SS_STEREO */
+-	int format_initialized;
+-	
+-	unsigned long ply_buffer;
+-	int ply_buf;
+-	int ply_count;
+-	int ply_size;
+-	int ply_stopped;
+-	int ply_total;
+-	
+-	unsigned long cap_buffer;
+-	int cap_buf;
+-	int cap_count;
+-	int cap_size;
+-	int cap_stopped;
+-	int cap_total;
+-
+-	struct parisc_device *pa_dev;
+-
+-	struct snd_dma_device dma_dev;
+-
+-	/* the graveyard buffer is used as recording buffer when playback, 
+-	 * because harmony always want a buffer to put recorded data */
+-	struct snd_dma_buffer graveyard_dma;
+-	int graveyard_count;
+-	
+-	/* same thing for silence buffer */
+-	struct snd_dma_buffer silence_dma;
+-	int silence_count;
+-
+-	/* alsa stuff */
+-	snd_card_t *card;
+-	snd_pcm_t *pcm;
+-	snd_pcm_substream_t *playback_substream;
+-	snd_pcm_substream_t *capture_substream;
+-	snd_info_entry_t *proc_entry;
+-} snd_card_harmony_t;
+-
+-static snd_card_t *snd_harmony_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
+-
+-/* wait to be out of control mode */
+-static inline void snd_harmony_wait_cntl(snd_card_harmony_t *harmony)
+-{
+-	int timeout = 5000;
++static struct parisc_device_id snd_harmony_devtable[] = {
++	/* bushmaster / flounder */
++	{ HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007A }, 
++	/* 712 / 715 */
++	{ HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007B }, 
++	/* pace */
++	{ HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007E }, 
++	/* outfield / coral II */
++	{ HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007F },
++	{ 0, }
++};
+ 
+-	while ( (gsc_readl(harmony->hpa+REG_CNTL) & HARMONY_CNTL_C) && --timeout)
+-	{
+-		/* Wait */ ;	
+-	}
+-	if (timeout == 0) DPRINTK(KERN_DEBUG PFX "Error: wait cntl timeouted\n");
+-}
++MODULE_DEVICE_TABLE(parisc, snd_harmony_devtable);
+ 
++#define NAME "harmony"
++#define PFX  NAME ": "
+ 
+-/*
+- * sample rate routines 
+- */
+-static unsigned int snd_card_harmony_rates[] = {
++static unsigned int snd_harmony_rates[] = {
+ 	5125, 6615, 8000, 9600,
+ 	11025, 16000, 18900, 22050,
+ 	27428, 32000, 33075, 37800,
+ 	44100, 48000
+ };
+ 
+-static snd_pcm_hw_constraint_list_t hw_constraint_rates = {
+-	.count = ARRAY_SIZE(snd_card_harmony_rates),
+-	.list = snd_card_harmony_rates,
+-	.mask = 0,
+-};
+-
+-#define HARMONY_SR_8KHZ		0x08
+-#define HARMONY_SR_16KHZ	0x09
+-#define HARMONY_SR_27KHZ	0x0A
+-#define HARMONY_SR_32KHZ	0x0B
+-#define HARMONY_SR_48KHZ	0x0E
+-#define HARMONY_SR_9KHZ		0x0F
+-#define HARMONY_SR_5KHZ		0x10
+-#define HARMONY_SR_11KHZ	0x11
+-#define HARMONY_SR_18KHZ	0x12
+-#define HARMONY_SR_22KHZ	0x13
+-#define HARMONY_SR_37KHZ	0x14
+-#define HARMONY_SR_44KHZ	0x15
+-#define HARMONY_SR_33KHZ	0x16
+-#define HARMONY_SR_6KHZ		0x17
+-
+-/* bits corresponding to the entries of snd_card_harmony_rates */
+ static unsigned int rate_bits[14] = {
+ 	HARMONY_SR_5KHZ, HARMONY_SR_6KHZ, HARMONY_SR_8KHZ,
+ 	HARMONY_SR_9KHZ, HARMONY_SR_11KHZ, HARMONY_SR_16KHZ,
+@@ -267,642 +95,626 @@
+ 	HARMONY_SR_44KHZ, HARMONY_SR_48KHZ
+ };
+ 
+-/* snd_card_harmony_rate_bits
+- * @rate:	index of current data rate in list
+- * returns: harmony hex code for registers
+- */
+-static unsigned int snd_card_harmony_rate_bits(int rate)
++static snd_pcm_hw_constraint_list_t hw_constraint_rates = {
++	.count = ARRAY_SIZE(snd_harmony_rates),
++	.list = snd_harmony_rates,
++	.mask = 0,
++};
++
++inline unsigned long
++harmony_read(harmony_t *h, unsigned r)
+ {
+-	unsigned int idx;
+-	
+-	for (idx = 0; idx < ARRAY_SIZE(snd_card_harmony_rates); idx++)
+-		if (snd_card_harmony_rates[idx] == rate)
+-			return rate_bits[idx];
+-	return HARMONY_SR_44KHZ; /* fallback */
++	return __raw_readl(h->iobase + r);
+ }
+ 
+-/*
+- * update controls (data format, sample rate, number of channels)
+- * according to value supplied in data structure
+- */
+-void snd_harmony_update_control(snd_card_harmony_t *harmony) 
++inline void
++harmony_write(harmony_t *h, unsigned r, unsigned long v)
+ {
+-	u32 default_cntl;
+-	
+-	/* Set CNTL */
+-	default_cntl = (HARMONY_CNTL_C |  	/* The C bit */
+-		(harmony->data_format << 6) |	/* Set the data format */
+-		(harmony->stereo_select << 5) |	/* Stereo select */
+-		(harmony->sample_rate));		/* Set sample rate */
+-	
+-	/* initialize CNTL */
+- 	snd_harmony_wait_cntl(harmony);
+-	
+-	gsc_writel(default_cntl, harmony->hpa+REG_CNTL);
+-	
++	__raw_writel(v, h->iobase + r);
+ }
+ 
+-/*
+- * interruption controls routines
+- */
++static void
++harmony_wait_for_control(harmony_t *h)
++{
++	while (harmony_read(h, HARMONY_CNTL) & HARMONY_CNTL_C) ;
++}
+ 
+-static void snd_harmony_disable_interrupts(snd_card_harmony_t *chip) 
++inline void
++harmony_reset(harmony_t *h)
+ {
+- 	snd_harmony_wait_cntl(chip);
+-	gsc_writel(0, chip->hpa+REG_DSTATUS); 
++	harmony_write(h, HARMONY_RESET, 1);
++	mdelay(50);
++	harmony_write(h, HARMONY_RESET, 0);
+ }
+ 
+-static void snd_harmony_enable_interrupts(snd_card_harmony_t *chip) 
++static void
++harmony_disable_interrupts(harmony_t *h)
+ {
+- 	snd_harmony_wait_cntl(chip);
+-	gsc_writel(HARMONY_DSTATUS_IE, chip->hpa+REG_DSTATUS); 
++	u32 dstatus;
++	harmony_wait_for_control(h);
++	dstatus = harmony_read(h, HARMONY_DSTATUS);
++	dstatus &= ~HARMONY_DSTATUS_IE;
++	harmony_write(h, HARMONY_DSTATUS, dstatus);
+ }
+ 
+-/*
+- * interruption routine:
+- * The interrupt routine must provide adresse of next physical pages 
+- * used by harmony
+- */
+-static int snd_card_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
++static void
++harmony_enable_interrupts(harmony_t *h)
++{
++	u32 dstatus;
++	harmony_wait_for_control(h);
++	dstatus = harmony_read(h, HARMONY_DSTATUS);
++	dstatus |= HARMONY_DSTATUS_IE;
++	harmony_write(h, HARMONY_DSTATUS, dstatus);
++}
++
++static void
++harmony_mute(harmony_t *h)
++{
++	spin_lock(&h->mixer_lock);
++	harmony_wait_for_control(h);
++	harmony_write(h, HARMONY_GAINCTL, HARMONY_GAIN_SILENCE);
++	spin_unlock(&h->mixer_lock);
++}
++
++static void
++harmony_unmute(harmony_t *h)
++{
++	spin_lock(&h->mixer_lock);
++	harmony_wait_for_control(h);
++	harmony_write(h, HARMONY_GAINCTL, h->st.gain);
++	spin_unlock(&h->mixer_lock);
++}
++
++static void
++harmony_set_control(harmony_t *h)
++{
++	u32 ctrl;
++
++	spin_lock(&h->lock);
++
++	ctrl = (HARMONY_CNTL_C      |
++		(h->st.format << 6) |
++		(h->st.stereo << 5) |
++		(h->st.rate));
++
++	harmony_wait_for_control(h);
++	harmony_write(h, HARMONY_CNTL, ctrl);
++
++	spin_unlock(&h->lock);
++}
++
++static irqreturn_t
++snd_harmony_interrupt(int irq, void *dev, struct pt_regs *regs)
+ {
+-	snd_card_harmony_t *harmony = (snd_card_harmony_t *)dev;
+-	u32 dstatus = 0;
+-	unsigned long hpa = harmony->hpa;
+-	
+-	/* Turn off interrupts */
+-	snd_harmony_disable_interrupts(harmony);
+-	
+-	/* wait for control to free */
+- 	snd_harmony_wait_cntl(harmony);
+-	
+-	/* Read dstatus and pcuradd (the current address) */
+-	dstatus = gsc_readl(hpa+REG_DSTATUS);
+ 	
+-	/* Check if this is a request to get the next play buffer */
++	u32 dstatus;
++	harmony_t *h = dev;
++	unsigned long flags;
++
++	spin_lock_irqsave(&h->lock, flags);
++	harmony_disable_interrupts(h);
++	harmony_wait_for_control(h);
++	dstatus = harmony_read(h, HARMONY_DSTATUS);
++	spin_unlock_irqrestore(&h->lock, flags);
++
+ 	if (dstatus & HARMONY_DSTATUS_PN) {
+-		if (harmony->playback_substream) {
+-			harmony->ply_buf += harmony->ply_count;
+-			harmony->ply_buf %= harmony->ply_size;
+-		
+-			gsc_writel(harmony->ply_buffer + harmony->ply_buf,
+-					hpa+REG_PNXTADD);
+-		
+-			snd_pcm_period_elapsed(harmony->playback_substream);
+-			harmony->ply_total++;
++		if (h->psubs) {
++			spin_lock_irqsave(&h->lock, flags);
++			h->pbuf.buf += h->pbuf.count; /* PAGE_SIZE */
++			h->pbuf.buf %= h->pbuf.size; /* MAX_BUFS*PAGE_SIZE */
++
++			harmony_write(h, HARMONY_PNXTADD, 
++				      h->pbuf.addr + h->pbuf.buf);
++			h->stats.play_intr++;
++			spin_unlock_irqrestore(&h->lock, flags);
++                        snd_pcm_period_elapsed(h->psubs);
+ 		} else {
+-			gsc_writel(harmony->silence_dma.addr + 
+-				   (HARMONY_BUF_SIZE*harmony->silence_count),
+-				   hpa+REG_PNXTADD);
+-			harmony->silence_count++;
+-			harmony->silence_count %= SILENCE_BUFS;
++			spin_lock_irqsave(&h->lock, flags);
++			harmony_write(h, HARMONY_PNXTADD, h->sbuf.addr);
++			h->stats.silence_intr++;
++			spin_unlock_irqrestore(&h->lock, flags);
+ 		}
+ 	}
+-	
+-	/* Check if we're being asked to fill in a recording buffer */
++
+ 	if (dstatus & HARMONY_DSTATUS_RN) {
+-		if (harmony->capture_substream) {
+-			harmony->cap_buf += harmony->cap_count;
+-			harmony->cap_buf %= harmony->cap_size;
+-		
+-			gsc_writel(harmony->cap_buffer + harmony->cap_buf,
+-					hpa+REG_RNXTADD);
+-		
+-			snd_pcm_period_elapsed(harmony->capture_substream);
+-			harmony->cap_total++;
++		if (h->csubs) {
++			spin_lock_irqsave(&h->lock, flags);
++			h->cbuf.buf += h->cbuf.count;
++			h->cbuf.buf %= h->cbuf.size;
++
++			harmony_write(h, HARMONY_RNXTADD,
++				      h->cbuf.addr + h->cbuf.buf);
++			h->stats.rec_intr++;
++			spin_unlock_irqrestore(&h->lock, flags);
++                        snd_pcm_period_elapsed(h->csubs);
+ 		} else {
+-			/* graveyard buffer */
+-			gsc_writel(harmony->graveyard_dma.addr +
+-				   (HARMONY_BUF_SIZE*harmony->graveyard_count),
+-				   hpa+REG_RNXTADD);
+-			harmony->graveyard_count++;
+-			harmony->graveyard_count %= GRAVEYARD_BUFS;
++			spin_lock_irqsave(&h->lock, flags);
++			harmony_write(h, HARMONY_RNXTADD, h->gbuf.addr);
++			h->stats.graveyard_intr++;
++			spin_unlock_irqrestore(&h->lock, flags);
+ 		}
+ 	}
+-	snd_harmony_enable_interrupts(harmony);
++
++	spin_lock_irqsave(&h->lock, flags);
++	harmony_enable_interrupts(h);
++	spin_unlock_irqrestore(&h->lock, flags);
+ 
+ 	return IRQ_HANDLED;
+ }
+ 
+-/* 
+- * proc entry
+- * this proc file will give some debugging info
+- */
+-
+-static void snd_harmony_proc_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
++static unsigned int 
++snd_harmony_rate_bits(int rate)
+ {
+-	snd_card_harmony_t *harmony = (snd_card_harmony_t *)entry->private_data;
+-
+-	snd_iprintf(buffer, "LASI Harmony driver\nLaurent Canet <canetl at esiee.fr>\n\n");
+-	snd_iprintf(buffer, "IRQ %d, hpa %lx, id %d rev %d\n",
+-			harmony->irq, harmony->hpa,
+-			harmony->id, harmony->rev);
+-	snd_iprintf(buffer, "Current gain %lx\n", (unsigned long) harmony->current_gain);
+-	snd_iprintf(buffer, "\tsample rate=%d\n", harmony->sample_rate);
+-	snd_iprintf(buffer, "\tstereo select=%d\n", harmony->stereo_select);
+-	snd_iprintf(buffer, "\tbitperchan=%d\n\n", harmony->data_format);
+-	
+-	snd_iprintf(buffer, "Play status:\n");
+-	snd_iprintf(buffer, "\tstopped %d\n", harmony->ply_stopped);
+-	snd_iprintf(buffer, "\tbuffer %lx, count %d\n", harmony->ply_buffer, harmony->ply_count);
+-	snd_iprintf(buffer, "\tbuf %d size %d\n\n", harmony->ply_buf, harmony->ply_size);
+-	
+-	snd_iprintf(buffer, "Capture status:\n");
+-	snd_iprintf(buffer, "\tstopped %d\n", harmony->cap_stopped);
+-	snd_iprintf(buffer, "\tbuffer %lx, count %d\n", harmony->cap_buffer, harmony->cap_count);
+-	snd_iprintf(buffer, "\tbuf %d, size %d\n\n", harmony->cap_buf, harmony->cap_size);
+-
+-	snd_iprintf(buffer, "Funny stats: total played=%d, recorded=%d\n\n", harmony->ply_total, harmony->cap_total);
+-		
+-	snd_iprintf(buffer, "Register:\n");
+-	snd_iprintf(buffer, "\tgainctl: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_GAINCTL));
+-	snd_iprintf(buffer, "\tcntl: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_CNTL));
+-	snd_iprintf(buffer, "\tid: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_ID));
+-	snd_iprintf(buffer, "\tpcuradd: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_PCURADD));
+-	snd_iprintf(buffer, "\trcuradd: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_RCURADD));
+-	snd_iprintf(buffer, "\tpnxtadd: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_PNXTADD));
+-	snd_iprintf(buffer, "\trnxtadd: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_RNXTADD));
+-	snd_iprintf(buffer, "\tdstatus: %lx\n", (unsigned long) gsc_readl(harmony->hpa+REG_DSTATUS));
+-	snd_iprintf(buffer, "\tov: %lx\n\n", (unsigned long) gsc_readl(harmony->hpa+REG_OV));
++	unsigned int i;
+ 	
+-}
++	for (i = 0; i < ARRAY_SIZE(snd_harmony_rates); i++)
++		if (snd_harmony_rates[i] == rate)
++			return rate_bits[i];
++
++	return HARMONY_SR_44KHZ;
++}
++
++static snd_pcm_hardware_t snd_harmony_playback =
++{
++	.info =	(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | 
++		 SNDRV_PCM_INFO_JOINT_DUPLEX | SNDRV_PCM_INFO_MMAP_VALID |
++		 SNDRV_PCM_INFO_BLOCK_TRANSFER),
++	.formats = (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_BE | 
++		    SNDRV_PCM_FMTBIT_A_LAW | SNDRV_PCM_FMTBIT_MU_LAW),
++	.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
++	.rate_min = 5500,
++	.rate_max = 48000,
++	.channels_min =	1,
++	.channels_max =	2,
++	.buffer_bytes_max = MAX_BUF_SIZE,
++	.period_bytes_min = BUF_SIZE,
++	.period_bytes_max = BUF_SIZE,
++	.periods_min = 1,
++	.periods_max = MAX_BUFS,
++	.fifo_size = 0,
++};
+ 
+-static void __devinit snd_harmony_proc_init(snd_card_harmony_t *harmony)
++static snd_pcm_hardware_t snd_harmony_capture =
+ {
+-	snd_info_entry_t *entry;
+-	
+-	if (! snd_card_proc_new(harmony->card, "harmony", &entry))
+-		snd_info_set_text_ops(entry, harmony, 2048, snd_harmony_proc_read);
+-}
+-
+-/* 
+- * PCM Stuff
+- */
++        .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
++                 SNDRV_PCM_INFO_JOINT_DUPLEX | SNDRV_PCM_INFO_MMAP_VALID |
++                 SNDRV_PCM_INFO_BLOCK_TRANSFER),
++        .formats = (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_BE |
++                    SNDRV_PCM_FMTBIT_A_LAW | SNDRV_PCM_FMTBIT_MU_LAW),
++        .rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
++        .rate_min = 5500,
++        .rate_max = 48000,
++        .channels_min = 1,
++        .channels_max = 2,
++        .buffer_bytes_max = MAX_BUF_SIZE,
++        .period_bytes_min = BUF_SIZE,
++        .period_bytes_max = BUF_SIZE,
++        .periods_min = 1,
++        .periods_max = MAX_BUFS,
++        .fifo_size = 0,
++};
+ 
+-static int snd_card_harmony_playback_ioctl(snd_pcm_substream_t * substream,
+-				         unsigned int cmd,
+-				         void *arg)
++static int
++snd_harmony_playback_trigger(snd_pcm_substream_t *ss, int cmd)
+ {
+-	return snd_pcm_lib_ioctl(substream, cmd, arg);
+-}
++	harmony_t *h = snd_pcm_substream_chip(ss);
+ 
+-static int snd_card_harmony_capture_ioctl(snd_pcm_substream_t * substream,
+-					unsigned int cmd,
+-					void *arg)
+-{
+-	return snd_pcm_lib_ioctl(substream, cmd, arg);
+-}
++	if (h->st.capturing)
++		return -EBUSY;
+ 
+-static int snd_card_harmony_playback_trigger(snd_pcm_substream_t * substream,
+-					   int cmd)
+-{
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	
+ 	switch (cmd) {
+-		case SNDRV_PCM_TRIGGER_STOP:
+-			if (harmony->ply_stopped) 
+-				return -EBUSY;
+-			harmony->ply_stopped = 1;
+-			snd_harmony_disable_interrupts(harmony);
+-			break;
+-		case SNDRV_PCM_TRIGGER_START:
+-			if (!harmony->ply_stopped)
+-				return -EBUSY;
+-			harmony->ply_stopped = 0;
+-			/* write the location of the first buffer to play */
+-			gsc_writel(harmony->ply_buffer, harmony->hpa+REG_PNXTADD);
+-			snd_harmony_enable_interrupts(harmony);
+-			break;
+-		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+-		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+-		case SNDRV_PCM_TRIGGER_SUSPEND:
+-			DPRINTK(KERN_INFO PFX "received unimplemented trigger: %d\n", cmd);
+-		default:
+-			return -EINVAL;
++	case SNDRV_PCM_TRIGGER_START:
++		spin_lock(&h->lock);
++		h->st.playing = 1;
++		harmony_write(h, HARMONY_PNXTADD, h->pbuf.addr);
++		harmony_write(h, HARMONY_RNXTADD, h->gbuf.addr);
++		harmony_unmute(h);
++		harmony_enable_interrupts(h);
++		spin_unlock(&h->lock);
++		break;
++	case SNDRV_PCM_TRIGGER_STOP:
++		spin_lock(&h->lock);
++		h->st.playing = 0;
++		harmony_mute(h);
++		harmony_disable_interrupts(h);
++		spin_unlock(&h->lock);
++		break;
++	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++	case SNDRV_PCM_TRIGGER_SUSPEND:
++		printk(KERN_ERR PFX "unimplemented triggers!\n");
++	default:
++		return -EINVAL;
+ 	}
++
+ 	return 0;
+ }
+ 
+-static int snd_card_harmony_capture_trigger(snd_pcm_substream_t * substream,
+-					  int cmd)
++static int
++snd_harmony_capture_trigger(snd_pcm_substream_t *ss, int cmd)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	
+-	switch (cmd) {
+-		case SNDRV_PCM_TRIGGER_STOP:
+-			if (harmony->cap_stopped) 
+-				return -EBUSY;
+-			harmony->cap_stopped = 1;
+-			snd_harmony_disable_interrupts(harmony);
+-			break;
+-		case SNDRV_PCM_TRIGGER_START:
+-			if (!harmony->cap_stopped)
+-				return -EBUSY;
+-			harmony->cap_stopped = 0;
+-			snd_harmony_enable_interrupts(harmony);
+-			break;
+-		case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+-		case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+-		case SNDRV_PCM_TRIGGER_SUSPEND:
+-			DPRINTK(KERN_INFO PFX "Received unimplemented trigger: %d\n", cmd);
+-		default:
+-			return -EINVAL;
+-	}
+-	return 0;
++        harmony_t *h = snd_pcm_substream_chip(ss);
++
++	if (h->st.playing)
++		return -EBUSY;
++
++        switch (cmd) {
++        case SNDRV_PCM_TRIGGER_START:
++                spin_lock(&h->lock);
++                h->st.capturing = 1;
++                harmony_write(h, HARMONY_PNXTADD, h->sbuf.addr);
++                harmony_write(h, HARMONY_RNXTADD, h->cbuf.addr);
++		harmony_unmute(h);
++                harmony_enable_interrupts(h);
++                spin_unlock(&h->lock);
++                break;
++        case SNDRV_PCM_TRIGGER_STOP:
++                spin_lock(&h->lock);
++		h->st.capturing = 0;
++                harmony_mute(h);
++                harmony_disable_interrupts(h);
++                spin_unlock(&h->lock);
++                break;
++        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++        case SNDRV_PCM_TRIGGER_SUSPEND:
++                printk(KERN_ERR PFX "unimplemented triggers!\n");
++        default:
++                return -EINVAL;
++        }
++
++        return 0;
+ }
+ 
+-/* set data format */
+-static int snd_harmony_set_data_format(snd_card_harmony_t *harmony, int pcm_format)
++static int
++snd_harmony_set_data_format(harmony_t *h, int fmt)
+ {
+-	int old_format = harmony->data_format;
+-	int new_format = old_format;
+-	switch (pcm_format) {
++	int o = h->st.format;
++	int n;
++
++	switch(fmt) {
+ 	case SNDRV_PCM_FORMAT_S16_BE:
+-		new_format = HARMONY_DF_16BIT_LINEAR;
++		n = HARMONY_DF_16BIT_LINEAR;
+ 		break;
+ 	case SNDRV_PCM_FORMAT_A_LAW:
+-		new_format = HARMONY_DF_8BIT_ALAW;
++		n = HARMONY_DF_8BIT_ALAW;
+ 		break;
+ 	case SNDRV_PCM_FORMAT_MU_LAW:
+-		new_format = HARMONY_DF_8BIT_ULAW;
++		n = HARMONY_DF_8BIT_ULAW;
++		break;
++	default:
++		n = HARMONY_DF_16BIT_LINEAR;
+ 		break;
+ 	}
+-	/* re-initialize silence buffer if needed */
+-	if (old_format != new_format)
+-		snd_pcm_format_set_silence(pcm_format, harmony->silence_dma.area,
+-					   (HARMONY_BUF_SIZE * SILENCE_BUFS * 8) / snd_pcm_format_width(pcm_format));
+ 
+-	return new_format;
++	if (o != n) {
++		snd_pcm_format_set_silence(fmt, h->sdma.area,
++					   SILENCE_BUFSZ / 
++					   snd_pcm_format_width(fmt));
++	}
++
++	return n;
+ }
+ 
+-static int snd_card_harmony_playback_prepare(snd_pcm_substream_t * substream)
++static void
++snd_harmony_update_control(harmony_t *h)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	snd_pcm_runtime_t *runtime = substream->runtime;
+-	
+-	harmony->ply_size 			= snd_pcm_lib_buffer_bytes(substream);
+-	harmony->ply_count 			= snd_pcm_lib_period_bytes(substream);
+-	harmony->ply_buf			= 0;
+-	harmony->ply_stopped		= 1;
+-	
+-	/* initialize given sample rate */
+-	harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate);
++	harmony_set_control(h);
++}
++
++static int
++snd_harmony_playback_prepare(snd_pcm_substream_t *ss)
++{
++	harmony_t *h = snd_pcm_substream_chip(ss);
++	snd_pcm_runtime_t *rt = ss->runtime;
+ 
+-	/* data format */
+-	harmony->data_format = snd_harmony_set_data_format(harmony, runtime->format);
++	if (h->st.capturing)
++		return -EBUSY;
+ 
+-	/* number of channels */
+-	if (runtime->channels == 2)
+-		harmony->stereo_select = HARMONY_SS_STEREO;
+-	else
+-		harmony->stereo_select = HARMONY_SS_MONO;
+-	
+-	DPRINTK(KERN_INFO PFX "Playback_prepare, sr=%d(%x), df=%x, ss=%x hpa=%lx\n", runtime->rate,
+-				harmony->sample_rate, harmony->data_format, harmony->stereo_select, harmony->hpa);
+-	snd_harmony_update_control(harmony);
+-	harmony->format_initialized = 1;
+-	harmony->ply_buffer = runtime->dma_addr;
++	h->pbuf.size = snd_pcm_lib_buffer_bytes(ss);
++	h->pbuf.count = snd_pcm_lib_period_bytes(ss);
++	h->pbuf.buf = 0;
++	h->st.playing = 0;
++
++	h->st.rate = snd_harmony_rate_bits(rt->rate);
++	h->st.format = snd_harmony_set_data_format(h, rt->format);
+ 	
++	if (rt->channels == 2)
++		h->st.stereo = HARMONY_SS_STEREO;
++	else
++		h->st.stereo = HARMONY_SS_MONO;
++
++	snd_harmony_update_control(h);
++
++	h->pbuf.addr = rt->dma_addr;
++
+ 	return 0;
+ }
+ 
+-static int snd_card_harmony_capture_prepare(snd_pcm_substream_t * substream)
++static int
++snd_harmony_capture_prepare(snd_pcm_substream_t *ss)
+ {
+-	snd_pcm_runtime_t *runtime = substream->runtime;
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	
+-	harmony->cap_size 			= snd_pcm_lib_buffer_bytes(substream);
+-	harmony->cap_count 			= snd_pcm_lib_period_bytes(substream);
+-	harmony->cap_count			= 0;
+-	harmony->cap_stopped		= 1;
+-
+-	/* initialize given sample rate */
+-	harmony->sample_rate = snd_card_harmony_rate_bits(runtime->rate);
+-	
+-	/* data format */
+-	harmony->data_format = snd_harmony_set_data_format(harmony, runtime->format);
+-	
+-	/* number of channels */
+-	if (runtime->channels == 1)
+-		harmony->stereo_select = HARMONY_SS_MONO;
+-	else if (runtime->channels == 2)
+-		harmony->stereo_select = HARMONY_SS_STEREO;
+-		
+-	snd_harmony_update_control(harmony);
+-	harmony->format_initialized = 1;
+-	
+-	harmony->cap_buffer = runtime->dma_addr;
++        harmony_t *h = snd_pcm_substream_chip(ss);
++        snd_pcm_runtime_t *rt = ss->runtime;
+ 
+-	return 0;
++	if (h->st.playing)
++		return -EBUSY;
++
++        h->cbuf.size = snd_pcm_lib_buffer_bytes(ss);
++        h->cbuf.count = snd_pcm_lib_period_bytes(ss);
++        h->cbuf.buf = 0;
++	h->st.capturing = 0;
++
++        h->st.rate = snd_harmony_rate_bits(rt->rate);
++        h->st.format = snd_harmony_set_data_format(h, rt->format);
++
++        if (rt->channels == 2)
++                h->st.stereo = HARMONY_SS_STEREO;
++        else
++                h->st.stereo = HARMONY_SS_MONO;
++
++        snd_harmony_update_control(h);
++
++        h->cbuf.addr = rt->dma_addr;
++
++        return 0;
+ }
+ 
+-static snd_pcm_uframes_t snd_card_harmony_capture_pointer(snd_pcm_substream_t * substream)
++static snd_pcm_uframes_t 
++snd_harmony_playback_pointer(snd_pcm_substream_t *ss)
+ {
+-	snd_pcm_runtime_t *runtime = substream->runtime;
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	unsigned long rcuradd;
+-	int recorded;
+-	
+-	if (harmony->cap_stopped) return 0;
+-	if (harmony->capture_substream == NULL) return 0;
+-
+-	rcuradd = gsc_readl(harmony->hpa+REG_RCURADD);
+-	recorded = (rcuradd - harmony->cap_buffer);
+-	recorded %= harmony->cap_size;
+-		
+-	return bytes_to_frames(runtime, recorded);
+-}
++	snd_pcm_runtime_t *rt = ss->runtime;
++	harmony_t *h = snd_pcm_substream_chip(ss);
++	unsigned long pcuradd;
++	unsigned long played;
+ 
+-/*
+- */
++	if (!(h->st.playing) || (h->psubs == NULL)) 
++		return 0;
+ 
+-static snd_pcm_uframes_t snd_card_harmony_playback_pointer(snd_pcm_substream_t * substream)
+-{
+-	snd_pcm_runtime_t *runtime = substream->runtime;
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	int played;
+-	long int pcuradd = gsc_readl(harmony->hpa+REG_PCURADD);
+-	
+-	if ((harmony->ply_stopped) || (harmony->playback_substream == NULL)) return 0;
+-	if ((harmony->ply_buffer == 0) || (harmony->ply_size == 0)) return 0;
+-	
+-	played = (pcuradd - harmony->ply_buffer);
+-	
+-	printk(KERN_DEBUG PFX "Pointer is %lx-%lx = %d\n", pcuradd, harmony->ply_buffer, played);	
+-
+-	if (pcuradd > harmony->ply_buffer + harmony->ply_size) return 0;
+-	
+-	return bytes_to_frames(runtime, played);
+-}
+-
+-static snd_pcm_hardware_t snd_card_harmony_playback =
+-{
+-	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | 
+-					SNDRV_PCM_INFO_JOINT_DUPLEX | 
+-					SNDRV_PCM_INFO_MMAP_VALID |
+-					SNDRV_PCM_INFO_BLOCK_TRANSFER),
+-	.formats =		(SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_BE | 
+-					SNDRV_PCM_FMTBIT_A_LAW | SNDRV_PCM_FMTBIT_MU_LAW),
+-	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
+-	.rate_min =		5500,
+-	.rate_max =		48000,
+-	.channels_min =		1,
+-	.channels_max =		2,
+-	.buffer_bytes_max =	MAX_BUFFER_SIZE,
+-	.period_bytes_min =	HARMONY_BUF_SIZE,
+-	.period_bytes_max =	HARMONY_BUF_SIZE,
+-	.periods_min =		1,
+-	.periods_max =		MAX_BUFS,
+-	.fifo_size =		0,
+-};
++	if ((h->pbuf.addr == 0) || (h->pbuf.size == 0)) 
++		return 0;
++	
++	pcuradd = harmony_read(h, HARMONY_PCURADD);
++	played = pcuradd - h->pbuf.addr;
++
++#ifdef HARMONY_DEBUG
++	printk(KERN_DEBUG PFX "Pointer is 0x%lx-0x%lx = %d bytes\n", 
++	       pcuradd, h->pbuf.addr, played);	
++#endif
+ 
+-static snd_pcm_hardware_t snd_card_harmony_capture =
++	if (pcuradd > h->pbuf.addr + h->pbuf.size)
++		return 0;
++	
++	return bytes_to_frames(rt, played);
++}
++
++static snd_pcm_uframes_t
++snd_harmony_capture_pointer(snd_pcm_substream_t *ss)
+ {
+-	.info =			(SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED | 
+-					SNDRV_PCM_INFO_JOINT_DUPLEX | 
+-					SNDRV_PCM_INFO_MMAP_VALID |
+-					SNDRV_PCM_INFO_BLOCK_TRANSFER),
+-	.formats =		(SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_BE | 
+-					SNDRV_PCM_FMTBIT_A_LAW | SNDRV_PCM_FMTBIT_MU_LAW),
+-	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
+-	.rate_min =		5500,
+-	.rate_max =		48000,
+-	.channels_min =		1,
+-	.channels_max =		2,
+-	.buffer_bytes_max =	MAX_BUFFER_SIZE,
+-	.period_bytes_min =	HARMONY_BUF_SIZE,
+-	.period_bytes_max =	HARMONY_BUF_SIZE,
+-	.periods_min =		1,
+-	.periods_max =		MAX_BUFS,
+-	.fifo_size =		0,
+-};
++        snd_pcm_runtime_t *rt = ss->runtime;
++        harmony_t *h = snd_pcm_substream_chip(ss);
++        unsigned long rcuradd;
++        unsigned long caught;
++
++        if (!(h->st.capturing) || (h->csubs == NULL))
++                return 0;
++
++        if ((h->cbuf.addr == 0) || (h->cbuf.size == 0))
++                return 0;
++
++        rcuradd = harmony_read(h, HARMONY_RCURADD);
++        caught = rcuradd - h->cbuf.addr;
++
++#ifdef HARMONY_DEBUG
++        printk(KERN_DEBUG PFX "Pointer is 0x%lx-0x%lx = %d bytes\n",
++               rcuradd, h->cbuf.addr, caught);
++#endif
+ 
+-static int snd_card_harmony_playback_open(snd_pcm_substream_t * substream)
++        if (rcuradd > h->cbuf.addr + h->cbuf.size)
++		return 0;
++
++        return bytes_to_frames(rt, caught);
++}
++
++static int 
++snd_harmony_playback_open(snd_pcm_substream_t *ss)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	snd_pcm_runtime_t *runtime = substream->runtime;
++	harmony_t *h = snd_pcm_substream_chip(ss);
++	snd_pcm_runtime_t *rt = ss->runtime;
+ 	int err;
+ 	
+-	harmony->playback_substream = substream;
+-	runtime->hw = snd_card_harmony_playback;
+-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraint_rates);
++	h->psubs = ss;
++	rt->hw = snd_harmony_playback;
++	snd_pcm_hw_constraint_list(rt, 0, SNDRV_PCM_HW_PARAM_RATE, 
++				   &hw_constraint_rates);
+ 	
+-	if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
++	err = snd_pcm_hw_constraint_integer(rt, SNDRV_PCM_HW_PARAM_PERIODS);
++	if (err < 0)
+ 		return err;
+ 	
+ 	return 0;
+ }
+ 
+-static int snd_card_harmony_capture_open(snd_pcm_substream_t * substream)
++static int
++snd_harmony_capture_open(snd_pcm_substream_t *ss)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	snd_pcm_runtime_t *runtime = substream->runtime;
+-	int err;
+-	
+-	harmony->capture_substream = substream;
+-	runtime->hw = snd_card_harmony_capture;
+-	snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &hw_constraint_rates);
+-	if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
+-		return err;
+-	return 0;
++        harmony_t *h = snd_pcm_substream_chip(ss);
++        snd_pcm_runtime_t *rt = ss->runtime;
++        int err;
++
++        h->csubs = ss;
++        rt->hw = snd_harmony_capture;
++        snd_pcm_hw_constraint_list(rt, 0, SNDRV_PCM_HW_PARAM_RATE,
++                                   &hw_constraint_rates);
++
++        err = snd_pcm_hw_constraint_integer(rt, SNDRV_PCM_HW_PARAM_PERIODS);
++        if (err < 0)
++                return err;
+ 
++        return 0;
+ }
+ 
+-static int snd_card_harmony_playback_close(snd_pcm_substream_t * substream)
++static int 
++snd_harmony_playback_close(snd_pcm_substream_t *ss)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	
+-	harmony->playback_substream = NULL;
+-	harmony->ply_size 			= 0;
+-	harmony->ply_buf			= 0;
+-	harmony->ply_buffer			= 0;
+-	harmony->ply_count			= 0;
+-	harmony->ply_stopped		= 1;
+-	harmony->format_initialized = 0;
+-	
++	harmony_t *h = snd_pcm_substream_chip(ss);
++	h->psubs = NULL;
+ 	return 0;
+ }
+ 
+-static int snd_card_harmony_capture_close(snd_pcm_substream_t * substream)
++static int
++snd_harmony_capture_close(snd_pcm_substream_t *ss)
+ {
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
+-	
+-	harmony->capture_substream = NULL;
+-	harmony->cap_size 			= 0;
+-	harmony->cap_buf			= 0;
+-	harmony->cap_buffer			= 0;
+-	harmony->cap_count			= 0;
+-	harmony->cap_stopped		= 1;
+-	harmony->format_initialized = 0;
+-	
+-	return 0;
++        harmony_t *h = snd_pcm_substream_chip(ss);
++        h->csubs = NULL;
++        return 0;
+ }
+ 
+-static int snd_card_harmony_hw_params(snd_pcm_substream_t *substream, 
+-	                   snd_pcm_hw_params_t * hw_params)
++static int 
++snd_harmony_hw_params(snd_pcm_substream_t *ss,
++		      snd_pcm_hw_params_t *hw)
+ {
+ 	int err;
+-	snd_card_harmony_t *harmony = snd_pcm_substream_chip(substream);
++	harmony_t *h = snd_pcm_substream_chip(ss);
++	
++	err = snd_pcm_lib_malloc_pages(ss, params_buffer_bytes(hw));
++	if (err > 0 && h->dma.type == SNDRV_DMA_TYPE_CONTINUOUS)
++		ss->runtime->dma_addr = __pa(ss->runtime->dma_area);
+ 	
+-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+-	if (err > 0 && harmony->dma_dev.type == SNDRV_DMA_TYPE_CONTINUOUS)
+-		substream->runtime->dma_addr = __pa(substream->runtime->dma_area);
+-	DPRINTK(KERN_INFO PFX "HW Params returned %d, dma_addr %lx\n", err,
+-			(unsigned long)substream->runtime->dma_addr);
+ 	return err;
+ }
+ 
+-static int snd_card_harmony_hw_free(snd_pcm_substream_t *substream) 
++static int 
++snd_harmony_hw_free(snd_pcm_substream_t *ss) 
+ {
+-	snd_pcm_lib_free_pages(substream);		
+-	return 0;
++	return snd_pcm_lib_free_pages(ss);
+ }
+ 
+-static snd_pcm_ops_t snd_card_harmony_playback_ops = {
+-	.open =			snd_card_harmony_playback_open,
+-	.close =		snd_card_harmony_playback_close,
+-	.ioctl =		snd_card_harmony_playback_ioctl,
+-	.hw_params = 	snd_card_harmony_hw_params,
+-	.hw_free = 		snd_card_harmony_hw_free,
+-	.prepare =		snd_card_harmony_playback_prepare,
+-	.trigger =		snd_card_harmony_playback_trigger,
+- 	.pointer =		snd_card_harmony_playback_pointer,
++static snd_pcm_ops_t snd_harmony_playback_ops = {
++	.open =	snd_harmony_playback_open,
++	.close = snd_harmony_playback_close,
++	.ioctl = snd_pcm_lib_ioctl,
++	.hw_params = snd_harmony_hw_params,
++	.hw_free = snd_harmony_hw_free,
++	.prepare = snd_harmony_playback_prepare,
++	.trigger = snd_harmony_playback_trigger,
++ 	.pointer = snd_harmony_playback_pointer,
+ };
+ 
+-static snd_pcm_ops_t snd_card_harmony_capture_ops = {
+-	.open =			snd_card_harmony_capture_open,
+-	.close =		snd_card_harmony_capture_close,
+-	.ioctl =		snd_card_harmony_capture_ioctl,
+-	.hw_params = 	snd_card_harmony_hw_params,
+-	.hw_free = 		snd_card_harmony_hw_free,
+-	.prepare =		snd_card_harmony_capture_prepare,
+-	.trigger =		snd_card_harmony_capture_trigger,
+-	.pointer =		snd_card_harmony_capture_pointer,
++static snd_pcm_ops_t snd_harmony_capture_ops = {
++        .open = snd_harmony_capture_open,
++        .close = snd_harmony_capture_close,
++        .ioctl = snd_pcm_lib_ioctl,
++        .hw_params = snd_harmony_hw_params,
++        .hw_free = snd_harmony_hw_free,
++        .prepare = snd_harmony_capture_prepare,
++        .trigger = snd_harmony_capture_trigger,
++        .pointer = snd_harmony_capture_pointer,
+ };
+ 
+-static int snd_card_harmony_pcm_init(snd_card_harmony_t *harmony)
++static int 
++snd_harmony_pcm_init(harmony_t *h)
+ {
+ 	snd_pcm_t *pcm;
+ 	int err;
+ 
+-	/* Request that IRQ */
+-	if (request_irq(harmony->irq, snd_card_harmony_interrupt, 0 ,"harmony", harmony)) {
+-		printk(KERN_ERR PFX "Error requesting irq %d.\n", harmony->irq);
+-		return -EFAULT;
+-	}
+-	
+-	snd_harmony_disable_interrupts(harmony);
++	harmony_disable_interrupts(h);
+ 	
+-   	if ((err = snd_pcm_new(harmony->card, "Harmony", 0, 1, 1, &pcm)) < 0)
++   	err = snd_pcm_new(h->card, "harmony", 0, 1, 1, &pcm);
++	if (err < 0)
+ 		return err;
+ 	
+-	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_card_harmony_playback_ops);
+- 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_card_harmony_capture_ops); 
+-	
+-	pcm->private_data = harmony;
++	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, 
++			&snd_harmony_playback_ops);
++	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
++			&snd_harmony_capture_ops);
++
++	pcm->private_data = h;
+ 	pcm->info_flags = 0;
+-	strcpy(pcm->name, "Harmony");
+-	harmony->pcm = pcm;
++	strcpy(pcm->name, "harmony");
++	h->pcm = pcm;
+ 	
+ 	/* initialize graveyard buffer */
+-	harmony->dma_dev.type = SNDRV_DMA_TYPE_DEV;
+-	harmony->dma_dev.dev = &harmony->pa_dev->dev;
+-	err = snd_dma_alloc_pages(harmony->dma_dev.type,
+-				  harmony->dma_dev.dev,
+-				  HARMONY_BUF_SIZE*GRAVEYARD_BUFS,
+-				  &harmony->graveyard_dma);
+-	if (err == -ENOMEM) {
+-		/* use continuous buffers */
+-		harmony->dma_dev.type = SNDRV_DMA_TYPE_CONTINUOUS;
+-		harmony->dma_dev.dev = snd_dma_continuous_data(GFP_KERNEL);
+-		err = snd_dma_alloc_pages(harmony->dma_dev.type,
+-					  harmony->dma_dev.dev,
+-					  HARMONY_BUF_SIZE*GRAVEYARD_BUFS,
+-					  &harmony->graveyard_dma);
+-	}
++	h->dma.type = SNDRV_DMA_TYPE_DEV;
++	h->dma.dev = parisc_get_drvdata(h->dev);
++	err = snd_dma_alloc_pages(h->dma.type,
++				  h->dma.dev,
++				  BUF_SIZE*GRAVEYARD_BUFS,
++				  &h->gdma);
+ 	if (err < 0) {
+-		printk(KERN_ERR PFX "can't allocate graveyard buffer\n");
++		printk(KERN_ERR PFX "cannot allocate graveyard buffer!\n");
+ 		return err;
+ 	}
+-	harmony->graveyard_count = 0;
++	h->gbuf.count = 0;
+ 	
+ 	/* initialize silence buffers */
+-	err = snd_dma_alloc_pages(harmony->dma_dev.type,
+-				  harmony->dma_dev.dev,
+-				  HARMONY_BUF_SIZE*SILENCE_BUFS,
+-				  &harmony->silence_dma);
++	err = snd_dma_alloc_pages(h->dma.type,
++				  h->dma.dev,
++				  BUF_SIZE*SILENCE_BUFS,
++				  &h->sdma);
+ 	if (err < 0) {
+-		printk(KERN_ERR PFX "can't allocate silence buffer\n");
++		printk(KERN_ERR PFX "cannot allocate silence buffer!\n");
+ 		return err;
+ 	}
+-	harmony->silence_count = 0;
++	h->sbuf.count = 0;
+ 
+-	if (harmony->dma_dev.type == SNDRV_DMA_TYPE_CONTINUOUS) {
+-		harmony->graveyard_dma.addr = __pa(harmony->graveyard_dma.area);
+-		harmony->silence_dma.addr = __pa(harmony->silence_dma.area);
++	if (h->dma.type == SNDRV_DMA_TYPE_CONTINUOUS) {
++		h->gbuf.addr = __pa(h->gdma.area);
++		h->sbuf.addr = __pa(h->sdma.area);
+ 	}
+ 
+-	harmony->ply_stopped = harmony->cap_stopped = 1;
+-	
+-	harmony->playback_substream = NULL;
+-	harmony->capture_substream = NULL;
+-	harmony->graveyard_count = 0;
+-
+-	err = snd_pcm_lib_preallocate_pages_for_all(pcm, harmony->dma_dev.type,
+-						    harmony->dma_dev.dev,
+-						    MAX_BUFFER_SIZE, MAX_BUFFER_SIZE);
++	/* pre-allocate space for DMA */
++	err = snd_pcm_lib_preallocate_pages_for_all(pcm, h->dma.type,
++						    h->dma.dev,
++						    MAX_BUF_SIZE, 
++						    MAX_BUF_SIZE);
+ 	if (err < 0) {
+-		printk(KERN_ERR PFX "buffer allocation error %d\n", err);
+-		// return err;
++		printk(KERN_ERR PFX "buffer allocation error: %d\n", err);
++		return err;
+ 	}
+ 
+ 	return 0;
+ }
+ 
+-/*
+- * mixer routines
+- */
+-
+-static void snd_harmony_set_new_gain(snd_card_harmony_t *harmony)
++static void 
++snd_harmony_set_new_gain(harmony_t *h)
+ {
+-	DPRINTK(KERN_INFO PFX "Setting new gain %x at %lx\n", harmony->current_gain, harmony->hpa+REG_GAINCTL);
+-	/* Wait until we're out of control mode */
+- 	snd_harmony_wait_cntl(harmony);
+-	
+-	gsc_writel(harmony->current_gain, harmony->hpa+REG_GAINCTL);
++ 	harmony_wait_for_control(h);
++	harmony_write(h, HARMONY_GAINCTL, h->st.gain);
+ }
+ 
+-#define HARMONY_VOLUME(xname, left_shift, right_shift, mask, invert) \
+-{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+-  .info = snd_harmony_mixercontrol_info, \
+-  .get = snd_harmony_volume_get, .put = snd_harmony_volume_put, \
+-  .private_value = ((left_shift) | ((right_shift) << 8) | ((mask) << 16) | ((invert) << 24)) }
+-
+-static int snd_harmony_mixercontrol_info(snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t * uinfo)
+-{
+-	int mask = (kcontrol->private_value >> 16) & 0xff;
+-	int left_shift = (kcontrol->private_value) & 0xff;
+-	int right_shift = (kcontrol->private_value >> 8) & 0xff;
++static int 
++snd_harmony_mixercontrol_info(snd_kcontrol_t *kc, 
++			      snd_ctl_elem_info_t *uinfo)
++{
++	int mask = (kc->private_value >> 16) & 0xff;
++	int left_shift = (kc->private_value) & 0xff;
++	int right_shift = (kc->private_value >> 8) & 0xff;
+ 	
+-	uinfo->type = (mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER);
+-	uinfo->count = (left_shift == right_shift) ? 1 : 2;
++	uinfo->type = mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : 
++		       SNDRV_CTL_ELEM_TYPE_INTEGER;
++	uinfo->count = left_shift == right_shift ? 1 : 2;
+ 	uinfo->value.integer.min = 0;
+ 	uinfo->value.integer.max = mask;
++
+ 	return 0;
+ }
+- 
+-static int snd_harmony_volume_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+-{
+-	snd_card_harmony_t *harmony = snd_kcontrol_chip(kcontrol);
+-	int shift_left = (kcontrol->private_value) & 0xff;
+-	int shift_right = (kcontrol->private_value >> 8) & 0xff;
+-	int mask = (kcontrol->private_value >> 16) & 0xff;
+-	int invert = (kcontrol->private_value >> 24) & 0xff;
+-	unsigned long flags;
++
++static int 
++snd_harmony_volume_get(snd_kcontrol_t *kc, 
++		       snd_ctl_elem_value_t *ucontrol)
++{
++	harmony_t *h = snd_kcontrol_chip(kc);
++	int shift_left = (kc->private_value) & 0xff;
++	int shift_right = (kc->private_value >> 8) & 0xff;
++	int mask = (kc->private_value >> 16) & 0xff;
++	int invert = (kc->private_value >> 24) & 0xff;
+ 	int left, right;
+ 	
+-	spin_lock_irqsave(&harmony->mixer_lock, flags);
+-	left = (harmony->current_gain >> shift_left) & mask;
+-	right = (harmony->current_gain >> shift_right) & mask;
++	spin_lock(&h->mixer_lock);
++
++	left = (h->st.gain >> shift_left) & mask;
++	right = (h->st.gain >> shift_right) & mask;
+ 
+ 	if (invert) {
+ 		left = mask - left;
+@@ -910,21 +722,23 @@
+ 	}
+ 	ucontrol->value.integer.value[0] = left;
+ 	ucontrol->value.integer.value[1] = right;
+-	spin_unlock_irqrestore(&harmony->mixer_lock, flags);
++
++	spin_unlock(&h->mixer_lock);
+ 
+ 	return 0;
+ }  
+ 
+-static int snd_harmony_volume_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+-{
+-	snd_card_harmony_t *harmony = snd_kcontrol_chip(kcontrol);
+-	int shift_left = (kcontrol->private_value) & 0xff;
+-	int shift_right = (kcontrol->private_value >> 8) & 0xff;
+-	int mask = (kcontrol->private_value >> 16) & 0xff;
+-	int invert = (kcontrol->private_value >> 24) & 0xff;
+-	unsigned long flags;
++static int 
++snd_harmony_volume_put(snd_kcontrol_t *kc, 
++		       snd_ctl_elem_value_t *ucontrol)
++{
++	harmony_t *h = snd_kcontrol_chip(kc);
++	int shift_left = (kc->private_value) & 0xff;
++	int shift_right = (kc->private_value >> 8) & 0xff;
++	int mask = (kc->private_value >> 16) & 0xff;
++	int invert = (kc->private_value >> 24) & 0xff;
+ 	int left, right;
+-	int old_gain = harmony->current_gain;
++	int old_gain = h->st.gain;
+ 	
+ 	left = ucontrol->value.integer.value[0] & mask;
+ 	right = ucontrol->value.integer.value[1] & mask;
+@@ -933,213 +747,244 @@
+ 		right = mask - right;
+ 	}
+ 	
+-	spin_lock_irqsave(&harmony->mixer_lock, flags);
+-	harmony->current_gain = harmony->current_gain & ~( (mask << shift_right) | (mask << shift_left));
+- 	harmony->current_gain = harmony->current_gain | ((left << shift_left) | (right << shift_right) );
+-	snd_harmony_set_new_gain(harmony);
+-	spin_unlock_irqrestore(&harmony->mixer_lock, flags);
++	spin_lock(&h->mixer_lock);
++
++	h->st.gain &= ~( (mask << shift_right) | (mask << shift_left) );
++ 	h->st.gain |=  ( (left << shift_left) | (right << shift_right) );
++	snd_harmony_set_new_gain(h);
++
++	spin_unlock(&h->mixer_lock);
+ 	
+-	return (old_gain - harmony->current_gain);
++	return (old_gain - h->st.gain);
+ }
+ 
+-#define HARMONY_CONTROLS (sizeof(snd_harmony_controls)/sizeof(snd_kcontrol_new_t))
++#define HARMONY_CONTROLS (sizeof(snd_harmony_controls)/ \
++                          sizeof(snd_kcontrol_new_t))
++
++#define HARMONY_VOLUME(xname, left_shift, right_shift, mask, invert) \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,                \
++  .info = snd_harmony_mixercontrol_info,                             \
++  .get = snd_harmony_volume_get, .put = snd_harmony_volume_put,      \
++  .private_value = ((left_shift) | ((right_shift) << 8) |            \
++                   ((mask) << 16) | ((invert) << 24)) }
+ 
+ static snd_kcontrol_new_t snd_harmony_controls[] = {
+-HARMONY_VOLUME("PCM Capture Volume", 12, 16, 0x0f, 0),
+-HARMONY_VOLUME("Master Volume", 20, 20, 0x0f, 1),
+-HARMONY_VOLUME("PCM Playback Volume", 6, 0, 0x3f, 1),
++	HARMONY_VOLUME("Playback Volume", HARMONY_GAIN_LO_SHIFT, 
++		       HARMONY_GAIN_RO_SHIFT, HARMONY_GAIN_OUT, 1),
++	HARMONY_VOLUME("Capture Volume", HARMONY_GAIN_LI_SHIFT,
++		       HARMONY_GAIN_RI_SHIFT, HARMONY_GAIN_IN, 0),
+ };
+ 
+-static void __init snd_harmony_reset_codec(snd_card_harmony_t *harmony)
++static void __init 
++snd_harmony_mixer_reset(harmony_t *h)
+ {
+- 	snd_harmony_wait_cntl(harmony);
+-	gsc_writel(1, harmony->hpa+REG_RESET);
+-	mdelay(50);		/* wait 50 ms */
+-	gsc_writel(0, harmony->hpa+REG_RESET);
++	harmony_mute(h);
++	harmony_reset(h);
++	h->st.gain = HARMONY_GAIN_DEFAULT;
++	harmony_unmute(h);
+ }
+ 
+-/*
+- * Mute all the output and reset Harmony.
+- */
+-
+-static void __init snd_harmony_mixer_reset(snd_card_harmony_t *harmony)
++static int __init 
++snd_harmony_mixer_init(harmony_t *h)
+ {
+-	harmony->current_gain = HARMONY_GAIN_TOTAL_SILENCE;
+-	snd_harmony_set_new_gain(harmony);
+-	snd_harmony_reset_codec(harmony);
+-	harmony->current_gain = HARMONY_GAIN_DEFAULT;
+-	snd_harmony_set_new_gain(harmony);
+-}
+-
+-
+-static int __init snd_card_harmony_mixer_init(snd_card_harmony_t *harmony)
+-{
+-	snd_card_t *card = harmony->card;
++	snd_card_t *card = h->card;
+ 	int idx, err;
+ 
+-	snd_assert(harmony != NULL, return -EINVAL);
++	snd_assert(h != NULL, return -EINVAL);
+ 	strcpy(card->mixername, "Harmony Gain control interface");
+ 
+ 	for (idx = 0; idx < HARMONY_CONTROLS; idx++) {
+-		if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_harmony_controls[idx], harmony))) < 0)
++		err = snd_ctl_add(card, 
++				  snd_ctl_new1(&snd_harmony_controls[idx], h));
++		if (err < 0)
+ 			return err;
+ 	}
+ 	
+-	snd_harmony_mixer_reset(harmony);
++	snd_harmony_mixer_reset(h);
+ 
+ 	return 0;
+ }
+ 
+-static int snd_card_harmony_create(snd_card_t *card, struct parisc_device *pa_dev, snd_card_harmony_t *harmony)
++static int
++snd_harmony_free(harmony_t *h)
+ {
+-	u32	cntl;
+-	
+-	harmony->card = card;
+-	
+-	harmony->pa_dev = pa_dev;
++        if (h->gdma.addr)
++                snd_dma_free_pages(&h->gdma);
++        if (h->sdma.addr)
++                snd_dma_free_pages(&h->sdma);
+ 
+-	/* Set the HPA of harmony */
+-	harmony->hpa = pa_dev->hpa;
+-	
+-	harmony->irq = pa_dev->irq;
+-	if (!harmony->irq) {
+-		printk(KERN_ERR PFX "no irq found\n");
+-		return -ENODEV;
+-	}
++	if (h->irq >= 0)
++		free_irq(h->irq, h);
++	kfree(h);
++	return 0;
++}
+ 
+-	/* Grab the ID and revision from the device */
+-	harmony->id = (gsc_readl(harmony->hpa+REG_ID)&0x00ff0000) >> 16;
+-	if ((harmony->id | 1) != 0x15) {
+-		printk(KERN_WARNING PFX "wrong harmony id 0x%02x\n", harmony->id);
+-		return -EBUSY;
+-	}
+-	cntl = gsc_readl(harmony->hpa+REG_CNTL);
+-	harmony->rev = (cntl>>20) & 0xff;
++static int
++snd_harmony_dev_free(snd_device_t *dev)
++{
++	harmony_t *h = dev->device_data;
++	return snd_harmony_free(h);
++}
+ 
+-	printk(KERN_INFO "Lasi Harmony Audio driver h/w id %i, rev. %i at 0x%lx, IRQ %i\n",	harmony->id, harmony->rev, pa_dev->hpa, harmony->irq);
+-	
+-	/* Make sure the control bit isn't set, although I don't think it 
+-	   ever is. */
+-	if (cntl & HARMONY_CNTL_C) {
+-		printk(KERN_WARNING PFX "CNTL busy\n");
+-		harmony->hpa = 0;
+-		return -EBUSY;
++static int __devinit
++snd_harmony_create(snd_card_t *card, 
++		   struct parisc_device *padev, 
++		   harmony_t **rchip)
++{
++	int err;
++	harmony_t *h;
++	static snd_device_ops_t ops = {
++		.dev_free = snd_harmony_dev_free,
++	};
++
++	*rchip = NULL;
++
++	h = kmalloc(sizeof(*h), GFP_KERNEL);
++	if (h == NULL)
++		return -ENOMEM;
++
++	memset(&h->st, 0, sizeof(h->st));
++	memset(&h->stats, 0, sizeof(h->stats));
++	memset(&h->pbuf, 0, sizeof(h->pbuf));
++	memset(&h->gbuf, 0, sizeof(h->gbuf));
++	memset(&h->sbuf, 0, sizeof(h->sbuf));
++
++	h->hpa = padev->hpa;
++	h->card = card;
++	h->dev = padev;
++	h->irq = padev->irq;
++	h->iobase = ioremap_nocache(padev->hpa, HARMONY_SIZE);
++	if (h->iobase == NULL) {
++		printk(KERN_ERR PFX "unable to remap hpa 0x%lx\n",
++		       padev->hpa);
++		err = -EBUSY;
++		goto free_and_ret;
+ 	}
+-	
++		
++	err = request_irq(h->irq, snd_harmony_interrupt, 0,
++			  "harmony", h);
++	if (err) {
++		printk(KERN_ERR PFX "could not obtain interrupt %d",
++		       h->irq);
++		goto free_and_ret;
++	}
++
++	spin_lock_init(&h->mixer_lock);
++	spin_lock_init(&h->lock);
++
++        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL,
++                                  h, &ops)) < 0) {
++                goto free_and_ret;
++        }
++
++	*rchip = h;
++
+ 	return 0;
++
++free_and_ret:
++	snd_harmony_free(h);
++	return err;
+ }
+-	
+-static int __init snd_card_harmony_probe(struct parisc_device *pa_dev)
++
++static int __devinit
++snd_harmony_probe(struct parisc_device *padev)
+ {
++	int err;
+ 	static int dev;
+-	snd_card_harmony_t *chip;
+ 	snd_card_t *card;
+-	int err;
+-	
+-	if (dev >= SNDRV_CARDS)
++	harmony_t *h;
++	static int index = SNDRV_DEFAULT_IDX1;
++	static char *id = SNDRV_DEFAULT_STR1;
++
++	h = parisc_get_drvdata(padev);
++	if (h != NULL) {
+ 		return -ENODEV;
+-	if (!enable[dev]) {
+-		dev++;
+-		return -ENOENT;
+ 	}
+-	
+-	snd_harmony_cards[dev] = snd_card_new(index[dev], id[dev], THIS_MODULE,
+-			    sizeof(snd_card_harmony_t));
+-	card = snd_harmony_cards[dev];
+-				
++
++	card = snd_card_new(index, id, THIS_MODULE, 0);
+ 	if (card == NULL)
+ 		return -ENOMEM;
+-	chip = (struct snd_card_harmony *)card->private_data;
+-	spin_lock_init(&chip->control_lock);
+-	spin_lock_init(&chip->mixer_lock);
+-	
+-	if ((err = snd_card_harmony_create(card, pa_dev, chip)) < 0) {
+-		printk(KERN_ERR PFX "Creation failed\n");
+-		snd_card_free(card);
+-		return err;
++
++	err = snd_harmony_create(card, padev, &h);
++	if (err < 0) {
++		goto free_and_ret;
+ 	}
+-	if ((err = snd_card_harmony_pcm_init(chip)) < 0) {
+-		printk(KERN_ERR PFX "PCM Init failed\n");
+-		snd_card_free(card);
+-		return err;
++
++	err = snd_harmony_pcm_init(h);
++	if (err < 0) {
++		goto free_and_ret;
+ 	}
+-	if ((err = snd_card_harmony_mixer_init(chip)) < 0) {
+-		printk(KERN_ERR PFX "Mixer init failed\n");
+-		snd_card_free(card);
+-		return err;
++
++	err = snd_harmony_mixer_init(h);
++	if (err < 0) {
++		goto free_and_ret;
+ 	}
+-	
+-	snd_harmony_proc_init(chip);
+-	
+-	strcpy(card->driver, "Harmony");
+-	strcpy(card->shortname, "ALSA driver for LASI Harmony");
+-	sprintf(card->longname, "%s at h/w, id %i, rev. %i hpa 0x%lx, IRQ %i\n",card->shortname, chip->id, chip->rev, pa_dev->hpa, chip->irq);
+ 
+-	if ((err = snd_card_register(card)) < 0) {
+-		snd_card_free(card);
+-		return err;
++	strcpy(card->driver, "harmony");
++	strcpy(card->shortname, "Harmony");
++	sprintf(card->longname, "%s at 0x%lx, irq %i",
++		card->shortname, h->hpa, h->irq);
++
++	err = snd_card_register(card);
++	if (err < 0) {
++		goto free_and_ret;
+ 	}
+ 
+-	printk(KERN_DEBUG PFX "Successfully registered harmony pcm backend & mixer %d\n", dev);
+ 	dev++;
+-	return 0;
+-}
++	parisc_set_drvdata(padev, h);
+ 
+-static struct parisc_device_id snd_card_harmony_devicetbl[] = {
+- { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007A }, /* Bushmaster/Flounder */
+- { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007B }, /* 712/715 Audio */
+- { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007E }, /* Pace Audio */
+- { HPHW_FIO, HVERSION_REV_ANY_ID, HVERSION_ANY_ID, 0x0007F }, /* Outfield / Coral II */
+- { 0, }
+-};
++	return 0;
+ 
+-MODULE_DEVICE_TABLE(parisc, snd_card_harmony_devicetbl);
++free_and_ret:
++	snd_card_free(card);
++	return err;
++}
+ 
+-/*
+- * bloc device parisc. c'est une structure qui definit un device
+- * que l'on trouve sur parisc. 
+- * On y trouve les differents numeros HVERSION correspondant au device
+- * en question (ce qui permet a l'inventory de l'identifier) et la fonction
+- * d'initialisation du chose 
+- */
++static int __devexit
++snd_harmony_remove(struct parisc_device *padev)
++{
++	harmony_t *h = parisc_get_drvdata(padev);
++	snd_card_free(h->card);
++	return 0;
++}
+ 
+-static struct parisc_driver snd_card_harmony_driver = {
+-	.name		= "Lasi ALSA Harmony",
+-	.id_table	= snd_card_harmony_devicetbl,
+-	.probe		= snd_card_harmony_probe,
++static struct parisc_driver snd_harmony_driver = {
++	.name = "harmony",
++	.id_table = snd_harmony_devtable,
++	.probe = snd_harmony_probe,
++	.remove = snd_harmony_remove,
+ };
+ 
+-static int __init alsa_card_harmony_init(void)
++static int __init 
++alsa_harmony_init(void)
+ {
+ 	int err;
+-	
+-	if ((err = register_parisc_driver(&snd_card_harmony_driver)) < 0) {
+-		printk(KERN_ERR "Harmony soundcard not found or device busy\n");
++
++	err = register_parisc_driver(&snd_harmony_driver);
++	if (err < 0) {
++		printk(KERN_ERR PFX "device not found\n");
+ 		return err;
+ 	}
+ 
+ 	return 0;
+ }
+ 
+-static void __exit alsa_card_harmony_exit(void)
++static void __exit
++alsa_harmony_fini(void)
+ {
+-	int idx;
+-	snd_card_harmony_t *harmony;
++	int err;
++
++	err = unregister_parisc_driver(&snd_harmony_driver);
++	if (err < 0) {
++		printk(KERN_ERR PFX "failed to unregister\n");
++	}
+ 	
+-	for (idx = 0; idx < SNDRV_CARDS; idx++)
+-	{
+-		if (snd_harmony_cards[idx] != NULL)
+-		{	
+-			DPRINTK(KERN_INFO PFX "Freeing card %d\n", idx);
+-			harmony = snd_harmony_cards[idx]->private_data;
+-			free_irq(harmony->irq, harmony);
+-			printk(KERN_INFO PFX "Card unloaded %d, irq=%d\n", idx, harmony->irq);
+-			snd_card_free(snd_harmony_cards[idx]);
+-		}
+-	}	
+-	if (unregister_parisc_driver(&snd_card_harmony_driver) < 0)
+-		printk(KERN_ERR PFX "Failed to unregister Harmony driver\n");
++	return;
+ }
+ 
+-module_init(alsa_card_harmony_init)
+-module_exit(alsa_card_harmony_exit)
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Kyle McMartin <kyle at parisc-linux.org>");
++MODULE_DESCRIPTION("Harmony sound driver");
++
++module_init(alsa_harmony_init);
++module_exit(alsa_harmony_fini);
+Index: debian-kernel-hppa-2.6.10/sound/parisc/harmony.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ debian-kernel-hppa-2.6.10/sound/parisc/harmony.h	2005-01-21 12:16:45.000000000 -0500
+@@ -0,0 +1,154 @@
++/* Hewlett-Packard Harmony audio driver
++ * Copyright (C) 2004, Kyle McMartin <kyle at parisc-linux.org>
++ */
++
++#ifndef __HARMONY_H__
++#define __HARMONY_H__
++
++struct harmony_buffer {
++        unsigned long addr;
++        int buf;
++        int count;
++        int size;
++        int coherent;
++};
++
++typedef struct snd_card_harmony {
++        int irq;
++
++        unsigned long hpa; /* hard physical address */
++        void __iomem *iobase; /* remapped io address */
++
++        struct parisc_device *dev;
++
++        struct {
++                u32 gain;
++                u32 rate;
++                u32 format;
++                u32 stereo;
++		int playing;
++		int capturing;
++        } st;
++
++        struct snd_dma_device dma; /* playback/capture */
++        struct harmony_buffer pbuf;
++	struct harmony_buffer cbuf;
++
++        struct snd_dma_buffer gdma; /* graveyard */
++        struct harmony_buffer gbuf;
++
++        struct snd_dma_buffer sdma; /* silence */
++        struct harmony_buffer sbuf;
++
++        struct {
++                unsigned long play_intr;
++	        unsigned long rec_intr;
++                unsigned long graveyard_intr;
++                unsigned long silence_intr;
++        } stats;
++
++        snd_pcm_t *pcm;
++        snd_card_t *card;
++        snd_pcm_substream_t *psubs;
++	snd_pcm_substream_t *csubs;
++        snd_info_entry_t *proc;
++
++        spinlock_t lock;
++        spinlock_t mixer_lock;
++} harmony_t;
++
++#define MAX_PCM_DEVICES     1
++#define MAX_PCM_SUBSTREAMS  4
++#define MAX_MIDI_DEVICES    0
++
++#define HARMONY_SIZE       64
++
++#define BUF_SIZE     PAGE_SIZE
++#define MAX_BUFS     10
++#define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE)
++
++#define PLAYBACK_BUFS    MAX_BUFS
++#define RECORD_BUFS      MAX_BUFS
++#define GRAVEYARD_BUFS   1
++#define GRAVEYARD_BUFSZ  (GRAVEYARD_BUFS*BUF_SIZE)
++#define SILENCE_BUFS     1
++#define SILENCE_BUFSZ    (SILENCE_BUFS*BUF_SIZE)
++
++#define HARMONY_ID       0x000
++#define HARMONY_RESET    0x004
++#define HARMONY_CNTL     0x008
++#define HARMONY_GAINCTL  0x00c
++#define HARMONY_PNXTADD  0x010
++#define HARMONY_PCURADD  0x014
++#define HARMONY_RNXTADD  0x018
++#define HARMONY_RCURADD  0x01c
++#define HARMONY_DSTATUS  0x020
++#define HARMONY_OV       0x024
++#define HARMONY_PIO      0x028
++#define HARMONY_DIAG     0x03c
++
++#define HARMONY_CNTL_C          0x80000000
++#define HARMONY_CNTL_ST         0x00000020
++#define HARMONY_CNTL_44100      0x00000015      /* HARMONY_SR_44KHZ */
++#define HARMONY_CNTL_8000       0x00000008      /* HARMONY_SR_8KHZ */
++
++#define HARMONY_DSTATUS_ID      0x00000000 /* interrupts off */
++#define HARMONY_DSTATUS_PN      0x00000200 /* playback fill */
++#define HARMONY_DSTATUS_RN      0x00000002 /* record fill */
++#define HARMONY_DSTATUS_IE      0x80000000 /* interrupts on */
++
++#define HARMONY_DF_16BIT_LINEAR 0x00000000
++#define HARMONY_DF_8BIT_ULAW    0x00000001
++#define HARMONY_DF_8BIT_ALAW    0x00000002
++
++#define HARMONY_SS_MONO         0x00000000
++#define HARMONY_SS_STEREO       0x00000001
++
++#define HARMONY_GAIN_SILENCE    0x00F00FFF
++#define HARMONY_GAIN_DEFAULT    0x0FF00000
++
++#define HARMONY_GAIN_HE_SHIFT   27
++#define HARMONY_GAIN_HE_MASK    (1 << HARMONY_GAIN_HE_SHIFT)
++#define HARMONY_GAIN_LE_SHIFT   26
++#define HARMONY_GAIN_LE_MASK    (1 << HARMONY_GAIN_LE_SHIFT)
++#define HARMONY_GAIN_SE_SHIFT   25
++#define HARMONY_GAIN_SE_MASK    (1 << HARMONY_GAIN_SE_SHIFT)
++#define HARMONY_GAIN_IS_SHIFT   24
++#define HARMONY_GAIN_IS_MASK    (1 << HARMONY_GAIN_IS_SHIFT)
++
++#define HARMONY_GAIN_MA         0x0f
++#define HARMONY_GAIN_MA_SHIFT   20
++#define HARMONY_GAIN_MA_MASK    (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT)
++
++#define HARMONY_GAIN_IN         0x0f
++#define HARMONY_GAIN_LI_SHIFT   16
++#define HARMONY_GAIN_LI_MASK    (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT)
++#define HARMONY_GAIN_RI_SHIFT   12
++#define HARMONY_GAIN_RI_MASK    (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT)
++
++#define HARMONY_GAIN_OUT        0x3f
++#define HARMONY_GAIN_LO_SHIFT   6
++#define HARMONY_GAIN_LO_MASK    (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT)
++#define HARMONY_GAIN_RO_SHIFT   0
++#define HARMONY_GAIN_RO_MASK    (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT)
++
++#define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT)
++#define HARMONY_MAX_IN  (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT)
++#define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT)
++
++#define HARMONY_SR_8KHZ         0x08
++#define HARMONY_SR_16KHZ        0x09
++#define HARMONY_SR_27KHZ        0x0A
++#define HARMONY_SR_32KHZ        0x0B
++#define HARMONY_SR_48KHZ        0x0E
++#define HARMONY_SR_9KHZ         0x0F
++#define HARMONY_SR_5KHZ         0x10
++#define HARMONY_SR_11KHZ        0x11
++#define HARMONY_SR_18KHZ        0x12
++#define HARMONY_SR_22KHZ        0x13
++#define HARMONY_SR_37KHZ        0x14
++#define HARMONY_SR_44KHZ        0x15
++#define HARMONY_SR_33KHZ        0x16
++#define HARMONY_SR_6KHZ         0x17
++
++#endif /* __HARMONY_H__ */




More information about the Kernel-svn-changes mailing list