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(®ion->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 = ¤t->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