Merge to Fedora kernel-2.6.6-1.422
authorMark Huang <mlhuang@cs.princeton.edu>
Tue, 8 Jun 2004 21:23:02 +0000 (21:23 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Tue, 8 Jun 2004 21:23:02 +0000 (21:23 +0000)
421 files changed:
.config [deleted file]
.config.cmd [deleted file]
.config.old [deleted file]
Documentation/SubmittingPatches
Documentation/fb/vesafb.txt
Documentation/filesystems/ntfs.txt
Makefile
arch/arm/kernel/irq.c
arch/arm/mach-integrator/core.c
arch/arm/mm/init.c
arch/cris/Kconfig
arch/cris/Makefile
arch/cris/arch-v10/boot/compressed/misc.c
arch/cris/arch-v10/defconfig
arch/cris/arch-v10/drivers/Kconfig
arch/cris/arch-v10/drivers/Makefile
arch/cris/arch-v10/drivers/axisflashmap.c
arch/cris/arch-v10/drivers/ds1302.c
arch/cris/arch-v10/drivers/eeprom.c
arch/cris/arch-v10/drivers/ethernet.c
arch/cris/arch-v10/drivers/gpio.c
arch/cris/arch-v10/drivers/i2c.c
arch/cris/arch-v10/drivers/i2c.h
arch/cris/arch-v10/drivers/pcf8563.c
arch/cris/arch-v10/drivers/serial.c
arch/cris/arch-v10/drivers/serial.h
arch/cris/arch-v10/kernel/debugport.c
arch/cris/arch-v10/kernel/entry.S
arch/cris/arch-v10/kernel/fasttimer.c
arch/cris/arch-v10/kernel/head.S
arch/cris/arch-v10/kernel/process.c
arch/cris/arch-v10/kernel/ptrace.c
arch/cris/arch-v10/kernel/setup.c
arch/cris/arch-v10/kernel/signal.c
arch/cris/arch-v10/kernel/time.c
arch/cris/arch-v10/lib/dram_init.S
arch/cris/arch-v10/lib/old_checksum.c
arch/cris/arch-v10/mm/fault.c
arch/cris/arch-v10/mm/tlb.c
arch/cris/defconfig
arch/cris/kernel/Makefile
arch/cris/kernel/hexify.c [deleted file]
arch/cris/kernel/irq.c
arch/cris/kernel/ksyms.c [deleted file]
arch/cris/kernel/module.c
arch/cris/kernel/process.c
arch/cris/kernel/setup.c
arch/cris/kernel/sys_cris.c
arch/cris/kernel/time.c
arch/cris/kernel/traps.c
arch/cris/mm/fault.c
arch/cris/mm/init.c
arch/cris/mm/ioremap.c
arch/i386/kernel/acpi/wakeup.S
arch/i386/kernel/asm-offsets.c
arch/i386/kernel/cpu/cpufreq/gx-suspmod.c
arch/i386/kernel/cpu/cpufreq/longhaul.c
arch/i386/kernel/cpu/cpufreq/p4-clockmod.c
arch/i386/kernel/cpu/cpufreq/powernow-k7.c
arch/i386/kernel/cpu/cpufreq/powernow-k8.c
arch/i386/kernel/cpu/proc.c
arch/i386/kernel/head.S
arch/i386/kernel/module.c
arch/i386/kernel/scx200.c
arch/i386/lib/getuser.S
arch/i386/mm/fault.c
arch/i386/mm/highmem.c
arch/i386/mm/init.c
arch/ppc64/configs/iSeries_defconfig
arch/ppc64/kernel/asm-offsets.c
arch/ppc64/kernel/eeh.c
arch/ppc64/kernel/head.S
arch/ppc64/kernel/iSeries_setup.c
arch/ppc64/kernel/pacaData.c
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/stab.c
arch/ppc64/xmon/xmon.c
arch/sparc64/kernel/binfmt_aout32.c
arch/sparc64/kernel/entry.S
arch/sparc64/kernel/process.c
arch/sparc64/kernel/signal32.c
arch/sparc64/kernel/sunos_ioctl32.c
arch/sparc64/kernel/sys32.S
arch/sparc64/kernel/sys_sparc.c
arch/sparc64/kernel/sys_sparc32.c
arch/sparc64/kernel/sys_sunos32.c
arch/sparc64/kernel/systbls.S
arch/um/defconfig
arch/x86_64/ia32/fpu32.c
arch/x86_64/ia32/ia32_ioctl.c
arch/x86_64/ia32/ia32_signal.c
arch/x86_64/ia32/ia32entry.S
arch/x86_64/ia32/ptrace32.c
arch/x86_64/ia32/sys_ia32.c
arch/x86_64/ia32/syscall32.c
arch/x86_64/ia32/tls32.c
arch/x86_64/kernel/Makefile-HEAD [deleted file]
arch/x86_64/kernel/acpi/sleep.c
arch/x86_64/kernel/head.S
arch/x86_64/kernel/head64.c
arch/x86_64/kernel/i387.c
arch/x86_64/kernel/irq.c
arch/x86_64/kernel/ldt.c
arch/x86_64/kernel/mce.c
arch/x86_64/kernel/module.c
arch/x86_64/kernel/mpparse.c
arch/x86_64/kernel/msr.c
arch/x86_64/kernel/process.c
arch/x86_64/kernel/ptrace.c
arch/x86_64/kernel/setup.c
arch/x86_64/kernel/setup64.c
arch/x86_64/kernel/signal.c
arch/x86_64/kernel/smpboot.c
arch/x86_64/kernel/sys_x86_64.c
arch/x86_64/kernel/vmlinux.lds.S
arch/x86_64/kernel/x8664_ksyms.c
arch/x86_64/lib/Makefile
arch/x86_64/lib/csum-wrappers.c
arch/x86_64/lib/io.c
arch/x86_64/lib/usercopy.c
arch/x86_64/mm/init.c
arch/x86_64/mm/pageattr.c
configs/kernel-2.6.6-i586-smp.config
configs/kernel-2.6.6-i586.config
configs/kernel-2.6.6-i686-smp.config
configs/kernel-2.6.6-i686.config
drivers/atm/fore200e.h
drivers/block/cpqarray.c
drivers/char/agp/amd-k7-agp.c
drivers/char/agp/amd64-agp.c
drivers/char/agp/ati-agp.c
drivers/char/agp/backend.c
drivers/char/agp/intel-agp.c
drivers/char/agp/intel-mch-agp.c
drivers/char/agp/nvidia-agp.c
drivers/char/agp/sis-agp.c
drivers/char/agp/sworks-agp.c
drivers/char/agp/via-agp.c
drivers/char/watchdog/scx200_wdt.c
drivers/char/watchdog/w83627hf_wdt.c
drivers/fc4/fc.c
drivers/i2c/busses/scx200_acb.c
drivers/ide/Kconfig
drivers/ide/ide-disk.c
drivers/ide/ide-probe.c
drivers/ide/pci/aec62xx.c
drivers/ide/pci/aec62xx.h
drivers/ide/pci/alim15x3.h
drivers/ide/pci/amd74xx.c
drivers/ide/pci/amd74xx.h [deleted file]
drivers/ide/pci/atiixp.c
drivers/ide/pci/cmd64x.c
drivers/ide/pci/cmd64x.h
drivers/ide/pci/cs5520.h
drivers/ide/pci/cs5530.c
drivers/ide/pci/cs5530.h
drivers/ide/pci/cy82c693.h
drivers/ide/pci/generic.c
drivers/ide/pci/generic.h
drivers/ide/pci/hpt34x.h
drivers/ide/pci/hpt366.c
drivers/ide/pci/hpt366.h
drivers/ide/pci/it8172.c
drivers/ide/pci/it8172.h
drivers/ide/pci/ns87415.c
drivers/ide/pci/ns87415.h
drivers/ide/pci/opti621.c
drivers/ide/pci/opti621.h
drivers/ide/pci/pdc202xx_new.c
drivers/ide/pci/pdc202xx_new.h
drivers/ide/pci/pdc202xx_old.c
drivers/ide/pci/pdc202xx_old.h
drivers/ide/pci/piix.c
drivers/ide/pci/piix.h
drivers/ide/pci/rz1000.c
drivers/ide/pci/rz1000.h
drivers/ide/pci/sc1200.c
drivers/ide/pci/sc1200.h
drivers/ide/pci/serverworks.c
drivers/ide/pci/serverworks.h
drivers/ide/pci/sgiioc4.c
drivers/ide/pci/siimage.c
drivers/ide/pci/siimage.h
drivers/ide/pci/sis5513.c
drivers/ide/pci/sis5513.h
drivers/ide/pci/sl82c105.c
drivers/ide/pci/sl82c105.h
drivers/ide/pci/slc90e66.c
drivers/ide/pci/slc90e66.h
drivers/ide/pci/triflex.c
drivers/ide/pci/triflex.h
drivers/ide/pci/trm290.c
drivers/ide/pci/trm290.h
drivers/ide/pci/via82cxxx.c
drivers/ide/pci/via82cxxx.h
drivers/ide/setup-pci.c
drivers/md/md.c
drivers/net/Kconfig
drivers/net/iseries_veth.c
drivers/net/plip.c
drivers/net/ppp_async.c
drivers/net/ppp_synctty.c
drivers/net/wan/Makefile
drivers/net/wan/c101.c
drivers/net/wan/hdlc_cisco.c
drivers/net/wan/hdlc_fr.c
drivers/net/wan/hdlc_generic.c
drivers/net/wan/wanxlfw.inc [deleted file]
drivers/net/wireless/prism54/isl_38xx.c
drivers/net/wireless/prism54/isl_38xx.h
drivers/net/wireless/prism54/isl_ioctl.c
drivers/net/wireless/prism54/isl_ioctl.h
drivers/net/wireless/prism54/isl_oid.h
drivers/net/wireless/prism54/islpci_dev.c
drivers/net/wireless/prism54/islpci_dev.h
drivers/net/wireless/prism54/islpci_eth.c
drivers/net/wireless/prism54/islpci_eth.h
drivers/net/wireless/prism54/islpci_hotplug.c
drivers/net/wireless/prism54/islpci_mgt.c
drivers/net/wireless/prism54/islpci_mgt.h
drivers/net/wireless/prism54/oid_mgt.c
drivers/net/wireless/prism54/oid_mgt.h
drivers/pnp/pnpbios/Kconfig
drivers/scsi/esp.c
drivers/scsi/esp.h
drivers/scsi/libata-scsi.c
drivers/scsi/qlogicpti.c
drivers/scsi/qlogicpti.h
drivers/scsi/sata_promise.c
drivers/video/aty/radeon_accel.c
drivers/video/aty/radeon_pm.c
drivers/video/vesafb.c
fs/aio.c
fs/binfmt_elf.c
fs/compat.c
fs/dcache.c
fs/direct-io.c
fs/fs-writeback.c
fs/hugetlbfs/inode.c
fs/inode.c
fs/nfsd/vfs.c
fs/ntfs/ChangeLog
fs/ntfs/Makefile
fs/ntfs/aops.c
fs/ntfs/compress.c
fs/ntfs/dir.c
fs/ntfs/inode.c
fs/ntfs/inode.h
fs/ntfs/ntfs.h
fs/ntfs/super.c
include/asm-alpha/ide.h
include/asm-alpha/resource.h
include/asm-arm/arch-pxa/hardware.h
include/asm-arm/ide.h
include/asm-arm/resource.h
include/asm-arm26/ide.h
include/asm-arm26/resource.h
include/asm-cris/arch-v10/cache.h
include/asm-cris/arch-v10/irq.h
include/asm-cris/arch-v10/offset.h
include/asm-cris/bitops.h
include/asm-cris/dma-mapping.h
include/asm-cris/fasttimer.h
include/asm-cris/io.h
include/asm-cris/ioctl.h
include/asm-cris/page.h
include/asm-cris/pci.h
include/asm-cris/pgtable.h
include/asm-cris/ptrace.h
include/asm-cris/resource.h
include/asm-cris/rtc.h
include/asm-cris/semaphore-helper.h
include/asm-cris/semaphore.h
include/asm-cris/termbits.h
include/asm-cris/types.h
include/asm-cris/unistd.h
include/asm-h8300/ide.h
include/asm-h8300/resource.h
include/asm-i386/bitops.h
include/asm-i386/cpufeature.h
include/asm-i386/highmem.h
include/asm-i386/ide.h
include/asm-i386/kmap_types.h
include/asm-i386/msr.h
include/asm-i386/page.h
include/asm-i386/pgtable-3level.h
include/asm-i386/pgtable.h
include/asm-i386/processor.h
include/asm-i386/resource.h
include/asm-i386/uaccess.h
include/asm-ia64/ide.h
include/asm-ia64/resource.h
include/asm-m68k/ide.h
include/asm-m68k/resource.h
include/asm-mips/mach-generic/ide.h
include/asm-parisc/ide.h
include/asm-parisc/resource.h
include/asm-ppc/ide.h
include/asm-ppc/resource.h
include/asm-ppc64/eeh.h
include/asm-ppc64/ide.h
include/asm-ppc64/mmu_context.h
include/asm-ppc64/naca.h
include/asm-ppc64/processor.h
include/asm-ppc64/resource.h
include/asm-ppc64/uaccess.h
include/asm-s390/resource.h
include/asm-s390/types.h
include/asm-sh/ide.h
include/asm-sh/resource.h
include/asm-sparc/ide.h
include/asm-sparc/resource.h
include/asm-sparc/sbus.h
include/asm-sparc/uaccess.h
include/asm-sparc64/ide.h
include/asm-sparc64/resource.h
include/asm-sparc64/sbus.h
include/asm-sparc64/uaccess.h
include/asm-sparc64/unistd.h
include/asm-v850/resource.h
include/asm-x86_64/bitops.h
include/asm-x86_64/checksum.h
include/asm-x86_64/compat.h
include/asm-x86_64/floppy.h
include/asm-x86_64/fpu32.h
include/asm-x86_64/i387.h
include/asm-x86_64/ia32.h
include/asm-x86_64/ia32_unistd.h
include/asm-x86_64/io.h
include/asm-x86_64/page.h
include/asm-x86_64/pgtable.h
include/asm-x86_64/processor.h
include/asm-x86_64/ptrace.h
include/asm-x86_64/resource.h
include/asm-x86_64/semaphore.h
include/asm-x86_64/sigcontext.h
include/asm-x86_64/uaccess.h
include/linux/aio.h
include/linux/autoconf.h [deleted file]
include/linux/compiler.h
include/linux/elf.h
include/linux/futex.h
include/linux/hdlc.h
include/linux/highmem.h
include/linux/ide.h
include/linux/mca.h
include/linux/mm.h
include/linux/pci_ids.h
include/linux/timer.h
include/linux/vmalloc.h
include/net/ip.h
include/net/ip6_fib.h
include/net/ipv6.h
include/net/route.h
include/net/snmp.h
init/Kconfig
ipc/shm.c
ipc/util.c
kernel/compat.c
kernel/exit.c
kernel/futex.c
kernel/kthread.c
kernel/sched.c
kernel/signal.c
kernel/sys.c
mm/memory.c
mm/mlock.c
mm/mmap.c
mm/mprotect.c
mm/mremap.c
mm/pdflush.c
mm/shmem.c
mm/slab.c
mm/vmalloc.c
mm/vmscan.c
net/ipv4/af_inet.c
net/ipv4/ip_forward.c
net/ipv4/ip_fragment.c
net/ipv4/ip_input.c
net/ipv4/ip_output.c
net/ipv4/ipcomp.c
net/ipv4/ipmr.c
net/ipv4/proc.c
net/ipv4/raw.c
net/ipv4/route.c
net/ipv4/tcp_ipv4.c
net/ipv6/af_inet6.c
net/ipv6/exthdrs.c
net/ipv6/icmp.c
net/ipv6/ip6_input.c
net/ipv6/ip6_output.c
net/ipv6/ipv6_sockglue.c
net/ipv6/mcast.c
net/ipv6/ndisc.c
net/ipv6/proc.c
net/ipv6/raw.c
net/ipv6/reassembly.c
net/ipv6/route.c
net/sctp/output.c
net/xfrm/xfrm_state.c
scripts/basic/.docproc.cmd [deleted file]
scripts/basic/.fixdep.cmd [deleted file]
scripts/basic/.split-include.cmd [deleted file]
scripts/basic/docproc [deleted file]
scripts/basic/fixdep [deleted file]
scripts/basic/split-include [deleted file]
scripts/kconfig/.conf.cmd [deleted file]
scripts/kconfig/.conf.o.cmd [deleted file]
scripts/kconfig/.libkconfig.so.cmd [deleted file]
scripts/kconfig/.mconf.o.cmd [deleted file]
scripts/kconfig/.zconf.tab.o.cmd [deleted file]
scripts/kconfig/conf [deleted file]
scripts/kconfig/conf.o [deleted file]
scripts/kconfig/lex.zconf.c [deleted file]
scripts/kconfig/libkconfig.so [deleted file]
scripts/kconfig/mconf.o [deleted file]
scripts/kconfig/zconf.tab.c [deleted file]
scripts/kconfig/zconf.tab.h [deleted file]
scripts/kconfig/zconf.tab.o [deleted file]
security/selinux/Kconfig
security/selinux/hooks.c

diff --git a/.config b/.config
deleted file mode 100644 (file)
index 323a7fa..0000000
--- a/.config
+++ /dev/null
@@ -1,2360 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_GENERIC_ISA_DMA=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_STANDALONE=y
-
-#
-# General setup
-#
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=17
-CONFIG_HOTPLUG=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL 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=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
-
-#
-# Processor type and features
-#
-# CONFIG_X86_PC is not set
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-CONFIG_X86_GENERICARCH=y
-# CONFIG_X86_ES7000 is not set
-CONFIG_X86_CYCLONE_TIMER=y
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-CONFIG_M686=y
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_4G=y
-CONFIG_X86_SWITCH_PAGETABLES=y
-CONFIG_X86_4G_VM_LAYOUT=y
-CONFIG_X86_UACCESS_INDIRECT=y
-CONFIG_X86_HIGH_ENTRY=y
-CONFIG_HPET_TIMER=y
-CONFIG_HPET_EMULATE_RTC=y
-CONFIG_SMP=y
-CONFIG_NR_CPUS=32
-CONFIG_SCHED_SMT=y
-# CONFIG_PREEMPT is not set
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_TSC=y
-CONFIG_X86_MCE=y
-# CONFIG_X86_MCE_NONFATAL is not set
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_TOSHIBA=m
-CONFIG_I8K=m
-CONFIG_MICROCODE=m
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-
-#
-# Firmware Drivers
-#
-CONFIG_EDD=m
-# CONFIG_NOHIGHMEM is not set
-# CONFIG_HIGHMEM4G is not set
-CONFIG_HIGHMEM64G=y
-CONFIG_HIGHMEM=y
-CONFIG_X86_PAE=y
-# CONFIG_NUMA is not set
-CONFIG_HIGHPTE=y
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-# CONFIG_IRQBALANCE is not set
-CONFIG_HAVE_DEC_LOCK=y
-CONFIG_REGPARM=y
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-# CONFIG_SOFTWARE_SUSPEND is not set
-# CONFIG_PM_DISK is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
-CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_SLEEP_PROC_FS=y
-CONFIG_ACPI_AC=m
-CONFIG_ACPI_BATTERY=m
-CONFIG_ACPI_BUTTON=m
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_ASUS=m
-CONFIG_ACPI_TOSHIBA=m
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-CONFIG_APM=y
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-# CONFIG_APM_DO_ENABLE is not set
-CONFIG_APM_CPU_IDLE=y
-# CONFIG_APM_DISPLAY_BLANK is not set
-CONFIG_APM_RTC_IS_GMT=y
-# CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-# CONFIG_CPU_FREQ_PROC_INTF is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_24_API is not set
-CONFIG_CPU_FREQ_TABLE=y
-
-#
-# CPUFreq processor drivers
-#
-CONFIG_X86_ACPI_CPUFREQ=m
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
-CONFIG_X86_POWERNOW_K6=m
-CONFIG_X86_POWERNOW_K7=y
-CONFIG_X86_POWERNOW_K8=m
-# CONFIG_X86_GX_SUSPMOD is not set
-CONFIG_X86_SPEEDSTEP_CENTRINO=y
-CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
-CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI=y
-CONFIG_X86_SPEEDSTEP_ICH=y
-CONFIG_X86_SPEEDSTEP_SMI=m
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_X86_SPEEDSTEP_LIB=y
-# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
-CONFIG_X86_LONGRUN=y
-# CONFIG_X86_LONGHAUL is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCI_USE_VECTOR=y
-CONFIG_PCI_LEGACY_PROC=y
-# CONFIG_PCI_NAMES is not set
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_YENTA=m
-CONFIG_CARDBUS=y
-CONFIG_I82092=m
-CONFIG_I82365=m
-CONFIG_TCIC=m
-CONFIG_PCMCIA_PROBE=y
-
-#
-# PCI Hotplug Support
-#
-CONFIG_HOTPLUG_PCI=y
-# CONFIG_HOTPLUG_PCI_FAKE is not set
-CONFIG_HOTPLUG_PCI_COMPAQ=m
-# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-CONFIG_HOTPLUG_PCI_IBM=m
-# CONFIG_HOTPLUG_PCI_ACPI is not set
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-CONFIG_HOTPLUG_PCI_PCIE=m
-CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE=y
-CONFIG_HOTPLUG_PCI_SHPC=m
-CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE=y
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=m
-CONFIG_MTD_CONCAT=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_CMDLINE_PARTS=m
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_RAM=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PNC2000 is not set
-CONFIG_MTD_SC520CDP=m
-CONFIG_MTD_NETSC520=m
-CONFIG_MTD_SBC_GXX=m
-CONFIG_MTD_ELAN_104NC=m
-CONFIG_MTD_SCx200_DOCFLASH=m
-CONFIG_MTD_AMD76XROM=m
-CONFIG_MTD_ICH2ROM=m
-CONFIG_MTD_SCB2_FLASH=m
-# CONFIG_MTD_NETtel is not set
-# CONFIG_MTD_DILNETPC is not set
-CONFIG_MTD_L440GX=m
-CONFIG_MTD_PCI=m
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_PMC551=m
-# CONFIG_MTD_PMC551_BUGFIX is not set
-# CONFIG_MTD_PMC551_DEBUG is not set
-# CONFIG_MTD_SLRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-# CONFIG_MTD_BLKMTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-CONFIG_MTD_DOC2000=m
-# CONFIG_MTD_DOC2001 is not set
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-CONFIG_PARPORT_SERIAL=m
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_OTHER is not set
-CONFIG_PARPORT_1284=y
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-CONFIG_ISAPNP=y
-# CONFIG_PNPBIOS is not set
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=m
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-CONFIG_BLK_CPQ_DA=m
-CONFIG_BLK_CPQ_CISS_DA=m
-CONFIG_CISS_SCSI_TAPE=y
-CONFIG_BLK_DEV_DAC960=m
-CONFIG_BLK_DEV_UMEM=m
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_CARMEL=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=16384
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_LBD=y
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-# CONFIG_IDEDISK_STROKE is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=y
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_TASKFILE_IO is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_BLK_DEV_CMD640 is not set
-CONFIG_BLK_DEV_IDEPNP=y
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-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_ADMA=y
-CONFIG_BLK_DEV_AEC62XX=y
-CONFIG_BLK_DEV_ALI15X3=y
-# CONFIG_WDC_ALI15X3 is not set
-CONFIG_BLK_DEV_AMD74XX=y
-CONFIG_BLK_DEV_ATIIXP=y
-CONFIG_BLK_DEV_CMD64X=y
-CONFIG_BLK_DEV_TRIFLEX=y
-CONFIG_BLK_DEV_CY82C693=y
-CONFIG_BLK_DEV_CS5520=y
-CONFIG_BLK_DEV_CS5530=y
-CONFIG_BLK_DEV_HPT34X=y
-# CONFIG_HPT34X_AUTODMA is not set
-CONFIG_BLK_DEV_HPT366=y
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_NS87415 is not set
-CONFIG_BLK_DEV_PDC202XX_OLD=y
-# CONFIG_PDC202XX_BURST is not set
-CONFIG_BLK_DEV_PDC202XX_NEW=y
-CONFIG_PDC202XX_FORCE=y
-CONFIG_BLK_DEV_SVWKS=y
-CONFIG_BLK_DEV_SIIMAGE=y
-CONFIG_BLK_DEV_SIS5513=y
-CONFIG_BLK_DEV_SLC90E66=y
-# CONFIG_BLK_DEV_TRM290 is not set
-CONFIG_BLK_DEV_VIA82CXXX=y
-# 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=m
-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=y
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-
-#
-# SCSI low-level drivers
-#
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-# CONFIG_SCSI_7000FASST is not set
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AHA152X=m
-CONFIG_SCSI_AHA1542=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=4
-CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_AIC7XXX_DEBUG_MASK=0
-# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
-CONFIG_SCSI_AIC7XXX_OLD=m
-CONFIG_SCSI_AIC79XX=m
-CONFIG_AIC79XX_CMDS_PER_DEVICE=4
-CONFIG_AIC79XX_RESET_DELAY_MS=15000
-# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
-# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_AIC79XX_DEBUG_MASK=0
-# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
-# CONFIG_SCSI_DPT_I2O is not set
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_IN2000=m
-CONFIG_SCSI_MEGARAID=m
-CONFIG_SCSI_SATA=y
-CONFIG_SCSI_SATA_SVW=m
-CONFIG_SCSI_ATA_PIIX=m
-CONFIG_SCSI_SATA_PROMISE=m
-CONFIG_SCSI_SATA_SX4=m
-CONFIG_SCSI_SATA_SIL=m
-CONFIG_SCSI_SATA_SIS=m
-CONFIG_SCSI_SATA_VIA=m
-CONFIG_SCSI_SATA_VITESSE=m
-CONFIG_SCSI_BUSLOGIC=m
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
-# CONFIG_SCSI_CPQFCTS 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=m
-CONFIG_SCSI_GDTH=m
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-# CONFIG_SCSI_NCR53C406A is not set
-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_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-CONFIG_SCSI_QLOGIC_FAS=m
-CONFIG_SCSI_QLOGIC_ISP=m
-# CONFIG_SCSI_QLOGIC_FC is not set
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA2XXX=m
-CONFIG_SCSI_QLA21XX=m
-CONFIG_SCSI_QLA22XX=m
-CONFIG_SCSI_QLA2300=m
-CONFIG_SCSI_QLA2322=m
-CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_QLA6322=m
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-CONFIG_SCSI_DC390T=m
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR 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=y
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-
-#
-# Fusion MPT device support
-#
-CONFIG_FUSION=m
-CONFIG_FUSION_MAX_SGE=40
-# CONFIG_FUSION_ISENSE is not set
-CONFIG_FUSION_CTL=m
-CONFIG_FUSION_LAN=m
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-CONFIG_IEEE1394_OUI_DB=y
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-
-#
-# Device Drivers
-#
-# CONFIG_IEEE1394_PCILYNX is not set
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
-CONFIG_IEEE1394_CMP=m
-CONFIG_IEEE1394_AMDTP=m
-
-#
-# 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=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_NAT=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_TOS=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-
-#
-# IP: Virtual Server Configuration
-#
-CONFIG_IP_VS=m
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_TAB_BITS=12
-
-#
-# IPVS transport protocol load balancing support
-#
-CONFIG_IP_VS_PROTO_TCP=y
-CONFIG_IP_VS_PROTO_UDP=y
-CONFIG_IP_VS_PROTO_ESP=y
-CONFIG_IP_VS_PROTO_AH=y
-
-#
-# IPVS scheduler
-#
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_WRR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_NQ=m
-
-#
-# IPVS application helper
-#
-CONFIG_IP_VS_FTP=m
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=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_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=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=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_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=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
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-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_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=y
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
-# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# CONFIG_LLC2 is not set
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-CONFIG_DEV_APPLETALK=y
-CONFIG_LTPC=m
-CONFIG_COPS=m
-CONFIG_COPS_DAYNA=y
-CONFIG_COPS_TANGENT=y
-CONFIG_IPDDP=m
-CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-CONFIG_NET_DIVERT=y
-# CONFIG_ECONET is not set
-CONFIG_WAN_ROUTER=m
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_CSZ=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_DELAY=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_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_POLICE=y
-
-#
-# 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=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-CONFIG_DONGLE=y
-CONFIG_ESI_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
-CONFIG_TEKRAM_DONGLE=m
-CONFIG_LITELINK_DONGLE=m
-CONFIG_MA600_DONGLE=m
-CONFIG_GIRBIL_DONGLE=m
-CONFIG_MCP2120_DONGLE=m
-CONFIG_OLD_BELKIN_DONGLE=m
-CONFIG_ACT200L_DONGLE=m
-
-#
-# Old SIR device drivers
-#
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-CONFIG_SIGMATEL_FIR=m
-CONFIG_NSC_FIR=m
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-# CONFIG_VIA_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_CMTP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_BCSP_TXCRC=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_TUX=m
-
-#
-# TUX options
-#
-CONFIG_TUX_EXTCGI=y
-# CONFIG_TUX_EXTENDED_LOG is not set
-# CONFIG_TUX_DEBUG is not set
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
-CONFIG_ETHERTAP=m
-CONFIG_NET_SB1000=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=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=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-CONFIG_NET_VENDOR_RACAL=y
-CONFIG_NI52=m
-CONFIG_NI65=m
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-# CONFIG_TULIP_MWI is not set
-CONFIG_TULIP_MMIO=y
-# CONFIG_TULIP_NAPI is not set
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_PCMCIA_XIRCOM=m
-# CONFIG_AT1700 is not set
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-# CONFIG_NET_ISA is not set
-CONFIG_NE2000=m
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-# CONFIG_EEPRO100_PIO is not set
-CONFIG_E100=m
-CONFIG_E100_NAPI=y
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-CONFIG_8139TOO_8129=y
-# 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=y
-CONFIG_NET_POCKET=y
-CONFIG_ATP=m
-CONFIG_DE600=m
-CONFIG_DE620=m
-
-#
-# Gigabit Ethernet (1000/10000 Mbit)
-#
-CONFIG_NET_GIGE=y
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_SK98LIN=m
-CONFIG_TIGON3=m
-CONFIG_IXGB=m
-CONFIG_IXGB_NAPI=y
-CONFIG_S2IO=m
-CONFIG_S2IO_NAPI=y
-
-#
-# 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=m
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_AIRO=m
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=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=y
-# CONFIG_DEFXX is not set
-CONFIG_SKFP=m
-# 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 is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-CONFIG_NET_FC=y
-# CONFIG_SHAPER is not set
-CONFIG_NETCONSOLE=m
-
-#
-# ISDN subsystem
-#
-CONFIG_ISDN=m
-
-#
-# Old ISDN4Linux
-#
-CONFIG_ISDN_I4L=m
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_IPPP_FILTER=y
-# CONFIG_ISDN_PPP_BSDCOMP is not set
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-
-#
-# ISDN feature submodules
-#
-
-#
-# ISDN4Linux hardware drivers
-#
-
-#
-# Passive cards
-#
-CONFIG_ISDN_DRV_HISAX=m
-
-#
-# D-channel protocol features
-#
-CONFIG_HISAX_EURO=y
-CONFIG_DE_AOC=y
-CONFIG_HISAX_NO_SENDCOMPLETE=y
-CONFIG_HISAX_NO_LLC=y
-CONFIG_HISAX_NO_KEYPAD=y
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_MAX_CARDS=8
-
-#
-# HiSax supported cards
-#
-CONFIG_HISAX_16_0=y
-CONFIG_HISAX_16_3=y
-CONFIG_HISAX_TELESPCI=y
-CONFIG_HISAX_S0BOX=y
-CONFIG_HISAX_AVM_A1=y
-CONFIG_HISAX_FRITZPCI=y
-CONFIG_HISAX_AVM_A1_PCMCIA=y
-CONFIG_HISAX_ELSA=y
-CONFIG_HISAX_IX1MICROR2=y
-CONFIG_HISAX_DIEHLDIVA=y
-CONFIG_HISAX_ASUSCOM=y
-CONFIG_HISAX_TELEINT=y
-CONFIG_HISAX_HFCS=y
-CONFIG_HISAX_SEDLBAUER=y
-CONFIG_HISAX_SPORTSTER=y
-CONFIG_HISAX_MIC=y
-CONFIG_HISAX_NETJET=y
-CONFIG_HISAX_NETJET_U=y
-CONFIG_HISAX_NICCY=y
-CONFIG_HISAX_ISURF=y
-CONFIG_HISAX_HSTSAPHIR=y
-CONFIG_HISAX_BKM_A4T=y
-CONFIG_HISAX_SCT_QUADRO=y
-CONFIG_HISAX_GAZEL=y
-CONFIG_HISAX_HFC_PCI=y
-CONFIG_HISAX_W6692=y
-CONFIG_HISAX_HFC_SX=y
-CONFIG_HISAX_ENTERNOW_PCI=y
-# CONFIG_HISAX_DEBUG is not set
-
-#
-# HiSax PCMCIA card service modules
-#
-CONFIG_HISAX_SEDLBAUER_CS=m
-CONFIG_HISAX_ELSA_CS=m
-CONFIG_HISAX_AVM_A1_CS=m
-CONFIG_HISAX_TELES_CS=m
-
-#
-# HiSax sub driver modules
-#
-CONFIG_HISAX_ST5481=m
-CONFIG_HISAX_HFCUSB=m
-CONFIG_HISAX_FRITZ_PCIPNP=m
-CONFIG_HISAX_HDLC=y
-
-#
-# Active cards
-#
-CONFIG_ISDN_DRV_ICN=m
-CONFIG_ISDN_DRV_PCBIT=m
-CONFIG_ISDN_DRV_SC=m
-CONFIG_ISDN_DRV_ACT2000=m
-CONFIG_ISDN_DRV_TPAM=m
-
-#
-# CAPI subsystem
-#
-CONFIG_ISDN_CAPI=m
-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
-CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
-CONFIG_ISDN_CAPI_CAPIFS=m
-CONFIG_ISDN_CAPI_CAPIDRV=m
-
-#
-# CAPI hardware drivers
-#
-
-#
-# Active AVM cards
-#
-CONFIG_CAPI_AVM=y
-
-#
-# Active Eicon DIVA Server cards
-#
-CONFIG_CAPI_EICON=y
-CONFIG_ISDN_DIVAS=m
-CONFIG_ISDN_DIVAS_BRIPCI=y
-CONFIG_ISDN_DIVAS_PRIPCI=y
-CONFIG_ISDN_DIVAS_DIVACAPI=m
-CONFIG_ISDN_DIVAS_USERIDI=m
-CONFIG_ISDN_DIVAS_MAINT=m
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input I/O drivers
-#
-CONFIG_GAMEPORT=m
-CONFIG_SOUND_GAMEPORT=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_VORTEX=m
-CONFIG_GAMEPORT_FM801=m
-CONFIG_GAMEPORT_CS461x=m
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# 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_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_INPORT=m
-CONFIG_MOUSE_ATIXL=y
-CONFIG_MOUSE_LOGIBM=m
-CONFIG_MOUSE_PC110PAD=m
-CONFIG_MOUSE_VSXXXAA=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=y
-CONFIG_JOYSTICK_IFORCE_232=y
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDDLER=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-# CONFIG_INPUT_JOYDUMP is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_PCSPKR=m
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_ROCKETPORT=m
-# CONFIG_CYCLADES is not set
-CONFIG_SYNCLINK=m
-CONFIG_SYNCLINKMP=m
-CONFIG_N_HDLC=m
-CONFIG_STALDRV=y
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_CS=m
-# CONFIG_SERIAL_8250_ACPI is not set
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_EXTENDED=y
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_DETECT_IRQ=y
-CONFIG_SERIAL_8250_MULTIPORT=y
-CONFIG_SERIAL_8250_RSA=y
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_CRASH=m
-CONFIG_PRINTER=m
-CONFIG_LP_CONSOLE=y
-CONFIG_PPDEV=m
-CONFIG_TIPAR=m
-# CONFIG_QIC02_TAPE is not set
-
-#
-# IPMI
-#
-CONFIG_IPMI_HANDLER=m
-# CONFIG_IPMI_PANIC_EVENT is not set
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SI=m
-CONFIG_IPMI_WATCHDOG=m
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_SC520_WDT=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_WAFER_WDT=m
-CONFIG_I8XX_TCO=m
-CONFIG_SC1200_WDT=m
-# CONFIG_SCx200_WDT is not set
-# CONFIG_60XX_WDT is not set
-CONFIG_CPU5_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_MACHZ_WDT=m
-
-#
-# ISA-based Watchdog Cards
-#
-CONFIG_PCWATCHDOG=m
-# CONFIG_MIXCOMWD is not set
-CONFIG_WDT=m
-# CONFIG_WDT_501 is not set
-
-#
-# PCI-based Watchdog Cards
-#
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-CONFIG_WDT_501_PCI=y
-
-#
-# USB-based Watchdog Cards
-#
-CONFIG_USBPCWATCHDOG=m
-CONFIG_HW_RANDOM=m
-CONFIG_NVRAM=m
-CONFIG_RTC=y
-CONFIG_DTLK=m
-CONFIG_R3964=m
-# CONFIG_APPLICOM is not set
-CONFIG_SONYPI=m
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-CONFIG_AGP_ALI=y
-CONFIG_AGP_ATI=y
-CONFIG_AGP_AMD=y
-CONFIG_AGP_AMD64=y
-CONFIG_AGP_INTEL=y
-CONFIG_AGP_INTEL_MCH=y
-CONFIG_AGP_NVIDIA=y
-CONFIG_AGP_SIS=y
-CONFIG_AGP_SWORKS=y
-CONFIG_AGP_VIA=y
-CONFIG_AGP_EFFICEON=y
-CONFIG_DRM=y
-CONFIG_DRM_TDFX=m
-CONFIG_DRM_GAMMA=m
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_I810=m
-CONFIG_DRM_I830=m
-CONFIG_DRM_MGA=m
-CONFIG_DRM_SIS=m
-
-#
-# PCMCIA character devices
-#
-CONFIG_SYNCLINK_CS=m
-CONFIG_MWAVE=m
-# CONFIG_RAW_DRIVER is not set
-CONFIG_HANGCHECK_TIMER=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-CONFIG_I2C_CHARDEV=m
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=m
-CONFIG_I2C_ALGOPCF=m
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_I810=m
-CONFIG_I2C_ISA=m
-CONFIG_I2C_NFORCE2=m
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_PROSAVAGE=m
-CONFIG_I2C_SAVAGE4=m
-# CONFIG_SCx200_ACB is not set
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_VOODOO3=m
-
-#
-# Hardware Sensors Chip support
-#
-CONFIG_I2C_SENSOR=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_FSCHER=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83627HF=m
-
-#
-# Other I2C Chip support
-#
-CONFIG_SENSORS_EEPROM=m
-CONFIG_SENSORS_PCF8574=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-CONFIG_IBM_ASM=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-CONFIG_VIDEO_BT848=m
-CONFIG_VIDEO_PMS=m
-CONFIG_VIDEO_BWQCAM=m
-CONFIG_VIDEO_CQCAM=m
-CONFIG_VIDEO_W9966=m
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_PP=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-
-#
-# Radio Adapters
-#
-CONFIG_RADIO_CADET=m
-CONFIG_RADIO_RTRACK=m
-CONFIG_RADIO_RTRACK2=m
-CONFIG_RADIO_AZTECH=m
-CONFIG_RADIO_GEMTEK=m
-CONFIG_RADIO_GEMTEK_PCI=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_MAESTRO=m
-CONFIG_RADIO_SF16FMI=m
-CONFIG_RADIO_SF16FMR2=m
-CONFIG_RADIO_TERRATEC=m
-CONFIG_RADIO_TRUST=m
-CONFIG_RADIO_TYPHOON=m
-CONFIG_RADIO_TYPHOON_PROC_FS=y
-CONFIG_RADIO_ZOLTRIX=m
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-# 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_VGA16=m
-CONFIG_FB_VESA=y
-CONFIG_VIDEO_SELECT=y
-CONFIG_FB_HGA=m
-CONFIG_FB_HGA_ACCEL=y
-CONFIG_FB_RIVA=m
-CONFIG_FB_I810=m
-CONFIG_FB_I810_GTF=y
-CONFIG_FB_MATROX=m
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G450=y
-CONFIG_FB_MATROX_G100=y
-CONFIG_FB_MATROX_I2C=m
-CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_MATROX_MULTIHEAD=y
-# CONFIG_FB_RADEON_OLD is not set
-CONFIG_FB_RADEON=m
-CONFIG_FB_RADEON_I2C=y
-# CONFIG_FB_RADEON_DEBUG is not set
-CONFIG_FB_ATY128=m
-CONFIG_FB_ATY=m
-CONFIG_FB_ATY_CT=y
-CONFIG_FB_ATY_GX=y
-# CONFIG_FB_ATY_XL_INIT is not set
-# CONFIG_FB_SIS is not set
-CONFIG_FB_NEOMAGIC=m
-CONFIG_FB_KYRO=m
-CONFIG_FB_3DFX=m
-CONFIG_FB_3DFX_ACCEL=y
-CONFIG_FB_VOODOO1=m
-CONFIG_FB_TRIDENT=m
-CONFIG_FB_TRIDENT_ACCEL=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-CONFIG_MDA_CONSOLE=m
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_PCI_CONSOLE=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_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=m
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_SEQUENCER_OSS=y
-CONFIG_SND_RTCTIMER=m
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_MPU401_UART=m
-CONFIG_SND_OPL3_LIB=m
-CONFIG_SND_OPL4_LIB=m
-CONFIG_SND_VX_LIB=m
-CONFIG_SND_DUMMY=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-# CONFIG_SND_SERIAL_U16550 is not set
-CONFIG_SND_MPU401=m
-
-#
-# ISA devices
-#
-CONFIG_SND_AD1816A=m
-CONFIG_SND_AD1848=m
-CONFIG_SND_CS4231=m
-CONFIG_SND_CS4232=m
-CONFIG_SND_CS4236=m
-CONFIG_SND_ES968=m
-CONFIG_SND_ES1688=m
-CONFIG_SND_ES18XX=m
-CONFIG_SND_GUSCLASSIC=m
-CONFIG_SND_GUSEXTREME=m
-CONFIG_SND_GUSMAX=m
-CONFIG_SND_INTERWAVE=m
-CONFIG_SND_INTERWAVE_STB=m
-CONFIG_SND_OPTI92X_AD1848=m
-CONFIG_SND_OPTI92X_CS4231=m
-CONFIG_SND_OPTI93X=m
-CONFIG_SND_SB8=m
-CONFIG_SND_SB16=m
-CONFIG_SND_SBAWE=m
-CONFIG_SND_SB16_CSP=y
-# CONFIG_SND_WAVEFRONT is not set
-CONFIG_SND_ALS100=m
-CONFIG_SND_AZT2320=m
-CONFIG_SND_CMI8330=m
-CONFIG_SND_DT019X=m
-CONFIG_SND_OPL3SA2=m
-CONFIG_SND_SGALAXY=m
-CONFIG_SND_SSCAPE=m
-
-#
-# PCI devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CS46XX_NEW_DSP=y
-CONFIG_SND_CS4281=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_HDSP=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_YMFPCI=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VX222=m
-
-#
-# ALSA USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_VXP440 is not set
-CONFIG_SND_PDAUDIOCF=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=m
-CONFIG_USB_EHCI_SPLIT_ISO=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_UHCI_HCD=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_AUDIO=m
-
-#
-# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
-#
-CONFIG_USB_MIDI=m
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_HP8200e=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-CONFIG_HID_FF=y
-CONFIG_HID_PID=y
-CONFIG_LOGITECH_FF=y
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-CONFIG_USB_EGALAX=m
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_HPUSBSCSI=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_W9968CF=m
-
-#
-# USB Network adaptors
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-
-#
-# USB Host-to-Host Cables
-#
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_GENESYS=y
-CONFIG_USB_NET1080=y
-CONFIG_USB_PL2301=y
-
-#
-# Intelligent USB Devices/Gadgets
-#
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_ZAURUS=y
-CONFIG_USB_CDCETHER=y
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_AX8817X=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_USS720=m
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-# CONFIG_USB_EMI26 is not set
-CONFIG_USB_TIGL=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYTHERM is not set
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_TEST=m
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET 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=y
-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=y
-CONFIG_XFS_SECURITY=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_MINIX_FS=m
-CONFIG_ROMFS_FS=m
-CONFIG_QUOTA=y
-# CONFIG_QFMT_V1 is not set
-CONFIG_QFMT_V2=y
-CONFIG_QUOTACTL=y
-CONFIG_AUTOFS_FS=m
-CONFIG_AUTOFS4_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=y
-CONFIG_UDF_FS=m
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS_XATTR=y
-CONFIG_DEVPTS_FS_SECURITY=y
-CONFIG_TMPFS=y
-CONFIG_HUGETLBFS=y
-CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-CONFIG_AFFS_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_BEFS_FS=m
-# CONFIG_BEFS_DEBUG is not set
-CONFIG_BFS_FS=m
-CONFIG_EFS_FS=m
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_NAND=y
-CONFIG_CRAMFS=m
-CONFIG_VXFS_FS=m
-# CONFIG_HPFS_FS is not set
-CONFIG_QNX4FS_FS=m
-# CONFIG_QNX4FS_RW is not set
-CONFIG_SYSV_FS=m
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-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_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_NCP_FS=m
-CONFIG_NCPFS_PACKET_SIGNING=y
-CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCPFS_STRONG=y
-CONFIG_NCPFS_NFS_NS=y
-CONFIG_NCPFS_OS2_NS=y
-CONFIG_NCPFS_SMALLDOS=y
-CONFIG_NCPFS_NLS=y
-CONFIG_NCPFS_EXTRAS=y
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-CONFIG_OSF_PARTITION=y
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_MAC_PARTITION=y
-CONFIG_MSDOS_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_NEC98_PARTITION is not set
-CONFIG_SGI_PARTITION=y
-# CONFIG_ULTRIX_PARTITION is not set
-CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-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_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_EARLY_PRINTK=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_SPINLOCK_SLEEP=y
-# CONFIG_FRAME_POINTER is not set
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-
-#
-# Linux VServer
-#
-CONFIG_VSERVER_LEGACY=y
-CONFIG_PROC_SECURE=y
-# CONFIG_VSERVER_HARDCPU is not set
-# CONFIG_INOXID_NONE is not set
-# CONFIG_INOXID_GID16 is not set
-CONFIG_INOXID_GID24=y
-# CONFIG_INOXID_GID32 is not set
-# CONFIG_INOXID_MAGIC is not set
-
-#
-# Security options
-#
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-CONFIG_SECURITY_CAPABILITIES=y
-# CONFIG_SECURITY_ROOTPLUG is not set
-CONFIG_SECURITY_SELINUX=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
-CONFIG_SECURITY_SELINUX_DISABLE=y
-CONFIG_SECURITY_SELINUX_DEVELOP=y
-# CONFIG_SECURITY_SELINUX_MLS 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_DES=m
-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_ARC4=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Library routines
-#
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_X86_STD_RESOURCES=y
-CONFIG_PC=y
diff --git a/.config.cmd b/.config.cmd
deleted file mode 100644 (file)
index d5aa219..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-deps_config := \
-       lib/Kconfig \
-       crypto/Kconfig \
-       security/selinux/Kconfig \
-       security/Kconfig \
-       kernel/vserver/Kconfig \
-       arch/i386/oprofile/Kconfig \
-       fs/nls/Kconfig \
-       fs/partitions/Kconfig \
-       fs/ncpfs/Kconfig \
-       fs/Kconfig \
-       drivers/usb/gadget/Kconfig \
-       drivers/usb/misc/Kconfig \
-       drivers/usb/serial/Kconfig \
-       drivers/usb/net/Kconfig \
-       drivers/usb/media/Kconfig \
-       drivers/usb/image/Kconfig \
-       drivers/usb/input/Kconfig \
-       drivers/usb/storage/Kconfig \
-       drivers/usb/class/Kconfig \
-       drivers/usb/host/Kconfig \
-       drivers/usb/core/Kconfig \
-       drivers/usb/Kconfig \
-       sound/oss/Kconfig \
-       sound/parisc/Kconfig \
-       sound/sparc/Kconfig \
-       sound/pcmcia/Kconfig \
-       sound/usb/Kconfig \
-       sound/arm/Kconfig \
-       sound/ppc/Kconfig \
-       sound/pci/Kconfig \
-       sound/isa/Kconfig \
-       sound/drivers/Kconfig \
-       sound/core/Kconfig \
-       sound/oss/dmasound/Kconfig \
-       sound/Kconfig \
-       drivers/video/logo/Kconfig \
-       drivers/video/console/Kconfig \
-       drivers/video/Kconfig \
-       drivers/media/common/Kconfig \
-       drivers/media/dvb/bt8xx/Kconfig \
-       drivers/media/dvb/b2c2/Kconfig \
-       drivers/media/dvb/ttusb-dec/Kconfig \
-       drivers/media/dvb/ttusb-budget/Kconfig \
-       drivers/media/dvb/ttpci/Kconfig \
-       drivers/media/dvb/frontends/Kconfig \
-       drivers/media/dvb/dvb-core/Kconfig \
-       drivers/media/dvb/Kconfig \
-       drivers/media/radio/Kconfig \
-       drivers/media/video/Kconfig \
-       drivers/media/Kconfig \
-       drivers/misc/Kconfig \
-       drivers/i2c/chips/Kconfig \
-       drivers/i2c/busses/Kconfig \
-       drivers/i2c/algos/Kconfig \
-       drivers/i2c/Kconfig \
-       drivers/char/pcmcia/Kconfig \
-       drivers/char/drm/Kconfig \
-       drivers/char/agp/Kconfig \
-       drivers/char/ftape/Kconfig \
-       drivers/char/watchdog/Kconfig \
-       drivers/char/ipmi/Kconfig \
-       drivers/serial/Kconfig \
-       drivers/char/Kconfig \
-       drivers/input/misc/Kconfig \
-       drivers/input/touchscreen/Kconfig \
-       drivers/input/joystick/iforce/Kconfig \
-       drivers/input/joystick/Kconfig \
-       drivers/input/mouse/Kconfig \
-       drivers/input/keyboard/Kconfig \
-       drivers/input/serio/Kconfig \
-       drivers/input/gameport/Kconfig \
-       drivers/input/Kconfig \
-       drivers/telephony/Kconfig \
-       drivers/isdn/hardware/eicon/Kconfig \
-       drivers/isdn/hardware/avm/Kconfig \
-       drivers/isdn/hardware/Kconfig \
-       drivers/isdn/capi/Kconfig \
-       drivers/isdn/hysdn/Kconfig \
-       drivers/isdn/tpam/Kconfig \
-       drivers/isdn/act2000/Kconfig \
-       drivers/isdn/sc/Kconfig \
-       drivers/isdn/pcbit/Kconfig \
-       drivers/isdn/icn/Kconfig \
-       drivers/isdn/hisax/Kconfig \
-       drivers/isdn/i4l/Kconfig \
-       drivers/isdn/Kconfig \
-       drivers/s390/net/Kconfig \
-       drivers/atm/Kconfig \
-       drivers/net/wan/Kconfig \
-       drivers/net/pcmcia/Kconfig \
-       drivers/net/wireless/Kconfig \
-       drivers/net/tokenring/Kconfig \
-       drivers/net/tulip/Kconfig \
-       drivers/net/arm/Kconfig \
-       drivers/net/arcnet/Kconfig \
-       drivers/net/Kconfig \
-       net/tux/Kconfig \
-       drivers/bluetooth/Kconfig \
-       net/bluetooth/cmtp/Kconfig \
-       net/bluetooth/bnep/Kconfig \
-       net/bluetooth/rfcomm/Kconfig \
-       net/bluetooth/Kconfig \
-       drivers/net/irda/Kconfig \
-       net/irda/ircomm/Kconfig \
-       net/irda/irnet/Kconfig \
-       net/irda/irlan/Kconfig \
-       net/irda/Kconfig \
-       drivers/net/hamradio/Kconfig \
-       net/ax25/Kconfig \
-       net/sched/Kconfig \
-       drivers/net/appletalk/Kconfig \
-       net/ipx/Kconfig \
-       net/llc/Kconfig \
-       net/decnet/Kconfig \
-       net/sctp/Kconfig \
-       net/xfrm/Kconfig \
-       net/bridge/netfilter/Kconfig \
-       net/decnet/netfilter/Kconfig \
-       net/ipv6/netfilter/Kconfig \
-       net/ipv4/netfilter/Kconfig \
-       net/ipv6/Kconfig \
-       net/ipv4/ipvs/Kconfig \
-       net/ipv4/Kconfig \
-       net/Kconfig \
-       drivers/macintosh/Kconfig \
-       drivers/message/i2o/Kconfig \
-       drivers/ieee1394/Kconfig \
-       drivers/message/fusion/Kconfig \
-       drivers/md/Kconfig \
-       drivers/cdrom/Kconfig \
-       drivers/scsi/pcmcia/Kconfig \
-       drivers/scsi/arm/Kconfig \
-       drivers/scsi/qla2xxx/Kconfig \
-       drivers/scsi/aic7xxx/Kconfig.aic79xx \
-       drivers/scsi/aic7xxx/Kconfig.aic7xxx \
-       drivers/scsi/Kconfig \
-       drivers/ide/Kconfig \
-       drivers/s390/block/Kconfig \
-       drivers/block/paride/Kconfig \
-       drivers/block/Kconfig \
-       drivers/pnp/pnpbios/Kconfig \
-       drivers/pnp/isapnp/Kconfig \
-       drivers/pnp/Kconfig \
-       drivers/parport/Kconfig \
-       drivers/mtd/nand/Kconfig \
-       drivers/mtd/devices/Kconfig \
-       drivers/mtd/maps/Kconfig \
-       drivers/mtd/chips/Kconfig \
-       drivers/mtd/Kconfig \
-       drivers/base/Kconfig \
-       drivers/Kconfig \
-       fs/Kconfig.binfmt \
-       drivers/pci/hotplug/Kconfig \
-       drivers/pcmcia/Kconfig \
-       drivers/mca/Kconfig \
-       drivers/eisa/Kconfig \
-       drivers/pci/Kconfig \
-       drivers/cpufreq/Kconfig \
-       arch/i386/kernel/cpu/cpufreq/Kconfig \
-       drivers/acpi/Kconfig \
-       kernel/power/Kconfig \
-       drivers/firmware/Kconfig \
-       drivers/block/Kconfig.iosched \
-       init/Kconfig \
-       arch/i386/Kconfig
-
-.config include/linux/autoconf.h: $(deps_config)
-
-$(deps_config):
diff --git a/.config.old b/.config.old
deleted file mode 100644 (file)
index de7e3e7..0000000
+++ /dev/null
@@ -1,2348 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_GENERIC_ISA_DMA=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_STANDALONE=y
-
-#
-# General setup
-#
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=17
-CONFIG_HOTPLUG=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL 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=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
-
-#
-# Processor type and features
-#
-# CONFIG_X86_PC is not set
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-CONFIG_X86_GENERICARCH=y
-# CONFIG_X86_ES7000 is not set
-CONFIG_X86_CYCLONE_TIMER=y
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-CONFIG_M686=y
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_4G=y
-CONFIG_X86_SWITCH_PAGETABLES=y
-CONFIG_X86_4G_VM_LAYOUT=y
-CONFIG_X86_UACCESS_INDIRECT=y
-CONFIG_X86_HIGH_ENTRY=y
-CONFIG_HPET_TIMER=y
-CONFIG_HPET_EMULATE_RTC=y
-CONFIG_SMP=y
-CONFIG_NR_CPUS=32
-CONFIG_SCHED_SMT=y
-# CONFIG_PREEMPT is not set
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_TSC=y
-CONFIG_X86_MCE=y
-# CONFIG_X86_MCE_NONFATAL is not set
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_TOSHIBA=m
-CONFIG_I8K=m
-CONFIG_MICROCODE=m
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-
-#
-# Firmware Drivers
-#
-CONFIG_EDD=m
-# CONFIG_NOHIGHMEM is not set
-# CONFIG_HIGHMEM4G is not set
-CONFIG_HIGHMEM64G=y
-CONFIG_HIGHMEM=y
-CONFIG_X86_PAE=y
-# CONFIG_NUMA is not set
-CONFIG_HIGHPTE=y
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-# CONFIG_IRQBALANCE is not set
-CONFIG_HAVE_DEC_LOCK=y
-CONFIG_REGPARM=y
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-# CONFIG_SOFTWARE_SUSPEND is not set
-# CONFIG_PM_DISK is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_BOOT=y
-CONFIG_ACPI_INTERPRETER=y
-CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_SLEEP_PROC_FS=y
-CONFIG_ACPI_AC=m
-CONFIG_ACPI_BATTERY=m
-CONFIG_ACPI_BUTTON=m
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_ASUS=m
-CONFIG_ACPI_TOSHIBA=m
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_BUS=y
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_PCI=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-CONFIG_APM=y
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-# CONFIG_APM_DO_ENABLE is not set
-CONFIG_APM_CPU_IDLE=y
-# CONFIG_APM_DISPLAY_BLANK is not set
-CONFIG_APM_RTC_IS_GMT=y
-# CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-# CONFIG_CPU_FREQ_PROC_INTF is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_24_API is not set
-CONFIG_CPU_FREQ_TABLE=y
-
-#
-# CPUFreq processor drivers
-#
-CONFIG_X86_ACPI_CPUFREQ=m
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
-CONFIG_X86_POWERNOW_K6=m
-CONFIG_X86_POWERNOW_K7=y
-CONFIG_X86_POWERNOW_K8=m
-# CONFIG_X86_GX_SUSPMOD is not set
-CONFIG_X86_SPEEDSTEP_CENTRINO=y
-CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
-CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI=y
-CONFIG_X86_SPEEDSTEP_ICH=y
-CONFIG_X86_SPEEDSTEP_SMI=m
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_X86_SPEEDSTEP_LIB=y
-# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
-CONFIG_X86_LONGRUN=y
-# CONFIG_X86_LONGHAUL is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCI_USE_VECTOR=y
-CONFIG_PCI_LEGACY_PROC=y
-# CONFIG_PCI_NAMES is not set
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCMCIA/CardBus support
-#
-CONFIG_PCMCIA=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_YENTA=m
-CONFIG_CARDBUS=y
-CONFIG_I82092=m
-CONFIG_I82365=m
-CONFIG_TCIC=m
-CONFIG_PCMCIA_PROBE=y
-
-#
-# PCI Hotplug Support
-#
-CONFIG_HOTPLUG_PCI=y
-# CONFIG_HOTPLUG_PCI_FAKE is not set
-CONFIG_HOTPLUG_PCI_COMPAQ=m
-# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-CONFIG_HOTPLUG_PCI_IBM=m
-# CONFIG_HOTPLUG_PCI_ACPI is not set
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-CONFIG_HOTPLUG_PCI_PCIE=m
-CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE=y
-CONFIG_HOTPLUG_PCI_SHPC=m
-CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE=y
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=m
-CONFIG_MTD_CONCAT=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_CMDLINE_PARTS=m
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_RAM=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PNC2000 is not set
-CONFIG_MTD_SC520CDP=m
-CONFIG_MTD_NETSC520=m
-CONFIG_MTD_SBC_GXX=m
-CONFIG_MTD_ELAN_104NC=m
-CONFIG_MTD_SCx200_DOCFLASH=m
-CONFIG_MTD_AMD76XROM=m
-CONFIG_MTD_ICH2ROM=m
-CONFIG_MTD_SCB2_FLASH=m
-# CONFIG_MTD_NETtel is not set
-# CONFIG_MTD_DILNETPC is not set
-CONFIG_MTD_L440GX=m
-CONFIG_MTD_PCI=m
-
-#
-# Self-contained MTD device drivers
-#
-CONFIG_MTD_PMC551=m
-# CONFIG_MTD_PMC551_BUGFIX is not set
-# CONFIG_MTD_PMC551_DEBUG is not set
-# CONFIG_MTD_SLRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-# CONFIG_MTD_BLKMTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-CONFIG_MTD_DOC2000=m
-# CONFIG_MTD_DOC2001 is not set
-CONFIG_MTD_DOC2001PLUS=m
-CONFIG_MTD_DOCPROBE=m
-# CONFIG_MTD_DOCPROBE_ADVANCED is not set
-CONFIG_MTD_DOCPROBE_ADDRESS=0
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-CONFIG_MTD_NAND_IDS=m
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_PC_CML1=m
-CONFIG_PARPORT_SERIAL=m
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-CONFIG_PARPORT_PC_PCMCIA=m
-# CONFIG_PARPORT_OTHER is not set
-CONFIG_PARPORT_1284=y
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-CONFIG_ISAPNP=y
-# CONFIG_PNPBIOS is not set
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=m
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-CONFIG_BLK_CPQ_DA=m
-CONFIG_BLK_CPQ_CISS_DA=m
-CONFIG_CISS_SCSI_TAPE=y
-CONFIG_BLK_DEV_DAC960=m
-CONFIG_BLK_DEV_UMEM=m
-CONFIG_BLK_DEV_LOOP=m
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_CARMEL=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=16384
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_LBD=y
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-# CONFIG_IDEDISK_STROKE is not set
-CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=y
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IDE_TASKFILE_IO is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_BLK_DEV_CMD640 is not set
-CONFIG_BLK_DEV_IDEPNP=y
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-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_ADMA=y
-CONFIG_BLK_DEV_AEC62XX=y
-CONFIG_BLK_DEV_ALI15X3=y
-# CONFIG_WDC_ALI15X3 is not set
-CONFIG_BLK_DEV_AMD74XX=y
-CONFIG_BLK_DEV_ATIIXP=y
-CONFIG_BLK_DEV_CMD64X=y
-CONFIG_BLK_DEV_TRIFLEX=y
-CONFIG_BLK_DEV_CY82C693=y
-CONFIG_BLK_DEV_CS5520=y
-CONFIG_BLK_DEV_CS5530=y
-CONFIG_BLK_DEV_HPT34X=y
-# CONFIG_HPT34X_AUTODMA is not set
-CONFIG_BLK_DEV_HPT366=y
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_NS87415 is not set
-CONFIG_BLK_DEV_PDC202XX_OLD=y
-# CONFIG_PDC202XX_BURST is not set
-CONFIG_BLK_DEV_PDC202XX_NEW=y
-CONFIG_PDC202XX_FORCE=y
-CONFIG_BLK_DEV_SVWKS=y
-CONFIG_BLK_DEV_SIIMAGE=y
-CONFIG_BLK_DEV_SIS5513=y
-CONFIG_BLK_DEV_SLC90E66=y
-# CONFIG_BLK_DEV_TRM290 is not set
-CONFIG_BLK_DEV_VIA82CXXX=y
-# 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=m
-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=y
-CONFIG_CHR_DEV_SG=m
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-
-#
-# SCSI low-level drivers
-#
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-# CONFIG_SCSI_7000FASST is not set
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AHA152X=m
-CONFIG_SCSI_AHA1542=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=4
-CONFIG_AIC7XXX_RESET_DELAY_MS=15000
-# CONFIG_AIC7XXX_BUILD_FIRMWARE is not set
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_AIC7XXX_DEBUG_MASK=0
-# CONFIG_AIC7XXX_REG_PRETTY_PRINT is not set
-CONFIG_SCSI_AIC7XXX_OLD=m
-CONFIG_SCSI_AIC79XX=m
-CONFIG_AIC79XX_CMDS_PER_DEVICE=4
-CONFIG_AIC79XX_RESET_DELAY_MS=15000
-# CONFIG_AIC79XX_BUILD_FIRMWARE is not set
-# CONFIG_AIC79XX_ENABLE_RD_STRM is not set
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_AIC79XX_DEBUG_MASK=0
-# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
-# CONFIG_SCSI_DPT_I2O is not set
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_IN2000=m
-CONFIG_SCSI_MEGARAID=m
-CONFIG_SCSI_SATA=y
-CONFIG_SCSI_SATA_SVW=m
-CONFIG_SCSI_ATA_PIIX=m
-CONFIG_SCSI_SATA_PROMISE=m
-CONFIG_SCSI_SATA_SX4=m
-CONFIG_SCSI_SATA_SIL=m
-CONFIG_SCSI_SATA_SIS=m
-CONFIG_SCSI_SATA_VIA=m
-CONFIG_SCSI_SATA_VITESSE=m
-CONFIG_SCSI_BUSLOGIC=m
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
-# CONFIG_SCSI_CPQFCTS 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=m
-CONFIG_SCSI_GDTH=m
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-# CONFIG_SCSI_NCR53C406A is not set
-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_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-CONFIG_SCSI_QLOGIC_FAS=m
-CONFIG_SCSI_QLOGIC_ISP=m
-# CONFIG_SCSI_QLOGIC_FC is not set
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA2XXX=m
-CONFIG_SCSI_QLA21XX=m
-CONFIG_SCSI_QLA22XX=m
-CONFIG_SCSI_QLA2300=m
-CONFIG_SCSI_QLA2322=m
-CONFIG_SCSI_QLA6312=m
-CONFIG_SCSI_QLA6322=m
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-CONFIG_SCSI_DC390T=m
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR 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=y
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_RAID1=m
-CONFIG_MD_RAID5=m
-CONFIG_MD_RAID6=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-
-#
-# Fusion MPT device support
-#
-CONFIG_FUSION=m
-CONFIG_FUSION_MAX_SGE=40
-# CONFIG_FUSION_ISENSE is not set
-CONFIG_FUSION_CTL=m
-CONFIG_FUSION_LAN=m
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-CONFIG_IEEE1394_OUI_DB=y
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-
-#
-# Device Drivers
-#
-# CONFIG_IEEE1394_PCILYNX is not set
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
-CONFIG_IEEE1394_CMP=m
-CONFIG_IEEE1394_AMDTP=m
-
-#
-# 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=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_NAT=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_TOS=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-
-#
-# IP: Virtual Server Configuration
-#
-CONFIG_IP_VS=m
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_TAB_BITS=12
-
-#
-# IPVS transport protocol load balancing support
-#
-CONFIG_IP_VS_PROTO_TCP=y
-CONFIG_IP_VS_PROTO_UDP=y
-CONFIG_IP_VS_PROTO_ESP=y
-CONFIG_IP_VS_PROTO_AH=y
-
-#
-# IPVS scheduler
-#
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_WRR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_NQ=m
-
-#
-# IPVS application helper
-#
-CONFIG_IP_VS_FTP=m
-CONFIG_IPV6=m
-CONFIG_IPV6_PRIVACY=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=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_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=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=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_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_TARGET_TCPMSS=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
-
-#
-# IPv6: Netfilter Configuration
-#
-# CONFIG_IP6_NF_QUEUE is not set
-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_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=y
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
-# CONFIG_SCTP_DBG_OBJCNT is not set
-# CONFIG_SCTP_HMAC_NONE is not set
-# CONFIG_SCTP_HMAC_SHA1 is not set
-CONFIG_SCTP_HMAC_MD5=y
-# CONFIG_ATM is not set
-CONFIG_BRIDGE=m
-CONFIG_VLAN_8021Q=m
-# CONFIG_DECNET is not set
-CONFIG_LLC=m
-# CONFIG_LLC2 is not set
-CONFIG_IPX=m
-# CONFIG_IPX_INTERN is not set
-CONFIG_ATALK=m
-CONFIG_DEV_APPLETALK=y
-CONFIG_LTPC=m
-CONFIG_COPS=m
-CONFIG_COPS_DAYNA=y
-CONFIG_COPS_TANGENT=y
-CONFIG_IPDDP=m
-CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-CONFIG_NET_DIVERT=y
-# CONFIG_ECONET is not set
-CONFIG_WAN_ROUTER=m
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_CSZ=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_DELAY=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_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_POLICE=y
-
-#
-# 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=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-CONFIG_DONGLE=y
-CONFIG_ESI_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
-CONFIG_TEKRAM_DONGLE=m
-CONFIG_LITELINK_DONGLE=m
-CONFIG_MA600_DONGLE=m
-CONFIG_GIRBIL_DONGLE=m
-CONFIG_MCP2120_DONGLE=m
-CONFIG_OLD_BELKIN_DONGLE=m
-CONFIG_ACT200L_DONGLE=m
-
-#
-# Old SIR device drivers
-#
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-CONFIG_SIGMATEL_FIR=m
-CONFIG_NSC_FIR=m
-# CONFIG_WINBOND_FIR is not set
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-# CONFIG_ALI_FIR is not set
-# CONFIG_VLSI_FIR is not set
-# CONFIG_VIA_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_CMTP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_BCSP_TXCRC=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_TUX=m
-
-#
-# TUX options
-#
-CONFIG_TUX_EXTCGI=y
-# CONFIG_TUX_EXTENDED_LOG is not set
-# CONFIG_TUX_DEBUG is not set
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
-CONFIG_ETHERTAP=m
-CONFIG_NET_SB1000=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=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=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-CONFIG_NET_VENDOR_RACAL=y
-CONFIG_NI52=m
-CONFIG_NI65=m
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-# CONFIG_TULIP_MWI is not set
-CONFIG_TULIP_MMIO=y
-# CONFIG_TULIP_NAPI is not set
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_PCMCIA_XIRCOM=m
-# CONFIG_AT1700 is not set
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-# CONFIG_NET_ISA is not set
-CONFIG_NE2000=m
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-# CONFIG_EEPRO100_PIO is not set
-CONFIG_E100=m
-CONFIG_E100_NAPI=y
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-CONFIG_8139TOO_8129=y
-# 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=y
-CONFIG_NET_POCKET=y
-CONFIG_ATP=m
-CONFIG_DE600=m
-CONFIG_DE620=m
-
-#
-# Gigabit Ethernet (1000/10000 Mbit)
-#
-CONFIG_NET_GIGE=y
-CONFIG_ACENIC=m
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_SK98LIN=m
-CONFIG_TIGON3=m
-CONFIG_IXGB=m
-CONFIG_IXGB_NAPI=y
-CONFIG_S2IO=m
-CONFIG_S2IO_NAPI=y
-
-#
-# 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=m
-CONFIG_PCMCIA_WAVELAN=m
-CONFIG_PCMCIA_NETWAVE=m
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_AIRO=m
-CONFIG_HERMES=m
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=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=y
-# CONFIG_DEFXX is not set
-CONFIG_SKFP=m
-# 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 is not set
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-CONFIG_NET_FC=y
-# CONFIG_SHAPER is not set
-CONFIG_NETCONSOLE=m
-
-#
-# ISDN subsystem
-#
-CONFIG_ISDN=m
-
-#
-# Old ISDN4Linux
-#
-CONFIG_ISDN_I4L=m
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_IPPP_FILTER=y
-# CONFIG_ISDN_PPP_BSDCOMP is not set
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-
-#
-# ISDN feature submodules
-#
-
-#
-# ISDN4Linux hardware drivers
-#
-
-#
-# Passive cards
-#
-CONFIG_ISDN_DRV_HISAX=m
-
-#
-# D-channel protocol features
-#
-CONFIG_HISAX_EURO=y
-CONFIG_DE_AOC=y
-CONFIG_HISAX_NO_SENDCOMPLETE=y
-CONFIG_HISAX_NO_LLC=y
-CONFIG_HISAX_NO_KEYPAD=y
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_MAX_CARDS=8
-
-#
-# HiSax supported cards
-#
-CONFIG_HISAX_16_0=y
-CONFIG_HISAX_16_3=y
-CONFIG_HISAX_TELESPCI=y
-CONFIG_HISAX_S0BOX=y
-CONFIG_HISAX_AVM_A1=y
-CONFIG_HISAX_FRITZPCI=y
-CONFIG_HISAX_AVM_A1_PCMCIA=y
-CONFIG_HISAX_ELSA=y
-CONFIG_HISAX_IX1MICROR2=y
-CONFIG_HISAX_DIEHLDIVA=y
-CONFIG_HISAX_ASUSCOM=y
-CONFIG_HISAX_TELEINT=y
-CONFIG_HISAX_HFCS=y
-CONFIG_HISAX_SEDLBAUER=y
-CONFIG_HISAX_SPORTSTER=y
-CONFIG_HISAX_MIC=y
-CONFIG_HISAX_NETJET=y
-CONFIG_HISAX_NETJET_U=y
-CONFIG_HISAX_NICCY=y
-CONFIG_HISAX_ISURF=y
-CONFIG_HISAX_HSTSAPHIR=y
-CONFIG_HISAX_BKM_A4T=y
-CONFIG_HISAX_SCT_QUADRO=y
-CONFIG_HISAX_GAZEL=y
-CONFIG_HISAX_HFC_PCI=y
-CONFIG_HISAX_W6692=y
-CONFIG_HISAX_HFC_SX=y
-CONFIG_HISAX_ENTERNOW_PCI=y
-# CONFIG_HISAX_DEBUG is not set
-
-#
-# HiSax PCMCIA card service modules
-#
-CONFIG_HISAX_SEDLBAUER_CS=m
-CONFIG_HISAX_ELSA_CS=m
-CONFIG_HISAX_AVM_A1_CS=m
-CONFIG_HISAX_TELES_CS=m
-
-#
-# HiSax sub driver modules
-#
-CONFIG_HISAX_ST5481=m
-CONFIG_HISAX_HFCUSB=m
-CONFIG_HISAX_FRITZ_PCIPNP=m
-CONFIG_HISAX_HDLC=y
-
-#
-# Active cards
-#
-CONFIG_ISDN_DRV_ICN=m
-CONFIG_ISDN_DRV_PCBIT=m
-CONFIG_ISDN_DRV_SC=m
-CONFIG_ISDN_DRV_ACT2000=m
-CONFIG_ISDN_DRV_TPAM=m
-
-#
-# CAPI subsystem
-#
-CONFIG_ISDN_CAPI=m
-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
-CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
-CONFIG_ISDN_CAPI_CAPIFS=m
-CONFIG_ISDN_CAPI_CAPIDRV=m
-
-#
-# CAPI hardware drivers
-#
-
-#
-# Active AVM cards
-#
-CONFIG_CAPI_AVM=y
-
-#
-# Active Eicon DIVA Server cards
-#
-CONFIG_CAPI_EICON=y
-CONFIG_ISDN_DIVAS=m
-CONFIG_ISDN_DIVAS_BRIPCI=y
-CONFIG_ISDN_DIVAS_PRIPCI=y
-CONFIG_ISDN_DIVAS_DIVACAPI=m
-CONFIG_ISDN_DIVAS_USERIDI=m
-CONFIG_ISDN_DIVAS_MAINT=m
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-CONFIG_INPUT_JOYDEV=m
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input I/O drivers
-#
-CONFIG_GAMEPORT=m
-CONFIG_SOUND_GAMEPORT=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_VORTEX=m
-CONFIG_GAMEPORT_FM801=m
-CONFIG_GAMEPORT_CS461x=m
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# 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_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_INPORT=m
-CONFIG_MOUSE_ATIXL=y
-CONFIG_MOUSE_LOGIBM=m
-CONFIG_MOUSE_PC110PAD=m
-CONFIG_MOUSE_VSXXXAA=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=y
-CONFIG_JOYSTICK_IFORCE_232=y
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDDLER=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-# CONFIG_INPUT_JOYDUMP is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_PCSPKR=m
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_ROCKETPORT=m
-# CONFIG_CYCLADES is not set
-CONFIG_SYNCLINK=m
-CONFIG_SYNCLINKMP=m
-CONFIG_N_HDLC=m
-CONFIG_STALDRV=y
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_CS=m
-# CONFIG_SERIAL_8250_ACPI is not set
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_EXTENDED=y
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_DETECT_IRQ=y
-CONFIG_SERIAL_8250_MULTIPORT=y
-CONFIG_SERIAL_8250_RSA=y
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_CRASH=m
-CONFIG_PRINTER=m
-CONFIG_LP_CONSOLE=y
-CONFIG_PPDEV=m
-CONFIG_TIPAR=m
-# CONFIG_QIC02_TAPE is not set
-
-#
-# IPMI
-#
-CONFIG_IPMI_HANDLER=m
-# CONFIG_IPMI_PANIC_EVENT is not set
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SI=m
-CONFIG_IPMI_WATCHDOG=m
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_SC520_WDT=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_WAFER_WDT=m
-CONFIG_I8XX_TCO=m
-CONFIG_SC1200_WDT=m
-# CONFIG_SCx200_WDT is not set
-# CONFIG_60XX_WDT is not set
-CONFIG_CPU5_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_MACHZ_WDT=m
-
-#
-# ISA-based Watchdog Cards
-#
-CONFIG_PCWATCHDOG=m
-# CONFIG_MIXCOMWD is not set
-CONFIG_WDT=m
-# CONFIG_WDT_501 is not set
-
-#
-# PCI-based Watchdog Cards
-#
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-CONFIG_WDT_501_PCI=y
-
-#
-# USB-based Watchdog Cards
-#
-CONFIG_USBPCWATCHDOG=m
-CONFIG_HW_RANDOM=m
-CONFIG_NVRAM=m
-CONFIG_RTC=y
-CONFIG_DTLK=m
-CONFIG_R3964=m
-# CONFIG_APPLICOM is not set
-CONFIG_SONYPI=m
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-CONFIG_AGP_ALI=y
-CONFIG_AGP_ATI=y
-CONFIG_AGP_AMD=y
-CONFIG_AGP_AMD64=y
-CONFIG_AGP_INTEL=y
-CONFIG_AGP_INTEL_MCH=y
-CONFIG_AGP_NVIDIA=y
-CONFIG_AGP_SIS=y
-CONFIG_AGP_SWORKS=y
-CONFIG_AGP_VIA=y
-CONFIG_AGP_EFFICEON=y
-CONFIG_DRM=y
-CONFIG_DRM_TDFX=m
-CONFIG_DRM_GAMMA=m
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_I810=m
-CONFIG_DRM_I830=m
-CONFIG_DRM_MGA=m
-CONFIG_DRM_SIS=m
-
-#
-# PCMCIA character devices
-#
-CONFIG_SYNCLINK_CS=m
-CONFIG_MWAVE=m
-# CONFIG_RAW_DRIVER is not set
-CONFIG_HANGCHECK_TIMER=m
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-CONFIG_I2C_CHARDEV=m
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=m
-CONFIG_I2C_ALGOPCF=m
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_I810=m
-CONFIG_I2C_ISA=m
-CONFIG_I2C_NFORCE2=m
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_PROSAVAGE=m
-CONFIG_I2C_SAVAGE4=m
-# CONFIG_SCx200_ACB is not set
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_VOODOO3=m
-
-#
-# Hardware Sensors Chip support
-#
-CONFIG_I2C_SENSOR=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_FSCHER=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83627HF=m
-
-#
-# Other I2C Chip support
-#
-CONFIG_SENSORS_EEPROM=m
-CONFIG_SENSORS_PCF8574=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-CONFIG_IBM_ASM=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-CONFIG_VIDEO_BT848=m
-CONFIG_VIDEO_PMS=m
-CONFIG_VIDEO_BWQCAM=m
-CONFIG_VIDEO_CQCAM=m
-CONFIG_VIDEO_W9966=m
-CONFIG_VIDEO_CPIA=m
-CONFIG_VIDEO_CPIA_PP=m
-CONFIG_VIDEO_CPIA_USB=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_TUNER_3036=m
-CONFIG_VIDEO_STRADIS=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DPC=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-
-#
-# Radio Adapters
-#
-CONFIG_RADIO_CADET=m
-CONFIG_RADIO_RTRACK=m
-CONFIG_RADIO_RTRACK2=m
-CONFIG_RADIO_AZTECH=m
-CONFIG_RADIO_GEMTEK=m
-CONFIG_RADIO_GEMTEK_PCI=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_MAESTRO=m
-CONFIG_RADIO_SF16FMI=m
-CONFIG_RADIO_SF16FMR2=m
-CONFIG_RADIO_TERRATEC=m
-CONFIG_RADIO_TRUST=m
-CONFIG_RADIO_TYPHOON=m
-CONFIG_RADIO_TYPHOON_PROC_FS=y
-CONFIG_RADIO_ZOLTRIX=m
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_VIDEO_VIDEOBUF=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_BUF=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-# 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_VGA16=m
-CONFIG_FB_VESA=y
-CONFIG_VIDEO_SELECT=y
-CONFIG_FB_HGA=m
-CONFIG_FB_HGA_ACCEL=y
-CONFIG_FB_RIVA=m
-CONFIG_FB_I810=m
-CONFIG_FB_I810_GTF=y
-CONFIG_FB_MATROX=m
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G450=y
-CONFIG_FB_MATROX_G100=y
-CONFIG_FB_MATROX_I2C=m
-CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_MATROX_MULTIHEAD=y
-# CONFIG_FB_RADEON_OLD is not set
-CONFIG_FB_RADEON=m
-CONFIG_FB_RADEON_I2C=y
-# CONFIG_FB_RADEON_DEBUG is not set
-CONFIG_FB_ATY128=m
-CONFIG_FB_ATY=m
-CONFIG_FB_ATY_CT=y
-CONFIG_FB_ATY_GX=y
-# CONFIG_FB_ATY_XL_INIT is not set
-# CONFIG_FB_SIS is not set
-CONFIG_FB_NEOMAGIC=m
-CONFIG_FB_KYRO=m
-CONFIG_FB_3DFX=m
-CONFIG_FB_3DFX_ACCEL=y
-CONFIG_FB_VOODOO1=m
-CONFIG_FB_TRIDENT=m
-CONFIG_FB_TRIDENT_ACCEL=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-CONFIG_MDA_CONSOLE=m
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_PCI_CONSOLE=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_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=m
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_SEQUENCER_OSS=y
-CONFIG_SND_RTCTIMER=m
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_MPU401_UART=m
-CONFIG_SND_OPL3_LIB=m
-CONFIG_SND_OPL4_LIB=m
-CONFIG_SND_VX_LIB=m
-CONFIG_SND_DUMMY=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-# CONFIG_SND_SERIAL_U16550 is not set
-CONFIG_SND_MPU401=m
-
-#
-# ISA devices
-#
-CONFIG_SND_AD1816A=m
-CONFIG_SND_AD1848=m
-CONFIG_SND_CS4231=m
-CONFIG_SND_CS4232=m
-CONFIG_SND_CS4236=m
-CONFIG_SND_ES968=m
-CONFIG_SND_ES1688=m
-CONFIG_SND_ES18XX=m
-CONFIG_SND_GUSCLASSIC=m
-CONFIG_SND_GUSEXTREME=m
-CONFIG_SND_GUSMAX=m
-CONFIG_SND_INTERWAVE=m
-CONFIG_SND_INTERWAVE_STB=m
-CONFIG_SND_OPTI92X_AD1848=m
-CONFIG_SND_OPTI92X_CS4231=m
-CONFIG_SND_OPTI93X=m
-CONFIG_SND_SB8=m
-CONFIG_SND_SB16=m
-CONFIG_SND_SBAWE=m
-CONFIG_SND_SB16_CSP=y
-# CONFIG_SND_WAVEFRONT is not set
-CONFIG_SND_ALS100=m
-CONFIG_SND_AZT2320=m
-CONFIG_SND_CMI8330=m
-CONFIG_SND_DT019X=m
-CONFIG_SND_OPL3SA2=m
-CONFIG_SND_SGALAXY=m
-CONFIG_SND_SSCAPE=m
-
-#
-# PCI devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CS46XX_NEW_DSP=y
-CONFIG_SND_CS4281=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_HDSP=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_YMFPCI=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VX222=m
-
-#
-# ALSA USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_VXP440 is not set
-CONFIG_SND_PDAUDIOCF=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=m
-CONFIG_USB_EHCI_SPLIT_ISO=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_UHCI_HCD=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_AUDIO=m
-
-#
-# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
-#
-CONFIG_USB_MIDI=m
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_HP8200e=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-
-#
-# USB Human Interface Devices (HID)
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-CONFIG_HID_FF=y
-CONFIG_HID_PID=y
-CONFIG_LOGITECH_FF=y
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-CONFIG_USB_EGALAX=m
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_HPUSBSCSI=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_STV680=m
-CONFIG_USB_W9968CF=m
-
-#
-# USB Network adaptors
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-
-#
-# USB Host-to-Host Cables
-#
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_GENESYS=y
-CONFIG_USB_NET1080=y
-CONFIG_USB_PL2301=y
-
-#
-# Intelligent USB Devices/Gadgets
-#
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_ZAURUS=y
-CONFIG_USB_CDCETHER=y
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_AX8817X=y
-
-#
-# USB port drivers
-#
-CONFIG_USB_USS720=m
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-# CONFIG_USB_EMI26 is not set
-CONFIG_USB_TIGL=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYTHERM is not set
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_TEST=m
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET 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=y
-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=y
-CONFIG_XFS_SECURITY=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_MINIX_FS=m
-CONFIG_ROMFS_FS=m
-CONFIG_QUOTA=y
-# CONFIG_QFMT_V1 is not set
-CONFIG_QFMT_V2=y
-CONFIG_QUOTACTL=y
-CONFIG_AUTOFS_FS=m
-CONFIG_AUTOFS4_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_ZISOFS_FS=y
-CONFIG_UDF_FS=m
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-CONFIG_DEVPTS_FS_XATTR=y
-CONFIG_DEVPTS_FS_SECURITY=y
-CONFIG_TMPFS=y
-CONFIG_HUGETLBFS=y
-CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-CONFIG_AFFS_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_BEFS_FS=m
-# CONFIG_BEFS_DEBUG is not set
-CONFIG_BFS_FS=m
-CONFIG_EFS_FS=m
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_NAND=y
-CONFIG_CRAMFS=m
-CONFIG_VXFS_FS=m
-# CONFIG_HPFS_FS is not set
-CONFIG_QNX4FS_FS=m
-# CONFIG_QNX4FS_RW is not set
-CONFIG_SYSV_FS=m
-CONFIG_UFS_FS=m
-# CONFIG_UFS_FS_WRITE is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-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_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-CONFIG_SMB_FS=m
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-CONFIG_NCP_FS=m
-CONFIG_NCPFS_PACKET_SIGNING=y
-CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCPFS_STRONG=y
-CONFIG_NCPFS_NFS_NS=y
-CONFIG_NCPFS_OS2_NS=y
-CONFIG_NCPFS_SMALLDOS=y
-CONFIG_NCPFS_NLS=y
-CONFIG_NCPFS_EXTRAS=y
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-CONFIG_OSF_PARTITION=y
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_MAC_PARTITION=y
-CONFIG_MSDOS_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_NEC98_PARTITION is not set
-CONFIG_SGI_PARTITION=y
-# CONFIG_ULTRIX_PARTITION is not set
-CONFIG_SUN_PARTITION=y
-CONFIG_EFI_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-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_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_EARLY_PRINTK=y
-CONFIG_DEBUG_STACKOVERFLOW=y
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_SPINLOCK_SLEEP=y
-# CONFIG_FRAME_POINTER is not set
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-
-#
-# Security options
-#
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK=y
-CONFIG_SECURITY_CAPABILITIES=y
-# CONFIG_SECURITY_ROOTPLUG is not set
-CONFIG_SECURITY_SELINUX=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
-CONFIG_SECURITY_SELINUX_DISABLE=y
-CONFIG_SECURITY_SELINUX_DEVELOP=y
-# CONFIG_SECURITY_SELINUX_MLS 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_DES=m
-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_ARC4=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Library routines
-#
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_X86_STD_RESOURCES=y
-CONFIG_PC=y
index 6bf80fc..9838d32 100644 (file)
@@ -259,6 +259,47 @@ e-mail discussions.
 
 
 
+11) Sign your work
+
+To improve tracking of who did what, especially with patches that can
+percolate to their final resting place in the kernel through several
+layers of maintainers, we've introduced a "sign-off" procedure on
+patches that are being emailed around.
+
+The sign-off is a simple line at the end of the explanation for the
+patch, which certifies that you wrote it or otherwise have the right to
+pass it on as a open-source patch.  The rules are pretty simple: if you
+can certify the below:
+
+        Developer's Certificate of Origin 1.0
+
+        By making a contribution to this project, I certify that:
+
+        (a) The contribution was created in whole or in part by me and I
+            have the right to submit it under the open source license
+            indicated in the file; or
+
+        (b) The contribution is based upon previous work that, to the best
+            of my knowledge, is covered under an appropriate open source
+            license and I have the right under that license to submit that
+            work with modifications, whether created in whole or in part
+            by me, under the same open source license (unless I am
+            permitted to submit under a different license), as indicated
+            in the file; or
+
+        (c) The contribution was provided directly to me by some other
+            person who certified (a), (b) or (c) and I have not modified
+            it.
+
+then you just add a line saying
+
+       Signed-off-by: Random J Developer <random@developer.org>
+
+Some people also put extra tags at the end.  They'll just be ignored for
+now, but you can do this to mark internal company procedures or just
+point out some special detail about the sign-off. 
+
+
 -----------------------------------
 SECTION 2 - HINTS, TIPS, AND TRICKS
 -----------------------------------
index 93514f5..36beb54 100644 (file)
@@ -146,6 +146,10 @@ pmipal     Use the protected mode interface for palette changes.
 
 mtrr   setup memory type range registers for the vesafb framebuffer.
 
+vram:n remap 'n' MiB of video RAM. If 0 or not specified, remap memory
+       according to video mode. (2.5.66 patch/idea by Antonino Daplas
+       reversed to give override possibility (allocate more fb memory
+       than the kernel would) to 2.4 by tmb@iki.fi)
 
 Have fun!
 
index 352e616..1cdc5d2 100644 (file)
@@ -273,6 +273,9 @@ ChangeLog
 
 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
 
+2.1.12:
+       - Fix the second fix to the decompression engine from the 2.1.9 release
+         and some further internals cleanups.
 2.1.11:
        - Driver internal cleanups.
 2.1.10:
index 2320102..f9cbd4d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -904,6 +904,7 @@ help:
        @echo  '  rpm             - Build a kernel as an RPM package'
        @echo  '  tags/TAGS       - Generate tags file for editors'
        @echo  '  cscope          - Generate cscope index'
+       @echo  '  checkstack      - Generate a list of stack hogs'
        @echo  ''
        @echo  'Documentation targets:'
        @$(MAKE) -f $(srctree)/Documentation/DocBook/Makefile dochelp
index 90875c2..5777a8c 100644 (file)
@@ -447,7 +447,7 @@ static void do_pending_irqs(struct pt_regs *regs)
  * come via this function.  Instead, they should provide their
  * own 'handler'
  */
-asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
+asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
 {
        struct irqdesc *desc = irq_desc + irq;
 
index 8f30c11..01ce14d 100644 (file)
@@ -108,7 +108,7 @@ arch_initcall(integrator_init);
 
 #define CM_CTRL        IO_ADDRESS(INTEGRATOR_HDR_BASE) + INTEGRATOR_HDR_CTRL_OFFSET
 
-static spinlock_t cm_lock;
+static spinlock_t cm_lock = SPIN_LOCK_UNLOCKED;
 
 /**
  * cm_control - update the CM_CTRL register.
index c114be6..07ddce7 100644 (file)
@@ -281,6 +281,7 @@ static int __init check_initrd(struct meminfo *mi)
 static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages)
 {
        pg_data_t *pgdat = NODE_DATA(0);
+       unsigned long res_size = 0;
 
        /*
         * Register the kernel text and data with bootmem.
@@ -304,31 +305,32 @@ static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int boot
                             bootmap_pages << PAGE_SHIFT);
 
        /*
-        * Hmm... This should go elsewhere, but we really really
-        * need to stop things allocating the low memory; we need
-        * a better implementation of GFP_DMA which does not assume
-        * that DMA-able memory starts at zero.
+        * Hmm... This should go elsewhere, but we really really need to
+        * stop things allocating the low memory; ideally we need a better
+        * implementation of GFP_DMA which does not assume that DMA-able
+        * memory starts at zero.
         */
-       if (machine_is_integrator())
-               reserve_bootmem_node(pgdat, 0, __pa(swapper_pg_dir));
+       if (machine_is_integrator() || machine_is_cintegrator())
+               res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
+
        /*
-        * These should likewise go elsewhere.  They pre-reserve
-        * the screen memory region at the start of main system
-        * memory.
+        * These should likewise go elsewhere.  They pre-reserve the
+        * screen memory region at the start of main system memory.
         */
-       if (machine_is_archimedes() || machine_is_a5k())
-               reserve_bootmem_node(pgdat, 0x02000000, 0x00080000);
        if (machine_is_edb7211())
-               reserve_bootmem_node(pgdat, 0xc0000000, 0x00020000);
+               res_size = 0x00020000;
        if (machine_is_p720t())
-               reserve_bootmem_node(pgdat, PHYS_OFFSET, 0x00014000);
+               res_size = 0x00014000;
+
 #ifdef CONFIG_SA1111
        /*
-        * Because of the SA1111 DMA bug, we want to preserve
-        * our precious DMA-able memory...
+        * Because of the SA1111 DMA bug, we want to preserve our
+        * precious DMA-able memory...
         */
-       reserve_bootmem_node(pgdat, PHYS_OFFSET, __pa(swapper_pg_dir)-PHYS_OFFSET);
+       res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
 #endif
+       if (res_size)
+               reserve_bootmem_node(pgdat, PHYS_OFFSET, res_size);
 }
 
 /*
@@ -601,7 +603,7 @@ void __init mem_init(void)
 
 void free_initmem(void)
 {
-       if (!machine_is_integrator()) {
+       if (!machine_is_integrator() && !machine_is_cintegrator()) {
                free_area((unsigned long)(&__init_begin),
                          (unsigned long)(&__init_end),
                          "init");
index 9b0b719..93d52b7 100644 (file)
@@ -27,19 +27,11 @@ menu "General setup"
 
 source "fs/Kconfig.binfmt"
 
-config ETRAX_KGDB
-       bool "Use kernel gdb debugger"
-       ---help---
-         The CRIS version of gdb can be used to remotely debug a running
-         Linux kernel via the serial debug port.  Provided you have gdb-cris
-         installed, run gdb-cris vmlinux, then type
-
-         (gdb) set remotebaud 115200           <- kgdb uses 115200 as default
-         (gdb) target remote /dev/ttyS0        <- maybe you use another port
-
-         This should connect you to your booted kernel (or boot it now if you
-         didn't before).  The kernel halts when it boots, waiting for gdb if
-         this option is turned on!
+config ETRAX_CMDLINE
+       string "Kernel command line"
+       default "root=/dev/mtdblock3"
+       help
+         Pass additional commands to the kernel.
 
 config ETRAX_WATCHDOG
        bool "Enable ETRAX watchdog"
@@ -99,11 +91,6 @@ config SVINTO_SIM
        help
          Support the xsim ETRAX Simulator.
 
-config ETRAX200LX
-       bool "ETRAX-200LX-V32"
-       help
-         Support CRIS V32.
-
 endchoice
 
 config ETRAX_ARCH_V10
@@ -111,11 +98,6 @@ config ETRAX_ARCH_V10
        default y if ETRAX100LX || ETRAX100LX_V2
        default n if !(ETRAX100LX || ETRAX100LX_V2) 
 
-config ETRAX_ARCH_V32
-       bool
-       default y if ETRAX200LX
-       default n if !(ETRAX200LX) 
-
 config ETRAX_DRAM_SIZE
        int "DRAM size (dec, in MB)"
        default "8"
@@ -128,35 +110,18 @@ config ETRAX_FLASH_BUSWIDTH
        help
          Width in bytes of the Flash bus (1, 2 or 4). Is usually 2.
 
-config ETRAX_ROOT_DEVICE
-       string "Root device name"
-       default "/dev/mtdblock3"
-       help
-         Specifies the device that should be mounted as root file system
-         when booting from flash. The axisflashmap driver adds an additional
-         mtd partition for the appended root file system image, so this option
-         should normally be the mtdblock device for the partition after the
-         last partition in the partition table.
-
-# duplicate choice configs are not yet supported, so the followinguse 
-# doesn't work:
-
 source arch/cris/arch-v10/Kconfig
 
 endmenu
 
 # bring in ETRAX built-in drivers
 menu "Drivers for built-in interfaces"
-
 source arch/cris/arch-v10/drivers/Kconfig
 
 endmenu
 
 source "drivers/base/Kconfig"
 
-# bring in Etrax built-in drivers
-source "arch/cris/drivers/Kconfig"
-
 # standard linux drivers
 source "drivers/mtd/Kconfig"
 
@@ -212,6 +177,37 @@ config PROFILE_SHIFT
        depends on PROFILE
        default "2"
 
+config ETRAX_KGDB
+       bool "Use kernel GDB debugger"
+       ---help---
+         The CRIS version of gdb can be used to remotely debug a running
+         Linux kernel via the serial debug port.  Provided you have gdb-cris
+         installed, run gdb-cris vmlinux, then type
+
+         (gdb) set remotebaud 115200           <- kgdb uses 115200 as default
+         (gdb) target remote /dev/ttyS0        <- maybe you use another port
+
+         This should connect you to your booted kernel (or boot it now if you
+         didn't before).  The kernel halts when it boots, waiting for gdb if
+         this option is turned on!
+
+
+config DEBUG_INFO
+        bool "Compile the kernel with debug info"
+        help
+          If you say Y here the resulting kernel image will include
+          debugging info resulting in a larger kernel image.
+          Say Y here only if you plan to use gdb to debug the kernel.
+          If you don't debug the kernel, you can say N.
+
+config FRAME_POINTER
+        bool "Compile the kernel with frame pointers"
+        help
+          If you say Y here the resulting kernel image will be slightly larger
+          and slower, but it will give very useful debugging information.
+          If you don't debug the kernel, you can say N, but we may not be able
+          to solve problems without frame pointers.
+
 endmenu
 
 source "kernel/vserver/Kconfig"
index 44d3caa..30585a7 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.15 2003/07/04 12:47:53 tobiasa Exp $
+# $Id: Makefile,v 1.20 2004/05/14 14:35:58 orjanf Exp $
 # cris/Makefile
 #
 # This file is included by the global makefile so that you can add your own
@@ -34,7 +34,7 @@ AFLAGS += -mlinux
 
 CFLAGS := $(CFLAGS) -mlinux -march=$(arch-y) -pipe
 
-ifdef CONFIG_ETRAX_KGDB
+ifdef CONFIG_FRAME_POINTER
 CFLAGS := $(subst -fomit-frame-pointer,,$(CFLAGS)) -g
 CFLAGS += -fno-omit-frame-pointer
 endif
@@ -90,10 +90,14 @@ prepare: arch/$(ARCH)/.links include/asm-$(ARCH)/.arch \
 
 # Create some links to make all tools happy
 arch/$(ARCH)/.links:
+       @rm -rf arch/$(ARCH)/drivers
        @ln -sfn $(SARCH)/drivers arch/$(ARCH)/drivers
+       @rm -rf arch/$(ARCH)/boot
        @ln -sfn $(SARCH)/boot arch/$(ARCH)/boot
+       @rm -rf arch/$(ARCH)/lib
        @ln -sfn $(SARCH)/lib arch/$(ARCH)/lib
-       @ln -sfn $(SARCH)/vmlinux.lds.S arch/$(ARCH)/kernel/vmlinux.lds.S
+       @ln -sfn $(SARCH) arch/$(ARCH)/arch
+       @ln -sfn ../$(SARCH)/vmlinux.lds.S arch/$(ARCH)/kernel/vmlinux.lds.S
        @touch $@
 
 # Create link to sub arch includes
index 6506ac4..1b5e83f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * misc.c
  *
- * $Id: misc.c,v 1.4 2003/04/09 05:20:45 starvik Exp $
+ * $Id: misc.c,v 1.6 2003/10/27 08:04:31 starvik Exp $
  * 
  * This is a collection of several routines from gzip-1.0.3 
  * adapted for Linux.
@@ -263,7 +263,7 @@ decompress_kernel()
        __asm__ volatile ("move vr,%0" : "=rm" (revision));
        if (revision < 10)
        {
-               puts("You need an ETRAX 100LX to run linux 2.4\n");
+               puts("You need an ETRAX 100LX to run linux 2.6\n");
                while(1);
        }
 
index 5780e4e..9d40dd3 100644 (file)
@@ -267,6 +267,7 @@ CONFIG_INET=y
 # CONFIG_BLK_DEV_ISAPNP is not set
 # CONFIG_IDE_CHIPSETS is not set
 # CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
 
 #
 # SCSI support
index 7b0684d..482ac66 100644 (file)
@@ -11,29 +11,6 @@ config NET_ETHERNET
        bool
        depends on ETRAX_ETHERNET
        default y
-       ---help---
-         Ethernet (also called IEEE 802.3 or ISO 8802-2) is the most common
-         type of Local Area Network (LAN) in universities and companies.
-
-         Common varieties of Ethernet are: 10BASE-2 or Thinnet (10 Mbps over
-         coaxial cable, linking computers in a chain), 10BASE-T or twisted
-         pair (10 Mbps over twisted pair cable, linking computers to central
-         hubs), 10BASE-F (10 Mbps over optical fiber links, using hubs),
-         100BASE-TX (100 Mbps over two twisted pair cables, using hubs),
-         100BASE-T4 (100 Mbps over 4 standard voice-grade twisted pair
-         cables, using hubs), 100BASE-FX (100 Mbps over optical fiber links)
-         [the 100BASE varieties are also known as Fast Ethernet], and Gigabit
-         Ethernet (1 Gbps over optical fiber or short copper links).
-
-         If your Linux machine will be connected to an Ethernet and you have
-         an Ethernet network interface card (NIC) installed in your computer,
-         say Y here and read the Ethernet-HOWTO, available from
-         <http://www.tldp.org/docs.html#howto>. You will then also have
-         to say Y to the driver for your particular NIC.
-
-         Note that the answer to this question won't directly affect the
-         kernel: saying N will just cause the configurator to skip all
-         the questions about Ethernet network cards. If unsure, say N.
 
 choice
        prompt "Network LED behavior"
@@ -109,6 +86,32 @@ config ETRAX_SERIAL_PORT0
          Normally you want this on, unless you use external DMA 1 that uses
          the same DMA channels.
 
+choice
+       prompt "Ser0 DMA out assignment"
+       depends on ETRAX_SERIAL_PORT0
+       default ETRAX_SERIAL_PORT0_DMA6_OUT
+
+config CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_OUT
+       bool "No DMA out"
+
+config CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT
+       bool "DMA 6"
+
+endchoice
+
+choice
+       prompt "Ser0 DMA in assignment"
+       depends on ETRAX_SERIAL_PORT0
+       default ETRAX_SERIAL_PORT0_DMA7_IN
+
+config CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_IN
+       bool "No DMA in"
+
+config CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN
+       bool "DMA 7"
+
+endchoice
+
 choice
        prompt "Ser0 DTR, RI, DSR and CD assignment"
        depends on ETRAX_SERIAL_PORT0
@@ -197,6 +200,32 @@ config ETRAX_SERIAL_PORT1
        help
          Enables the ETRAX 100 serial driver for ser1 (ttyS1).
 
+choice
+       prompt "Ser1 DMA out assignment"
+       depends on ETRAX_SERIAL_PORT1
+       default ETRAX_SERIAL_PORT1_DMA8_OUT
+
+config CONFIG_ETRAX_SERIAL_PORT1_NO_DMA_OUT
+       bool "No DMA out"
+
+config CONFIG_ETRAX_SERIAL_PORT1_DMA8_OUT
+       bool "DMA 8"
+
+endchoice
+
+choice
+       prompt "Ser1 DMA in assignment"
+       depends on ETRAX_SERIAL_PORT1
+       default ETRAX_SERIAL_PORT1_DMA9_IN
+
+config CONFIG_ETRAX_SERIAL_PORT1_NO_DMA_IN
+       bool "No DMA in"
+
+config CONFIG_ETRAX_SERIAL_PORT1_DMA9_IN
+       bool "DMA 9"
+
+endchoice
+
 choice
        prompt "Ser1 DTR, RI, DSR and CD assignment"
        depends on ETRAX_SERIAL_PORT1
@@ -288,6 +317,32 @@ config ETRAX_SERIAL_PORT2
        help
          Enables the ETRAX 100 serial driver for ser2 (ttyS2).
 
+choice
+       prompt "Ser2 DMA out assignment"
+       depends on ETRAX_SERIAL_PORT2
+       default ETRAX_SERIAL_PORT2_DMA2_OUT
+
+config CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_OUT
+       bool "No DMA out"
+
+config CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT
+       bool "DMA 2"
+
+endchoice
+
+choice
+       prompt "Ser2 DMA in assignment"
+       depends on ETRAX_SERIAL_PORT2
+       default ETRAX_SERIAL_PORT2_DMA3_IN
+
+config CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_IN
+       bool "No DMA in"
+
+config CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN
+       bool "DMA 3"
+
+endchoice
+
 choice
        prompt "Ser2 DTR, RI, DSR and CD assignment"
        depends on ETRAX_SERIAL_PORT2
@@ -376,6 +431,32 @@ config ETRAX_SERIAL_PORT3
        help
          Enables the ETRAX 100 serial driver for ser3 (ttyS3).
 
+choice
+       prompt "Ser3 DMA out assignment"
+       depends on ETRAX_SERIAL_PORT3
+       default ETRAX_SERIAL_PORT3_DMA4_OUT
+
+config CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_OUT
+       bool "No DMA out"
+
+config CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT
+       bool "DMA 4"
+
+endchoice
+
+choice
+       prompt "Ser3 DMA in assignment"
+       depends on ETRAX_SERIAL_PORT3
+       default ETRAX_SERIAL_PORT3_DMA5_IN
+
+config CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_IN
+       bool "No DMA in"
+
+config CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN
+       bool "DMA 5"
+
+endchoice
+
 choice
        prompt "Ser3 DTR, RI, DSR and CD assignment"
        depends on ETRAX_SERIAL_PORT3
@@ -466,6 +547,95 @@ config ETRAX_RS485_DISABLE_RECEIVER
          loopback.  Not all products are able to do this in software only.
          Axis 2400/2401 must disable receiver.
 
+config ETRAX_IDE
+       bool "ATA/IDE support"
+       help
+         Enable this to get support for ATA/IDE.
+         You can't use parallell ports or SCSI ports
+         at the same time.
+
+# here we should add the CONFIG_'s necessary to enable the basic
+# general ide drivers so the common case does not need to go
+# into that config submenu. enable disk and CD support. others
+# need to go fiddle in the submenu..
+config IDE
+       tristate
+       depends on ETRAX_IDE
+       default y
+
+config BLK_DEV_IDE
+       tristate
+       depends on ETRAX_IDE
+       default y
+
+config BLK_DEV_IDEDISK
+       tristate
+       depends on ETRAX_IDE
+       default y
+
+config BLK_DEV_IDECD
+       tristate
+       depends on ETRAX_IDE
+       default y
+
+config BLK_DEV_IDEDMA
+       bool
+       depends on ETRAX_IDE
+       default y
+
+config DMA_NONPCI
+       bool
+       depends on ETRAX_IDE
+       default y
+
+config ETRAX_IDE_DELAY
+       int "Delay for drives to regain consciousness"
+       depends on ETRAX_IDE
+       default 15
+       help
+         Number of seconds to wait for IDE drives to spin up after an IDE
+         reset.
+choice
+       prompt "IDE reset pin"
+       depends on ETRAX_IDE
+       default ETRAX_IDE_PB7_RESET
+
+config ETRAX_IDE_PB7_RESET
+       bool "Port_PB_Bit_7"
+       help
+         IDE reset on pin 7 on port B
+
+config ETRAX_IDE_G27_RESET
+        bool "Port_G_Bit_27"
+       help
+         IDE reset on pin 27 on port G
+
+endchoice
+
+
+config ETRAX_USB_HOST
+       bool "USB host"
+       help
+          This option enables the host functionality of the ETRAX 100LX
+          built-in USB controller. In host mode the controller is designed
+          for CTRL and BULK traffic only, INTR traffic may work as well
+          however (depending on the requirements of timeliness).
+
+config USB
+       tristate
+       depends on ETRAX_USB_HOST
+       default y
+
+config ETRAX_USB_HOST_PORT1
+       bool "  USB port 1 enabled"
+       depends on ETRAX_USB_HOST
+       default n
+
+config ETRAX_USB_HOST_PORT2
+       bool "  USB port 2 enabled"
+       depends on ETRAX_USB_HOST
+       default n
+
 config ETRAX_AXISFLASHMAP
        bool "Axis flash-map support"
        depends on ETRAX_ARCH_V10
index 7160cdd..7036fc0 100644 (file)
@@ -10,5 +10,7 @@ obj-$(CONFIG_ETRAX_I2C_EEPROM)          += eeprom.o
 obj-$(CONFIG_ETRAX_GPIO)               += gpio.o
 obj-$(CONFIG_ETRAX_DS1302)              += ds1302.o
 obj-$(CONFIG_ETRAX_PCF8563)            += pcf8563.o
+obj-$(CONFIG_ETRAX_IDE)                 += ide.o
+obj-$(CONFIG_ETRAX_USB_HOST)            += usb-host.o
 
 
index c6f90bd..3277019 100644 (file)
@@ -11,6 +11,9 @@
  * partition split defined below.
  *
  * $Log: axisflashmap.c,v $
+ * Revision 1.8  2004/05/14 07:58:03  starvik
+ * Merge of changes from 2.4
+ *
  * Revision 1.6  2003/07/04 08:27:37  starvik
  * Merge of Linux 2.5.74
  *
 /* From head.S */
 extern unsigned long romfs_start, romfs_length, romfs_in_flash;
 
+/* The master mtd for the entire flash. */
+struct mtd_info* axisflash_mtd = NULL;
+
 /* Map driver functions. */
 
 static __u8 flash_read8(struct map_info *map, unsigned long ofs)
@@ -314,7 +320,8 @@ static struct mtd_info *probe_cs(struct map_info *map_cs)
 {
        struct mtd_info *mtd_cs = NULL;
 
-       printk("%s: Probing a 0x%08lx bytes large window at 0x%08lx.\n",
+       printk(KERN_INFO
+               "%s: Probing a 0x%08lx bytes large window at 0x%08lx.\n",
               map_cs->name, map_cs->size, map_cs->map_priv_1);
 
 #ifdef CONFIG_MTD_AMDSTD
@@ -398,7 +405,7 @@ static int __init init_axis_flash(void)
        struct mtd_info *mymtd;
        int err = 0;
        int pidx = 0;
-       struct partitiontable_head *ptable_head;
+       struct partitiontable_head *ptable_head = NULL;
        struct partitiontable_entry *ptable;
        int use_default_ptable = 1; /* Until proven otherwise. */
        const char *pmsg = "  /dev/flash%d at 0x%08x, size 0x%08x\n";
@@ -407,19 +414,22 @@ static int __init init_axis_flash(void)
                /* There's no reason to use this module if no flash chip can
                 * be identified. Make sure that's understood.
                 */
-               panic("axisflashmap found no flash chip!\n");
+               printk(KERN_INFO "axisflashmap: Found no flash chip.\n");
+       } else {
+               printk(KERN_INFO "%s: 0x%08x bytes of flash memory.\n",
+                      mymtd->name, mymtd->size);
+               axisflash_mtd = mymtd;
        }
 
-       printk("%s: 0x%08x bytes of flash memory.\n",
-              mymtd->name, mymtd->size);
-
-       mymtd->owner = THIS_MODULE;
-
-       ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR +
-                     CONFIG_ETRAX_PTABLE_SECTOR + PARTITION_TABLE_OFFSET);
+       if (mymtd) {
+               mymtd->owner = THIS_MODULE;
+               ptable_head = (struct partitiontable_head *)(FLASH_CACHED_ADDR +
+                             CONFIG_ETRAX_PTABLE_SECTOR +
+                             PARTITION_TABLE_OFFSET);
+       }
        pidx++;  /* First partition is always set to the default. */
 
-       if ((ptable_head->magic == PARTITION_TABLE_MAGIC)
+       if (ptable_head && (ptable_head->magic == PARTITION_TABLE_MAGIC)
            && (ptable_head->size <
                (MAX_PARTITIONS * sizeof(struct partitiontable_entry) +
                PARTITIONTABLE_END_MARKER_SIZE))
@@ -454,7 +464,7 @@ static int __init init_axis_flash(void)
                ptable_ok = (csum == ptable_head->checksum);
 
                /* Read the entries and use/show the info.  */
-               printk(" Found a%s partition table at 0x%p-0x%p.\n",
+               printk(KERN_INFO " Found a%s partition table at 0x%p-0x%p.\n",
                       (ptable_ok ? " valid" : "n invalid"), ptable_head,
                       max_addr);
 
@@ -486,22 +496,25 @@ static int __init init_axis_flash(void)
                axis_partitions[pidx].offset = romfs_start - FLASH_CACHED_ADDR;
                axis_partitions[pidx].mask_flags |= MTD_WRITEABLE;
 
-               printk(" Adding readonly flash partition for romfs image:\n");
+               printk(KERN_INFO
+                       " Adding readonly flash partition for romfs image:\n");
                printk(pmsg, pidx, axis_partitions[pidx].offset,
                       axis_partitions[pidx].size);
                pidx++;
        }
 
-       if (use_default_ptable) {
-               printk(" Using default partition table.\n");
-               err = add_mtd_partitions(mymtd, axis_default_partitions,
-                                        NUM_DEFAULT_PARTITIONS);
-       } else {
-               err = add_mtd_partitions(mymtd, axis_partitions, pidx);
-       }
+        if (mymtd) {
+               if (use_default_ptable) {
+                       printk(KERN_INFO " Using default partition table.\n");
+                       err = add_mtd_partitions(mymtd, axis_default_partitions,
+                                                NUM_DEFAULT_PARTITIONS);
+               } else {
+                       err = add_mtd_partitions(mymtd, axis_partitions, pidx);
+               }
 
-       if (err) {
-               panic("axisflashmap could not add MTD partitions!\n");
+               if (err) {
+                       panic("axisflashmap could not add MTD partitions!\n");
+               }
        }
 
        if (!romfs_in_flash) {
@@ -522,7 +535,7 @@ static int __init init_axis_flash(void)
                              "mtd_info!\n");
                }
 
-               printk(" Adding RAM partition for romfs image:\n");
+               printk(KERN_INFO " Adding RAM partition for romfs image:\n");
                printk(pmsg, pidx, romfs_start, romfs_length);
 
                err = mtdram_init_device(mtd_ram, (void*)romfs_start, 
@@ -539,3 +552,5 @@ static int __init init_axis_flash(void)
 
 /* This adds the above to the kernels init-call chain. */
 module_init(init_axis_flash);
+
+EXPORT_SYMBOL(axisflash_mtd);
index b244f40..78a200a 100644 (file)
@@ -4,9 +4,18 @@
 *!
 *! DESCRIPTION: Implements an interface for the DS1302 RTC through Etrax I/O
 *!
-*! Functions exported: ds1302_readreg, ds1302_writereg, ds1302_init, get_rtc_status
+*! Functions exported: ds1302_readreg, ds1302_writereg, ds1302_init
 *!
 *! $Log: ds1302.c,v $
+*! Revision 1.13  2004/05/28 09:26:59  starvik
+*! Modified I2C initialization to work in 2.6.
+*!
+*! Revision 1.12  2004/05/14 07:58:03  starvik
+*! Merge of changes from 2.4
+*!
+*! Revision 1.10  2004/02/04 09:25:12  starvik
+*! Merge of Linux 2.6.2
+*!
 *! Revision 1.9  2003/07/04 08:27:37  starvik
 *! Merge of Linux 2.5.74
 *!
 *!
 *! (C) Copyright 1999, 2000, 2001  Axis Communications AB, LUND, SWEDEN
 *!
-*! $Id: ds1302.c,v 1.9 2003/07/04 08:27:37 starvik Exp $
+*! $Id: ds1302.c,v 1.13 2004/05/28 09:26:59 starvik Exp $
 *!
 *!***************************************************************************/
 
@@ -283,12 +292,23 @@ ds1302_readreg(int reg)
 void
 ds1302_writereg(int reg, unsigned char val) 
 {
-       ds1302_wenable();
-       start();
-       out_byte(0x80 | (reg << 1)); /* write register */
-       out_byte(val);
-       stop();
-       ds1302_wdisable();
+#ifndef CONFIG_ETRAX_RTC_READONLY
+       int do_writereg = 1;
+#else
+       int do_writereg = 0;
+
+       if (reg == RTC_TRICKLECHARGER)
+               do_writereg = 1;
+#endif
+
+       if (do_writereg) {
+               ds1302_wenable();
+               start();
+               out_byte(0x80 | (reg << 1)); /* write register */
+               out_byte(val);
+               stop();
+               ds1302_wdisable();
+       }
 }
 
 void
@@ -426,20 +446,33 @@ rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
                        tcs_val = RTC_TCR_PATTERN | (tcs_val & 0x0F);
                        ds1302_writereg(RTC_TRICKLECHARGER, tcs_val);
                        return 0;
-               }                
+               }
+               case RTC_VLOW_RD:
+               {
+                       /* TODO:
+                        * Implement voltage low detection support
+                        */
+                       printk(KERN_WARNING "DS1302: RTC Voltage Low detection"
+                              " is not supported\n");
+                       return 0;
+               }
+               case RTC_VLOW_SET:
+               {
+                       /* TODO:
+                        * Nothing to do since Voltage Low detection is not supported
+                        */
+                       return 0;
+               }
                default:
                        return -ENOIOCTLCMD;
        }
 }
 
-int
-get_rtc_status(char *buf) 
+static void
+print_rtc_status(void)
 {
-       char *p;
        struct rtc_time tm;
 
-       p = buf;
-
        get_rtc_time(&tm);
 
        /*
@@ -447,16 +480,12 @@ get_rtc_status(char *buf)
         * time or for Universal Standard Time (GMT). Probably local though.
         */
 
-       p += sprintf(p,
-               "rtc_time\t: %02d:%02d:%02d\n"
-               "rtc_date\t: %04d-%02d-%02d\n",
-               tm.tm_hour, tm.tm_min, tm.tm_sec,
-               tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-
-       return  p - buf;
+       printk(KERN_INFO "rtc_time\t: %02d:%02d:%02d\n",
+              tm.tm_hour, tm.tm_min, tm.tm_sec);
+       printk(KERN_INFO "rtc_date\t: %04d-%02d-%02d\n",
+              tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
 }
 
-
 /* The various file operations we support. */
 
 static struct file_operations rtc_fops = {
@@ -487,11 +516,10 @@ ds1302_probe(void)
        out_byte(0xc1); /* read RAM byte 0 */
 
        if((res = in_byte()) == MAGIC_PATTERN) {
-               char buf[100];
                stop();
                ds1302_wdisable();
-               printk("%s: RTC found.\n", ds1302_name);
-               printk("%s: SDA, SCL, RST on PB%i, PB%i, %s%i\n",
+               printk(KERN_INFO "%s: RTC found.\n", ds1302_name);
+               printk(KERN_INFO "%s: SDA, SCL, RST on PB%i, PB%i, %s%i\n",
                       ds1302_name,
                       CONFIG_ETRAX_DS1302_SDABIT,
                       CONFIG_ETRAX_DS1302_SCLBIT,
@@ -501,12 +529,10 @@ ds1302_probe(void)
                       "PB",
 #endif
                       CONFIG_ETRAX_DS1302_RSTBIT);
-                get_rtc_status(buf);
-                printk(buf);
+                print_rtc_status();
                retval = 1;
        } else {
                stop();
-               printk("%s: RTC not found.\n", ds1302_name);
                retval = 0;
        }
 
@@ -518,7 +544,9 @@ ds1302_probe(void)
 
 int __init
 ds1302_init(void) 
-{ 
+{
+       i2c_init();
+
        if (!ds1302_probe()) {
 #ifdef CONFIG_ETRAX_DS1302_RST_ON_GENERIC_PORT
 #if CONFIG_ETRAX_DS1302_RSTBIT == 27
@@ -539,16 +567,20 @@ ds1302_init(void)
                                   (IO_STATE(R_GEN_CONFIG, g0dir, out)));    
                *R_GEN_CONFIG = genconfig_shadow;
 #endif
-               if (!ds1302_probe())
+               if (!ds1302_probe()) {
+                       printk(KERN_WARNING "%s: RTC not found.\n", ds1302_name);
                        return -1;
+               }
 #else
+               printk(KERN_WARNING "%s: RTC not found.\n", ds1302_name);
                return -1;
 #endif
        }
-  
        /* Initialise trickle charger */
        ds1302_writereg(RTC_TRICKLECHARGER,
                        RTC_TCR_PATTERN |(CONFIG_ETRAX_DS1302_TRICKLE_CHARGE & 0x0F));
+        /* Start clock by resetting CLOCK_HALT */
+       ds1302_writereg(RTC_SECONDS, (ds1302_readreg(RTC_SECONDS) & 0x7F));
        return 0;
 }
 
index f0ea470..960f4cb 100644 (file)
@@ -20,6 +20,9 @@
 *!                                  in the spin-lock.
 *!
 *!  $Log: eeprom.c,v $
+*!  Revision 1.10  2003/09/11 07:29:48  starvik
+*!  Merge of Linux 2.6.0-test5
+*!
 *!  Revision 1.9  2003/07/04 08:27:37  starvik
 *!  Merge of Linux 2.5.74
 *!
@@ -441,9 +444,9 @@ int __init eeprom_init(void)
 static int eeprom_open(struct inode * inode, struct file * file)
 {
 
-  if(iminor(inode) != EEPROM_MINOR_NR)
+  if(MINOR(inode->i_rdev) != EEPROM_MINOR_NR)
      return -ENXIO;
-  if(imajor(inode) != EEPROM_MAJOR_NR)
+  if(MAJOR(inode->i_rdev) != EEPROM_MAJOR_NR)
      return -ENXIO;
 
   if( eeprom.size > 0 )
index 943db0b..e13b754 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ethernet.c,v 1.17 2003/07/04 08:27:37 starvik Exp $
+/* $Id: ethernet.c,v 1.22 2004/05/14 07:58:03 starvik Exp $
  *
  * e100net.c: A network driver for the ETRAX 100LX network controller.
  *
@@ -7,6 +7,15 @@
  * The outline of this driver comes from skeleton.c.
  *
  * $Log: ethernet.c,v $
+ * Revision 1.22  2004/05/14 07:58:03  starvik
+ * Merge of changes from 2.4
+ *
+ * Revision 1.20  2004/03/11 11:38:40  starvik
+ * Merge of Linux 2.6.4
+ *
+ * Revision 1.18  2003/12/03 13:45:46  starvik
+ * Use hardware pad for short packets to prevent information leakage.
+ *
  * Revision 1.17  2003/07/04 08:27:37  starvik
  * Merge of Linux 2.5.74
  *
@@ -258,6 +267,16 @@ typedef struct etrax_eth_descr
        struct sk_buff* skb;
 } etrax_eth_descr;
 
+/* Some transceivers requires special handling */
+struct transceiver_ops
+{
+       unsigned int oui;
+       void (*check_speed)(void);
+       void (*check_duplex)(void);
+};
+
+struct transceiver_ops* transceiver;
+
 /* Duplex settings */
 enum duplex
 {
@@ -278,10 +297,17 @@ enum duplex
 */
 #define MDIO_BASE_STATUS_REG                0x1
 #define MDIO_BASE_CONTROL_REG               0x0
+#define MDIO_PHY_ID_HIGH_REG                0x2
+#define MDIO_PHY_ID_LOW_REG                 0x3
 #define MDIO_BC_NEGOTIATE                0x0200
 #define MDIO_BC_FULL_DUPLEX_MASK         0x0100
 #define MDIO_BC_AUTO_NEG_MASK            0x1000
 #define MDIO_BC_SPEED_SELECT_MASK        0x2000
+#define MDIO_STATUS_100_FD               0x4000
+#define MDIO_STATUS_100_HD               0x2000
+#define MDIO_STATUS_10_FD                0x1000
+#define MDIO_STATUS_10_HD                0x0800
+#define MDIO_STATUS_SPEED_DUPLEX_MASK   0x7800
 #define MDIO_ADVERTISMENT_REG               0x4
 #define MDIO_ADVERT_100_FD                0x100
 #define MDIO_ADVERT_100_HD                0x080
@@ -295,9 +321,13 @@ enum duplex
 
 /* Broadcom specific */
 #define MDIO_AUX_CTRL_STATUS_REG           0x18
-#define MDIO_FULL_DUPLEX_IND                0x1
-#define MDIO_SPEED                          0x2
-#define MDIO_PHYS_ADDR                      0x0
+#define MDIO_BC_FULL_DUPLEX_IND             0x1
+#define MDIO_BC_SPEED                       0x2
+
+/* TDK specific */
+#define MDIO_TDK_DIAGNOSTIC_REG              18
+#define MDIO_TDK_DIAGNOSTIC_RATE          0x400
+#define MDIO_TDK_DIAGNOSTIC_DPLX          0x800
 
 /* Network flash constants */
 #define NET_FLASH_TIME                  (HZ/50) /* 20 ms */
@@ -341,6 +371,9 @@ static etrax_eth_descr* myNextTxDesc;  /* Next descriptor to use */
 static etrax_eth_descr TxDescList[NBR_OF_TX_DESC] __attribute__ ((aligned(32)));
 
 static unsigned int network_rec_config_shadow = 0;
+static unsigned int mdio_phy_addr; /* Transciever address */
+
+static unsigned int network_tr_ctrl_shadow = 0;
 
 /* Network speed indication. */
 static struct timer_list speed_timer = TIMER_INITIALIZER(NULL, 0, 0);
@@ -376,6 +409,7 @@ static void set_multicast_list(struct net_device *dev);
 static void e100_hardware_send_packet(char *buf, int length);
 static void update_rx_stats(struct net_device_stats *);
 static void update_tx_stats(struct net_device_stats *);
+static int e100_probe_transceiver(void);
 
 static void e100_check_speed(unsigned long dummy);
 static void e100_set_speed(unsigned long speed);
@@ -393,6 +427,21 @@ static void e100_reset_transceiver(void);
 static void e100_clear_network_leds(unsigned long dummy);
 static void e100_set_network_leds(int active);
 
+static void broadcom_check_speed(void);
+static void broadcom_check_duplex(void);
+static void tdk_check_speed(void);
+static void tdk_check_duplex(void);
+static void generic_check_speed(void);
+static void generic_check_duplex(void);
+
+struct transceiver_ops transceivers[] =
+{
+       {0x1018, broadcom_check_speed, broadcom_check_duplex},  /* Broadcom */
+       {0xC039, tdk_check_speed, tdk_check_duplex},            /* TDK 2120 */
+       {0x039C, tdk_check_speed, tdk_check_duplex},            /* TDK 2120C */
+       {0x0000, generic_check_speed, generic_check_duplex}     /* Generic, must be last */
+};
+
 #define tx_done(dev) (*R_DMA_CH0_CMD == 0)
 
 /*
@@ -409,7 +458,8 @@ etrax_ethernet_init(void)
        struct net_device *dev;
        int i, err;
 
-       printk("ETRAX 100LX 10/100MBit ethernet v2.0 (c) 2000-2003 Axis Communications AB\n");
+       printk(KERN_INFO
+              "ETRAX 100LX 10/100MBit ethernet v2.0 (c) 2000-2003 Axis Communications AB\n");
 
        dev = alloc_etherdev(sizeof(struct net_local));
        if (!dev)
@@ -496,7 +546,6 @@ etrax_ethernet_init(void)
        current_speed_selection = 0; /* Auto */
        speed_timer.expires = jiffies + NET_LINK_UP_CHECK_INTERVAL;
        speed_timer.function = e100_check_speed;
-       add_timer(&speed_timer);
         
        clear_led_timer.function = e100_clear_network_leds;
         
@@ -504,7 +553,6 @@ etrax_ethernet_init(void)
        current_duplex = autoneg;
        duplex_timer.expires = jiffies + NET_DUPLEX_CHECK_INTERVAL;             
        duplex_timer.function = e100_check_duplex;
-       add_timer(&duplex_timer);
 
        /* Initialize group address registers to make sure that no */
        /* unwanted addresses are matched */
@@ -543,7 +591,7 @@ e100_set_mac_address(struct net_device *dev, void *p)
 
        /* show it in the log as well */
 
-       printk("%s: changed MAC to ", dev->name);
+       printk(KERN_INFO "%s: changed MAC to ", dev->name);
 
        for (i = 0; i < 5; i++)
                printk("%02X:", dev->dev_addr[i]);
@@ -569,12 +617,6 @@ e100_open(struct net_device *dev)
 {
        unsigned long flags;
 
-       /* disable the ethernet interface while we configure it */
-
-       *R_NETWORK_GEN_CONFIG =
-               IO_STATE(R_NETWORK_GEN_CONFIG, phy,    mii_clk) |
-               IO_STATE(R_NETWORK_GEN_CONFIG, enable, off);
-
        /* enable the MDIO output pin */
 
        *R_NETWORK_MGM_CTRL = IO_STATE(R_NETWORK_MGM_CTRL, mdoe, enable);
@@ -645,14 +687,14 @@ e100_open(struct net_device *dev)
                IO_STATE(R_NETWORK_GEN_CONFIG, phy,    mii_clk) |
                IO_STATE(R_NETWORK_GEN_CONFIG, enable, on);
 
-       *R_NETWORK_TR_CTRL = 
-               IO_STATE(R_NETWORK_TR_CTRL, clr_error, clr) |
-               IO_STATE(R_NETWORK_TR_CTRL, delay, none) |
-               IO_STATE(R_NETWORK_TR_CTRL, cancel, dont) |
-               IO_STATE(R_NETWORK_TR_CTRL, cd, enable) |
-               IO_STATE(R_NETWORK_TR_CTRL, retry, enable) |
-               IO_STATE(R_NETWORK_TR_CTRL, pad, enable) |
-               IO_STATE(R_NETWORK_TR_CTRL, crc, enable);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, delay, none);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, cancel, dont);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, cd, enable);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, retry, enable);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, pad, enable);
+       SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, crc, enable);
+       *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
 
        save_flags(flags);
        cli();
@@ -660,7 +702,8 @@ e100_open(struct net_device *dev)
        /* enable the irq's for ethernet DMA */
 
        *R_IRQ_MASK2_SET =
-               IO_STATE(R_IRQ_MASK2_SET, dma1_eop, set); 
+               IO_STATE(R_IRQ_MASK2_SET, dma0_eop, set) |
+               IO_STATE(R_IRQ_MASK2_SET, dma1_eop, set);
 
        *R_IRQ_MASK0_SET =
                IO_STATE(R_IRQ_MASK0_SET, overrun,       set) |
@@ -689,6 +732,14 @@ e100_open(struct net_device *dev)
 
        restore_flags(flags);
        
+       /* Probe for transceiver */
+       if (e100_probe_transceiver())
+               goto grace_exit3;
+
+       /* Start duplex/speed timers */
+       add_timer(&speed_timer);
+       add_timer(&duplex_timer);
+
        /* We are now ready to accept transmit requeusts from
         * the queueing layer of the networking.
         */
@@ -696,6 +747,8 @@ e100_open(struct net_device *dev)
 
        return 0;
 
+grace_exit3:
+       free_irq(NETWORK_STATUS_IRQ_NBR, (void *)dev);
 grace_exit2:
        free_irq(NETWORK_DMA_TX_IRQ_NBR, (void *)dev);
 grace_exit1:
@@ -705,9 +758,38 @@ grace_exit0:
 }
 
 
+static void
+generic_check_speed(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_ADVERTISMENT_REG);
+       if ((data & MDIO_ADVERT_100_FD) ||
+           (data & MDIO_ADVERT_100_HD))
+               current_speed = 100;
+       else
+               current_speed = 10;
+}
+
+static void
+tdk_check_speed(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_TDK_DIAGNOSTIC_REG);
+       current_speed = (data & MDIO_TDK_DIAGNOSTIC_RATE ? 100 : 10);
+}
+
+static void
+broadcom_check_speed(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_AUX_CTRL_STATUS_REG);
+       current_speed = (data & MDIO_BC_SPEED ? 100 : 10);
+}
+
 static void
 e100_check_speed(unsigned long dummy)
 {
+       static int led_initiated = 0;
        unsigned long data;
        int old_speed = current_speed;
 
@@ -715,12 +797,13 @@ e100_check_speed(unsigned long dummy)
        if (!(data & MDIO_LINK_UP_MASK)) {
                current_speed = 0;
        } else {
-               data = e100_get_mdio_reg(MDIO_AUX_CTRL_STATUS_REG);
-               current_speed = (data & MDIO_SPEED ? 100 : 10);
+               transceiver->check_speed();
        }
        
-       if (old_speed != current_speed)
+       if ((old_speed != current_speed) || !led_initiated) {
+               led_initiated = 1;
                e100_set_network_leds(NO_NETWORK_ACTIVITY);
+       }
 
        /* Reinitialize the timer. */
        speed_timer.expires = jiffies + NET_LINK_UP_CHECK_INTERVAL;
@@ -781,29 +864,21 @@ e100_negotiate(void)
 static void
 e100_set_speed(unsigned long speed)
 {
-       current_speed_selection = speed;
-       e100_negotiate();
+       if (speed != current_speed_selection) {
+               current_speed_selection = speed;
+               e100_negotiate();
+       }
 }
 
 static void
 e100_check_duplex(unsigned long dummy)
 {
-       unsigned long data;
-
-       data = e100_get_mdio_reg(MDIO_AUX_CTRL_STATUS_REG);
-        
-       if (data & MDIO_FULL_DUPLEX_IND) {
-               if (!full_duplex) { /* Duplex changed to full? */
-                       full_duplex = 1;
-                       SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG, duplex, full_duplex);
-                       *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
-               }
-       } else { /* half */
-               if (full_duplex) { /* Duplex changed to half? */
-                       full_duplex = 0;
-                       SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG, duplex, full_duplex);
-                       *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
-               }
+       int old_duplex = full_duplex;
+       transceiver->check_duplex();
+       if (old_duplex != full_duplex) {
+               /* Duplex changed */
+               SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG, duplex, full_duplex);
+               *R_NETWORK_REC_CONFIG = network_rec_config_shadow;
        }
 
        /* Reinitialize the timer. */
@@ -811,13 +886,72 @@ e100_check_duplex(unsigned long dummy)
        add_timer(&duplex_timer);
 }
 
+static void
+generic_check_duplex(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_ADVERTISMENT_REG);
+       if ((data & MDIO_ADVERT_100_FD) ||
+           (data & MDIO_ADVERT_10_FD))
+               full_duplex = 1;
+       else
+               full_duplex = 0;
+}
+
+static void
+tdk_check_duplex(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_TDK_DIAGNOSTIC_REG);
+       full_duplex = (data & MDIO_TDK_DIAGNOSTIC_DPLX) ? 1 : 0;
+}
+
+static void
+broadcom_check_duplex(void)
+{
+       unsigned long data;
+       data = e100_get_mdio_reg(MDIO_AUX_CTRL_STATUS_REG);
+       full_duplex = (data & MDIO_BC_FULL_DUPLEX_IND) ? 1 : 0;
+}
+
 static void 
 e100_set_duplex(enum duplex new_duplex)
 {
-       current_duplex = new_duplex;
-       e100_negotiate();
+       if (new_duplex != current_duplex) {
+               current_duplex = new_duplex;
+               e100_negotiate();
+       }
 }
 
+static int
+e100_probe_transceiver(void)
+{
+       unsigned int phyid_high;
+       unsigned int phyid_low;
+       unsigned int oui;
+       struct transceiver_ops* ops = NULL;
+
+       /* Probe MDIO physical address */
+       for (mdio_phy_addr = 0; mdio_phy_addr <= 31; mdio_phy_addr++) {
+               if (e100_get_mdio_reg(MDIO_BASE_STATUS_REG) != 0xffff)
+                       break;
+       }
+       if (mdio_phy_addr == 32)
+                return -ENODEV;
+
+       /* Get manufacturer */
+       phyid_high = e100_get_mdio_reg(MDIO_PHY_ID_HIGH_REG);
+       phyid_low = e100_get_mdio_reg(MDIO_PHY_ID_LOW_REG);
+       oui = (phyid_high << 6) | (phyid_low >> 10);
+
+       for (ops = &transceivers[0]; ops->oui; ops++) {
+               if (ops->oui == oui)
+                       break;
+       }
+       transceiver = ops;
+
+       return 0;
+}
 
 static unsigned short
 e100_get_mdio_reg(unsigned char reg_num)
@@ -827,7 +961,7 @@ e100_get_mdio_reg(unsigned char reg_num)
        int bitCounter;
        
        /* Start of frame, OP Code, Physical Address, Register Address */
-       cmd = (MDIO_START << 14) | (MDIO_READ << 12) | (MDIO_PHYS_ADDR << 7) |
+       cmd = (MDIO_START << 14) | (MDIO_READ << 12) | (mdio_phy_addr << 7) |
                (reg_num << 2);
        
        e100_send_mdio_cmd(cmd, 0);
@@ -848,7 +982,7 @@ e100_set_mdio_reg(unsigned char reg, unsigned short data)
        int bitCounter;
        unsigned short cmd;
 
-       cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (MDIO_PHYS_ADDR << 7) |
+       cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (mdio_phy_addr << 7) |
              (reg << 2);
 
        e100_send_mdio_cmd(cmd, 1);
@@ -916,7 +1050,7 @@ e100_reset_transceiver(void)
 
        data = e100_get_mdio_reg(MDIO_BASE_CONTROL_REG);
 
-       cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (MDIO_PHYS_ADDR << 7) | (MDIO_BASE_CONTROL_REG << 2);
+       cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (mdio_phy_addr << 7) | (MDIO_BASE_CONTROL_REG << 2);
 
        e100_send_mdio_cmd(cmd, 1);
        
@@ -984,7 +1118,6 @@ static int
 e100_send_packet(struct sk_buff *skb, struct net_device *dev)
 {
        struct net_local *np = (struct net_local *)dev->priv;
-       int length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
        unsigned char *buf = skb->data;
        unsigned long flags;
        
@@ -997,15 +1130,12 @@ e100_send_packet(struct sk_buff *skb, struct net_device *dev)
 
        dev->trans_start = jiffies;
        
-       e100_hardware_send_packet(buf, length);
+       e100_hardware_send_packet(buf, skb->len);
 
        myNextTxDesc = phys_to_virt(myNextTxDesc->descr.next);
 
        /* Stop queue if full */
        if (myNextTxDesc == myFirstTxDesc) {
-               /* Enable transmit interrupt to wake up queue */
-               *R_DMA_CH0_CLR_INTR = IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop, do);                
-               *R_IRQ_MASK2_SET = IO_STATE(R_IRQ_MASK2_SET, dma0_eop, set);
                netif_stop_queue(dev);
        }
 
@@ -1026,6 +1156,11 @@ e100rxtx_interrupt(int irq, void *dev_id, struct pt_regs * regs)
        struct net_local *np = (struct net_local *)dev->priv;
        unsigned long irqbits = *R_IRQ_MASK2_RD;
  
+       /* Disable RX/TX IRQs to avoid reentrancy */
+       *R_IRQ_MASK2_CLR =
+         IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr) |
+         IO_STATE(R_IRQ_MASK2_CLR, dma1_eop, clr);
+
        /* Handle received packets */
        if (irqbits & IO_STATE(R_IRQ_MASK2_RD, dma1_eop, active)) {
                /* acknowledge the eop interrupt */
@@ -1069,9 +1204,14 @@ e100rxtx_interrupt(int irq, void *dev_id, struct pt_regs * regs)
        if (irqbits & IO_STATE(R_IRQ_MASK2_RD, dma0_eop, active)) {
                /* acknowledge the eop interrupt and wake up queue */
                *R_DMA_CH0_CLR_INTR = IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop, do);
-               *R_IRQ_MASK2_CLR = IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr);            
                netif_wake_queue(dev);
        }
+
+       /* Enable RX/TX IRQs again */
+       *R_IRQ_MASK2_SET =
+         IO_STATE(R_IRQ_MASK2_SET, dma0_eop, set) |
+         IO_STATE(R_IRQ_MASK2_SET, dma1_eop, set);
+
        return IRQ_HANDLED;
 }
 
@@ -1084,7 +1224,9 @@ e100nw_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 
        /* check for underrun irq */
        if (irqbits & IO_STATE(R_IRQ_MASK0_RD, underrun, active)) { 
-               *R_NETWORK_TR_CTRL = IO_STATE(R_NETWORK_TR_CTRL, clr_error, clr);
+               SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
+               *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
+               SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, nop);
                np->stats.tx_errors++;
                D(printk("ethernet receiver underrun!\n"));
        }
@@ -1096,6 +1238,9 @@ e100nw_interrupt(int irq, void *dev_id, struct pt_regs * regs)
        }
        /* check for excessive collision irq */
        if (irqbits & IO_STATE(R_IRQ_MASK0_RD, excessive_col, active)) { 
+               SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr);
+               *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow;
+               SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, nop);
                *R_NETWORK_TR_CTRL = IO_STATE(R_NETWORK_TR_CTRL, clr_error, clr);
                np->stats.tx_errors++;
                D(printk("ethernet excessive collisions!\n"));
@@ -1210,14 +1355,10 @@ e100_close(struct net_device *dev)
 {
        struct net_local *np = (struct net_local *)dev->priv;
 
-       printk("Closing %s.\n", dev->name);
+       printk(KERN_INFO "Closing %s.\n", dev->name);
 
        netif_stop_queue(dev);
 
-       *R_NETWORK_GEN_CONFIG =
-               IO_STATE(R_NETWORK_GEN_CONFIG, phy,    mii_clk) |
-               IO_STATE(R_NETWORK_GEN_CONFIG, enable, off);
-       
        *R_IRQ_MASK0_CLR =
                IO_STATE(R_IRQ_MASK0_CLR, overrun, clr) |
                IO_STATE(R_IRQ_MASK0_CLR, underrun, clr) |
@@ -1245,6 +1386,10 @@ e100_close(struct net_device *dev)
        update_rx_stats(&np->stats);
        update_tx_stats(&np->stats);
 
+       /* Stop speed/duplex timers */
+       del_timer(&speed_timer);
+       del_timer(&duplex_timer);
+
        return 0;
 }
 
@@ -1259,7 +1404,7 @@ e100_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                case SIOCETHTOOL:
                        return e100_ethtool_ioctl(dev,ifr);
                case SIOCGMIIPHY: /* Get PHY address */
-                       data->phy_id = MDIO_PHYS_ADDR;
+                       data->phy_id = mdio_phy_addr;
                        break;
                case SIOCGMIIREG: /* Read MII register */
                        data->val_out = e100_get_mdio_reg(data->reg_num);
@@ -1278,7 +1423,7 @@ e100_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                case SET_ETH_SPEED_AUTO:              /* Auto negotiate speed */
                        e100_set_speed(0);
                        break;
-               case SET_ETH_DUPLEX_HALF:              /* Hhalf duplex. */
+               case SET_ETH_DUPLEX_HALF:              /* Half duplex. */
                        e100_set_duplex(half);
                        break;
                case SET_ETH_DUPLEX_FULL:              /* Full duplex. */
@@ -1312,12 +1457,12 @@ e100_ethtool_ioctl(struct net_device *dev, struct ifreq *ifr)
                          SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full;
                        ecmd.port = PORT_TP;
                        ecmd.transceiver = XCVR_EXTERNAL;
-                       ecmd.phy_address = MDIO_PHYS_ADDR;
+                       ecmd.phy_address = mdio_phy_addr;
                        ecmd.speed = current_speed;
                        ecmd.duplex = full_duplex ? DUPLEX_FULL : DUPLEX_HALF;
                        ecmd.advertising = ADVERTISED_TP;
                        if (current_duplex == autoneg && current_speed_selection == 0)
-                               ecmd.advertising = ADVERTISED_Autoneg;
+                               ecmd.advertising |= ADVERTISED_Autoneg;
                        else {
                                ecmd.advertising |= 
                                  ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
@@ -1355,7 +1500,7 @@ e100_ethtool_ioctl(struct net_device *dev, struct ifreq *ifr)
                        struct ethtool_drvinfo info;
                        memset((void *) &info, 0, sizeof (info));
                        strncpy(info.driver, "ETRAX 100LX", sizeof(info.driver) - 1);
-                       strncpy(info.version, "$Revision: 1.17 $", sizeof(info.version) - 1);
+                       strncpy(info.version, "$Revision: 1.22 $", sizeof(info.version) - 1);
                        strncpy(info.fw_version, "N/A", sizeof(info.fw_version) - 1);
                        strncpy(info.bus_info, "N/A", sizeof(info.bus_info) - 1);
                        info.regdump_len = 0;
@@ -1595,7 +1740,11 @@ e100_set_network_leds(int active)
 
        if (!current_speed) {
                /* Make LED red, link is down */
+#if defined(CONFIG_ETRAX_NETWORK_RED_ON_NO_CONNECTION)
+               LED_NETWORK_SET(LED_RED);
+#else
                LED_NETWORK_SET(LED_OFF);
+#endif
        }
        else if (light_leds) {
                if (current_speed == 10) {
@@ -1615,4 +1764,26 @@ etrax_init_module(void)
        return etrax_ethernet_init();
 }
 
+static int __init
+e100_boot_setup(char* str)
+{
+       struct sockaddr sa = {0};
+       int i;
+
+       /* Parse the colon separated Ethernet station address */
+       for (i = 0; i <  ETH_ALEN; i++) {
+               unsigned int tmp;
+               if (sscanf(str + 3*i, "%2x", &tmp) != 1) {
+                       printk(KERN_WARNING "Malformed station address");
+                       return 0;
+               }
+               sa.sa_data[i] = (char)tmp;
+       }
+
+       default_mac = sa;
+       return 1;
+}
+
+__setup("etrax100_eth=", e100_boot_setup);
+
 module_init(etrax_init_module);
index f3a5716..1672910 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: gpio.c,v 1.8 2003/07/04 08:27:37 starvik Exp $
+/* $Id: gpio.c,v 1.11 2004/05/14 07:58:03 starvik Exp $
  *
  * Etrax general port I/O device
  *
@@ -9,6 +9,12 @@
  *             Johan Adolfsson  (read/set directions, write, port G)
  *
  * $Log: gpio.c,v $
+ * Revision 1.11  2004/05/14 07:58:03  starvik
+ * Merge of changes from 2.4
+ *
+ * Revision 1.9  2003/09/11 07:29:48  starvik
+ * Merge of Linux 2.6.0-test5
+ *
  * Revision 1.8  2003/07/04 08:27:37  starvik
  * Merge of Linux 2.5.74
  *
@@ -183,6 +189,7 @@ struct gpio_private {
 static struct gpio_private *alarmlist = 0;
 
 static int gpio_some_alarms = 0; /* Set if someone uses alarm */
+static unsigned long gpio_pa_irq_enabled_mask = 0;
 
 /* Port A and B use 8 bit access, but Port G is 32 bit */
 #define NUM_PORTS (GPIO_MINOR_B+1)
@@ -252,13 +259,19 @@ gpio_poll(struct file *file,
        unsigned long data;
        poll_wait(file, &priv->alarm_wq, wait);
        if (priv->minor == GPIO_MINOR_A) {
+               unsigned long flags;
                unsigned long tmp;
                data = *R_PORT_PA_DATA;
                /* PA has support for high level interrupt -
                 * lets activate for those low and with highalarm set
                 */
                tmp = ~data & priv->highalarm & 0xFF;
-               *R_IRQ_MASK1_SET = (tmp << R_IRQ_MASK1_SET__pa0__BITNR);
+               tmp = (tmp << R_IRQ_MASK1_SET__pa0__BITNR);
+               save_flags(flags); cli();
+               gpio_pa_irq_enabled_mask |= tmp;
+               *R_IRQ_MASK1_SET = tmp;
+               restore_flags(flags);
+
        } else if (priv->minor == GPIO_MINOR_B)
                data = *R_PORT_PB_DATA;
        else if (priv->minor == GPIO_MINOR_G)
@@ -312,12 +325,15 @@ gpio_pa_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        unsigned long tmp;
        /* Find what PA interrupts are active */
-       tmp = (*R_IRQ_READ1 >> R_IRQ_READ1__pa0__BITNR) & 0xFF;
+       tmp = (*R_IRQ_READ1);
+
+       /* Find those that we have enabled */
+       tmp &= gpio_pa_irq_enabled_mask;
+
        /* Clear them.. */
-       /* NOTE: Maybe we need to be more careful here if some other
-        * driver uses PA interrupt as well?
-        */
-       *R_IRQ_MASK1_CLR = (tmp << R_IRQ_MASK1_CLR__pa0__BITNR);
+       *R_IRQ_MASK1_CLR = tmp;
+       gpio_pa_irq_enabled_mask &= ~tmp;
+
        if (gpio_some_alarms) {
                return IRQ_RETVAL(etrax_gpio_wake_up_check());
        }
@@ -386,7 +402,7 @@ static int
 gpio_open(struct inode *inode, struct file *filp)
 {
        struct gpio_private *priv;
-       int p = iminor(inode);
+       int p = MINOR(inode->i_rdev);
 
        if (p > GPIO_MINOR_LAST)
                return -EINVAL;
@@ -479,6 +495,7 @@ unsigned long inline setget_input(struct gpio_private *priv, unsigned long arg)
                return ~(*priv->dir_shadow) & 0xFF; /* Only 8 bits */
        } else if (priv->minor == GPIO_MINOR_G) {
                /* We must fiddle with R_GEN_CONFIG to change dir */
+               save_flags(flags); cli();
                if (((arg & dir_g_in_bits) != arg) && 
                    (arg & changeable_dir_g)) {
                        arg &= changeable_dir_g;
@@ -503,16 +520,17 @@ unsigned long inline setget_input(struct gpio_private *priv, unsigned long arg)
                                dir_g_in_bits |= (1<<24);
                                dir_g_out_bits &= ~(1<<24);
                        }
-                       printk("gpio: SETINPUT on port G set "
-                               "genconfig to 0x%08lX "
-                               "in_bits: 0x%08lX "
-                               "out_bits: 0x%08lX\n", 
-                              (unsigned long)genconfig_shadow, 
-                              dir_g_in_bits, dir_g_out_bits);
+                       D(printk(KERN_INFO "gpio: SETINPUT on port G set "
+                                "genconfig to 0x%08lX "
+                                "in_bits: 0x%08lX "
+                                "out_bits: 0x%08lX\n",
+                                (unsigned long)genconfig_shadow,
+                                dir_g_in_bits, dir_g_out_bits));
                        *R_GEN_CONFIG = genconfig_shadow;
                        /* Must be a >120 ns delay before writing this again */
                                
                }
+               restore_flags(flags);
                return dir_g_in_bits;
        }
        return 0;
@@ -529,6 +547,7 @@ unsigned long inline setget_output(struct gpio_private *priv, unsigned long arg)
                return *priv->dir_shadow;
        } else if (priv->minor == GPIO_MINOR_G) {
                /* We must fiddle with R_GEN_CONFIG to change dir */                    
+               save_flags(flags); cli();
                if (((arg & dir_g_out_bits) != arg) &&
                    (arg & changeable_dir_g)) {
                        /* Set bits in genconfig to set to output */
@@ -552,15 +571,16 @@ unsigned long inline setget_output(struct gpio_private *priv, unsigned long arg)
                                dir_g_out_bits |= (1<<24);
                                dir_g_in_bits &= ~(1<<24);
                        }
-                       printk("gpio: SETOUTPUT on port G set "
-                               "genconfig to 0x%08lX "
-                               "in_bits: 0x%08lX "
-                               "out_bits: 0x%08lX\n", 
-                              (unsigned long)genconfig_shadow, 
-                              dir_g_in_bits, dir_g_out_bits);
+                       D(printk(KERN_INFO "gpio: SETOUTPUT on port G set "
+                                "genconfig to 0x%08lX "
+                                "in_bits: 0x%08lX "
+                                "out_bits: 0x%08lX\n",
+                                (unsigned long)genconfig_shadow,
+                                dir_g_in_bits, dir_g_out_bits));
                        *R_GEN_CONFIG = genconfig_shadow;
                        /* Must be a >120 ns delay before writing this again */
                }
+               restore_flags(flags);
                return dir_g_out_bits & 0x7FFFFFFF;
        }
        return 0;
@@ -625,6 +645,20 @@ gpio_ioctl(struct inode *inode, struct file *file,
                // clear alarm for bits with 1 in arg
                priv->highalarm &= ~arg;
                priv->lowalarm  &= ~arg;
+               {
+                       /* Must update gpio_some_alarms */
+                       struct gpio_private *p = alarmlist;
+                       int some_alarms;
+                       some_alarms = 0;
+                       while (p) {
+                               if (p->highalarm | p->lowalarm) {
+                                       some_alarms = 1;
+                                       break;
+                               }
+                               p = p->next;
+                       }
+                       gpio_some_alarms = some_alarms;
+               }
                break;
        case IO_READDIR: /* Use IO_SETGET_INPUT/OUTPUT instead! */
                /* Read direction 0=input 1=output */
@@ -844,9 +878,9 @@ static void __init gpio_init_port_g(void)
        dir_g_in_bits |= (~dir_g_shadow & changeable_dir_g);
 
 
-       printk("GPIO port G: in_bits: 0x%08lX out_bits: 0x%08lX val: %08lX\n",
+       printk(KERN_INFO "GPIO port G: in_bits: 0x%08lX out_bits: 0x%08lX val: %08lX\n",
               dir_g_in_bits, dir_g_out_bits, (unsigned long)*R_PORT_G_DATA);
-       printk("GPIO port G: dir: %08lX changeable: %08lX\n", 
+       printk(KERN_INFO "GPIO port G: dir: %08lX changeable: %08lX\n",
               dir_g_shadow, changeable_dir_g);
 }
 
@@ -883,7 +917,7 @@ gpio_init(void)
 
 #endif
        gpio_init_port_g();
-       printk("ETRAX 100LX GPIO driver v2.5, (c) 2001, 2002 Axis Communications AB\n");
+       printk(KERN_INFO "ETRAX 100LX GPIO driver v2.5, (c) 2001, 2002 Axis Communications AB\n");
        /* We call etrax_gpio_wake_up_check() from timer interrupt and
         * from cpu_idle() in kernel/process.c
         * The check in cpu_idle() reduces latency from ~15 ms to ~6 ms
@@ -891,11 +925,11 @@ gpio_init(void)
         */  
        if (request_irq(TIMER0_IRQ_NBR, gpio_poll_timer_interrupt,
                        SA_SHIRQ | SA_INTERRUPT,"gpio poll", NULL)) {
-               printk("err: timer0 irq for gpio\n");
+               printk(KERN_CRIT "err: timer0 irq for gpio\n");
        }
        if (request_irq(PA_IRQ_NBR, gpio_pa_interrupt,
                        SA_SHIRQ | SA_INTERRUPT,"gpio PA", NULL)) {
-               printk("err: PA irq for gpio\n");
+               printk(KERN_CRIT "err: PA irq for gpio\n");
        }
        
 
index 7731f7d..52a299d 100644 (file)
 *!                                 don't use PB_I2C if DS1302 uses same bits,
 *!                                 use PB.
 *! $Log: i2c.c,v $
+*! Revision 1.7  2004/05/28 09:26:59  starvik
+*! Modified I2C initialization to work in 2.6.
+*!
+*! Revision 1.6  2004/05/14 07:58:03  starvik
+*! Merge of changes from 2.4
+*!
 *! Revision 1.4  2002/12/11 13:13:57  starvik
 *! Added arch/ to v10 specific includes
 *! Added fix from Linux 2.4 in serial.c (flush_to_flip_buffer)
@@ -63,7 +69,7 @@
 *! (C) Copyright 1999-2002 Axis Communications AB, LUND, SWEDEN
 *!
 *!***************************************************************************/
-/* $Id: i2c.c,v 1.4 2002/12/11 13:13:57 starvik Exp $ */
+/* $Id: i2c.c,v 1.7 2004/05/28 09:26:59 starvik Exp $ */
 
 /****************** INCLUDE FILES SECTION ***********************************/
 
@@ -310,6 +316,12 @@ i2c_inbyte(void)
        }
        i2c_clk(I2C_CLOCK_HIGH);
        i2c_delay(CLOCK_HIGH_TIME);
+
+        /*
+        * we leave the clock low, getbyte is usually followed
+        * by sendack/nack, they assume the clock to be low
+        */
+        i2c_clk(I2C_CLOCK_LOW);
        return aBitByte;
 }
 
@@ -371,6 +383,13 @@ i2c_getack(void)
                i2c_delay(CLOCK_HIGH_TIME/2);
        }
 
+       /*
+        * our clock is high now, make sure data is low
+        * before we enable our output. If we keep data high
+        * and enable output, we would generate a stop condition.
+        */
+       i2c_data(I2C_DATA_LOW);
+
        /*
         * end clock pulse
         */
@@ -426,6 +445,37 @@ i2c_sendack(void)
        i2c_dir_in();
 }
 
+/*#---------------------------------------------------------------------------
+*#
+*# FUNCTION NAME: i2c_sendnack
+*#
+*# DESCRIPTION  : Sends NACK on received data
+*#
+*#--------------------------------------------------------------------------*/
+void
+i2c_sendnack(void)
+{
+       /*
+        * enable output
+        */
+       i2c_delay(CLOCK_LOW_TIME);
+       i2c_dir_out();
+       /*
+        * set data high
+        */
+       i2c_data(I2C_DATA_HIGH);
+       /*
+        * generate clock pulse
+        */
+       i2c_delay(CLOCK_HIGH_TIME/6);
+       i2c_clk(I2C_CLOCK_HIGH);
+       i2c_delay(CLOCK_HIGH_TIME);
+       i2c_clk(I2C_CLOCK_LOW);
+       i2c_delay(CLOCK_LOW_TIME);
+
+       i2c_dir_in();
+}
+
 /*#---------------------------------------------------------------------------
 *#
 *# FUNCTION NAME: i2c_writereg
@@ -489,7 +539,7 @@ i2c_writereg(unsigned char theSlave, unsigned char theReg,
        } while(error && cntr--);
 
        i2c_delay(CLOCK_LOW_TIME);
-       
+
        return -error;
 }
 
@@ -557,7 +607,8 @@ i2c_readreg(unsigned char theSlave, unsigned char theReg)
                 */
                b = i2c_inbyte();
                /*
-                * send Ack
+                * last received byte needs to be nacked
+                * instead of acked
                 */
                i2c_sendack();
                /*
@@ -634,11 +685,9 @@ static struct file_operations i2c_fops = {
        .release  = i2c_release,
 };
 
-static int __init
+int __init
 i2c_init(void)
 {
-       int res;
-
        /* Setup and enable the Port B I2C interface */
 
 #ifndef CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C
@@ -656,21 +705,28 @@ i2c_init(void)
                          IO_STATE(R_PORT_PB_DIR, dir0, input)  |
                          IO_STATE(R_PORT_PB_DIR, dir1, output));
 
-       /* register char device */
+       return 0;
+}
+
+static int __init
+i2c_register(void)
+{
+       int res;
 
-       res = register_chrdev(I2C_MAJOR, i2c_name, &i2c_fops);
+       i2c_init();
+       res = register_chrdev(I2C_MAJOR, i2c_name, &i2c_fops);
        if(res < 0) {
                printk(KERN_ERR "i2c: couldn't get a major number.\n");
                return res;
        }
 
-       printk("I2C driver v2.2, (c) 1999-2001 Axis Communications AB\n");
+       printk(KERN_INFO "I2C driver v2.2, (c) 1999-2001 Axis Communications AB\n");
        
        return 0;
 }
 
-/* this makes sure that i2c_init is called during boot */
+/* this makes sure that i2c_register is called during boot */
 
-module_init(i2c_init);
+module_init(i2c_register);
 
 /****************** END OF FILE i2c.c ********************************/
index d0caa9f..4ee9142 100644 (file)
@@ -1,4 +1,6 @@
-/* $Id: i2c.h,v 1.2 2002/11/18 13:16:06 starvik Exp $ */
+/* $Id: i2c.h,v 1.3 2004/05/28 09:26:59 starvik Exp $ */
+
+int i2c_init(void);
 
 /* High level I2C actions */
 int i2c_writereg(unsigned char theSlave, unsigned char theReg, unsigned char theValue);
index 95cfadd..8cf5f62 100644 (file)
@@ -15,7 +15,7 @@
  *
  * Author: Tobias Anderberg <tobiasa@axis.com>.
  *
- * $Id: pcf8563.c,v 1.1 2002/12/12 08:27:26 starvik Exp $
+ * $Id: pcf8563.c,v 1.4 2004/05/28 09:26:59 starvik Exp $
  */
 
 #include <linux/config.h>
@@ -28,6 +28,7 @@
 #include <linux/fs.h>
 #include <linux/ioctl.h>
 #include <linux/delay.h>
+#include <linux/bcd.h>
 
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -39,7 +40,7 @@
 #define PCF8563_MAJOR 121              /* Local major number. */
 #define DEVICE_NAME "rtc"              /* Name which is registered in /proc/devices. */
 #define PCF8563_NAME "PCF8563"
-#define DRIVER_VERSION "$Revision: 1.1 $"
+#define DRIVER_VERSION "$Revision: 1.4 $"
 
 /* I2C bus slave registers. */
 #define RTC_I2C_READ           0xa3
@@ -85,7 +86,12 @@ pcf8563_readreg(int reg)
 void
 pcf8563_writereg(int reg, unsigned char val) 
 {
-       i2c_writereg(RTC_I2C_WRITE,reg,val);
+#ifdef CONFIG_ETRAX_RTC_READONLY
+       if (reg == RTC_CONTROL1 || (reg >= RTC_SECONDS && reg <= RTC_YEAR))
+               return;
+#endif
+
+       rtc_write(reg, val);
 }
 
 void
@@ -120,6 +126,9 @@ int __init
 pcf8563_init(void)
 {
        unsigned char ret;
+
+       i2c_init();
+
        /*
         * First of all we need to reset the chip. This is done by
         * clearing control1, control2 and clk freq, clear the 
@@ -152,14 +161,6 @@ pcf8563_init(void)
        
        if (rtc_write(RTC_WEEKDAY_ALARM, 0x00) < 0)
                goto err;
-
-       if (register_chrdev(PCF8563_MAJOR, DEVICE_NAME, &pcf8563_fops) < 0) {
-               printk(KERN_INFO "%s: Unable to get major numer %d for RTC device.\n", 
-                      PCF8563_NAME, PCF8563_MAJOR);
-               return -1;
-       }
-
-       printk(KERN_INFO "%s Real-Time Clock Driver, %s\n", PCF8563_NAME, DRIVER_VERSION);
         
        /* Check for low voltage, and warn about it.. */
        if (rtc_read(RTC_SECONDS) & 0x80)
@@ -210,9 +211,11 @@ pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned
                        break;
                case RTC_SET_TIME:
                        {
+#ifdef CONFIG_ETRAX_RTC_READONLY
+                               return -EPERM;
+#else
                                int leap;
                                int century;
-                               unsigned long flags;
                                struct rtc_time tm;
 
                                memset(&tm, 0, sizeof (struct rtc_time));
@@ -256,8 +259,35 @@ pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned
                                rtc_write(RTC_SECONDS, tm.tm_sec);
 
                                return 0;
+#endif /* !CONFIG_ETRAX_RTC_READONLY */
                        }
-                       break;
+
+               case RTC_VLOW_RD:
+               {
+                       int vl_bit = 0;
+
+                       if (rtc_read(RTC_SECONDS) & 0x80) {
+                               vl_bit = 1;
+                               printk(KERN_WARNING "%s: RTC Voltage Low - reliable "
+                                      "date/time information is no longer guaranteed!\n",
+                                      PCF8563_NAME);
+                       }
+                       if (copy_to_user((int *) arg, &vl_bit, sizeof(int)))
+                               return -EFAULT;
+
+                       return 0;
+               }
+
+               case RTC_VLOW_SET:
+               {
+                       /* Clear the VL bit in the seconds register */
+                       int ret = rtc_read(RTC_SECONDS);
+
+                       rtc_write(RTC_SECONDS, (ret & 0x7F));
+
+                       return 0;
+               }
+
                default:
                                return -ENOTTY;
        }
@@ -265,5 +295,19 @@ pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned
        return 0;
 }
 
-module_init(pcf8563_init);
+static int __init
+pcf8563_register(void)
+{
+       pcf8563_init();
+       if (register_chrdev(PCF8563_MAJOR, DEVICE_NAME, &pcf8563_fops) < 0) {
+               printk(KERN_INFO "%s: Unable to get major numer %d for RTC device.\n",
+                      PCF8563_NAME, PCF8563_MAJOR);
+               return -1;
+       }
+
+       printk(KERN_INFO "%s Real-Time Clock Driver, %s\n", PCF8563_NAME, DRIVER_VERSION);
+        return 0;
+}
+
+module_init(pcf8563_register);
 module_exit(pcf8563_exit);
index 2822ffb..272795d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: serial.c,v 1.17 2003/07/04 08:27:37 starvik Exp $
+/* $Id: serial.c,v 1.20 2004/05/24 12:00:20 starvik Exp $
  *
  * Serial port driver for the ETRAX 100LX chip
  *
@@ -7,6 +7,16 @@
  *    Many, many authors. Based once upon a time on serial.c for 16x50.
  *
  * $Log: serial.c,v $
+ * Revision 1.20  2004/05/24 12:00:20  starvik
+ * Big merge of stuff from Linux 2.4 (e.g. manual mode for the serial port).
+ *
+ * Revision 1.19  2004/05/17 13:12:15  starvik
+ * Kernel console hook
+ * Big merge from Linux 2.4 still pending.
+ *
+ * Revision 1.18  2003/10/28 07:18:30  starvik
+ * Compiles with debug info
+ *
  * Revision 1.17  2003/07/04 08:27:37  starvik
  * Merge of Linux 2.5.74
  *
  *
  */
 
-static char *serial_version = "$Revision: 1.17 $";
+static char *serial_version = "$Revision: 1.20 $";
 
 #include <linux/config.h>
 #include <linux/version.h>
@@ -447,6 +457,10 @@ static char *serial_version = "$Revision: 1.17 $";
 #error "RX_TIMEOUT_TICKS == 0 not allowed, use 1"
 #endif
 
+#if defined(CONFIG_ETRAX_RS485_ON_PA) && defined(CONFIG_ETRAX_RS485_ON_PORT_G)
+#error "Disable either CONFIG_ETRAX_RS485_ON_PA or CONFIG_ETRAX_RS485_ON_PORT_G"
+#endif
+
 /*
  * All of the compatibilty code so we can compile serial.c against
  * older kernels is hidden in serial_compat.h
@@ -473,7 +487,7 @@ struct tty_driver *serial_driver;
 //#define SERIAL_DEBUG_DATA
 //#define SERIAL_DEBUG_THROTTLE
 //#define SERIAL_DEBUG_IO  /* Debug for Extra control and status pins */
-#define SERIAL_DEBUG_LINE 0 /* What serport we want to debug */
+//#define SERIAL_DEBUG_LINE 0 /* What serport we want to debug */
 
 /* Enable this to use serial interrupts to handle when you
    expect the first received event on the serial port to
@@ -481,14 +495,74 @@ struct tty_driver *serial_driver;
    from eLinux */
 #define SERIAL_HANDLE_EARLY_ERRORS
 
-#define TTY_THROTTLE_LIMIT (TTY_FLIPBUF_SIZE/10)
+/* Defined and used in n_tty.c, but we need it here as well */
+#define TTY_THRESHOLD_THROTTLE 128
 
+/* Due to buffersizes and threshold values, our SERIAL_DESCR_BUF_SIZE
+ * must not be to high or flow control won't work if we leave it to the tty
+ * layer so we have our own throttling in flush_to_flip
+ * TTY_FLIPBUF_SIZE=512,
+ * TTY_THRESHOLD_THROTTLE/UNTHROTTLE=128
+ * BUF_SIZE can't be > 128
+ */
+/* Currently 16 descriptors x 128 bytes = 2048 bytes */
 #define SERIAL_DESCR_BUF_SIZE 256
 
+#define SERIAL_PRESCALE_BASE 3125000 /* 3.125MHz */
+#define DEF_BAUD_BASE SERIAL_PRESCALE_BASE
+
+/* We don't want to load the system with massive fast timer interrupt
+ * on high baudrates so limit it to 250 us (4kHz) */
+#define MIN_FLUSH_TIME_USEC 250
+
 /* Add an x here to log a lot of timer stuff */
 #define TIMERD(x)
-
+/* Debug details of interrupt handling */
+#define DINTR1(x)  /* irq on/off, errors */
+#define DINTR2(x)    /* tx and rx */
+/* Debug flip buffer stuff */
+#define DFLIP(x)
+/* Debug flow control and overview of data flow */
+#define DFLOW(x)
+#define DBAUD(x)
+#define DLOG_INT_TRIG(x)
+
+//#define DEBUG_LOG_INCLUDED
+#ifndef DEBUG_LOG_INCLUDED
 #define DEBUG_LOG(line, string, value)
+#else
+struct debug_log_info
+{
+       unsigned long time;
+       unsigned long timer_data;
+//  int line;
+       const char *string;
+       int value;
+};
+#define DEBUG_LOG_SIZE 4096
+
+struct debug_log_info debug_log[DEBUG_LOG_SIZE];
+int debug_log_pos = 0;
+
+#define DEBUG_LOG(_line, _string, _value) do { \
+  if ((_line) == SERIAL_DEBUG_LINE) {\
+    debug_log_func(_line, _string, _value); \
+  }\
+}while(0)
+
+void debug_log_func(int line, const char *string, int value)
+{
+       if (debug_log_pos < DEBUG_LOG_SIZE) {
+               debug_log[debug_log_pos].time = jiffies;
+               debug_log[debug_log_pos].timer_data = *R_TIMER_DATA;
+//    debug_log[debug_log_pos].line = line;
+               debug_log[debug_log_pos].string = string;
+               debug_log[debug_log_pos].value = value;
+               debug_log_pos++;
+       }
+       /*printk(string, value);*/
+}
+#endif
 
 #ifndef CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS
 /* Default number of timer ticks before flushing rx fifo 
@@ -498,11 +572,14 @@ struct tty_driver *serial_driver;
 #define CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS 5 
 #endif
 
+unsigned long timer_data_to_ns(unsigned long timer_data);
+
 static void change_speed(struct e100_serial *info);
+static void rs_throttle(struct tty_struct * tty);
 static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
 static int rs_write(struct tty_struct * tty, int from_user,
                     const unsigned char *buf, int count);
-static inline int raw_write(struct tty_struct * tty, int from_user,
+extern _INLINE_ int rs_raw_write(struct tty_struct * tty, int from_user,
                             const unsigned char *buf, int count);
 #ifdef CONFIG_ETRAX_RS485
 static int e100_write_rs485(struct tty_struct * tty, int from_user,
@@ -511,7 +588,7 @@ static int e100_write_rs485(struct tty_struct * tty, int from_user,
 static int get_lsr_info(struct e100_serial * info, unsigned int *value);
 
 
-#define DEF_BAUD 0x99   /* 115.2 kbit/s */
+#define DEF_BAUD 115200   /* 115.2 kbit/s */
 #define STD_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
 #define DEF_RX 0x20  /* or SERIAL_CTRL_W >> 8 */
 /* Default value of tx_ctrl register: has txd(bit 7)=1 (idle) as default */
@@ -520,6 +597,7 @@ static int get_lsr_info(struct e100_serial * info, unsigned int *value);
 /* offsets from R_SERIALx_CTRL */
 
 #define REG_DATA 0
+#define REG_DATA_STATUS32 0 /* this is the 32 bit register R_SERIALx_READ */
 #define REG_TR_DATA 0
 #define REG_STATUS 1
 #define REG_TR_CTRL 1
@@ -555,60 +633,162 @@ static int get_lsr_info(struct e100_serial * info, unsigned int *value);
  */
 
 
+/* Mask for the irqs possibly enabled in R_IRQ_MASK1_RD etc. */
+static const unsigned long e100_ser_int_mask = 0
+#ifdef CONFIG_ETRAX_SERIAL_PORT0
+| IO_MASK(R_IRQ_MASK1_RD, ser0_data) | IO_MASK(R_IRQ_MASK1_RD, ser0_ready)
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT1
+| IO_MASK(R_IRQ_MASK1_RD, ser1_data) | IO_MASK(R_IRQ_MASK1_RD, ser1_ready)
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT2
+| IO_MASK(R_IRQ_MASK1_RD, ser2_data) | IO_MASK(R_IRQ_MASK1_RD, ser2_ready)
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT3
+| IO_MASK(R_IRQ_MASK1_RD, ser3_data) | IO_MASK(R_IRQ_MASK1_RD, ser3_ready)
+#endif
+;
+unsigned long r_alt_ser_baudrate_shadow = 0;
+
 /* this is the data for the four serial ports in the etrax100 */
 /*  DMA2(ser2), DMA4(ser3), DMA6(ser0) or DMA8(ser1) */
 /* R_DMA_CHx_CLR_INTR, R_DMA_CHx_FIRST, R_DMA_CHx_CMD */
 
 static struct e100_serial rs_table[] = {
-       { DEF_BAUD, (unsigned char *)R_SERIAL0_CTRL, 1U << 12, /* uses DMA 6 and 7 */
-         R_DMA_CH6_CLR_INTR, R_DMA_CH6_FIRST, R_DMA_CH6_CMD,
-         R_DMA_CH6_STATUS, R_DMA_CH6_HWSW, R_DMA_CH6_DESCR,
-         R_DMA_CH7_CLR_INTR, R_DMA_CH7_FIRST, R_DMA_CH7_CMD,
-         R_DMA_CH7_STATUS, R_DMA_CH7_HWSW, R_DMA_CH7_DESCR,
-         STD_FLAGS, DEF_RX, DEF_TX, 2,
+       { .baud        = DEF_BAUD,
+         .port        = (unsigned char *)R_SERIAL0_CTRL,
+         .irq         = 1U << 12, /* uses DMA 6 and 7 */
+         .oclrintradr = R_DMA_CH6_CLR_INTR,
+         .ofirstadr   = R_DMA_CH6_FIRST,
+         .ocmdadr     = R_DMA_CH6_CMD,
+         .ostatusadr  = R_DMA_CH6_STATUS,
+         .iclrintradr = R_DMA_CH7_CLR_INTR,
+         .ifirstadr   = R_DMA_CH7_FIRST,
+         .icmdadr     = R_DMA_CH7_CMD,
+         .idescradr   = R_DMA_CH7_DESCR,
+         .flags       = STD_FLAGS,
+         .rx_ctrl     = DEF_RX,
+         .tx_ctrl     = DEF_TX,
+         .iseteop     = 2,
 #ifdef CONFIG_ETRAX_SERIAL_PORT0
-          1
+          .enabled  = 1,
+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT
+         .dma_out_enabled = 1,
+#else
+         .dma_out_enabled = 0,
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN
+         .dma_in_enabled = 1,
 #else
-          0
+         .dma_in_enabled = 0
 #endif
+#else
+          .enabled  = 0,
+         .dma_out_enabled = 0,
+         .dma_in_enabled = 0
+#endif
+
 },  /* ttyS0 */
 #ifndef CONFIG_SVINTO_SIM
-       { DEF_BAUD, (unsigned char *)R_SERIAL1_CTRL, 1U << 16, /* uses DMA 8 and 9 */
-         R_DMA_CH8_CLR_INTR, R_DMA_CH8_FIRST, R_DMA_CH8_CMD,
-         R_DMA_CH8_STATUS, R_DMA_CH8_HWSW, R_DMA_CH8_DESCR,
-         R_DMA_CH9_CLR_INTR, R_DMA_CH9_FIRST, R_DMA_CH9_CMD,
-         R_DMA_CH9_STATUS, R_DMA_CH9_HWSW, R_DMA_CH9_DESCR,
-         STD_FLAGS, DEF_RX, DEF_TX, 3 ,
+       { .baud        = DEF_BAUD,
+         .port        = (unsigned char *)R_SERIAL1_CTRL,
+         .irq         = 1U << 16, /* uses DMA 8 and 9 */
+         .oclrintradr = R_DMA_CH8_CLR_INTR,
+         .ofirstadr   = R_DMA_CH8_FIRST,
+         .ocmdadr     = R_DMA_CH8_CMD,
+         .ostatusadr  = R_DMA_CH8_STATUS,
+         .iclrintradr = R_DMA_CH9_CLR_INTR,
+         .ifirstadr   = R_DMA_CH9_FIRST,
+         .icmdadr     = R_DMA_CH9_CMD,
+         .idescradr   = R_DMA_CH9_DESCR,
+         .flags       = STD_FLAGS,
+         .rx_ctrl     = DEF_RX,
+         .tx_ctrl     = DEF_TX,
+         .iseteop     = 3,
 #ifdef CONFIG_ETRAX_SERIAL_PORT1
-          1
+          .enabled  = 1,
+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA8_OUT
+         .dma_out_enabled = 1,
+#else
+         .dma_out_enabled = 0,
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA9_IN
+         .dma_in_enabled = 1,
+#else
+         .dma_in_enabled = 0
+#endif
 #else
-          0
+          .enabled  = 0,
+         .dma_out_enabled = 0,
+         .dma_in_enabled = 0
 #endif
 },  /* ttyS1 */
 
-       { DEF_BAUD, (unsigned char *)R_SERIAL2_CTRL, 1U << 4,  /* uses DMA 2 and 3 */
-         R_DMA_CH2_CLR_INTR, R_DMA_CH2_FIRST, R_DMA_CH2_CMD,
-         R_DMA_CH2_STATUS, R_DMA_CH2_HWSW, R_DMA_CH2_DESCR,
-         R_DMA_CH3_CLR_INTR, R_DMA_CH3_FIRST, R_DMA_CH3_CMD,
-         R_DMA_CH3_STATUS, R_DMA_CH3_HWSW, R_DMA_CH3_DESCR,
-         STD_FLAGS, DEF_RX, DEF_TX, 0,
+       { .baud        = DEF_BAUD,
+         .port        = (unsigned char *)R_SERIAL2_CTRL,
+         .irq         = 1U << 4,  /* uses DMA 2 and 3 */
+         .oclrintradr = R_DMA_CH2_CLR_INTR,
+         .ofirstadr   = R_DMA_CH2_FIRST,
+         .ocmdadr     = R_DMA_CH2_CMD,
+         .ostatusadr  = R_DMA_CH2_STATUS,
+         .iclrintradr = R_DMA_CH3_CLR_INTR,
+         .ifirstadr   = R_DMA_CH3_FIRST,
+         .icmdadr     = R_DMA_CH3_CMD,
+         .idescradr   = R_DMA_CH3_DESCR,
+         .flags       = STD_FLAGS,
+         .rx_ctrl     = DEF_RX,
+         .tx_ctrl     = DEF_TX,
+         .iseteop     = 0,
 #ifdef CONFIG_ETRAX_SERIAL_PORT2
-          1
+          .enabled  = 1,
+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT
+         .dma_out_enabled = 1,
+#else
+         .dma_out_enabled = 0,
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN
+         .dma_in_enabled = 1,
+#else
+         .dma_in_enabled = 0
+#endif
 #else
-          0
+          .enabled  = 0,
+         .dma_out_enabled = 0,
+         .dma_in_enabled = 0
 #endif
  },  /* ttyS2 */
 
-       { DEF_BAUD, (unsigned char *)R_SERIAL3_CTRL, 1U << 8,  /* uses DMA 4 and 5 */
-         R_DMA_CH4_CLR_INTR, R_DMA_CH4_FIRST, R_DMA_CH4_CMD,
-         R_DMA_CH4_STATUS, R_DMA_CH4_HWSW, R_DMA_CH4_DESCR,
-         R_DMA_CH5_CLR_INTR, R_DMA_CH5_FIRST, R_DMA_CH5_CMD,
-         R_DMA_CH5_STATUS, R_DMA_CH5_HWSW, R_DMA_CH5_DESCR,
-         STD_FLAGS, DEF_RX, DEF_TX, 1,
+       { .baud        = DEF_BAUD,
+         .port        = (unsigned char *)R_SERIAL3_CTRL,
+         .irq         = 1U << 8,  /* uses DMA 4 and 5 */
+         .oclrintradr = R_DMA_CH4_CLR_INTR,
+         .ofirstadr   = R_DMA_CH4_FIRST,
+         .ocmdadr     = R_DMA_CH4_CMD,
+         .ostatusadr  = R_DMA_CH4_STATUS,
+         .iclrintradr = R_DMA_CH5_CLR_INTR,
+         .ifirstadr   = R_DMA_CH5_FIRST,
+         .icmdadr     = R_DMA_CH5_CMD,
+         .idescradr   = R_DMA_CH5_DESCR,
+         .flags       = STD_FLAGS,
+         .rx_ctrl     = DEF_RX,
+         .tx_ctrl     = DEF_TX,
+         .iseteop     = 1,
 #ifdef CONFIG_ETRAX_SERIAL_PORT3
-          1
+          .enabled  = 1,
+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT
+         .dma_out_enabled = 1,
 #else
-          0
+         .dma_out_enabled = 0,
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN
+         .dma_in_enabled = 1,
+#else
+         .dma_in_enabled = 0
+#endif
+#else
+          .enabled  = 0,
+         .dma_out_enabled = 0,
+         .dma_in_enabled = 0
 #endif
  }   /* ttyS3 */
 #endif
@@ -616,6 +796,9 @@ static struct e100_serial rs_table[] = {
 
 
 #define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial))
+
+static struct termios *serial_termios[NR_PORTS];
+static struct termios *serial_termios_locked[NR_PORTS];
 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
 static struct fast_timer fast_timers[NR_PORTS];
 #endif
@@ -652,6 +835,9 @@ static struct fast_timer fast_timers_rs485[NR_PORTS];
 #if defined(CONFIG_ETRAX_RS485_ON_PA)
 static int rs485_pa_bit = CONFIG_ETRAX_RS485_ON_PA_BIT;
 #endif
+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
+static int rs485_port_g_bit = CONFIG_ETRAX_RS485_ON_PORT_G_BIT;
+#endif
 #endif
 
 /* Info and macros needed for each ports extra control/status signals. */
@@ -761,7 +947,7 @@ static unsigned char dummy_ser[NR_PORTS] = {0xFF, 0xFF, 0xFF,0xFF};
 #  endif
 #endif
 
-#define SER0_PB_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PB_BIT+CONFIG_ETRAX_SER1_RI_ON_PB_BIT+CONFIG_ETRAX_SER1_DSR_ON_PB_BIT+CONFIG_ETRAX_SER1_CD_ON_PB_BIT)
+#define SER1_PB_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PB_BIT+CONFIG_ETRAX_SER1_RI_ON_PB_BIT+CONFIG_ETRAX_SER1_DSR_ON_PB_BIT+CONFIG_ETRAX_SER1_CD_ON_PB_BIT)
 
 #if SER1_PB_BITSUM != -4
 #  if CONFIG_ETRAX_SER1_DTR_ON_PB_BIT == -1
@@ -1081,15 +1267,9 @@ static const struct control_pins e100_modem_pins[NR_PORTS] =
 };
 #endif /* !CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED */
 
-#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_RS485_ON_PA)
-unsigned char rs485_pa_port = CONFIG_ETRAX_RS485_ON_PA_BIT;
-#endif
-
-
 #define E100_RTS_MASK 0x20
 #define E100_CTS_MASK 0x40
 
-
 /* All serial port signals are active low:
  * active   = 0 -> 3.3V to RS-232 driver -> -12V on RS-232 level
  * inactive = 1 -> 0V   to RS-232 driver -> +12V on RS-232 level
@@ -1151,6 +1331,10 @@ static void update_char_time(struct e100_serial * info)
 
        /* calc timeout */
        info->char_time_usec = ((bits * 1000000) / info->baud) + 1;
+       info->flush_time_usec = 4*info->char_time_usec;
+       if (info->flush_time_usec < MIN_FLUSH_TIME_USEC)
+               info->flush_time_usec = MIN_FLUSH_TIME_USEC;
+
 }
 
 /*
@@ -1250,9 +1434,13 @@ static inline void
 e100_rts(struct e100_serial *info, int set)
 {
 #ifndef CONFIG_SVINTO_SIM
+       unsigned long flags;
+       save_flags(flags);
+       cli();
        info->rx_ctrl &= ~E100_RTS_MASK;
        info->rx_ctrl |= (set ? 0 : E100_RTS_MASK);  /* RTS is active low */
        info->port[REG_REC_CTRL] = info->rx_ctrl;
+       restore_flags(flags);
 #ifdef SERIAL_DEBUG_IO  
        printk("ser%i rts %i\n", info->line, set);
 #endif
@@ -1326,6 +1514,7 @@ e100_disable_rxdma_irq(struct e100_serial *info)
 #ifdef SERIAL_DEBUG_INTR
        printk("rxdma_irq(%d): 0\n",info->line);
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ disable_rxdma_irq %i\n", info->line));
        *R_IRQ_MASK2_CLR = (info->irq << 2) | (info->irq << 3);
 }
 
@@ -1335,30 +1524,33 @@ e100_enable_rxdma_irq(struct e100_serial *info)
 #ifdef SERIAL_DEBUG_INTR
        printk("rxdma_irq(%d): 1\n",info->line);
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ enable_rxdma_irq %i\n", info->line));
        *R_IRQ_MASK2_SET = (info->irq << 2) | (info->irq << 3);
 }
 
 /* the tx DMA uses only dma_descr interrupt */
 
-static inline void
+static _INLINE_ void
 e100_disable_txdma_irq(struct e100_serial *info) 
 {
 #ifdef SERIAL_DEBUG_INTR
        printk("txdma_irq(%d): 0\n",info->line);
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ disable_txdma_irq %i\n", info->line));
        *R_IRQ_MASK2_CLR = info->irq;
 }
 
-static inline void
+static _INLINE_ void
 e100_enable_txdma_irq(struct e100_serial *info) 
 {
 #ifdef SERIAL_DEBUG_INTR
        printk("txdma_irq(%d): 1\n",info->line);
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ enable_txdma_irq %i\n", info->line));
        *R_IRQ_MASK2_SET = info->irq;
 }
 
-static inline void
+static _INLINE_ void
 e100_disable_txdma_channel(struct e100_serial *info)
 {
        unsigned long flags;
@@ -1367,32 +1559,46 @@ e100_disable_txdma_channel(struct e100_serial *info)
         * ( set to something other then serialX)
         */
        save_flags(flags);
-       cli();  
+       cli();
+       DFLOW(DEBUG_LOG(info->line, "disable_txdma_channel %i\n", info->line));
        if (info->line == 0) {
-               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
-               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, unused);
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma6)) ==
+                   IO_STATE(R_GEN_CONFIG, dma6, serial0)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, unused);
+               }
        } else if (info->line == 1) {
-               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma8);
-               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, usb);
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma8)) ==
+                   IO_STATE(R_GEN_CONFIG, dma8, serial1)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma8);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, usb);
+               }
        } else if (info->line == 2) {
-               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma2);
-               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, par0);
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma2)) ==
+                   IO_STATE(R_GEN_CONFIG, dma2, serial2)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma2);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, par0);
+               }
        } else if (info->line == 3) {
-               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma4);
-               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, par1);
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma4)) ==
+                   IO_STATE(R_GEN_CONFIG, dma4, serial3)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma4);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, par1);
+               }
        }
        *R_GEN_CONFIG = genconfig_shadow;
        restore_flags(flags);
 }
 
 
-static inline void
+static _INLINE_ void
 e100_enable_txdma_channel(struct e100_serial *info)
 {
        unsigned long flags;
   
        save_flags(flags);
-       cli();  
+       cli();
+       DFLOW(DEBUG_LOG(info->line, "enable_txdma_channel %i\n", info->line));
        /* Enable output DMA channel for the serial port in question */
        if (info->line == 0) {
                genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
@@ -1411,6 +1617,70 @@ e100_enable_txdma_channel(struct e100_serial *info)
        restore_flags(flags);
 }
 
+static _INLINE_ void
+e100_disable_rxdma_channel(struct e100_serial *info)
+{
+       unsigned long flags;
+
+       /* Disable input DMA channel for the serial port in question
+        * ( set to something other then serialX)
+        */
+       save_flags(flags);
+       cli();
+       if (info->line == 0) {
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma7)) ==
+                   IO_STATE(R_GEN_CONFIG, dma7, serial0)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma7);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, unused);
+               }
+       } else if (info->line == 1) {
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma9)) ==
+                   IO_STATE(R_GEN_CONFIG, dma9, serial1)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma9);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, usb);
+               }
+       } else if (info->line == 2) {
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma3)) ==
+                   IO_STATE(R_GEN_CONFIG, dma3, serial2)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma3);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, par0);
+               }
+       } else if (info->line == 3) {
+               if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma5)) ==
+                   IO_STATE(R_GEN_CONFIG, dma5, serial3)) {
+                       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma5);
+                       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, par1);
+               }
+       }
+       *R_GEN_CONFIG = genconfig_shadow;
+       restore_flags(flags);
+}
+
+
+static _INLINE_ void
+e100_enable_rxdma_channel(struct e100_serial *info)
+{
+       unsigned long flags;
+
+       save_flags(flags);
+       cli();
+       /* Enable input DMA channel for the serial port in question */
+       if (info->line == 0) {
+               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma7);
+               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, serial0);
+       } else if (info->line == 1) {
+               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma9);
+               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, serial1);
+       } else if (info->line == 2) {
+               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma3);
+               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, serial2);
+       } else if (info->line == 3) {
+               genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma5);
+               genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, serial3);
+       }
+       *R_GEN_CONFIG = genconfig_shadow;
+       restore_flags(flags);
+}
 
 #ifdef SERIAL_HANDLE_EARLY_ERRORS
 /* in order to detect and fix errors on the first byte
@@ -1422,6 +1692,7 @@ e100_disable_serial_data_irq(struct e100_serial *info)
 #ifdef SERIAL_DEBUG_INTR
        printk("ser_irq(%d): 0\n",info->line);
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ disable data_irq %i\n", info->line));
        *R_IRQ_MASK1_CLR = (1U << (8+2*info->line));
 }
 
@@ -1434,10 +1705,49 @@ e100_enable_serial_data_irq(struct e100_serial *info)
               (8+2*info->line),
               (1U << (8+2*info->line)));
 #endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ enable data_irq %i\n", info->line));
        *R_IRQ_MASK1_SET = (1U << (8+2*info->line));
 }
 #endif
 
+static inline void
+e100_disable_serial_tx_ready_irq(struct e100_serial *info)
+{
+#ifdef SERIAL_DEBUG_INTR
+       printk("ser_tx_irq(%d): 0\n",info->line);
+#endif
+       DINTR1(DEBUG_LOG(info->line,"IRQ disable ready_irq %i\n", info->line));
+       *R_IRQ_MASK1_CLR = (1U << (8+1+2*info->line));
+}
+
+static inline void
+e100_enable_serial_tx_ready_irq(struct e100_serial *info)
+{
+#ifdef SERIAL_DEBUG_INTR
+       printk("ser_tx_irq(%d): 1\n",info->line);
+       printk("**** %d = %d\n",
+              (8+1+2*info->line),
+              (1U << (8+1+2*info->line)));
+#endif
+       DINTR2(DEBUG_LOG(info->line,"IRQ enable ready_irq %i\n", info->line));
+       *R_IRQ_MASK1_SET = (1U << (8+1+2*info->line));
+}
+
+static inline void e100_enable_rx_irq(struct e100_serial *info)
+{
+       if (info->uses_dma_in)
+               e100_enable_rxdma_irq(info);
+       else
+               e100_enable_serial_data_irq(info);
+}
+static inline void e100_disable_rx_irq(struct e100_serial *info)
+{
+       if (info->uses_dma_in)
+               e100_disable_rxdma_irq(info);
+       else
+               e100_disable_serial_data_irq(info);
+}
+
 #if defined(CONFIG_ETRAX_RS485)
 /* Enable RS-485 mode on selected port. This is UGLY. */
 static int
@@ -1448,10 +1758,23 @@ e100_enable_rs485(struct tty_struct *tty,struct rs485_control *r)
 #if defined(CONFIG_ETRAX_RS485_ON_PA)  
        *R_PORT_PA_DATA = port_pa_data_shadow |= (1 << rs485_pa_bit);
 #endif
+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
+       REG_SHADOW_SET(R_PORT_G_DATA,  port_g_data_shadow,
+                      rs485_port_g_bit, 1);
+#endif
+#if defined(CONFIG_ETRAX_RS485_LTC1387)
+       REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
+                      CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 1);
+       REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
+                      CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 1);
+#endif
 
        info->rs485.rts_on_send = 0x01 & r->rts_on_send;
        info->rs485.rts_after_sent = 0x01 & r->rts_after_sent;
-       info->rs485.delay_rts_before_send = r->delay_rts_before_send;
+       if (r->delay_rts_before_send >= 1000)
+               info->rs485.delay_rts_before_send = 1000;
+       else
+               info->rs485.delay_rts_before_send = r->delay_rts_before_send;
        info->rs485.enabled = r->enabled;
 /*     printk("rts: on send = %i, after = %i, enabled = %i",
                    info->rs485.rts_on_send,
@@ -1491,7 +1814,7 @@ static void rs485_toggle_rts_timer_function(unsigned long data)
        e100_rts(info, info->rs485.rts_after_sent);
 #if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
        e100_enable_rx(info);
-       e100_enable_rxdma_irq(info);
+       e100_enable_rx_irq(info);
 #endif
 }
 #endif
@@ -1513,8 +1836,12 @@ rs_stop(struct tty_struct *tty)
        if (info) {
                unsigned long flags;
                unsigned long xoff;
-               
+
                save_flags(flags); cli();
+               DFLOW(DEBUG_LOG(info->line, "XOFF rs_stop xmit %i\n",
+                               CIRC_CNT(info->xmit.head,
+                                        info->xmit.tail,SERIAL_XMIT_SIZE)));
+
                xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->tty));
                xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, stop);
                if (tty->termios->c_iflag & IXON ) {
@@ -1535,6 +1862,9 @@ rs_start(struct tty_struct *tty)
                unsigned long xoff;
 
                save_flags(flags); cli();
+               DFLOW(DEBUG_LOG(info->line, "XOFF rs_start xmit %i\n",
+                               CIRC_CNT(info->xmit.head,
+                                        info->xmit.tail,SERIAL_XMIT_SIZE)));
                xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(tty));
                xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
                if (tty->termios->c_iflag & IXON ) {
@@ -1542,6 +1872,9 @@ rs_start(struct tty_struct *tty)
                }
        
                *((unsigned long *)&info->port[REG_XOFF]) = xoff;
+               if (!info->uses_dma_out &&
+                   info->xmit.head != info->xmit.tail && info->xmit.buf)
+                       e100_enable_serial_tx_ready_irq(info);
                
                restore_flags(flags);
        }
@@ -1576,6 +1909,8 @@ static _INLINE_ void
 rs_sched_event(struct e100_serial *info,
                                    int event)
 {
+       if (info->event & (1 << event))
+               return;
        info->event |= 1 << event;
        schedule_work(&info->work);
 }
@@ -1592,7 +1927,7 @@ rs_sched_event(struct e100_serial *info,
  */
 
 static void 
-transmit_chars(struct e100_serial *info)
+transmit_chars_dma(struct e100_serial *info)
 {
        unsigned int c, sentl;
        struct etrax_dma_descr *descr;
@@ -1600,11 +1935,11 @@ transmit_chars(struct e100_serial *info)
 #ifdef CONFIG_SVINTO_SIM
        /* This will output too little if tail is not 0 always since
         * we don't reloop to send the other part. Anyway this SHOULD be a
-        * no-op - transmit_chars would never really be called during sim
+        * no-op - transmit_chars_dma would never really be called during sim
         * since rs_write does not write into the xmit buffer then.
         */
        if (info->xmit.tail)
-               printk("Error in serial.c:transmit_chars(), tail!=0\n");
+               printk("Error in serial.c:transmit_chars-dma(), tail!=0\n");
        if (info->xmit.head != info->xmit.tail) {
                SIMCOUT(info->xmit.buf + info->xmit.tail,
                        CIRC_CNT(info->xmit.head,
@@ -1626,7 +1961,7 @@ transmit_chars(struct e100_serial *info)
 #endif
        if (!info->tr_running) {
                /* weirdo... we shouldn't get here! */
-               printk(KERN_WARNING "Achtung: transmit_chars with !tr_running\n");
+               printk(KERN_WARNING "Achtung: transmit_chars_dma with !tr_running\n");
                return;
        }
 
@@ -1642,6 +1977,8 @@ transmit_chars(struct e100_serial *info)
                /* otherwise we find the amount of data sent here */
                sentl = descr->hw_len;
 
+       DFLOW(DEBUG_LOG(info->line, "TX %i done\n", sentl));
+
        /* update stats */
        info->icount.tx += sentl;
 
@@ -1659,6 +1996,13 @@ transmit_chars(struct e100_serial *info)
 
        c = CIRC_CNT_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
 
+       /* Don't send all in one DMA transfer - divide it so we wake up
+        * application before all is sent
+        */
+
+       if (c >= 4*WAKEUP_CHARS)
+               c = c/2;
+
        if (c <= 0) {
                /* our job here is done, don't schedule any new DMA transfer */
                info->tr_running = 0;
@@ -1678,17 +2022,17 @@ transmit_chars(struct e100_serial *info)
 
        /* ok we can schedule a dma send of c chars starting at info->xmit.tail */
        /* set up the descriptor correctly for output */
-
+       DFLOW(DEBUG_LOG(info->line, "TX %i\n", c));
        descr->ctrl = d_int | d_eol | d_wait; /* Wait needed for tty_wait_until_sent() */
        descr->sw_len = c;
        descr->buf = virt_to_phys(info->xmit.buf + info->xmit.tail);
        descr->status = 0;
 
        *info->ofirstadr = virt_to_phys(descr); /* write to R_DMAx_FIRST */
-       *info->ocmdadr = 1;       /* dma command start -> R_DMAx_CMD */
+       *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start);
        
        /* DMA is now running (hopefully) */
-} /* transmit_chars */
+} /* transmit_chars_dma */
 
 static void 
 start_transmit(struct e100_serial *info)
@@ -1702,15 +2046,17 @@ start_transmit(struct e100_serial *info)
        info->tr_descr.hw_len = 0;
        info->tr_descr.status = 0;
        info->tr_running = 1;
-
-       transmit_chars(info);
+       if (info->uses_dma_out)
+               transmit_chars_dma(info);
+       else
+               e100_enable_serial_tx_ready_irq(info);
 } /* start_transmit */
 
 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
 static int serial_fast_timer_started = 0;
 static int serial_fast_timer_expired = 0;
 static void flush_timeout_function(unsigned long data);
-#define START_FLUSH_FAST_TIMER(info, string) {\
+#define START_FLUSH_FAST_TIMER_TIME(info, string, usec) {\
   unsigned long timer_flags; \
   save_flags(timer_flags); \
   cli(); \
@@ -1721,7 +2067,7 @@ static void flush_timeout_function(unsigned long data);
     start_one_shot_timer(&fast_timers[info->line], \
                          flush_timeout_function, \
                          (unsigned long)info, \
-                         info->char_time_usec*4, \
+                         (usec), \
                          string); \
   } \
   else { \
@@ -1729,8 +2075,10 @@ static void flush_timeout_function(unsigned long data);
   } \
   restore_flags(timer_flags); \
 }
+#define START_FLUSH_FAST_TIMER(info, string) START_FLUSH_FAST_TIMER_TIME(info, string, info->flush_time_usec)
 
 #else
+#define START_FLUSH_FAST_TIMER_TIME(info, string, usec)
 #define START_FLUSH_FAST_TIMER(info, string)
 #endif
 
@@ -1775,17 +2123,26 @@ static int
 add_char_and_flag(struct e100_serial *info, unsigned char data, unsigned char flag)
 {
        struct etrax_recv_buffer *buffer;
+       if (info->uses_dma_in) {
+               if (!(buffer = alloc_recv_buffer(4)))
+                       return 0;
 
-       if (!(buffer = alloc_recv_buffer(4)))
-               return 0;
-
-       buffer->length = 1;
-       buffer->error = flag;
-       buffer->buffer[0] = data;
+               buffer->length = 1;
+               buffer->error = flag;
+               buffer->buffer[0] = data;
        
-       append_recv_buffer(info, buffer);
+               append_recv_buffer(info, buffer);
 
-       info->icount.rx++;
+               info->icount.rx++;
+       } else {
+               struct tty_struct *tty = info->tty;
+               *tty->flip.char_buf_ptr = data;
+               *tty->flip.flag_buf_ptr = flag;
+               tty->flip.flag_buf_ptr++;
+               tty->flip.char_buf_ptr++;
+               tty->flip.count++;
+               info->icount.rx++;
+       }
 
        return 1;
 }
@@ -1847,7 +2204,14 @@ handle_all_descr_data(struct e100_serial *info)
                /* Reset the status information */
                descr->status = 0;
 
-               DEBUG_LOG(info->line, "recvl %lu\n", recvl);
+               DFLOW(  DEBUG_LOG(info->line, "RX %lu\n", recvl);
+                       if (info->tty->stopped) {
+                               unsigned char *buf = phys_to_virt(descr->buf);
+                               DEBUG_LOG(info->line, "rx 0x%02X\n", buf[0]);
+                               DEBUG_LOG(info->line, "rx 0x%02X\n", buf[1]);
+                               DEBUG_LOG(info->line, "rx 0x%02X\n", buf[2]);
+                       }
+                       );
 
                /* update stats */
                info->icount.rx += recvl;
@@ -1859,7 +2223,7 @@ handle_all_descr_data(struct e100_serial *info)
 }
 
 static _INLINE_ void 
-receive_chars(struct e100_serial *info)
+receive_chars_dma(struct e100_serial *info)
 {
        struct tty_struct *tty;
        unsigned char rstat;
@@ -1881,7 +2245,8 @@ receive_chars(struct e100_serial *info)
                return;
 
 #ifdef SERIAL_HANDLE_EARLY_ERRORS
-       e100_enable_serial_data_irq(info);
+       if (info->uses_dma_in)
+               e100_enable_serial_data_irq(info);
 #endif 
 
        if (info->errorcode == ERRCODE_INSERT_BREAK)
@@ -1891,6 +2256,9 @@ receive_chars(struct e100_serial *info)
 
        /* Read the status register to detect errors */
        rstat = info->port[REG_STATUS];
+       if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {
+               DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat));
+       }
 
        if (rstat & SER_ERROR_MASK) {
                /* If we got an error, we must reset it by reading the
@@ -1959,16 +2327,16 @@ start_receive(struct e100_serial *info)
         */
        return;
 #endif
-
-       /* reset the input dma channel to be sure it works */
-
-       *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
-       while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
-              IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
-
        info->tty->flip.count = 0;
+       if (info->uses_dma_in) {
+               /* reset the input dma channel to be sure it works */
+
+               *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
+               while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
+                      IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
 
-       start_recv_dma(info);
+               start_recv_dma(info);
+       }
 }
 
 
@@ -2014,27 +2382,27 @@ tr_interrupt(int irq, void *dev_id, struct pt_regs * regs)
        
        for (i = 0; i < NR_PORTS; i++) {
                info = rs_table + i;
-               if (!info->enabled || !info->uses_dma
+               if (!info->enabled || !info->uses_dma_out)
                        continue; 
                /* check for dma_descr (don't need to check for dma_eop in output dma for serial */
                if (ireg & info->irq) {  
                        handled = 1;
                        /* we can send a new dma bunch. make it so. */
-                       DEBUG_LOG(info->line, "tr_interrupt %i\n", i);
+                       DINTR2(DEBUG_LOG(info->line, "tr_interrupt %i\n", i));
                        /* Read jiffies_usec first, 
                         * we want this time to be as late as possible
                         */
                        PROCSTAT(ser_stat[info->line].tx_dma_ints++);
                        info->last_tx_active_usec = GET_JIFFIES_USEC();
                        info->last_tx_active = jiffies;
-                       transmit_chars(info);
+                       transmit_chars_dma(info);
                }
                
                /* FIXME: here we should really check for a change in the
                   status lines and if so call status_handle(info) */
        }
        return IRQ_RETVAL(handled);
-}
+} /* tr_interrupt */
 
 /* dma input channel interrupt handler */
 
@@ -2054,7 +2422,7 @@ rec_interrupt(int irq, void *dev_id, struct pt_regs * regs)
                const char *s = "What? rec_interrupt in simulator??\n";
                SIMCOUT(s,strlen(s));
        }
-       return;
+       return IRQ_HANDLED;
 #endif
        
        /* find out the line that caused this irq and get it from rs_table */
@@ -2063,20 +2431,20 @@ rec_interrupt(int irq, void *dev_id, struct pt_regs * regs)
        
        for (i = 0; i < NR_PORTS; i++) {
                info = rs_table + i;
-               if (!info->enabled || !info->uses_dma
+               if (!info->enabled || !info->uses_dma_in)
                        continue; 
                /* check for both dma_eop and dma_descr for the input dma channel */
                if (ireg & ((info->irq << 2) | (info->irq << 3))) {
                        handled = 1; 
                        /* we have received something */
-                       receive_chars(info);
+                       receive_chars_dma(info);
                }
                
                /* FIXME: here we should really check for a change in the
                   status lines and if so call status_handle(info) */
        }
        return IRQ_RETVAL(handled);
-}
+} /* rec_interrupt */
 
 static _INLINE_ int
 force_eop_if_needed(struct e100_serial *info)
@@ -2116,20 +2484,21 @@ force_eop_if_needed(struct e100_serial *info)
        if (!info->forced_eop) {
                info->forced_eop = 1;
                PROCSTAT(ser_stat[info->line].timeout_flush_cnt++);
-               DEBUG_LOG(info->line, "timeout EOP %i\n", info->line);
+               TIMERD(DEBUG_LOG(info->line, "timeout EOP %i\n", info->line));
                FORCE_EOP(info);
        }
 
        return 1;
 }
 
-static _INLINE_ void
+extern _INLINE_ void
 flush_to_flip_buffer(struct e100_serial *info)
 {
        struct tty_struct *tty;
        struct etrax_recv_buffer *buffer;
        unsigned int length;
        unsigned long flags;
+       int max_flip_size;
 
        if (!info->first_recv_buffer)
                return;
@@ -2143,12 +2512,46 @@ flush_to_flip_buffer(struct e100_serial *info)
        }
 
        length = tty->flip.count;
+       /* Don't flip more than the ldisc has room for.
+        * The return value from ldisc.receive_room(tty) - might not be up to
+        * date, the previous flip of up to TTY_FLIPBUF_SIZE might be on the
+        * processed and not accounted for yet.
+        * Since we use DMA, 1 SERIAL_DESCR_BUF_SIZE could be on the way.
+        * Lets buffer data here and let flow control take care of it.
+        * Since we normally flip large chunks, the ldisc don't react
+        * with throttle until too late if we flip to much.
+        */
+       max_flip_size = tty->ldisc.receive_room(tty);
+       if (max_flip_size < 0)
+               max_flip_size = 0;
+       if (max_flip_size <= (TTY_FLIPBUF_SIZE +         /* Maybe not accounted for */
+                             length + info->recv_cnt +  /* We have this queued */
+                             2*SERIAL_DESCR_BUF_SIZE +    /* This could be on the way */
+                             TTY_THRESHOLD_THROTTLE)) { /* Some slack */
+               /* check TTY_THROTTLED first so it indicates our state */
+               if (!test_and_set_bit(TTY_THROTTLED, &tty->flags)) {
+                       DFLOW(DEBUG_LOG(info->line,"flush_to_flip throttles room %lu\n", max_flip_size));
+                       rs_throttle(tty);
+               }
+#if 0
+               else if (max_flip_size <= (TTY_FLIPBUF_SIZE +         /* Maybe not accounted for */
+                                          length + info->recv_cnt +  /* We have this queued */
+                                          SERIAL_DESCR_BUF_SIZE +    /* This could be on the way */
+                                          TTY_THRESHOLD_THROTTLE)) { /* Some slack */
+                       DFLOW(DEBUG_LOG(info->line,"flush_to_flip throttles again! %lu\n", max_flip_size));
+                       rs_throttle(tty);
+               }
+#endif
+       }
 
-       while ((buffer = info->first_recv_buffer) && length < TTY_FLIPBUF_SIZE) {
+       if (max_flip_size > TTY_FLIPBUF_SIZE)
+               max_flip_size = TTY_FLIPBUF_SIZE;
+
+       while ((buffer = info->first_recv_buffer) && length < max_flip_size) {
                unsigned int count = buffer->length;
 
-               if (length + count > TTY_FLIPBUF_SIZE)
-                       count = TTY_FLIPBUF_SIZE - length;
+               if (length + count > max_flip_size)
+                       count = max_flip_size - length;
 
                memcpy(tty->flip.char_buf_ptr + length, buffer->buffer, count);
                memset(tty->flip.flag_buf_ptr + length, TTY_NORMAL, count);
@@ -2156,6 +2559,7 @@ flush_to_flip_buffer(struct e100_serial *info)
 
                length += count;
                info->recv_cnt -= count;
+               DFLIP(DEBUG_LOG(info->line,"flip: %i\n", length));
 
                if (count == buffer->length) {
                        info->first_recv_buffer = buffer->next;
@@ -2171,9 +2575,30 @@ flush_to_flip_buffer(struct e100_serial *info)
                info->last_recv_buffer = NULL;
 
        tty->flip.count = length;
-
+       DFLIP(if (tty->ldisc.chars_in_buffer(tty) > 3500) {
+               DEBUG_LOG(info->line, "ldisc %lu\n",
+                         tty->ldisc.chars_in_buffer(tty));
+               DEBUG_LOG(info->line, "flip.count %lu\n",
+                         tty->flip.count);
+             }
+             );
        restore_flags(flags);
 
+       DFLIP(
+         if (1) {
+
+                 if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
+                         DEBUG_LOG(info->line, "*** TTY_DONT_FLIP set flip.count %i ***\n", tty->flip.count);
+                         DEBUG_LOG(info->line, "*** recv_cnt %i\n", info->recv_cnt);
+                 } else {
+                 }
+                 DEBUG_LOG(info->line, "*** rxtot %i\n", info->icount.rx);
+                 DEBUG_LOG(info->line, "ldisc %lu\n", tty->ldisc.chars_in_buffer(tty));
+                 DEBUG_LOG(info->line, "room  %lu\n", tty->ldisc.receive_room(tty));
+         }
+
+       );
+
        /* this includes a check for low-latency */
        tty_flip_buffer_push(tty);
 }
@@ -2181,12 +2606,19 @@ flush_to_flip_buffer(struct e100_serial *info)
 static _INLINE_ void
 check_flush_timeout(struct e100_serial *info)
 {
-       force_eop_if_needed(info);
-
+       /* Flip what we've got (if we can) */
        flush_to_flip_buffer(info);
 
+       /* We might need to flip later, but not to fast
+        * since the system is busy processing input... */
        if (info->first_recv_buffer)
-               START_FLUSH_FAST_TIMER(info, "flip");
+               START_FLUSH_FAST_TIMER_TIME(info, "flip", 2000);
+
+       /* Force eop last, since data might have come while we're processing
+        * and if we started the slow timer above, we won't start a fast
+        * below.
+        */
+       force_eop_if_needed(info);
 }
 
 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
@@ -2222,7 +2654,7 @@ timed_flush_handler(unsigned long ptr)
        
        for (i = 0; i < NR_PORTS; i++) {
                info = rs_table + i;
-               if (info->uses_dma
+               if (info->uses_dma_in)
                        check_flush_timeout(info);
        }
 
@@ -2301,14 +2733,158 @@ TODO: The break will be delayed until an F or V character is received.
 
 */
 
-extern irqreturn_t _INLINE_ handle_ser_interrupt(struct e100_serial *info)
+extern _INLINE_
+struct e100_serial * handle_ser_rx_interrupt_no_dma(struct e100_serial *info)
 {
-       unsigned char rstat = info->port[REG_STATUS];
+       unsigned long data_read;
+       struct tty_struct *tty = info->tty;
+
+       if (!tty) {
+               printk("!NO TTY!\n");
+               return info;
+       }
+       if (tty->flip.count >= TTY_FLIPBUF_SIZE - TTY_THRESHOLD_THROTTLE) {
+               /* check TTY_THROTTLED first so it indicates our state */
+               if (!test_and_set_bit(TTY_THROTTLED, &tty->flags)) {
+                       DFLOW(DEBUG_LOG(info->line, "rs_throttle flip.count: %i\n", tty->flip.count));
+                       rs_throttle(tty);
+               }
+       }
+       if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
+               DEBUG_LOG(info->line, "force FLIP! %i\n", tty->flip.count);
+               tty->flip.work.func((void *) tty);
+               if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
+                       DEBUG_LOG(info->line, "FLIP FULL! %i\n", tty->flip.count);
+                       return info;            /* if TTY_DONT_FLIP is set */
+               }
+       }
+       /* Read data and status at the same time */
+       data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]);
+more_data:
+       if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) {
+               DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0));
+       }
+       DINTR2(DEBUG_LOG(info->line, "ser_rx   %c\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)));
+
+       if (data_read & ( IO_MASK(R_SERIAL0_READ, framing_err) |
+                         IO_MASK(R_SERIAL0_READ, par_err) |
+                         IO_MASK(R_SERIAL0_READ, overrun) )) {
+               /* An error */
+               info->last_rx_active_usec = GET_JIFFIES_USEC();
+               info->last_rx_active = jiffies;
+               DINTR1(DEBUG_LOG(info->line, "ser_rx err stat_data %04X\n", data_read));
+               DLOG_INT_TRIG(
+               if (!log_int_trig1_pos) {
+                       log_int_trig1_pos = log_int_pos;
+                       log_int(rdpc(), 0, 0);
+               }
+               );
+
+
+               if ( ((data_read & IO_MASK(R_SERIAL0_READ, data_in)) == 0) &&
+                    (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) ) {
+                       /* Most likely a break, but we get interrupts over and
+                        * over again.
+                        */
+
+                       if (!info->break_detected_cnt) {
+                               DEBUG_LOG(info->line, "#BRK start\n", 0);
+                       }
+                       if (data_read & IO_MASK(R_SERIAL0_READ, rxd)) {
+                               /* The RX pin is high now, so the break
+                                * must be over, but....
+                                * we can't really know if we will get another
+                                * last byte ending the break or not.
+                                * And we don't know if the byte (if any) will
+                                * have an error or look valid.
+                                */
+                               DEBUG_LOG(info->line, "# BL BRK\n", 0);
+                               info->errorcode = ERRCODE_INSERT_BREAK;
+                       }
+                       info->break_detected_cnt++;
+               } else {
+                       /* The error does not look like a break, but could be
+                        * the end of one
+                        */
+                       if (info->break_detected_cnt) {
+                               DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt);
+                               info->errorcode = ERRCODE_INSERT_BREAK;
+                       } else {
+                               if (info->errorcode == ERRCODE_INSERT_BREAK) {
+                                       info->icount.brk++;
+                                       *tty->flip.char_buf_ptr = 0;
+                                       *tty->flip.flag_buf_ptr = TTY_BREAK;
+                                       tty->flip.flag_buf_ptr++;
+                                       tty->flip.char_buf_ptr++;
+                                       tty->flip.count++;
+                                       info->icount.rx++;
+                               }
+                               *tty->flip.char_buf_ptr = IO_EXTRACT(R_SERIAL0_READ, data_in, data_read);
+
+                               if (data_read & IO_MASK(R_SERIAL0_READ, par_err)) {
+                                       info->icount.parity++;
+                                       *tty->flip.flag_buf_ptr = TTY_PARITY;
+                               } else if (data_read & IO_MASK(R_SERIAL0_READ, overrun)) {
+                                       info->icount.overrun++;
+                                       *tty->flip.flag_buf_ptr = TTY_OVERRUN;
+                               } else if (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) {
+                                       info->icount.frame++;
+                                       *tty->flip.flag_buf_ptr = TTY_FRAME;
+                               }
+                               info->errorcode = 0;
+                       }
+                       info->break_detected_cnt = 0;
+               }
+       } else if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) {
+               /* No error */
+               DLOG_INT_TRIG(
+               if (!log_int_trig1_pos) {
+                       if (log_int_pos >= log_int_size) {
+                               log_int_pos = 0;
+                       }
+                       log_int_trig0_pos = log_int_pos;
+                       log_int(rdpc(), 0, 0);
+               }
+               );
+               *tty->flip.char_buf_ptr = IO_EXTRACT(R_SERIAL0_READ, data_in, data_read);
+               *tty->flip.flag_buf_ptr = 0;
+       } else {
+               DEBUG_LOG(info->line, "ser_rx int but no data_avail  %08lX\n", data_read);
+       }
+
+
+       tty->flip.flag_buf_ptr++;
+       tty->flip.char_buf_ptr++;
+       tty->flip.count++;
+       info->icount.rx++;
+       data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]);
+       if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) {
+               DEBUG_LOG(info->line, "ser_rx   %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read));
+               goto more_data;
+       }
+
+       tty_flip_buffer_push(info->tty);
+       return info;
+}
+
+extern _INLINE_
+struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info)
+{
+       unsigned char rstat;
 
 #ifdef SERIAL_DEBUG_INTR
        printk("Interrupt from serport %d\n", i);
 #endif
 /*     DEBUG_LOG(info->line, "ser_interrupt stat %03X\n", rstat | (i << 8)); */
+       if (!info->uses_dma_in) {
+               return handle_ser_rx_interrupt_no_dma(info);
+       }
+       /* DMA is used */
+       rstat = info->port[REG_STATUS];
+       if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {
+               DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0));
+       }
+
        if (rstat & SER_ERROR_MASK) {
                unsigned char data;
 
@@ -2318,7 +2894,8 @@ extern irqreturn_t _INLINE_ handle_ser_interrupt(struct e100_serial *info)
                 * data_in field
                 */
                data = info->port[REG_DATA];
-
+               DINTR1(DEBUG_LOG(info->line, "ser_rx!  %c\n", data));
+               DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat));
                if (!data && (rstat & SER_FRAMING_ERR_MASK)) {
                        /* Most likely a break, but we get interrupts over and
                         * over again.
@@ -2347,15 +2924,22 @@ extern irqreturn_t _INLINE_ handle_ser_interrupt(struct e100_serial *info)
                                DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt);
                                info->errorcode = ERRCODE_INSERT_BREAK;
                        } else {
-                               if (info->errorcode == ERRCODE_INSERT_BREAK)
+                               if (info->errorcode == ERRCODE_INSERT_BREAK) {
+                                       info->icount.brk++;
                                        add_char_and_flag(info, '\0', TTY_BREAK);
+                               }
 
-                               if (rstat & SER_PAR_ERR_MASK)
+                               if (rstat & SER_PAR_ERR_MASK) {
+                                       info->icount.parity++;
                                        add_char_and_flag(info, data, TTY_PARITY);
-                               else if (rstat & SER_OVERRUN_MASK)
+                               } else if (rstat & SER_OVERRUN_MASK) {
+                                       info->icount.overrun++;
                                        add_char_and_flag(info, data, TTY_OVERRUN);
-                               else if (rstat & SER_FRAMING_ERR_MASK)
+                               } else if (rstat & SER_FRAMING_ERR_MASK) {
+                                       info->icount.frame++;
                                        add_char_and_flag(info, data, TTY_FRAME);
+                               }
+
                                info->errorcode = 0;
                        }
                        info->break_detected_cnt = 0;
@@ -2379,7 +2963,7 @@ extern irqreturn_t _INLINE_ handle_ser_interrupt(struct e100_serial *info)
                        if (elapsed_usec < 2*info->char_time_usec) {
                                DEBUG_LOG(info->line, "FBRK %i\n", info->line);
                                /* Report as BREAK (error) and let
-                                * receive_chars() handle it
+                                * receive_chars_dma() handle it
                                 */
                                info->errorcode = ERRCODE_SET_BREAK;
                        } else {
@@ -2392,38 +2976,196 @@ extern irqreturn_t _INLINE_ handle_ser_interrupt(struct e100_serial *info)
                printk("** OK, disabling ser_interrupts\n");
 #endif
                e100_disable_serial_data_irq(info);
-
+               DINTR2(DEBUG_LOG(info->line, "ser_rx OK %d\n", info->line));
                info->break_detected_cnt = 0;
 
                PROCSTAT(ser_stat[info->line].ser_ints_ok_cnt++);
-               DEBUG_LOG(info->line, "ser_int OK %d\n", info->line);
        }
-
        /* Restarting the DMA never hurts */
        *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart);
        START_FLUSH_FAST_TIMER(info, "ser_int");
-       return IRQ_HANDLED;
-} /* handle_ser_interrupt */
+       return info;
+} /* handle_ser_rx_interrupt */
+
+extern _INLINE_ void handle_ser_tx_interrupt(struct e100_serial *info)
+{
+       unsigned long flags;
+
+       if (info->x_char) {
+               unsigned char rstat;
+               DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char));
+               save_flags(flags); cli();
+               rstat = info->port[REG_STATUS];
+               DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat));
+
+               info->port[REG_TR_DATA] = info->x_char;
+               info->icount.tx++;
+               info->x_char = 0;
+               /* We must enable since it is disabled in ser_interrupt */
+               e100_enable_serial_tx_ready_irq(info);
+               restore_flags(flags);
+               return;
+       }
+       if (info->uses_dma_out) {
+               unsigned char rstat;
+               int i;
+               /* We only use normal tx interrupt when sending x_char */
+               DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0));
+               save_flags(flags); cli();
+               rstat = info->port[REG_STATUS];
+               DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat));
+               e100_disable_serial_tx_ready_irq(info);
+               if (info->tty->stopped)
+                       rs_stop(info->tty);
+               /* Enable the DMA channel and tell it to continue */
+               e100_enable_txdma_channel(info);
+               /* Wait 12 cycles before doing the DMA command */
+               for(i = 6;  i > 0; i--)
+                       nop();
+
+               *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, continue);
+               restore_flags(flags);
+               return;
+       }
+       /* Normal char-by-char interrupt */
+       if (info->xmit.head == info->xmit.tail
+           || info->tty->stopped
+           || info->tty->hw_stopped) {
+               DFLOW(DEBUG_LOG(info->line, "tx_int: stopped %i\n", info->tty->stopped));
+               e100_disable_serial_tx_ready_irq(info);
+               info->tr_running = 0;
+               return;
+       }
+       DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail]));
+       /* Send a byte, rs485 timing is critical so turn of ints */
+       save_flags(flags); cli();
+       info->port[REG_TR_DATA] = info->xmit.buf[info->xmit.tail];
+       info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
+       info->icount.tx++;
+       if (info->xmit.head == info->xmit.tail) {
+#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER)
+               if (info->rs485.enabled) {
+                       /* Set a short timer to toggle RTS */
+                       start_one_shot_timer(&fast_timers_rs485[info->line],
+                                            rs485_toggle_rts_timer_function,
+                                            (unsigned long)info,
+                                            info->char_time_usec*2,
+                                            "RS-485");
+               }
+#endif /* RS485 */
+               info->last_tx_active_usec = GET_JIFFIES_USEC();
+               info->last_tx_active = jiffies;
+               e100_disable_serial_tx_ready_irq(info);
+               info->tr_running = 0;
+               DFLOW(DEBUG_LOG(info->line, "tx_int: stop2\n", 0));
+       } else {
+               /* We must enable since it is disabled in ser_interrupt */
+               e100_enable_serial_tx_ready_irq(info);
+       }
+       restore_flags(flags);
+
+       if (CIRC_CNT(info->xmit.head,
+                    info->xmit.tail,
+                    SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
+               rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
 
+} /* handle_ser_tx_interrupt */
+
+/* result of time measurements:
+ * RX duration 54-60 us when doing something, otherwise 6-9 us
+ * ser_int duration: just sending: 8-15 us normally, up to 73 us
+ */
 static irqreturn_t
 ser_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
+       static volatile int tx_started = 0;
        struct e100_serial *info;
        int i;
+       unsigned long flags;
+       unsigned long irq_mask1_rd;
+       unsigned long data_mask = (1 << (8+2*0)); /* ser0 data_avail */
        int handled = 0;
+       static volatile unsigned long reentered_ready_mask = 0;
 
+       save_flags(flags); cli();
+       irq_mask1_rd = *R_IRQ_MASK1_RD;
+       /* First handle all rx interrupts with ints disabled */
+       info = rs_table;
+       irq_mask1_rd &= e100_ser_int_mask;
        for (i = 0; i < NR_PORTS; i++) {
-               info = rs_table + i;
-
-               if (!info->enabled || !info->uses_dma) 
-                       continue; 
-
-               /* Which line caused the irq? */
-               if (*R_IRQ_MASK1_RD & (1U << (8+2*info->line))) { 
+               /* Which line caused the data irq? */
+               if (irq_mask1_rd & data_mask) {
                        handled = 1;
-                       handle_ser_interrupt(info);
+                       handle_ser_rx_interrupt(info);
+               }
+               info += 1;
+               data_mask <<= 2;
+       }
+       /* Handle tx interrupts with interrupts enabled so we
+        * can take care of new data interrupts while transmitting
+        * We protect the tx part with the tx_started flag.
+        * We disable the tr_ready interrupts we are about to handle and
+        * unblock the serial interrupt so new serial interrupts may come.
+        *
+        * If we get a new interrupt:
+        *  - it migth be due to synchronous serial ports.
+        *  - serial irq will be blocked by general irq handler.
+        *  - async data will be handled above (sync will be ignored).
+        *  - tx_started flag will prevent us from trying to send again and
+        *    we will exit fast - no need to unblock serial irq.
+        *  - Next (sync) serial interrupt handler will be runned with
+        *    disabled interrupt due to restore_flags() at end of function,
+        *    so sync handler will not be preempted or reentered.
+        */
+       if (!tx_started) {
+               unsigned long ready_mask;
+               unsigned long
+               tx_started = 1;
+               /* Only the tr_ready interrupts left */
+               irq_mask1_rd &= (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) |
+                                IO_MASK(R_IRQ_MASK1_RD, ser1_ready) |
+                                IO_MASK(R_IRQ_MASK1_RD, ser2_ready) |
+                                IO_MASK(R_IRQ_MASK1_RD, ser3_ready));
+               while (irq_mask1_rd) {
+                       /* Disable those we are about to handle */
+                       *R_IRQ_MASK1_CLR = irq_mask1_rd;
+                       /* Unblock the serial interrupt */
+                       *R_VECT_MASK_SET = IO_STATE(R_VECT_MASK_SET, serial, set);
+
+                       sti();
+                       ready_mask = (1 << (8+1+2*0)); /* ser0 tr_ready */
+                       info = rs_table;
+                       for (i = 0; i < NR_PORTS; i++) {
+                               /* Which line caused the ready irq? */
+                               if (irq_mask1_rd & ready_mask) {
+                                       handled = 1;
+                                       handle_ser_tx_interrupt(info);
+                               }
+                               info += 1;
+                               ready_mask <<= 2;
+                       }
+                       /* handle_ser_tx_interrupt enables tr_ready interrupts */
+                       cli();
+                       /* Handle reentered TX interrupt */
+                       irq_mask1_rd = reentered_ready_mask;
+               }
+               cli();
+               tx_started = 0;
+       } else {
+               unsigned long ready_mask;
+               ready_mask = irq_mask1_rd & (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) |
+                                            IO_MASK(R_IRQ_MASK1_RD, ser1_ready) |
+                                            IO_MASK(R_IRQ_MASK1_RD, ser2_ready) |
+                                            IO_MASK(R_IRQ_MASK1_RD, ser3_ready));
+               if (ready_mask) {
+                       reentered_ready_mask |= ready_mask;
+                       /* Disable those we are about to handle */
+                       *R_IRQ_MASK1_CLR = ready_mask;
+                       DFLOW(DEBUG_LOG(SERIAL_DEBUG_LINE, "ser_int reentered with TX %X\n", ready_mask));
                }
        }
+
+       restore_flags(flags);
        return IRQ_RETVAL(handled);
 } /* ser_interrupt */
 #endif
@@ -2489,7 +3231,7 @@ startup(struct e100_serial * info)
                info->xmit.buf = (unsigned char *) xmit_page;
 
 #ifdef SERIAL_DEBUG_OPEN
-       printk("starting up ttyS%d (xmit_buf 0x%p, recv_buf 0x%p)...\n", info->line, info->xmit.buf, info->recv.buf);
+       printk("starting up ttyS%d (xmit_buf 0x%p)...\n", info->line, info->xmit.buf);
 #endif
 
 #ifdef CONFIG_SVINTO_SIM
@@ -2520,24 +3262,39 @@ startup(struct e100_serial * info)
         * Reset the DMA channels and make sure their interrupts are cleared
         */
 
-       info->uses_dma = 1;
-       *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
-       *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
+       if (info->dma_in_enabled) {
+               info->uses_dma_in = 1;
+               e100_enable_rxdma_channel(info);
 
-       /* Wait until reset cycle is complete */
-       while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
-              IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
+               *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
 
-       while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) ==
-              IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
+               /* Wait until reset cycle is complete */
+               while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
+                      IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
 
-       /* Make sure the irqs are cleared */
-       *info->iclrintradr =
-               IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
-               IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
-       *info->oclrintradr =
-               IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
-               IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
+               /* Make sure the irqs are cleared */
+               *info->iclrintradr =
+                       IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
+                       IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
+       } else {
+               e100_disable_rxdma_channel(info);
+       }
+
+       if (info->dma_out_enabled) {
+               info->uses_dma_out = 1;
+               e100_enable_txdma_channel(info);
+               *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
+
+               while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) ==
+                      IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
+
+               /* Make sure the irqs are cleared */
+               *info->oclrintradr =
+                       IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
+                       IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
+       } else {
+               e100_disable_txdma_channel(info);
+       }
 
        if (info->tty)
                clear_bit(TTY_IO_ERROR, &info->tty->flags);
@@ -2563,9 +3320,10 @@ startup(struct e100_serial * info)
        (void)info->port[REG_DATA];
 
        /* enable the interrupts */
+       if (info->uses_dma_out)
+               e100_enable_txdma_irq(info);
 
-       e100_enable_txdma_irq(info);
-       e100_enable_rxdma_irq(info);
+       e100_enable_rx_irq(info);
 
        info->tr_running = 0; /* to be sure we don't lock up the transmitter */
 
@@ -2606,20 +3364,28 @@ shutdown(struct e100_serial * info)
 
 #ifndef CONFIG_SVINTO_SIM      
        /* shut down the transmitter and receiver */
-
+       DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line));
        e100_disable_rx(info);
        info->port[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40);
 
-       e100_disable_rxdma_irq(info);
-       e100_disable_txdma_irq(info);
-
-       info->tr_running = 0;
-
-       /* reset both dma channels */
+       /* disable interrupts, reset dma channels */
+       if (info->uses_dma_in) {
+               e100_disable_rxdma_irq(info);
+               *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
+               info->uses_dma_in = 0;
+       } else {
+               e100_disable_serial_data_irq(info);
+       }
 
-       *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
-       *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
-       info->uses_dma = 0;
+       if (info->uses_dma_out) {
+               e100_disable_txdma_irq(info);
+               info->tr_running = 0;
+               *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
+               info->uses_dma_out = 0;
+       } else {
+               e100_disable_serial_tx_ready_irq(info);
+               info->tr_running = 0;
+       }
 
 #endif /* CONFIG_SVINTO_SIM */
 
@@ -2667,7 +3433,7 @@ change_speed(struct e100_serial *info)
 {
        unsigned int cflag;
        unsigned long xoff;
-
+       unsigned long flags;
        /* first some safety checks */
        
        if (!info->tty || !info->tty->termios)
@@ -2676,17 +3442,80 @@ change_speed(struct e100_serial *info)
                return;
        
        cflag = info->tty->termios->c_cflag;
-       
+
        /* possibly, the tx/rx should be disabled first to do this safely */
        
        /* change baud-rate and write it to the hardware */
-       
-       info->baud = cflag_to_baud(cflag);
+       if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) {
+               /* Special baudrate */
+               u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */
+               unsigned long alt_source =
+                               IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) |
+                               IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal);
+               /* R_ALT_SER_BAUDRATE selects the source */
+               DBAUD(printk("Custom baudrate: baud_base/divisor %lu/%i\n",
+                      (unsigned long)info->baud_base, info->custom_divisor));
+               if (info->baud_base == SERIAL_PRESCALE_BASE) {
+                       /* 0, 2-65535 (0=65536) */
+                       u16 divisor = info->custom_divisor;
+                       /* R_SERIAL_PRESCALE (upper 16 bits of R_CLOCK_PRESCALE) */
+                       /* baudrate is 3.125MHz/custom_divisor */
+                       alt_source =
+                               IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, prescale) |
+                               IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, prescale);
+                       alt_source = 0x11;
+                       DBAUD(printk("Writing SERIAL_PRESCALE: divisor %i\n", divisor));
+                       *R_SERIAL_PRESCALE = divisor;
+                       info->baud = SERIAL_PRESCALE_BASE/divisor;
+               }
+#ifdef CONFIG_ETRAX_EXTERN_PB6CLK_ENABLED
+               else if ((info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8 &&
+                         info->custom_divisor == 1) ||
+                        (info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ &&
+                         info->custom_divisor == 8)) {
+                               /* ext_clk selected */
+                               alt_source =
+                                       IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, extern) |
+                                       IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, extern);
+                               DBAUD(printk("using external baudrate: %lu\n", CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8));
+                               info->baud = CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8;
+                       }
+               }
+#endif
+               else
+               {
+                       /* Bad baudbase, we don't support using timer0
+                        * for baudrate.
+                        */
+                       printk(KERN_WARNING "Bad baud_base/custom_divisor: %lu/%i\n",
+                              (unsigned long)info->baud_base, info->custom_divisor);
+               }
+               r_alt_ser_baudrate_shadow &= ~mask;
+               r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8));
+               *R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow;
+       } else {
+               /* Normal baudrate */
+               /* Make sure we use normal baudrate */
+               u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */
+               unsigned long alt_source =
+                       IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) |
+                       IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal);
+               r_alt_ser_baudrate_shadow &= ~mask;
+               r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8));
+#ifndef CONFIG_SVINTO_SIM
+               *R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow;
+#endif /* CONFIG_SVINTO_SIM */
+
+               info->baud = cflag_to_baud(cflag);
+#ifndef CONFIG_SVINTO_SIM
+               info->port[REG_BAUD] = cflag_to_etrax_baud(cflag);
+#endif /* CONFIG_SVINTO_SIM */
+       }
        
 #ifndef CONFIG_SVINTO_SIM
-       info->port[REG_BAUD] = cflag_to_etrax_baud(cflag);
        /* start with default settings and then fill in changes */
-
+       save_flags(flags);
+       cli();
        /* 8 bit, no/even parity */
        info->rx_ctrl &= ~(IO_MASK(R_SERIAL0_REC_CTRL, rec_bitnr) |
                           IO_MASK(R_SERIAL0_REC_CTRL, rec_par_en) |
@@ -2717,24 +3546,19 @@ change_speed(struct e100_serial *info)
        }
        
        if (cflag & CMSPAR) {
-               /* enable stick parity */
+               /* enable stick parity, PARODD mean Mark which matches ETRAX */
                info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_stick_par, stick);
                info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_stick_par, stick);
-               if (!(cflag & PARODD)) {
-                       /* set mark parity */
-                       info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd);
-                       info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd);
-               }
-       } else {
-               if (cflag & PARODD) {
-                       /* set odd parity */
-                       info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd);
-                       info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd);
-               }
+       }
+       if (cflag & PARODD) {
+               /* set odd parity (or Mark if CMSPAR) */
+               info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd);
+               info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd);
        }
        
        if (cflag & CRTSCTS) {
                /* enable automatic CTS handling */
+               DFLOW(DEBUG_LOG(info->line, "FLOW auto_cts enabled\n", 0));
                info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, auto_cts, active);
        }
        
@@ -2750,13 +3574,16 @@ change_speed(struct e100_serial *info)
        xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->tty));
        xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
        if (info->tty->termios->c_iflag & IXON ) {
+               DFLOW(DEBUG_LOG(info->line, "FLOW XOFF enabled 0x%02X\n", STOP_CHAR(info->tty)));
                xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
        }
        
        *((unsigned long *)&info->port[REG_XOFF]) = xoff;
+       restore_flags(flags);
 #endif /* !CONFIG_SVINTO_SIM */
 
        update_char_time(info);
+
 } /* change_speed */
 
 /* start transmitting chars NOW */
@@ -2786,8 +3613,8 @@ rs_flush_chars(struct tty_struct *tty)
        restore_flags(flags);
 }
 
-extern inline int 
-raw_write(struct tty_struct * tty, int from_user,
+extern _INLINE_ int
+rs_raw_write(struct tty_struct * tty, int from_user,
          const unsigned char *buf, int count)
 {
        int     c, ret = 0;
@@ -2801,7 +3628,7 @@ raw_write(struct tty_struct * tty, int from_user,
        
 #ifdef SERIAL_DEBUG_DATA
        if (info->line == SERIAL_DEBUG_LINE)
-               printk("raw_write (%d), status %d\n", 
+               printk("rs_raw_write (%d), status %d\n",
                       count, info->port[REG_STATUS]);
 #endif
 
@@ -2811,6 +3638,9 @@ raw_write(struct tty_struct * tty, int from_user,
        return count;
 #endif
        save_flags(flags);
+       DFLOW(DEBUG_LOG(info->line, "write count %i ", count));
+       DFLOW(DEBUG_LOG(info->line, "ldisc %i\n", tty->ldisc.chars_in_buffer(tty)));
+
        
        /* the cli/restore_flags pairs below are needed because the
         * DMA interrupt handler moves the info->xmit values. the memcpy
@@ -2878,6 +3708,7 @@ raw_write(struct tty_struct * tty, int from_user,
         * this does not need IRQ protection since if tr_running == 0
         * the IRQ's are not running anyway for this port.
         */
+       DFLOW(DEBUG_LOG(info->line, "write ret %i\n", ret));
        
        if (info->xmit.head != info->xmit.tail &&
            !tty->stopped &&
@@ -2887,7 +3718,7 @@ raw_write(struct tty_struct * tty, int from_user,
        }
        
        return ret;
-} /* raw_write() */
+} /* raw_raw_write() */
 
 static int 
 rs_write(struct tty_struct * tty, int from_user,
@@ -2909,7 +3740,7 @@ rs_write(struct tty_struct * tty, int from_user,
                e100_rts(info, info->rs485.rts_on_send);
 #if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
                e100_disable_rx(info);
-               e100_disable_rxdma_irq(info);
+               e100_enable_rx_irq(info);
 #endif
 
                if (info->rs485.delay_rts_before_send > 0) {
@@ -2919,7 +3750,7 @@ rs_write(struct tty_struct * tty, int from_user,
        }
 #endif /* CONFIG_ETRAX_RS485 */
 
-       count = raw_write(tty, from_user, buf, count);
+       count = rs_raw_write(tty, from_user, buf, count);
 
 #if defined(CONFIG_ETRAX_RS485)
        if (info->rs485.enabled)
@@ -3003,23 +3834,33 @@ rs_flush_buffer(struct tty_struct *tty)
  * This function is used to send a high-priority XON/XOFF character to
  * the device
  *
- * Since we use DMA we don't check for info->x_char in transmit_chars,
- * just disable DMA channel and write the character when possible.
+ * Since we use DMA we don't check for info->x_char in transmit_chars_dma(),
+ * but we do it in handle_ser_tx_interrupt().
+ * We disable DMA channel and enable tx ready interrupt and write the
+ * character when possible.
  */
 static void rs_send_xchar(struct tty_struct *tty, char ch)
 {
        struct e100_serial *info = (struct e100_serial *)tty->driver_data;
+       unsigned long flags;
+       save_flags(flags); cli();
+       if (info->uses_dma_out) {
+               /* Put the DMA on hold and disable the channel */
+               *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, hold);
+               while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) !=
+                      IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, hold));
+               e100_disable_txdma_channel(info);
+       }
 
-       e100_disable_txdma_channel(info);
-
-       /* Wait for tr_ready */
-       while (!(info->port[REG_STATUS] & IO_MASK(R_SERIAL0_STATUS, tr_ready)))
-               /* wait */;
-
-       /* Write the XON/XOFF char */
-       info->port[REG_TR_DATA] = ch;
+       /* Must make sure transmitter is not stopped before we can transmit */
+       if (tty->stopped)
+               rs_start(tty);
 
-       e100_enable_txdma_channel(info);
+       /* Enable manual transmit interrupt and send from there */
+       DFLOW(DEBUG_LOG(info->line, "rs_send_xchar 0x%02X\n", ch));
+       info->x_char = ch;
+       e100_enable_serial_tx_ready_irq(info);
+       restore_flags(flags);
 }
 
 /*
@@ -3034,21 +3875,18 @@ static void
 rs_throttle(struct tty_struct * tty)
 {
        struct e100_serial *info = (struct e100_serial *)tty->driver_data;
-       unsigned long flags;
 #ifdef SERIAL_DEBUG_THROTTLE
        char    buf[64];
 
-       printk("throttle %s: %d....\n", _tty_name(tty, buf),
-              tty->ldisc.chars_in_buffer(tty));
+       printk("throttle %s: %lu....\n", tty_name(tty, buf),
+              (unsigned long)tty->ldisc.chars_in_buffer(tty));
 #endif
+       DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
 
        /* Do RTS before XOFF since XOFF might take some time */
        if (tty->termios->c_cflag & CRTSCTS) {
-               /* Turn off RTS line (do this atomic) */
-               save_flags(flags); 
-               cli();
+               /* Turn off RTS line */
                e100_rts(info, 0);
-               restore_flags(flags);
        }
        if (I_IXOFF(tty))
                rs_send_xchar(tty, STOP_CHAR(tty));
@@ -3059,21 +3897,18 @@ static void
 rs_unthrottle(struct tty_struct * tty)
 {
        struct e100_serial *info = (struct e100_serial *)tty->driver_data;
-       unsigned long flags;
 #ifdef SERIAL_DEBUG_THROTTLE
        char    buf[64];
 
-       printk("unthrottle %s: %d....\n", _tty_name(tty, buf),
-              tty->ldisc.chars_in_buffer(tty));
+       printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
+              (unsigned long)tty->ldisc.chars_in_buffer(tty));
 #endif
-
+       DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
+       DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count));
        /* Do RTS before XOFF since XOFF might take some time */
        if (tty->termios->c_cflag & CRTSCTS) {
-               /* Assert RTS line (do this atomic) */
-               save_flags(flags); 
-               cli();
+               /* Assert RTS line  */
                e100_rts(info, 1);
-               restore_flags(flags);
        }
 
        if (I_IXOFF(tty)) {
@@ -3110,8 +3945,10 @@ get_serial_info(struct e100_serial * info,
        tmp.port = (int)info->port;
        tmp.irq = info->irq;
        tmp.flags = info->flags;
+       tmp.baud_base = info->baud_base;
        tmp.close_delay = info->close_delay;
        tmp.closing_wait = info->closing_wait;
+       tmp.custom_divisor = info->custom_divisor;
        if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
                return -EFAULT;
        return 0;
@@ -3149,8 +3986,10 @@ set_serial_info(struct e100_serial *info,
         * At this point, we start making changes.....
         */
        
+       info->baud_base = new_serial.baud_base;
        info->flags = ((info->flags & ~ASYNC_FLAGS) |
                       (new_serial.flags & ASYNC_FLAGS));
+       info->custom_divisor = new_serial.custom_divisor;
        info->type = new_serial.type;
        info->close_delay = new_serial.close_delay;
        info->closing_wait = new_serial.closing_wait;
@@ -3418,6 +4257,7 @@ rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
 
        change_speed(info);
 
+       /* Handle turning off CRTSCTS */
        if ((old_termios->c_cflag & CRTSCTS) &&
            !(tty->termios->c_cflag & CRTSCTS)) {
                tty->hw_stopped = 0;
@@ -3426,6 +4266,42 @@ rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
        
 }
 
+/* In debugport.c - register a console write function that uses the normal
+ * serial driver
+ */
+typedef int (*debugport_write_function)(int i, const char *buf, unsigned int len);
+
+extern debugport_write_function debug_write_function;
+
+static int rs_debug_write_function(int i, const char *buf, unsigned int len)
+{
+       int cnt;
+        struct tty_struct *tty;
+        static int recurse_cnt = 0;
+
+        tty = rs_table[i].tty;
+        if (tty)  {
+               unsigned long flags;
+               if (recurse_cnt > 5) /* We skip this debug output */
+                       return 1;
+
+               local_irq_save(flags);
+               recurse_cnt++;
+                do {
+                        cnt = rs_write(tty, 0, buf, len);
+                        if (cnt >= 0) {
+                                buf += cnt;
+                                len -= cnt;
+                        } else
+                                len = cnt;
+                } while(len > 0);
+               recurse_cnt--;
+               local_irq_restore(flags);
+                return 1;
+        }
+        return 0;
+}
+
 /*
  * ------------------------------------------------------------
  * rs_close()
@@ -3482,6 +4358,12 @@ rs_close(struct tty_struct *tty, struct file * filp)
                return;
        }
        info->flags |= ASYNC_CLOSING;
+       /*
+        * Save the termios structure, since this port may have
+        * separate termios for callout and dialin.
+        */
+       if (info->flags & ASYNC_NORMAL_ACTIVE)
+               info->normal_termios = *tty->termios;
        /*
         * Now we wait for the transmit buffer to clear; and we notify 
         * the line discipline to only process XON/XOFF characters.
@@ -3499,7 +4381,7 @@ rs_close(struct tty_struct *tty, struct file * filp)
 
 #ifndef CONFIG_SVINTO_SIM
        e100_disable_rx(info);
-       e100_disable_rxdma_irq(info);
+       e100_disable_rx_irq(info);
 
        if (info->flags & ASYNC_INITIALIZED) {
                /*
@@ -3537,6 +4419,16 @@ rs_close(struct tty_struct *tty, struct file * filp)
                info->rs485.enabled = 0;
 #if defined(CONFIG_ETRAX_RS485_ON_PA)
                *R_PORT_PA_DATA = port_pa_data_shadow &= ~(1 << rs485_pa_bit);
+#endif
+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
+               REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
+                              rs485_port_g_bit, 0);
+#endif
+#if defined(CONFIG_ETRAX_RS485_LTC1387)
+               REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
+                              CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 0);
+               REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
+                              CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 0);
 #endif
        }
 #endif
@@ -3637,8 +4529,9 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
                return 0;
        }
        
-       if (tty->termios->c_cflag & CLOCAL)
-               do_clocal = 1;
+       if (tty->termios->c_cflag & CLOCAL) {
+                       do_clocal = 1;
+       }
        
        /*
         * Block waiting for the carrier detect and the line to become
@@ -3664,7 +4557,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
        while (1) {
                save_flags(flags);
                cli();
-                /* assert RTS and DTR */
+               /* assert RTS and DTR */
                e100_rts(info, 1);
                e100_dtr(info, 1);
                restore_flags(flags);
@@ -3681,7 +4574,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
 #endif
                        break;
                }
-                if (!(info->flags & ASYNC_CLOSING) && do_clocal)
+               if (!(info->flags & ASYNC_CLOSING) && do_clocal)
                        /* && (do_clocal || DCD_IS_ASSERTED) */
                        break;
                if (signal_pending(current)) {
@@ -3787,10 +4680,21 @@ rs_open(struct tty_struct *tty, struct file * filp)
 #endif
                return retval;
        }
-  
+
+       if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) {
+               *tty->termios = info->normal_termios;
+               change_speed(info);
+       }
+
 #ifdef SERIAL_DEBUG_OPEN
        printk("rs_open ttyS%d successful...\n", info->line);
 #endif
+       DLOG_INT_TRIG( log_int_pos = 0);
+
+       DFLIP(  if (info->line == SERIAL_DEBUG_LINE) {
+                       info->icount.rx = 0;
+               } );
+
        return 0;
 }
 
@@ -3798,10 +4702,11 @@ rs_open(struct tty_struct *tty, struct file * filp)
  * /proc fs routines....
  */
 
-extern inline int line_info(char *buf, struct e100_serial *info)
+extern _INLINE_ int line_info(char *buf, struct e100_serial *info)
 {
        char    stat_buf[30];
        int     ret;
+       unsigned long tmp;
 
        ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d",
                      info->line, (unsigned long)info->port, info->irq);
@@ -3831,11 +4736,39 @@ extern inline int line_info(char *buf, struct e100_serial *info)
        ret += sprintf(buf+ret, " tx:%lu rx:%lu",
                       (unsigned long)info->icount.tx,
                       (unsigned long)info->icount.rx);
+       tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
+       if (tmp) {
+               ret += sprintf(buf+ret, " tx_pend:%lu/%lu",
+                              (unsigned long)tmp,
+                              (unsigned long)SERIAL_XMIT_SIZE);
+       }
 
        ret += sprintf(buf+ret, " rx_pend:%lu/%lu",
                       (unsigned long)info->recv_cnt,
                       (unsigned long)info->max_recv_cnt);
 
+#if 1
+       if (info->tty) {
+
+               if (info->tty->stopped)
+                       ret += sprintf(buf+ret, " stopped:%i",
+                                      (int)info->tty->stopped);
+               if (info->tty->hw_stopped)
+                       ret += sprintf(buf+ret, " hw_stopped:%i",
+                                      (int)info->tty->hw_stopped);
+       }
+
+       {
+               unsigned char rstat = info->port[REG_STATUS];
+               if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) )
+                       ret += sprintf(buf+ret, " xoff_detect:1");
+       }
+
+#endif
+
+
+
+
        if (info->icount.frame)
                ret += sprintf(buf+ret, " fe:%lu",
                               (unsigned long)info->icount.frame);
@@ -3879,6 +4812,22 @@ int rs_read_proc(char *page, char **start, off_t off, int count,
                        len = 0;
                }
        }
+#ifdef DEBUG_LOG_INCLUDED
+       for (i = 0; i < debug_log_pos; i++) {
+               len += sprintf(page + len, "%-4i %lu.%lu ", i, debug_log[i].time, timer_data_to_ns(debug_log[i].timer_data));
+               len += sprintf(page + len, debug_log[i].string, debug_log[i].value);
+               if (len+begin > off+count)
+                       goto done;
+               if (len+begin < off) {
+                       begin += len;
+                       len = 0;
+               }
+       }
+       len += sprintf(page + len, "debug_log %i/%i  %li bytes\n",
+                      i, DEBUG_LOG_SIZE, begin+len);
+       debug_log_pos = 0;
+#endif
+
        *eof = 1;
 done:
        if (off >= len+begin)
@@ -3893,7 +4842,7 @@ static void
 show_serial_version(void)
 {
        printk(KERN_INFO
-              "ETRAX 100LX serial-driver %s, (c) 2000-2003 Axis Communications AB\r\n",
+              "ETRAX 100LX serial-driver %s, (c) 2000-2004 Axis Communications AB\r\n",
               &serial_version[11]); /* "$Revision: x.yy" */
 }
 
@@ -3952,20 +4901,25 @@ rs_init(void)
        driver->init_termios.c_cflag =
                B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */
        driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
+       driver->termios = serial_termios;
+       driver->termios_locked = serial_termios_locked;
+
        tty_set_operations(driver, &rs_ops);
+        serial_driver = driver;
        if (tty_register_driver(driver))
                panic("Couldn't register serial driver\n");
-        serial_driver = driver;
-  
        /* do some initializing for the separate ports */
   
        for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
-               info->uses_dma = 0;   
+               info->uses_dma_in = 0;
+               info->uses_dma_out = 0;
                info->line = i;
                info->tty = 0;
                info->type = PORT_ETRAX;
                info->tr_running = 0;
                info->forced_eop = 0;
+               info->baud_base = DEF_BAUD_BASE;
+               info->custom_divisor = 0;
                info->flags = 0;
                info->close_delay = 5*HZ/10;
                info->closing_wait = 30*HZ;
@@ -3973,6 +4927,7 @@ rs_init(void)
                info->event = 0;
                info->count = 0;
                info->blocked_open = 0;
+               info->normal_termios = driver->init_termios;
                init_waitqueue_head(&info->open_wait);
                init_waitqueue_head(&info->close_wait);
                info->xmit.buf = NULL;
@@ -4009,39 +4964,62 @@ rs_init(void)
 #ifndef CONFIG_SVINTO_SIM
        /* Not needed in simulator.  May only complicate stuff. */
        /* hook the irq's for DMA channel 6 and 7, serial output and input, and some more... */
+
+       if (request_irq(SERIAL_IRQ_NBR, ser_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial ", NULL))
+               panic("irq8");
+
 #ifdef CONFIG_ETRAX_SERIAL_PORT0
+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT
        if (request_irq(SER0_DMA_TX_IRQ_NBR, tr_interrupt, SA_INTERRUPT, "serial 0 dma tr", NULL))
                panic("irq22");
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN
        if (request_irq(SER0_DMA_RX_IRQ_NBR, rec_interrupt, SA_INTERRUPT, "serial 0 dma rec", NULL))
                panic("irq23");
 #endif
-#ifdef SERIAL_HANDLE_EARLY_ERRORS
-       if (request_irq(SERIAL_IRQ_NBR, ser_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial ", NULL))
-               panic("irq8");
 #endif
+
 #ifdef CONFIG_ETRAX_SERIAL_PORT1
+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA8_OUT
        if (request_irq(SER1_DMA_TX_IRQ_NBR, tr_interrupt, SA_INTERRUPT, "serial 1 dma tr", NULL))
                panic("irq24");
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA9_IN
        if (request_irq(SER1_DMA_RX_IRQ_NBR, rec_interrupt, SA_INTERRUPT, "serial 1 dma rec", NULL))
                panic("irq25");
 #endif
+#endif
 #ifdef CONFIG_ETRAX_SERIAL_PORT2
        /* DMA Shared with par0 (and SCSI0 and ATA) */
-       if (request_irq(SER2_DMA_TX_IRQ_NBR, tr_interrupt, SA_SHIRQ, "serial 2 dma tr", NULL))
+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT
+       if (request_irq(SER2_DMA_TX_IRQ_NBR, tr_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial 2 dma tr", NULL))
                panic("irq18");
-       if (request_irq(SER2_DMA_RX_IRQ_NBR, rec_interrupt, SA_SHIRQ, "serial 2 dma rec", NULL))
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN
+       if (request_irq(SER2_DMA_RX_IRQ_NBR, rec_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial 2 dma rec", NULL))
                panic("irq19");
 #endif
+#endif
 #ifdef CONFIG_ETRAX_SERIAL_PORT3
        /* DMA Shared with par1 (and SCSI1 and Extern DMA 0) */
-       if (request_irq(SER3_DMA_TX_IRQ_NBR, tr_interrupt, SA_SHIRQ, "serial 3 dma tr", NULL))
+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT
+       if (request_irq(SER3_DMA_TX_IRQ_NBR, tr_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial 3 dma tr", NULL))
                panic("irq20");
-       if (request_irq(SER3_DMA_RX_IRQ_NBR, rec_interrupt, SA_SHIRQ, "serial 3 dma rec", NULL))
+#endif
+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN
+       if (request_irq(SER3_DMA_RX_IRQ_NBR, rec_interrupt, SA_SHIRQ | SA_INTERRUPT, "serial 3 dma rec", NULL))
                panic("irq21");
 #endif
+#endif
 
+#ifdef CONFIG_ETRAX_SERIAL_FLUSH_DMA_FAST
+       if (request_irq(TIMER1_IRQ_NBR, timeout_interrupt, SA_SHIRQ | SA_INTERRUPT,
+                      "fast serial dma timeout", NULL)) {
+               printk(KERN_CRIT "err: timer1 irq\n");
+       }
+#endif
 #endif /* CONFIG_SVINTO_SIM */
-
+       debug_write_function = rs_debug_write_function;
        return 0;
 }
 
index 45813c6..b7bc8dd 100644 (file)
@@ -44,15 +44,11 @@ struct e100_serial {
        volatile u32            *ofirstadr;   /* adr to R_DMA_CHx_FIRST */
        volatile u8             *ocmdadr;     /* adr to R_DMA_CHx_CMD */
        const volatile u8       *ostatusadr;  /* adr to R_DMA_CHx_STATUS */
-       volatile u32            *ohwswadr;    /* adr to R_DMA_CHx_HWSW */
-       volatile u32            *odescradr;   /* adr to R_DMA_CHx_DESCR */
 
        /* Input registers */
        volatile u8             *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR */
        volatile u32            *ifirstadr;   /* adr to R_DMA_CHx_FIRST */
        volatile u8             *icmdadr;     /* adr to R_DMA_CHx_CMD */
-       const volatile u8       *istatusadr;  /* adr to R_DMA_CHx_STATUS */
-       volatile u32            *ihwswadr;    /* adr to R_DMA_CHx_HWSW */
        volatile u32            *idescradr;   /* adr to R_DMA_CHx_DESCR */
 
        int                     flags;  /* defined in tty.h */
@@ -60,14 +56,17 @@ struct e100_serial {
        u8                      rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */
        u8                      tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */
        u8                      iseteop; /* bit number for R_SET_EOP for the input dma */
-
        int                     enabled; /* Set to 1 if the port is enabled in HW config */
-  
-       /* end of fields defined in rs_table[] in .c-file */
 
-       int                     uses_dma; /* Set to 1 if DMA should be used */
-       unsigned char           forced_eop; /* a fifo eop has been forced */
+       u8              dma_out_enabled:1; /* Set to 1 if DMA should be used */
+       u8              dma_in_enabled:1;  /* Set to 1 if DMA should be used */
 
+       /* end of fields defined in rs_table[] in .c-file */
+       u8              uses_dma_in;  /* Set to 1 if DMA is used */
+       u8              uses_dma_out; /* Set to 1 if DMA is used */
+       u8              forced_eop;   /* a fifo eop has been forced */
+       int                     baud_base;     /* For special baudrates */
+       int                     custom_divisor; /* For special baudrates */
        struct etrax_dma_descr  tr_descr;
        struct etrax_dma_descr  rec_descr[SERIAL_RECV_DESCRIPTORS];
        int                     cur_rec_descr;
@@ -95,6 +94,8 @@ struct e100_serial {
 
        struct work_struct      work;
        struct async_icount     icount;   /* error-statistics etc.*/
+       struct termios          normal_termios;
+       struct termios          callout_termios;
 #ifdef DECLARE_WAITQUEUE
        wait_queue_head_t       open_wait;
        wait_queue_head_t       close_wait;
@@ -104,6 +105,7 @@ struct e100_serial {
 #endif  
 
        unsigned long           char_time_usec;       /* The time for 1 char, in usecs */
+       unsigned long           flush_time_usec;      /* How often we should flush */
        unsigned long           last_tx_active_usec;  /* Last tx usec in the jiffies */
        unsigned long           last_tx_active;       /* Last tx time in jiffies */
        unsigned long           last_rx_active_usec;  /* Last rx usec in the jiffies */
index 012c302..d80269f 100644 (file)
  *    init_etrax_debug()
  *
  * $Log: debugport.c,v $
+ * Revision 1.14  2004/05/17 13:11:29  starvik
+ * Disable DMA until real serial driver is up
+ *
+ * Revision 1.13  2004/05/14 07:58:01  starvik
+ * Merge of changes from 2.4
+ *
+ * Revision 1.12  2003/09/11 07:29:49  starvik
+ * Merge of Linux 2.6.0-test5
+ *
  * Revision 1.11  2003/07/07 09:53:36  starvik
  * Revert all the 2.5.74 merge changes to make the console work again
  *
@@ -59,7 +68,7 @@
 #include <linux/init.h>
 #include <linux/major.h>
 #include <linux/delay.h>
-
+#include <linux/tty.h>
 #include <asm/system.h>
 #include <asm/arch/svinto.h>
 #include <asm/io.h>             /* Get SIMCOUT. */
 
 #define MIN_SIZE 32 /* Size that triggers the FIFO to flush characters to interface */
 
-/* Write a string of count length to the console (debug port) using DMA, polled
- * for completion. Interrupts are disabled during the whole process. Some
- * caution needs to be taken to not interfere with ttyS business on this port.
- */
+static struct tty_driver *serial_driver;
+
+typedef int (*debugport_write_function)(int i, const char *buf, unsigned int len);
+
+debugport_write_function debug_write_function = NULL;
+
+static void
+console_write_direct(struct console *co, const char *buf, unsigned int len)
+{
+       int i;
+       /* Send data */
+       for (i = 0; i < len; i++) {
+               /* Wait until transmitter is ready and send.*/
+               while(!(*DEBUG_READ & IO_MASK(R_SERIAL0_READ, tr_ready)));
+                *DEBUG_WRITE = buf[i];
+       }
+}
 
 static void 
 console_write(struct console *co, const char *buf, unsigned int len)
 {
-
-       static struct etrax_dma_descr descr;
-       static struct etrax_dma_descr descr2;
-       static char tmp_buf[MIN_SIZE];
-       static int tmp_size = 0;
-
-       unsigned long flags; 
-       
+       unsigned long flags;
 #ifdef CONFIG_ETRAX_DEBUG_PORT_NULL
         /* no debug printout at all */
         return;
@@ -150,86 +165,18 @@ console_write(struct console *co, const char *buf, unsigned int len)
        SIMCOUT(buf,len);
        return;
 #endif
-       
-       local_save_flags(flags);
-       local_irq_disable();
 
 #ifdef CONFIG_ETRAX_KGDB
        /* kgdb needs to output debug info using the gdb protocol */
        putDebugString(buf, len);
-       local_irq_restore(flags);
        return;
 #endif
 
-       /* To make this work together with the real serial port driver
-        * we have to make sure that everything is flushed when we leave
-        * here. The following steps are made to assure this:
-        * 1. Wait until DMA stops, FIFO is empty and serial port pipeline empty.
-        * 2. Write at least half the FIFO to trigger flush to serial port.
-        * 3. Wait until DMA stops, FIFO is empty and serial port pipeline empty.
-         */
-
-       /* Do we have enough characters to make the DMA/FIFO happy? */
-       if (tmp_size + len < MIN_SIZE)
-       {
-               int size = min((int)(MIN_SIZE - tmp_size),(int)len);
-               memcpy(&tmp_buf[tmp_size], buf, size);
-               tmp_size += size;
-               len -= size;
-        
-               /* Pad with space if complete line */
-               if (tmp_buf[tmp_size-1] == '\n')
-               {
-                       memset(&tmp_buf[tmp_size-1], ' ', MIN_SIZE - tmp_size);
-                       tmp_buf[MIN_SIZE - 1] = '\n';
-                       tmp_size = MIN_SIZE;
-                       len = 0;
-               }
-               else
-               {
-                  /* Wait for more characters */
-                       local_irq_restore(flags);
+       local_irq_save(flags);
+       if (debug_write_function)
+               if (debug_write_function(co->index, buf, len))
                        return;
-               }
-       }
-
-       /* make sure the transmitter is enabled. 
-        * NOTE: this overrides any setting done in ttySx, to 8N1, no auto-CTS.
-        * in the future, move the tr/rec_ctrl shadows from etrax100ser.c to
-        * shadows.c and use it here as well...
-        */
-
-       *DEBUG_TR_CTRL = 0x40;
-       while(*DEBUG_OCMD & 7); /* Until DMA is not running */
-       while(*DEBUG_STATUS & 0x7f); /* wait until output FIFO is empty as well */
-       udelay(200); /* Wait for last two characters to leave the serial transmitter */
-
-       if (tmp_size)
-       {
-               descr.ctrl = len ?  0 : d_eop | d_wait | d_eol;
-               descr.sw_len = tmp_size;
-               descr.buf = virt_to_phys(tmp_buf);
-               descr.next = virt_to_phys(&descr2);
-               descr2.ctrl = d_eop | d_wait | d_eol;
-               descr2.sw_len = len;
-               descr2.buf = virt_to_phys((char*)buf);
-       }
-       else
-       {
-               descr.ctrl = d_eop | d_wait | d_eol;
-               descr.sw_len = len;
-               descr.buf = virt_to_phys((char*)buf);
-       }
-
-       *DEBUG_FIRST = virt_to_phys(&descr); /* write to R_DMAx_FIRST */
-       *DEBUG_OCMD = 1;       /* dma command start -> R_DMAx_CMD */
-
-       /* wait until the output dma channel is ready again */
-       while(*DEBUG_OCMD & 7);
-       while(*DEBUG_STATUS & 0x7f);
-       udelay(200);
-
-       tmp_size = 0;
+       console_write_direct(co, buf, len);
        local_irq_restore(flags);
 }
 
@@ -279,10 +226,11 @@ enableDebugIRQ(void)
        *DEBUG_REC_CTRL = IO_STATE(R_SERIAL0_REC_CTRL, rec_enable, enable);
 }
 
-static kdev_t 
-console_device(struct console *c)
+static struct tty_driver*
+console_device(struct console *c, int *index)
 {
-         return mk_kdev(TTY_MAJOR, 64 + c->index);
+       *index = c->index;
+       return serial_driver;
 }
 
 static int __init 
@@ -311,5 +259,33 @@ static struct console sercons = {
 void __init 
 init_etrax_debug(void)
 {
+#if CONFIG_ETRAX_DEBUG_PORT_NULL
+       return;
+#endif
+
+#if DEBUG_PORT_IDX == 0
+       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
+       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, unused);
+#elif DEBUG_PORT_IDX == 1
+       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma8);
+       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, usb);
+#elif DEBUG_PORT_IDX == 2
+       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma2);
+       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, par0);
+#elif DEBUG_PORT_IDX == 3
+       genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma4);
+       genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, par1);
+#endif
+       *R_GEN_CONFIG = genconfig_shadow;
+
        register_console(&sercons);
 }
+
+int __init
+init_console(void)
+{
+       serial_driver = alloc_tty_driver(1);
+       if (!serial_driver)
+               return -ENOMEM;
+       return 0;
+}
index 5e5f5be..ddd947d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: entry.S,v 1.16 2003/07/04 08:27:41 starvik Exp $
+/* $Id: entry.S,v 1.18 2004/05/11 12:28:25 starvik Exp $
  *
  *  linux/arch/cris/entry.S
  *
@@ -7,6 +7,12 @@
  *  Authors:   Bjorn Wesen (bjornw@axis.com)
  *
  *  $Log: entry.S,v $
+ *  Revision 1.18  2004/05/11 12:28:25  starvik
+ *  Merge of Linux 2.6.6
+ *
+ *  Revision 1.17  2003/09/11 07:29:49  starvik
+ *  Merge of Linux 2.6.0-test5
+ *
  *  Revision 1.16  2003/07/04 08:27:41  starvik
  *  Merge of Linux 2.5.74
  *
@@ -1060,6 +1066,19 @@ sys_call_table:
        .long sys_clock_nanosleep
        .long sys_statfs64
        .long sys_fstatfs64     
+       .long sys_tgkill        /* 270 */
+       .long sys_utimes
+       .long sys_fadvise64_64
+       .long sys_ni_syscall    /* sys_vserver */
+       .long sys_ni_syscall    /* sys_mbind */
+       .long sys_ni_syscall    /* 275 sys_get_mempolicy */
+       .long sys_ni_syscall    /* sys_set_mempolicy */
+       .long sys_mq_open
+       .long sys_mq_unlink
+       .long sys_mq_timedsend
+       .long sys_mq_timedreceive       /* 280 */
+       .long sys_mq_notify
+       .long sys_mq_getsetattr
                
         /*
          * NOTE!! This doesn't have to be exact - we just have
index 2c2cb60..53b94eb 100644 (file)
@@ -1,10 +1,16 @@
-/* $Id: fasttimer.c,v 1.4 2003/07/04 08:27:41 starvik Exp $
+/* $Id: fasttimer.c,v 1.6 2004/05/14 10:18:39 starvik Exp $
  * linux/arch/cris/kernel/fasttimer.c
  *
  * Fast timers for ETRAX100/ETRAX100LX
  * This may be useful in other OS than Linux so use 2 space indentation...
  *
  * $Log: fasttimer.c,v $
+ * Revision 1.6  2004/05/14 10:18:39  starvik
+ * Export fast_timer_list
+ *
+ * Revision 1.5  2004/05/14 07:58:01  starvik
+ * Merge of changes from 2.4
+ *
  * Revision 1.4  2003/07/04 08:27:41  starvik
  * Merge of Linux 2.5.74
  *
@@ -130,7 +136,7 @@ static int fast_timers_deleted = 0;
 static int fast_timer_is_init = 0;
 static int fast_timer_ints = 0;
 
-static struct fast_timer *fast_timer_list = NULL;
+struct fast_timer *fast_timer_list = NULL;
 
 #ifdef DEBUG_LOG_INCLUDED
 #define DEBUG_LOG_MAX 128
@@ -325,7 +331,8 @@ void start_one_shot_timer(struct fast_timer *t,
     {
       if (tmp == t)
       {
-        printk("timer name: %s data: 0x%08lX already in list!\n", name, data);
+        printk(KERN_WARNING
+               "timer name: %s data: 0x%08lX already in list!\n", name, data);
         sanity_failed++;
         return;
       }
@@ -784,7 +791,7 @@ static int proc_fasttimer_read(char *buf, char **start, off_t offset, int len
       cli();
       if (t->next != nextt)
       {
-        printk("timer removed!\n");
+        printk(KERN_WARNING "timer removed!\n");
       }
       t = nextt;
     }
@@ -965,7 +972,7 @@ void fast_timer_init(void)
     int i;
 #endif
 
-    printk("fast_timer_init()\n");
+    printk(KERN_INFO "fast_timer_init()\n");
 
 #if 0 && defined(FAST_TIMER_TEST)
     for (i = 0; i <= TIMER0_DIV; i++)
index 8192cd7..2c1dd11 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: head.S,v 1.6 2003/04/28 05:31:46 starvik Exp $
+/* $Id: head.S,v 1.7 2004/05/14 07:58:01 starvik Exp $
  * 
  * Head of the kernel - alter with care
  *
@@ -7,6 +7,9 @@
  * Authors:    Bjorn Wesen (bjornw@axis.com)
  * 
  * $Log: head.S,v $
+ * Revision 1.7  2004/05/14 07:58:01  starvik
+ * Merge of changes from 2.4
+ *
  * Revision 1.6  2003/04/28 05:31:46  starvik
  * Added section attributes
  *
@@ -331,7 +334,16 @@ _inflash:
        move.d START_ETHERNET_CLOCK, $r0
        move.d $r0, [R_NETWORK_GEN_CONFIG]
 #endif
-               
+
+       ;; Set up waitstates etc according to kernel configuration.
+#ifndef CONFIG_SVINTO_SIM
+       move.d   CONFIG_ETRAX_DEF_R_WAITSTATES, $r0
+       move.d   $r0, [R_WAITSTATES]
+
+       move.d   CONFIG_ETRAX_DEF_R_BUS_CONFIG, $r0
+       move.d   $r0, [R_BUS_CONFIG]
+#endif
+
        ;; We need to initialze DRAM registers before we start using the DRAM
 
        cmp.d   RAM_INIT_MAGIC, $r8     ; Already initialized?
@@ -626,8 +638,19 @@ _start_it:
                | IO_STATE (R_GEN_CONFIG, dma4, extdma0),$r0
 #endif
 
-#if defined(CONFIG_BLUETOOTH) && (defined(CONFIG_BLUETOOTH_RESET_G10) || defined(CONFIG_BLUETOOTH_RESET_G11))
-       or.d      IO_STATE (R_GEN_CONFIG, g8_15dir, out),$r0
+#if defined(CONFIG_ETRAX_DEF_R_PORT_G0_DIR_OUT)
+        or.d      IO_STATE (R_GEN_CONFIG, g0dir, out),$r0
+#endif
+
+#if defined(CONFIG_ETRAX_DEF_R_PORT_G8_15_DIR_OUT)
+        or.d      IO_STATE (R_GEN_CONFIG, g8_15dir, out),$r0
+#endif
+#if defined(CONFIG_ETRAX_DEF_R_PORT_G16_23_DIR_OUT)
+       or.d      IO_STATE (R_GEN_CONFIG, g16_23dir, out),$r0
+#endif
+
+#if defined(CONFIG_ETRAX_DEF_R_PORT_G24_DIR_OUT)
+       or.d      IO_STATE (R_GEN_CONFIG, g24dir, out),$r0
 #endif
 
        move.d  $r0,[genconfig_shadow] ; init a shadow register of R_GEN_CONFIG
index 7ad7942..8aba424 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.3 2003/07/04 08:27:41 starvik Exp $
+/* $Id: process.c,v 1.6 2004/05/11 12:28:25 starvik Exp $
  * 
  *  linux/arch/cris/kernel/process.c
  *
@@ -16,6 +16,7 @@
 #include <linux/err.h>
 #include <linux/fs.h>
 #include <linux/slab.h>
+#include <asm/arch/svinto.h>
 #include <linux/init.h>
 
 #ifdef CONFIG_ETRAX_GPIO
@@ -249,3 +250,19 @@ unsigned long get_wchan(struct task_struct *p)
 }
 #undef last_sched
 #undef first_sched
+
+void show_regs(struct pt_regs * regs)
+{
+       unsigned long usp = rdusp();
+       printk("IRP: %08lx SRP: %08lx DCCR: %08lx USP: %08lx MOF: %08lx\n",
+              regs->irp, regs->srp, regs->dccr, usp, regs->mof );
+       printk(" r0: %08lx  r1: %08lx   r2: %08lx  r3: %08lx\n",
+              regs->r0, regs->r1, regs->r2, regs->r3);
+       printk(" r4: %08lx  r5: %08lx   r6: %08lx  r7: %08lx\n",
+              regs->r4, regs->r5, regs->r6, regs->r7);
+       printk(" r8: %08lx  r9: %08lx  r10: %08lx r11: %08lx\n",
+              regs->r8, regs->r9, regs->r10, regs->r11);
+       printk("r12: %08lx r13: %08lx oR10: %08lx\n",
+              regs->r12, regs->r13, regs->orig_r10);
+}
+
index c83eba5..39dcc3c 100644 (file)
@@ -118,19 +118,13 @@ sys_ptrace(long request, long pid, long addr, long data)
                /* Read the word at location address in the USER area. */
                case PTRACE_PEEKUSR: {
                        unsigned long tmp;
-                       
+
                        ret = -EIO;
-                       if ((addr & 3) || addr < 0 || addr >= sizeof(struct user))
+                       if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
                                break;
-                       
-                       tmp = 0;  /* Default return condition */
-                       ret = -EIO;
-                       
-                       if (addr < sizeof(struct pt_regs)) {
-                               tmp = get_reg(child, addr >> 2);
-                               ret = put_user(tmp, (unsigned long *)data);
-                       }
-                       
+
+                       tmp = get_reg(child, addr >> 2);
+                       ret = put_user(tmp, (unsigned long *)data);
                        break;
                }
                
@@ -148,28 +142,21 @@ sys_ptrace(long request, long pid, long addr, long data)
                /* Write the word at location address in the USER area. */
                case PTRACE_POKEUSR:
                        ret = -EIO;
-                       
-                       if ((addr & 3) || addr < 0 || addr >= sizeof(struct user))
+                       if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
                                break;
 
-                       if (addr < sizeof(struct pt_regs)) {
-                               addr >>= 2;
+                       addr >>= 2;
 
-                               if (addr == PT_DCCR) {
-                                       /*
-                                        * Don't allow the tracing process to
-                                        * change stuff like interrupt enable,
-                                        * kernel/user bit, etc.
-                                        */
-                                       data &= DCCR_MASK;
-                                       data |= get_reg(child, PT_DCCR) & ~DCCR_MASK;
-                               }
-                               
-                               if (put_reg(child, addr, data))
-                                       break;
-                               
-                               ret = 0;
+                       if (addr == PT_DCCR) {
+                               /* don't allow the tracing process to change stuff like
+                                * interrupt enable, kernel/user bit, dma enables etc.
+                                */
+                               data &= DCCR_MASK;
+                               data |= get_reg(child, PT_DCCR) & ~DCCR_MASK;
                        }
+                       if (put_reg(child, addr, data))
+                               break;
+                       ret = 0;
                        break;
 
                case PTRACE_SYSCALL:
@@ -237,7 +224,7 @@ sys_ptrace(long request, long pid, long addr, long data)
                                
                                if (put_user(tmp, (unsigned long *) data)) {
                                        ret = -EFAULT;
-                                       break;
+                                       goto out_tsk;
                                }
                                
                                data += sizeof(long);
@@ -255,7 +242,7 @@ sys_ptrace(long request, long pid, long addr, long data)
                        for (i = 0; i <= PT_MAX; i++) {
                                if (get_user(tmp, (unsigned long *) data)) {
                                        ret = -EFAULT;
-                                       break;
+                                       goto out_tsk;
                                }
                                
                                if (i == PT_DCCR) {
@@ -290,12 +277,10 @@ void do_syscall_trace(void)
        if (!(current->ptrace & PT_PTRACED))
                return;
        
-       current->exit_code = SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-                                       ? 0x80 : 0);
-       
-       current->state = TASK_STOPPED;
-       notify_parent(current, SIGCHLD);
-       schedule();
+       /* the 0x80 provides a way for the tracing parent to distinguish
+          between a syscall stop and SIGTRAP delivery */
+       ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
+                                ? 0x80 : 0));
        
        /*
         * This isn't the same as continuing with a signal, but it will do for
index d959302..b668d7f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: setup.c,v 1.1 2002/12/11 15:42:02 starvik Exp $
+/*
  *
  *  linux/arch/cris/arch-v10/kernel/setup.c
  *
@@ -94,3 +94,10 @@ int show_cpuinfo(struct seq_file *m, void *v)
 }
 
 #endif /* CONFIG_PROC_FS */
+
+void
+show_etrax_copyright(void)
+{
+       printk(KERN_INFO
+               "Linux/CRIS port on ETRAX 100LX (c) 2001 Axis Communications AB\n");
+}
index 6698054..8db985e 100644 (file)
@@ -180,6 +180,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
        unsigned int err = 0;
        unsigned long old_usp;
 
+        /* Always make any pending restarted system calls return -EINTR */
+       current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
        /* restore the regs from &sc->regs (same as sc, since regs is first)
         * (sc is already checked for VERIFY_READ since the sigframe was
         *  checked in sys_sigreturn previously)
@@ -492,7 +495,6 @@ handle_signal(int canrestart, unsigned long sig,
                /* If so, check system call restarting.. */
                switch (regs->r10) {
                        case -ERESTART_RESTARTBLOCK:
-                               current_thread_info()->restart_block.fn = do_no_restart_syscall;
                        case -ERESTARTNOHAND:
                                /* ERESTARTNOHAND means that the syscall should only be
                                   restarted if there was no handler for the signal, and since
index 31e83a8..c4d78d5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: time.c,v 1.2 2003/07/04 08:27:41 starvik Exp $
+/* $Id: time.c,v 1.3 2004/06/01 05:38:42 starvik Exp $
  *
  *  linux/arch/cris/arch-v10/kernel/time.c
  *
@@ -277,6 +277,12 @@ time_init(void)
                update_xtime_from_cmos();
        }
 
+       /*
+        * Initialize wall_to_monotonic such that adding it to xtime will yield zero, the
+        * tv_nsec field must be normalized (i.e., 0 <= nsec < NSEC_PER_SEC).
+        */
+       set_normalized_timespec(&wall_to_monotonic, -xtime.tv_sec, -xtime.tv_nsec);
+
        /* Setup the etrax timers
         * Base frequency is 25000 hz, divider 250 -> 100 HZ
         * In normal mode, we use timer0, so timer1 is free. In cascade
index 4852709..2ef4ad5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: dram_init.S,v 1.3 2003/03/31 09:38:37 starvik Exp $
+/* $Id: dram_init.S,v 1.4 2003/09/22 09:21:59 starvik Exp $
  * 
  * DRAM/SDRAM initialization - alter with care
  * This file is intended to be included from other assembler files
  * Authors:  Mikael Starvik (starvik@axis.com) 
  * 
  * $Log: dram_init.S,v $
+ * Revision 1.4  2003/09/22 09:21:59  starvik
+ * Decompresser is linked to 0x407xxxxx and sdram commands are at 0x000xxxxx
+ * so we need to mask off 12 bits.
+ *
  * Revision 1.3  2003/03/31 09:38:37  starvik
  * Corrected calculation of end of sdram init commands
  *
@@ -152,9 +156,9 @@ _set_timing:
        
        ; Issue initialization command sequence
        move.d   _sdram_commands_start, $r2
-       and.d    0x00ffffff, $r2 ; Make sure commands are read from flash
+       and.d    0x000fffff, $r2 ; Make sure commands are read from flash
        move.d   _sdram_commands_end,  $r3
-       and.d    0x00ffffff, $r3
+       and.d    0x000fffff, $r3
 1:     clear.d  $r4
        move.b   [$r2+], $r4
        lslq     9, $r4 ; Command starts at bit 9
index 901a68d..22a6f0a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: old_checksum.c,v 1.2 2002/11/05 06:45:12 starvik Exp $
+/* $Id: old_checksum.c,v 1.3 2003/10/27 08:04:32 starvik Exp $
  *
  * INET                An implementation of the TCP/IP protocol suite for the LINUX
  *             operating system.  INET is implemented using the  BSD Socket
@@ -76,7 +76,7 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum)
     sum += *((unsigned short *)buff)++;
   }
   if(endMarker - buff > 0) {
-    sum += *buff;                 /* add extra byte separately */
+    sum += *buff;                 /* add extra byte seperately */
   }
   BITOFF;
   return(sum);
index 7a012ad..0c6bac0 100644 (file)
@@ -30,7 +30,7 @@ extern const struct exception_table_entry
        *search_exception_tables(unsigned long addr);
 
 asmlinkage void do_page_fault(unsigned long address, struct pt_regs *regs,
-                              int error_code);
+                              int protection, int writeaccess);
 
 /* fast TLB-fill fault handler
  * this is called from entry.S with interrupts disabled
@@ -39,8 +39,9 @@ asmlinkage void do_page_fault(unsigned long address, struct pt_regs *regs,
 void
 handle_mmu_bus_fault(struct pt_regs *regs)
 {
-       int cause, select;
+       int cause;
 #ifdef DEBUG
+       int select;
        int index;
        int page_id;
        int acc, inv;
@@ -48,15 +49,14 @@ handle_mmu_bus_fault(struct pt_regs *regs)
        int miss, we, writeac;
        pmd_t *pmd;
        pte_t pte;
-       int errcode;
        unsigned long address;
 
        cause = *R_MMU_CAUSE;
-       select = *R_TLB_SELECT;
 
        address = cause & PAGE_MASK; /* get faulting address */
 
 #ifdef DEBUG
+       select = *R_TLB_SELECT;
        page_id = IO_EXTRACT(R_MMU_CAUSE,  page_id,   cause);
        acc     = IO_EXTRACT(R_MMU_CAUSE,  acc_excp,  cause);
        inv     = IO_EXTRACT(R_MMU_CAUSE,  inv_excp,  cause);  
@@ -82,12 +82,6 @@ handle_mmu_bus_fault(struct pt_regs *regs)
        if(writeac)
                regs->csrinstr &= ~(1 << 5);
        
-       /* Set errcode's R/W flag according to the mode which caused the
-        * fault
-        */
-
-       errcode = writeac << 1;
-
        D(printk("bus_fault from IRP 0x%lx: addr 0x%lx, miss %d, inv %d, we %d, acc %d, dx %d pid %d\n",
                 regs->irp, address, miss, inv, we, acc, index, page_id));
 
@@ -99,16 +93,20 @@ handle_mmu_bus_fault(struct pt_regs *regs)
                 */
 
                pmd = (pmd_t *)(current_pgd + pgd_index(address));
-               if (pmd_none(*pmd))
-                       goto dofault;
+               if (pmd_none(*pmd)) {
+                       do_page_fault(address, regs, 0, writeac);
+                       return;
+               }
                if (pmd_bad(*pmd)) {
                        printk("bad pgdir entry 0x%lx at 0x%p\n", *(unsigned long*)pmd, pmd);
                        pmd_clear(pmd);
                        return;
                }
                pte = *pte_offset_kernel(pmd, address);
-               if (!pte_present(pte))
-                       goto dofault;
+               if (!pte_present(pte)) {
+                       do_page_fault(address, regs, 0, writeac);
+                       return;
+               }
 
 #ifdef DEBUG
                printk(" found pte %lx pg %p ", pte_val(pte), pte_page(pte));
@@ -143,14 +141,10 @@ handle_mmu_bus_fault(struct pt_regs *regs)
                *R_TLB_LO = pte_val(pte);
 
                return;
-       } 
-
-       errcode = 1 | (we << 1);
+       }
 
- dofault:
-       /* leave it to the MM system fault handler below */
-       D(printk("do_page_fault %lx errcode %d\n", address, errcode));
-       do_page_fault(address, regs, errcode);
+       /* leave it to the MM system fault handler */
+       do_page_fault(address, regs, 1, we);
 }
 
 /* Called from arch/cris/mm/fault.c to find fixup code. */
index 2ddb0a6..62fd014 100644 (file)
@@ -212,7 +212,7 @@ dump_tlb_all(void)
 
 void 
 switch_mm(struct mm_struct *prev, struct mm_struct *next,
-         struct task_struct *tsk, int cpu)
+         struct task_struct *tsk)
 {
        /* make sure we have a context */
 
index 3932dfa..0cef3f9 100644 (file)
@@ -1,25 +1,55 @@
 #
 # Automatically generated make config: don't edit
 #
+CONFIG_MMU=y
 CONFIG_UID16=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_STANDALONE=y
+CONFIG_BROKEN_ON_SMP=y
 
 #
 # General setup
 #
-CONFIG_NET=y
-CONFIG_SYSVIPC=y
+CONFIG_SWAP=y
+# CONFIG_SYSVIPC is not set
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_SYSCTL is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_HOTPLUG is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS 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
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# General setup
+#
 CONFIG_BINFMT_ELF=y
-# CONFIG_ETRAX_KGDB is not set
-# CONFIG_ETRAX_WATCHDOG is not set
+# CONFIG_BINFMT_MISC is not set
+CONFIG_ETRAX_CMDLINE="root=/dev/mtdblock3 init=/linuxrc"
+CONFIG_ETRAX_WATCHDOG=y
+CONFIG_ETRAX_WATCHDOG_NICE_DOGGY=y
+CONFIG_ETRAX_FAST_TIMER=y
+# CONFIG_PREEMPT is not set
 
 #
 # Hardware setup
@@ -27,74 +57,170 @@ CONFIG_BINFMT_ELF=y
 CONFIG_ETRAX100LX=y
 # CONFIG_ETRAX100LX_V2 is not set
 # CONFIG_SVINTO_SIM is not set
-CONFIG_ETRAX_DRAM_SIZE=8
+CONFIG_ETRAX_ARCH_V10=y
+CONFIG_ETRAX_DRAM_SIZE=16
 CONFIG_ETRAX_FLASH_BUSWIDTH=2
-CONFIG_ETRAX_ROOT_DEVICE="/dev/mtdblock3"
+CONFIG_CRIS_LOW_MAP=y
+CONFIG_ETRAX_DRAM_VIRTUAL_BASE=60000000
+CONFIG_ETRAX_PA_LEDS=y
+# CONFIG_ETRAX_PB_LEDS is not set
+# CONFIG_ETRAX_CSP0_LEDS is not set
+# CONFIG_ETRAX_NO_LEDS is not set
+CONFIG_ETRAX_LED1G=2
+CONFIG_ETRAX_LED1R=2
+CONFIG_ETRAX_LED2G=3
+CONFIG_ETRAX_LED2R=3
+CONFIG_ETRAX_LED3G=2
+CONFIG_ETRAX_LED3R=2
+CONFIG_ETRAX_DEBUG_PORT0=y
+# CONFIG_ETRAX_DEBUG_PORT1 is not set
+# CONFIG_ETRAX_DEBUG_PORT2 is not set
+# CONFIG_ETRAX_DEBUG_PORT3 is not set
+# CONFIG_ETRAX_DEBUG_PORT_NULL is not set
+CONFIG_ETRAX_RESCUE_SER0=y
+# CONFIG_ETRAX_RESCUE_SER1 is not set
+# CONFIG_ETRAX_RESCUE_SER2 is not set
+# CONFIG_ETRAX_RESCUE_SER3 is not set
+CONFIG_ETRAX_DEF_R_WAITSTATES=0x95f8
+CONFIG_ETRAX_DEF_R_BUS_CONFIG=0x104
+CONFIG_ETRAX_SDRAM=y
+CONFIG_ETRAX_DEF_R_SDRAM_CONFIG=0x00e03636
+CONFIG_ETRAX_DEF_R_SDRAM_TIMING=0x80008002
+CONFIG_ETRAX_DEF_R_PORT_PA_DIR=0x1d
+CONFIG_ETRAX_DEF_R_PORT_PA_DATA=0xf0
+CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG=0x00
+CONFIG_ETRAX_DEF_R_PORT_PB_DIR=0x1e
+CONFIG_ETRAX_DEF_R_PORT_PB_DATA=0xf3
+# CONFIG_ETRAX_SOFT_SHUTDOWN is not set
+
+#
+# Drivers for built-in interfaces
+#
+CONFIG_ETRAX_ETHERNET=y
+CONFIG_NET_ETHERNET=y
+# CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK is not set
+CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY=y
+CONFIG_ETRAX_SERIAL=y
+CONFIG_ETRAX_SERIAL_FAST_TIMER=y
+CONFIG_ETRAX_SERIAL_PORT0=y
+# CONFIG_CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_OUT is not set
+CONFIG_CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT=y
+# CONFIG_CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_IN is not set
+CONFIG_CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN=y
+CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_NONE=y
+# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PA is not set
+# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PB is not set
+# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED is not set
+CONFIG_ETRAX_SER0_DTR_ON_PA_BIT=-1
+CONFIG_ETRAX_SER0_RI_ON_PA_BIT=-1
+CONFIG_ETRAX_SER0_DSR_ON_PA_BIT=-1
+CONFIG_ETRAX_SER0_CD_ON_PA_BIT=-1
+CONFIG_ETRAX_SER0_DTR_ON_PB_BIT=-1
+CONFIG_ETRAX_SER0_RI_ON_PB_BIT=-1
+CONFIG_ETRAX_SER0_DSR_ON_PB_BIT=-1
+CONFIG_ETRAX_SER0_CD_ON_PB_BIT=-1
+# CONFIG_ETRAX_SERIAL_PORT1 is not set
+CONFIG_ETRAX_SERIAL_PORT2=y
+# CONFIG_CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_OUT is not set
+CONFIG_CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT=y
+# CONFIG_CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_IN is not set
+CONFIG_CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN=y
+CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_NONE=y
+# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PA is not set
+# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PB is not set
+# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED is not set
+CONFIG_ETRAX_SER2_DTR_ON_PA_BIT=-1
+CONFIG_ETRAX_SER2_RI_ON_PA_BIT=-1
+CONFIG_ETRAX_SER2_DSR_ON_PA_BIT=-1
+CONFIG_ETRAX_SER2_CD_ON_PA_BIT=-1
+CONFIG_ETRAX_SER2_DTR_ON_PB_BIT=-1
+CONFIG_ETRAX_SER2_RI_ON_PB_BIT=-1
+CONFIG_ETRAX_SER2_DSR_ON_PB_BIT=-1
+CONFIG_ETRAX_SER2_CD_ON_PB_BIT=-1
+# CONFIG_ETRAX_SERIAL_PORT3 is not set
+# CONFIG_ETRAX_RS485 is not set
+# CONFIG_ETRAX_IDE is not set
+# CONFIG_IDE is not set
+# CONFIG_ETRAX_USB_HOST is not set
+CONFIG_ETRAX_AXISFLASHMAP=y
+CONFIG_ETRAX_PTABLE_SECTOR=65536
+CONFIG_MTD=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_OBSOLETE_CHIPS=y
+CONFIG_MTD_AMDSTD=y
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_CONCAT=y
+# CONFIG_ETRAX_I2C is not set
+CONFIG_ETRAX_GPIO=y
+CONFIG_ETRAX_PA_BUTTON_BITMASK=0x02
+CONFIG_ETRAX_PA_CHANGEABLE_DIR=0x00
+CONFIG_ETRAX_PA_CHANGEABLE_BITS=0xFF
+CONFIG_ETRAX_PB_CHANGEABLE_DIR=0x00
+CONFIG_ETRAX_PB_CHANGEABLE_BITS=0xFF
+# CONFIG_ETRAX_RTC is not set
 
 #
-# Drivers for ETRAX 100LX built-in interfaces
+# Generic Driver Options
 #
 
 #
 # Memory Technology Devices (MTD)
 #
-CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
 
 #
-# Disk-On-Chip Device Drivers
+# User Modules And Translation Layers
 #
-# CONFIG_MTD_DOC1000 is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOCPROBE is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
 
 #
-# RAM/ROM Device Drivers
+# RAM/ROM/Flash chip drivers
 #
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_RAM=y
 # CONFIG_MTD_ROM is not set
-# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
 
 #
-# Linearly Mapped Flash Device Drivers
+# Mapping drivers for chip access
 #
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_CFI_GEOMETRY is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-CONFIG_MTD_CFI_AMDSTD=y
-CONFIG_MTD_AMDSTD=y
-# CONFIG_MTD_SHARP is not set
+CONFIG_MTD_COMPLEX_MAPPINGS=y
 # CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_NORA is not set
-# CONFIG_MTD_PNC2000 is not set
-# CONFIG_MTD_RPXLITE is not set
-# CONFIG_MTD_SC520CDP is not set
-# CONFIG_MTD_SBC_MEDIAGX is not set
-# CONFIG_MTD_ELAN_104NC is not set
-# CONFIG_MTD_SA1100 is not set
-# CONFIG_MTD_DC21285 is not set
-# CONFIG_MTD_CSTM_CFI_JEDEC is not set
-# CONFIG_MTD_JEDEC is not set
-# CONFIG_MTD_MIXMEM is not set
-# CONFIG_MTD_OCTAGON is not set
-# CONFIG_MTD_VMAX is not set
 
 #
-# NAND Flash Device Drivers
+# Self-contained MTD device drivers
 #
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_SPIA is not set
+# CONFIG_MTD_SLRAM is not set
+CONFIG_MTD_MTDRAM=y
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=64
+CONFIG_MTDRAM_ABS_POS=0x0
+# CONFIG_MTD_BLKMTD is not set
 
 #
-# User Modules And Translation Layers
+# Disk-On-Chip Device Drivers
 #
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
 
 #
 # Parallel port support
@@ -102,51 +228,98 @@ CONFIG_MTD_BLOCK=y
 # CONFIG_PARPORT is not set
 
 #
-# Plug and Play configuration
+# Plug and Play support
 #
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP 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_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_BLK_DEV_INITRD is not set
 
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+
+#
+# SCSI device support
+#
+# CONFIG_SCSI is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+
+#
+# Networking support
+#
+CONFIG_NET=y
+
 #
 # Networking options
 #
-# CONFIG_PACKET is not set
-# CONFIG_NETLINK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_FILTER is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+# CONFIG_NETLINK_DEV is not set
 CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
 CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
 # CONFIG_IP_PNP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_INET_ECN is not set
+# CONFIG_ARPD is not set
 # CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_KHTTPD is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
-# CONFIG_LLC is not set
 # CONFIG_NET_DIVERT is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
@@ -159,167 +332,114 @@ CONFIG_INET=y
 # CONFIG_NET_SCHED is not set
 
 #
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-# CONFIG_PHONE_IXJ is not set
-
-#
-# ATA/IDE/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-# CONFIG_BLK_DEV_IDE is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_IDEDISK is not set
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
-
-#
-# SCSI support
-#
-# CONFIG_SCSI is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
-
-#
-# Network device support
+# Network testing
 #
+# CONFIG_NET_PKTGEN is not set
+# 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
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
 
 #
 # Ethernet (10 or 100Mbit)
 #
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-# CONFIG_NET_POCKET is not set
+# CONFIG_MII is not set
 
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_ACENIC is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
 
 #
-# Wireless LAN (non-hamradio)
+# Ethernet (10000 Mbit)
 #
-# CONFIG_NET_RADIO is not set
 
 #
 # Token Ring devices
 #
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
 
 #
 # Wan interfaces
 #
 # CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
 
 #
-# Amateur Radio support
+# ISDN subsystem
 #
-# CONFIG_HAMRADIO is not set
+# CONFIG_ISDN is not set
 
 #
-# IrDA (infrared) support
+# Telephony Support
 #
-# CONFIG_IRDA is not set
+# CONFIG_PHONE is not set
 
 #
-# ISDN subsystem
+# Input device support
 #
-# CONFIG_ISDN is not set
+# CONFIG_INPUT is not set
 
 #
-# CD-ROM drivers (not for SCSI or IDE/ATAPI drives)
+# Userland interfaces
 #
-# CONFIG_CD_NO_IDESCSI is not set
 
 #
-# Input core support
+# Input I/O drivers
+#
+# CONFIG_GAMEPORT is not set
+CONFIG_SOUND_GAMEPORT=y
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+
+#
+# Input Device Drivers
 #
-# CONFIG_INPUT is not set
 
 #
 # Character devices
 #
 # CONFIG_VT is not set
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
 
 #
-# I2C support
+# Serial drivers
 #
-# CONFIG_I2C is not set
+# CONFIG_SERIAL_8250 is not set
 
 #
-# Mice
+# Non-8250 serial port support
 #
-# CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_QIC02_TAPE is not set
 
 #
-# Joysticks
+# IPMI
 #
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
+# CONFIG_IPMI_HANDLER is not set
 
 #
 # Watchdog Cards
 #
 # CONFIG_WATCHDOG is not set
-# CONFIG_INTEL_RNG is not set
-# CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -330,83 +450,106 @@ CONFIG_NET_ETHERNET=y
 # CONFIG_FTAPE is not set
 # CONFIG_AGP is not set
 # CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
 
 #
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
 
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
 #
 # File systems
 #
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
 # CONFIG_QUOTA is not set
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_FAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+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_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+
+#
+# Miscellaneous filesystems
+#
 # CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW 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_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
-# CONFIG_UMSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
+CONFIG_JFFS_FS=y
+CONFIG_JFFS_FS_VERBOSE=0
+# CONFIG_JFFS2_FS is not set
 CONFIG_CRAMFS=y
-CONFIG_RAMFS=y
-# CONFIG_ISO9660_FS is not set
-# CONFIG_JOLIET is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_RW is not set
+# CONFIG_VXFS_FS is not set
 # CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS is not set
 # CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_EXT2_FS is not set
 # CONFIG_SYSV_FS is not set
-# CONFIG_SYSV_FS_WRITE is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
 # CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
 
 #
 # Network File Systems
 #
-# CONFIG_CODA_FS is not set
-# CONFIG_NFS_FS is not set
-# CONFIG_NFS_V3 is not set
-# CONFIG_ROOT_NFS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
-# CONFIG_NFSD_V3 is not set
-# CONFIG_SUNRPC is not set
-# CONFIG_LOCKD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+# CONFIG_EXPORTFS is not set
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
-# CONFIG_NCPFS_PACKET_SIGNING is not set
-# CONFIG_NCPFS_IOCTL_LOCKING is not set
-# CONFIG_NCPFS_STRONG is not set
-# CONFIG_NCPFS_NFS_NS is not set
-# CONFIG_NCPFS_OS2_NS is not set
-# CONFIG_NCPFS_SMALLDOS is not set
-# CONFIG_NCPFS_MOUNT_SUBDIR is not set
-# CONFIG_NCPFS_NDS_DOMAINS is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_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 is not set
 
 #
@@ -417,9 +560,33 @@ CONFIG_MSDOS_PARTITION=y
 #
 # USB support
 #
-# CONFIG_USB is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
 
 #
 # Kernel hacking
 #
 # CONFIG_PROFILE is not set
+# CONFIG_ETRAX_KGDB is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_FRAME_POINTER is not set
+
+#
+# Security options
+#
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC32 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
index 49bb782..7c071a7 100644 (file)
@@ -1,14 +1,14 @@
-# $Id: Makefile,v 1.8 2003/04/09 05:20:47 starvik Exp $
+# $Id: Makefile,v 1.10 2004/05/14 10:18:12 starvik Exp $
 #
 # Makefile for the linux kernel.
 #
 
-extra-y := vmlinux.lds.s
+extra-y        := vmlinux.lds.s
 
 obj-y   := process.o traps.o irq.o ptrace.o setup.o \
           time.o sys_cris.o semaphore.o
 
-obj-$(CONFIG_MODULES)    += ksyms.o
+obj-$(CONFIG_MODULES)    += crisksyms.o
 obj-$(CONFIG_MODULES)   += module.o
 
 clean:
diff --git a/arch/cris/kernel/hexify.c b/arch/cris/kernel/hexify.c
deleted file mode 100644 (file)
index daa331f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <stdio.h>
-
-
-void main()
-{
-       int c;
-       int comma=0;
-       int count=0;
-       while((c=getchar())!=EOF)
-       {
-               unsigned char x=c;
-               if(comma)
-                       printf(",");
-               else
-                       comma=1;
-               if(count==8)
-               {
-                       count=0;
-                       printf("\n");
-               }
-               if(count==0)
-                       printf("\t");
-               printf("0x%02X",c);
-               count++;
-       }
-       if(count)
-               printf("\n");
-       exit(0);
-}
-
-               
index 5eba7c1..a963dda 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: irq.c,v 1.8 2003/07/04 08:27:52 starvik Exp $
+/*
  *
  *     linux/arch/cris/kernel/irq.c
  *
@@ -99,7 +99,7 @@ int show_interrupts(struct seq_file *p, void *v)
                if (!action) 
                        goto skip;
                seq_printf(p, "%2d: %10u %c %s",
-                       i, kstat_cpu(0).irqs[i],
+                       i, kstat_this_cpu.irqs[i],
                        (action->flags & SA_INTERRUPT) ? '+' : ' ',
                        action->name);
                for (action = action->next; action; action = action->next) {
@@ -129,13 +129,12 @@ asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
 
         cpu = smp_processor_id();
         irq_enter();
-       kstat_cpu(cpu).irqs[irq]++;
+       kstat_cpu(cpu).irqs[irq - FIRST_IRQ]++;
+       action = irq_action[irq - FIRST_IRQ];
 
-       action = irq_action[irq];
         if (action) {
                 if (!(action->flags & SA_INTERRUPT))
                         local_irq_enable();
-                action = irq_action[irq];
                 do_random = 0;
                 do {
                         do_random |= action->flags;
@@ -175,7 +174,7 @@ int setup_irq(int irq, struct irqaction * new)
        struct irqaction *old, **p;
        unsigned long flags;
 
-       p = irq_action + irq;
+       p = irq_action + irq - FIRST_IRQ;
        if ((old = *p) != NULL) {
                /* Can't share interrupts unless both agree to */
                if (!(old->flags & new->flags & SA_SHIRQ))
@@ -230,12 +229,6 @@ int request_irq(unsigned int irq,
        int retval;
        struct irqaction * action;
 
-       /* interrupts 0 and 1 are hardware breakpoint and NMI and we can't support
-          these yet. interrupt 15 is the multiple irq, it's special. */
-
-       if(irq < 2 || irq == 15 || irq >= NR_IRQS)
-               return -EINVAL;
-
        if(!handler)
                return -EINVAL;
 
@@ -270,7 +263,7 @@ void free_irq(unsigned int irq, void *dev_id)
                printk("Trying to free IRQ%d\n",irq);
                return;
        }
-       for (p = irq + irq_action; (action = *p) != NULL; p = &action->next) {
+       for (p = irq - FIRST_IRQ + irq_action; (action = *p) != NULL; p = &action->next) {
                if (action->dev_id != dev_id)
                        continue;
 
@@ -278,7 +271,7 @@ void free_irq(unsigned int irq, void *dev_id)
                local_save_flags(flags);
                local_irq_disable();
                *p = action->next;
-               if (!irq_action[irq]) {
+               if (!irq_action[irq - FIRST_IRQ]) {
                        mask_irq(irq);
                        arch_free_irq(irq);
                }
diff --git a/arch/cris/kernel/ksyms.c b/arch/cris/kernel/ksyms.c
deleted file mode 100644 (file)
index 1161a25..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/user.h>
-#include <linux/elfcore.h>
-#include <linux/sched.h>
-#include <linux/in6.h>
-#include <linux/interrupt.h>
-#include <linux/smp_lock.h>
-#include <linux/pm.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/tty.h>
-#include <asm/semaphore.h>
-#include <asm/processor.h>
-#include <asm/uaccess.h>
-#include <asm/checksum.h>
-#include <asm/io.h>
-#include <asm/hardirq.h>
-#include <asm/delay.h>
-#include <asm/irq.h>
-#include <asm/pgtable.h>
-
-extern void dump_thread(struct pt_regs *, struct user *);
-extern unsigned long get_cmos_time(void);
-extern void __Udiv(void);
-extern void __Umod(void);
-extern void __Div(void);
-extern void __Mod(void);
-extern void __ashrdi3(void);
-extern void iounmap(void *addr);
-
-/* Platform dependent support */
-EXPORT_SYMBOL(dump_thread);
-EXPORT_SYMBOL(enable_irq);
-EXPORT_SYMBOL(disable_irq);
-EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(get_cmos_time);
-EXPORT_SYMBOL(loops_per_usec);
-
-/* String functions */
-EXPORT_SYMBOL(memcmp);
-EXPORT_SYMBOL(memmove);
-EXPORT_SYMBOL(strpbrk);
-EXPORT_SYMBOL(strstr);
-EXPORT_SYMBOL(strcpy);
-EXPORT_SYMBOL(strchr);
-EXPORT_SYMBOL(strcmp);
-EXPORT_SYMBOL(strlen);
-EXPORT_SYMBOL(strcat);
-EXPORT_SYMBOL(strncat);
-EXPORT_SYMBOL(strncmp);
-EXPORT_SYMBOL(strncpy);
-
-/* Math functions */
-EXPORT_SYMBOL(__Udiv);
-EXPORT_SYMBOL(__Umod);
-EXPORT_SYMBOL(__Div);
-EXPORT_SYMBOL(__Mod);
-EXPORT_SYMBOL(__ashrdi3);
-
-/* Memory functions */
-EXPORT_SYMBOL(__ioremap);
-EXPORT_SYMBOL(iounmap);
-
-/* Semaphore functions */
-EXPORT_SYMBOL(__up);
-EXPORT_SYMBOL(__down);
-EXPORT_SYMBOL(__down_interruptible);
-EXPORT_SYMBOL(__down_trylock);
-
-/* Export shadow registers for the CPU I/O pins */
-EXPORT_SYMBOL(genconfig_shadow);
-EXPORT_SYMBOL(port_pa_data_shadow);
-EXPORT_SYMBOL(port_pa_dir_shadow);
-EXPORT_SYMBOL(port_pb_data_shadow);
-EXPORT_SYMBOL(port_pb_dir_shadow);
-EXPORT_SYMBOL(port_pb_config_shadow);
-EXPORT_SYMBOL(port_g_data_shadow);
-
-/* Userspace access functions */
-EXPORT_SYMBOL(__copy_user_zeroing);
-EXPORT_SYMBOL(__copy_user);
-
-/* Cache flush functions */
-EXPORT_SYMBOL(flush_etrax_cache);
-EXPORT_SYMBOL(prepare_rx_descriptor);
-
-#undef memcpy
-#undef memset
-extern void * memset(void *, int, __kernel_size_t);
-extern void * memcpy(void *, const void *, __kernel_size_t);
-EXPORT_SYMBOL_NOVERS(memcpy);
-EXPORT_SYMBOL_NOVERS(memset);
-
-
index 052c003..f1d3e78 100644 (file)
@@ -75,8 +75,6 @@ int apply_relocate(Elf32_Shdr *sechdrs,
                sym = (Elf32_Sym *)sechdrs[symindex].sh_addr
                        + ELF32_R_SYM(rel[i].r_info);
 
-                /* TODO: This is probably not correct */
-                printk("Beware: untested code in module.c!\n");
                 /* We add the value into the location given */
                 *location += sym->st_value;
        }
@@ -89,9 +87,26 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
                       unsigned int relsec,
                       struct module *me)
 {
-       printk(KERN_ERR "module %s: ADD RELOCATION unsupported\n",
-              me->name);
-       return -ENOEXEC;
+       unsigned int i;
+       Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr;
+
+       DEBUGP ("Applying relocate section %u to %u\n", relsec,
+               sechdrs[relsec].sh_info);
+
+       for (i = 0; i < sechdrs[relsec].sh_size / sizeof (*rela); i++) {
+               /* This is where to make the change */
+               uint32_t *loc
+                       = ((void *)sechdrs[sechdrs[relsec].sh_info].sh_addr
+                          + rela[i].r_offset);
+               /* This is the symbol it is referring to.  Note that all
+                  undefined symbols have been resolved.  */
+               Elf32_Sym *sym
+                       = ((Elf32_Sym *)sechdrs[symindex].sh_addr
+                          + ELF32_R_SYM (rela[i].r_info));
+               *loc = sym->st_value + rela[i].r_addend;
+       }
+
+       return 0;
 }
 
 int module_finalize(const Elf_Ehdr *hdr,
index cbb0bad..c4992bf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: process.c,v 1.14 2003/06/10 10:21:12 johana Exp $
+/* $Id: process.c,v 1.17 2004/04/05 13:53:48 starvik Exp $
  * 
  *  linux/arch/cris/kernel/process.c
  *
@@ -8,9 +8,18 @@
  *  Authors:   Bjorn Wesen (bjornw@axis.com)
  *
  *  $Log: process.c,v $
+ *  Revision 1.17  2004/04/05 13:53:48  starvik
+ *  Merge of Linux 2.6.5
+ *
+ *  Revision 1.16  2003/10/27 08:04:33  starvik
+ *  Merge of Linux 2.6.0-test9
+ *
+ *  Revision 1.15  2003/09/11 07:29:52  starvik
+ *  Merge of Linux 2.6.0-test5
+ *
  *  Revision 1.14  2003/06/10 10:21:12  johana
  *  Moved thread_saved_pc() from arch/cris/kernel/process.c to
- *  subarch specific process.c. 
+ *  subarch specific process.c. arch-v32 has an erp, no irp.
  *
  *  Revision 1.13  2003/04/09 05:20:47  starvik
  *  Merge of Linux 2.5.67
 #include <asm/atomic.h>
 #include <asm/pgtable.h>
 #include <asm/uaccess.h>
+#include <asm/irq.h>
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/fs_struct.h>
@@ -182,13 +192,17 @@ void cpu_idle (void)
 {
        /* endless idle loop with no priority at all */
        while (1) {
-               void (*idle)(void) = pm_idle;
-               if (!idle)
-                       idle = default_idle;
-               while (!need_resched())
+               while (!need_resched()) {
+                       void (*idle)(void) = pm_idle;
+
+                       if (!idle)
+                               idle = default_idle;
+
                        idle();
+               }
                schedule();
        }
+
 }
 
 void hard_reset_now (void);
index fc989d2..95a9f44 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: setup.c,v 1.7 2003/07/04 08:27:52 starvik Exp $
+/*
  *
  *  linux/arch/cris/kernel/setup.c
  *
@@ -10,6 +10,7 @@
  * This file handles the architecture-dependent parts of initialization
  */
 
+#include <linux/config.h>
 #include <linux/init.h>
 #include <linux/mm.h>
 #include <linux/bootmem.h>
@@ -38,6 +39,8 @@ extern unsigned long dram_start, dram_end;
 
 extern unsigned long romfs_start, romfs_length, romfs_in_flash; /* from head.S */
 
+extern void show_etrax_copyright(void);                /* arch-vX/kernel/setup.c */
+
 /* This mainly sets up the memory area, and can be really confusing.
  *
  * The physical DRAM is virtually mapped into dram_start to dram_end
@@ -153,18 +156,16 @@ setup_arch(char **cmdline_p)
        *cmdline_p = command_line;
 
 #ifdef CONFIG_ETRAX_CMDLINE
-       strlcpy(command_line, CONFIG_ETRAX_CMDLINE, sizeof(command_line));
-#elif defined(CONFIG_ETRAX_ROOT_DEVICE)
-       strlcpy(command_line, "root=", sizeof(command_line));
-       strlcat(command_line, CONFIG_ETRAX_ROOT_DEVICE,
-               sizeof(command_line));
-#endif
+       strlcpy(command_line, CONFIG_ETRAX_CMDLINE, COMMAND_LINE_SIZE);
        command_line[COMMAND_LINE_SIZE - 1] = '\0';
 
-       /* give credit for the CRIS port */
-
-       printk("Linux/CRIS port on ETRAX 100LX (c) 2001 Axis Communications AB\n");
+       /* Save command line for future references. */
+       memcpy(saved_command_line, command_line, COMMAND_LINE_SIZE);
+       saved_command_line[COMMAND_LINE_SIZE - 1] = '\0';
+#endif
 
+       /* give credit for the CRIS port */
+       show_etrax_copyright();
 }
 
 static void *c_start(struct seq_file *m, loff_t *pos)
index cd50e5b..0aa0e0e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: sys_cris.c,v 1.5 2003/07/04 08:27:52 starvik Exp $
+/* $Id: sys_cris.c,v 1.6 2004/03/11 11:38:40 starvik Exp $
  *
  * linux/arch/cris/kernel/sys_cris.c
  *
index 9ca0f20..6c28b0e 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: time.c,v 1.9 2003/07/04 08:27:52 starvik Exp $
+/* $Id: time.c,v 1.14 2004/06/01 05:38:11 starvik Exp $
  *
  *  linux/arch/cris/kernel/time.c
  *
@@ -29,6 +29,7 @@
 #include <linux/jiffies.h>
 #include <linux/bcd.h>
 #include <linux/timex.h>
+#include <linux/init.h>
 
 u64 jiffies_64 = INITIAL_JIFFIES;
 
@@ -39,6 +40,8 @@ int have_rtc;  /* used to remember if we have an RTC or not */;
 #define TICK_SIZE tick
 
 extern unsigned long wall_jiffies;
+extern unsigned long loops_per_jiffy; /* init/main.c */
+unsigned long loops_per_usec;
 
 extern unsigned long do_slow_gettimeoffset(void);
 static unsigned long (*do_gettimeoffset)(void) = do_slow_gettimeoffset;
@@ -62,6 +65,15 @@ void do_gettimeofday(struct timeval *tv)
                if (lost)
                        usec += lost * (1000000 / HZ);
        }
+
+        /*
+        * If time_adjust is negative then NTP is slowing the clock
+        * so make sure not to go into next possible interval.
+        * Better to lose some accuracy than have time go backwards..
+        */
+       if (unlikely(time_adjust < 0) && usec > tickadj)
+               usec = tickadj;
+
        sec = xtime.tv_sec;
        usec += xtime.tv_nsec / 1000;
        local_irq_restore(flags);
@@ -79,35 +91,33 @@ EXPORT_SYMBOL(do_gettimeofday);
 
 int do_settimeofday(struct timespec *tv)
 {
-       unsigned long flags;
+       time_t wtm_sec, sec = tv->tv_sec;
+       long wtm_nsec, nsec = tv->tv_nsec;
 
-        if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
+       if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
                return -EINVAL;
 
-       local_irq_save(flags);
-       local_irq_disable();
-
-       /* This is revolting. We need to set the xtime.tv_usec
-        * correctly. However, the value in this location is
-        * is value at the last tick.
-        * Discover what correction gettimeofday
-        * would have done, and then undo it!
+       write_seqlock_irq(&xtime_lock);
+       /*
+        * This is revolting. We need to set "xtime" correctly. However, the
+        * value in this location is the value at the most recent update of
+        * wall time.  Discover what correction gettimeofday() would have
+        * made, and then undo it!
         */
-       tv->tv_nsec -= do_gettimeoffset() * 1000;
-        tv->tv_nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
+       nsec -= do_gettimeoffset() * NSEC_PER_USEC;
+       nsec -= (jiffies - wall_jiffies) * TICK_NSEC;
+
+       wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
+       wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
+
+       set_normalized_timespec(&xtime, sec, nsec);
+       set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
 
-       while (tv->tv_nsec < 0) {
-               tv->tv_nsec += NSEC_PER_SEC;
-               tv->tv_sec--;
-       }
-       xtime.tv_sec = tv->tv_sec;
-       xtime.tv_nsec = tv->tv_nsec;
        time_adjust = 0;                /* stop active adjtime() */
        time_status |= STA_UNSYNC;
-       time_state = TIME_ERROR;        /* p. 24, (a) */
        time_maxerror = NTP_PHASE_LIMIT;
        time_esterror = NTP_PHASE_LIMIT;
-       local_irq_restore(flags);
+       write_sequnlock_irq(&xtime_lock);
        clock_was_set();
        return 0;
 }
@@ -125,7 +135,7 @@ int set_rtc_mmss(unsigned long nowtime)
        int retval = 0;
        int real_seconds, real_minutes, cmos_minutes;
 
-       printk("set_rtc_mmss(%lu)\n", nowtime);
+       printk(KERN_DEBUG "set_rtc_mmss(%lu)\n", nowtime);
 
        if(!have_rtc)
                return 0;
@@ -174,7 +184,8 @@ get_cmos_time(void)
        mon = CMOS_READ(RTC_MONTH);
        year = CMOS_READ(RTC_YEAR);
 
-       printk("rtc: sec 0x%x min 0x%x hour 0x%x day 0x%x mon 0x%x year 0x%x\n", 
+       printk(KERN_DEBUG
+              "rtc: sec 0x%x min 0x%x hour 0x%x day 0x%x mon 0x%x year 0x%x\n",
               sec, min, hour, day, mon, year);
 
        BCD_TO_BIN(sec);
@@ -202,3 +213,20 @@ update_xtime_from_cmos(void)
                xtime.tv_nsec = 0;
        }
 }
+
+/*
+ * Scheduler clock - returns current time in nanosec units.
+ */
+unsigned long long sched_clock(void)
+{
+       return (unsigned long long)jiffies * (1000000000 / HZ);
+}
+
+static int
+__init init_udelay(void)
+{
+       loops_per_usec = (loops_per_jiffy * HZ) / 1000000;
+       return 0;
+}
+
+__initcall(init_udelay);
index d9e6565..d4dfa05 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: traps.c,v 1.7 2003/07/04 08:27:52 starvik Exp $
+/* $Id: traps.c,v 1.9 2004/05/11 12:28:26 starvik Exp $
  *
  *  linux/arch/cris/traps.c
  *
@@ -14,6 +14,7 @@
  */
 
 #include <linux/init.h>
+#include <linux/module.h>
 #include <asm/pgtable.h>
 #include <asm/uaccess.h>
 
index 7e8f2a3..03254b9 100644 (file)
@@ -6,9 +6,18 @@
  *  Authors:  Bjorn Wesen 
  * 
  *  $Log: fault.c,v $
+ *  Revision 1.11  2004/05/14 07:58:05  starvik
+ *  Merge of changes from 2.4
+ *
+ *  Revision 1.10  2003/10/27 14:51:24  starvik
+ *  Removed debugcode
+ *
+ *  Revision 1.9  2003/10/27 14:50:42  starvik
+ *  Changed do_page_fault signature
+ *
  *  Revision 1.8  2003/07/04 13:02:48  tobiasa
  *  Moved code snippet from arch/cris/mm/fault.c that searches for fixup code
- *  to separate function in arch-specific files.
+ *  to seperate function in arch-specific files.
  *
  *  Revision 1.7  2003/01/22 06:48:38  starvik
  *  Fixed warnings issued by GCC 3.2.1
 extern int find_fixup_code(struct pt_regs *);
 extern void die_if_kernel(const char *, struct pt_regs *, long);
 
-asmlinkage void do_invalid_op (struct pt_regs *, unsigned long);
-asmlinkage void do_page_fault(unsigned long address, struct pt_regs *regs,
-                             int error_code);
-
 /* debug of low-level TLB reload */
 #undef DEBUG
 
@@ -134,14 +139,16 @@ volatile pgd_t *current_pgd;
 
 asmlinkage void
 do_page_fault(unsigned long address, struct pt_regs *regs,
-             int error_code)
+             int protection, int writeaccess)
 {
        struct task_struct *tsk;
        struct mm_struct *mm;
        struct vm_area_struct * vma;
-       int writeaccess;
        siginfo_t info;
 
+        D(printk("Page fault for %X at %X, prot %d write %d\n",
+                 address, regs->erp, protection, writeaccess));
+
        tsk = current;
 
        /*
@@ -164,7 +171,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
         */
 
        if (address >= VMALLOC_START &&
-           !(error_code & 1) &&
+           !protection &&
            !user_mode(regs))
                goto vmalloc_fault;
 
@@ -172,7 +179,6 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
        sti();
 
        mm = tsk->mm;
-       writeaccess = error_code & 2;
        info.si_code = SEGV_MAPERR;
 
        /*
@@ -291,7 +297,7 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
                printk(KERN_ALERT "Unable to handle kernel access");
        printk(" at virtual address %08lx\n",address);
 
-       die_if_kernel("Oops", regs, error_code);
+       die_if_kernel("Oops", regs, (writeaccess << 1) | protection);
 
        do_exit(SIGKILL);
 
index 3ff9bfc..d0bd0c9 100644 (file)
@@ -7,6 +7,13 @@
  *  Authors:  Bjorn Wesen (bjornw@axis.com)
  *
  *  $Log: init.c,v $
+ *  Revision 1.11  2004/05/28 09:28:56  starvik
+ *  Calculation of loops_per_usec moved because initalization order has changed
+ *  in Linux 2.6.
+ *
+ *  Revision 1.10  2004/05/14 07:58:05  starvik
+ *  Merge of changes from 2.4
+ *
  *  Revision 1.9  2003/07/04 08:27:54  starvik
  *  Merge of Linux 2.5.74
  *
@@ -120,9 +127,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
 unsigned long empty_zero_page;
 
-extern unsigned long loops_per_jiffy; /* init/main.c */
-unsigned long loops_per_usec;
-
 extern char _stext, _edata, _etext; /* From linkerscript */
 extern char __init_begin, __init_end;
 
@@ -190,7 +194,8 @@ mem_init(void)
         datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
         initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
        
-        printk("Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
+        printk(KERN_INFO
+               "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
               "%dk init)\n" ,
               (unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
               max_mapnr << (PAGE_SHIFT-10),
@@ -199,16 +204,6 @@ mem_init(void)
               datasize >> 10,
               initsize >> 10
                );
-
-       /* HACK alert - calculate a loops_per_usec for asm/delay.h here
-        * since this is called just after calibrate_delay in init/main.c
-        * but before places which use udelay. cannot be in time.c since
-        * that is called _before_ calibrate_delay
-        */
-
-       loops_per_usec = (loops_per_jiffy * HZ) / 1000000;
-
-       return;
 }
 
 /* free the pages occupied by initialization code */
@@ -225,6 +220,6 @@ free_initmem(void)
                 free_page(addr);
                 totalram_pages++;
         }
-        printk ("Freeing unused kernel memory: %luk freed\n", 
+        printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n",
                (unsigned long)((&__init_end - &__init_begin) >> 10));
 }
index 52151df..6b9130b 100644 (file)
@@ -118,31 +118,6 @@ void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flag
        if (!size || last_addr < phys_addr)
                return NULL;
 
-#if 0
-       /* TODO: Here we can put checks for driver-writer abuse...  */
-
-       /*
-        * Don't remap the low PCI/ISA area, it's always mapped..
-        */
-       if (phys_addr >= 0xA0000 && last_addr < 0x100000)
-               return phys_to_virt(phys_addr);
-
-       /*
-        * Don't allow anybody to remap normal RAM that we're using..
-        */
-       if (phys_addr < virt_to_phys(high_memory)) {
-               char *t_addr, *t_end;
-               struct page *page;
-
-               t_addr = __va(phys_addr);
-               t_end = t_addr + (size - 1);
-          
-               for(page = virt_to_page(t_addr); page <= virt_to_page(t_end); page++)
-                       if(!PageReserved(page))
-                               return NULL;
-       }
-#endif
-
        /*
         * Mappings have to be page-aligned
         */
index 3c9ca26..c43349a 100644 (file)
@@ -285,6 +285,7 @@ ENTRY(do_suspend_lowlevel)
        call    save_registers
        pushl   $3
        call    acpi_enter_sleep_state
+       addl    $4,%esp
        ret
        .p2align 4,,7
 ret_point:
index 3508c5b..43943f8 100644 (file)
@@ -53,16 +53,6 @@ void foo(void)
        OFFSET(TI_addr_limit, thread_info, addr_limit);
        OFFSET(TI_restart_block, thread_info, restart_block);
        OFFSET(TI_sysenter_return, thread_info, sysenter_return);
-       DEFINE(TI_real_stack, offsetof (struct thread_info, real_stack));
-       DEFINE(TI_virtual_stack, offsetof (struct thread_info, virtual_stack));
-       DEFINE(TI_user_pgd, offsetof (struct thread_info, user_pgd));
-
-       DEFINE(FIX_ENTRY_TRAMPOLINE_0_addr,
-                       __fix_to_virt(FIX_ENTRY_TRAMPOLINE_0));
-       DEFINE(FIX_VSYSCALL_addr, __fix_to_virt(FIX_VSYSCALL));
-
-       DEFINE(task_thread_db7,
-               offsetof (struct task_struct, thread.debugreg[7]));
        BLANK();
 
        OFFSET(EXEC_DOMAIN_handler, exec_domain, handler);
@@ -72,5 +62,21 @@ void foo(void)
        DEFINE(TSS_sysenter_esp0, offsetof(struct tss_struct, esp0) -
                 sizeof(struct tss_struct));
 
+       DEFINE(TI_task, offsetof (struct thread_info, task));
+       DEFINE(TI_exec_domain, offsetof (struct thread_info, exec_domain));
+       DEFINE(TI_flags, offsetof (struct thread_info, flags));
+       DEFINE(TI_preempt_count, offsetof (struct thread_info, preempt_count));
+       DEFINE(TI_addr_limit, offsetof (struct thread_info, addr_limit));
+       DEFINE(TI_sysenter_return,
+                       offsetof (struct thread_info, sysenter_return));
+       DEFINE(TI_real_stack, offsetof (struct thread_info, real_stack));
+       DEFINE(TI_virtual_stack, offsetof (struct thread_info, virtual_stack));
+       DEFINE(TI_user_pgd, offsetof (struct thread_info, user_pgd));
+
+       DEFINE(FIX_ENTRY_TRAMPOLINE_0_addr,
+                       __fix_to_virt(FIX_ENTRY_TRAMPOLINE_0));
+       DEFINE(FIX_VSYSCALL_addr, __fix_to_virt(FIX_VSYSCALL));
        DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
+       DEFINE(task_thread_db7,
+               offsetof (struct task_struct, thread.debugreg[7]));
 }
index b7c16fe..000aac1 100644 (file)
@@ -75,7 +75,6 @@
 
 #include <linux/kernel.h>
 #include <linux/module.h> 
-#include <linux/sched.h>
 #include <linux/init.h>
 #include <linux/smp.h>
 #include <linux/cpufreq.h>
index 5510cd6..53145bb 100644 (file)
@@ -18,7 +18,8 @@
  */
 
 #include <linux/kernel.h>
-#include <linux/module.h> 
+#include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/cpufreq.h>
 #include <linux/slab.h>
 
 #include "longhaul.h"
 
-#define DEBUG
-
-#ifdef DEBUG
-#define dprintk(msg...) printk(msg)
-#else
-#define dprintk(msg...) do { } while(0)
-#endif
-
 #define PFX "longhaul: "
 
 static unsigned int numscales=16, numvscales;
+static unsigned int fsb;
 static int minvid, maxvid;
 static int can_scale_voltage;
 static int vrmrev;
 
-
 /* Module parameters */
 static int dont_scale_voltage;
-static unsigned int fsb;
+static int debug;
+static int debug;
+
+static void dprintk(const char *msg, ...)
+{
+       if (debug == 1)
+               printk(msg);
+}
+
 
 #define __hlt()     __asm__ __volatile__("hlt": : :"memory")
 
@@ -118,8 +119,7 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
 
        cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
 
-       dprintk (KERN_INFO PFX "FSB:%d Mult:%d.%dx\n", fsb,
-                               mult/10, mult%10);
+       dprintk (KERN_INFO PFX "FSB:%d Mult:%d.%dx\n", fsb, mult/10, mult%10);
 
        switch (longhaul_version) {
        case 1:
@@ -167,16 +167,16 @@ static void longhaul_setstate (unsigned int clock_ratio_index)
                longhaul.bits.SoftBusRatio = clock_ratio_index & 0xf;
                longhaul.bits.SoftBusRatio4 = (clock_ratio_index & 0x10) >> 4;
                longhaul.bits.EnableSoftBusRatio = 1;
-               
+
                longhaul.bits.RevisionKey = 0x0;
-               
+
                wrmsrl(MSR_VIA_LONGHAUL, longhaul.val);
                __hlt();
-               
+
                rdmsrl (MSR_VIA_LONGHAUL, longhaul.val);
                longhaul.bits.EnableSoftBusRatio = 0;
                longhaul.bits.RevisionKey = 0xf;
-               wrmsrl (MSR_VIA_LONGHAUL, longhaul.val);                
+               wrmsrl (MSR_VIA_LONGHAUL, longhaul.val);
                break;
        }
 
@@ -276,26 +276,26 @@ static int __init longhaul_get_ranges (void)
                                break;
                }
                break;
-               
+
        case 4:
                rdmsrl (MSR_VIA_LONGHAUL, longhaul.val);
-               
+
                //TODO: Nehemiah may have borken MaxMHzBR.
                // need to extrapolate from FSB.
-               
+
                invalue2 = longhaul.bits.MinMHzBR;
                invalue = longhaul.bits.MaxMHzBR;
-               if (longhaul.bits.MaxMHzBR4) 
+               if (longhaul.bits.MaxMHzBR4)
                        invalue += 16;
                maxmult=multipliers[invalue];
-               
+
                maxmult=longhaul_get_cpu_mult();
-               
+
                printk(KERN_INFO PFX " invalue: %ld  maxmult: %d \n", invalue, maxmult);
                printk(KERN_INFO PFX " invalue2: %ld \n", invalue2);
-               
+
                minmult=50;
-               
+
                switch (longhaul.bits.MaxMHzFSB) {
                case 0x0:       fsb=133;
                                break;
@@ -306,8 +306,8 @@ static int __init longhaul_get_ranges (void)
                case 0x3:       fsb=66;
                                break;
                }
-               
-               break;  
+
+               break;
        }
 
        dprintk (KERN_INFO PFX "MinMult=%d.%dx MaxMult=%d.%dx\n",
@@ -418,13 +418,13 @@ static int longhaul_target (struct cpufreq_policy *policy,
                            unsigned int relation)
 {
        unsigned int table_index = 0;
-       unsigned int new_clock_ratio = 0;
+       unsigned int new_clock_ratio = 0;
 
        if (cpufreq_frequency_table_target(policy, longhaul_table, target_freq, relation, &table_index))
                return -EINVAL;
 
        new_clock_ratio = longhaul_table[table_index].index & 0xFF;
+
        longhaul_setstate(new_clock_ratio);
 
        return 0;
@@ -500,7 +500,6 @@ static int __init longhaul_cpu_init (struct cpufreq_policy *policy)
                        break;
                }
                break;
-               
 
        default:
                cpuname = "Unknown";
@@ -514,11 +513,11 @@ static int __init longhaul_cpu_init (struct cpufreq_policy *policy)
        if (ret != 0)
                return ret;
 
-       if ((longhaul_version==2) && (dont_scale_voltage==0))
+       if ((longhaul_version==2) && (dont_scale_voltage==0))
                longhaul_setup_voltagescaling();
 
        policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
-       policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
+       policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL;
        policy->cur = calc_speed (longhaul_get_cpu_mult(), fsb);
 
        ret = cpufreq_frequency_table_cpuinfo(policy, longhaul_table);
@@ -530,7 +529,7 @@ static int __init longhaul_cpu_init (struct cpufreq_policy *policy)
        return 0;
 }
 
-static int __exit longhaul_cpu_exit(struct cpufreq_policy *policy)
+static int __devexit longhaul_cpu_exit(struct cpufreq_policy *policy)
 {
        cpufreq_frequency_table_put_attr(policy->cpu);
        return 0;
@@ -542,14 +541,14 @@ static struct freq_attr* longhaul_attr[] = {
 };
 
 static struct cpufreq_driver longhaul_driver = {
-       .verify         = longhaul_verify,
-       .target         = longhaul_target,
-       .get            = longhaul_get,
-       .init           = longhaul_cpu_init,
-       .exit           = longhaul_cpu_exit,
-       .name           = "longhaul",
-       .owner          = THIS_MODULE,
-       .attr           = longhaul_attr,
+       .verify = longhaul_verify,
+       .target = longhaul_target,
+       .get    = longhaul_get,
+       .init   = longhaul_cpu_init,
+       .exit   = __devexit_p(longhaul_cpu_exit),
+       .name   = "longhaul",
+       .owner  = THIS_MODULE,
+       .attr   = longhaul_attr,
 };
 
 static int __init longhaul_init (void)
@@ -560,12 +559,8 @@ static int __init longhaul_init (void)
                return -ENODEV;
 
        switch (c->x86_model) {
-       case 6 ... 8:
+       case 6 ... 9:
                return cpufreq_register_driver(&longhaul_driver);
-       case 9:
-               printk (KERN_INFO PFX "Nehemiah unsupported: Waiting on working silicon "
-                                               "from VIA before this is usable.\n");
-               break;
        default:
                printk (KERN_INFO PFX "Unknown VIA CPU. Contact davej@codemonkey.org.uk\n");
        }
@@ -579,7 +574,11 @@ static void __exit longhaul_exit (void)
        kfree(longhaul_table);
 }
 
-MODULE_PARM (dont_scale_voltage, "i");
+module_param (dont_scale_voltage, int, 0644);
+MODULE_PARM_DESC(dont_scale_voltage, "Don't scale voltage of processor");
+
+module_param (debug, int, 0644);
+MODULE_PARM_DESC(debug, "Dump debugging information.");
 
 MODULE_AUTHOR ("Dave Jones <davej@codemonkey.org.uk>");
 MODULE_DESCRIPTION ("Longhaul driver for VIA Cyrix processors.");
index b521aa7..b5daecc 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/smp.h>
 #include <linux/cpufreq.h>
 #include <linux/slab.h>
-#include <linux/sched.h>
 
 #include <asm/processor.h> 
 #include <asm/msr.h>
@@ -35,7 +34,7 @@
 
 #include "speedstep-lib.h"
 
-#define PFX    "cpufreq: "
+#define PFX    "p4-clockmod: "
 
 /*
  * Duty Cycle (3bits), note DC_DISABLE is not specified in
index d67f776..cf008b4 100644 (file)
@@ -16,7 +16,7 @@
 
 #include <linux/config.h>
 #include <linux/kernel.h>
-#include <linux/module.h> 
+#include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/init.h>
 #include <linux/cpufreq.h>
@@ -86,7 +86,7 @@ static int mobile_vid_table[32] = {
 /* divide by 10 to get FID. */
 static int fid_codes[32] = {
     110, 115, 120, 125, 50, 55, 60, 65,
-    70, 75, 80, 85, 90, 95, 100, 105, 
+    70, 75, 80, 85, 90, 95, 100, 105,
     30, 190, 40, 200, 130, 135, 140, 210,
     150, 225, 160, 165, 170, 180, -1, -1,
 };
@@ -95,7 +95,7 @@ static int fid_codes[32] = {
  * configuration purpose.
  */
 
-static int powernow_acpi_force;
+static int acpi_force;
 
 static struct cpufreq_frequency_table *powernow_table;
 
@@ -144,6 +144,11 @@ static int check_powernow(void)
        }
 
        cpuid(0x80000007, &eax, &ebx, &ecx, &edx);
+
+       /* Check we can actually do something before we say anything.*/
+       if (!(edx & (1 << 1 | 1 << 2)))
+               return 0;
+
        printk (KERN_INFO PFX "PowerNOW! Technology present. Can scale: ");
 
        if (edx & 1 << 1) {
@@ -159,11 +164,6 @@ static int check_powernow(void)
                can_scale_vid=1;
        }
 
-       if (!(edx & (1 << 1 | 1 << 2))) {
-               printk ("nothing.\n");
-               return 0;
-       }
-
        printk (".\n");
        return 1;
 }
@@ -572,7 +572,7 @@ static int __init powernow_cpu_init (struct cpufreq_policy *policy)
        }
        dprintk(KERN_INFO PFX "FSB: %3d.%03d MHz\n", fsb/1000, fsb%1000);
 
-       if ((dmi_broken & BROKEN_CPUFREQ) || powernow_acpi_force) {
+       if ((dmi_broken & BROKEN_CPUFREQ) || acpi_force) {
                printk (KERN_INFO PFX "PSB/PST known to be broken.  Trying ACPI instead\n");
                result = powernow_acpi_init();
        } else {
@@ -653,8 +653,7 @@ static void __exit powernow_exit (void)
                kfree(powernow_table);
 }
 
-module_param(powernow_acpi_force,  int, 0444);
-
+module_param(acpi_force,  int, 0444);
 MODULE_PARM_DESC(acpi_force, "Force ACPI to be used");
 
 MODULE_AUTHOR ("Dave Jones <davej@codemonkey.org.uk>");
index 51c59ef..63737e8 100644 (file)
@@ -553,7 +553,7 @@ static int fill_powernow_table(struct powernow_k8_data *data, struct pst_s *pst,
                printk(KERN_ERR PFX "no p states to transition\n");
                return -ENODEV;
        }
-                                                                                                    
+
        if (check_pst_table(data, pst, maxvid))
                return -EINVAL;
 
@@ -736,9 +736,9 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
                /* verify only 1 entry from the lo frequency table */
                if ((fid < HI_FID_TABLE_BOTTOM) && (cntlofreq++)) {
                        printk(KERN_ERR PFX "Too many lo freq table entries\n");
-                       goto err_out;
+                       goto err_out_mem;
                }
-                                                                                                            
+
                if (powernow_table[i].frequency != (data->acpi_data.states[i].core_frequency * 1000)) {
                        printk(KERN_INFO PFX "invalid freq entries %u kHz vs. %u kHz\n",
                                powernow_table[i].frequency,
@@ -757,12 +757,16 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
        print_basics(data);
        powernow_k8_acpi_pst_values(data, 0);
        return 0;
+
+err_out_mem:
+       kfree(powernow_table);
+
 err_out:
        acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
 
        /* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */
        data->acpi_data.state_count = 0;
-                                                                                                            
+
        return -ENODEV;
 }
 
@@ -945,7 +949,7 @@ static int __init powernowk8_cpu_init(struct cpufreq_policy *pol)
                if ((num_online_cpus() != 1) || (num_possible_cpus() != 1)) {
                        printk(KERN_INFO PFX "MP systems not supported by PSB BIOS structure\n");
                        kfree(data);
-                       return 0;
+                       return -ENODEV;
                }
                rc = find_psb_table(data);
                if (rc) {
@@ -1047,7 +1051,7 @@ static unsigned int powernowk8_get (unsigned int cpu)
        if (query_current_values_with_pending_wait(data))
                goto out;
 
-       khz = find_khz_freq_from_fid(data->currfid);    
+       khz = find_khz_freq_from_fid(data->currfid);
 
  out:
        preempt_enable_no_resched();
index 99b8d11..4234294 100644 (file)
@@ -27,7 +27,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                /* AMD-defined */
                NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
                NULL, NULL, NULL, "syscall", NULL, NULL, NULL, NULL,
-               NULL, NULL, NULL, "mp", NULL, NULL, "mmxext", NULL,
+               NULL, NULL, NULL, "mp", "nx", NULL, "mmxext", NULL,
                NULL, NULL, NULL, NULL, NULL, "lm", "3dnowext", "3dnow",
 
                /* Transmeta-defined */
index 3f868ea..69bad9b 100644 (file)
@@ -153,6 +153,32 @@ ENTRY(startup_32_smp)
        orl %edx,%eax
        movl %eax,%cr4
 
+       btl $5, %eax            # check if PAE is enabled
+       jnc 6f
+
+       /* Check if extended functions are implemented */
+       movl $0x80000000, %eax
+       cpuid
+       cmpl $0x80000000, %eax
+       jbe 6f
+       mov $0x80000001, %eax
+       cpuid
+       /* Execute Disable bit supported? */
+       btl $20, %edx
+       jnc 6f
+
+       /* Setup EFER (Extended Feature Enable Register) */
+       movl $0xc0000080, %ecx
+       rdmsr
+
+       btsl $11, %eax
+       /* Make changes effective */
+       wrmsr
+
+6:
+       /* cpuid clobbered ebx, set it up again: */
+       xorl %ebx,%ebx
+       incl %ebx
 3:
 #endif /* CONFIG_SMP */
 
index e8258ad..5149c8a 100644 (file)
@@ -32,7 +32,7 @@ void *module_alloc(unsigned long size)
 {
        if (size == 0)
                return NULL;
-       return vmalloc(size);
+       return vmalloc_exec(size);
 }
 
 
index 340e7f3..22a2fe2 100644 (file)
@@ -86,7 +86,10 @@ int __init scx200_init(void)
 
        if ((bridge = pci_find_device(PCI_VENDOR_ID_NS, 
                                      PCI_DEVICE_ID_NS_SCx200_BRIDGE,
-                                     NULL)) == NULL)
+                                     NULL)) == NULL
+           && (bridge = pci_find_device(PCI_VENDOR_ID_NS,
+                                        PCI_DEVICE_ID_NS_SC1100_BRIDGE,
+                                        NULL)) == NULL)
                return -ENODEV;
 
        base = pci_resource_start(bridge, 0);
index 62d7f17..1985ca1 100644 (file)
@@ -9,6 +9,7 @@
  * return value.
  */
 #include <asm/thread_info.h>
+#include <asm/asm_offsets.h>
 
 
 /*
index f611eaf..97d4af3 100644 (file)
@@ -431,6 +431,21 @@ no_context:
 
        bust_spinlocks(1);
 
+#ifdef CONFIG_X86_PAE
+       {
+               pgd_t *pgd;
+               pmd_t *pmd;
+
+
+
+               pgd = init_mm.pgd + pgd_index(address);
+               if (pgd_present(*pgd)) {
+                       pmd = pmd_offset(pgd, address);
+                       if (pmd_val(*pmd) & _PAGE_NX)
+                               printk(KERN_CRIT "kernel tried to access NX-protected page - exploit attempt? (uid: %d)\n", current->uid);
+               }
+       }
+#endif
        if (address < PAGE_SIZE)
                printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
        else
index 5817532..83972da 100644 (file)
@@ -41,12 +41,47 @@ void *kmap_atomic(struct page *page, enum km_type type)
        if (!pte_none(*(kmap_pte-idx)))
                BUG();
 #endif
-       set_pte(kmap_pte-idx, mk_pte(page, kmap_prot));
+       /*
+        * If the page is not a normal RAM page, then map it
+        * uncached to be on the safe side - it could be device
+        * memory that must not be prefetched:
+        */
+       if (PageReserved(page))
+               set_pte(kmap_pte-idx, mk_pte(page, kmap_prot_nocache));
+       else
+               set_pte(kmap_pte-idx, mk_pte(page, kmap_prot));
        __flush_tlb_one(vaddr);
 
        return (void*) vaddr;
 }
 
+/*
+ * page frame number based kmaps - useful for PCI mappings.
+ * NOTE: we map the page with the dont-cache flag.
+ */
+void *kmap_atomic_nocache_pfn(unsigned long pfn, enum km_type type)
+{
+       enum fixed_addresses idx;
+       unsigned long vaddr;
+
+       /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
+       inc_preempt_count();
+       if (pfn < highstart_pfn)
+               return pfn_to_kaddr(pfn);
+
+       idx = type + KM_TYPE_NR*smp_processor_id();
+       vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
+#ifdef CONFIG_DEBUG_HIGHMEM
+       if (!pte_none(*(kmap_pte-idx)))
+               BUG();
+#endif
+       set_pte(kmap_pte-idx, pfn_pte(pfn, kmap_prot_nocache));
+       __flush_tlb_one(vaddr);
+
+       return (void*) vaddr;
+}
+
+
 void kunmap_atomic(void *kvaddr, enum km_type type)
 {
 #ifdef CONFIG_DEBUG_HIGHMEM
index 8b4d980..77179eb 100644 (file)
@@ -137,7 +137,8 @@ extern void set_highmem_pages_init(int);
 # define set_highmem_pages_init(bad_ppro) do { } while (0)
 #endif
 
-unsigned long __PAGE_KERNEL = _PAGE_KERNEL;
+unsigned long long __PAGE_KERNEL = _PAGE_KERNEL;
+unsigned long long __PAGE_KERNEL_EXEC = _PAGE_KERNEL_EXEC;
 
 #ifndef CONFIG_DISCONTIGMEM
 #define remap_numa_kva() do {} while (0)
@@ -208,7 +209,7 @@ void setup_identity_mappings(pgd_t *pgd_base, unsigned long start, unsigned long
                        if (!pmd_present(*pmd))
                                pte_base = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
                        else
-                               pte_base = (pte_t *) pte_offset_kernel(pmd, 0);
+                               pte_base = pte_offset_kernel(pmd, 0);
                        pte = pte_base;
                        for (k = 0; k < PTRS_PER_PTE; pte++, k++) {
                                vaddr = i*PGDIR_SIZE + j*PMD_SIZE + k*PAGE_SIZE;
@@ -293,24 +294,6 @@ static void __init pagetable_init (void)
 #endif
 }
 
-#if defined(CONFIG_PM_DISK) || defined(CONFIG_SOFTWARE_SUSPEND)
-/*
- * Swap suspend & friends need this for resume because things like the intel-agp
- * driver might have split up a kernel 4MB mapping.
- */
-char __nosavedata swsusp_pg_dir[PAGE_SIZE]
-       __attribute__ ((aligned (PAGE_SIZE)));
-
-static inline void save_pg_dir(void)
-{
-       memcpy(swsusp_pg_dir, swapper_pg_dir, PAGE_SIZE);
-}
-#else
-static inline void save_pg_dir(void)
-{
-}
-#endif
-
 /*
  * Clear kernel pagetables in a PMD_SIZE-aligned range.
  */
@@ -343,9 +326,6 @@ static void clear_mappings(pgd_t *pgd_base, unsigned long start, unsigned long e
 void zap_low_mappings(void)
 {
        printk("zapping low mappings.\n");
-
-       save_pg_dir();
-
        /*
         * Zap initial low-memory mappings.
         */
@@ -377,6 +357,53 @@ void __init zone_sizes_init(void)
 extern void zone_sizes_init(void);
 #endif /* !CONFIG_DISCONTIGMEM */
 
+static int disable_nx __initdata = 0;
+u64 __supported_pte_mask = ~_PAGE_NX;
+
+/*
+ * noexec = on|off
+ *
+ * Control non executable mappings.
+ *
+ * on      Enable
+ * off     Disable (disables exec-shield too)
+ */
+static int __init noexec_setup(char *str)
+{
+       if (!strncmp(str, "on",2) && cpu_has_nx) {
+               __supported_pte_mask |= _PAGE_NX;
+               disable_nx = 0;
+       } else if (!strncmp(str,"off",3)) {
+               disable_nx = 1;
+               __supported_pte_mask &= ~_PAGE_NX;
+               exec_shield = 0;
+       }
+       return 1;
+}
+
+__setup("noexec=", noexec_setup);
+
+int use_nx = 0;
+#ifdef CONFIG_X86_PAE
+
+static void __init set_nx(void)
+{
+       unsigned int v[4], l, h;
+
+       if (cpu_has_pae && (cpuid_eax(0x80000000) > 0x80000001)) {
+               cpuid(0x80000001, &v[0], &v[1], &v[2], &v[3]);
+               if ((v[3] & (1 << 20)) && !disable_nx) {
+                       rdmsr(MSR_EFER, l, h);
+                       l |= EFER_NX;
+                       wrmsr(MSR_EFER, l, h);
+                       use_nx = 1;
+                       __supported_pte_mask |= _PAGE_NX;
+               }
+       }
+}
+
+#endif
+
 /*
  * paging_init() sets up the page tables - note that the first 8MB are
  * already mapped by head.S.
@@ -386,6 +413,17 @@ extern void zone_sizes_init(void);
  */
 void __init paging_init(void)
 {
+#ifdef CONFIG_X86_PAE
+       set_nx();
+       if (use_nx)
+               printk("NX (Execute Disable) protection: active\n");
+       else {
+               printk("NX (Execute Disable) protection: not present!\n");
+               if (exec_shield)
+                       printk("Using x86 segment limits to approximate NX protection\n");
+       }
+#endif
+
        pagetable_init();
 
        load_cr3(swapper_pg_dir);
@@ -411,7 +449,6 @@ void __init paging_init(void)
        kmap_init();
        zone_sizes_init();
 }
-
 /*
  * Test if the WP bit works in supervisor mode. It isn't supported on 386's
  * and also on some strange 486's (NexGen etc.). All 586+'s are OK. This
index b80b923..fdb3606 100644 (file)
@@ -23,19 +23,23 @@ CONFIG_STANDALONE=y
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
-CONFIG_EMBEDDED=y
+# CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL 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
 
 #
@@ -48,6 +52,7 @@ CONFIG_OBSOLETE_MODPARM=y
 # CONFIG_MODVERSIONS is not set
 # CONFIG_KMOD is not set
 CONFIG_STOP_MACHINE=y
+CONFIG_SYSVIPC_COMPAT=y
 
 #
 # Platform support
@@ -60,6 +65,7 @@ CONFIG_PPC64=y
 # CONFIG_IOMMU_VMERGE is not set
 CONFIG_SMP=y
 CONFIG_NR_CPUS=32
+# CONFIG_SCHED_SMT is not set
 CONFIG_MSCHUNKS=y
 CONFIG_LPARCFG=y
 
@@ -72,6 +78,7 @@ CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 CONFIG_PCI_LEGACY_PROC=y
 CONFIG_PCI_NAMES=y
+# CONFIG_HOTPLUG_CPU is not set
 
 #
 # PCMCIA/CardBus support
@@ -148,7 +155,6 @@ CONFIG_CHR_DEV_SG=y
 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
 #
 CONFIG_SCSI_MULTI_LUN=y
-CONFIG_SCSI_REPORT_LUNS=y
 CONFIG_SCSI_CONSTANTS=y
 # CONFIG_SCSI_LOGGING is not set
 
@@ -180,6 +186,7 @@ CONFIG_SCSI_FC_ATTRS=y
 # CONFIG_SCSI_IPS is not set
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
 # CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
@@ -221,6 +228,7 @@ CONFIG_DM_CRYPT=m
 #
 # I2O device support
 #
+# CONFIG_I2O is not set
 
 #
 # Macintosh device drivers
@@ -247,7 +255,6 @@ CONFIG_NET_IPIP=y
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
 # CONFIG_ARPD is not set
-CONFIG_INET_ECN=y
 CONFIG_SYN_COOKIES=y
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
@@ -258,8 +265,6 @@ CONFIG_INET_IPCOMP=m
 #
 # CONFIG_IP_VS is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 
@@ -319,16 +324,18 @@ CONFIG_IP_NF_ARPFILTER=m
 CONFIG_IP_NF_ARP_MANGLE=m
 CONFIG_IP_NF_COMPAT_IPCHAINS=m
 CONFIG_IP_NF_COMPAT_IPFWADM=m
+# CONFIG_IP_NF_RAW is not set
 CONFIG_XFRM=y
 CONFIG_XFRM_USER=m
 
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 CONFIG_LLC=y
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
@@ -350,16 +357,23 @@ CONFIG_LLC=y
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+CONFIG_NETPOLL=y
+CONFIG_NETPOLL_RX=y
+CONFIG_NETPOLL_TRAP=y
+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=m
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
 
 #
 # ARCnet devices
 #
 # CONFIG_ARCNET is not set
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
 
 #
 # Ethernet (10 or 100Mbit)
@@ -397,27 +411,29 @@ CONFIG_E100=y
 # CONFIG_VIA_RHINE is not set
 
 #
-# Ethernet (1000 Mbit)
+# Gigabit Ethernet (1000/10000 Mbit)
 #
-CONFIG_ACENIC=y
-CONFIG_ACENIC_OMIT_TIGON_I=y
-# CONFIG_DL2K is not set
-CONFIG_E1000=y
-# CONFIG_E1000_NAPI is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
+# CONFIG_NET_GIGE is not set
 
 #
-# Ethernet (10000 Mbit)
+# Token Ring devices
+#
+CONFIG_TR=y
+CONFIG_IBMOL=y
+# CONFIG_IBMLS is not set
+# CONFIG_3C359 is not set
+# CONFIG_TMS380TR is not set
+
+#
+# Wireless LAN (non-hamradio)
 #
-CONFIG_IXGB=m
-# CONFIG_IXGB_NAPI is not set
-# CONFIG_VETH is not set
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_ISERIES_VETH=y
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 CONFIG_PPP=m
@@ -429,48 +445,10 @@ CONFIG_PPP_DEFLATE=m
 CONFIG_PPP_BSDCOMP=m
 CONFIG_PPPOE=m
 # CONFIG_SLIP is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Token Ring devices
-#
-CONFIG_TR=y
-CONFIG_IBMOL=y
-# CONFIG_IBMLS is not set
-# CONFIG_3C359 is not set
-# CONFIG_TMS380TR is not set
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=y
 
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BT is not set
-CONFIG_NETPOLL=y
-CONFIG_NETPOLL_RX=y
-CONFIG_NETPOLL_TRAP=y
-CONFIG_NET_POLL_CONTROLLER=y
-
 #
 # ISDN subsystem
 #
@@ -489,7 +467,10 @@ CONFIG_INPUT=y
 #
 # Userland interfaces
 #
-# CONFIG_INPUT_MOUSEDEV is not set
+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 is not set
@@ -518,7 +499,6 @@ CONFIG_SERIO_SERPORT=y
 #
 # Character devices
 #
-# CONFIG_VT is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
 
 #
@@ -532,11 +512,6 @@ CONFIG_SERIO_SERPORT=y
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -618,6 +593,7 @@ CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=y
 # CONFIG_REISERFS_CHECK is not set
 # CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
 CONFIG_JFS_FS=y
 CONFIG_JFS_POSIX_ACL=y
 # CONFIG_JFS_DEBUG is not set
@@ -655,6 +631,7 @@ CONFIG_VFAT_FS=y
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 # CONFIG_DEVFS_FS is not set
 CONFIG_DEVPTS_FS_XATTR=y
 # CONFIG_DEVPTS_FS_SECURITY is not set
@@ -695,10 +672,11 @@ CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
 CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
 # CONFIG_SMB_FS is not set
 CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
@@ -757,8 +735,8 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 #
 CONFIG_VIOCONS=y
 CONFIG_VIODASD=y
-CONFIG_VIOCD=y
-# CONFIG_VIOTAPE is not set
+CONFIG_VIOCD=m
+CONFIG_VIOTAPE=m
 CONFIG_VIOPATH=y
 
 #
@@ -778,6 +756,7 @@ CONFIG_MAGIC_SYSRQ=y
 # CONFIG_DEBUGGER is not set
 # CONFIG_PPCDBG is not set
 # CONFIG_DEBUG_INFO is not set
+# CONFIG_IRQSTACKS is not set
 
 #
 # Security options
@@ -791,11 +770,11 @@ CONFIG_CRYPTO=y
 CONFIG_CRYPTO_HMAC=y
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_SHA1=m
 CONFIG_CRYPTO_SHA256=m
 CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_BLOWFISH=m
 CONFIG_CRYPTO_TWOFISH=m
 CONFIG_CRYPTO_SERPENT=m
@@ -804,11 +783,14 @@ CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
 CONFIG_CRYPTO_TEST=m
 
 #
 # Library routines
 #
 CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=m
index 98e8d37..9368fb0 100644 (file)
@@ -73,7 +73,6 @@ int main(void)
         DEFINE(ICACHEL1LINESIZE, offsetof(struct systemcfg, iCacheL1LineSize));
         DEFINE(ICACHEL1LOGLINESIZE, offsetof(struct naca_struct, iCacheL1LogLineSize));
         DEFINE(ICACHEL1LINESPERPAGE, offsetof(struct naca_struct, iCacheL1LinesPerPage));
-       DEFINE(SLBSIZE, offsetof(struct naca_struct, slb_size));
        DEFINE(PLATFORM, offsetof(struct systemcfg, platform));
 
        /* paca */
index 303eac1..dc83803 100644 (file)
@@ -612,33 +612,25 @@ void __init eeh_init(void)
 }
 
 /**
- * eeh_add_device - perform EEH initialization for the indicated pci device
- * @dev: pci device for which to set up EEH
+ * eeh_add_device_early - enable EEH for the indicated device_node
+ * @dn: device node for which to set up EEH
  *
- * This routine can be used to perform EEH initialization for PCI
+ * This routine must be used to perform EEH initialization for PCI
  * devices that were added after system boot (e.g. hotplug, dlpar).
+ * This routine must be called before any i/o is performed to the
+ * adapter (inluding any config-space i/o).
  * Whether this actually enables EEH or not for this device depends
- * on the type of the device, on earlier boot command-line
- * arguments & etc.
+ * on the CEC architecture, type of the device, on earlier boot
+ * command-line arguments & etc.
  */
-void eeh_add_device(struct pci_dev *dev)
+void eeh_add_device_early(struct device_node *dn)
 {
-       struct device_node *dn;
        struct pci_controller *phb;
        struct eeh_early_enable_info info;
 
-       if (!dev || !eeh_subsystem_enabled)
-               return;
-
-#ifdef DEBUG
-       printk(KERN_DEBUG "EEH: adding device %s %s\n", pci_name(dev),
-              pci_pretty_name(dev));
-#endif
-       dn = pci_device_to_OF_node(dev);
-       if (NULL == dn)
+       if (!dn || !eeh_subsystem_enabled)
                return;
-
-       phb = PCI_GET_PHB_PTR(dev);
+       phb = dn->phb;
        if (NULL == phb || 0 == phb->buid) {
                printk(KERN_WARNING "EEH: Expected buid but found none\n");
                return;
@@ -646,11 +638,30 @@ void eeh_add_device(struct pci_dev *dev)
 
        info.buid_hi = BUID_HI(phb->buid);
        info.buid_lo = BUID_LO(phb->buid);
-
        early_enable_eeh(dn, &info);
+}
+EXPORT_SYMBOL(eeh_add_device_early);
+
+/**
+ * eeh_add_device_late - perform EEH initialization for the indicated pci device
+ * @dev: pci device for which to set up EEH
+ *
+ * This routine must be used to complete EEH initialization for PCI
+ * devices that were added after system boot (e.g. hotplug, dlpar).
+ */
+void eeh_add_device_late(struct pci_dev *dev)
+{
+       if (!dev || !eeh_subsystem_enabled)
+               return;
+
+#ifdef DEBUG
+       printk(KERN_DEBUG "EEH: adding device %s %s\n", pci_name(dev),
+              pci_pretty_name(dev));
+#endif
+
        pci_addr_cache_insert_device (dev);
 }
-EXPORT_SYMBOL(eeh_add_device);
+EXPORT_SYMBOL(eeh_add_device_late);
 
 /**
  * eeh_remove_device - undo EEH setup for the indicated pci device
index 892c957..6b22a87 100644 (file)
@@ -1123,13 +1123,11 @@ _GLOBAL(do_slb_bolted)
         */
 
        /* r20 = paca */
-       /* use a cpu feature mask if we ever change our slb size */
-SLB_NUM_ENTRIES = 64
 1:     ld      r22,PACASTABRR(r20)
        addi    r21,r22,1
        cmpdi   r21,SLB_NUM_ENTRIES
        blt+    2f
-       li      r21,1                   /* dont touch bolted slot 0 */
+       li      r21,2                   /* dont touch slot 0 or 1 */
 2:     std     r21,PACASTABRR(r20)
 
        /* r20 = paca, r22 = entry */
index f2271fd..3f17d5e 100644 (file)
@@ -563,11 +563,6 @@ static void __init build_iSeries_Memory_Map(void)
        lmb_add(0, systemcfg->physicalMemorySize);
        lmb_analyze();  /* ?? */
        lmb_reserve(0, __pa(klimit));
-
-       /* 
-        * Hardcode to GP size.  I am not sure where to get this info. DRENG
-        */
-       naca->slb_size = 64;
 }
 
 /*
@@ -858,3 +853,12 @@ static void iSeries_setup_dprofile(void)
                }
        }
 }
+
+int __init iSeries_src_init(void)
+{
+        /* clear the progress line */
+        ppc_md.progress(" ", 0xffff);
+        return 0;
+}
+
+late_initcall(iSeries_src_init);
index b12048b..d283f48 100644 (file)
@@ -42,6 +42,7 @@ struct systemcfg *systemcfg;
        .xStab_data = {                                                     \
                .real = (asrr),         /* Real pointer to segment table */ \
                .virt = (asrv),         /* Virt pointer to segment table */ \
+               .next_round_robin = 1,                                      \
        },                                                                  \
        .lpQueuePtr = (lpq),            /* &xItLpQueue, */                  \
        /* .xRtas = {                                                       \
@@ -54,7 +55,8 @@ struct systemcfg *systemcfg;
                .xFPRegsInUse = 1,                                          \
                .xDynProcStatus = 2,                                        \
                .xDecrVal = 0x00ff0000,                                     \
-               .xEndOfQuantum = 0xfffffffffffffffful                       \
+               .xEndOfQuantum = 0xfffffffffffffffful,                      \
+               .xSLBCount = 64,                                            \
        },                                                                  \
        .xRegSav = {                                                        \
                .xDesc = 0xd397d9e2,    /* "LpRS" */                        \
index 76216f3..a5f8f24 100644 (file)
@@ -458,13 +458,6 @@ static void __init prom_initialize_naca(void)
                PROM_BUG();
        }
 
-       /* 
-        * Hardcode to GP size.  I am not sure where to get this info
-        * in general, as there does not appear to be a slb-size OF
-        * entry.  At least in Condor and earlier.  DRENG 
-        */
-       _naca->slb_size = 64;
-
        /* Add an eye catcher and the systemcfg layout version number */
        strcpy(_systemcfg->eye_catcher, RELOC("SYSTEMCFG:PPC64"));
        _systemcfg->version.major = SYSTEMCFG_MAJOR;
@@ -654,8 +647,6 @@ static void __init prom_initialize_lmb(void)
 #endif /* DEBUG_PROM */
 }
 
-static char hypertas_funcs[1024];
-
 static void __init
 prom_instantiate_rtas(void)
 {
@@ -665,6 +656,7 @@ prom_instantiate_rtas(void)
        struct systemcfg *_systemcfg = RELOC(systemcfg);
        ihandle prom_rtas;
         u32 getprop_rval;
+       char hypertas_funcs[4];
 
 #ifdef DEBUG_PROM
        prom_print(RELOC("prom_instantiate_rtas: start...\n"));
@@ -1556,7 +1548,7 @@ static void __init *__make_room(unsigned long *mem_start, unsigned long *mem_end
                if (*mem_end != RELOC(initrd_start))
                        prom_panic(RELOC("No memory for copy_device_tree"));
 
-               prom_print("Huge device_tree: moving initrd\n");
+               prom_print(RELOC("Huge device_tree: moving initrd\n"));
                /* Move by 4M. */
                initrd_len = RELOC(initrd_end) - RELOC(initrd_start);
                *mem_end = RELOC(initrd_start) + 4 * 1024 * 1024;
@@ -1590,6 +1582,7 @@ inspect_node(phandle node, struct device_node *dad,
        char *prev_name, *namep;
        unsigned char *valp;
        unsigned long offset = reloc_offset();
+       phandle ibm_phandle;
 
        np = make_room(mem_start, mem_end, struct device_node);
        memset(np, 0, sizeof(*np));
@@ -1652,23 +1645,24 @@ inspect_node(phandle node, struct device_node *dad,
                prev_propp = &pp->next;
        }
 
-       /* Add a "linux_phandle" value */
-        if (np->node) {
-               u32 ibm_phandle = 0;
-               int len;
-
-                /* First see if "ibm,phandle" exists and use its value */
-                len = (int)
-                        call_prom(RELOC("getprop"), 4, 1, node, RELOC("ibm,phandle"),
-                                  &ibm_phandle, sizeof(ibm_phandle));
-                if (len < 0) {
-                        np->linux_phandle = np->node;
-                } else {
-                        np->linux_phandle = ibm_phandle;
-               }
-       }
-
-       *prev_propp = 0;
+       /* Add a "linux,phandle" property. */
+       namep = make_room(mem_start, mem_end, char[16]);
+       strcpy(namep, RELOC("linux,phandle"));
+       pp = make_room(mem_start, mem_end, struct property);
+       pp->name = PTRUNRELOC(namep);
+       pp->length = sizeof(phandle);
+       valp = make_room(mem_start, mem_end, phandle);
+       pp->value = PTRUNRELOC(valp);
+       *(phandle *)valp = node;
+       *prev_propp = PTRUNRELOC(pp);
+       pp->next = NULL;
+
+       /* Set np->linux_phandle to the value of the ibm,phandle property
+          if it exists, otherwise to the phandle for this node. */
+       np->linux_phandle = node;
+       if ((int)call_prom(RELOC("getprop"), 4, 1, node, RELOC("ibm,phandle"),
+                          &ibm_phandle, sizeof(ibm_phandle)) > 0)
+               np->linux_phandle = ibm_phandle;
 
        /* get the node's full name */
        namep = (char *)*mem_start;
index b3ac3ac..0618904 100644 (file)
@@ -24,6 +24,23 @@ static int make_ste(unsigned long stab, unsigned long esid, unsigned long vsid);
 static void make_slbe(unsigned long esid, unsigned long vsid, int large,
                      int kernel_segment);
 
+static inline void slb_add_bolted(void)
+{
+#ifndef CONFIG_PPC_ISERIES
+       unsigned long esid = GET_ESID(VMALLOCBASE);
+       unsigned long vsid = get_kernel_vsid(VMALLOCBASE);
+
+       WARN_ON(!irqs_disabled());
+
+       /*
+        * Bolt in the first vmalloc segment. Since modules end
+        * up there it gets hit very heavily.
+        */
+       get_paca()->xStab_data.next_round_robin = 1;
+       make_slbe(esid, vsid, 0, 1);
+#endif
+}
+
 /*
  * Build an entry for the base kernel segment and put it into
  * the segment table or SLB.  All other segment table or SLB
@@ -48,9 +65,12 @@ void stab_initialize(unsigned long stab)
                asm volatile("isync":::"memory");
                asm volatile("slbmte  %0,%0"::"r" (0) : "memory");
                asm volatile("isync; slbia; isync":::"memory");
+               get_paca()->xStab_data.next_round_robin = 0;
                make_slbe(esid, vsid, seg0_largepages, 1);
                asm volatile("isync":::"memory");
 #endif
+
+               slb_add_bolted();
        } else {
                asm volatile("isync; slbia; isync":::"memory");
                make_ste(stab, esid, vsid);
@@ -317,6 +337,7 @@ static void make_slbe(unsigned long esid, unsigned long vsid, int large,
                unsigned long word0;
                slb_dword1    data;
        } vsid_data;
+       struct paca_struct *lpaca = get_paca();
 
        /*
         * We take the next entry, round robin. Previously we tried
@@ -330,18 +351,25 @@ static void make_slbe(unsigned long esid, unsigned long vsid, int large,
         * for the kernel stack during the first part of exception exit 
         * which gets invalidated due to a tlbie from another cpu at a
         * non recoverable point (after setting srr0/1) - Anton
+        *
+        * paca Ksave is always valid (even when on the interrupt stack)
+        * so we use that.
         */
-       castout_entry = get_paca()->xStab_data.next_round_robin;
+       castout_entry = lpaca->xStab_data.next_round_robin;
        do {
                entry = castout_entry;
                castout_entry++; 
-               if (castout_entry >= naca->slb_size)
-                       castout_entry = 1; 
+               /*
+                * We bolt in the first kernel segment and the first
+                * vmalloc segment.
+                */
+               if (castout_entry >= SLB_NUM_ENTRIES)
+                       castout_entry = 2;
                asm volatile("slbmfee  %0,%1" : "=r" (esid_data) : "r" (entry));
        } while (esid_data.data.v &&
-                esid_data.data.esid == GET_ESID(__get_SP()));
+                esid_data.data.esid == GET_ESID(lpaca->xKsave));
 
-       get_paca()->xStab_data.next_round_robin = castout_entry;
+       lpaca->xStab_data.next_round_robin = castout_entry;
 
        /* slbie not needed as the previous mapping is still valid. */
 
@@ -422,6 +450,9 @@ int slb_allocate(unsigned long ea)
        }
 
        esid = GET_ESID(ea);
+#ifndef CONFIG_PPC_ISERIES
+       BUG_ON((esid << SID_SHIFT) == VMALLOCBASE);
+#endif
        __slb_allocate(esid, vsid, context);
 
        return 0;
@@ -479,18 +510,19 @@ void flush_slb(struct task_struct *tsk, struct mm_struct *mm)
                slb_dword0 data;
        } esid_data;
 
-
        if (offset <= NR_STAB_CACHE_ENTRIES) {
                int i;
                asm volatile("isync" : : : "memory");
                for (i = 0; i < offset; i++) {
                        esid_data.word0 = 0;
                        esid_data.data.esid = __get_cpu_var(stab_cache[i]);
+                       BUG_ON(esid_data.data.esid == GET_ESID(VMALLOCBASE));
                        asm volatile("slbie %0" : : "r" (esid_data));
                }
                asm volatile("isync" : : : "memory");
        } else {
                asm volatile("isync; slbia; isync" : : : "memory");
+               slb_add_bolted();
        }
 
        /* Workaround POWER5 < DD2.1 issue */
index cbb26f6..97b1509 100644 (file)
@@ -2512,7 +2512,7 @@ static void dump_slb(void)
 
        printf("SLB contents of cpu %x\n", smp_processor_id());
 
-       for (i = 0; i < naca->slb_size; i++) {
+       for (i = 0; i < SLB_NUM_ENTRIES; i++) {
                asm volatile("slbmfee  %0,%1" : "=r" (tmp) : "r" (i));
                printf("%02d %016lx ", i, tmp);
 
index 609b6ed..14533fd 100644 (file)
@@ -147,7 +147,6 @@ end_coredump:
  * memory and creates the pointer tables from them, and puts their
  * addresses on the "stack", returning the new stack pointer value.
  */
-#define A(__x) ((unsigned long)(__x))
 
 static u32 *create_aout32_tables(char * p, struct linux_binprm * bprm)
 {
@@ -171,7 +170,7 @@ static u32 *create_aout32_tables(char * p, struct linux_binprm * bprm)
        current->mm->arg_start = (unsigned long) p;
        while (argc-->0) {
                char c;
-               put_user(((u32)A(p)),argv++);
+               put_user(((u32)(unsigned long)(p)),argv++);
                do {
                        get_user(c,p++);
                } while (c);
@@ -180,7 +179,7 @@ static u32 *create_aout32_tables(char * p, struct linux_binprm * bprm)
        current->mm->arg_end = current->mm->env_start = (unsigned long) p;
        while (envc-->0) {
                char c;
-               put_user(((u32)A(p)),envp++);
+               put_user(((u32)(unsigned long)(p)),envp++);
                do {
                        get_user(c,p++);
                } while (c);
index 6b6694a..f82adfb 100644 (file)
@@ -1697,12 +1697,12 @@ linux_sparc_syscall32:
         add            %sp, PTREGS_OFF, %o0
        srl             %i0, 0, %o0
 #endif
-       mov             %i4, %o4                                ! IEU1
+       srl             %i4, 0, %o4                             ! IEU1
        lduw            [%l7 + %l4], %l7                        ! Load
        srl             %i1, 0, %o1                             ! IEU0  Group
        ldx             [%curptr + TI_FLAGS], %l0               ! Load
 
-       mov             %i5, %o5                                ! IEU1
+       srl             %i5, 0, %o5                             ! IEU1
        srl             %i2, 0, %o2                             ! IEU0  Group
        andcc           %l0, _TIF_SYSCALL_TRACE, %g0            ! IEU0  Group
        bne,pn          %icc, linux_syscall_trace32             ! CTI
index ac67fb3..7f03853 100644 (file)
@@ -579,26 +579,26 @@ barf:
        do_exit(SIGILL);
 }
 
-asmlinkage int sparc_do_fork(unsigned long clone_flags,
-                            unsigned long stack_start,
-                            struct pt_regs *regs,
-                            unsigned long stack_size)
+asmlinkage long sparc_do_fork(unsigned long clone_flags,
+                             unsigned long stack_start,
+                             struct pt_regs *regs,
+                             unsigned long stack_size)
 {
-       unsigned long parent_tid_ptr, child_tid_ptr;
+       int __user *parent_tid_ptr, *child_tid_ptr;
 
        clone_flags &= ~CLONE_IDLETASK;
 
-       parent_tid_ptr = regs->u_regs[UREG_I2];
-       child_tid_ptr = regs->u_regs[UREG_I4];
        if (test_thread_flag(TIF_32BIT)) {
-               parent_tid_ptr &= 0xffffffff;
-               child_tid_ptr &= 0xffffffff;
+               parent_tid_ptr = compat_ptr(regs->u_regs[UREG_I2]);
+               child_tid_ptr = compat_ptr(regs->u_regs[UREG_I4]);
+       } else {
+               parent_tid_ptr = (int __user *) regs->u_regs[UREG_I2];
+               child_tid_ptr = (int __user *) regs->u_regs[UREG_I4];
        }
 
        return do_fork(clone_flags, stack_start,
                       regs, stack_size,
-                      (int __user *) parent_tid_ptr,
-                      (int __user *) child_tid_ptr);
+                      parent_tid_ptr, child_tid_ptr);
 }
 
 /* Copy a Sparc thread.  The fork() return value conventions
index 04e3bbf..2fb26c9 100644 (file)
@@ -1349,7 +1349,7 @@ out:
        return ret;
 }
 
-asmlinkage int do_sys32_sigaltstack(u32 ussa, u32 uossa, unsigned long sp)
+asmlinkage long do_sys32_sigaltstack(u32 ussa, u32 uossa, unsigned long sp)
 {
        stack_t uss, uoss;
        u32 u_ss_sp = 0;
index 1e041b0..87c1aeb 100644 (file)
 #include <linux/compat.h>
 #include <asm/kbio.h>
 
-/* Use this to get at 32-bit user passed pointers. */
-#define A(__x)                         \
-({     unsigned long __ret;            \
-       __asm__ ("srl   %0, 0, %0"      \
-                : "=r" (__ret)         \
-                : "0" (__x));          \
-       __ret;                          \
-})
-
 #define SUNOS_NR_OPEN  256
 
 struct rtentry32 {
@@ -108,7 +99,7 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
                int ntty = N_TTY;
                int tmp;
 
-               p = (int __user *)A(arg);
+               p = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(tmp, p))
                        goto out;
@@ -241,7 +232,7 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
                int oldval, newval, __user *ptr;
 
                cmd = TIOCSPGRP;
-               ptr = (int __user *) A(arg);
+               ptr = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(oldval, ptr))
                        goto out;
@@ -260,7 +251,7 @@ asmlinkage int sunos_ioctl (int fd, u32 cmd, u32 arg)
                int oldval, newval, __user *ptr;
 
                cmd = TIOCGPGRP;
-               ptr = (int __user *) A(arg);
+               ptr = (int __user *) (unsigned long) arg;
                ret = -EFAULT;
                if(get_user(oldval, ptr))
                        goto out;
index 110d91a..95e3d3a 100644 (file)
 
        .text
 
-       .align          32
-       .globl          sys32_mmap
-sys32_mmap:
-       srl             %o4, 0, %o4
-       sethi           %hi(sys_mmap), %g1
-       jmpl            %g1 + %lo(sys_mmap), %g0
-        srl            %o5, 0, %o5
+#define SIGN1(STUB,SYSCALL,REG1) \
+       .align  32; \
+       .globl  STUB; \
+STUB:  sethi   %hi(SYSCALL), %g1; \
+       jmpl    %g1 + %lo(SYSCALL), %g0; \
+       sra     REG1, 0, REG1
 
-       .align          32
-       .globl          sys32_lseek
-       .globl          sys32_chmod, sys32_mknod
-sys32_lseek:
-       sra             %o1, 0, %o1
-       sethi           %hi(sys_lseek), %g1
-       jmpl            %g1 + %lo(sys_lseek), %g0
-        nop
-sys32_chmod:
-       sethi           %hi(0xffff), %g2
-       sethi           %hi(sys_chmod), %g1
-       orcc            %g2, %lo(0xffff), %g2
-       jmpl            %g1 + %lo(sys_chmod), %g0
-        and            %o1, %g2, %o1
-sys32_mknod:
-       sethi           %hi(0xffff), %g2
-       sethi           %hi(sys_mknod), %g1
-       orcc            %g2, %lo(0xffff), %g2
-       jmpl            %g1 + %lo(sys_mknod), %g0
-        and            %o2, %g2, %o2
+#define SIGN2(STUB,SYSCALL,REG1,REG2) \
+       .align  32; \
+       .globl  STUB; \
+STUB:  sethi   %hi(SYSCALL), %g1; \
+       sra     REG1, 0, REG1; \
+       jmpl    %g1 + %lo(SYSCALL), %g0; \
+       sra     REG2, 0, REG2
 
-       .align          32
-       .globl          sys32_sendto, sys32_recvfrom
-sys32_sendto:
-       sethi           %hi(sys_sendto), %g1
-       jmpl            %g1 + %lo(sys_sendto), %g0
-        srl            %o4, 0, %o4
-sys32_recvfrom:
-       srl             %o4, 0, %o4
-       sethi           %hi(sys_recvfrom), %g1
-       jmpl            %g1 + %lo(sys_recvfrom), %g0
-        srl            %o5, 0, %o5
+#define SIGN3(STUB,SYSCALL,REG1,REG2,REG3) \
+       .align  32; \
+       .globl  STUB; \
+STUB:  sra     REG1, 0, REG1; \
+       sethi   %hi(SYSCALL), %g1; \
+       sra     REG2, 0, REG2; \
+       jmpl    %g1 + %lo(SYSCALL), %g0; \
+       sra     REG3, 0, REG3
 
-       .globl          sys32_bdflush
-sys32_bdflush:
-       sethi           %hi(sys_bdflush), %g1
-       jmpl            %g1 + %lo(sys_bdflush), %g0
-        sra            %o1, 0, %o1
+#define SIGN4(STUB,SYSCALL,REG1,REG2,REG3,REG4) \
+       .align  32; \
+       .globl  STUB; \
+STUB:  sra     REG1, 0, REG1; \
+       sethi   %hi(SYSCALL), %g1; \
+       sra     REG2, 0, REG2; \
+       sra     REG3, 0, REG3; \
+       jmpl    %g1 + %lo(SYSCALL), %g0; \
+       sra     REG4, 0, REG4
+
+SIGN1(sys32_exit, sparc_exit, %o0)
+SIGN1(sys32_exit_group, sys_exit_group, %o0)
+SIGN1(sys32_wait4, compat_sys_wait4, %o2)
+SIGN1(sys32_creat, sys_creat, %o1)
+SIGN1(sys32_mknod, sys_mknod, %o1)
+SIGN1(sys32_perfctr, sys_perfctr, %o0)
+SIGN1(sys32_umount, sys_umount, %o1)
+SIGN1(sys32_signal, sys_signal, %o0)
+SIGN1(sys32_access, sys_access, %o1)
+SIGN1(sys32_msync, sys_msync, %o2)
+SIGN2(sys32_reboot, sys_reboot, %o0, %o1)
+SIGN1(sys32_setitimer, compat_sys_setitimer, %o0)
+SIGN1(sys32_getitimer, compat_sys_getitimer, %o0)
+SIGN1(sys32_sethostname, sys_sethostname, %o1)
+SIGN1(sys32_swapon, sys_swapon, %o1)
+SIGN1(sys32_sigaction, compat_sys_sigaction, %o0)
+SIGN1(sys32_rt_sigaction, compat_sys_rt_sigaction, %o0)
+SIGN1(sys32_sigprocmask, compat_sys_sigprocmask, %o0)
+SIGN1(sys32_rt_sigprocmask, compat_sys_rt_sigprocmask, %o0)
+SIGN2(sys32_rt_sigqueueinfo, compat_sys_rt_sigqueueinfo, %o0, %o1)
+SIGN1(sys32_getrusage, compat_sys_getrusage, %o0)
+SIGN1(sys32_setxattr, sys_setxattr, %o4)
+SIGN1(sys32_lsetxattr, sys_lsetxattr, %o4)
+SIGN1(sys32_fsetxattr, sys_fsetxattr, %o4)
+SIGN1(sys32_fgetxattr, sys_fgetxattr, %o0)
+SIGN1(sys32_flistxattr, sys_flistxattr, %o0)
+SIGN1(sys32_fremovexattr, sys_fremovexattr, %o0)
+SIGN2(sys32_tkill, sys_tkill, %o0, %o1)
+SIGN1(sys32_epoll_create, sys_epoll_create, %o0)
+SIGN3(sys32_epoll_ctl, sys_epoll_ctl, %o0, %o1, %o2)
+SIGN3(sys32_epoll_wait, sys_epoll_wait, %o0, %o2, %o3)
+SIGN1(sys32_readahead, compat_sys_readahead, %o0)
+SIGN2(sys32_fadvise64, compat_sys_fadvise64, %o0, %o4)
+SIGN2(sys32_fadvise64_64, compat_sys_fadvise64_64, %o0, %o5)
+SIGN2(sys32_bdflush, sys_bdflush, %o0, %o1)
+SIGN1(sys32_mlockall, sys_mlockall, %o0)
+SIGN1(sys32_nfsservctl, compat_sys_nfsservctl, %o0)
+SIGN1(sys32_clock_settime, compat_clock_settime, %o1)
+SIGN1(sys32_clock_nanosleep, compat_clock_nanosleep, %o1)
+SIGN1(sys32_timer_settime, compat_timer_settime, %o1)
+SIGN1(sys32_io_submit, compat_sys_io_submit, %o1)
+SIGN1(sys32_mq_open, compat_sys_mq_open, %o1)
+SIGN1(sys32_select, compat_sys_select, %o0)
+SIGN1(sys32_mkdir, sys_mkdir, %o1)
+SIGN2(sys32_futex, compat_sys_futex, %o1, %o2)
+SIGN1(sys32_sysfs, compat_sys_sysfs, %o0)
+SIGN3(sys32_ipc, compat_sys_ipc, %o1, %o2, %o3)
+SIGN2(sys32_sendfile, compat_sys_sendfile, %o0, %o1)
+SIGN2(sys32_sendfile64, compat_sys_sendfile64, %o0, %o1)
+SIGN1(sys32_prctl, sys_prctl, %o0)
+SIGN1(sys32_sched_rr_get_interval, compat_sys_sched_rr_get_interval, %o0)
+SIGN2(sys32_waitpid, sys_waitpid, %o0, %o2)
+SIGN1(sys32_getgroups, sys_getgroups, %o0)
+SIGN1(sys32_getpgid, sys_getpgid, %o0)
+SIGN2(sys32_getpriority, sys_getpriority, %o0, %o1)
+SIGN1(sys32_getsid, sys_getsid, %o0)
+SIGN2(sys32_kill, sys_kill, %o0, %o1)
+SIGN1(sys32_nice, sys_nice, %o0)
+SIGN1(sys32_lseek, sys_lseek, %o1)
+SIGN2(sys32_open, sparc32_open, %o1, %o2)
+SIGN1(sys32_readlink, sys_readlink, %o2)
+SIGN1(sys32_sched_get_priority_max, sys_sched_get_priority_max, %o0)
+SIGN1(sys32_sched_get_priority_min, sys_sched_get_priority_min, %o0)
+SIGN1(sys32_sched_getparam, sys_sched_getparam, %o0)
+SIGN1(sys32_sched_getscheduler, sys_sched_getscheduler, %o0)
+SIGN1(sys32_sched_setparam, sys_sched_setparam, %o0)
+SIGN2(sys32_sched_setscheduler, sys_sched_setscheduler, %o0, %o1)
+SIGN1(sys32_getdomainname, sys_getdomainname, %o1)
+SIGN1(sys32_setdomainname, sys_setdomainname, %o1)
+SIGN1(sys32_setgroups, sys_setgroups, %o0)
+SIGN2(sys32_setpgid, sys_setpgid, %o0, %o1)
+SIGN3(sys32_setpriority, sys_setpriority, %o0, %o1, %o2)
+SIGN1(sys32_ssetmask, sys_ssetmask, %o0)
+SIGN2(sys32_syslog, sys_syslog, %o0, %o1)
+SIGN1(sys32_umask, sys_umask, %o0)
+SIGN3(sys32_tgkill, sys_tgkill, %o0, %o1, %o2)
+SIGN1(sys32_sendto, sys_sendto, %o0)
+SIGN1(sys32_recvfrom, sys_recvfrom, %o0)
+SIGN3(sys32_socket, sys_socket, %o0, %o1, %o2)
+SIGN2(sys32_connect, sys_connect, %o0, %o2)
+SIGN2(sys32_bind, sys_bind, %o0, %o2)
+SIGN2(sys32_listen, sys_listen, %o0, %o1)
+SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0)
+SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0)
+SIGN2(sys32_shutdown, sys_shutdown, %o0, %o1)
+SIGN3(sys32_socketpair, sys_socketpair, %o0, %o1, %o2)
+SIGN1(sys32_getpeername, sys_getpeername, %o0)
+SIGN1(sys32_getsockname, sys_getsockname, %o0)
 
-       .align          32
        .globl          sys32_mmap2
 sys32_mmap2:
-       srl             %o4, 0, %o4
        sethi           %hi(sys_mmap), %g1
-       srl             %o5, 0, %o5
        jmpl            %g1 + %lo(sys_mmap), %g0
         sllx           %o5, 12, %o5
 
-       .globl          sys32_mq_timedsend
-sys32_mq_timedsend:
-       sethi           %hi(compat_sys_mq_timedsend), %g1
-       jmpl            %g1 + %lo(compat_sys_mq_timedsend), %g0
-        srl            %o4, 0, %o4
-       .globl          sys32_mq_timedreceive
-sys32_mq_timedreceive:
-       sethi           %hi(compat_sys_mq_timedreceive), %g1
-       jmpl            %g1 + %lo(compat_sys_mq_timedreceive), %g0
-        srl            %o4, 0, %o4
-
-       .globl          sys32_select
-sys32_select:
-       sethi           %hi(compat_sys_select), %g1
-       jmpl            %g1 + %lo(compat_sys_select), %g0
-        srl            %o4, 0, %o4
-
-       .globl          sys32_futex
-sys32_futex:
-       sethi           %hi(compat_sys_futex), %g1
-       jmpl            %g1 + %lo(compat_sys_futex), %g0
-        srl            %o4, 0, %o4
-
        .align          32
        .globl          sys32_socketcall
 sys32_socketcall:      /* %o0=call, %o1=args */
@@ -199,23 +249,23 @@ do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
         lduwa          [%o1 + 0x4] %asi, %o1
        nop
        nop
-do_sys_sendto: /* sys32_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
+do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
        ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys32_sendto), %g1
+       sethi           %hi(sys_sendto), %g1
        lduwa           [%o1 + 0x8] %asi, %o2
        lduwa           [%o1 + 0xc] %asi, %o3
        lduwa           [%o1 + 0x10] %asi, %o4
        ldswa           [%o1 + 0x14] %asi, %o5
-       jmpl            %g1 + %lo(sys32_sendto), %g0
+       jmpl            %g1 + %lo(sys_sendto), %g0
         lduwa          [%o1 + 0x4] %asi, %o1
-do_sys_recvfrom: /* sys32_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
+do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
        ldswa           [%o1 + 0x0] %asi, %o0
-       sethi           %hi(sys32_recvfrom), %g1
+       sethi           %hi(sys_recvfrom), %g1
        lduwa           [%o1 + 0x8] %asi, %o2
        lduwa           [%o1 + 0xc] %asi, %o3
        lduwa           [%o1 + 0x10] %asi, %o4
        lduwa           [%o1 + 0x14] %asi, %o5
-       jmpl            %g1 + %lo(sys32_recvfrom), %g0
+       jmpl            %g1 + %lo(sys_recvfrom), %g0
         lduwa          [%o1 + 0x4] %asi, %o1
 do_sys_shutdown: /* sys_shutdown(int, int) */
        ldswa           [%o1 + 0x0] %asi, %o0
index 8029499..f1a6191 100644 (file)
@@ -179,7 +179,7 @@ asmlinkage unsigned long sparc_brk(unsigned long brk)
  * sys_pipe() is the normal C calling standard for creating
  * a pipe. It's not the way unix traditionally does this, though.
  */
-asmlinkage int sparc_pipe(struct pt_regs *regs)
+asmlinkage long sparc_pipe(struct pt_regs *regs)
 {
        int fd[2];
        int error;
@@ -199,22 +199,22 @@ out:
  * This is really horribly ugly.
  */
 
-asmlinkage int sys_ipc (unsigned call, int first, int second, unsigned long third, void *ptr, long fifth)
+asmlinkage long sys_ipc(unsigned int call, int first, int second, unsigned long third, void __user *ptr, long fifth)
 {
        int err;
 
        /* No need for backward compatibility. We can start fresh... */
-
-       if (call <= SEMCTL)
+       if (call <= SEMCTL) {
                switch (call) {
                case SEMOP:
-                       err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, NULL);
+                       err = sys_semtimedop(first, ptr, second, NULL);
                        goto out;
                case SEMTIMEDOP:
-                       err = sys_semtimedop (first, (struct sembuf __user *)ptr, second, (const struct timespec __user *) fifth);
+                       err = sys_semtimedop(first, ptr, second,
+                               (const struct timespec __user *) fifth);
                        goto out;
                case SEMGET:
-                       err = sys_semget (first, second, (int)third);
+                       err = sys_semget(first, second, (int)third);
                        goto out;
                case SEMCTL: {
                        union semun fourth;
@@ -222,79 +222,87 @@ asmlinkage int sys_ipc (unsigned call, int first, int second, unsigned long thir
                        if (!ptr)
                                goto out;
                        err = -EFAULT;
-                       if (get_user(fourth.__pad, (void __user * __user *)ptr))
+                       if (get_user(fourth.__pad,
+                                    (void __user * __user *) ptr))
                                goto out;
-                       err = sys_semctl (first, second | IPC_64, (int)third, fourth);
+                       err = sys_semctl(first, second | IPC_64,
+                                        (int)third, fourth);
                        goto out;
-                       }
+               }
                default:
                        err = -ENOSYS;
                        goto out;
-               }
-       if (call <= MSGCTL) 
+               };
+       }
+       if (call <= MSGCTL) {
                switch (call) {
                case MSGSND:
-                       err = sys_msgsnd (first, (struct msgbuf __user *) ptr, 
-                                         second, (int)third);
+                       err = sys_msgsnd(first, ptr, second, (int)third);
                        goto out;
                case MSGRCV:
-                       err = sys_msgrcv (first, (struct msgbuf __user *) ptr, second, fifth, (int)third);
+                       err = sys_msgrcv(first, ptr, second, fifth,
+                                        (int)third);
                        goto out;
                case MSGGET:
-                       err = sys_msgget ((key_t) first, second);
+                       err = sys_msgget((key_t) first, second);
                        goto out;
                case MSGCTL:
-                       err = sys_msgctl (first, second | IPC_64, (struct msqid_ds __user *) ptr);
+                       err = sys_msgctl(first, second | IPC_64, ptr);
                        goto out;
                default:
                        err = -ENOSYS;
                        goto out;
-               }
-       if (call <= SHMCTL) 
+               };
+       }
+       if (call <= SHMCTL) {
                switch (call) {
                case SHMAT: {
                        ulong raddr;
-                       err = do_shmat (first, (char __user *) ptr, second, &raddr);
+                       err = do_shmat(first, ptr, second, &raddr);
                        if (!err) {
-                               if (put_user(raddr, (ulong __user *) third))
+                               if (put_user(raddr,
+                                            (ulong __user *) third))
                                        err = -EFAULT;
                        }
                        goto out;
                }
                case SHMDT:
-                       err = sys_shmdt ((char __user *)ptr);
+                       err = sys_shmdt(ptr);
                        goto out;
                case SHMGET:
-                       err = sys_shmget (first, second, (int)third);
+                       err = sys_shmget(first, second, (int)third);
                        goto out;
                case SHMCTL:
-                       err = sys_shmctl (first, second | IPC_64, (struct shmid_ds __user *) ptr);
+                       err = sys_shmctl(first, second | IPC_64, ptr);
                        goto out;
                default:
                        err = -ENOSYS;
                        goto out;
-               }
-       else
+               };
+       } else {
                err = -ENOSYS;
+       }
 out:
        return err;
 }
 
-asmlinkage int sparc64_newuname(struct new_utsname __user *name)
+asmlinkage long sparc64_newuname(struct new_utsname __user *name)
 {
        int ret = sys_newuname(name);
        
        if (current->personality == PER_LINUX32 && !ret) {
-               ret = copy_to_user(name->machine, "sparc\0\0", 8) ? -EFAULT : 0;
+               ret = (copy_to_user(name->machine, "sparc\0\0", 8)
+                      ? -EFAULT : 0);
        }
        return ret;
 }
 
-asmlinkage int sparc64_personality(unsigned long personality)
+asmlinkage long sparc64_personality(unsigned long personality)
 {
        int ret;
 
-       if (current->personality == PER_LINUX32 && personality == PER_LINUX)
+       if (current->personality == PER_LINUX32 &&
+           personality == PER_LINUX)
                personality = PER_LINUX32;
        ret = sys_personality(personality);
        if (ret == PER_LINUX32)
@@ -408,8 +416,7 @@ out:
 }
 
 /* we come to here via sys_nis_syscall so it can setup the regs argument */
-asmlinkage unsigned long
-c_sys_nis_syscall (struct pt_regs *regs)
+asmlinkage unsigned long c_sys_nis_syscall(struct pt_regs *regs)
 {
        static int count;
        
@@ -427,8 +434,7 @@ c_sys_nis_syscall (struct pt_regs *regs)
 
 /* #define DEBUG_SPARC_BREAKPOINT */
 
-asmlinkage void
-sparc_breakpoint (struct pt_regs *regs)
+asmlinkage void sparc_breakpoint(struct pt_regs *regs)
 {
        siginfo_t info;
 
@@ -452,7 +458,7 @@ sparc_breakpoint (struct pt_regs *regs)
 
 extern void check_pending(int signum);
 
-asmlinkage int sys_getdomainname(char __user *name, int len)
+asmlinkage long sys_getdomainname(char __user *name, int len)
 {
         int nlen;
        int err = -EFAULT;
@@ -473,7 +479,7 @@ done:
        return err;
 }
 
-asmlinkage int solaris_syscall(struct pt_regs *regs)
+asmlinkage long solaris_syscall(struct pt_regs *regs)
 {
        static int count;
 
@@ -493,7 +499,7 @@ asmlinkage int solaris_syscall(struct pt_regs *regs)
 }
 
 #ifndef CONFIG_SUNOS_EMUL
-asmlinkage int sunos_syscall(struct pt_regs *regs)
+asmlinkage long sunos_syscall(struct pt_regs *regs)
 {
        static int count;
 
@@ -511,11 +517,11 @@ asmlinkage int sunos_syscall(struct pt_regs *regs)
 }
 #endif
 
-asmlinkage int sys_utrap_install(utrap_entry_t type,
-                                utrap_handler_t new_p,
-                                utrap_handler_t new_d,
-                                utrap_handler_t __user *old_p,
-                                utrap_handler_t __user *old_d)
+asmlinkage long sys_utrap_install(utrap_entry_t type,
+                                 utrap_handler_t new_p,
+                                 utrap_handler_t new_d,
+                                 utrap_handler_t __user *old_p,
+                                 utrap_handler_t __user *old_d)
 {
        if (type < UT_INSTRUCTION_EXCEPTION || type > UT_TRAP_INSTRUCTION_31)
                return -EINVAL;
@@ -582,12 +588,11 @@ long sparc_memory_ordering(unsigned long model, struct pt_regs *regs)
        return 0;
 }
 
-asmlinkage long
-sys_rt_sigaction(int sig,
-               const struct sigaction __user *act,
-               struct sigaction __user *oact,
-               void __user *restorer,
-               size_t sigsetsize)
+asmlinkage long sys_rt_sigaction(int sig,
+                                const struct sigaction __user *act,
+                                struct sigaction __user *oact,
+                                void __user *restorer,
+                                size_t sigsetsize)
 {
        struct k_sigaction new_ka, old_ka;
        int ret;
@@ -615,8 +620,7 @@ sys_rt_sigaction(int sig,
 /* Invoked by rtrap code to update performance counters in
  * user space.
  */
-asmlinkage void
-update_perfctrs(void)
+asmlinkage void update_perfctrs(void)
 {
        unsigned long pic, tmp;
 
@@ -628,8 +632,7 @@ update_perfctrs(void)
        reset_pic();
 }
 
-asmlinkage int
-sys_perfctr(int opcode, unsigned long arg0, unsigned long arg1, unsigned long arg2)
+asmlinkage long sys_perfctr(int opcode, unsigned long arg0, unsigned long arg1, unsigned long arg2)
 {
        int err = 0;
 
index b226be3..c3a52ce 100644 (file)
 #include <asm/semaphore.h>
 #include <asm/mmu_context.h>
 
-/* Use this to get at 32-bit user passed pointers. */
-/* Things to consider: the low-level assembly stub does
-   srl x, 0, x for first four arguments, so if you have
-   pointer to something in the first four arguments, just
-   declare it as a pointer, not u32. On the other side, 
-   arguments from 5th onwards should be declared as u32
-   for pointers, and need AA() around each usage.
-   A() macro should be used for places where you e.g.
-   have some internal variable u32 and just want to get
-   rid of a compiler warning. AA() has to be used in
-   places where you want to convert a function argument
-   to 32bit pointer or when you e.g. access pt_regs
-   structure and want to consider 32bit registers only.
-   -jj
- */
-#define A(__x) ((unsigned long)(__x))
-#define AA(__x)                                \
-({     unsigned long __ret;            \
-       __asm__ ("srl   %0, 0, %0"      \
-                : "=r" (__ret)         \
-                : "0" (__x));          \
-       __ret;                          \
-})
-
 asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group)
 {
        return sys_chown(filename, low2highuid(user), low2highgid(group));
@@ -281,8 +256,7 @@ static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i)
 
 struct msgbuf32 { s32 mtype; char mtext[1]; };
 
-struct ipc_perm32
-{
+struct ipc_perm32 {
        key_t             key;
         compat_uid_t  uid;
         compat_gid_t  gid;
@@ -383,21 +357,22 @@ struct shmid64_ds32 {
  * This is really horribly ugly.
  */
 #define IPCOP_MASK(__x)        (1UL << ((__x)&~IPC_64))
-static int do_sys32_semctl(int first, int second, int third, void *uptr)
+static int do_sys32_semctl(int first, int second, int third,
+                          compat_uptr_t __user *uptr)
 {
        union semun fourth;
-       u32 pad;
+       compat_uptr_t pad;
        int err = -EINVAL;
 
        if (!uptr)
                goto out;
        err = -EFAULT;
-       if (get_user (pad, (u32 __user *)uptr))
+       if (get_user(pad, uptr))
                goto out;
        if ((third & ~IPC_64) == SETVAL)
                fourth.val = (int)pad;
        else
-               fourth.__pad = (void __user *)A(pad);
+               fourth.__pad = compat_ptr(pad);
        if (IPCOP_MASK (third) &
            (IPCOP_MASK (IPC_INFO) | IPCOP_MASK (SEM_INFO) | IPCOP_MASK (GETVAL) |
             IPCOP_MASK (GETPID) | IPCOP_MASK (GETNCNT) | IPCOP_MASK (GETZCNT) |
@@ -405,8 +380,7 @@ static int do_sys32_semctl(int first, int second, int third, void *uptr)
                err = sys_semctl (first, second, third, fourth);
        } else if (third & IPC_64) {
                struct semid64_ds s;
-               struct semid64_ds32 __user *usp =
-                       (struct semid64_ds32 __user *)A(pad);
+               struct semid64_ds32 __user *usp = compat_ptr(pad);
                mm_segment_t old_fs;
                int need_back_translation;
 
@@ -434,8 +408,7 @@ static int do_sys32_semctl(int first, int second, int third, void *uptr)
                }
        } else {
                struct semid_ds s;
-               struct semid_ds32 __user *usp =
-                       (struct semid_ds32 __user *)A(pad);
+               struct semid_ds32 __user *usp = compat_ptr(pad);
                mm_segment_t old_fs;
                int need_back_translation;
 
@@ -474,13 +447,15 @@ out:
        return err;
 }
 
-static int do_sys32_msgsnd (int first, int second, int third, void *uptr)
+static int do_sys32_msgsnd(int first, int second, int third,
+                          void __user *uptr)
 {
-       struct msgbuf *p = kmalloc (second + sizeof (struct msgbuf), GFP_USER);
-       struct msgbuf32 __user *up = (struct msgbuf32 __user *) uptr;
+       struct msgbuf32 __user *up = uptr;
+       struct msgbuf *p;
        mm_segment_t old_fs;
        int err;
 
+       p = kmalloc(second + sizeof (struct msgbuf), GFP_USER);
        if (!p)
                return -ENOMEM;
        err = -EFAULT;
@@ -489,15 +464,16 @@ static int do_sys32_msgsnd (int first, int second, int third, void *uptr)
                goto out;
        old_fs = get_fs ();
        set_fs (KERNEL_DS);
-       err = sys_msgsnd (first, (struct msgbuf __user *) p, second, third);
+       err = sys_msgsnd (first, (struct msgbuf __user *) p,
+                         second, third);
        set_fs (old_fs);
 out:
        kfree (p);
        return err;
 }
 
-static int do_sys32_msgrcv (int first, int second, int msgtyp, int third,
-                           int version, void *uptr)
+static int do_sys32_msgrcv(int first, int second, int msgtyp, int third,
+                          int version, void __user *uptr)
 {
        struct msgbuf32 __user *up;
        struct msgbuf *p;
@@ -505,21 +481,21 @@ static int do_sys32_msgrcv (int first, int second, int msgtyp, int third,
        int err;
 
        if (!version) {
-               struct ipc_kludge __user *uipck =
-                       (struct ipc_kludge __user *) uptr;
+               struct ipc_kludge __user *uipck = uptr;
                struct ipc_kludge ipck;
 
                err = -EINVAL;
                if (!uptr)
                        goto out;
                err = -EFAULT;
-               if (copy_from_user (&ipck, uipck, sizeof (struct ipc_kludge)))
+               if (copy_from_user (&ipck, uipck,
+                                   sizeof (struct ipc_kludge)))
                        goto out;
-               uptr = (void *)A(ipck.msgp);
+               uptr = compat_ptr(ipck.msgp);
                msgtyp = ipck.msgtyp;
        }
        err = -ENOMEM;
-       p = kmalloc (second + sizeof (struct msgbuf), GFP_USER);
+       p = kmalloc(second + sizeof (struct msgbuf), GFP_USER);
        if (!p)
                goto out;
        old_fs = get_fs ();
@@ -529,7 +505,7 @@ static int do_sys32_msgrcv (int first, int second, int msgtyp, int third,
        set_fs (old_fs);
        if (err < 0)
                goto free_then_out;
-       up = (struct msgbuf32 __user *) uptr;
+       up = uptr;
        if (put_user (p->mtype, &up->mtype) ||
            __copy_to_user (&up->mtext, p->mtext, err))
                err = -EFAULT;
@@ -539,39 +515,46 @@ out:
        return err;
 }
 
-static int do_sys32_msgctl (int first, int second, void *uptr)
+static int do_sys32_msgctl(int first, int second, void __user *uptr)
 {
        int err;
 
        if (IPCOP_MASK (second) &
            (IPCOP_MASK (IPC_INFO) | IPCOP_MASK (MSG_INFO) |
             IPCOP_MASK (IPC_RMID))) {
-               err = sys_msgctl (first, second,
-                                 (struct msqid_ds __user *)uptr);
+               err = sys_msgctl (first, second, uptr);
        } else if (second & IPC_64) {
                struct msqid64_ds m;
-               struct msqid64_ds32 __user *up =
-                       (struct msqid64_ds32 __user *) uptr;
+               struct msqid64_ds32 __user *up = uptr;
                mm_segment_t old_fs;
 
                if (second == (IPC_SET|IPC_64)) {
-                       err = get_user (m.msg_perm.uid, &up->msg_perm.uid);
-                       err |= __get_user (m.msg_perm.gid, &up->msg_perm.gid);
-                       err |= __get_user (m.msg_perm.mode, &up->msg_perm.mode);
-                       err |= __get_user (m.msg_qbytes, &up->msg_qbytes);
+                       err = get_user (m.msg_perm.uid,
+                                       &up->msg_perm.uid);
+                       err |= __get_user (m.msg_perm.gid,
+                                          &up->msg_perm.gid);
+                       err |= __get_user (m.msg_perm.mode,
+                                          &up->msg_perm.mode);
+                       err |= __get_user (m.msg_qbytes,
+                                          &up->msg_qbytes);
                        if (err)
                                goto out;
                }
                old_fs = get_fs ();
                set_fs (KERNEL_DS);
-               err = sys_msgctl (first, second, (struct msqid_ds __user *)&m);
+               err = sys_msgctl(first, second,
+                                (struct msqid_ds __user *)&m);
                set_fs (old_fs);
                if (IPCOP_MASK (second) &
                    (IPCOP_MASK (MSG_STAT) | IPCOP_MASK (IPC_STAT))) {
-                       int err2 = copy_to_user(&up->msg_perm, &m.msg_perm, sizeof(struct ipc64_perm) + 3*sizeof(time_t));
-                       err2 |= __put_user (m.msg_cbytes, &up->msg_cbytes);
+                       int err2 = copy_to_user(&up->msg_perm,
+                                               &m.msg_perm,
+                                               (sizeof(struct ipc64_perm) + 3*sizeof(time_t)));
+                       err2 |= __put_user (m.msg_cbytes,
+                                           &up->msg_cbytes);
                        err2 |= __put_user (m.msg_qnum, &up->msg_qnum);
-                       err2 |= __put_user (m.msg_qbytes, &up->msg_qbytes);
+                       err2 |= __put_user (m.msg_qbytes,
+                                           &up->msg_qbytes);
                        err2 |= __put_user (m.msg_lspid, &up->msg_lspid);
                        err2 |= __put_user (m.msg_lrpid, &up->msg_lrpid);
                        if (err2)
@@ -579,39 +562,52 @@ static int do_sys32_msgctl (int first, int second, void *uptr)
                }
        } else {
                struct msqid_ds m;
-               struct msqid_ds32 __user *up =
-                       (struct msqid_ds32 __user *)uptr;
+               struct msqid_ds32 __user *up = uptr;
                mm_segment_t old_fs;
 
                if (second == IPC_SET) {
-                       err = get_user (m.msg_perm.uid, &up->msg_perm.uid);
-                       err |= __get_user (m.msg_perm.gid, &up->msg_perm.gid);
-                       err |= __get_user (m.msg_perm.mode, &up->msg_perm.mode);
-                       err |= __get_user (m.msg_qbytes, &up->msg_qbytes);
+                       err = get_user(m.msg_perm.uid,
+                                      &up->msg_perm.uid);
+                       err |= __get_user(m.msg_perm.gid,
+                                         &up->msg_perm.gid);
+                       err |= __get_user(m.msg_perm.mode,
+                                         &up->msg_perm.mode);
+                       err |= __get_user(m.msg_qbytes,
+                                         &up->msg_qbytes);
                        if (err)
                                goto out;
                }
                old_fs = get_fs ();
                set_fs (KERNEL_DS);
-               err = sys_msgctl (first, second, (struct msqid_ds __user *) &m);
+               err = sys_msgctl(first, second,
+                                (struct msqid_ds __user *) &m);
                set_fs (old_fs);
                if (IPCOP_MASK (second) &
                    (IPCOP_MASK (MSG_STAT) | IPCOP_MASK (IPC_STAT))) {
-                       int err2 = put_user (m.msg_perm.key, &up->msg_perm.key);
-                       err2 |= __put_user (high2lowuid(m.msg_perm.uid), &up->msg_perm.uid);
-                       err2 |= __put_user (high2lowgid(m.msg_perm.gid), &up->msg_perm.gid);
-                       err2 |= __put_user (high2lowuid(m.msg_perm.cuid), &up->msg_perm.cuid);
-                       err2 |= __put_user (high2lowgid(m.msg_perm.cgid), &up->msg_perm.cgid);
-                       err2 |= __put_user (m.msg_perm.mode, &up->msg_perm.mode);
-                       err2 |= __put_user (m.msg_perm.seq, &up->msg_perm.seq);
-                       err2 |= __put_user (m.msg_stime, &up->msg_stime);
-                       err2 |= __put_user (m.msg_rtime, &up->msg_rtime);
-                       err2 |= __put_user (m.msg_ctime, &up->msg_ctime);
-                       err2 |= __put_user (m.msg_cbytes, &up->msg_cbytes);
-                       err2 |= __put_user (m.msg_qnum, &up->msg_qnum);
-                       err2 |= __put_user (m.msg_qbytes, &up->msg_qbytes);
-                       err2 |= __put_user (m.msg_lspid, &up->msg_lspid);
-                       err2 |= __put_user (m.msg_lrpid, &up->msg_lrpid);
+                       int err2 = put_user(m.msg_perm.key,
+                                           &up->msg_perm.key);
+                       err2 |= __put_user(high2lowuid(m.msg_perm.uid),
+                                          &up->msg_perm.uid);
+                       err2 |= __put_user(high2lowgid(m.msg_perm.gid),
+                                          &up->msg_perm.gid);
+                       err2 |= __put_user(high2lowuid(m.msg_perm.cuid),
+                                          &up->msg_perm.cuid);
+                       err2 |= __put_user(high2lowgid(m.msg_perm.cgid),
+                                          &up->msg_perm.cgid);
+                       err2 |= __put_user(m.msg_perm.mode,
+                                          &up->msg_perm.mode);
+                       err2 |= __put_user(m.msg_perm.seq,
+                                          &up->msg_perm.seq);
+                       err2 |= __put_user(m.msg_stime, &up->msg_stime);
+                       err2 |= __put_user(m.msg_rtime, &up->msg_rtime);
+                       err2 |= __put_user(m.msg_ctime, &up->msg_ctime);
+                       err2 |= __put_user(m.msg_cbytes,
+                                          &up->msg_cbytes);
+                       err2 |= __put_user(m.msg_qnum, &up->msg_qnum);
+                       err2 |= __put_user(m.msg_qbytes,
+                                          &up->msg_qbytes);
+                       err2 |= __put_user(m.msg_lspid, &up->msg_lspid);
+                       err2 |= __put_user(m.msg_lrpid, &up->msg_lrpid);
                        if (err2)
                                err = -EFAULT;
                }
@@ -624,7 +620,7 @@ out:
 static int do_sys32_shmat (int first, int second, int third, int version, void __user *uptr)
 {
        unsigned long raddr;
-       u32 __user *uaddr = (u32 __user *)A((u32)third);
+       u32 __user *uaddr = compat_ptr((compat_uptr_t)third);
        int err = -EINVAL;
 
        if (version == 1)
@@ -637,66 +633,75 @@ out:
        return err;
 }
 
-static int do_sys32_shmctl (int first, int second, void *uptr)
+static int do_sys32_shmctl(int first, int second, void __user *uptr)
 {
        int err;
 
        if (IPCOP_MASK (second) &
-           (IPCOP_MASK (IPC_INFO) | IPCOP_MASK (SHM_LOCK) | IPCOP_MASK (SHM_UNLOCK) |
-            IPCOP_MASK (IPC_RMID))) {
-               if (second == (IPC_INFO|IPC_64))
-                       second = IPC_INFO; /* So that we don't have to translate it */
-               err = sys_shmctl (first, second,
-                                 (struct shmid_ds __user *) uptr);
+           (IPCOP_MASK (IPC_INFO) | IPCOP_MASK (SHM_LOCK) |
+            IPCOP_MASK (SHM_UNLOCK) | IPCOP_MASK (IPC_RMID))) {
+               if (second == (IPC_INFO|IPC_64)) {
+                       /* So that we don't have to translate it */
+                       second = IPC_INFO;
+               }
+               err = sys_shmctl(first, second, uptr);
        } else if ((second & IPC_64) && second != (SHM_INFO|IPC_64)) {
                struct shmid64_ds s;
-               struct shmid64_ds32 __user *up =
-                       (struct shmid64_ds32 __user *) uptr;
+               struct shmid64_ds32 __user *up = uptr;
                mm_segment_t old_fs;
 
                if (second == (IPC_SET|IPC_64)) {
-                       err = get_user (s.shm_perm.uid, &up->shm_perm.uid);
-                       err |= __get_user (s.shm_perm.gid, &up->shm_perm.gid);
-                       err |= __get_user (s.shm_perm.mode, &up->shm_perm.mode);
+                       err = get_user(s.shm_perm.uid,
+                                      &up->shm_perm.uid);
+                       err |= __get_user(s.shm_perm.gid,
+                                         &up->shm_perm.gid);
+                       err |= __get_user(s.shm_perm.mode,
+                                         &up->shm_perm.mode);
                        if (err)
                                goto out;
                }
-               old_fs = get_fs ();
-               set_fs (KERNEL_DS);
-               err = sys_shmctl (first, second, (struct shmid_ds __user *)&s);
-               set_fs (old_fs);
+               old_fs = get_fs();
+               set_fs(KERNEL_DS);
+               err = sys_shmctl(first, second,
+                                (struct shmid_ds __user *)&s);
+               set_fs(old_fs);
                if (err < 0)
                        goto out;
 
                /* Mask it even in this case so it becomes a CSE. */
                if (IPCOP_MASK (second) &
                    (IPCOP_MASK (SHM_STAT) | IPCOP_MASK (IPC_STAT))) {
-                       int err2 = copy_to_user (&up->shm_perm, &s.shm_perm, sizeof(struct ipc64_perm) + 3*sizeof(time_t));
-                       err2 |= __put_user (s.shm_segsz, &up->shm_segsz);
-                       err2 |= __put_user (s.shm_nattch, &up->shm_nattch);
-                       err2 |= __put_user (s.shm_cpid, &up->shm_cpid);
-                       err2 |= __put_user (s.shm_lpid, &up->shm_lpid);
+                       int err2 = copy_to_user(&up->shm_perm,
+                                               &s.shm_perm,
+                                               sizeof(struct ipc64_perm) + 3*sizeof(time_t));
+                       err2 |= __put_user(s.shm_segsz, &up->shm_segsz);
+                       err2 |= __put_user(s.shm_nattch,&up->shm_nattch);
+                       err2 |= __put_user(s.shm_cpid, &up->shm_cpid);
+                       err2 |= __put_user(s.shm_lpid, &up->shm_lpid);
                        if (err2)
                                err = -EFAULT;
                }
        } else {
                struct shmid_ds s;
-               struct shmid_ds32 __user *up =
-                       (struct shmid_ds32 __user *) uptr;
+               struct shmid_ds32 __user *up = uptr;
                mm_segment_t old_fs;
 
                second &= ~IPC_64;
                if (second == IPC_SET) {
-                       err = get_user (s.shm_perm.uid, &up->shm_perm.uid);
-                       err |= __get_user (s.shm_perm.gid, &up->shm_perm.gid);
-                       err |= __get_user (s.shm_perm.mode, &up->shm_perm.mode);
+                       err = get_user(s.shm_perm.uid,
+                                      &up->shm_perm.uid);
+                       err |= __get_user(s.shm_perm.gid,
+                                         &up->shm_perm.gid);
+                       err |= __get_user(s.shm_perm.mode,
+                                         &up->shm_perm.mode);
                        if (err)
                                goto out;
                }
-               old_fs = get_fs ();
-               set_fs (KERNEL_DS);
-               err = sys_shmctl (first, second, (struct shmid_ds __user *) &s);
-               set_fs (old_fs);
+               old_fs = get_fs();
+               set_fs(KERNEL_DS);
+               err = sys_shmctl(first, second,
+                                (struct shmid_ds __user *) &s);
+               set_fs(old_fs);
                if (err < 0)
                        goto out;
 
@@ -707,33 +712,45 @@ static int do_sys32_shmctl (int first, int second, void *uptr)
                                u32 shm_tot, shm_rss, shm_swp;
                                u32 swap_attempts, swap_successes;
                        };
-                       struct shm_info32 __user *uip =
-                               (struct shm_info32 __user *) uptr;
-                       struct shm_info *kp = (struct shm_info *)&s;
-                       int err2 = put_user (kp->used_ids, &uip->used_ids);
-                       err2 |= __put_user (kp->shm_tot, &uip->shm_tot);
-                       err2 |= __put_user (kp->shm_rss, &uip->shm_rss);
-                       err2 |= __put_user (kp->shm_swp, &uip->shm_swp);
-                       err2 |= __put_user (kp->swap_attempts, &uip->swap_attempts);
-                       err2 |= __put_user (kp->swap_successes, &uip->swap_successes);
+                       struct shm_info32 __user *uip = uptr;
+                       struct shm_info *kp = (struct shm_info *) &s;
+                       int err2 = put_user(kp->used_ids,
+                                           &uip->used_ids);
+                       err2 |= __put_user(kp->shm_tot, &uip->shm_tot);
+                       err2 |= __put_user(kp->shm_rss, &uip->shm_rss);
+                       err2 |= __put_user(kp->shm_swp, &uip->shm_swp);
+                       err2 |= __put_user(kp->swap_attempts,
+                                          &uip->swap_attempts);
+                       err2 |= __put_user(kp->swap_successes,
+                                          &uip->swap_successes);
                        if (err2)
                                err = -EFAULT;
                } else if (IPCOP_MASK (second) &
-                          (IPCOP_MASK (SHM_STAT) | IPCOP_MASK (IPC_STAT))) {
-                       int err2 = put_user (s.shm_perm.key, &up->shm_perm.key);
-                       err2 |= __put_user (high2lowuid(s.shm_perm.uid), &up->shm_perm.uid);
-                       err2 |= __put_user (high2lowuid(s.shm_perm.gid), &up->shm_perm.gid);
-                       err2 |= __put_user (high2lowuid(s.shm_perm.cuid), &up->shm_perm.cuid);
-                       err2 |= __put_user (high2lowuid(s.shm_perm.cgid), &up->shm_perm.cgid);
-                       err2 |= __put_user (s.shm_perm.mode, &up->shm_perm.mode);
-                       err2 |= __put_user (s.shm_perm.seq, &up->shm_perm.seq);
-                       err2 |= __put_user (s.shm_atime, &up->shm_atime);
-                       err2 |= __put_user (s.shm_dtime, &up->shm_dtime);
-                       err2 |= __put_user (s.shm_ctime, &up->shm_ctime);
-                       err2 |= __put_user (s.shm_segsz, &up->shm_segsz);
-                       err2 |= __put_user (s.shm_nattch, &up->shm_nattch);
-                       err2 |= __put_user (s.shm_cpid, &up->shm_cpid);
-                       err2 |= __put_user (s.shm_lpid, &up->shm_lpid);
+                          (IPCOP_MASK (SHM_STAT) |
+                           IPCOP_MASK (IPC_STAT))) {
+                       int err2;
+
+                       err2  = put_user(s.shm_perm.key,
+                                        &up->shm_perm.key);
+                       err2 |= __put_user(high2lowuid(s.shm_perm.uid),
+                                          &up->shm_perm.uid);
+                       err2 |= __put_user(high2lowuid(s.shm_perm.gid),
+                                          &up->shm_perm.gid);
+                       err2 |= __put_user(high2lowuid(s.shm_perm.cuid),
+                                          &up->shm_perm.cuid);
+                       err2 |= __put_user(high2lowuid(s.shm_perm.cgid),
+                                          &up->shm_perm.cgid);
+                       err2 |= __put_user(s.shm_perm.mode,
+                                          &up->shm_perm.mode);
+                       err2 |= __put_user(s.shm_perm.seq,
+                                          &up->shm_perm.seq);
+                       err2 |= __put_user(s.shm_atime, &up->shm_atime);
+                       err2 |= __put_user(s.shm_dtime, &up->shm_dtime);
+                       err2 |= __put_user(s.shm_ctime, &up->shm_ctime);
+                       err2 |= __put_user(s.shm_segsz, &up->shm_segsz);
+                       err2 |= __put_user(s.shm_nattch,&up->shm_nattch);
+                       err2 |= __put_user(s.shm_cpid, &up->shm_cpid);
+                       err2 |= __put_user(s.shm_lpid, &up->shm_lpid);
                        if (err2)
                                err = -EFAULT;
                }
@@ -742,12 +759,14 @@ out:
        return err;
 }
 
-static int sys32_semtimedop(int semid, struct sembuf __user *tsems, int nsems,
-                           const struct compat_timespec __user *timeout32)
+static int sys32_semtimedop(int semid, struct sembuf __user *tsems,
+               int nsems,
+               const struct compat_timespec __user *timeout32)
 {
        struct compat_timespec t32;
-       struct timespec __user *t64 = compat_alloc_user_space(sizeof(*t64));
+       struct timespec __user *t64;
 
+       t64 = compat_alloc_user_space(sizeof(*t64));
        if (copy_from_user(&t32, timeout32, sizeof(t32)))
                return -EFAULT;
 
@@ -758,77 +777,81 @@ static int sys32_semtimedop(int semid, struct sembuf __user *tsems, int nsems,
        return sys_semtimedop(semid, tsems, nsems, t64);
 }
 
-asmlinkage int sys32_ipc (u32 call, int first, int second, int third, u32 ptr, u32 fifth)
+asmlinkage long compat_sys_ipc(u32 call, int first, int second, int third, compat_uptr_t __ptr, u32 fifth)
 {
        int version, err;
+       void __user *ptr = compat_ptr(__ptr);
 
        version = call >> 16; /* hack for backward compatibility */
        call &= 0xffff;
 
-       if (call <= SEMCTL)
+       if (call <= SEMCTL) {
                switch (call) {
                case SEMOP:
-                       /* struct sembuf is the same on 32 and 64bit :)) */
-                       err = sys_semtimedop (first, (struct sembuf __user *)AA(ptr), second, NULL);
+                       /* struct sembuf is the same on 32 and 64 :)) */
+                       err = sys_semtimedop (first, ptr, second, NULL);
                        goto out;
                case SEMTIMEDOP:
-                       err = sys32_semtimedop (first, (struct sembuf __user *)AA(ptr), second, (const struct compat_timespec __user *) AA(fifth));
+                       err = sys32_semtimedop(first, ptr, second,
+                                              compat_ptr(fifth));
                case SEMGET:
-                       err = sys_semget (first, second, third);
+                       err = sys_semget(first, second, third);
                        goto out;
                case SEMCTL:
-                       err = do_sys32_semctl (first, second, third, (void *)AA(ptr));
+                       err = do_sys32_semctl(first, second, third, ptr);
                        goto out;
                default:
                        err = -ENOSYS;
                        goto out;
                };
-       if (call <= MSGCTL) 
+       }
+       if (call <= MSGCTL) {
                switch (call) {
                case MSGSND:
-                       err = do_sys32_msgsnd (first, second, third, (void *)AA(ptr));
+                       err = do_sys32_msgsnd(first, second, third, ptr);
                        goto out;
                case MSGRCV:
-                       err = do_sys32_msgrcv (first, second, fifth, third,
-                                              version, (void *)AA(ptr));
+                       err = do_sys32_msgrcv(first, second, fifth,
+                                             third, version, ptr);
                        goto out;
                case MSGGET:
-                       err = sys_msgget ((key_t) first, second);
+                       err = sys_msgget((key_t) first, second);
                        goto out;
                case MSGCTL:
-                       err = do_sys32_msgctl (first, second, (void *)AA(ptr));
+                       err = do_sys32_msgctl(first, second, ptr);
                        goto out;
                default:
                        err = -ENOSYS;
                        goto out;
-               }
-       if (call <= SHMCTL) 
+               };
+       }
+       if (call <= SHMCTL) {
                switch (call) {
                case SHMAT:
-                       err = do_sys32_shmat (first, second, third,
-                                             version, (void __user *)AA(ptr));
+                       err = do_sys32_shmat(first, second, third,
+                                            version, ptr);
                        goto out;
                case SHMDT: 
-                       err = sys_shmdt ((char __user *)AA(ptr));
+                       err = sys_shmdt(ptr);
                        goto out;
                case SHMGET:
-                       err = sys_shmget (first, second, third);
+                       err = sys_shmget(first, second, third);
                        goto out;
                case SHMCTL:
-                       err = do_sys32_shmctl (first, second, (void *)AA(ptr));
+                       err = do_sys32_shmctl(first, second, ptr);
                        goto out;
                default:
                        err = -ENOSYS;
                        goto out;
-               }
-
+               };
+       }
        err = -ENOSYS;
 
 out:
        return err;
 }
 
-asmlinkage int sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
+asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
 {
        if ((int)high < 0)
                return -EINVAL;
@@ -836,7 +859,7 @@ asmlinkage int sys32_truncate64(const char __user * path, unsigned long high, un
                return sys_truncate(path, (high << 32) | low);
 }
 
-asmlinkage int sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned long low)
+asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned long low)
 {
        if ((int)high < 0)
                return -EINVAL;
@@ -879,7 +902,7 @@ static int fillonedir(void * __buf, const char * name, int namlen,
        return 0;
 }
 
-asmlinkage int old32_readdir(unsigned int fd, struct old_linux_dirent32 __user *dirent, unsigned int count)
+asmlinkage long old32_readdir(unsigned int fd, struct old_linux_dirent32 __user *dirent, unsigned int count)
 {
        int error = -EBADF;
        struct file * file;
@@ -943,7 +966,7 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, i
        return 0;
 }
 
-asmlinkage int sys32_getdents(unsigned int fd, struct linux_dirent32 __user *dirent, unsigned int count)
+asmlinkage long sys32_getdents(unsigned int fd, struct linux_dirent32 __user *dirent, unsigned int count)
 {
        struct file * file;
        struct linux_dirent32 __user *lastdirent;
@@ -964,7 +987,7 @@ asmlinkage int sys32_getdents(unsigned int fd, struct linux_dirent32 __user *dir
                goto out_putf;
        lastdirent = buf.previous;
        error = buf.error;
-       if(lastdirent) {
+       if (lastdirent) {
                put_user(file->f_pos, &lastdirent->d_off);
                error = count - buf.count;
        }
@@ -1006,7 +1029,7 @@ int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
        return err;
 }
 
-asmlinkage int sys32_sysfs(int option, u32 arg1, u32 arg2)
+asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
 {
        return sys_sysfs(option, arg1, arg2);
 }
@@ -1028,7 +1051,7 @@ struct sysinfo32 {
        char _f[20-2*sizeof(int)-sizeof(int)];
 };
 
-asmlinkage int sys32_sysinfo(struct sysinfo32 __user *info)
+asmlinkage long sys32_sysinfo(struct sysinfo32 __user *info)
 {
        struct sysinfo s;
        int ret, err;
@@ -1075,7 +1098,7 @@ asmlinkage int sys32_sysinfo(struct sysinfo32 __user *info)
        return ret;
 }
 
-asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec __user *interval)
+asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec __user *interval)
 {
        struct timespec t;
        int ret;
@@ -1089,7 +1112,10 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, struct compat_times
        return ret;
 }
 
-asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, compat_sigset_t __user *oset, compat_size_t sigsetsize)
+asmlinkage long compat_sys_rt_sigprocmask(int how,
+                                         compat_sigset_t __user *set,
+                                         compat_sigset_t __user *oset,
+                                         compat_size_t sigsetsize)
 {
        sigset_t s;
        compat_sigset_t s32;
@@ -1126,7 +1152,8 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, compat
        return 0;
 }
 
-asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *set, compat_size_t sigsetsize)
+asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
+                                   compat_size_t sigsetsize)
 {
        sigset_t s;
        compat_sigset_t s32;
@@ -1149,10 +1176,10 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *set, compat_size_t si
        return ret;
 }
 
-asmlinkage int
-sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, siginfo_t32 __user *uinfo,
-                     struct compat_timespec __user *uts,
-                     compat_size_t sigsetsize)
+asmlinkage long sys32_rt_sigtimedwait(compat_sigset_t __user *uthese,
+                                     siginfo_t32 __user *uinfo,
+                                     struct compat_timespec __user *uts,
+                                     compat_size_t sigsetsize)
 {
        int ret, sig;
        sigset_t these;
@@ -1234,8 +1261,8 @@ sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, siginfo_t32 __user *uinfo,
        return ret;
 }
 
-asmlinkage int
-sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 __user *uinfo)
+asmlinkage long compat_sys_rt_sigqueueinfo(int pid, int sig,
+                                          siginfo_t32 __user *uinfo)
 {
        siginfo_t info;
        int ret;
@@ -1250,8 +1277,8 @@ sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 __user *uinfo)
        return ret;
 }
 
-asmlinkage int sys32_sigaction (int sig, struct old_sigaction32 __user *act,
-                               struct old_sigaction32 __user *oact)
+asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act,
+                                    struct old_sigaction32 __user *oact)
 {
         struct k_sigaction new_ka, old_ka;
         int ret;
@@ -1289,10 +1316,11 @@ asmlinkage int sys32_sigaction (int sig, struct old_sigaction32 __user *act,
        return ret;
 }
 
-asmlinkage int
-sys32_rt_sigaction(int sig, struct sigaction32 __user *act,
-                  struct sigaction32 __user *oact,
-                  void __user *restorer, compat_size_t sigsetsize)
+asmlinkage long compat_sys_rt_sigaction(int sig,
+                                       struct sigaction32 __user *act,
+                                       struct sigaction32 __user *oact,
+                                       void __user *restorer,
+                                       compat_size_t sigsetsize)
 {
         struct k_sigaction new_ka, old_ka;
         int ret;
@@ -1351,27 +1379,29 @@ sys32_rt_sigaction(int sig, struct sigaction32 __user *act,
  * sparc32_execve() executes a new program after the asm stub has set
  * things up for us.  This should basically do what I want it to.
  */
-asmlinkage int sparc32_execve(struct pt_regs *regs)
+asmlinkage long sparc32_execve(struct pt_regs *regs)
 {
-        int error, base = 0;
-        char *filename;
+       int error, base = 0;
+       char *filename;
 
        /* User register window flush is done by entry.S */
 
-        /* Check for indirect call. */
-        if((u32)regs->u_regs[UREG_G1] == 0)
-                base = 1;
+       /* Check for indirect call. */
+       if ((u32)regs->u_regs[UREG_G1] == 0)
+               base = 1;
 
-        filename = getname((char __user *)AA(regs->u_regs[base + UREG_I0]));
+       filename = getname(compat_ptr(regs->u_regs[base + UREG_I0]));
        error = PTR_ERR(filename);
-        if(IS_ERR(filename))
-                goto out;
-        error = compat_do_execve(filename,
-               compat_ptr((u32)regs->u_regs[base + UREG_I1]),
-               compat_ptr((u32)regs->u_regs[base + UREG_I2]), regs);
-        putname(filename);
-
-       if(!error) {
+       if (IS_ERR(filename))
+               goto out;
+
+       error = compat_do_execve(filename,
+                                compat_ptr(regs->u_regs[base + UREG_I1]),
+                                compat_ptr(regs->u_regs[base + UREG_I2]), regs);
+
+       putname(filename);
+
+       if (!error) {
                fprs_write(0);
                current_thread_info()->xfsr[0] = 0;
                current_thread_info()->fpsaved[0] = 0;
@@ -1379,33 +1409,32 @@ asmlinkage int sparc32_execve(struct pt_regs *regs)
                current->ptrace &= ~PT_DTRACE;
        }
 out:
-        return error;
+       return error;
 }
 
 #ifdef CONFIG_MODULES
 
-asmlinkage int sys32_init_module(void __user *umod, u32 len,
-                                const char __user *uargs)
+asmlinkage long sys32_init_module(void __user *umod, u32 len,
+                                 const char __user *uargs)
 {
        return sys_init_module(umod, len, uargs);
 }
 
-asmlinkage int sys32_delete_module(const char __user *name_user,
-                                  unsigned int flags)
+asmlinkage long sys32_delete_module(const char __user *name_user,
+                                   unsigned int flags)
 {
        return sys_delete_module(name_user, flags);
 }
 
 #else /* CONFIG_MODULES */
 
-asmlinkage int
-sys32_init_module(const char *name_user, struct module *mod_user)
+asmlinkage long sys32_init_module(const char __user *name_user,
+                                 struct module __user *mod_user)
 {
        return -ENOSYS;
 }
 
-asmlinkage int
-sys32_delete_module(const char *name_user)
+asmlinkage long sys32_delete_module(const char __user *name_user)
 {
        return -ENOSYS;
 }
@@ -1417,8 +1446,8 @@ sys32_delete_module(const char *name_user)
 
 extern struct timezone sys_tz;
 
-asmlinkage int sys32_gettimeofday(struct compat_timeval __user *tv,
-                                 struct timezone __user *tz)
+asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv,
+                                  struct timezone __user *tz)
 {
        if (tv) {
                struct timeval ktv;
@@ -1447,8 +1476,8 @@ static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
        return 0;
 }
 
-asmlinkage int sys32_settimeofday(struct compat_timeval __user *tv,
-                                 struct timezone __user *tz)
+asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv,
+                                  struct timezone __user *tz)
 {
        struct timespec kts;
        struct timezone ktz;
@@ -1465,8 +1494,8 @@ asmlinkage int sys32_settimeofday(struct compat_timeval __user *tv,
        return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
 }
 
-asmlinkage int sys32_utimes(char __user *filename,
-                           struct compat_timeval __user *tvs)
+asmlinkage long sys32_utimes(char __user *filename,
+                            struct compat_timeval __user *tvs)
 {
        struct timeval ktvs[2];
 
@@ -1480,74 +1509,61 @@ asmlinkage int sys32_utimes(char __user *filename,
 }
 
 /* These are here just in case some old sparc32 binary calls it. */
-asmlinkage int sys32_pause(void)
+asmlinkage long sys32_pause(void)
 {
        current->state = TASK_INTERRUPTIBLE;
        schedule();
        return -ERESTARTNOHAND;
 }
 
-/* PCI config space poking. */
-
-asmlinkage int sys32_pciconfig_read(u32 bus, u32 dfn, u32 off, u32 len, u32 ubuf)
-{
-       return sys_pciconfig_read((unsigned long) bus,
-                                 (unsigned long) dfn,
-                                 (unsigned long) off,
-                                 (unsigned long) len,
-                                 (unsigned char __user *)AA(ubuf));
-}
-
-asmlinkage int sys32_pciconfig_write(u32 bus, u32 dfn, u32 off, u32 len, u32 ubuf)
-{
-       return sys_pciconfig_write((unsigned long) bus,
-                                  (unsigned long) dfn,
-                                  (unsigned long) off,
-                                  (unsigned long) len,
-                                  (unsigned char __user *)AA(ubuf));
-}
-
-asmlinkage int sys32_prctl(int option, u32 arg2, u32 arg3, u32 arg4, u32 arg5)
-{
-       return sys_prctl(option,
-                        (unsigned long) arg2,
-                        (unsigned long) arg3,
-                        (unsigned long) arg4,
-                        (unsigned long) arg5);
-}
-
-
-asmlinkage compat_ssize_t sys32_pread64(unsigned int fd, char __user *ubuf,
+asmlinkage compat_ssize_t sys32_pread64(unsigned int fd,
+                                       char __user *ubuf,
                                        compat_size_t count,
-                                       u32 poshi, u32 poslo)
+                                       unsigned long poshi,
+                                       unsigned long poslo)
 {
-       return sys_pread64(fd, ubuf, count,
-                          ((loff_t)AA(poshi) << 32) | AA(poslo));
+       return sys_pread64(fd, ubuf, count, (poshi << 32) | poslo);
 }
 
-asmlinkage compat_ssize_t sys32_pwrite64(unsigned int fd, char __user *ubuf,
-                                   compat_size_t count, u32 poshi, u32 poslo)
+asmlinkage compat_ssize_t sys32_pwrite64(unsigned int fd,
+                                        char __user *ubuf,
+                                        compat_size_t count,
+                                        unsigned long poshi,
+                                        unsigned long poslo)
 {
-       return sys_pwrite64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo));
+       return sys_pwrite64(fd, ubuf, count, (poshi << 32) | poslo);
 }
 
-asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 count)
+asmlinkage long compat_sys_readahead(int fd,
+                                    unsigned long offhi,
+                                    unsigned long offlo,
+                                    compat_size_t count)
 {
-       return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count);
+       return sys_readahead(fd, (offhi << 32) | offlo, count);
 }
 
-long sys32_fadvise64(int fd, u32 offhi, u32 offlo, s32 len, int advice)
+long compat_sys_fadvise64(int fd,
+                         unsigned long offhi,
+                         unsigned long offlo,
+                         compat_size_t len, int advice)
 {
-       return sys_fadvise64_64(fd, ((loff_t)AA(offhi)<<32)|AA(offlo), len, advice);
+       return sys_fadvise64_64(fd, (offhi << 32) | offlo, len, advice);
 }
 
-long sys32_fadvise64_64(int fd, u32 offhi, u32 offlo, u32 lenhi, u32 lenlo, int advice)
+long compat_sys_fadvise64_64(int fd,
+                            unsigned long offhi, unsigned long offlo,
+                            unsigned long lenhi, unsigned long lenlo,
+                            int advice)
 {
-       return sys_fadvise64_64(fd, ((loff_t)AA(offhi)<<32)|AA(offlo),
-                               ((loff_t)AA(lenhi)<<32)|AA(lenlo), advice);
+       return sys_fadvise64_64(fd,
+                               (offhi << 32) | offlo,
+                               (lenhi << 32) | lenlo,
+                               advice);
 }
 
-asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count)
+asmlinkage long compat_sys_sendfile(int out_fd, int in_fd,
+                                   compat_off_t __user *offset,
+                                   compat_size_t count)
 {
        mm_segment_t old_fs = get_fs();
        int ret;
@@ -1568,7 +1584,9 @@ asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset
        return ret;
 }
 
-asmlinkage int sys32_sendfile64(int out_fd, int in_fd, compat_loff_t __user *offset, s32 count)
+asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd,
+                                     compat_loff_t __user *offset,
+                                     compat_size_t count)
 {
        mm_segment_t old_fs = get_fs();
        int ret;
@@ -1606,57 +1624,57 @@ struct timex32 {
 
 extern int do_adjtimex(struct timex *);
 
-asmlinkage int sys32_adjtimex(struct timex32 __user *utp)
+asmlinkage long sys32_adjtimex(struct timex32 __user *utp)
 {
        struct timex txc;
        int ret;
 
        memset(&txc, 0, sizeof(struct timex));
 
-       if(get_user(txc.modes, &utp->modes) ||
-          __get_user(txc.offset, &utp->offset) ||
-          __get_user(txc.freq, &utp->freq) ||
-          __get_user(txc.maxerror, &utp->maxerror) ||
-          __get_user(txc.esterror, &utp->esterror) ||
-          __get_user(txc.status, &utp->status) ||
-          __get_user(txc.constant, &utp->constant) ||
-          __get_user(txc.precision, &utp->precision) ||
-          __get_user(txc.tolerance, &utp->tolerance) ||
-          __get_user(txc.time.tv_sec, &utp->time.tv_sec) ||
-          __get_user(txc.time.tv_usec, &utp->time.tv_usec) ||
-          __get_user(txc.tick, &utp->tick) ||
-          __get_user(txc.ppsfreq, &utp->ppsfreq) ||
-          __get_user(txc.jitter, &utp->jitter) ||
-          __get_user(txc.shift, &utp->shift) ||
-          __get_user(txc.stabil, &utp->stabil) ||
-          __get_user(txc.jitcnt, &utp->jitcnt) ||
-          __get_user(txc.calcnt, &utp->calcnt) ||
-          __get_user(txc.errcnt, &utp->errcnt) ||
-          __get_user(txc.stbcnt, &utp->stbcnt))
+       if (get_user(txc.modes, &utp->modes) ||
+           __get_user(txc.offset, &utp->offset) ||
+           __get_user(txc.freq, &utp->freq) ||
+           __get_user(txc.maxerror, &utp->maxerror) ||
+           __get_user(txc.esterror, &utp->esterror) ||
+           __get_user(txc.status, &utp->status) ||
+           __get_user(txc.constant, &utp->constant) ||
+           __get_user(txc.precision, &utp->precision) ||
+           __get_user(txc.tolerance, &utp->tolerance) ||
+           __get_user(txc.time.tv_sec, &utp->time.tv_sec) ||
+           __get_user(txc.time.tv_usec, &utp->time.tv_usec) ||
+           __get_user(txc.tick, &utp->tick) ||
+           __get_user(txc.ppsfreq, &utp->ppsfreq) ||
+           __get_user(txc.jitter, &utp->jitter) ||
+           __get_user(txc.shift, &utp->shift) ||
+           __get_user(txc.stabil, &utp->stabil) ||
+           __get_user(txc.jitcnt, &utp->jitcnt) ||
+           __get_user(txc.calcnt, &utp->calcnt) ||
+           __get_user(txc.errcnt, &utp->errcnt) ||
+           __get_user(txc.stbcnt, &utp->stbcnt))
                return -EFAULT;
 
        ret = do_adjtimex(&txc);
 
-       if(put_user(txc.modes, &utp->modes) ||
-          __put_user(txc.offset, &utp->offset) ||
-          __put_user(txc.freq, &utp->freq) ||
-          __put_user(txc.maxerror, &utp->maxerror) ||
-          __put_user(txc.esterror, &utp->esterror) ||
-          __put_user(txc.status, &utp->status) ||
-          __put_user(txc.constant, &utp->constant) ||
-          __put_user(txc.precision, &utp->precision) ||
-          __put_user(txc.tolerance, &utp->tolerance) ||
-          __put_user(txc.time.tv_sec, &utp->time.tv_sec) ||
-          __put_user(txc.time.tv_usec, &utp->time.tv_usec) ||
-          __put_user(txc.tick, &utp->tick) ||
-          __put_user(txc.ppsfreq, &utp->ppsfreq) ||
-          __put_user(txc.jitter, &utp->jitter) ||
-          __put_user(txc.shift, &utp->shift) ||
-          __put_user(txc.stabil, &utp->stabil) ||
-          __put_user(txc.jitcnt, &utp->jitcnt) ||
-          __put_user(txc.calcnt, &utp->calcnt) ||
-          __put_user(txc.errcnt, &utp->errcnt) ||
-          __put_user(txc.stbcnt, &utp->stbcnt))
+       if (put_user(txc.modes, &utp->modes) ||
+           __put_user(txc.offset, &utp->offset) ||
+           __put_user(txc.freq, &utp->freq) ||
+           __put_user(txc.maxerror, &utp->maxerror) ||
+           __put_user(txc.esterror, &utp->esterror) ||
+           __put_user(txc.status, &utp->status) ||
+           __put_user(txc.constant, &utp->constant) ||
+           __put_user(txc.precision, &utp->precision) ||
+           __put_user(txc.tolerance, &utp->tolerance) ||
+           __put_user(txc.time.tv_sec, &utp->time.tv_sec) ||
+           __put_user(txc.time.tv_usec, &utp->time.tv_usec) ||
+           __put_user(txc.tick, &utp->tick) ||
+           __put_user(txc.ppsfreq, &utp->ppsfreq) ||
+           __put_user(txc.jitter, &utp->jitter) ||
+           __put_user(txc.shift, &utp->shift) ||
+           __put_user(txc.stabil, &utp->stabil) ||
+           __put_user(txc.jitcnt, &utp->jitcnt) ||
+           __put_user(txc.calcnt, &utp->calcnt) ||
+           __put_user(txc.errcnt, &utp->errcnt) ||
+           __put_user(txc.stbcnt, &utp->stbcnt))
                ret = -EFAULT;
 
        return ret;
@@ -1666,7 +1684,8 @@ asmlinkage int sys32_adjtimex(struct timex32 __user *utp)
  * not force O_LARGEFILE on.
  */
 
-asmlinkage long sparc32_open(const char __user *filename, int flags, int mode)
+asmlinkage long sparc32_open(const char __user *filename,
+                            int flags, int mode)
 {
        char * tmp;
        int fd, error;
@@ -1703,7 +1722,7 @@ asmlinkage unsigned long sys32_mremap(unsigned long addr,
 {
        struct vm_area_struct *vma;
        unsigned long ret = -EINVAL;
-       unsigned long new_addr = AA(__new_addr);
+       unsigned long new_addr = __new_addr;
 
        if (old_len > 0xf0000000UL || new_len > 0xf0000000UL)
                goto out;
@@ -1744,13 +1763,6 @@ out:
        return ret;       
 }
 
-asmlinkage int sys_setpriority32(u32 which, u32 who, u32 niceval)
-{
-       return sys_setpriority((int) which,
-                              (int) who,
-                              (int) niceval);
-}
-
 struct __sysctl_args32 {
        u32 name;
        int nlen;
@@ -1781,21 +1793,24 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
                   basically copy the whole sysctl.c here, and
                   glibc's __sysctl uses rw memory for the structure
                   anyway.  */
-               if (get_user(oldlen, (u32 __user *)A(tmp.oldlenp)) ||
+               if (get_user(oldlen, (u32 __user *)(unsigned long)tmp.oldlenp) ||
                    put_user(oldlen, (size_t __user *)addr))
                        return -EFAULT;
                oldlenp = (size_t __user *)addr;
        }
 
        lock_kernel();
-       error = do_sysctl((int __user *)A(tmp.name), tmp.nlen,
-                         (void __user *)A(tmp.oldval),
-                         oldlenp, (void __user *)A(tmp.newval), tmp.newlen);
+       error = do_sysctl((int __user *)(unsigned long) tmp.name,
+                         tmp.nlen,
+                         (void __user *)(unsigned long) tmp.oldval,
+                         oldlenp,
+                         (void __user *)(unsigned long) tmp.newval,
+                         tmp.newlen);
        unlock_kernel();
        if (oldlenp) {
                if (!error) {
                        if (get_user(oldlen, (size_t __user *)addr) ||
-                           put_user(oldlen, (u32 __user *)A(tmp.oldlenp)))
+                           put_user(oldlen, (u32 __user *)(unsigned long) tmp.oldlenp))
                                error = -EFAULT;
                }
                copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused));
@@ -1804,10 +1819,11 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
 #endif
 }
 
-long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low,
+long sys32_lookup_dcookie(unsigned long cookie_high,
+                         unsigned long cookie_low,
                          char __user *buf, size_t len)
 {
-       return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
+       return sys_lookup_dcookie((cookie_high << 32) | cookie_low,
                                  buf, len);
 }
 
index 4a6df8c..c1c0640 100644 (file)
 #include <net/sock.h>
 #include <net/compat.h>
 
-/* Use this to get at 32-bit user passed pointers. */
-#define A(__x)                         \
-({     unsigned long __ret;            \
-       __asm__ ("srl   %0, 0, %0"      \
-                : "=r" (__ret)         \
-                : "0" (__x));          \
-       __ret;                          \
-})
-
 #define SUNOS_NR_OPEN  256
 
 asmlinkage u32 sunos_mmap(u32 addr, u32 len, u32 prot, u32 flags, u32 fd, u32 off)
@@ -308,13 +299,12 @@ static int sunos_filldir(void * __buf, const char * name, int namlen,
        return 0;
 }
 
-asmlinkage int sunos_getdents(unsigned int fd, u32 u_dirent, int cnt)
+asmlinkage int sunos_getdents(unsigned int fd, void __user *dirent, int cnt)
 {
        struct file * file;
        struct sunos_dirent __user *lastdirent;
        struct sunos_dirent_callback buf;
        int error = -EBADF;
-       void __user *dirent = (void __user *)A(u_dirent);
 
        if (fd >= SUNOS_NR_OPEN)
                goto out;
@@ -389,11 +379,11 @@ static int sunos_filldirentry(void * __buf, const char * name, int namlen,
        return 0;
 }
 
-asmlinkage int sunos_getdirentries(unsigned int fd, u32 u_dirent,
-                                  int cnt, u32 u_basep)
+asmlinkage int sunos_getdirentries(unsigned int fd,
+                                  void __user *dirent,
+                                  int cnt,
+                                  unsigned int __user *basep)
 {
-       void __user *dirent = (void __user *) A(u_dirent);
-       unsigned int __user *basep = (unsigned int __user *)A(u_basep);
        struct file * file;
        struct sunos_direntry __user *lastdirent;
        int error = -EBADF;
@@ -813,13 +803,12 @@ asmlinkage int sunos_setpgrp(pid_t pid, pid_t pgid)
 extern long compat_sys_wait4(compat_pid_t, compat_uint_t *, int,
                             struct compat_rusage *);
 
-asmlinkage int sunos_wait4(compat_pid_t pid, u32 stat_addr, int options, u32 ru)
+asmlinkage int sunos_wait4(compat_pid_t pid, compat_uint_t __user *stat_addr, int options, struct compat_rusage __user *ru)
 {
        int ret;
 
        ret = compat_sys_wait4((pid ? pid : ((compat_pid_t)-1)),
-                              (compat_uint_t *)A(stat_addr), options,
-                              (struct compat_rusage *)A(ru));
+                              stat_addr, options, ru);
        return ret;
 }
 
@@ -893,7 +882,7 @@ asmlinkage s32 sunos_sysconf (int name)
        return ret;
 }
 
-asmlinkage int sunos_semsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 ptr)
+asmlinkage int sunos_semsys(int op, u32 arg1, u32 arg2, u32 arg3, void __user *ptr)
 {
        union semun arg4;
        int ret;
@@ -919,7 +908,7 @@ asmlinkage int sunos_semsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 ptr)
                }
                /* sys_semctl(): */
                /* value to modify semaphore to */
-               arg4.__pad=(void __user *)A(ptr);
+               arg4.__pad = ptr;
                ret = sys_semctl((int)arg1, (int)arg2, (int)arg3, arg4);
                break;
        case 1:
@@ -928,7 +917,7 @@ asmlinkage int sunos_semsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 ptr)
                break;
        case 2:
                /* sys_semop(): */
-               ret = sys_semop((int)arg1, (struct sembuf __user *)A(arg2),
+               ret = sys_semop((int)arg1, (struct sembuf __user *)(unsigned long)arg2,
                                (unsigned int) arg3);
                break;
        default:
@@ -1041,13 +1030,13 @@ asmlinkage int sunos_msgsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 arg4)
                rval = sys_msgget((key_t)arg1, (int)arg2);
                break;
        case 1:
-               if (!sunos_msqid_get((struct msqid_ds32 __user *)A(arg3), &kds)) {
+               if (!sunos_msqid_get((struct msqid_ds32 __user *)(unsigned long)arg3, &kds)) {
                        set_fs(KERNEL_DS);
                        rval = sys_msgctl((int)arg1, (int)arg2,
-                                         (struct msqid_ds __user *)A(arg3));
+                                         (struct msqid_ds __user *)(unsigned long)arg3);
                        set_fs(old_fs);
                        if (!rval)
-                               rval = sunos_msqid_put((struct msqid_ds32 __user *)A(arg3),
+                               rval = sunos_msqid_put((struct msqid_ds32 __user *)(unsigned long)arg3,
                                                       &kds);
                } else
                        rval = -EFAULT;
@@ -1071,7 +1060,7 @@ asmlinkage int sunos_msgsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 arg4)
                                  (long)arg4, (int)arg5);
                set_fs(old_fs);
                if (!rval)
-                       rval = sunos_msgbuf_put((struct msgbuf32 __user *)A(arg2),
+                       rval = sunos_msgbuf_put((struct msgbuf32 __user *)(unsigned long)arg2,
                                                kmbuf, arg3);
                kfree(kmbuf);
                break;
@@ -1079,7 +1068,7 @@ asmlinkage int sunos_msgsys(int op, u32 arg1, u32 arg2, u32 arg3, u32 arg4)
                rval = -EFAULT;
                kmbuf = (struct msgbuf *)kmalloc(sizeof(struct msgbuf) + arg3,
                                                 GFP_KERNEL);
-               if (!kmbuf || sunos_msgbuf_get((struct msgbuf32 __user *)A(arg2),
+               if (!kmbuf || sunos_msgbuf_get((struct msgbuf32 __user *)(unsigned long)arg2,
                                               kmbuf, arg3))
                        break;
                set_fs(KERNEL_DS);
@@ -1154,26 +1143,26 @@ asmlinkage int sunos_shmsys(int op, u32 arg1, u32 arg2, u32 arg3)
        switch(op) {
        case 0:
                /* do_shmat(): attach a shared memory area */
-               rval = do_shmat((int)arg1,(char __user *)A(arg2),(int)arg3,&raddr);
+               rval = do_shmat((int)arg1,(char __user *)(unsigned long)arg2,(int)arg3,&raddr);
                if (!rval)
                        rval = (int) raddr;
                break;
        case 1:
                /* sys_shmctl(): modify shared memory area attr. */
-               if (!sunos_shmid_get((struct shmid_ds32 __user *)A(arg3), &ksds)) {
+               if (!sunos_shmid_get((struct shmid_ds32 __user *)(unsigned long)arg3, &ksds)) {
                        set_fs(KERNEL_DS);
                        rval = sys_shmctl((int) arg1,(int) arg2,
                                          (struct shmid_ds __user *) &ksds);
                        set_fs(old_fs);
                        if (!rval)
-                               rval = sunos_shmid_put((struct shmid_ds32 __user *)A(arg3),
+                               rval = sunos_shmid_put((struct shmid_ds32 __user *)(unsigned long)arg3,
                                                       &ksds);
                } else
                        rval = -EFAULT;
                break;
        case 2:
                /* sys_shmdt(): detach a shared memory area */
-               rval = sys_shmdt((char __user *)A(arg1));
+               rval = sys_shmdt((char __user *)(unsigned long)arg1);
                break;
        case 3:
                /* sys_shmget(): get a shared memory area */
@@ -1215,66 +1204,60 @@ static inline int check_nonblock(int ret, int fd)
        return ret;
 }
 
-asmlinkage int sunos_read(unsigned int fd, u32 buf, u32 count)
+asmlinkage int sunos_read(unsigned int fd, char __user *buf, u32 count)
 {
        int ret;
 
-       ret = check_nonblock(sys_read(fd, (char __user *)A(buf), count), fd);
+       ret = check_nonblock(sys_read(fd, buf, count), fd);
        return ret;
 }
 
-asmlinkage int sunos_readv(u32 fd, u32 vector, s32 count)
+asmlinkage int sunos_readv(u32 fd, void __user *vector, s32 count)
 {
        int ret;
 
-       ret = check_nonblock(compat_sys_readv(fd, (void __user *) A(vector),
-                                             count), fd);
+       ret = check_nonblock(compat_sys_readv(fd, vector, count), fd);
        return ret;
 }
 
-asmlinkage int sunos_write(unsigned int fd, u32 buf, u32 count)
+asmlinkage int sunos_write(unsigned int fd, char __user *buf, u32 count)
 {
        int ret;
 
-       ret = check_nonblock(sys_write(fd, (char __user *)A(buf), count), fd);
+       ret = check_nonblock(sys_write(fd, buf, count), fd);
        return ret;
 }
 
-asmlinkage int sunos_writev(u32 fd, u32 vector, s32 count)
+asmlinkage int sunos_writev(u32 fd, void __user *vector, s32 count)
 {
        int ret;
 
-       ret = check_nonblock(compat_sys_writev(fd, (void __user *)A(vector),
-                                              count), fd);
+       ret = check_nonblock(compat_sys_writev(fd, vector, count), fd);
        return ret;
 }
 
-asmlinkage int sunos_recv(int fd, u32 ubuf, int size, unsigned flags)
+asmlinkage int sunos_recv(u32 __fd, void __user *ubuf, int size, unsigned flags)
 {
-       int ret;
+       int ret, fd = (int) __fd;
 
-       ret = check_nonblock(sys_recv(fd, (void __user *)A(ubuf),
-                                     size, flags), fd);
+       ret = check_nonblock(sys_recv(fd, ubuf, size, flags), fd);
        return ret;
 }
 
-asmlinkage int sunos_send(int fd, u32 buff, int len, unsigned flags)
+asmlinkage int sunos_send(u32 __fd, void __user *buff, int len, unsigned flags)
 {
-       int ret;
+       int ret, fd = (int) __fd;
 
-       ret = check_nonblock(sys_send(fd, (void __user *)A(buff),
-                                     len, flags), fd);
+       ret = check_nonblock(sys_send(fd, buff, len, flags), fd);
        return ret;
 }
 
-asmlinkage int sunos_accept(int fd, u32 sa, u32 addrlen)
+asmlinkage int sunos_accept(u32 __fd, struct sockaddr __user *sa, int __user *addrlen)
 {
-       int ret;
+       int ret, fd = (int) __fd;
 
        while (1) {
-               ret = check_nonblock(sys_accept(fd,
-                                               (struct sockaddr __user *)A(sa),
-                                               (int __user *)A(addrlen)), fd);
+               ret = check_nonblock(sys_accept(fd, sa, addrlen), fd);
                if (ret != -ENETUNREACH && ret != -EHOSTUNREACH)
                        break;
        }
@@ -1283,7 +1266,9 @@ asmlinkage int sunos_accept(int fd, u32 sa, u32 addrlen)
 
 #define SUNOS_SV_INTERRUPT 2
 
-asmlinkage int sunos_sigaction (int sig, u32 act, u32 oact)
+asmlinkage int sunos_sigaction (int sig,
+                               struct old_sigaction32 __user *act,
+                               struct old_sigaction32 __user *oact)
 {
        struct k_sigaction new_ka, old_ka;
        int ret;
@@ -1292,11 +1277,11 @@ asmlinkage int sunos_sigaction (int sig, u32 act, u32 oact)
                compat_old_sigset_t mask;
                u32 u_handler;
 
-               if (get_user(u_handler, &((struct old_sigaction32 __user *)A(act))->sa_handler) ||
-                   __get_user(new_ka.sa.sa_flags, &((struct old_sigaction32 __user *)A(act))->sa_flags))
+               if (get_user(u_handler, &act->sa_handler) ||
+                   __get_user(new_ka.sa.sa_flags, &act->sa_flags))
                        return -EFAULT;
                new_ka.sa.sa_handler = (void *) (long) u_handler;
-               __get_user(mask, &((struct old_sigaction32 __user *)A(act))->sa_mask);
+               __get_user(mask, &act->sa_mask);
                new_ka.sa.sa_restorer = NULL;
                new_ka.ka_restorer = NULL;
                siginitset(&new_ka.sa.sa_mask, mask);
@@ -1307,18 +1292,22 @@ asmlinkage int sunos_sigaction (int sig, u32 act, u32 oact)
 
        if (!ret && oact) {
                old_ka.sa.sa_flags ^= SUNOS_SV_INTERRUPT;
-               if (put_user((long)old_ka.sa.sa_handler, &((struct old_sigaction32 __user *)A(oact))->sa_handler) ||
-                   __put_user(old_ka.sa.sa_flags, &((struct old_sigaction32 __user *)A(oact))->sa_flags))
+               if (put_user((long)old_ka.sa.sa_handler, &oact->sa_handler) ||
+                   __put_user(old_ka.sa.sa_flags, &oact->sa_flags))
                        return -EFAULT;
-               __put_user(old_ka.sa.sa_mask.sig[0], &((struct old_sigaction32 __user *)A(oact))->sa_mask);
+               __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
        }
 
        return ret;
 }
 
-asmlinkage int sunos_setsockopt(int fd, int level, int optname, u32 optval,
-                               int optlen)
+asmlinkage int sunos_setsockopt(u32 __fd, u32 __level, u32 __optname,
+                               char __user *optval, u32 __optlen)
 {
+       int fd = (int) __fd;
+       int level = (int) __level;
+       int optname = (int) __optname;
+       int optlen = (int) __optlen;
        int tr_opt = optname;
        int ret;
 
@@ -1328,13 +1317,16 @@ asmlinkage int sunos_setsockopt(int fd, int level, int optname, u32 optval,
                        tr_opt += 30;
        }
        ret = sys_setsockopt(fd, level, tr_opt,
-                            (char __user *)A(optval), optlen);
+                            optval, optlen);
        return ret;
 }
 
-asmlinkage int sunos_getsockopt(int fd, int level, int optname,
-                               u32 optval, u32 optlen)
+asmlinkage int sunos_getsockopt(u32 __fd, u32 __level, u32 __optname,
+                               char __user *optval, int __user *optlen)
 {
+       int fd = (int) __fd;
+       int level = (int) __level;
+       int optname = (int) __optname;
        int tr_opt = optname;
        int ret;
 
@@ -1344,7 +1336,6 @@ asmlinkage int sunos_getsockopt(int fd, int level, int optname,
                        tr_opt += 30;
        }
        ret = compat_sys_getsockopt(fd, level, tr_opt,
-                                   (void __user *)(unsigned long) optval,
-                                   (void __user *)(unsigned long) optlen);
+                                   optval, optlen);
        return ret;
 }
index 66e82e7..2187876 100644 (file)
 
        .globl sys_call_table32
 sys_call_table32:
-/*0*/  .word sys_restart_syscall, sparc_exit, sys_fork, sys_read, sys_write
-/*5*/  .word sparc32_open, sys_close, compat_sys_wait4, sys_creat, sys_link
+/*0*/  .word sys_restart_syscall, sys32_exit, sys_fork, sys_read, sys_write
+/*5*/  .word sys32_open, sys_close, sys32_wait4, sys32_creat, sys_link
 /*10*/  .word sys_unlink, sunos_execv, sys_chdir, sys32_chown16, sys32_mknod
-/*15*/ .word sys32_chmod, sys32_lchown16, sparc_brk, sys_perfctr, sys32_lseek
+/*15*/ .word sys_chmod, sys32_lchown16, sparc_brk, sys32_perfctr, sys32_lseek
 /*20*/ .word sys_getpid, sys_capget, sys_capset, sys32_setuid16, sys32_getuid16
 /*25*/ .word sys_time, sys_ptrace, sys_alarm, sys32_sigaltstack, sys32_pause
-/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
-       .word sys_chown, sys_sync, sys_kill, compat_sys_newstat, sys32_sendfile
+/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
+       .word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile
 /*40*/ .word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid
-       .word sys_umount, sys32_setgid16, sys32_getgid16, sys_signal, sys32_geteuid16
+       .word sys32_umount, sys32_setgid16, sys32_getgid16, sys32_signal, sys32_geteuid16
 /*50*/ .word sys32_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl
-       .word sys_reboot, sys32_mmap2, sys_symlink, sys_readlink, sys32_execve
-/*60*/ .word sys_umask, sys_chroot, compat_sys_newfstat, sys_fstat64, sys_getpagesize
-       .word sys_msync, sys_vfork, sys32_pread64, sys32_pwrite64, sys_geteuid
-/*70*/ .word sys_getegid, sys32_mmap, sys_setreuid, sys_munmap, sys_mprotect
+       .word sys32_reboot, sys32_mmap2, sys_symlink, sys32_readlink, sys32_execve
+/*60*/ .word sys32_umask, sys_chroot, compat_sys_newfstat, sys_fstat64, sys_getpagesize
+       .word sys32_msync, sys_vfork, sys32_pread64, sys32_pwrite64, sys_geteuid
+/*70*/ .word sys_getegid, sys_mmap, sys_setreuid, sys_munmap, sys_mprotect
        .word sys_madvise, sys_vhangup, sys32_truncate64, sys_mincore, sys32_getgroups16
-/*80*/ .word sys32_setgroups16, sys_getpgrp, sys_setgroups, compat_sys_setitimer, sys32_ftruncate64
-       .word sys_swapon, compat_sys_getitimer, sys_setuid, sys_sethostname, sys_setgid
+/*80*/ .word sys32_setgroups16, sys_getpgrp, sys32_setgroups, sys32_setitimer, sys32_ftruncate64
+       .word sys32_swapon, sys32_getitimer, sys_setuid, sys32_sethostname, sys_setgid
 /*90*/ .word sys_dup2, sys_setfsuid, compat_sys_fcntl, sys32_select, sys_setfsgid
-       .word sys_fsync, sys_setpriority32, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
-/*100*/ .word sys_getpriority, sys32_rt_sigreturn, sys32_rt_sigaction, sys32_rt_sigprocmask, sys32_rt_sigpending
+       .word sys_fsync, sys32_setpriority, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
+/*100*/ .word sys32_getpriority, sys32_rt_sigreturn, sys32_rt_sigaction, sys32_rt_sigprocmask, sys32_rt_sigpending
        .word sys32_rt_sigtimedwait, sys32_rt_sigqueueinfo, sys32_rt_sigsuspend, sys_setresuid, sys_getresuid
 /*110*/        .word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall
-       .word sys_getgroups, sys32_gettimeofday, compat_sys_getrusage, sys_nis_syscall, sys_getcwd
+       .word sys32_getgroups, sys32_gettimeofday, sys32_getrusage, sys_nis_syscall, sys_getcwd
 /*120*/        .word compat_sys_readv, compat_sys_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod
        .word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate
 /*130*/        .word sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall
-       .word sys_nis_syscall, sys_mkdir, sys_rmdir, sys32_utimes, sys_stat64
+       .word sys_nis_syscall, sys32_mkdir, sys_rmdir, sys32_utimes, sys_stat64
 /*140*/        .word sys32_sendfile64, sys_nis_syscall, sys32_futex, sys_gettid, compat_sys_getrlimit
-       .word compat_sys_setrlimit, sys_pivot_root, sys32_prctl, sys32_pciconfig_read, sys32_pciconfig_write
+       .word compat_sys_setrlimit, sys_pivot_root, sys32_prctl, sys_pciconfig_read, sys_pciconfig_write
 /*150*/        .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
        .word compat_sys_fcntl64, sys_ni_syscall, compat_sys_statfs, compat_sys_fstatfs, sys_oldumount
-/*160*/        .word compat_sys_sched_setaffinity, compat_sys_sched_getaffinity, sys_getdomainname, sys_setdomainname, sys_nis_syscall
-       .word sys_quotactl, sys_set_tid_address, compat_sys_mount, sys_ustat, sys_setxattr
-/*170*/        .word sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr, sys32_getdents
-       .word sys_setsid, sys_fchdir, sys_fgetxattr, sys_listxattr, sys_llistxattr
-/*180*/        .word sys_flistxattr, sys_removexattr, sys_lremovexattr, compat_sys_sigpending, sys_ni_syscall
-       .word sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sparc64_newuname
-/*190*/        .word sys32_init_module, sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl
-       .word sys_epoll_wait, sys_nis_syscall, sys_getppid, sys32_sigaction, sys_sgetmask
-/*200*/        .word sys_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, old32_readdir
-       .word sys32_readahead, sys32_socketcall, sys_syslog, sys32_lookup_dcookie, sys32_fadvise64
-/*210*/        .word sys32_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys32_sysinfo
+/*160*/        .word compat_sys_sched_setaffinity, compat_sys_sched_getaffinity, sys32_getdomainname, sys32_setdomainname, sys_nis_syscall
+       .word sys_quotactl, sys_set_tid_address, compat_sys_mount, sys_ustat, sys32_setxattr
+/*170*/        .word sys32_lsetxattr, sys32_fsetxattr, sys_getxattr, sys_lgetxattr, sys32_getdents
+       .word sys_setsid, sys_fchdir, sys32_fgetxattr, sys_listxattr, sys_llistxattr
+/*180*/        .word sys32_flistxattr, sys_removexattr, sys_lremovexattr, compat_sys_sigpending, sys_ni_syscall
+       .word sys32_setpgid, sys32_fremovexattr, sys32_tkill, sys32_exit_group, sparc64_newuname
+/*190*/        .word sys32_init_module, sparc64_personality, sys_remap_file_pages, sys32_epoll_create, sys32_epoll_ctl
+       .word sys32_epoll_wait, sys_nis_syscall, sys_getppid, sys32_sigaction, sys_sgetmask
+/*200*/        .word sys32_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, old32_readdir
+       .word sys32_readahead, sys32_socketcall, sys32_syslog, sys32_lookup_dcookie, sys32_fadvise64
+/*210*/        .word sys32_fadvise64_64, sys32_tgkill, sys32_waitpid, sys_swapoff, sys32_sysinfo
        .word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex
-/*220*/        .word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid
+/*220*/        .word sys32_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys32_getpgid
        .word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
 /*230*/        .word sys32_select, sys_time, sys_nis_syscall, sys_stime, compat_statfs64
-       .word compat_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
-/*240*/        .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
-       .word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
-/*250*/        .word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, compat_sys_nfsservctl
-       .word sys_ni_syscall, compat_clock_settime, compat_clock_gettime, compat_clock_getres, compat_clock_nanosleep
-/*260*/        .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, compat_timer_settime, compat_timer_gettime, sys_timer_getoverrun
+       .word compat_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys32_mlockall
+/*240*/        .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler
+       .word sys_sched_yield, sys32_sched_get_priority_max, sys32_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
+/*250*/        .word sys32_mremap, sys32_sysctl, sys32_getsid, sys_fdatasync, sys32_nfsservctl
+       .word sys_ni_syscall, sys32_clock_settime, compat_clock_gettime, compat_clock_getres, sys32_clock_nanosleep
+/*260*/        .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, sys32_timer_settime, compat_timer_gettime, sys_timer_getoverrun
        .word sys_timer_delete, sys32_timer_create, sys_vserver, compat_sys_io_setup, sys_io_destroy
-/*270*/        .word compat_sys_io_submit, sys_io_cancel, compat_sys_io_getevents, compat_sys_mq_open, sys_mq_unlink
-       .word sys32_mq_timedsend, sys32_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, sys_ni_syscall
+/*270*/        .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
+       .word sys_mq_timedsend, sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, sys_ni_syscall
 /*280*/        .word sys_ni_syscall, sys_ni_syscall, sys_ni_syscall
 
        /* Now the 64-bit native Linux syscall table. */
@@ -148,12 +148,12 @@ sys_call_table:
        .align 4
        .globl sunos_sys_table
 sunos_sys_table:
-/*0*/  .word sunos_indir, sparc_exit, sys_fork
+/*0*/  .word sunos_indir, sys32_exit, sys_fork
        .word sunos_read, sunos_write, sunos_open
        .word sys_close, sunos_wait4, sys_creat
        .word sys_link, sys_unlink, sunos_execv
        .word sys_chdir, sunos_nosys, sys32_mknod
-       .word sys32_chmod, sys32_lchown16, sunos_brk
+       .word sys_chmod, sys32_lchown16, sunos_brk
        .word sunos_nosys, sys32_lseek, sunos_getpid
        .word sunos_nosys, sunos_nosys, sunos_nosys
        .word sunos_getuid, sunos_nosys, sys_ptrace
@@ -180,26 +180,26 @@ sunos_sys_table:
        .word compat_sys_getitimer, sys_gethostname, sys_sethostname
        .word sunos_getdtablesize, sys_dup2, sunos_nop
        .word compat_sys_fcntl, sunos_select, sunos_nop
-       .word sys_fsync, sys_setpriority32, sys_socket
-       .word sys_connect, sunos_accept
+       .word sys_fsync, sys32_setpriority, sys32_socket
+       .word sys32_connect, sunos_accept
 /*100*/        .word sys_getpriority, sunos_send, sunos_recv
-       .word sunos_nosys, sys_bind, sunos_setsockopt
-       .word sys_listen, sunos_nosys, sunos_sigaction
+       .word sunos_nosys, sys32_bind, sunos_setsockopt
+       .word sys32_listen, sunos_nosys, sunos_sigaction
        .word sunos_sigblock, sunos_sigsetmask, sys_sigpause
-       .word sys32_sigstack, compat_sys_recvmsg, compat_sys_sendmsg
+       .word sys32_sigstack, sys32_recvmsg, sys32_sendmsg
        .word sunos_nosys, sys32_gettimeofday, compat_sys_getrusage
        .word sunos_getsockopt, sunos_nosys, sunos_readv
        .word sunos_writev, sys32_settimeofday, sys32_fchown16
        .word sys_fchmod, sys32_recvfrom, sys32_setreuid16
        .word sys32_setregid16, sys_rename, sys_truncate
        .word sys_ftruncate, sys_flock, sunos_nosys
-       .word sys32_sendto, sys_shutdown, sys_socketpair
+       .word sys32_sendto, sys32_shutdown, sys32_socketpair
        .word sys_mkdir, sys_rmdir, sys32_utimes
-       .word sys32_sigreturn, sunos_nosys, sys_getpeername
+       .word sys32_sigreturn, sunos_nosys, sys32_getpeername
        .word sunos_gethostid, sunos_nosys, compat_sys_getrlimit
        .word compat_sys_setrlimit, sunos_killpg, sunos_nosys
        .word sunos_nosys, sunos_nosys
-/*150*/        .word sys_getsockname, sunos_nosys, sunos_nosys
+/*150*/        .word sys32_getsockname, sunos_nosys, sunos_nosys
        .word sys_poll, sunos_nosys, sunos_nosys
        .word sunos_getdirentries, compat_sys_statfs, compat_sys_fstatfs
        .word sys_oldumount, sunos_nosys, sunos_nosys
index 1ea71f4..06fe817 100644 (file)
@@ -41,8 +41,10 @@ CONFIG_BROKEN_ON_SMP=y
 #
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
+CONFIG_AUDIT=y
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
@@ -53,6 +55,7 @@ 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
 
 #
@@ -130,23 +133,21 @@ CONFIG_INET=y
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
 # CONFIG_INET_AH is not set
 # CONFIG_INET_ESP is not set
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_IPV6 is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_NETFILTER is not set
 
 #
 # SCTP Configuration (EXPERIMENTAL)
 #
-CONFIG_IPV6_SCTP__=y
 # CONFIG_IP_SCTP is not set
 # CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
@@ -167,6 +168,12 @@ CONFIG_IPV6_SCTP__=y
 # Network testing
 #
 # CONFIG_NET_PKTGEN is not set
+# 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_TUX is not set
 CONFIG_DUMMY=y
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
@@ -176,6 +183,7 @@ CONFIG_TUN=y
 # Ethernet (10 or 100Mbit)
 #
 # CONFIG_NET_ETHERNET is not set
+# CONFIG_NE2000 is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -184,6 +192,20 @@ CONFIG_TUN=y
 #
 # Ethernet (10000 Mbit)
 #
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
 CONFIG_PPP=y
 # CONFIG_PPP_MULTILINK is not set
 # CONFIG_PPP_FILTER is not set
@@ -196,36 +218,8 @@ CONFIG_SLIP=y
 # CONFIG_SLIP_COMPRESSED is not set
 # CONFIG_SLIP_SMART is not set
 # CONFIG_SLIP_MODE_SLIP6 is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Token Ring devices
-#
 # CONFIG_SHAPER 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_NETCONSOLE is not set
 
 #
 # File systems
@@ -237,7 +231,11 @@ CONFIG_EXT2_FS=y
 CONFIG_REISERFS_FS=y
 # 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 is not set
+CONFIG_FS_POSIX_ACL=y
 # CONFIG_XFS_FS is not set
 CONFIG_MINIX_FS=y
 # CONFIG_ROMFS_FS is not set
@@ -269,6 +267,7 @@ CONFIG_VFAT_FS=y
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
 CONFIG_DEVFS_FS=y
 CONFIG_DEVFS_MOUNT=y
 # CONFIG_DEVFS_DEBUG is not set
@@ -358,6 +357,18 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
 
+#
+# Linux VServer
+#
+CONFIG_VSERVER_LEGACY=y
+CONFIG_PROC_SECURE=y
+# CONFIG_VSERVER_HARDCPU is not set
+# CONFIG_INOXID_NONE is not set
+# CONFIG_INOXID_GID16 is not set
+CONFIG_INOXID_GID24=y
+# CONFIG_INOXID_GID32 is not set
+# CONFIG_INOXID_MAGIC is not set
+
 #
 # Security options
 #
@@ -372,6 +383,7 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # Library routines
 #
 # CONFIG_CRC32 is not set
+# CONFIG_LIBCRC32C is not set
 
 #
 # SCSI support
index f9a2638..c6d0b02 100644 (file)
@@ -72,15 +72,15 @@ static inline unsigned long twd_fxsr_to_i387(struct i387_fxsave_struct *fxsave)
 
 
 static inline int convert_fxsr_from_user(struct i387_fxsave_struct *fxsave,
-                                        struct _fpstate_ia32 __user *buf)
+                                        struct _fpstate_ia32 *buf)
 {
        struct _fpxreg *to;
-       struct _fpreg __user *from;
+       struct _fpreg *from;
        int i;
        u32 v;
        int err = 0;
 
-#define G(num,val) err |= __get_user(val, num + (u32 __user *)buf)
+#define G(num,val) err |= __get_user(val, num + (u32 *)buf)
        G(0, fxsave->cwd);
        G(1, fxsave->swd);
        G(2, fxsave->twd);
@@ -104,12 +104,12 @@ static inline int convert_fxsr_from_user(struct i387_fxsave_struct *fxsave,
 }
 
 
-static inline int convert_fxsr_to_user(struct _fpstate_ia32 __user *buf,
+static inline int convert_fxsr_to_user(struct _fpstate_ia32 *buf,
                                       struct i387_fxsave_struct *fxsave,
                                       struct pt_regs *regs,
                                       struct task_struct *tsk)
 {
-       struct _fpreg __user *to;
+       struct _fpreg *to;
        struct _fpxreg *from;
        int i;
        u16 cs,ds; 
@@ -125,7 +125,7 @@ static inline int convert_fxsr_to_user(struct _fpstate_ia32 __user *buf,
                cs = regs->cs;
        } 
 
-#define P(num,val) err |= __put_user(val, num + (u32 __user *)buf)
+#define P(num,val) err |= __put_user(val, num + (u32 *)buf)
        P(0, (u32)fxsave->cwd | 0xffff0000);
        P(1, (u32)fxsave->swd | 0xffff0000);
        P(2, twd_fxsr_to_i387(fxsave));
@@ -147,7 +147,7 @@ static inline int convert_fxsr_to_user(struct _fpstate_ia32 __user *buf,
        return 0;
 }
 
-int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, int fsave) 
+int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 *buf, int fsave) 
 { 
        clear_fpu(tsk);
        if (!fsave) { 
@@ -162,7 +162,7 @@ int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf,
 }  
 
 int save_i387_ia32(struct task_struct *tsk, 
-                  struct _fpstate_ia32 __user *buf, 
+                  struct _fpstate_ia32 *buf, 
                   struct pt_regs *regs,
                   int fsave)
 {
index 8c69642..d397957 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef TIOCGDEV
 #define TIOCGDEV       _IOR('T',0x32, unsigned int)
 #endif
-static int tiocgdev(unsigned fd, unsigned cmd,  unsigned int __user *ptr) 
+static int tiocgdev(unsigned fd, unsigned cmd,  unsigned int *ptr) 
 { 
 
        struct file *file = fget(fd);
@@ -54,7 +54,7 @@ static int rtc32_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
                ret = sys_ioctl(fd, RTC_IRQP_READ, (unsigned long)&val); 
                set_fs(oldfs); 
                if (!ret)
-                       ret = put_user(val, (unsigned int __user *) arg); 
+                       ret = put_user(val, (unsigned int*) arg); 
                return ret; 
 
        case RTC_IRQP_SET32: 
@@ -66,7 +66,7 @@ static int rtc32_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
                ret = sys_ioctl(fd, RTC_EPOCH_READ, (unsigned long) &val); 
                set_fs(oldfs); 
                if (!ret)
-                       ret = put_user(val, (unsigned int __user *) arg); 
+                       ret = put_user(val, (unsigned int*) arg); 
                return ret; 
 
        case RTC_EPOCH_SET32:
@@ -113,7 +113,7 @@ static int mtrr_ioctl32(unsigned int fd, unsigned int cmd, unsigned long arg)
        struct mtrr_gentry g;
        struct mtrr_sentry s;
        int get = 0, err = 0; 
-       struct mtrr_gentry32 __user *g32 = (struct mtrr_gentry32 __user *)arg; 
+       struct mtrr_gentry32 *g32 = (struct mtrr_gentry32 *)arg; 
        mm_segment_t oldfs = get_fs(); 
 
        switch (cmd) { 
@@ -139,7 +139,7 @@ static int mtrr_ioctl32(unsigned int fd, unsigned int cmd, unsigned long arg)
 
                arg = (unsigned long)&g; 
        } else { 
-               struct mtrr_sentry32 __user *s32 = (struct mtrr_sentry32 __user *)arg;
+               struct mtrr_sentry32 *s32 = (struct mtrr_sentry32 *)arg;
                err = get_user(s.base, &s32->base);
                err |= get_user(s.size, &s32->size);
                err |= get_user(s.type, &s32->type);
index 2fe68d9..7e95c0a 100644 (file)
@@ -42,7 +42,7 @@
 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 
 asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
-void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
+void signal_fault(struct pt_regs *regs, void *frame, char *where);
 
 int ia32_copy_siginfo_to_user(siginfo_t32 __user *to, siginfo_t *from)
 {
@@ -136,9 +136,8 @@ sys32_sigsuspend(int history0, int history1, old_sigset_t mask, struct pt_regs r
 }
 
 asmlinkage long
-sys32_sigaltstack(const stack_ia32_t __user *uss_ptr,
-                 stack_ia32_t __user *uoss_ptr, 
-                 struct pt_regs regs)
+sys32_sigaltstack(const stack_ia32_t *uss_ptr, stack_ia32_t *uoss_ptr, 
+                                 struct pt_regs regs)
 {
        stack_t uss,uoss; 
        int ret;
@@ -194,7 +193,7 @@ struct rt_sigframe
 };
 
 static int
-ia32_restore_sigcontext(struct pt_regs *regs, struct sigcontext_ia32 __user *sc, unsigned int *peax)
+ia32_restore_sigcontext(struct pt_regs *regs, struct sigcontext_ia32 *sc, unsigned int *peax)
 {
        unsigned int err = 0;
        
@@ -253,9 +252,9 @@ ia32_restore_sigcontext(struct pt_regs *regs, struct sigcontext_ia32 __user *sc,
 
        {
                u32 tmp;
-               struct _fpstate_ia32 __user * buf;
+               struct _fpstate_ia32 * buf;
                err |= __get_user(tmp, &sc->fpstate);
-               buf = compat_ptr(tmp);
+               buf = (struct _fpstate_ia32 *) (u64)tmp;
                if (buf) {
                        if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
                                goto badframe;
@@ -276,7 +275,7 @@ badframe:
 
 asmlinkage long sys32_sigreturn(struct pt_regs regs)
 {
-       struct sigframe __user *frame = (struct sigframe __user *)(regs.rsp-8);
+       struct sigframe *frame = (struct sigframe *)(regs.rsp - 8);
        sigset_t set;
        unsigned int eax;
 
@@ -305,8 +304,9 @@ badframe:
 
 asmlinkage long sys32_rt_sigreturn(struct pt_regs regs)
 {
-       struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(regs.rsp - 4);
+       struct rt_sigframe *frame = (struct rt_sigframe *)(regs.rsp - 4);
        sigset_t set;
+       stack_t st;
        unsigned int eax;
 
        if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
@@ -338,20 +338,20 @@ badframe:
  */
 
 static int
-ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc, struct _fpstate_ia32 __user *fpstate,
+ia32_setup_sigcontext(struct sigcontext_ia32 *sc, struct _fpstate_ia32 *fpstate,
                 struct pt_regs *regs, unsigned int mask)
 {
        int tmp, err = 0;
 
        tmp = 0;
        __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int __user *)&sc->gs);
+       err |= __put_user(tmp, (unsigned int *)&sc->gs);
        __asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int __user *)&sc->fs);
+       err |= __put_user(tmp, (unsigned int *)&sc->fs);
        __asm__("movl %%ds,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int __user *)&sc->ds);
+       err |= __put_user(tmp, (unsigned int *)&sc->ds);
        __asm__("movl %%es,%0" : "=r"(tmp): "0"(tmp));
-       err |= __put_user(tmp, (unsigned int __user *)&sc->es);
+       err |= __put_user(tmp, (unsigned int *)&sc->es);
 
        err |= __put_user((u32)regs->rdi, &sc->edi);
        err |= __put_user((u32)regs->rsi, &sc->esi);
@@ -388,7 +388,7 @@ ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc, struct _fpstate_ia32 __
 /*
  * Determine which stack to use..
  */
-static void __user *
+static void *
 get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
 {
        unsigned long rsp;
@@ -409,13 +409,13 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
                rsp = (unsigned long) ka->sa.sa_restorer;
        }
 
-       return (void __user *)((rsp - frame_size) & -8UL);
+       return (void *)((rsp - frame_size) & -8UL);
 }
 
 void ia32_setup_frame(int sig, struct k_sigaction *ka,
                        compat_sigset_t *set, struct pt_regs * regs)
 {
-       struct sigframe __user *frame;
+       struct sigframe *frame;
        int err = 0;
 
        frame = get_sigframe(ka, regs, sizeof(*frame));
@@ -502,7 +502,7 @@ give_sigsegv:
 void ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
                           compat_sigset_t *set, struct pt_regs * regs)
 {
-       struct rt_sigframe __user *frame;
+       struct rt_sigframe *frame;
        int err = 0;
 
        frame = get_sigframe(ka, regs, sizeof(*frame));
index 4215e32..1b98891 100644 (file)
@@ -322,7 +322,7 @@ ia32_sys_call_table:
        .quad sys_mknod
        .quad sys_chmod         /* 15 */
        .quad sys_lchown16
-       .quad quiet_ni_syscall                  /* old break syscall holder */
+       .quad ni_syscall                        /* old break syscall holder */
        .quad sys_stat
        .quad sys32_lseek
        .quad sys_getpid                /* 20 */
@@ -336,11 +336,11 @@ ia32_sys_call_table:
        .quad sys_fstat /* (old)fstat */
        .quad sys_pause
        .quad compat_sys_utime  /* 30 */
-       .quad quiet_ni_syscall  /* old stty syscall holder */
-       .quad quiet_ni_syscall  /* old gtty syscall holder */
+       .quad ni_syscall        /* old stty syscall holder */
+       .quad ni_syscall        /* old gtty syscall holder */
        .quad sys_access
        .quad sys_nice  
-       .quad quiet_ni_syscall  /* 35 */        /* old ftime syscall holder */
+       .quad ni_syscall        /* 35 */        /* old ftime syscall holder */
        .quad sys_sync
        .quad sys32_kill
        .quad sys_rename
@@ -349,7 +349,7 @@ ia32_sys_call_table:
        .quad sys_dup
        .quad sys32_pipe
        .quad compat_sys_times
-       .quad quiet_ni_syscall                  /* old prof syscall holder */
+       .quad ni_syscall                        /* old prof syscall holder */
        .quad sys_brk           /* 45 */
        .quad sys_setgid16
        .quad sys_getgid16
@@ -358,12 +358,12 @@ ia32_sys_call_table:
        .quad sys_getegid16     /* 50 */
        .quad sys_acct
        .quad sys_umount                        /* new_umount */
-       .quad quiet_ni_syscall                  /* old lock syscall holder */
+       .quad ni_syscall                        /* old lock syscall holder */
        .quad compat_sys_ioctl
        .quad compat_sys_fcntl64                /* 55 */
-       .quad quiet_ni_syscall                  /* old mpx syscall holder */
+       .quad ni_syscall                        /* old mpx syscall holder */
        .quad sys_setpgid
-       .quad quiet_ni_syscall                  /* old ulimit syscall holder */
+       .quad ni_syscall                        /* old ulimit syscall holder */
        .quad sys32_olduname
        .quad sys_umask         /* 60 */
        .quad sys_chroot
@@ -403,7 +403,7 @@ ia32_sys_call_table:
        .quad sys_fchown16              /* 95 */
        .quad sys_getpriority
        .quad sys_setpriority
-       .quad quiet_ni_syscall                  /* old profil syscall holder */
+       .quad ni_syscall                        /* old profil syscall holder */
        .quad compat_sys_statfs
        .quad compat_sys_fstatfs                /* 100 */
        .quad sys_ioperm
@@ -417,7 +417,7 @@ ia32_sys_call_table:
        .quad sys32_uname
        .quad stub32_iopl               /* 110 */
        .quad sys_vhangup
-       .quad quiet_ni_syscall  /* old "idle" system call */
+       .quad ni_syscall        /* old "idle" system call */
        .quad sys32_vm86_warning        /* vm86old */ 
        .quad compat_sys_wait4
        .quad sys_swapoff               /* 115 */
@@ -442,7 +442,7 @@ ia32_sys_call_table:
        .quad quiet_ni_syscall  /* bdflush */
        .quad sys_sysfs         /* 135 */
        .quad sys_personality
-       .quad quiet_ni_syscall  /* for afs_syscall */
+       .quad ni_syscall        /* for afs_syscall */
        .quad sys_setfsuid16
        .quad sys_setfsgid16
        .quad sys_llseek                /* 140 */
@@ -493,8 +493,8 @@ ia32_sys_call_table:
        .quad sys_capset
        .quad stub32_sigaltstack
        .quad sys32_sendfile
-       .quad quiet_ni_syscall          /* streams1 */
-       .quad quiet_ni_syscall          /* streams2 */
+       .quad ni_syscall                /* streams1 */
+       .quad ni_syscall                /* streams2 */
        .quad stub32_vfork            /* 190 */
        .quad compat_sys_getrlimit
        .quad sys32_mmap2
@@ -543,52 +543,51 @@ ia32_sys_call_table:
        .quad sys_removexattr   /* 235 */
        .quad sys_lremovexattr
        .quad sys_fremovexattr
-       .quad sys_tkill
+       .quad sys_tkill         /* 238 */ 
        .quad sys_sendfile64 
        .quad compat_sys_futex          /* 240 */
-       .quad compat_sys_sched_setaffinity
-       .quad compat_sys_sched_getaffinity
+        .quad compat_sys_sched_setaffinity
+        .quad compat_sys_sched_getaffinity
        .quad sys32_set_thread_area
        .quad sys32_get_thread_area
-       .quad sys32_io_setup            /* 245 */
+       .quad sys32_io_setup
        .quad sys_io_destroy
        .quad sys32_io_getevents
        .quad sys32_io_submit
        .quad sys_io_cancel
-       .quad sys_fadvise64             /* 250 */
-       .quad quiet_ni_syscall  /* free_huge_pages */
-       .quad sys_exit_group
+       .quad sys_fadvise64
+       .quad quiet_ni_syscall /* free_huge_pages */
+       .quad sys_exit_group /* exit_group */
        .quad sys_lookup_dcookie
        .quad sys_epoll_create
-       .quad sys_epoll_ctl             /* 255 */
+       .quad sys_epoll_ctl
        .quad sys_epoll_wait
        .quad sys_remap_file_pages
        .quad sys_set_tid_address
        .quad sys32_timer_create
-       .quad compat_timer_settime      /* 260 */
+       .quad compat_timer_settime
        .quad compat_timer_gettime
        .quad sys_timer_getoverrun
        .quad sys_timer_delete
        .quad compat_clock_settime
-       .quad compat_clock_gettime      /* 265 */
+       .quad compat_clock_gettime
        .quad compat_clock_getres
        .quad compat_clock_nanosleep
-       .quad compat_statfs64
-       .quad compat_fstatfs64
-       .quad sys_tgkill                /* 270 */
+       .quad compat_statfs64   /* statfs64 */
+       .quad compat_fstatfs64  /* fstatfs64 */
+       .quad sys_tgkill
        .quad compat_sys_utimes
        .quad sys32_fadvise64_64
-       .quad quiet_ni_syscall  /* sys_vserver */
-       .quad sys_mbind
-       .quad quiet_ni_syscall  /* 275 */
-       .quad sys_set_mempolicy
+       .quad sys_ni_syscall    /* sys_vserver */
+       .quad sys_ni_syscall    /* sys_mbind */
+       .quad sys_ni_syscall    /* 275 sys_get_mempolicy */
+       .quad sys_ni_syscall    /* sys_set_mempolicy */
        .quad compat_sys_mq_open
        .quad sys_mq_unlink
        .quad compat_sys_mq_timedsend
        .quad compat_sys_mq_timedreceive        /* 280 */
        .quad compat_sys_mq_notify
        .quad compat_sys_mq_getsetattr
-       .quad quiet_ni_syscall          /* reserved for kexec */
        /* don't forget to change IA32_NR_syscalls */
 ia32_syscall_end:              
        .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
index 01202b7..c2ef942 100644 (file)
@@ -19,7 +19,6 @@
 #include <linux/mm.h>
 #include <linux/ptrace.h>
 #include <asm/ptrace.h>
-#include <asm/compat.h>
 #include <asm/uaccess.h>
 #include <asm/user32.h>
 #include <asm/user.h>
@@ -229,7 +228,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
 {
        struct task_struct *child;
        struct pt_regs *childregs; 
-       void __user *datap = compat_ptr(data);
        int ret;
        __u32 val;
 
@@ -266,7 +264,7 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
                if (access_process_vm(child, addr, &val, sizeof(u32), 0)!=sizeof(u32))
                        ret = -EIO;
                else
-                       ret = put_user(val, (unsigned int __user *)datap); 
+                       ret = put_user(val, (unsigned int *)(u64)data); 
                break; 
 
        case PTRACE_POKEDATA:
@@ -279,7 +277,7 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
        case PTRACE_PEEKUSR:
                ret = getreg32(child, addr, &val);
                if (ret == 0)
-                       ret = put_user(val, (__u32 __user *)datap);
+                       ret = put_user(val, (__u32 *)(unsigned long) data);
                break;
 
        case PTRACE_POKEUSR:
@@ -288,15 +286,15 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
 
        case PTRACE_GETREGS: { /* Get all gp regs from the child. */
                int i;
-               if (!access_ok(VERIFY_WRITE, datap, 16*4)) {
+               if (!access_ok(VERIFY_WRITE, (unsigned *)(unsigned long)data, 16*4)) {
                        ret = -EIO;
                        break;
                }
                ret = 0;
                for ( i = 0; i <= 16*4 ; i += sizeof(__u32) ) {
                        getreg32(child, i, &val);
-                       ret |= __put_user(val,(u32 __user *)datap);
-                       datap += sizeof(u32);
+                       ret |= __put_user(val,(u32 *) (unsigned long) data);
+                       data += sizeof(u32);
                }
                break;
        }
@@ -304,40 +302,40 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
        case PTRACE_SETREGS: { /* Set all gp regs in the child. */
                unsigned long tmp;
                int i;
-               if (!access_ok(VERIFY_READ, datap, 16*4)) {
+               if (!access_ok(VERIFY_READ, (unsigned *)(unsigned long)data, 16*4)) {
                        ret = -EIO;
                        break;
                }
                ret = 0; 
                for ( i = 0; i <= 16*4; i += sizeof(u32) ) {
-                       ret |= __get_user(tmp, (u32 __user *)datap);
+                       ret |= __get_user(tmp, (u32 *) (unsigned long) data);
                        putreg32(child, i, tmp);
-                       datap += sizeof(u32);
+                       data += sizeof(u32);
                }
                break;
        }
 
        case PTRACE_GETFPREGS:
                ret = -EIO; 
-               if (!access_ok(VERIFY_READ, compat_ptr(data)
+               if (!access_ok(VERIFY_READ, (void *)(u64)data
                               sizeof(struct user_i387_struct)))
                        break;
-               save_i387_ia32(child, datap, childregs, 1);
+               save_i387_ia32(child, (void *)(u64)data, childregs, 1);
                ret = 0; 
                        break;
 
        case PTRACE_SETFPREGS:
                ret = -EIO;
-               if (!access_ok(VERIFY_WRITE, datap
+               if (!access_ok(VERIFY_WRITE, (void *)(u64)data
                               sizeof(struct user_i387_struct)))
                        break;
                ret = 0;
                /* don't check EFAULT to be bug-to-bug compatible to i386 */
-               restore_i387_ia32(child, datap, 1);
+               restore_i387_ia32(child, (void *)(u64)data, 1);
                break;
 
        case PTRACE_GETFPXREGS: { 
-               struct user32_fxsr_struct __user *u = datap;
+               struct user32_fxsr_struct *u = (void *)(u64)data; 
                init_fpu(child); 
                ret = -EIO;
                if (!access_ok(VERIFY_WRITE, u, sizeof(*u)))
@@ -350,7 +348,7 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
                break; 
        } 
        case PTRACE_SETFPXREGS: { 
-               struct user32_fxsr_struct __user *u = datap;
+               struct user32_fxsr_struct *u = (void *)(u64)data; 
                unlazy_fpu(child);
                ret = -EIO;
                if (!access_ok(VERIFY_READ, u, sizeof(*u)))
index 08a60e5..d59981b 100644 (file)
@@ -76,9 +76,9 @@
 #define A(__x)         ((unsigned long)(__x))
 #define AA(__x)                ((unsigned long)(__x))
 #define ROUND_UP(x,a)  ((__typeof__(x))(((unsigned long)(x) + ((a) - 1)) & ~((a) - 1)))
-#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
+#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
 
-int cp_compat_stat(struct kstat *kbuf, struct compat_stat __user *ubuf)
+int cp_compat_stat(struct kstat *kbuf, struct compat_stat *ubuf)
 {
        typeof(ubuf->st_uid) uid = 0;
        typeof(ubuf->st_gid) gid = 0;
@@ -110,7 +110,7 @@ int cp_compat_stat(struct kstat *kbuf, struct compat_stat __user *ubuf)
 }
 
 asmlinkage long
-sys32_truncate64(char __user * filename, unsigned long offset_low, unsigned long offset_high)
+sys32_truncate64(char * filename, unsigned long offset_low, unsigned long offset_high)
 {
        return sys_truncate(filename, ((loff_t) offset_high << 32) | offset_low);
 }
@@ -125,7 +125,7 @@ sys32_ftruncate64(unsigned int fd, unsigned long offset_low, unsigned long offse
    support for 64bit inode numbers. */
 
 static int
-cp_stat64(struct stat64 __user *ubuf, struct kstat *stat)
+cp_stat64(struct stat64 *ubuf, struct kstat *stat)
 {
        typeof(ubuf->st_uid) uid = 0;
        typeof(ubuf->st_gid) gid = 0;
@@ -154,7 +154,7 @@ cp_stat64(struct stat64 __user *ubuf, struct kstat *stat)
 }
 
 asmlinkage long
-sys32_stat64(char __user * filename, struct stat64 __user *statbuf)
+sys32_stat64(char * filename, struct stat64 *statbuf)
 {
        struct kstat stat;
        int ret = vfs_stat(filename, &stat);
@@ -164,7 +164,7 @@ sys32_stat64(char __user * filename, struct stat64 __user *statbuf)
 }
 
 asmlinkage long
-sys32_lstat64(char __user * filename, struct stat64 __user *statbuf)
+sys32_lstat64(char * filename, struct stat64 *statbuf)
 {
        struct kstat stat;
        int ret = vfs_lstat(filename, &stat);
@@ -174,7 +174,7 @@ sys32_lstat64(char __user * filename, struct stat64 __user *statbuf)
 }
 
 asmlinkage long
-sys32_fstat64(unsigned int fd, struct stat64 __user *statbuf)
+sys32_fstat64(unsigned int fd, struct stat64 *statbuf)
 {
        struct kstat stat;
        int ret = vfs_fstat(fd, &stat);
@@ -199,7 +199,7 @@ struct mmap_arg_struct {
 };
 
 asmlinkage long
-sys32_mmap(struct mmap_arg_struct __user *arg)
+sys32_mmap(struct mmap_arg_struct *arg)
 {
        struct mmap_arg_struct a;
        struct file *file = NULL;
@@ -241,7 +241,7 @@ sys32_mprotect(unsigned long start, size_t len, unsigned long prot)
 }
 
 asmlinkage long
-sys32_pipe(int __user *fd)
+sys32_pipe(int *fd)
 {
        int retval;
        int fds[2];
@@ -256,8 +256,8 @@ sys32_pipe(int __user *fd)
 }
 
 asmlinkage long
-sys32_rt_sigaction(int sig, struct sigaction32 __user *act,
-                  struct sigaction32 __user *oact,  unsigned int sigsetsize)
+sys32_rt_sigaction(int sig, struct sigaction32 *act,
+                  struct sigaction32 *oact,  unsigned int sigsetsize)
 {
        struct k_sigaction new_ka, old_ka;
        int ret;
@@ -321,7 +321,7 @@ sys32_rt_sigaction(int sig, struct sigaction32 __user *act,
 }
 
 asmlinkage long
-sys32_sigaction (int sig, struct old_sigaction32 __user *act, struct old_sigaction32 __user *oact)
+sys32_sigaction (int sig, struct old_sigaction32 *act, struct old_sigaction32 *oact)
 {
         struct k_sigaction new_ka, old_ka;
         int ret;
@@ -395,7 +395,7 @@ sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
 }
 
 static inline long
-get_tv32(struct timeval *o, struct compat_timeval __user *i)
+get_tv32(struct timeval *o, struct compat_timeval *i)
 {
        int err = -EFAULT; 
        if (access_ok(VERIFY_READ, i, sizeof(*i))) { 
@@ -406,7 +406,7 @@ get_tv32(struct timeval *o, struct compat_timeval __user *i)
 }
 
 static inline long
-put_tv32(struct compat_timeval __user *o, struct timeval *i)
+put_tv32(struct compat_timeval *o, struct timeval *i)
 {
        int err = -EFAULT;
        if (access_ok(VERIFY_WRITE, o, sizeof(*o))) { 
@@ -442,7 +442,7 @@ sys32_alarm(unsigned int seconds)
 extern struct timezone sys_tz;
 
 asmlinkage long
-sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
+sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz)
 {
        if (tv) {
                struct timeval ktv;
@@ -458,7 +458,7 @@ sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
 }
 
 asmlinkage long
-sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
+sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz)
 {
        struct timeval ktv;
        struct timespec kts;
@@ -493,14 +493,14 @@ struct old_linux32_dirent {
 };
 
 struct getdents32_callback {
-       struct linux32_dirent __user * current_dir;
-       struct linux32_dirent __user * previous;
+       struct linux32_dirent * current_dir;
+       struct linux32_dirent * previous;
        int count;
        int error;
 };
 
 struct readdir32_callback {
-       struct old_linux32_dirent __user * dirent;
+       struct old_linux32_dirent * dirent;
        int count;
 };
 
@@ -508,7 +508,7 @@ static int
 filldir32 (void *__buf, const char *name, int namlen, loff_t offset, ino_t ino,
           unsigned int d_type)
 {
-       struct linux32_dirent __user * dirent;
+       struct linux32_dirent * dirent;
        struct getdents32_callback * buf = (struct getdents32_callback *) __buf;
        int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 2, 4);
 
@@ -524,18 +524,18 @@ filldir32 (void *__buf, const char *name, int namlen, loff_t offset, ino_t ino,
        put_user(reclen, &dirent->d_reclen);
        copy_to_user(dirent->d_name, name, namlen);
        put_user(0, dirent->d_name + namlen);
-       put_user(d_type, (char __user *)dirent + reclen - 1); 
-       dirent = ((void __user *)dirent) + reclen;
+       put_user(d_type, (char *)dirent + reclen - 1); 
+       dirent = ((void *)dirent) + reclen;
        buf->current_dir = dirent;
        buf->count -= reclen;
        return 0;
 }
 
 asmlinkage long
-sys32_getdents (unsigned int fd, void __user * dirent, unsigned int count)
+sys32_getdents (unsigned int fd, void * dirent, unsigned int count)
 {
        struct file * file;
-       struct linux32_dirent __user * lastdirent;
+       struct linux32_dirent * lastdirent;
        struct getdents32_callback buf;
        int error;
 
@@ -544,7 +544,7 @@ sys32_getdents (unsigned int fd, void __user * dirent, unsigned int count)
        if (!file)
                goto out;
 
-       buf.current_dir = (struct linux32_dirent __user *) dirent;
+       buf.current_dir = (struct linux32_dirent *) dirent;
        buf.previous = NULL;
        buf.count = count;
        buf.error = 0;
@@ -569,7 +569,7 @@ static int
 fillonedir32 (void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned d_type)
 {
        struct readdir32_callback * buf = (struct readdir32_callback *) __buf;
-       struct old_linux32_dirent __user * dirent;
+       struct old_linux32_dirent * dirent;
 
        if (buf->count)
                return -EINVAL;
@@ -584,7 +584,7 @@ fillonedir32 (void * __buf, const char * name, int namlen, loff_t offset, ino_t
 }
 
 asmlinkage long
-sys32_oldreaddir (unsigned int fd, void __user * dirent, unsigned int count)
+sys32_oldreaddir (unsigned int fd, void * dirent, unsigned int count)
 {
        int error;
        struct file * file;
@@ -615,7 +615,7 @@ struct sel_arg_struct {
 };
 
 asmlinkage long
-sys32_old_select(struct sel_arg_struct __user *arg)
+sys32_old_select(struct sel_arg_struct *arg)
 {
        struct sel_arg_struct a;
 
@@ -630,7 +630,7 @@ sys32_old_select(struct sel_arg_struct __user *arg)
  * sys_gettimeofday().  x86-64 did this but i386 Linux did not
  * so we have to implement this system call here.
  */
-asmlinkage long sys32_time(int __user * tloc)
+asmlinkage long sys32_time(int * tloc)
 {
        int i;
        struct timeval tv;
@@ -693,7 +693,7 @@ struct sysinfo32 {
 };
 
 asmlinkage long
-sys32_sysinfo(struct sysinfo32 __user *info)
+sys32_sysinfo(struct sysinfo32 *info)
 {
        struct sysinfo s;
        int ret;
@@ -742,7 +742,7 @@ sys32_sysinfo(struct sysinfo32 __user *info)
 }
                 
 asmlinkage long
-sys32_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec __user *interval)
+sys32_sched_rr_get_interval(compat_pid_t pid, struct compat_timespec *interval)
 {
        struct timespec t;
        int ret;
@@ -782,8 +782,8 @@ sys32_rt_sigpending(compat_sigset_t __user *set, compat_size_t sigsetsize)
 
 
 asmlinkage long
-sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, siginfo_t32 __user *uinfo,
-                     struct compat_timespec __user *uts, compat_size_t sigsetsize)
+sys32_rt_sigtimedwait(compat_sigset_t *uthese, siginfo_t32 *uinfo,
+                     struct compat_timespec *uts, compat_size_t sigsetsize)
 {
        sigset_t s;
        compat_sigset_t s32;
@@ -820,7 +820,7 @@ sys32_rt_sigtimedwait(compat_sigset_t __user *uthese, siginfo_t32 __user *uinfo,
 }
 
 asmlinkage long
-sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 __user *uinfo)
+sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 *uinfo)
 {
        siginfo_t info;
        int ret;
@@ -856,7 +856,7 @@ struct sysctl_ia32 {
 
 
 asmlinkage long
-sys32_sysctl(struct sysctl_ia32 __user *args32)
+sys32_sysctl(struct sysctl_ia32 *args32)
 {
 #ifndef CONFIG_SYSCTL
        return -ENOSYS; 
@@ -906,14 +906,14 @@ sys32_sysctl(struct sysctl_ia32 __user *args32)
 
 /* warning: next two assume little endian */ 
 asmlinkage long
-sys32_pread(unsigned int fd, char __user *ubuf, u32 count, u32 poslo, u32 poshi)
+sys32_pread(unsigned int fd, char *ubuf, u32 count, u32 poslo, u32 poshi)
 {
        return sys_pread64(fd, ubuf, count,
                         ((loff_t)AA(poshi) << 32) | AA(poslo));
 }
 
 asmlinkage long
-sys32_pwrite(unsigned int fd, char __user *ubuf, u32 count, u32 poslo, u32 poshi)
+sys32_pwrite(unsigned int fd, char *ubuf, u32 count, u32 poslo, u32 poshi)
 {
        return sys_pwrite64(fd, ubuf, count,
                          ((loff_t)AA(poshi) << 32) | AA(poslo));
@@ -934,7 +934,7 @@ sys32_personality(unsigned long personality)
 }
 
 asmlinkage long
-sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, s32 count)
+sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, s32 count)
 {
        mm_segment_t old_fs = get_fs();
        int ret;
@@ -971,7 +971,7 @@ struct timex32 {
 extern int do_adjtimex(struct timex *);
 
 asmlinkage long
-sys32_adjtimex(struct timex32 __user *utp)
+sys32_adjtimex(struct timex32 *utp)
 {
        struct timex txc;
        int ret;
@@ -1056,7 +1056,7 @@ asmlinkage long sys32_mmap2(unsigned long addr, unsigned long len,
        return error;
 }
 
-asmlinkage long sys32_olduname(struct oldold_utsname __user * name)
+asmlinkage long sys32_olduname(struct oldold_utsname * name)
 {
        int error;
        struct new_utsname *ptr;
@@ -1092,7 +1092,7 @@ asmlinkage long sys32_olduname(struct oldold_utsname __user * name)
         return error;
 }
 
-long sys32_uname(struct old_utsname __user * name)
+long sys32_uname(struct old_utsname * name)
 {
        int err;
        if (!name)
@@ -1126,7 +1126,7 @@ long sys32_ustat(unsigned dev, struct ustat32 __user *u32p)
        return ret;
 } 
 
-asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv,
+asmlinkage long sys32_execve(char *name, compat_uptr_t __user *argv,
                             compat_uptr_t __user *envp, struct pt_regs regs)
 {
        long error;
@@ -1145,8 +1145,8 @@ asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv,
 
 asmlinkage long sys32_clone(unsigned int clone_flags, unsigned int newsp, struct pt_regs regs)
 {
-       void __user *parent_tid = (void __user *)regs.rdx;
-       void __user *child_tid = (void __user *)regs.rdi; 
+       void *parent_tid = (void *)regs.rdx;
+       void *child_tid = (void *)regs.rdi; 
        if (!newsp)
                newsp = regs.rsp;
         return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, &regs, 0, 
@@ -1168,7 +1168,7 @@ long sys32_kill(int pid, int sig)
 }
  
 
-long sys32_io_setup(unsigned nr_reqs, u32 __user *ctx32p)
+long sys32_io_setup(unsigned nr_reqs, u32 *ctx32p)
 { 
        long ret; 
        aio_context_t ctx64;
@@ -1183,7 +1183,7 @@ long sys32_io_setup(unsigned nr_reqs, u32 __user *ctx32p)
 } 
 
 asmlinkage long sys32_io_submit(aio_context_t ctx_id, int nr,
-                  compat_uptr_t __user *iocbpp)
+                  compat_uptr_t *iocbpp)
 {
        struct kioctx *ctx;
        long ret = 0;
@@ -1203,8 +1203,7 @@ asmlinkage long sys32_io_submit(aio_context_t ctx_id, int nr,
 
        for (i=0; i<nr; i++) {
                compat_uptr_t p32;
-               struct iocb __user *user_iocb;
-               struct iocb tmp;
+               struct iocb *user_iocb, tmp;
 
                if (unlikely(__get_user(p32, iocbpp + i))) {
                        ret = -EFAULT;
@@ -1230,8 +1229,8 @@ asmlinkage long sys32_io_submit(aio_context_t ctx_id, int nr,
 asmlinkage long sys32_io_getevents(aio_context_t ctx_id,
                                 unsigned long min_nr,
                                 unsigned long nr,
-                                struct io_event __user *events,
-                                struct compat_timespec __user *timeout)
+                                struct io_event *events,
+                                struct compat_timespec *timeout)
 {      
        long ret;
        mm_segment_t oldfs; 
@@ -1251,7 +1250,7 @@ asmlinkage long sys32_io_getevents(aio_context_t ctx_id,
        return ret;
 } 
 
-asmlinkage long sys32_open(const char __user * filename, int flags, int mode)
+asmlinkage long sys32_open(const char * filename, int flags, int mode)
 {
        char * tmp;
        int fd, error;
@@ -1288,11 +1287,11 @@ sys_timer_create(clockid_t which_clock,
                 timer_t __user * created_timer_id);
 
 long
-sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *timer_id)
+sys32_timer_create(u32 clock, struct sigevent32 *se32, timer_t *timer_id)
 {
        struct sigevent se;
-       mm_segment_t oldfs;
-       long err;
+       mm_segment_t oldfs;
+       long err;
 
        if (se32) { 
                memset(&se, 0, sizeof(struct sigevent)); 
@@ -1306,9 +1305,9 @@ sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *ti
        if (!access_ok(VERIFY_WRITE,timer_id,sizeof(timer_t)))
                return -EFAULT;
 
-       oldfs = get_fs();
+       oldfs = get_fs();
        set_fs(KERNEL_DS);
-       err = sys_timer_create(clock, se32 ? &se : NULL, timer_id);
+       err = sys_timer_create(clock, se32 ? &se : NULL, timer_id);
        set_fs(oldfs); 
        
        return err; 
index 1806bff..64b7a59 100644 (file)
@@ -83,9 +83,9 @@ void __init syscall32_cpu_init(void)
 
        /* Load these always in case some future AMD CPU supports
           SYSENTER from compat mode too. */
-       checking_wrmsrl(MSR_IA32_SYSENTER_CS, (u64)__KERNEL_CS);
-       checking_wrmsrl(MSR_IA32_SYSENTER_ESP, 0ULL);
-       checking_wrmsrl(MSR_IA32_SYSENTER_EIP, (u64)ia32_sysenter_target);
+       wrmsr(MSR_IA32_SYSENTER_CS, __KERNEL_CS, 0);
+       wrmsr(MSR_IA32_SYSENTER_ESP, 0, 0);
+       wrmsrl(MSR_IA32_SYSENTER_EIP, ia32_sysenter_target);
 
        wrmsrl(MSR_CSTAR, ia32_cstar_target);
 }
index 1cc4340..b938935 100644 (file)
@@ -28,7 +28,7 @@ static int get_free_idx(void)
  * Set a given TLS descriptor:
  * When you want addresses > 32bit use arch_prctl() 
  */
-int do_set_thread_area(struct thread_struct *t, struct user_desc __user *u_info)
+int do_set_thread_area(struct thread_struct *t, struct user_desc *u_info)
 {
        struct user_desc info;
        struct n_desc_struct *desc;
@@ -75,7 +75,7 @@ int do_set_thread_area(struct thread_struct *t, struct user_desc __user *u_info)
        return 0;
 }
 
-asmlinkage long sys32_set_thread_area(struct user_desc __user *u_info)
+asmlinkage long sys32_set_thread_area(struct user_desc *u_info)
 { 
        return do_set_thread_area(&current->thread, u_info); 
 } 
@@ -102,7 +102,7 @@ asmlinkage long sys32_set_thread_area(struct user_desc __user *u_info)
 #define GET_USEABLE(desc)      (((desc)->b >> 20) & 1)
 #define GET_LONGMODE(desc)     (((desc)->b >> 21) & 1)
 
-int do_get_thread_area(struct thread_struct *t, struct user_desc __user *u_info)
+int do_get_thread_area(struct thread_struct *t, struct user_desc *u_info)
 {
        struct user_desc info;
        struct n_desc_struct *desc;
@@ -132,7 +132,7 @@ int do_get_thread_area(struct thread_struct *t, struct user_desc __user *u_info)
        return 0;
 }
 
-asmlinkage long sys32_get_thread_area(struct user_desc __user *u_info)
+asmlinkage long sys32_get_thread_area(struct user_desc *u_info)
 {
        return do_get_thread_area(&current->thread, u_info);
 } 
@@ -141,11 +141,10 @@ asmlinkage long sys32_get_thread_area(struct user_desc __user *u_info)
 int ia32_child_tls(struct task_struct *p, struct pt_regs *childregs)
 {
        struct n_desc_struct *desc;
-       struct user_desc info;
-       struct user_desc __user *cp;
+       struct user_desc info, *cp;
        int idx;
        
-       cp = (void __user *)childregs->rsi;
+       cp = (void *)childregs->rsi;
        if (copy_from_user(&info, cp, sizeof(info)))
                return -EFAULT;
        if (LDT_empty(&info))
diff --git a/arch/x86_64/kernel/Makefile-HEAD b/arch/x86_64/kernel/Makefile-HEAD
deleted file mode 100644 (file)
index dc6f269..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Makefile for the linux kernel.
-#
-
-extra-y        := head.o head64.o init_task.o vmlinux.lds.s
-EXTRA_AFLAGS   := -traditional
-obj-y  := process.o semaphore.o signal.o entry.o traps.o irq.o \
-               ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_x86_64.o \
-               x8664_ksyms.o i387.o syscall.o vsyscall.o \
-               setup64.o bootflag.o e820.o reboot.o warmreboot.o
-obj-y += mce.o
-
-obj-$(CONFIG_MTRR)             += ../../i386/kernel/cpu/mtrr/
-obj-$(CONFIG_ACPI_BOOT)                += acpi/
-obj-$(CONFIG_X86_MSR)          += msr.o
-obj-$(CONFIG_MICROCODE)                += microcode.o
-obj-$(CONFIG_X86_CPUID)                += cpuid.o
-obj-$(CONFIG_SMP)              += smp.o smpboot.o trampoline.o
-obj-$(CONFIG_X86_LOCAL_APIC)   += apic.o  nmi.o
-obj-$(CONFIG_X86_IO_APIC)      += io_apic.o mpparse.o
-obj-$(CONFIG_PM)               += suspend.o
-obj-$(CONFIG_SOFTWARE_SUSPEND) += suspend_asm.o
-obj-$(CONFIG_CPU_FREQ)         += cpufreq/
-obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o
-obj-$(CONFIG_GART_IOMMU)       += pci-gart.o aperture.o
-obj-$(CONFIG_DUMMY_IOMMU)      += pci-nommu.o pci-dma.o
-obj-$(CONFIG_SWIOTLB)          += swiotlb.o
-obj-$(CONFIG_SCHED_SMT)                += domain.o
-
-obj-$(CONFIG_MODULES)          += module.o
-
-obj-y                          += topology.o
-
-bootflag-y                     += ../../i386/kernel/bootflag.o
-cpuid-$(subst m,y,$(CONFIG_X86_CPUID))  += ../../i386/kernel/cpuid.o
-topology-y                     += ../../i386/mach-default/topology.o
-swiotlb-$(CONFIG_SWIOTLB)      += ../../ia64/lib/swiotlb.o
-microcode-$(subst m,y,$(CONFIG_MICROCODE))  += ../../i386/kernel/microcode.o
index 73ddfc1..20e9266 100644 (file)
@@ -114,7 +114,7 @@ void __init acpi_reserve_bootmem(void)
        acpi_wakeup_address = (unsigned long)alloc_bootmem_low(PAGE_SIZE);
        if ((&wakeup_end - &wakeup_start) > PAGE_SIZE)
                printk(KERN_CRIT "ACPI: Wakeup code way too big, will crash on attempt to suspend\n");
-       Dprintk(KERN_DEBUG "ACPI: have wakeup address 0x%8.8lx\n", acpi_wakeup_address);
+       printk(KERN_DEBUG "ACPI: have wakeup address 0x%8.8lx\n", acpi_wakeup_address);
 }
 
 static int __init acpi_sleep_setup(char *str)
index 23acf2f..23a2b5e 100644 (file)
@@ -255,7 +255,7 @@ temp_boot_pmds:
        
 .org 0x5000
 ENTRY(level2_kernel_pgt)
-       /* 10MB kernel mapping. The kernel code cannot be bigger than that.
+       /* 40MB kernel mapping. The kernel code cannot be bigger than that.
           When you change this change KERNEL_TEXT_SIZE in page.h too. */
        /* (2^48-(2*1024*1024*1024)-((2^39)*511)-((2^30)*510)) = 0 */
        .quad   0x0000000000000183
@@ -263,8 +263,21 @@ ENTRY(level2_kernel_pgt)
        .quad   0x0000000000400183
        .quad   0x0000000000600183
        .quad   0x0000000000800183
-       /* 10MB mapping for now to decrease the aliasing window */
-       .fill   15,8,0
+       .quad   0x0000000000A00183
+       .quad   0x0000000000C00183
+       .quad   0x0000000000E00183
+       .quad   0x0000000001000183
+       .quad   0x0000000001200183
+       .quad   0x0000000001400183
+       .quad   0x0000000001600183
+       .quad   0x0000000001800183
+       .quad   0x0000000001A00183
+       .quad   0x0000000001C00183
+       .quad   0x0000000001E00183
+       .quad   0x0000000002000183
+       .quad   0x0000000002200183
+       .quad   0x0000000002400183
+       .quad   0x0000000002600183
        /* Module mapping starts here */
        .fill   492,8,0
 
index 4055c78..b04a1ad 100644 (file)
@@ -73,8 +73,6 @@ static void __init setup_boot_cpu_data(void)
        boot_cpu_data.x86_mask = eax & 0xf;
 }
 
-extern char _end[];
-
 void __init x86_64_start_kernel(char * real_mode_data)
 {
        char *s;
@@ -82,9 +80,6 @@ void __init x86_64_start_kernel(char * real_mode_data)
        clear_bss();
        pda_init(0);
        copy_bootdata(real_mode_data);
-#ifdef CONFIG_SMP
-       cpu_set(0, cpu_online_map);
-#endif
        /* default console: */
        if (!strstr(saved_command_line, "console="))
                strcat(saved_command_line, " console=tty0"); 
@@ -100,10 +95,6 @@ void __init x86_64_start_kernel(char * real_mode_data)
        if (strstr(saved_command_line, "disableapic"))
                disable_apic = 1;
 #endif
-       /* You need early console to see that */
-       if (__pa_symbol(&_end) >= KERNEL_TEXT_SIZE)
-               panic("Kernel too big for kernel mapping\n");
-
        setup_boot_cpu_data();
        start_kernel();
 }
index 6bc3d64..1aa4deb 100644 (file)
@@ -77,7 +77,7 @@ void init_fpu(struct task_struct *child)
  * Signal frame handlers.
  */
 
-int save_i387(struct _fpstate __user *buf)
+int save_i387(struct _fpstate *buf)
 {
        struct task_struct *tsk = current;
        int err = 0;
@@ -95,7 +95,7 @@ int save_i387(struct _fpstate __user *buf)
                return 0;
        tsk->used_math = 0; /* trigger finit */ 
        if (tsk->thread_info->status & TS_USEDFPU) {
-               err = save_i387_checking((struct i387_fxsave_struct __user *)buf);
+               err = save_i387_checking((struct i387_fxsave_struct *)buf);
                if (err) return err;
                stts();
                } else {
@@ -110,14 +110,14 @@ int save_i387(struct _fpstate __user *buf)
  * ptrace request handlers.
  */
 
-int get_fpregs(struct user_i387_struct __user *buf, struct task_struct *tsk)
+int get_fpregs(struct user_i387_struct *buf, struct task_struct *tsk)
 {
        init_fpu(tsk);
-       return __copy_to_user(buf, &tsk->thread.i387.fxsave,
+       return __copy_to_user((void *)buf, &tsk->thread.i387.fxsave,
                               sizeof(struct user_i387_struct)) ? -EFAULT : 0;
 }
 
-int set_fpregs(struct task_struct *tsk, struct user_i387_struct __user *buf)
+int set_fpregs(struct task_struct *tsk, struct user_i387_struct *buf)
 {
        if (__copy_from_user(&tsk->thread.i387.fxsave, buf, 
                             sizeof(struct user_i387_struct)))
index bfdb95e..732a6f4 100644 (file)
@@ -833,8 +833,7 @@ static int irq_affinity_read_proc (char *page, char **start, off_t off,
        return len;
 }
 
-static int irq_affinity_write_proc (struct file *file,
-                                       const char __user *buffer,
+static int irq_affinity_write_proc (struct file *file, const char *buffer,
                                        unsigned long count, void *data)
 {
        int irq = (long) data, full_count = count, err;
@@ -872,8 +871,7 @@ static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
        return len;
 }
 
-static int prof_cpu_mask_write_proc (struct file *file,
-                                       const char __user *buffer,
+static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
                                        unsigned long count, void *data)
 {
        unsigned long full_count = count, err;
index 4e43e53..1b6252c 100644 (file)
@@ -125,7 +125,7 @@ void destroy_context(struct mm_struct *mm)
        }
 }
 
-static int read_ldt(void __user * ptr, unsigned long bytecount)
+static int read_ldt(void * ptr, unsigned long bytecount)
 {
        int err;
        unsigned long size;
@@ -153,7 +153,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount)
        return bytecount;
 }
 
-static int read_default_ldt(void __user * ptr, unsigned long bytecount)
+static int read_default_ldt(void * ptr, unsigned long bytecount)
 {
        /* Arbitrary number */ 
        /* x86-64 default LDT is all zeros */
@@ -164,7 +164,7 @@ static int read_default_ldt(void __user * ptr, unsigned long bytecount)
        return bytecount; 
 }
 
-static int write_ldt(void __user * ptr, unsigned long bytecount, int oldmode)
+static int write_ldt(void * ptr, unsigned long bytecount, int oldmode)
 {
        struct task_struct *me = current;
        struct mm_struct * mm = me->mm;
@@ -225,7 +225,7 @@ out:
        return error;
 }
 
-asmlinkage int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount)
+asmlinkage int sys_modify_ldt(int func, void *ptr, unsigned long bytecount)
 {
        int ret = -ENOSYS;
 
index a34ef6c..922d62f 100644 (file)
@@ -26,7 +26,7 @@
 
 static int mce_disabled __initdata;
 /* 0: always panic, 1: panic if deadlock possible, 2: try to avoid panic */ 
-static int tolerant = 1;
+static int tolerant = 2;
 static int banks;
 static unsigned long bank[NR_BANKS] = { [0 ... NR_BANKS-1] = ~0UL };
 
@@ -96,8 +96,7 @@ static void mce_panic(char *msg, struct mce *backup, unsigned long start)
        int i;
        oops_begin();
        for (i = 0; i < MCE_LOG_LEN; i++) {
-               unsigned long tsc = mcelog.entry[i].tsc;
-               if (time_before(tsc, start))
+               if (mcelog.entry[i].tsc < start)
                        continue;
                print_mce(&mcelog.entry[i]); 
                if (mcelog.entry[i].tsc == backup->tsc)
@@ -121,8 +120,8 @@ static int mce_available(struct cpuinfo_x86 *c)
 
 void do_machine_check(struct pt_regs * regs, long error_code)
 {
-       struct mce m, panicm;
-       int nowayout = (tolerant < 1); 
+       struct mce m;
+       int nowayout = 0;
        int kill_it = 0;
        u64 mcestart;
        int i;
@@ -150,23 +149,12 @@ void do_machine_check(struct pt_regs * regs, long error_code)
        for (i = 0; i < banks; i++) {
                if (!bank[i])
                        continue;
-               
-               /* Did this bank cause the exception? */ 
-               /* XXX: check more flags  */
-               if ((m.status & MCI_STATUS_PCC)) { 
-                       panicm = m; 
-               } else {
-                       m.rip = 0;
-                       m.cs = 0;
-               }
-
-               m.misc = 0; 
-               m.addr = 0;
 
                rdmsrl(MSR_IA32_MC0_STATUS + i*4, m.status);
                if ((m.status & MCI_STATUS_VAL) == 0)
                        continue;
 
+               nowayout |= (tolerant < 1); 
                nowayout |= !!(m.status & (MCI_STATUS_OVER|MCI_STATUS_PCC));
                kill_it |= !!(m.status & MCI_STATUS_UC);
                m.bank = i;
@@ -188,10 +176,7 @@ void do_machine_check(struct pt_regs * regs, long error_code)
        if (nowayout)
                mce_panic("Machine check", &m, mcestart);
        if (kill_it) {
-               int user_space = 0;
-
-               if (m.mcgstatus & MCG_STATUS_RIPV)
-                       user_space = m.rip && (m.cs & 3);
+               int user_space = (m.rip && (m.cs & 3));
                
                /* When the machine was in user space and the CPU didn't get
                   confused it's normally not necessary to panic, unless you 
@@ -202,7 +187,7 @@ void do_machine_check(struct pt_regs * regs, long error_code)
                   it is best to just halt the machine. */
                if ((!user_space && (panic_on_oops || tolerant < 2)) ||
                    (unsigned)current->pid <= 1)
-                       mce_panic("Uncorrected machine check", &panicm, mcestart);
+                       mce_panic("Uncorrected machine check", &m, mcestart);
 
                /* do_exit takes an awful lot of locks and has as slight risk 
                   of deadlocking. If you don't want that don't set tolerant >= 2 */
@@ -222,7 +207,7 @@ static void mce_clear_all(void)
  * Periodic polling timer for "silent" machine check errors.
  */
 
-static int check_interval = 5 * 60; /* 5 minutes */
+static int check_interval = 3600; /* one hour */
 static void mcheck_timer(void *data);
 static DECLARE_WORK(mcheck_work, mcheck_timer, NULL);
 
@@ -312,12 +297,12 @@ static void collect_tscs(void *data)
        rdtscll(cpu_tsc[smp_processor_id()]);
 } 
 
-static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, loff_t *off)
+static ssize_t mce_read(struct file *filp, char *ubuf, size_t usize, loff_t *off)
 {
        unsigned long cpu_tsc[NR_CPUS];
        static DECLARE_MUTEX(mce_read_sem);
        unsigned next;
-       char __user *buf = ubuf;
+       char *buf = ubuf;
        int i, err;
 
        down(&mce_read_sem); 
@@ -363,20 +348,19 @@ static ssize_t mce_read(struct file *filp, char __user *ubuf, size_t usize, loff
 
 static int mce_ioctl(struct inode *i, struct file *f,unsigned int cmd, unsigned long arg)
 {
-       int __user *p = (int __user *)arg;
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM; 
        switch (cmd) {
        case MCE_GET_RECORD_LEN: 
-               return put_user(sizeof(struct mce), p);
+               return put_user(sizeof(struct mce), (int *)arg);
        case MCE_GET_LOG_LEN:
-               return put_user(MCE_LOG_LEN, p);                
+               return put_user(MCE_LOG_LEN, (int *)arg);               
        case MCE_GETCLEAR_FLAGS: {
                unsigned flags;
                do { 
                        flags = mcelog.flags;
                } while (cmpxchg(&mcelog.flags, flags, 0) != flags); 
-               return put_user(flags, p); 
+               return put_user(flags, (int *)arg); 
        }
        default:
                return -ENOTTY; 
index c2256e5..78ce354 100644 (file)
@@ -121,7 +121,7 @@ void *module_alloc(unsigned long size)
                        goto fail;
        }
        
-       if (map_vm_area(area, PAGE_KERNEL_EXECUTABLE, &pages))
+       if (map_vm_area(area, PAGE_KERNEL_EXEC, &pages))
                goto fail;
        
        memset(addr, 0, size);
index 7dcc1b5..27122be 100644 (file)
@@ -575,7 +575,6 @@ static int __init smp_scan_config (unsigned long base, unsigned long length)
        extern void __bad_mpf_size(void); 
        unsigned int *bp = phys_to_virt(base);
        struct intel_mp_floating *mpf;
-       static int printed __initdata; 
 
        Dprintk("Scan SMP from %p for %ld bytes.\n", bp,length);
        if (sizeof(*mpf) != 16)
@@ -599,10 +598,7 @@ static int __init smp_scan_config (unsigned long base, unsigned long length)
                bp += 4;
                length -= 16;
        }
-       if (!printed) {         
-               printk(KERN_INFO "No mptable found.\n");
-               printed = 1;
-       }
+       printk(KERN_INFO "No mptable found.\n");
        return 0;
 }
 
index 654e457..d2e6fff 100644 (file)
@@ -186,10 +186,10 @@ static loff_t msr_seek(struct file *file, loff_t offset, int orig)
   return ret;
 }
 
-static ssize_t msr_read(struct file * file, char __user * buf,
+static ssize_t msr_read(struct file * file, char * buf,
                        size_t count, loff_t *ppos)
 {
-  char __user *tmp = buf;
+  u32 *tmp = (u32 *)buf;
   u32 data[2];
   size_t rv;
   u32 reg = *ppos;
@@ -205,16 +205,16 @@ static ssize_t msr_read(struct file * file, char __user * buf,
       return err;
     if ( copy_to_user(tmp,&data,8) )
       return -EFAULT;
-    tmp += 8;
+    tmp += 2;
   }
 
-  return tmp - buf;
+  return ((char *)tmp) - buf;
 }
 
-static ssize_t msr_write(struct file * file, const char __user * buf,
+static ssize_t msr_write(struct file * file, const char * buf,
                         size_t count, loff_t *ppos)
 {
-  const char __user *tmp = buf;
+  const u32 *tmp = (const u32 *)buf;
   u32 data[2];
   size_t rv;
   u32 reg = *ppos;
@@ -230,10 +230,10 @@ static ssize_t msr_write(struct file * file, const char __user * buf,
     err = do_wrmsr(cpu, reg, data[0], data[1]);
     if ( err )
       return err;
-    tmp += 8;
+    tmp += 2;
   }
 
-  return tmp - buf;
+  return ((char *)tmp) - buf;
 }
 
 static int msr_open(struct inode *inode, struct file *file)
@@ -241,7 +241,7 @@ static int msr_open(struct inode *inode, struct file *file)
   int cpu = iminor(file->f_dentry->d_inode);
   struct cpuinfo_x86 *c = &(cpu_data)[cpu];
   
-  if (cpu >= NR_CPUS || !cpu_online(cpu))
+  if (!cpu_online(cpu))
     return -ENXIO;             /* No such CPU */
   if ( !cpu_has(c, X86_FEATURE_MSR) )
     return -EIO;               /* MSR not supported */
index f7d3cf3..6b78619 100644 (file)
@@ -521,8 +521,7 @@ struct task_struct *__switch_to(struct task_struct *prev_p, struct task_struct *
  * sys_execve() executes a new program.
  */
 asmlinkage 
-long sys_execve(char __user *name, char __user * __user *argv,
-               char __user * __user *envp, struct pt_regs regs)
+long sys_execve(char *name, char **argv,char **envp, struct pt_regs regs)
 {
        long error;
        char * filename;
@@ -551,7 +550,7 @@ asmlinkage long sys_fork(struct pt_regs regs)
        return do_fork(SIGCHLD, regs.rsp, &regs, 0, NULL, NULL);
 }
 
-asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, void __user *parent_tid, void __user *child_tid, struct pt_regs regs)
+asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, void *parent_tid, void *child_tid, struct pt_regs regs)
 {
        if (!newsp)
                newsp = regs.rsp;
@@ -665,7 +664,7 @@ long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
                        rdmsrl(MSR_FS_BASE, base);
                } else
                        base = task->thread.fs;
-               ret = put_user(base, (unsigned long __user *)addr); 
+               ret = put_user(base, (unsigned long *)addr); 
                break; 
        }
        case ARCH_GET_GS: { 
@@ -676,7 +675,7 @@ long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
                        rdmsrl(MSR_KERNEL_GS_BASE, base);
                } else
                        base = task->thread.gs;
-               ret = put_user(base, (unsigned long __user *)addr); 
+               ret = put_user(base, (unsigned long *)addr); 
                break;
        }
 
index d07a45b..87ab1e2 100644 (file)
@@ -234,7 +234,7 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
                ret = -EIO;
                if (copied != sizeof(tmp))
                        break;
-               ret = put_user(tmp,(unsigned long __user *) data);
+               ret = put_user(tmp,(unsigned long *) data);
                break;
        }
 
@@ -273,7 +273,7 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
                        tmp = 0;
                        break;
                }
-               ret = put_user(tmp,(unsigned long __user *) data);
+               ret = put_user(tmp,(unsigned long *) data);
                break;
        }
 
@@ -362,20 +362,19 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
                   don't use it against 64bit processes, use
                   PTRACE_ARCH_PRCTL instead. */
        case PTRACE_SET_THREAD_AREA: {
-               struct user_desc __user *p;
                int old; 
-               p = (struct user_desc __user *)data;
-               get_user(old,  &p->entry_number); 
-               put_user(addr, &p->entry_number);
-               ret = do_set_thread_area(&child->thread, p);
-               put_user(old,  &p->entry_number); 
+               get_user(old,  &((struct user_desc *)data)->entry_number); 
+               put_user(addr, &((struct user_desc *)data)->entry_number);
+               ret = do_set_thread_area(&child->thread, 
+                                        (struct user_desc *)data);
+               put_user(old,  &((struct user_desc *)data)->entry_number); 
                break;
        case PTRACE_GET_THREAD_AREA:
-               p = (struct user_desc __user *)data;
-               get_user(old,  &p->entry_number); 
-               put_user(addr, &p->entry_number);
-               ret = do_get_thread_area(&child->thread, p);
-               put_user(old,  &p->entry_number); 
+               get_user(old,  &((struct user_desc *)data)->entry_number); 
+               put_user(addr, &((struct user_desc *)data)->entry_number);
+               ret = do_get_thread_area(&child->thread, 
+                                        (struct user_desc *)data);
+               put_user(old,  &((struct user_desc *)data)->entry_number); 
                break;
        } 
 #endif
@@ -431,12 +430,12 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
                break;
 
        case PTRACE_GETREGS: { /* Get all gp regs from the child. */
-               if (!access_ok(VERIFY_WRITE, (unsigned __user *)data, FRAME_SIZE)) {
+               if (!access_ok(VERIFY_WRITE, (unsigned *)data, FRAME_SIZE)) {
                        ret = -EIO;
                        break;
                }
                for (ui = 0; ui < sizeof(struct user_regs_struct); ui += sizeof(long)) {
-                       __put_user(getreg(child, ui),(unsigned long __user *) data);
+                       __put_user(getreg(child, ui),(unsigned long *) data);
                        data += sizeof(long);
                }
                ret = 0;
@@ -445,12 +444,12 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
 
        case PTRACE_SETREGS: { /* Set all gp regs in the child. */
                unsigned long tmp;
-               if (!access_ok(VERIFY_READ, (unsigned __user *)data, FRAME_SIZE)) {
+               if (!access_ok(VERIFY_READ, (unsigned *)data, FRAME_SIZE)) {
                        ret = -EIO;
                        break;
                }
                for (ui = 0; ui < sizeof(struct user_regs_struct); ui += sizeof(long)) {
-                       __get_user(tmp, (unsigned long __user *) data);
+                       __get_user(tmp, (unsigned long *) data);
                        putreg(child, ui, tmp);
                        data += sizeof(long);
                }
@@ -459,23 +458,23 @@ asmlinkage long sys_ptrace(long request, long pid, unsigned long addr, long data
        }
 
        case PTRACE_GETFPREGS: { /* Get the child extended FPU state. */
-               if (!access_ok(VERIFY_WRITE, (unsigned __user *)data,
+               if (!access_ok(VERIFY_WRITE, (unsigned *)data,
                               sizeof(struct user_i387_struct))) {
                        ret = -EIO;
                        break;
                }
-               ret = get_fpregs((struct user_i387_struct __user *)data, child);
+               ret = get_fpregs((struct user_i387_struct *)data, child);
                break;
        }
 
        case PTRACE_SETFPREGS: { /* Set the child extended FPU state. */
-               if (!access_ok(VERIFY_READ, (unsigned __user *)data,
+               if (!access_ok(VERIFY_READ, (unsigned *)data,
                               sizeof(struct user_i387_struct))) {
                        ret = -EIO;
                        break;
                }
                child->used_math = 1;
-               ret = set_fpregs(child, (struct user_i387_struct __user *)data);
+               ret = set_fpregs(child, (struct user_i387_struct *)data);
                break;
        }
 
index fb3a8ab..09f9c72 100644 (file)
@@ -909,7 +909,7 @@ void __init early_identify_cpu(struct cpuinfo_x86 *c)
                        c->x86_model += ((tfms >> 16) & 0xF) << 4;
                } 
                if (c->x86_capability[0] & (1<<19)) 
-                       c->x86_clflush_size = ((misc >> 8) & 0xff) * 8;
+                       c->x86_clflush_size = ((misc >> 8) & 0xff) * 8;
        } else {
                /* Have CPUID level 0 only - unheard of */
                c->x86 = 4;
@@ -967,7 +967,7 @@ void __init identify_cpu(struct cpuinfo_x86 *c)
                        display_cacheinfo(c);
                        break;
        }
-
+       
        select_idle_routine(c);
        detect_ht(c); 
                
index 9d3137a..dd0d415 100644 (file)
@@ -39,7 +39,7 @@ extern unsigned char __per_cpu_start[], __per_cpu_end[];
 extern struct desc_ptr cpu_gdt_descr[];
 struct desc_ptr idt_descr = { 256 * 16, (unsigned long) idt_table }; 
 
-char boot_cpu_stack[IRQSTACKSIZE] __attribute__((section(".bss.page_aligned")));
+char boot_cpu_stack[IRQSTACKSIZE] __cacheline_aligned;
 
 unsigned long __supported_pte_mask = ~0UL;
 static int do_not_nx __initdata = 0;
@@ -190,8 +190,7 @@ void pda_init(int cpu)
        pda->irqstackptr += IRQSTACKSIZE-64;
 } 
 
-char boot_exception_stacks[N_EXCEPTION_STACKS * EXCEPTION_STKSZ] 
-__attribute__((section(".bss.page_aligned")));
+char boot_exception_stacks[N_EXCEPTION_STACKS * EXCEPTION_STKSZ];
 
 void __init syscall_init(void)
 {
index d814db6..fc81ceb 100644 (file)
@@ -40,7 +40,7 @@ void ia32_setup_frame(int sig, struct k_sigaction *ka,
             sigset_t *set, struct pt_regs * regs); 
 
 asmlinkage long
-sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs regs)
+sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs regs)
 {
        sigset_t saveset, newset;
 
@@ -57,7 +57,7 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs re
        current->blocked = newset;
        recalc_sigpending();
        spin_unlock_irq(&current->sighand->siglock);
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("rt_sigsuspend savset(%lx) newset(%lx) regs(%p) rip(%lx)\n",
                saveset, newset, &regs, regs.rip);
 #endif 
@@ -71,7 +71,7 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs re
 }
 
 asmlinkage long
-sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, struct pt_regs regs)
+sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs regs)
 {
        return do_sigaltstack(uss, uoss, regs.rsp);
 }
@@ -89,7 +89,7 @@ struct rt_sigframe
 };
 
 static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, unsigned long *prax)
+restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, unsigned long *prax)
 {
        unsigned int err = 0;
 
@@ -117,7 +117,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, unsigned
        }
 
        {
-               struct _fpstate __user * buf;
+               struct _fpstate * buf;
                err |= __get_user(buf, &sc->fpstate);
 
                if (buf) {
@@ -136,11 +136,10 @@ badframe:
 
 asmlinkage long sys_rt_sigreturn(struct pt_regs regs)
 {
-       struct rt_sigframe __user *frame;
+       struct rt_sigframe *frame = (struct rt_sigframe *)(regs.rsp - 8);
        sigset_t set;
        long eax;
 
-       frame = (struct rt_sigframe __user *)(regs.rsp - 8);
        if (verify_area(VERIFY_READ, frame, sizeof(*frame))) { 
                goto badframe;
        } 
@@ -158,7 +157,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs regs)
                goto badframe;
        } 
 
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("%d sigreturn rip:%lx rsp:%lx frame:%p rax:%lx\n",current->pid,regs.rip,regs.rsp,frame,eax);
 #endif
 
@@ -177,7 +176,7 @@ badframe:
  */
 
 static inline int
-setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, unsigned long mask, struct task_struct *me)
+setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, unsigned long mask, struct task_struct *me)
 {
        int err = 0;
 
@@ -214,7 +213,7 @@ setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, unsigned lo
  * Determine which stack to use..
  */
 
-static void __user *
+static void *
 get_stack(struct k_sigaction *ka, struct pt_regs *regs, unsigned long size)
 {
        unsigned long rsp;
@@ -229,20 +228,20 @@ get_stack(struct k_sigaction *ka, struct pt_regs *regs, unsigned long size)
                        rsp = current->sas_ss_sp + current->sas_ss_size;
        }
 
-       return (void __user *)round_down(rsp - size, 16); 
+       return (void *)round_down(rsp - size, 16); 
 }
 
 static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
                           sigset_t *set, struct pt_regs * regs)
 {
-       struct rt_sigframe __user *frame;
-       struct _fpstate __user *fp = NULL; 
+       struct rt_sigframe *frame;
+       struct _fpstate *fp = NULL; 
        int err = 0;
        struct task_struct *me = current;
 
        if (me->used_math) {
                fp = get_stack(ka, regs, sizeof(struct _fpstate)); 
-               frame = (void __user *)round_down((u64)fp - sizeof(struct rt_sigframe), 16) - 8;
+               frame = (void *)round_down((u64)fp - sizeof(struct rt_sigframe), 16) - 8;
 
                if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate))) { 
                goto give_sigsegv;
@@ -295,7 +294,7 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
                goto give_sigsegv;
        } 
 
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("%d old rip %lx old rsp %lx old rax %lx\n", current->pid,regs->rip,regs->rsp,regs->rax);
 #endif
 
@@ -320,7 +319,7 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
        set_fs(USER_DS);
        regs->eflags &= ~TF_MASK;
 
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
                current->comm, current->pid, frame, regs->rip, frame->pretcode);
 #endif
@@ -343,7 +342,7 @@ handle_signal(unsigned long sig, siginfo_t *info, sigset_t *oldset,
 {
        struct k_sigaction *ka = &current->sighand->action[sig-1];
 
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("handle_signal pid:%d sig:%lu rip:%lx rsp:%lx regs=%p\n", current->pid, sig, 
                regs->rip, regs->rsp, regs);
 #endif
@@ -455,7 +454,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
 
 void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, __u32 thread_info_flags)
 {
-#ifdef DEBUG_SIG
+#if DEBUG_SIG
        printk("do_notify_resume flags:%x rip:%lx rsp:%lx caller:%lx pending:%lx\n",
               thread_info_flags, regs->rip, regs->rsp, __builtin_return_address(0),signal_pending(current)); 
 #endif
@@ -471,7 +470,7 @@ void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, __u32 thread_info_
                do_signal(regs,oldset);
 }
 
-void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
+void signal_fault(struct pt_regs *regs, void *frame, char *where)
 { 
        struct task_struct *me = current; 
        if (exception_trace)
index ba2cba6..3ea64ef 100644 (file)
@@ -895,17 +895,15 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
                                        cpu_set(i, cpu_sibling_map[cpu]);
                                }
                        }
-               } else { 
+               } else {
                        siblings++;
                        cpu_set(cpu, cpu_sibling_map[cpu]);
                }
 
-               if (siblings != smp_num_siblings) {
-                       printk(KERN_WARNING 
-              "WARNING: %d siblings found for CPU%d, should be %d\n", 
+               if (siblings != smp_num_siblings)
+                       printk(KERN_WARNING
+              "WARNING: %d siblings found for CPU%d, should be %d\n",
                               siblings, cpu, smp_num_siblings);
-                       smp_num_siblings = siblings;
-               }       
        }
 
        Dprintk("Boot done.\n");
index a2c5b03..752d840 100644 (file)
@@ -25,7 +25,7 @@
  * sys_pipe() is the normal C calling standard for creating
  * a pipe. It's not the way Unix traditionally does this, though.
  */
-asmlinkage long sys_pipe(int __user *fildes)
+asmlinkage long sys_pipe(int *fildes)
 {
        int fd[2];
        int error;
@@ -142,7 +142,7 @@ full_search:
        }
 }
 
-asmlinkage long sys_uname(struct new_utsname __user * name)
+asmlinkage long sys_uname(struct new_utsname * name)
 {
        int err;
        down_read(&uts_sem);
@@ -153,13 +153,13 @@ asmlinkage long sys_uname(struct new_utsname __user * name)
        return err ? -EFAULT : 0;
 }
 
-asmlinkage long wrap_sys_shmat(int shmid, char __user *shmaddr, int shmflg)
+asmlinkage long wrap_sys_shmat(int shmid, char *shmaddr, int shmflg)
 {
        unsigned long raddr;
        return do_shmat(shmid,shmaddr,shmflg,&raddr) ?: (long)raddr;
 }
 
-asmlinkage long sys_time64(long __user * tloc)
+asmlinkage long sys_time64(long * tloc)
 {
        struct timeval now; 
        int i; 
index 2138354..c612e4d 100644 (file)
@@ -39,7 +39,6 @@ SECTIONS
 
   __bss_start = .;             /* BSS */
   .bss : {
-       *(.bss.page_aligned)    
        *(.bss)
        }
   __bss_end = .;
@@ -76,8 +75,8 @@ SECTIONS
   . = ALIGN(8192);             /* init_task */
   .data.init_task : { *(.data.init_task) }
 
-  . = ALIGN(4096);
-  .data.page_aligned : { *(.data.page_aligned) }
+  . = ALIGN(4096); 
+  .data.boot_pgt : { *(.data.boot_pgt) }
 
   . = ALIGN(4096);             /* Init code and data */
   __init_begin = .;
index 2b0d639..a1f892b 100644 (file)
@@ -219,3 +219,6 @@ EXPORT_SYMBOL_GPL(flush_tlb_all);
 #endif
 
 EXPORT_SYMBOL(sys_ioctl);
+
+EXPORT_SYMBOL(memcpy_toio);
+EXPORT_SYMBOL(memcpy_fromio);
index 32b2064..f09cbc3 100644 (file)
@@ -4,11 +4,9 @@
 
 CFLAGS_csum-partial.o := -funroll-loops
 
-obj-y := io.o
-
 lib-y := csum-partial.o csum-copy.o csum-wrappers.o delay.o \
        usercopy.o getuser.o putuser.o  \
-       thunk.o clear_page.o copy_page.o bitstr.o
+       thunk.o io.o clear_page.o copy_page.o bitstr.o
 lib-y += memcpy.o memmove.o memset.o copy_user.o
 
 lib-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o
index a8e4c18..b89aca4 100644 (file)
@@ -19,7 +19,7 @@
  * src and dst are best aligned to 64bits. 
  */ 
 unsigned int 
-csum_partial_copy_from_user(const char __user *src, char *dst, 
+csum_partial_copy_from_user(const char *src, char *dst, 
                            int len, unsigned int isum, int *errp)
 { 
        *errp = 0;
@@ -33,7 +33,7 @@ csum_partial_copy_from_user(const char __user *src, char *dst,
                if (unlikely((unsigned long)src & 6)) {                 
                        while (((unsigned long)src & 6) && len >= 2) { 
                                __u16 val16;                    
-                               *errp = __get_user(val16, (__u16 __user *)src); 
+                               *errp = __get_user(val16, (__u16 *)src); 
                                if (*errp)
                                        return isum;
                                *(__u16 *)dst = val16;
@@ -43,7 +43,7 @@ csum_partial_copy_from_user(const char __user *src, char *dst,
                                len -= 2;
                        }
                }
-               isum = csum_partial_copy_generic((void *)src,dst,len,isum,errp,NULL);
+               isum = csum_partial_copy_generic(src,dst,len,isum,errp,NULL);
                if (likely(*errp == 0)) 
                        return isum;
        } 
@@ -66,7 +66,7 @@ EXPORT_SYMBOL(csum_partial_copy_from_user);
  * src and dst are best aligned to 64bits.
  */ 
 unsigned int 
-csum_partial_copy_to_user(const char *src, char __user *dst, 
+csum_partial_copy_to_user(const char *src, char *dst, 
                          int len, unsigned int isum, int *errp)
 { 
        if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) {
@@ -78,7 +78,7 @@ csum_partial_copy_to_user(const char *src, char __user *dst,
                while (((unsigned long)dst & 6) && len >= 2) { 
                        __u16 val16 = *(__u16 *)src;
                        isum = add32_with_carry(isum, val16);
-                       *errp = __put_user(val16, (__u16 __user *)dst);
+                       *errp = __put_user(val16, (__u16 *)dst);
                        if (*errp)
                                return isum;
                        src += 2; 
@@ -88,7 +88,7 @@ csum_partial_copy_to_user(const char *src, char __user *dst,
        }
 
        *errp = 0;
-       return csum_partial_copy_generic(src, (void *)dst,len,isum,NULL,errp); 
+       return csum_partial_copy_generic(src,dst,len,isum,NULL,errp); 
 } 
 
 EXPORT_SYMBOL(csum_partial_copy_to_user);
index 5950b82..ca08e31 100644 (file)
@@ -2,14 +2,12 @@
 #include <asm/io.h>
 #include <linux/module.h>
 
-void *__memcpy_toio(unsigned long dst,const void*src,unsigned len)
+void *memcpy_toio(void *dst,const void*src,unsigned len)
 {
-       return __inline_memcpy((void *) dst,src,len);
+       return __inline_memcpy(dst,src,len);
 }
-EXPORT_SYMBOL(__memcpy_toio);
 
-void *__memcpy_fromio(void *dst,unsigned long src,unsigned len)
+void *memcpy_fromio(void *dst,const void*src,unsigned len)
 {
-       return __inline_memcpy(dst,(const void *) src,len);
+       return __inline_memcpy(dst,src,len);
 }
-EXPORT_SYMBOL(__memcpy_fromio);
index c83825e..4a8603e 100644 (file)
@@ -40,7 +40,7 @@ do {                                                                     \
 } while (0)
 
 long
-__strncpy_from_user(char *dst, const char __user *src, long count)
+__strncpy_from_user(char *dst, const char *src, long count)
 {
        long res;
        __do_strncpy_from_user(dst, src, count, res);
@@ -48,7 +48,7 @@ __strncpy_from_user(char *dst, const char __user *src, long count)
 }
 
 long
-strncpy_from_user(char *dst, const char __user *src, long count)
+strncpy_from_user(char *dst, const char *src, long count)
 {
        long res = -EFAULT;
        if (access_ok(VERIFY_READ, src, 1))
@@ -60,7 +60,7 @@ strncpy_from_user(char *dst, const char __user *src, long count)
  * Zero Userspace
  */
 
-unsigned long __clear_user(void __user *addr, unsigned long size)
+unsigned long __clear_user(void *addr, unsigned long size)
 {
        long __d0;
        /* no memory constraint because it doesn't change any memory gcc knows
@@ -94,7 +94,7 @@ unsigned long __clear_user(void __user *addr, unsigned long size)
 }
 
 
-unsigned long clear_user(void __user *to, unsigned long n)
+unsigned long clear_user(void *to, unsigned long n)
 {
        if (access_ok(VERIFY_WRITE, to, n))
                return __clear_user(to, n);
@@ -107,7 +107,7 @@ unsigned long clear_user(void __user *to, unsigned long n)
  * Return 0 on exception, a value greater than N if too long
  */
 
-long strnlen_user(const char __user *s, long n)
+long strnlen_user(const char *s, long n)
 {
        long res = 0;
        char c;
@@ -127,7 +127,7 @@ long strnlen_user(const char __user *s, long n)
        }
 }
 
-long strlen_user(const char __user *s)
+long strlen_user(const char *s)
 {
        long res = 0;
        char c;
@@ -142,10 +142,10 @@ long strlen_user(const char __user *s)
        }
 }
 
-unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len)
+unsigned long copy_in_user(void *to, const void *from, unsigned len)
 {
        if (access_ok(VERIFY_WRITE, to, len) && access_ok(VERIFY_READ, from, len)) { 
-               return copy_user_generic((void *)to, (void *)from, len);
+               return copy_user_generic(to, from, len);
        } 
        return len;             
 }
index 186242e..8026616 100644 (file)
@@ -512,7 +512,9 @@ void __init reserve_bootmem_generic(unsigned long phys, unsigned len)
        /* Should check here against the e820 map to avoid double free */ 
 #ifdef CONFIG_DISCONTIGMEM
        int nid = phys_to_nid(phys);
-       reserve_bootmem_node(NODE_DATA(nid), phys, len);
+       if (phys < HIGH_MEMORY && nid) 
+               panic("reserve of %lx at node %d", phys, nid);
+       reserve_bootmem_node(NODE_DATA(nid), phys, len);
 #else                  
        reserve_bootmem(phys, len);    
 #endif
index 5507708..00ced1d 100644 (file)
@@ -32,8 +32,7 @@ static inline pte_t *lookup_address(unsigned long address)
        return pte;
 } 
 
-static struct page *split_large_page(unsigned long address, pgprot_t prot,
-                                    pgprot_t ref_prot)
+static struct page *split_large_page(unsigned long address, pgprot_t prot)
 { 
        int i; 
        unsigned long addr;
@@ -46,7 +45,7 @@ static struct page *split_large_page(unsigned long address, pgprot_t prot,
        pbase = (pte_t *)page_address(base);
        for (i = 0; i < PTRS_PER_PTE; i++, addr += PAGE_SIZE) {
                pbase[i] = pfn_pte(addr >> PAGE_SHIFT, 
-                                  addr == address ? prot : ref_prot);
+                                  addr == address ? prot : PAGE_KERNEL);
        }
        return base;
 } 
@@ -96,7 +95,7 @@ static inline void save_page(unsigned long address, struct page *fpage)
  * No more special protections in this 2/4MB area - revert to a
  * large page again. 
  */
-static void revert_page(unsigned long address, pgprot_t ref_prot)
+static void revert_page(struct page *kpte_page, unsigned long address)
 {
        pgd_t *pgd;
        pmd_t *pmd; 
@@ -105,14 +104,12 @@ static void revert_page(unsigned long address, pgprot_t ref_prot)
        pgd = pgd_offset_k(address); 
        pmd = pmd_offset(pgd, address);
        BUG_ON(pmd_val(*pmd) & _PAGE_PSE); 
-       pgprot_val(ref_prot) |= _PAGE_PSE;
-       large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, ref_prot);
+       large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, PAGE_KERNEL_LARGE);
        set_pte((pte_t *)pmd, large_pte);
 }      
 
 static int
-__change_page_attr(unsigned long address, struct page *page, pgprot_t prot, 
-                  pgprot_t ref_prot)
+__change_page_attr(unsigned long address, struct page *page, pgprot_t prot)
 { 
        pte_t *kpte; 
        struct page *kpte_page;
@@ -122,29 +119,29 @@ __change_page_attr(unsigned long address, struct page *page, pgprot_t prot,
        if (!kpte) return 0;
        kpte_page = virt_to_page(((unsigned long)kpte) & PAGE_MASK);
        kpte_flags = pte_val(*kpte); 
-       if (pgprot_val(prot) != pgprot_val(ref_prot)) { 
+       if (pgprot_val(prot) != pgprot_val(PAGE_KERNEL)) { 
                if ((kpte_flags & _PAGE_PSE) == 0) { 
                        pte_t old = *kpte;
-                       pte_t standard = mk_pte(page, ref_prot); 
+                       pte_t standard = mk_pte(page, PAGE_KERNEL); 
 
                        set_pte(kpte, mk_pte(page, prot)); 
                        if (pte_same(old,standard))
                                get_page(kpte_page);
                } else {
-                       struct page *split = split_large_page(address, prot, ref_prot); 
+                       struct page *split = split_large_page(address, prot); 
                        if (!split)
                                return -ENOMEM;
                        get_page(kpte_page);
-                       set_pte(kpte,mk_pte(split, ref_prot));
+                       set_pte(kpte,mk_pte(split, PAGE_KERNEL));
                }       
        } else if ((kpte_flags & _PAGE_PSE) == 0) { 
-               set_pte(kpte, mk_pte(page, ref_prot));
+               set_pte(kpte, mk_pte(page, PAGE_KERNEL));
                __put_page(kpte_page);
        }
 
        if (page_count(kpte_page) == 1) {
                save_page(address, kpte_page);               
-               revert_page(address, ref_prot);
+               revert_page(kpte_page, address);
        } 
        return 0;
 } 
@@ -170,17 +167,13 @@ int change_page_attr(struct page *page, int numpages, pgprot_t prot)
        down_write(&init_mm.mmap_sem);
        for (i = 0; i < numpages; !err && i++, page++) { 
                unsigned long address = (unsigned long)page_address(page); 
-               err = __change_page_attr(address, page, prot, PAGE_KERNEL); 
+               err = __change_page_attr(address, page, prot); 
                if (err) 
                        break; 
-               /* Handle kernel mapping too which aliases part of the
-                * lowmem */
-               /* Disabled right now. Fixme */ 
-               if (0 && page_to_phys(page) < KERNEL_TEXT_SIZE) {               
-                       unsigned long addr2;
-                       addr2 = __START_KERNEL_map + page_to_phys(page);
-                       err = __change_page_attr(addr2, page, prot, 
-                                                PAGE_KERNEL_EXECUTABLE);
+               /* Handle kernel mapping too which aliases part of the lowmem */
+               if (page_to_phys(page) < KERNEL_TEXT_SIZE) {            
+                       unsigned long addr2 = __START_KERNEL_map + page_to_phys(page);
+                       err = __change_page_attr(addr2, page, prot);
                } 
        }       
        up_write(&init_mm.mmap_sem); 
index c776cab..f3dd731 100644 (file)
@@ -21,7 +21,8 @@ CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -1104,9 +1105,8 @@ CONFIG_DE600=m
 CONFIG_DE620=m
 
 #
-# Gigabit Ethernet (1000/10000 Mbit)
+# Ethernet (1000 Mbit)
 #
-CONFIG_NET_GIGE=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_DL2K=m
@@ -1118,6 +1118,10 @@ CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
 CONFIG_SK98LIN=m
 CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
 CONFIG_IXGB=m
 CONFIG_IXGB_NAPI=y
 CONFIG_S2IO=m
index eb84e1a..9b0f258 100644 (file)
@@ -22,7 +22,8 @@ CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -1100,9 +1101,8 @@ CONFIG_DE600=m
 CONFIG_DE620=m
 
 #
-# Gigabit Ethernet (1000/10000 Mbit)
+# Ethernet (1000 Mbit)
 #
-CONFIG_NET_GIGE=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_DL2K=m
@@ -1114,6 +1114,10 @@ CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
 CONFIG_SK98LIN=m
 CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
 CONFIG_IXGB=m
 CONFIG_IXGB_NAPI=y
 CONFIG_S2IO=m
index 323a7fa..62cca98 100644 (file)
@@ -21,7 +21,8 @@ CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -1108,9 +1109,8 @@ CONFIG_DE600=m
 CONFIG_DE620=m
 
 #
-# Gigabit Ethernet (1000/10000 Mbit)
+# Ethernet (1000 Mbit)
 #
-CONFIG_NET_GIGE=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_DL2K=m
@@ -1122,6 +1122,10 @@ CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
 CONFIG_SK98LIN=m
 CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
 CONFIG_IXGB=m
 CONFIG_IXGB_NAPI=y
 CONFIG_S2IO=m
index f416d4c..b7db2fa 100644 (file)
@@ -22,7 +22,8 @@ CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
@@ -1101,9 +1102,8 @@ CONFIG_DE600=m
 CONFIG_DE620=m
 
 #
-# Gigabit Ethernet (1000/10000 Mbit)
+# Ethernet (1000 Mbit)
 #
-CONFIG_NET_GIGE=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_DL2K=m
@@ -1115,6 +1115,10 @@ CONFIG_YELLOWFIN=m
 CONFIG_R8169=m
 CONFIG_SK98LIN=m
 CONFIG_TIGON3=m
+
+#
+# Ethernet (10000 Mbit)
+#
 CONFIG_IXGB=m
 CONFIG_IXGB_NAPI=y
 CONFIG_S2IO=m
index 0b21682..6a9d2ee 100644 (file)
@@ -830,17 +830,9 @@ typedef struct fore200e_bus {
 
 #if defined(CONFIG_ATM_FORE200E_SBA)
 #  if defined(CONFIG_ATM_FORE200E_PCA)
-#    if (PCI_DMA_BIDIRECTIONAL == SBUS_DMA_BIDIRECTIONAL) && \
-        (PCI_DMA_TODEVICE      == SBUS_DMA_TODEVICE)      && \
-        (PCI_DMA_FROMDEVICE    == SBUS_DMA_FROMDEVICE)
-#      define FORE200E_DMA_BIDIRECTIONAL PCI_DMA_BIDIRECTIONAL
-#      define FORE200E_DMA_TODEVICE      PCI_DMA_TODEVICE
-#      define FORE200E_DMA_FROMDEVICE    PCI_DMA_FROMDEVICE
-#    else
-       /* in that case, we'll need to add an extra indirection, e.g.
-         fore200e->bus->dma_direction[ fore200e_dma_direction ] */
-#      error PCI and SBUS DMA direction flags have different values!
-#    endif
+#    define FORE200E_DMA_BIDIRECTIONAL PCI_DMA_BIDIRECTIONAL
+#    define FORE200E_DMA_TODEVICE      PCI_DMA_TODEVICE
+#    define FORE200E_DMA_FROMDEVICE    PCI_DMA_FROMDEVICE
 #  else
 #    define FORE200E_DMA_BIDIRECTIONAL SBUS_DMA_BIDIRECTIONAL
 #    define FORE200E_DMA_TODEVICE      SBUS_DMA_TODEVICE
index 8c46185..f6f7818 100644 (file)
@@ -418,7 +418,8 @@ static int cpqarray_register_ctlr( int i, struct pci_dev *pdev)
        }
        hba[i]->access.set_intr_mask(hba[i], 0);
        if (request_irq(hba[i]->intr, do_ida_intr,
-               SA_INTERRUPT|SA_SHIRQ, hba[i]->devname, hba[i]))
+               SA_INTERRUPT|SA_SHIRQ|SA_SAMPLE_RANDOM,
+               hba[i]->devname, hba[i]))
        {
                printk(KERN_ERR "cpqarray: Unable to get irq %d for %s\n",
                                hba[i]->intr, hba[i]->devname);
index b1b5324..f1db2f8 100644 (file)
@@ -20,6 +20,8 @@
 #define AMD_TLBFLUSH   0x0c    /* In mmio region (32-bit register) */
 #define AMD_CACHEENTRY 0x10    /* In mmio region (32-bit register) */
 
+static struct pci_device_id agp_amdk7_pci_table[];
+
 struct amd_page_map {
        unsigned long *real;
        unsigned long *remapped;
@@ -41,7 +43,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
 
        SetPageReserved(virt_to_page(page_map->real));
        global_cache_flush();
-       page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
+       page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
                                            PAGE_SIZE);
        if (page_map->remapped == NULL) {
                ClearPageReserved(virt_to_page(page_map->real));
@@ -90,7 +92,7 @@ static int amd_create_gatt_pages(int nr_tables)
        int retval = 0;
        int i;
 
-       tables = kmalloc((nr_tables + 1) * sizeof(struct amd_page_map *), 
+       tables = kmalloc((nr_tables + 1) * sizeof(struct amd_page_map *),
                         GFP_KERNEL);
        if (tables == NULL)
                return -ENOMEM;
@@ -124,7 +126,7 @@ static int amd_create_gatt_pages(int nr_tables)
 #define GET_PAGE_DIR_OFF(addr) (addr >> 22)
 #define GET_PAGE_DIR_IDX(addr) (GET_PAGE_DIR_OFF(addr) - \
        GET_PAGE_DIR_OFF(agp_bridge->gart_bus_addr))
-#define GET_GATT_OFF(addr) ((addr & 0x003ff000) >> 12) 
+#define GET_GATT_OFF(addr) ((addr & 0x003ff000) >> 12)
 #define GET_GATT(addr) (amd_irongate_private.gatt_pages[\
        GET_PAGE_DIR_IDX(addr)]->remapped)
 
@@ -174,7 +176,7 @@ static int amd_create_gatt_table(void)
 static int amd_free_gatt_table(void)
 {
        struct amd_page_map page_dir;
-   
+
        page_dir.real = (unsigned long *)agp_bridge->gatt_table_real;
        page_dir.remapped = (unsigned long *)agp_bridge->gatt_table;
 
@@ -224,9 +226,9 @@ static int amd_irongate_configure(void)
 
        /* Write the Sync register */
        pci_write_config_byte(agp_bridge->dev, AMD_MODECNTL, 0x80);
-   
-       /* Set indexing mode */
-       pci_write_config_byte(agp_bridge->dev, AMD_MODECNTL2, 0x00);
+
+       /* Set indexing mode */
+       pci_write_config_byte(agp_bridge->dev, AMD_MODECNTL2, 0x00);
 
        /* Write the enable register */
        enable_reg = INREG16(amd_irongate_private.registers, AMD_GARTENABLE);
@@ -394,7 +396,6 @@ static struct agp_device_ids amd_agp_device_ids[] __devinitdata =
 static int __devinit agp_amdk7_probe(struct pci_dev *pdev,
                                     const struct pci_device_id *ent)
 {
-       struct agp_device_ids *devs = amd_agp_device_ids;
        struct agp_bridge_data *bridge;
        u8 cap_ptr;
        int j;
@@ -403,19 +404,10 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev,
        if (!cap_ptr)
                return -ENODEV;
 
-       for (j = 0; devs[j].chipset_name; j++) {
-               if (pdev->device == devs[j].device_id) {
-                       printk (KERN_INFO PFX "Detected AMD %s chipset\n",
-                                       devs[j].chipset_name);
-                       goto found;
-               }
-       }
-
-       printk(KERN_ERR PFX "Unsupported AMD chipset (device id: %04x)\n",
-                   pdev->device);
-       return -ENODEV;
+       j = ent - agp_amdk7_pci_table;
+       printk(KERN_INFO PFX "Detected AMD %s chipset\n",
+              amd_agp_device_ids[j].chipset_name);
 
-found:
        bridge = agp_alloc_bridge();
        if (!bridge)
                return -ENOMEM;
@@ -442,12 +434,29 @@ static void __devexit agp_amdk7_remove(struct pci_dev *pdev)
        agp_put_bridge(bridge);
 }
 
+/* must be the same order as name table above */
 static struct pci_device_id agp_amdk7_pci_table[] = {
        {
        .class          = (PCI_CLASS_BRIDGE_HOST << 8),
        .class_mask     = ~0,
        .vendor         = PCI_VENDOR_ID_AMD,
-       .device         = PCI_ANY_ID,
+       .device         = PCI_DEVICE_ID_AMD_FE_GATE_7006,
+       .subvendor      = PCI_ANY_ID,
+       .subdevice      = PCI_ANY_ID,
+       },
+       {
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+       .class_mask     = ~0,
+       .vendor         = PCI_VENDOR_ID_AMD,
+       .device         = PCI_DEVICE_ID_AMD_FE_GATE_700E,
+       .subvendor      = PCI_ANY_ID,
+       .subdevice      = PCI_ANY_ID,
+       },
+       {
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+       .class_mask     = ~0,
+       .vendor         = PCI_VENDOR_ID_AMD,
+       .device         = PCI_DEVICE_ID_AMD_FE_GATE_700C,
        .subvendor      = PCI_ANY_ID,
        .subdevice      = PCI_ANY_ID,
        },
index def6568..06a7ef2 100644 (file)
@@ -1,7 +1,7 @@
-/* 
+/*
  * Copyright 2001-2003 SuSE Labs.
  * Distributed under the GNU public license, v2.
- * 
+ *
  * This is a GART driver for the AMD Opteron/Athlon64 on-CPU northbridge.
  * It also includes support for the AMD 8151 AGP bridge,
  * although it doesn't actually do much, as all the real
@@ -194,7 +194,7 @@ static u64 amd64_configure (struct pci_dev *hammer, u64 gatt_table)
 
        /* keep CPU's coherent. */
        flush_amd64_tlb (hammer);
-       
+
        return aper_base;
 }
 
@@ -261,53 +261,53 @@ struct agp_bridge_driver amd_8151_driver = {
 
 /* Some basic sanity checks for the aperture. */
 static int __devinit aperture_valid(u64 aper, u32 size)
-{ 
+{
        u32 pfn, c;
-       if (aper == 0) { 
+       if (aper == 0) {
                printk(KERN_ERR PFX "No aperture\n");
-               return 0; 
+               return 0;
        }
        if (size < 32*1024*1024) {
                printk(KERN_ERR PFX "Aperture too small (%d MB)\n", size>>20);
                return 0;
        }
-       if (aper + size > 0xffffffff) { 
-               printk(KERN_ERR PFX "Aperture out of bounds\n"); 
+       if (aper + size > 0xffffffff) {
+               printk(KERN_ERR PFX "Aperture out of bounds\n");
                return 0;
-       } 
+       }
        pfn = aper >> PAGE_SHIFT;
-       for (c = 0; c < size/PAGE_SIZE; c++) { 
+       for (c = 0; c < size/PAGE_SIZE; c++) {
                if (!pfn_valid(pfn + c))
                        break;
-               if (!PageReserved(pfn_to_page(pfn + c))) { 
+               if (!PageReserved(pfn_to_page(pfn + c))) {
                        printk(KERN_ERR PFX "Aperture pointing to RAM\n");
                        return 0;
                }
        }
 
        /* Request the Aperture. This catches cases when someone else
-          already put a mapping in there - happens with some very broken BIOS 
+          already put a mapping in there - happens with some very broken BIOS
 
-          Maybe better to use pci_assign_resource/pci_enable_device instead trusting
-          the bridges? */
+          Maybe better to use pci_assign_resource/pci_enable_device instead
+          trusting the bridges? */
        if (!aperture_resource &&
            !(aperture_resource = request_mem_region(aper, size, "aperture"))) {
-               printk(KERN_ERR PFX "Aperture conflicts with PCI mapping.\n"); 
+               printk(KERN_ERR PFX "Aperture conflicts with PCI mapping.\n");
                return 0;
        }
        return 1;
-} 
+}
 
-/* 
+/*
  * W*s centric BIOS sometimes only set up the aperture in the AGP
- * bridge, not the northbridge. On AMD64 this is handled early 
+ * bridge, not the northbridge. On AMD64 this is handled early
  * in aperture.c, but when GART_IOMMU is not enabled or we run
- * on a 32bit kernel this needs to be redone. 
+ * on a 32bit kernel this needs to be redone.
  * Unfortunately it is impossible to fix the aperture here because it's too late
  * to allocate that much memory. But at least error out cleanly instead of
  * crashing.
- */ 
-static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp, 
+ */
+static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp,
                                                                 u16 cap)
 {
        u32 aper_low, aper_hi;
@@ -316,38 +316,38 @@ static __devinit int fix_northbridge(struct pci_dev *nb, struct pci_dev *agp,
        u32 nb_order, nb_base;
        u16 apsize;
 
-       pci_read_config_dword(nb, 0x90, &nb_order); 
+       pci_read_config_dword(nb, 0x90, &nb_order);
        nb_order = (nb_order >> 1) & 7;
-       pci_read_config_dword(nb, 0x94, &nb_base); 
-       nb_aper = nb_base << 25;        
-       if (aperture_valid(nb_aper, (32*1024*1024)<<nb_order)) { 
+       pci_read_config_dword(nb, 0x94, &nb_base);
+       nb_aper = nb_base << 25;
+       if (aperture_valid(nb_aper, (32*1024*1024)<<nb_order)) {
                return 0;
        }
 
        /* Northbridge seems to contain crap. Try the AGP bridge. */
 
-       pci_read_config_word(agp, cap+0x14, &apsize); 
-       if (apsize == 0xffff) 
-               return -1; 
+       pci_read_config_word(agp, cap+0x14, &apsize);
+       if (apsize == 0xffff)
+               return -1;
 
        apsize &= 0xfff;
        /* Some BIOS use weird encodings not in the AGPv3 table. */
-       if (apsize & 0xff) 
-               apsize |= 0xf00; 
-       order = 7 - hweight16(apsize); 
+       if (apsize & 0xff)
+               apsize |= 0xf00;
+       order = 7 - hweight16(apsize);
 
        pci_read_config_dword(agp, 0x10, &aper_low);
        pci_read_config_dword(agp, 0x14, &aper_hi);
-       aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32); 
+       aper = (aper_low & ~((1<<22)-1)) | ((u64)aper_hi << 32);
        printk(KERN_INFO PFX "Aperture from AGP @ %Lx size %u MB\n", aper, 32 << order);
        if (order < 0 || !aperture_valid(aper, (32*1024*1024)<<order))
-               return -1; 
-       
-       pci_write_config_dword(nb, 0x90, order << 1); 
-       pci_write_config_dword(nb, 0x94, aper >> 25); 
+               return -1;
+
+       pci_write_config_dword(nb, 0x90, order << 1);
+       pci_write_config_dword(nb, 0x94, aper >> 25);
 
        return 0;
-} 
+}
 
 static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
 {
@@ -355,19 +355,19 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
        int i = 0;
 
        /* cache pci_devs of northbridges. */
-       while ((loop_dev = pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, loop_dev)) 
+       while ((loop_dev = pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, loop_dev))
                        != NULL) {
-               if (i == MAX_HAMMER_GARTS) { 
+               if (i == MAX_HAMMER_GARTS) {
                        printk(KERN_ERR PFX "Too many northbridges for AGP\n");
                        return -1;
                }
-               if (fix_northbridge(loop_dev, pdev, cap_ptr) < 0) { 
+               if (fix_northbridge(loop_dev, pdev, cap_ptr) < 0) {
                        printk(KERN_ERR PFX "No usable aperture found.\n");
-#ifdef __x86_64__ 
+#ifdef __x86_64__
                        /* should port this to i386 */
                        printk(KERN_ERR PFX "Consider rebooting with iommu=memaper=2 to get a good aperture.\n");
-#endif 
-                       return -1;  
+#endif
+                       return -1;
                }
                hammers[i++] = loop_dev;
        }
@@ -377,8 +377,7 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
 
 /* Handle AMD 8151 quirks */
 static void __devinit amd8151_init(struct pci_dev *pdev, struct agp_bridge_data *bridge)
-
-{              
+{
        char *revstring;
        u8 rev_id;
 
@@ -417,12 +416,12 @@ static struct aper_size_info_32 nforce3_sizes[5] =
 
 /* Handle shadow device of the Nvidia NForce3 */
 /* CHECK-ME original 2.4 version set up some IORRs. Check if that is needed. */
-static int __devinit nforce3_agp_init(struct pci_dev *pdev) 
-{ 
+static int __devinit nforce3_agp_init(struct pci_dev *pdev)
+{
        u32 tmp, apbase, apbar, aplimit;
-       struct pci_dev *dev1; 
+       struct pci_dev *dev1;
        int i;
-       unsigned size = amd64_fetch_size(); 
+       unsigned size = amd64_fetch_size();
 
        printk(KERN_INFO PFX "Setting up Nforce3 AGP.\n");
 
@@ -432,17 +431,17 @@ static int __devinit nforce3_agp_init(struct pci_dev *pdev)
                        "nForce3 chipset, but could not find "
                        "the secondary device.\n");
                return -ENODEV;
-       }       
+       }
 
-       for (i = 0; i < ARRAY_SIZE(nforce3_sizes); i++) 
+       for (i = 0; i < ARRAY_SIZE(nforce3_sizes); i++)
                if (nforce3_sizes[i].size == size)
-                       break; 
+                       break;
 
        if (i == ARRAY_SIZE(nforce3_sizes)) {
-               printk(KERN_INFO PFX "No NForce3 size found for %d\n", size); 
-               return -ENODEV; 
+               printk(KERN_INFO PFX "No NForce3 size found for %d\n", size);
+               return -ENODEV;
        }
-       
+
        pci_read_config_dword(dev1, NVIDIA_X86_64_1_APSIZE, &tmp);
        tmp &= ~(0xf);
        tmp |= nforce3_sizes[i].size_value;
@@ -491,8 +490,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
            pdev->device == PCI_DEVICE_ID_AMD_8151_0) {
                amd8151_init(pdev, bridge);
        } else {
-               printk(KERN_INFO PFX "Detected AGP bridge %x\n",
-                       pdev->devfn);
+               printk(KERN_INFO PFX "Detected AGP bridge %x\n", pdev->devfn);
        }
 
        bridge->driver = &amd_8151_driver;
@@ -507,10 +505,10 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
                return -ENODEV;
        }
 
-       if (pdev->vendor == PCI_VENDOR_ID_NVIDIA) { 
+       if (pdev->vendor == PCI_VENDOR_ID_NVIDIA) {
                int ret = nforce3_agp_init(pdev);
-               if (ret) { 
-                       agp_put_bridge(bridge); 
+               if (ret) {
+                       agp_put_bridge(bridge);
                        return ret;
                }
        }
@@ -523,8 +521,8 @@ static void __devexit agp_amd64_remove(struct pci_dev *pdev)
 {
        struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
 
-       release_mem_region(virt_to_phys(bridge->gatt_table_real), 
-                          amd64_aperture_sizes[bridge->aperture_size_idx].size); 
+       release_mem_region(virt_to_phys(bridge->gatt_table_real),
+                          amd64_aperture_sizes[bridge->aperture_size_idx].size);
        agp_remove_bridge(bridge);
        agp_put_bridge(bridge);
 }
@@ -581,6 +579,15 @@ static struct pci_device_id agp_amd64_pci_table[] = {
        .subvendor      = PCI_ANY_ID,
        .subdevice      = PCI_ANY_ID,
        },
+       /* SIS 755 */
+       {
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+       .class_mask     = ~0,
+       .vendor         = PCI_VENDOR_ID_SI,
+       .device         = PCI_DEVICE_ID_SI_755,
+       .subvendor      = PCI_ANY_ID,
+       .subdevice      = PCI_ANY_ID,
+       },
        { }
 };
 
@@ -600,15 +607,15 @@ int __init agp_amd64_init(void)
        int err = 0;
        if (agp_off)
                return -EINVAL;
-       if (pci_module_init(&agp_amd64_pci_driver) > 0) { 
+       if (pci_module_init(&agp_amd64_pci_driver) > 0) {
                struct pci_dev *dev;
-               if (!agp_try_unsupported && !agp_try_unsupported_boot) { 
+               if (!agp_try_unsupported && !agp_try_unsupported_boot) {
                        printk(KERN_INFO PFX "No supported AGP bridge found.\n");
-#ifdef MODULE                  
+#ifdef MODULE
                        printk(KERN_INFO PFX "You can try agp_try_unsupported=1\n");
 #else
                        printk(KERN_INFO PFX "You can boot with agp=try_unsupported\n");
-#endif                 
+#endif
                        return -ENODEV;
                }
 
@@ -622,12 +629,12 @@ int __init agp_amd64_init(void)
                while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev))) {
                        if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
                                continue;
-                       /* Only one bridge supported right now */       
+                       /* Only one bridge supported right now */
                        if (agp_amd64_probe(dev, NULL) == 0) {
                                err = 0;
                                break;
-                       }       
-               }               
+                       }
+               }
        }
        return err;
 }
index 35f71bb..bc88d69 100644 (file)
@@ -131,6 +131,7 @@ static int ati_create_gatt_pages(int nr_tables)
                                i--;
                        }
                        kfree (tables);
+                       tables = NULL;
                        retval = -ENOMEM;
                        break;
                }
index 7b3f652..33e1c70 100644 (file)
@@ -238,11 +238,14 @@ void agp_put_bridge(struct agp_bridge_data *bridge)
 }
 EXPORT_SYMBOL(agp_put_bridge);
 
+
 int agp_add_bridge(struct agp_bridge_data *bridge)
 {
        int error;
 
+       if (agp_off)
+               return -ENODEV;
+
        if (!bridge->dev) {
                printk (KERN_DEBUG PFX "Erk, registering with no pci_dev!\n");
                return -EINVAL;
@@ -308,9 +311,9 @@ EXPORT_SYMBOL(agp_try_unsupported_boot);
 
 static int __init agp_init(void)
 {
-       if (!agp_off) 
-       printk(KERN_INFO "Linux agpgart interface v%d.%d (c) Dave Jones\n",
-              AGPGART_VERSION_MAJOR, AGPGART_VERSION_MINOR);
+       if (!agp_off)
+               printk(KERN_INFO "Linux agpgart interface v%d.%d (c) Dave Jones\n",
+                       AGPGART_VERSION_MAJOR, AGPGART_VERSION_MINOR);
        return 0;
 }
 
@@ -325,7 +328,7 @@ static __init int agp_setup(char *s)
                agp_off = 1;
        if (!strcmp(s,"try_unsupported"))
                agp_try_unsupported_boot = 1;
-       return 1;       
+       return 1;
 }
 __setup("agp=", agp_setup);
 #endif
index db4d379..f8b9916 100644 (file)
@@ -1233,7 +1233,7 @@ static int find_i810(u16 device, const char *name)
                                name);
                return 0;
        }
-       
+
        intel_i810_private.i810_dev = i810_dev;
        return 1;
 }
@@ -1382,8 +1382,10 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
                name = "E7205";
                break;
        default:
-               printk(KERN_ERR PFX "Unsupported Intel chipset (device id: %04x)\n",
+               if (cap_ptr)
+                       printk(KERN_WARNING PFX "Unsupported Intel chipset (device id: %04x)\n",
                            pdev->device);
+               agp_put_bridge(bridge);
                return -ENODEV;
        };
 
@@ -1406,7 +1408,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
        if (!r->start && r->end) {
                if(pci_assign_resource(pdev, 0)) {
                        printk(KERN_ERR PFX "could not assign resource 0\n");
-                       return (-ENODEV);
+                       agp_put_bridge(bridge);
+                       return -ENODEV;
                }
        }
 
@@ -1417,7 +1420,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
        */
        if (pci_enable_device(pdev)) {
                printk(KERN_ERR PFX "Unable to Enable PCI device\n");
-               return (-ENODEV);
+               agp_put_bridge(bridge);
+               return -ENODEV;
        }
 
        /* Fill in the mode register */
@@ -1459,14 +1463,36 @@ static int agp_intel_resume(struct pci_dev *pdev)
 }
 
 static struct pci_device_id agp_intel_pci_table[] = {
-       {
-       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
-       .class_mask     = ~0,
-       .vendor         = PCI_VENDOR_ID_INTEL,
-       .device         = PCI_ANY_ID,
-       .subvendor      = PCI_ANY_ID,
-       .subdevice      = PCI_ANY_ID,
-       },
+#define ID(x)                                          \
+       {                                               \
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8), \
+       .class_mask     = ~0,                           \
+       .vendor         = PCI_VENDOR_ID_INTEL,          \
+       .device         = x,                            \
+       .subvendor      = PCI_ANY_ID,                   \
+       .subdevice      = PCI_ANY_ID,                   \
+       }
+       ID(PCI_DEVICE_ID_INTEL_82443LX_0),
+       ID(PCI_DEVICE_ID_INTEL_82443BX_0),
+       ID(PCI_DEVICE_ID_INTEL_82443GX_0),
+       ID(PCI_DEVICE_ID_INTEL_82810_MC1),
+       ID(PCI_DEVICE_ID_INTEL_82810_MC3),
+       ID(PCI_DEVICE_ID_INTEL_82810E_MC),
+       ID(PCI_DEVICE_ID_INTEL_82815_MC),
+       ID(PCI_DEVICE_ID_INTEL_82820_HB),
+       ID(PCI_DEVICE_ID_INTEL_82820_UP_HB),
+       ID(PCI_DEVICE_ID_INTEL_82830_HB),
+       ID(PCI_DEVICE_ID_INTEL_82840_HB),
+       ID(PCI_DEVICE_ID_INTEL_82845_HB),
+       ID(PCI_DEVICE_ID_INTEL_82845G_HB),
+       ID(PCI_DEVICE_ID_INTEL_82850_HB),
+       ID(PCI_DEVICE_ID_INTEL_82855PM_HB),
+       ID(PCI_DEVICE_ID_INTEL_82855GM_HB),
+       ID(PCI_DEVICE_ID_INTEL_82860_HB),
+       ID(PCI_DEVICE_ID_INTEL_82865_HB),
+       ID(PCI_DEVICE_ID_INTEL_82875_HB),
+       ID(PCI_DEVICE_ID_INTEL_7505_0),
+       ID(PCI_DEVICE_ID_INTEL_7205_0), 
        { }
 };
 
index b8fd444..dff4d99 100644 (file)
@@ -491,10 +491,9 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
        char *name = "(unknown)";
        u8 cap_ptr = 0;
 
-       if (!boot_cpu_has(X86_FEATURE_LM))
-               return -ENODEV;
-
        cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
+       if (!cap_ptr) 
+               return -ENODEV;
 
        bridge = agp_alloc_bridge();
        if (!bridge)
@@ -587,7 +586,15 @@ static struct pci_device_id agp_intelmch_pci_table[] = {
        .class          = (PCI_CLASS_BRIDGE_HOST << 8),
        .class_mask     = ~0,
        .vendor         = PCI_VENDOR_ID_INTEL,
-       .device         = PCI_ANY_ID,
+       .device         = PCI_DEVICE_ID_INTEL_82865_HB,
+       .subvendor      = PCI_ANY_ID,
+       .subdevice      = PCI_ANY_ID,
+       },
+       {
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+       .class_mask     = ~0,
+       .vendor         = PCI_VENDOR_ID_INTEL,
+       .device         = PCI_DEVICE_ID_INTEL_82875_HB,
        .subvendor      = PCI_ANY_ID,
        .subdevice      = PCI_ANY_ID,
        },
index 2981fa1..28e7fc4 100644 (file)
@@ -380,7 +380,15 @@ static struct pci_device_id agp_nvidia_pci_table[] = {
        .class          = (PCI_CLASS_BRIDGE_HOST << 8),
        .class_mask     = ~0,
        .vendor         = PCI_VENDOR_ID_NVIDIA,
-       .device         = PCI_ANY_ID,
+       .device         = PCI_DEVICE_ID_NVIDIA_NFORCE,
+       .subvendor      = PCI_ANY_ID,
+       .subdevice      = PCI_ANY_ID,
+       },
+       {
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+       .class_mask     = ~0,
+       .vendor         = PCI_VENDOR_ID_NVIDIA,
+       .device         = PCI_DEVICE_ID_NVIDIA_NFORCE2,
        .subvendor      = PCI_ANY_ID,
        .subdevice      = PCI_ANY_ID,
        },
index 16bfef5..549149f 100644 (file)
@@ -13,6 +13,8 @@
 #define SIS_TLBCNTRL   0x97
 #define SIS_TLBFLUSH   0x98
 
+static int __devinitdata agp_sis_force_delay = 0;
+static int __devinitdata agp_sis_agp_spec = -1;
 
 static int sis_fetch_size(void)
 {
@@ -67,7 +69,7 @@ static void sis_cleanup(void)
                              (previous_size->size_value & ~(0x03)));
 }
 
-static void sis_648_enable(u32 mode)
+static void sis_delayed_enable(u32 mode)
 {
        struct pci_dev *device = NULL;
        u32 command;
@@ -94,13 +96,12 @@ static void sis_648_enable(u32 mode)
                pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command);
 
                /*
-                * Weird: on 648(fx) and 746(fx) chipsets any rate change in the target
+                * Weird: on some sis chipsets any rate change in the target
                 * command register triggers a 5ms screwup during which the master
                 * cannot be configured          
                 */
-               if (device->device == PCI_DEVICE_ID_SI_648 ||
-                   device->device == PCI_DEVICE_ID_SI_746) {
-                       printk(KERN_INFO PFX "SiS chipset with AGP problems detected. Giving bridge time to recover.\n");
+               if (device->device == agp_bridge->dev->device) {
+                       printk(KERN_INFO PFX "SiS delay workaround: giving bridge time to recover.\n");
                        set_current_state(TASK_UNINTERRUPTIBLE);
                        schedule_timeout (1+(HZ*10)/1000);
                }
@@ -223,28 +224,35 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
 };
 
 
+// chipsets that require the 'delay hack'
+static int sis_broken_chipsets[] __devinitdata = {
+       PCI_DEVICE_ID_SI_648,
+       PCI_DEVICE_ID_SI_746,
+       0 // terminator
+};
+
 static void __devinit sis_get_driver(struct agp_bridge_data *bridge)
 {
-       if (bridge->dev->device == PCI_DEVICE_ID_SI_648) { 
-               sis_driver.agp_enable=sis_648_enable;
-               if (agp_bridge->major_version == 3) {
-                       sis_driver.aperture_sizes = agp3_generic_sizes;
-                       sis_driver.size_type = U16_APER_SIZE;
-                       sis_driver.num_aperture_sizes = AGP_GENERIC_SIZES_ENTRIES;
-                       sis_driver.configure = agp3_generic_configure;
-                       sis_driver.fetch_size = agp3_generic_fetch_size;
-                       sis_driver.cleanup = agp3_generic_cleanup;
-                       sis_driver.tlb_flush = agp3_generic_tlbflush;
-               }
-       }
+       int i;
 
-       if (bridge->dev->device == PCI_DEVICE_ID_SI_746) {
-               /*
-                * We don't know enough about the 746 to enable it properly.
-                * Though we do know that it needs the 'delay' hack to settle
-                * after changing modes.
-                */
-               sis_driver.agp_enable=sis_648_enable;
+       for(i=0; sis_broken_chipsets[i]!=0; ++i)
+               if(bridge->dev->device==sis_broken_chipsets[i])
+                       break;
+
+       if(sis_broken_chipsets[i] || agp_sis_force_delay)
+               sis_driver.agp_enable=sis_delayed_enable;
+
+       // sis chipsets that indicate less than agp3.5
+       // are not actually fully agp3 compliant
+       if ((agp_bridge->major_version == 3 && agp_bridge->minor_version >= 5
+            && agp_sis_agp_spec!=0) || agp_sis_agp_spec==1) {
+               sis_driver.aperture_sizes = agp3_generic_sizes;
+               sis_driver.size_type = U16_APER_SIZE;
+               sis_driver.num_aperture_sizes = AGP_GENERIC_SIZES_ENTRIES;
+               sis_driver.configure = agp3_generic_configure;
+               sis_driver.fetch_size = agp3_generic_fetch_size;
+               sis_driver.cleanup = agp3_generic_cleanup;
+               sis_driver.tlb_flush = agp3_generic_tlbflush;
        }
 }
 
@@ -335,4 +343,8 @@ static void __exit agp_sis_cleanup(void)
 module_init(agp_sis_init);
 module_exit(agp_sis_cleanup);
 
+MODULE_PARM(agp_sis_force_delay,"i");
+MODULE_PARM_DESC(agp_sis_force_delay,"forces sis delay hack");
+MODULE_PARM(agp_sis_agp_spec,"i");
+MODULE_PARM_DESC(agp_sis_agp_spec,"0=force sis init, 1=force generic agp3 init, default: autodetect");
 MODULE_LICENSE("GPL and additional rights");
index e08c241..d3f3e80 100644 (file)
@@ -248,26 +248,13 @@ static int serverworks_fetch_size(void)
  */
 static void serverworks_tlbflush(struct agp_memory *temp)
 {
-       unsigned long end;
-
-       OUTREG8(serverworks_private.registers, SVWRKS_POSTFLUSH, 0x01);
-       end = jiffies + 3*HZ;
-       while(INREG8(serverworks_private.registers, 
-                    SVWRKS_POSTFLUSH) == 0x01) {
-               if((signed)(end - jiffies) <= 0) {
-                       printk(KERN_ERR PFX "Posted write buffer flush took more"
-                              "then 3 seconds\n");
-               }
-       }
-       OUTREG32(serverworks_private.registers, SVWRKS_DIRFLUSH, 0x00000001);
-       end = jiffies + 3*HZ;
-       while(INREG32(serverworks_private.registers, 
-                    SVWRKS_DIRFLUSH) == 0x00000001) {
-               if((signed)(end - jiffies) <= 0) {
-                       printk(KERN_ERR PFX "TLB flush took more"
-                              "then 3 seconds\n");
-               }
-       }
+       OUTREG8(serverworks_private.registers, SVWRKS_POSTFLUSH, 1);
+       while(INREG8(serverworks_private.registers, SVWRKS_POSTFLUSH) == 1)
+               cpu_relax();
+
+       OUTREG32(serverworks_private.registers, SVWRKS_DIRFLUSH, 1);
+       while(INREG32(serverworks_private.registers, SVWRKS_DIRFLUSH) == 1)
+               cpu_relax();
 }
 
 static int serverworks_configure(void)
index de9aa85..2f5c50c 100644 (file)
@@ -9,6 +9,8 @@
 #include <linux/agp_backend.h>
 #include "agp.h"
 
+static struct pci_device_id agp_via_pci_table[];
+
 #define VIA_GARTCTRL   0x80
 #define VIA_APSIZE     0x84
 #define VIA_ATTBASE    0x88
@@ -378,20 +380,9 @@ static int __devinit agp_via_probe(struct pci_dev *pdev,
        if (!cap_ptr)
                return -ENODEV;
 
-       /* probe for known chipsets */
-       for (j = 0; devs[j].chipset_name; j++) {
-               if (pdev->device == devs[j].device_id) {
-                       printk (KERN_INFO PFX "Detected VIA %s chipset\n",
-                                       devs[j].chipset_name);
-                       goto found;
-               }
-       }
-
-       printk(KERN_ERR PFX "Unsupported VIA chipset (device id: %04x)\n",
-                   pdev->device);
-       return -ENODEV;
+       j = ent - agp_via_pci_table;
+       printk (KERN_INFO PFX "Detected VIA %s chipset\n", devs[j].chipset_name);
 
-found:
        bridge = agp_alloc_bridge();
        if (!bridge)
                return -ENOMEM;
@@ -432,15 +423,40 @@ static void __devexit agp_via_remove(struct pci_dev *pdev)
        agp_put_bridge(bridge);
 }
 
+/* must be the same order as name table above */
 static struct pci_device_id agp_via_pci_table[] = {
-       {
-       .class          = (PCI_CLASS_BRIDGE_HOST << 8),
-       .class_mask     = ~0,
-       .vendor         = PCI_VENDOR_ID_VIA,
-       .device         = PCI_ANY_ID,
-       .subvendor      = PCI_ANY_ID,
-       .subdevice      = PCI_ANY_ID,
-       },
+#define ID(x) \
+       {                                               \
+       .class          = (PCI_CLASS_BRIDGE_HOST << 8), \
+       .class_mask     = ~0,                           \
+       .vendor         = PCI_VENDOR_ID_VIA,            \
+       .device         = x,                            \
+       .subvendor      = PCI_ANY_ID,                   \
+       .subdevice      = PCI_ANY_ID,                   \
+       }
+       ID(PCI_DEVICE_ID_VIA_82C598_0),
+       ID(PCI_DEVICE_ID_VIA_8501_0),
+       ID(PCI_DEVICE_ID_VIA_8601_0),
+       ID(PCI_DEVICE_ID_VIA_82C691_0),
+       ID(PCI_DEVICE_ID_VIA_8371_0),
+       ID(PCI_DEVICE_ID_VIA_8633_0),
+       ID(PCI_DEVICE_ID_VIA_XN266),
+       ID(PCI_DEVICE_ID_VIA_8361),
+       ID(PCI_DEVICE_ID_VIA_8363_0),
+       ID(PCI_DEVICE_ID_VIA_8753_0),
+       ID(PCI_DEVICE_ID_VIA_8367_0),
+       ID(PCI_DEVICE_ID_VIA_8653_0),
+       ID(PCI_DEVICE_ID_VIA_XM266),
+       ID(PCI_DEVICE_ID_VIA_862X_0),
+       ID(PCI_DEVICE_ID_VIA_8377_0),
+       ID(PCI_DEVICE_ID_VIA_8605_0),
+       ID(PCI_DEVICE_ID_VIA_8703_51_0),
+       ID(PCI_DEVICE_ID_VIA_8754C_0),
+       ID(PCI_DEVICE_ID_VIA_8763_0),
+       ID(PCI_DEVICE_ID_VIA_8378_0),
+       ID(PCI_DEVICE_ID_VIA_PT880),
+       ID(PCI_DEVICE_ID_VIA_8783_0),
+       ID(PCI_DEVICE_ID_VIA_PX8X0_0),  
        { }
 };
 
index f418320..6f0657b 100644 (file)
@@ -221,10 +221,16 @@ static int __init scx200_wdt_init(void)
 
        printk(KERN_DEBUG NAME ": NatSemi SCx200 Watchdog Driver\n");
 
-       /* First check that this really is a NatSemi SCx200 CPU */
+       /*
+        * First check that this really is a NatSemi SCx200 CPU or a Geode
+        * SC1100 processor
+        */
        if ((pci_find_device(PCI_VENDOR_ID_NS,
                             PCI_DEVICE_ID_NS_SCx200_BRIDGE,
-                            NULL)) == NULL)
+                            NULL)) == NULL
+           && (pci_find_device(PCI_VENDOR_ID_NS,
+                               PCI_DEVICE_ID_NS_SC1100_BRIDGE,
+                               NULL)) == NULL)
                return -ENODEV;
 
        /* More sanity checks, verify that the configuration block is there */
index 705cbfa..7a12930 100644 (file)
@@ -72,7 +72,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=CON
 #define WDT_EFDR (WDT_EFIR+1) /* Extended Function Data Register */
 
 static void
-wdt_ctrl(int timeout)
+w83627hf_select_wd_register(void)
 {
        outb_p(0x87, WDT_EFER); /* Enter extended function mode */
        outb_p(0x87, WDT_EFER); /* Again according to manual */
@@ -81,23 +81,64 @@ wdt_ctrl(int timeout)
        outb_p(0x08, WDT_EFDR); /* select logical device 8 (GPIO2) */
        outb_p(0x30, WDT_EFER); /* select CR30 */
        outb_p(0x01, WDT_EFDR); /* set bit 0 to activate GPIO2 */
+}
+
+static void
+w83627hf_unselect_wd_register(void)
+{
+       outb_p(0xAA, WDT_EFER); /* Leave extended function mode */
+}
+
+/* tyan motherboards seem to set F5 to 0x4C ?
+ * So explicitly init to appropriate value. */
+static void
+w83627hf_init(void)
+{
+       unsigned char t;
+
+       w83627hf_select_wd_register();
+
+       outb_p(0xF5, WDT_EFER); /* Select CRF5 */
+       t=inb_p(WDT_EFDR);      /* read CRF5 */
+       t&=~0x0C;               /* set second mode & disable keyboard turning off watchdog */
+       outb_p(t, WDT_EFDR);    /* Write back to CRF5 */
+
+       w83627hf_unselect_wd_register();
+}
+
+static void
+wdt_ctrl(int timeout)
+{
+       w83627hf_select_wd_register();
 
        outb_p(0xF6, WDT_EFER);    /* Select CRF6 */
        outb_p(timeout, WDT_EFDR); /* Write Timeout counter to CRF6 */
 
-       outb_p(0xAA, WDT_EFER); /* Leave extended function mode */
+       w83627hf_unselect_wd_register();
 }
 
-static void
+static int
 wdt_ping(void)
 {
        wdt_ctrl(timeout);
+       return 0;
 }
 
-static void
+static int
 wdt_disable(void)
 {
        wdt_ctrl(0);
+       return 0;
+}
+
+static int
+wdt_set_heartbeat(int t)
+{
+       if ((t < 1) || (t > 63))
+               return -EINVAL;
+
+       timeout = t;
+       return 0;
 }
 
 static ssize_t
@@ -134,7 +175,7 @@ wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
        static struct watchdog_info ident = {
                .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE,
                .firmware_version = 1,
-               .identity = "Advantech WDT",
+               .identity = "W83627HF WDT",
        };
 
        switch (cmd) {
@@ -154,9 +195,8 @@ wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
        case WDIOC_SETTIMEOUT:
          if (get_user(new_timeout, (int *)arg))
                  return -EFAULT;
-         if ((new_timeout < 1) || (new_timeout > 63))
+         if (wdt_set_heartbeat(new_timeout))
                  return -EINVAL;
-         timeout = new_timeout;
          wdt_ping();
          /* Fall */
 
@@ -211,8 +251,8 @@ wdt_close(struct inode *inode, struct file *file)
                printk(KERN_CRIT PFX "Unexpected close, not stopping watchdog!\n");
                wdt_ping();
        }
-       clear_bit(0, &wdt_is_open);
        expect_close = 0;
+       clear_bit(0, &wdt_is_open);
        return 0;
 }
 
@@ -266,10 +306,10 @@ wdt_init(void)
 
        printk(KERN_INFO "WDT driver for the Winbond(TM) W83627HF Super I/O chip initialising.\n");
 
-       if (timeout < 1 || timeout > 63) {
-               timeout = WATCHDOG_TIMEOUT;
-               printk (KERN_INFO PFX "timeout value must be 1<=x<=63, using %d\n",
-                       timeout);
+       if (wdt_set_heartbeat(timeout)) {
+               wdt_set_heartbeat(WATCHDOG_TIMEOUT);
+               printk (KERN_INFO PFX "timeout value must be 1<=timeout<=63, using %d\n",
+                       WATCHDOG_TIMEOUT);
        }
 
        if (!request_region(wdt_io, 1, WATCHDOG_NAME)) {
@@ -279,6 +319,8 @@ wdt_init(void)
                goto out;
        }
 
+       w83627hf_init();
+
        ret = register_reboot_notifier(&wdt_notifier);
        if (ret != 0) {
                printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n",
index 2329dd0..e5f41e0 100644 (file)
@@ -59,8 +59,6 @@
 #define dma_unmap_single(d,h,s,dir) sbus_unmap_single(d,h,s,dir)
 #define dma_map_sg(d,s,n,dir) sbus_map_sg(d,s,n,dir)
 #define dma_unmap_sg(d,s,n,dir) sbus_unmap_sg(d,s,n,dir)
-#define scsi_to_fc_dma_dir(dir)        scsi_to_sbus_dma_dir(dir)
-#define FC_DMA_BIDIRECTIONAL   SBUS_DMA_BIDIRECTIONAL
 #else
 #define dma_alloc_consistent(d,s,p) pci_alloc_consistent(d,s,p)
 #define dma_free_consistent(d,s,v,h) pci_free_consistent(d,s,v,h)
@@ -68,8 +66,6 @@
 #define dma_unmap_single(d,h,s,dir) pci_unmap_single(d,h,s,dir)
 #define dma_map_sg(d,s,n,dir) pci_map_sg(d,s,n,dir)
 #define dma_unmap_sg(d,s,n,dir) pci_unmap_sg(d,s,n,dir)
-#define scsi_to_fc_dma_dir(dir)        scsi_to_pci_dma_dir(dir)
-#define FC_DMA_BIDIRECTIONAL   PCI_DMA_BIDIRECTIONAL
 #endif                                                        
 
 #define FCP_CMND(SCpnt) ((fcp_cmnd *)&(SCpnt->SCp))
@@ -167,7 +163,7 @@ static void fcp_login_done(fc_channel *fc, int i, int status)
                        fcmd = l->fcmds + i;
                        plogi = l->logi + 3 * i;
                        dma_unmap_single (fc->dev, fcmd->cmd, 3 * sizeof(logi),
-                                         FC_DMA_BIDIRECTIONAL);
+                                         DMA_BIDIRECTIONAL);
                        plogi->code = LS_PLOGI;
                        memcpy (&plogi->nport_wwn, &fc->wwn_nport, sizeof(fc_wwn));
                        memcpy (&plogi->node_wwn, &fc->wwn_node, sizeof(fc_wwn));
@@ -188,7 +184,7 @@ static void fcp_login_done(fc_channel *fc, int i, int status)
                        }
 #endif                 
                        fcmd->cmd = dma_map_single (fc->dev, plogi, 3 * sizeof(logi),
-                                                   FC_DMA_BIDIRECTIONAL);
+                                                   DMA_BIDIRECTIONAL);
                        fcmd->rsp = fcmd->cmd + 2 * sizeof(logi);
                        if (fc->hw_enque (fc, fcmd))
                                printk ("FC: Cannot enque PLOGI packet on %s\n", fc->name);
@@ -212,7 +208,7 @@ static void fcp_login_done(fc_channel *fc, int i, int status)
                case FC_STATUS_OK:
                        plogi = l->logi + 3 * i;
                        dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi),
-                                         FC_DMA_BIDIRECTIONAL);
+                                         DMA_BIDIRECTIONAL);
                        if (!fc->wwn_dest.lo && !fc->wwn_dest.hi) {
                                memcpy (&fc->wwn_dest, &plogi[1].node_wwn, sizeof(fc_wwn)); 
                                FCD(("Dest WWN %08x%08x\n", *(u32 *)&fc->wwn_dest, fc->wwn_dest.lo))
@@ -231,7 +227,7 @@ static void fcp_login_done(fc_channel *fc, int i, int status)
                case FC_STATUS_ERR_OFFLINE:
                        fc->state = FC_STATE_OFFLINE;
                        dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi),
-                                         FC_DMA_BIDIRECTIONAL);
+                                         DMA_BIDIRECTIONAL);
                        printk ("%s: FC is offline\n", fc->name);
                        if (atomic_dec_and_test (&l->todo))
                                up(&l->sem);
@@ -256,7 +252,7 @@ static void fcp_report_map_done(fc_channel *fc, int i, int status)
        switch (status) {
        case FC_STATUS_OK: /* Ok, let's have a fun on a loop */
                dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi),
-                                 FC_DMA_BIDIRECTIONAL);
+                                 DMA_BIDIRECTIONAL);
                p = (fc_al_posmap *)(l->logi + 3 * i);
 #ifdef FCDEBUG
                {
@@ -306,7 +302,7 @@ static void fcp_report_map_done(fc_channel *fc, int i, int status)
                FCD(("SID %d DID %d\n", fc->sid, fc->did))
                fcmd = l->fcmds + i;
                dma_unmap_single(fc->dev, fcmd->cmd, 3 * sizeof(logi),
-                                FC_DMA_BIDIRECTIONAL);
+                                DMA_BIDIRECTIONAL);
                fch = &fcmd->fch;
                memset(l->logi + 3 * i, 0, 3 * sizeof(logi));
                FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, FS_FABRIC_F_PORT);
@@ -317,7 +313,7 @@ static void fcp_report_map_done(fc_channel *fc, int i, int status)
                fch->param = 0;
                l->logi [3 * i].code = LS_FLOGI;
                fcmd->cmd = dma_map_single (fc->dev, l->logi + 3 * i, 3 * sizeof(logi),
-                                           FC_DMA_BIDIRECTIONAL);
+                                           DMA_BIDIRECTIONAL);
                fcmd->rsp = fcmd->cmd + sizeof(logi);
                fcmd->cmdlen = sizeof(logi);
                fcmd->rsplen = sizeof(logi);
@@ -434,11 +430,12 @@ static inline void fcp_scsi_receive(fc_channel *fc, int token, int status, fc_hd
                
                if (fcmd->data) {
                        if (SCpnt->use_sg)
-                               dma_unmap_sg(fc->dev, (struct scatterlist *)SCpnt->buffer, SCpnt->use_sg,
-                                            scsi_to_fc_dma_dir(SCpnt->sc_data_direction));
+                               dma_unmap_sg(fc->dev, (struct scatterlist *)SCpnt->buffer,
+                                               SCpnt->use_sg,
+                                               SCpnt->sc_data_direction);
                        else
                                dma_unmap_single(fc->dev, fcmd->data, SCpnt->request_bufflen,
-                                                scsi_to_fc_dma_dir(SCpnt->sc_data_direction));
+                                                SCpnt->sc_data_direction);
                }
                break;
        default:
@@ -579,7 +576,7 @@ int fcp_initialize(fc_channel *fcchain, int count)
                fc->ls = (void *)l;
                /* Assumes sizeof(fc_al_posmap) < 3 * sizeof(logi), which is true */
                fcmd->cmd = dma_map_single (fc->dev, l->logi + 3 * i, 3 * sizeof(logi),
-                                           FC_DMA_BIDIRECTIONAL);
+                                           DMA_BIDIRECTIONAL);
                fcmd->proto = PROTO_REPORT_AL_MAP;
                fcmd->token = i;
                fcmd->fc = fc;
@@ -598,7 +595,7 @@ int fcp_initialize(fc_channel *fcchain, int count)
                                } else {
                                        fc->state = FC_STATE_OFFLINE;
                                        enable_irq(fc->irq);
-                                       dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi), FC_DMA_BIDIRECTIONAL);
+                                       dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi), DMA_BIDIRECTIONAL);
                                        if (atomic_dec_and_test (&l->todo))
                                                goto all_done;
                                }
@@ -615,7 +612,7 @@ int fcp_initialize(fc_channel *fcchain, int count)
 
                                FCD(("SID %d DID %d\n", fc->sid, fc->did))
                                fcmd = l->fcmds + i;
-                               dma_unmap_single(fc->dev, fcmd->cmd, 3 * sizeof(logi), FC_DMA_BIDIRECTIONAL);
+                               dma_unmap_single(fc->dev, fcmd->cmd, 3 * sizeof(logi), DMA_BIDIRECTIONAL);
                                fch = &fcmd->fch;
                                FILL_FCHDR_RCTL_DID(fch, R_CTL_ELS_REQ, FS_FABRIC_F_PORT);
                                FILL_FCHDR_SID(fch, 0);
@@ -624,7 +621,7 @@ int fcp_initialize(fc_channel *fcchain, int count)
                                FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
                                fch->param = 0;
                                l->logi [3 * i].code = LS_FLOGI;
-                               fcmd->cmd = dma_map_single (fc->dev, l->logi + 3 * i, 3 * sizeof(logi), FC_DMA_BIDIRECTIONAL);
+                               fcmd->cmd = dma_map_single (fc->dev, l->logi + 3 * i, 3 * sizeof(logi), DMA_BIDIRECTIONAL);
                                fcmd->rsp = fcmd->cmd + sizeof(logi);
                                fcmd->cmdlen = sizeof(logi);
                                fcmd->rsplen = sizeof(logi);
@@ -652,7 +649,7 @@ all_done:
                switch (fc->state) {
                case FC_STATE_ONLINE: break;
                case FC_STATE_OFFLINE: break;
-               default: dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi), FC_DMA_BIDIRECTIONAL);
+               default: dma_unmap_single (fc->dev, l->fcmds[i].cmd, 3 * sizeof(logi), DMA_BIDIRECTIONAL);
                        break;
                }
        }
@@ -821,14 +818,14 @@ static int fcp_scsi_queue_it(fc_channel *fc, Scsi_Cmnd *SCpnt, fcp_cmnd *fcmd, i
                                cmd->fcp_data_len = SCpnt->request_bufflen;
                                fcmd->data = dma_map_single (fc->dev, (char *)SCpnt->request_buffer,
                                                             SCpnt->request_bufflen,
-                                                            scsi_to_fc_dma_dir(SCpnt->sc_data_direction));
+                                                            SCpnt->sc_data_direction);
                        } else {
                                struct scatterlist *sg = (struct scatterlist *)SCpnt->buffer;
                                int nents;
 
                                FCD(("XXX: Use_sg %d %d\n", SCpnt->use_sg, sg->length))
                                nents = dma_map_sg (fc->dev, sg, SCpnt->use_sg,
-                                                   scsi_to_fc_dma_dir(SCpnt->sc_data_direction));
+                                                   SCpnt->sc_data_direction);
                                if (nents > 1) printk ("%s: SG for nents %d (use_sg %d) not handled yet\n", fc->name, nents, SCpnt->use_sg);
                                fcmd->data = sg_dma_address(sg);
                                cmd->fcp_data_len = sg_dma_len(sg);
@@ -1065,7 +1062,7 @@ static int fc_do_els(fc_channel *fc, unsigned int alpa, void *data, int len)
        FILL_FCHDR_SEQ_DF_SEQ(fch, 0, 0, 0);
        FILL_FCHDR_OXRX(fch, 0xffff, 0xffff);
        fch->param = 0;
-       fcmd->cmd = dma_map_single (fc->dev, data, 2 * len, FC_DMA_BIDIRECTIONAL);
+       fcmd->cmd = dma_map_single (fc->dev, data, 2 * len, DMA_BIDIRECTIONAL);
        fcmd->rsp = fcmd->cmd + len;
        fcmd->cmdlen = len;
        fcmd->rsplen = len;
@@ -1100,7 +1097,7 @@ static int fc_do_els(fc_channel *fc, unsigned int alpa, void *data, int len)
        
        clear_bit(fcmd->token, fc->scsi_bitmap);
        fc->scsi_free++;
-       dma_unmap_single (fc->dev, fcmd->cmd, 2 * len, FC_DMA_BIDIRECTIONAL);
+       dma_unmap_single (fc->dev, fcmd->cmd, 2 * len, DMA_BIDIRECTIONAL);
        return l.status;
 }
 
index 61ddd65..76a9d68 100644 (file)
@@ -43,7 +43,7 @@ MODULE_DESCRIPTION("NatSemi SCx200 ACCESS.bus Driver");
 MODULE_LICENSE("GPL");
 
 #define MAX_DEVICES 4
-static int base[MAX_DEVICES] = { 0x840 };
+static int base[MAX_DEVICES] = { 0x820, 0x840 };
 MODULE_PARM(base, "1-4i");
 MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers");
 
@@ -510,7 +510,10 @@ static int __init scx200_acb_init(void)
        /* Verify that this really is a SCx200 processor */
        if (pci_find_device(PCI_VENDOR_ID_NS,
                            PCI_DEVICE_ID_NS_SCx200_BRIDGE,
-                           NULL) == NULL)
+                           NULL) == NULL
+           && pci_find_device(PCI_VENDOR_ID_NS,
+                              PCI_DEVICE_ID_NS_SC1100_BRIDGE,
+                              NULL) == NULL)
                return -ENODEV;
 
        rc = -ENXIO;
index 1a64946..c43ac49 100644 (file)
@@ -387,8 +387,8 @@ config BLK_DEV_OFFBOARD
          If in doubt, say N.
 
 config BLK_DEV_GENERIC
-       bool "Generic PCI IDE Chipset Support"
-       depends on PCI && BLK_DEV_IDEPCI
+       tristate "Generic PCI IDE Chipset Support"
+       depends on BLK_DEV_IDEPCI
 
 config BLK_DEV_OPTI621
        tristate "OPTi 82C621 chipset enhanced support (EXPERIMENTAL)"
index b660903..47761a0 100644 (file)
@@ -1713,7 +1713,22 @@ static void ide_device_shutdown(struct device *dev)
 {
        ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
 
+#ifdef CONFIG_ALPHA
+       /* On Alpha, halt(8) doesn't actually turn the machine off,
+          it puts you into the sort of firmware monitor. Typically,
+          it's used to boot another kernel image, so it's not much
+          different from reboot(8). Therefore, we don't need to
+          spin down the disk in this case, especially since Alpha
+          firmware doesn't handle disks in standby mode properly.
+          On the other hand, it's reasonably safe to turn the power
+          off when the shutdown process reaches the firmware prompt,
+          as the firmware initialization takes rather long time -
+          at least 10 seconds, which should be sufficient for
+          the disk to expire its write cache. */
+       if (system_state != SYSTEM_POWER_OFF) {
+#else
        if (system_state == SYSTEM_RESTART) {
+#endif
                ide_cacheflush_p(drive);
                return;
        }
index f15f6a3..ed26518 100644 (file)
@@ -800,18 +800,12 @@ void probe_hwif (ide_hwif_t *hwif)
 
        for (unit = 0; unit < MAX_DRIVES; ++unit) {
                ide_drive_t *drive = &hwif->drives[unit];
-               int enable_dma = 1;
 
                if (drive->present) {
                        if (hwif->tuneproc != NULL && 
                                drive->autotune == IDE_TUNE_AUTO)
                                /* auto-tune PIO mode */
                                hwif->tuneproc(drive, 255);
-
-#ifdef CONFIG_IDEDMA_ONLYDISK
-                       if (drive->media != ide_disk)
-                               enable_dma = 0;
-#endif
                        /*
                         * MAJOR HACK BARF :-/
                         *
@@ -831,7 +825,9 @@ void probe_hwif (ide_hwif_t *hwif)
                                 *   PARANOIA!!!
                                 */
                                hwif->ide_dma_off_quietly(drive);
-                               if (enable_dma)
+#ifdef CONFIG_IDEDMA_ONLYDISK
+                               if (drive->media == ide_disk)
+#endif
                                        hwif->ide_dma_check(drive);
                        }
                }
index f474e1d..0c3b227 100644 (file)
@@ -525,8 +525,6 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi
 {
        ide_pci_device_t *d = &aec62xx_chipsets[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index fe088bc..3f27275 100644 (file)
@@ -78,8 +78,6 @@ static void init_dma_aec62xx(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_ARTOP,
-               .device         = PCI_DEVICE_ID_ARTOP_ATP850UF,
                .name           = "AEC6210",
                .init_setup     = init_setup_aec62xx,
                .init_chipset   = init_chipset_aec62xx,
@@ -90,8 +88,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
                .enablebits     = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
                .bootable       = OFF_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_ARTOP,
-               .device         = PCI_DEVICE_ID_ARTOP_ATP860,
                .name           = "AEC6260",
                .init_setup     = init_setup_aec62xx,
                .init_chipset   = init_chipset_aec62xx,
@@ -101,8 +97,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
                .autodma        = NOAUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_ARTOP,
-               .device         = PCI_DEVICE_ID_ARTOP_ATP860R,
                .name           = "AEC6260R",
                .init_setup     = init_setup_aec62xx,
                .init_chipset   = init_chipset_aec62xx,
@@ -113,8 +107,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
                .enablebits     = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
                .bootable       = NEVER_BOARD,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_ARTOP,
-               .device         = PCI_DEVICE_ID_ARTOP_ATP865,
                .name           = "AEC6X80",
                .init_setup     = init_setup_aec6x80,
                .init_chipset   = init_chipset_aec62xx,
@@ -124,8 +116,6 @@ static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_ARTOP,
-               .device         = PCI_DEVICE_ID_ARTOP_ATP865R,
                .name           = "AEC6X80R",
                .init_setup     = init_setup_aec6x80,
                .init_chipset   = init_chipset_aec62xx,
index 748114e..989bb9b 100644 (file)
@@ -14,8 +14,6 @@ static void init_dma_ali15x3(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t ali15x3_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_AL,
-               .device         = PCI_DEVICE_ID_AL_M5229,
                .name           = "ALI15X3",
                .init_chipset   = init_chipset_ali15x3,
                .init_hwif      = init_hwif_ali15x3,
index 5093d3c..d6b0523 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * Version 2.13
  *
- * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s IDE driver for Linux.
+ * AMD 755/756/766/8111 and nVidia nForce/2/2s/3/3s/CK804/MCP04
+ * IDE driver for Linux.
  *
  * Copyright (c) 2000-2002 Vojtech Pavlik
  *
@@ -26,7 +27,8 @@
 #include <asm/io.h>
 
 #include "ide-timing.h"
-#include "amd74xx.h"
+
+#define DISPLAY_AMD_TIMINGS
 
 #define AMD_IDE_ENABLE         (0x00 + amd_config->base)
 #define AMD_IDE_CONFIG         (0x01 + amd_config->base)
@@ -68,6 +70,12 @@ static struct amd_ide_chip {
        { PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE,    0x50, AMD_UDMA_133 },
        { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA,   0x50, AMD_UDMA_133 },
        { PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,  0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE,        0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA,       0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2,      0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE,        0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA,       0x50, AMD_UDMA_133 },
+       { PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2,      0x50, AMD_UDMA_133 },
        { 0 }
 };
 
@@ -441,11 +449,55 @@ static void __init init_hwif_amd74xx(ide_hwif_t *hwif)
         hwif->drives[1].autodma = hwif->autodma;
 }
 
+#define DECLARE_AMD_DEV(name_str)                                      \
+       {                                                               \
+               .name           = name_str,                             \
+               .init_chipset   = init_chipset_amd74xx,                 \
+               .init_hwif      = init_hwif_amd74xx,                    \
+               .channels       = 2,                                    \
+               .autodma        = AUTODMA,                              \
+               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}}, \
+               .bootable       = ON_BOARD,                             \
+       }
+
+#define DECLARE_NV_DEV(name_str)                                       \
+       {                                                               \
+               .name           = name_str,                             \
+               .init_chipset   = init_chipset_amd74xx,                 \
+               .init_hwif      = init_hwif_amd74xx,                    \
+               .channels       = 2,                                    \
+               .autodma        = AUTODMA,                              \
+               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}}, \
+               .bootable       = ON_BOARD,                             \
+       }
+
+static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {
+       /*  0 */ DECLARE_AMD_DEV("AMD7401"),
+       /*  1 */ DECLARE_AMD_DEV("AMD7409"),
+       /*  2 */ DECLARE_AMD_DEV("AMD7411"),
+       /*  3 */ DECLARE_AMD_DEV("AMD7441"),
+       /*  4 */ DECLARE_AMD_DEV("AMD8111"),
+
+       /*  5 */ DECLARE_NV_DEV("NFORCE"),
+       /*  6 */ DECLARE_NV_DEV("NFORCE2"),
+       /*  7 */ DECLARE_NV_DEV("NFORCE2-U400R"),
+       /*  8 */ DECLARE_NV_DEV("NFORCE2-U400R-SATA"),
+       /*  9 */ DECLARE_NV_DEV("NFORCE3-150"),
+       /* 10 */ DECLARE_NV_DEV("NFORCE3-250"),
+       /* 11 */ DECLARE_NV_DEV("NFORCE3-250-SATA"),
+       /* 12 */ DECLARE_NV_DEV("NFORCE3-250-SATA2"),
+       /* 13 */ DECLARE_NV_DEV("NFORCE-CK804"),
+       /* 14 */ DECLARE_NV_DEV("NFORCE-CK804-SATA"),
+       /* 15 */ DECLARE_NV_DEV("NFORCE-CK804-SATA2"),
+       /* 16 */ DECLARE_NV_DEV("NFORCE-MCP04"),
+       /* 17 */ DECLARE_NV_DEV("NFORCE-MCP04-SATA"),
+       /* 18 */ DECLARE_NV_DEV("NFORCE-MCP04-SATA2")
+};
+
 static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
        amd_chipset = amd74xx_chipsets + id->driver_data;
        amd_config = amd_ide_chips + id->driver_data;
-       if (dev->device != amd_chipset->device) BUG();
        if (dev->device != amd_config->id) BUG();
        ide_setup_pci_device(dev, amd_chipset);
        return 0;
@@ -465,6 +517,12 @@ static struct pci_device_id amd74xx_pci_tbl[] = {
        { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE,      PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 },
        { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA,     PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 },
        { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,    PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 13 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 14 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 15 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE,  PCI_ANY_ID, PCI_ANY_ID, 0, 0, 16 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 17 },
+       { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 18 },
        { 0, },
 };
 MODULE_DEVICE_TABLE(pci, amd74xx_pci_tbl);
diff --git a/drivers/ide/pci/amd74xx.h b/drivers/ide/pci/amd74xx.h
deleted file mode 100644 (file)
index 376f862..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-#ifndef AMD74XX_H
-#define AMD74XX_H
-
-#include <linux/config.h>
-#include <linux/pci.h>
-#include <linux/ide.h>
-
-#define DISPLAY_AMD_TIMINGS
-
-static unsigned int init_chipset_amd74xx(struct pci_dev *, const char *);
-static void init_hwif_amd74xx(ide_hwif_t *);
-
-static ide_pci_device_t amd74xx_chipsets[] __devinitdata = {
-       {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_AMD,
-               .device         = PCI_DEVICE_ID_AMD_COBRA_7401,
-               .name           = "AMD7401",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_AMD,
-               .device         = PCI_DEVICE_ID_AMD_VIPER_7409,
-               .name           = "AMD7409",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_AMD,
-               .device         = PCI_DEVICE_ID_AMD_VIPER_7411,
-               .name           = "AMD7411",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_AMD,
-               .device         = PCI_DEVICE_ID_AMD_OPUS_7441,
-               .name           = "AMD7441",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_AMD,
-               .device         = PCI_DEVICE_ID_AMD_8111_IDE,
-               .name           = "AMD8111",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .autodma        = AUTODMA,
-               .channels       = 2,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 5 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE_IDE,
-               .name           = "NFORCE",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 6 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE,
-               .name           = "NFORCE2",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 7 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE,
-               .name           = "NFORCE2S",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 8 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA,
-               .name           = "NFORCE2S-SATA",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 9 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE3_IDE,
-               .name           = "NFORCE3",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 10 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE3S_IDE,
-               .name           = "NFORCE3S",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 11 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA,
-               .name           = "NFORCE3S-SATA",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },
-       {       /* 12 */
-               .vendor         = PCI_VENDOR_ID_NVIDIA,
-               .device         = PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2,
-               .name           = "NFORCE3S-SATA2",
-               .init_chipset   = init_chipset_amd74xx,
-               .init_hwif      = init_hwif_amd74xx,
-               .channels       = 2,
-               .autodma        = AUTODMA,
-               .enablebits     = {{0x50,0x02,0x02}, {0x50,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       }
-};
-
-#endif /* AMD74XX_H */
index 18475a8..bd37085 100644 (file)
@@ -458,8 +458,6 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
 
 static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_ATI,
-               .device         = PCI_DEVICE_ID_ATI_IXP_IDE,
                .name           = "ATIIXP",
                .init_chipset   = init_chipset_atiixp,
                .init_hwif      = init_hwif_atiixp,
@@ -481,11 +479,7 @@ static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
 
 static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &atiixp_pci_info[id->driver_data];
-
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]);
        return 0;
 }
 
index c04122f..1f4d084 100644 (file)
@@ -746,10 +746,7 @@ static void __init init_hwif_cmd64x (ide_hwif_t *hwif)
 
 static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &cmd64x_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &cmd64x_chipsets[id->driver_data]);
        return 0;
 }
 
index 423e95e..f5dde23 100644 (file)
@@ -65,8 +65,6 @@ static void init_hwif_cmd64x(ide_hwif_t *);
 
 static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_CMD_643,
                .name           = "CMD643",
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
@@ -74,8 +72,6 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_CMD_646,
                .name           = "CMD646",
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
@@ -84,8 +80,6 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
                .enablebits     = {{0x00,0x00,0x00}, {0x51,0x80,0x80}},
                .bootable       = ON_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device = PCI_DEVICE_ID_CMD_648,
                .name           = "CMD648",
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
@@ -93,8 +87,6 @@ static ide_pci_device_t cmd64x_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_CMD_649,
                .name           = "CMD649",
                .init_chipset   = init_chipset_cmd64x,
                .init_hwif      = init_hwif_cmd64x,
index 3395306..f2cdc53 100644 (file)
@@ -13,28 +13,24 @@ static void cs5520_init_setup_dma(struct pci_dev *dev, struct ide_pci_device_s *
 
 static ide_pci_device_t cyrix_chipsets[] __devinitdata = {
        {
-               .vendor         = PCI_VENDOR_ID_CYRIX,
-               .device         = PCI_DEVICE_ID_CYRIX_5510,
                .name           = "Cyrix 5510",
                .init_chipset   = init_chipset_cs5520,
                .init_setup_dma = cs5520_init_setup_dma,
                .init_hwif      = init_hwif_cs5520,
-               .isa_ports      = 1,
                .channels       = 2,
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
+               .flags          = IDEPCI_FLAG_ISA_PORTS,
        },
        {
-               .vendor         = PCI_VENDOR_ID_CYRIX,
-               .device         = PCI_DEVICE_ID_CYRIX_5520,
                .name           = "Cyrix 5520",
                .init_chipset   = init_chipset_cs5520,
                .init_setup_dma = cs5520_init_setup_dma,
                .init_hwif      = init_hwif_cs5520,
-               .isa_ports      = 1,
                .channels       = 2,
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
+               .flags          = IDEPCI_FLAG_ISA_PORTS,
        }
 };
 
index 7544904..19c97e8 100644 (file)
@@ -406,10 +406,7 @@ static void __init init_hwif_cs5530 (ide_hwif_t *hwif)
 
 static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &cs5530_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &cs5530_chipsets[id->driver_data]);
        return 0;
 }
 
index cf651f2..08fe18a 100644 (file)
@@ -12,14 +12,13 @@ static void init_hwif_cs5530(ide_hwif_t *);
 
 static ide_pci_device_t cs5530_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_CYRIX,
-               .device         = PCI_DEVICE_ID_CYRIX_5530_IDE,
                .name           = "CS5530",
                .init_chipset   = init_chipset_cs5530,
                .init_hwif      = init_hwif_cs5530,
                .channels       = 2,
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
+               .flags          = IDEPCI_FLAG_FORCE_MASTER,
        }
 };
 
index 8a22479..cccb69b 100644 (file)
@@ -70,8 +70,6 @@ static void init_iops_cy82c693(ide_hwif_t *);
 
 static ide_pci_device_t cy82c693_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_CONTAQ,
-               .device         = PCI_DEVICE_ID_CONTAQ_82C693,
                .name           = "CY82C693",
                .init_chipset   = init_chipset_cy82c693,
                .init_iops      = init_iops_cy82c693,
index ca99977..e732795 100644 (file)
@@ -77,8 +77,6 @@ static void __init init_hwif_generic (ide_hwif_t *hwif)
 
        if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
                ide_pci_device_t *unknown = unknown_chipset;
-//             unknown->vendor = dev->vendor;
-//             unknown->device = dev->device;
                init_setup_unknown(dev, unknown);
                return 1;
        }
@@ -99,15 +97,13 @@ static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_devi
        ide_pci_device_t *d = &generic_chipsets[id->driver_data];
        u16 command;
 
-       if (dev->device != d->device)
-               BUG();
-       if ((d->vendor == PCI_VENDOR_ID_UMC) &&
-           (d->device == PCI_DEVICE_ID_UMC_UM8886A) &&
+       if (dev->vendor == PCI_VENDOR_ID_UMC &&
+           dev->device == PCI_DEVICE_ID_UMC_UM8886A &&
            (!(PCI_FUNC(dev->devfn) & 1)))
                return 1; /* UM8886A/BF pair */
 
-       if ((d->vendor == PCI_VENDOR_ID_OPTI) &&
-           (d->device == PCI_DEVICE_ID_OPTI_82C558) &&
+       if (dev->vendor == PCI_VENDOR_ID_OPTI &&
+           dev->device == PCI_DEVICE_ID_OPTI_82C558 &&
            (!(PCI_FUNC(dev->devfn) & 1)))
                return 1;
 
index fdaaf21..a666920 100644 (file)
@@ -10,8 +10,6 @@ static void init_hwif_generic(ide_hwif_t *);
 
 static ide_pci_device_t generic_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_NS,
-               .device         = PCI_DEVICE_ID_NS_87410,
                .name           = "NS87410",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -20,8 +18,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .enablebits     = {{0x43,0x08,0x08}, {0x47,0x08,0x08}},
                .bootable       = ON_BOARD,
         },{    /* 1 */
-               .vendor         = PCI_VENDOR_ID_PCTECH,
-               .device         = PCI_DEVICE_ID_PCTECH_SAMURAI_IDE,
                .name           = "SAMURAI",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -29,8 +25,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_HOLTEK,
-               .device         = PCI_DEVICE_ID_HOLTEK_6565,
                .name           = "HT6565",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -38,8 +32,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_UMC,
-               .device         = PCI_DEVICE_ID_UMC_UM8673F,
                .name           = "UM8673F",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -47,8 +39,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NODMA,
                .bootable       = ON_BOARD,
        },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_UMC,
-               .device         = PCI_DEVICE_ID_UMC_UM8886A,
                .name           = "UM8886A",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -56,8 +46,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NODMA,
                .bootable       = ON_BOARD,
        },{     /* 5 */
-               .vendor         = PCI_VENDOR_ID_UMC,
-               .device         = PCI_DEVICE_ID_UMC_UM8886BF,
                .name           = "UM8886BF",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -65,8 +53,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NODMA,
                .bootable       = ON_BOARD,
        },{     /* 6 */
-               .vendor         = PCI_VENDOR_ID_HINT,
-               .device         = PCI_DEVICE_ID_HINT_VXPROII_IDE,
                .name           = "HINT_IDE",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -74,8 +60,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 7 */
-               .vendor         = PCI_VENDOR_ID_VIA,
-               .device         = PCI_DEVICE_ID_VIA_82C561,
                .name           = "VIA_IDE",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -83,8 +67,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NOAUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 8 */
-               .vendor         = PCI_VENDOR_ID_OPTI,
-               .device         = PCI_DEVICE_ID_OPTI_82C558,
                .name           = "OPTI621V",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -92,8 +74,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NOAUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 9 */
-               .vendor         = PCI_VENDOR_ID_VIA,
-               .device         = PCI_DEVICE_ID_VIA_8237_SATA,
                .name           = "VIA8237SATA",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -101,8 +81,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{ /* 10 */
-               .vendor         = PCI_VENDOR_ID_TOSHIBA,
-               .device         = PCI_DEVICE_ID_TOSHIBA_PICCOLO,
                .name           = "Piccolo0102",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -110,8 +88,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NOAUTODMA,
                .bootable       = ON_BOARD,
        },{ /* 11 */
-               .vendor         = PCI_VENDOR_ID_TOSHIBA,
-               .device         = PCI_DEVICE_ID_TOSHIBA_PICCOLO_1,
                .name           = "Piccolo0103",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -119,8 +95,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
                .autodma        = NOAUTODMA,
                .bootable       = ON_BOARD,
        },{ /* 12 */
-               .vendor         = PCI_VENDOR_ID_TOSHIBA,
-               .device         = PCI_DEVICE_ID_TOSHIBA_PICCOLO_2,
                .name           = "Piccolo0105",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
@@ -133,8 +107,6 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
 #if 0
 static ide_pci_device_t unknown_chipset[] __devinitdata = {
        {       /* 0 */
-               .vendor         = 0,
-               .device         = 0,
                .name           = "PCI_IDE",
                .init_chipset   = init_chipset_generic,
                .init_hwif      = init_hwif_generic,
index 9fa3813..465f567 100644 (file)
@@ -18,8 +18,6 @@ static void init_hwif_hpt34x(ide_hwif_t *);
 
 static ide_pci_device_t hpt34x_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT343,
                .name           = "HPT34X",
                .init_chipset   = init_chipset_hpt34x,
                .init_hwif      = init_hwif_hpt34x,
index d3129b2..5ca4a58 100644 (file)
@@ -1241,8 +1241,6 @@ static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_devic
 {
        ide_pci_device_t *d = &hpt366_chipsets[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index 8987b25..7b3d8b4 100644 (file)
@@ -425,8 +425,6 @@ static void init_dma_hpt366(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT366,
                .name           = "HPT366",
                .init_setup     = init_setup_hpt366,
                .init_chipset   = init_chipset_hpt366,
@@ -437,8 +435,6 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
                .bootable       = OFF_BOARD,
                .extra          = 240
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT372,
                .name           = "HPT372A",
                .init_setup     = init_setup_hpt37x,
                .init_chipset   = init_chipset_hpt366,
@@ -448,8 +444,6 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT302,
                .name           = "HPT302",
                .init_setup     = init_setup_hpt37x,
                .init_chipset   = init_chipset_hpt366,
@@ -459,8 +453,6 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT371,
                .name           = "HPT371",
                .init_setup     = init_setup_hpt37x,
                .init_chipset   = init_chipset_hpt366,
@@ -470,8 +462,6 @@ static ide_pci_device_t hpt366_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_TTI,
-               .device         = PCI_DEVICE_ID_TTI_HPT374,
                .name           = "HPT374",
                .init_setup     = init_setup_hpt374,
                .init_chipset   = init_chipset_hpt366,
index 873e56e..b65ce08 100644 (file)
@@ -288,11 +288,10 @@ static void __init init_hwif_it8172 (ide_hwif_t *hwif)
 
 static int __devinit it8172_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &it8172_chipsets[id->driver_data];
         if ((!(PCI_FUNC(dev->devfn) & 1) ||
             (!((dev->class >> 8) == PCI_CLASS_STORAGE_IDE))))
                 return 1; /* IT8172 is more than only a IDE controller */
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &it8172_chipsets[id->driver_data]);
        return 0;
 }
 
index e80bc62..fbc2b64 100644 (file)
@@ -20,8 +20,6 @@ static void init_hwif_it8172(ide_hwif_t *);
 
 static ide_pci_device_t it8172_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_ITE,
-               .device         = PCI_DEVICE_ID_ITE_IT8172G,
                .name           = "IT8172G",
                .init_setup     = init_setup_it8172,
                .init_chipset   = init_chipset_it8172,
index 279c032..1809edd 100644 (file)
@@ -219,10 +219,7 @@ static void __init init_hwif_ns87415 (ide_hwif_t *hwif)
 
 static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &ns87415_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &ns87415_chipsets[id->driver_data]);
        return 0;
 }
 
index 8c4c1b8..a2594c7 100644 (file)
@@ -9,8 +9,6 @@ static void init_hwif_ns87415(ide_hwif_t *);
 
 static ide_pci_device_t ns87415_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_NS,
-               .device         = PCI_DEVICE_ID_NS_87415,
                .name           = "NS87415",
                .init_hwif      = init_hwif_ns87415,
                .channels       = 2,
index 8a6c316..3ca7db7 100644 (file)
@@ -355,10 +355,7 @@ static void __init init_setup_opti621 (struct pci_dev *dev, ide_pci_device_t *d)
 
 static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &opti621_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &opti621_chipsets[id->driver_data]);
        return 0;
 }
 
index 8860eeb..a0e6504 100644 (file)
@@ -10,8 +10,6 @@ static void init_hwif_opti621(ide_hwif_t *);
 
 static ide_pci_device_t opti621_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_OPTI,
-               .device         = PCI_DEVICE_ID_OPTI_82C621,
                .name           = "OPTI621",
                .init_setup     = init_setup_opti621,
                .init_hwif      = init_hwif_opti621,
@@ -20,8 +18,6 @@ static ide_pci_device_t opti621_chipsets[] __devinitdata = {
                .enablebits     = {{0x45,0x80,0x00}, {0x40,0x08,0x00}},
                .bootable       = ON_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_OPTI,
-               .device         = PCI_DEVICE_ID_OPTI_82C825,
                .name           = "OPTI621X",
                .init_setup     = init_setup_opti621,
                .init_hwif      = init_hwif_opti621,
index f753c63..fbc0bd8 100644 (file)
@@ -514,8 +514,6 @@ static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_de
 {
        ide_pci_device_t *d = &pdcnew_chipsets[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index d651f8b..0abec0e 100644 (file)
@@ -53,8 +53,6 @@ static void init_hwif_pdc202new(ide_hwif_t *);
 
 static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20268,
                .name           = "PDC20268",
                .init_setup     = init_setup_pdcnew,
                .init_chipset   = init_chipset_pdcnew,
@@ -63,8 +61,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20269,
                .name           = "PDC20269",
                .init_setup     = init_setup_pdcnew,
                .init_chipset   = init_chipset_pdcnew,
@@ -73,8 +69,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20270,
                .name           = "PDC20270",
                .init_setup     = init_setup_pdc20270,
                .init_chipset   = init_chipset_pdcnew,
@@ -86,8 +80,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
 #endif
                .bootable       = OFF_BOARD,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20271,
                .name           = "PDC20271",
                .init_setup     = init_setup_pdcnew,
                .init_chipset   = init_chipset_pdcnew,
@@ -96,8 +88,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20275,
                .name           = "PDC20275",
                .init_setup     = init_setup_pdcnew,
                .init_chipset   = init_chipset_pdcnew,
@@ -106,8 +96,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = OFF_BOARD,
        },{     /* 5 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20276,
                .name           = "PDC20276",
                .init_setup     = init_setup_pdc20276,
                .init_chipset   = init_chipset_pdcnew,
@@ -119,8 +107,6 @@ static ide_pci_device_t pdcnew_chipsets[] __devinitdata = {
 #endif
                .bootable       = OFF_BOARD,
        },{     /* 6 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20277,
                .name           = "PDC20277",
                .init_setup     = init_setup_pdcnew,
                .init_chipset   = init_chipset_pdcnew,
index aa04a13..99fbe04 100644 (file)
@@ -884,8 +884,6 @@ static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_dev
 {
        ide_pci_device_t *d = &pdc202xx_chipsets[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index b8a5ed6..95ea2c8 100644 (file)
@@ -180,8 +180,6 @@ static void init_dma_pdc202xx(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20246,
                .name           = "PDC20246",
                .init_setup     = init_setup_pdc202ata4,
                .init_chipset   = init_chipset_pdc202xx,
@@ -195,8 +193,6 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
                .bootable       = OFF_BOARD,
                .extra          = 16,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20262,
                .name           = "PDC20262",
                .init_setup     = init_setup_pdc202ata4,
                .init_chipset   = init_chipset_pdc202xx,
@@ -209,9 +205,8 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
 #endif
                .bootable       = OFF_BOARD,
                .extra          = 48,
+               .flags          = IDEPCI_FLAG_FORCE_PDC,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20263,
                .name           = "PDC20263",
                .init_setup     = init_setup_pdc202ata4,
                .init_chipset   = init_chipset_pdc202xx,
@@ -225,8 +220,6 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
                .bootable       = OFF_BOARD,
                .extra          = 48,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20265,
                .name           = "PDC20265",
                .init_setup     = init_setup_pdc20265,
                .init_chipset   = init_chipset_pdc202xx,
@@ -239,9 +232,8 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = {
 #endif
                .bootable       = OFF_BOARD,
                .extra          = 48,
+               .flags          = IDEPCI_FLAG_FORCE_PDC,
        },{     /* 4 */
-               .vendor         = PCI_VENDOR_ID_PROMISE,
-               .device         = PCI_DEVICE_ID_PROMISE_20267,
                .name           = "PDC20267",
                .init_setup     = init_setup_pdc202xx,
                .init_chipset   = init_chipset_pdc202xx,
index c7d6878..3d21a5b 100644 (file)
@@ -744,8 +744,6 @@ static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_
 {
        ide_pci_device_t *d = &piix_pci_info[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index a30353b..f71db14 100644 (file)
@@ -13,10 +13,8 @@ static void init_setup_piix(struct pci_dev *, ide_pci_device_t *);
 static unsigned int __devinit init_chipset_piix(struct pci_dev *, const char *);
 static void init_hwif_piix(ide_hwif_t *);
 
-#define DECLARE_PIIX_DEV(pci_id, name_str) \
+#define DECLARE_PIIX_DEV(name_str) \
        {                                               \
-               .vendor         = PCI_VENDOR_ID_INTEL,  \
-               .device         = pci_id,               \
                .name           = name_str,             \
                .init_setup     = init_setup_piix,      \
                .init_chipset   = init_chipset_piix,    \
@@ -33,12 +31,10 @@ static void init_hwif_piix(ide_hwif_t *);
  */
  
 static ide_pci_device_t piix_pci_info[] __devinitdata = {
-       /* 0  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82371FB_0,  "PIIXa"),
-       /* 1  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82371FB_1,  "PIIXb"),
+       /*  0 */ DECLARE_PIIX_DEV("PIIXa"),
+       /*  1 */ DECLARE_PIIX_DEV("PIIXb"),
 
        {       /* 2 */
-               .vendor         = PCI_VENDOR_ID_INTEL,
-               .device         = PCI_DEVICE_ID_INTEL_82371MX,
                .name           = "MPIIX",
                .init_setup     = init_setup_piix,
                .init_hwif      = init_hwif_piix,
@@ -48,24 +44,24 @@ static ide_pci_device_t piix_pci_info[] __devinitdata = {
                .bootable       = ON_BOARD,
        },
 
-       /* 3  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82371SB_1,  "PIIX3"),
-       /* 4  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82371AB,    "PIIX4"),
-       /* 5  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801AB_1,  "ICH0"),
-       /* 6  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82443MX_1,  "PIIX4"),
-       /* 7  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801AA_1,  "ICH"),
-       /* 8  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82372FB_1,  "PIIX4"),
-       /* 9  */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82451NX,    "PIIX4"),
-       /* 10 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801BA_9,  "ICH2"),
-       /* 11 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801BA_8,  "ICH2M"),
-       /* 12 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801CA_10, "ICH3M"),
-       /* 13 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801CA_11, "ICH3"),
-       /* 14 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801DB_11, "ICH4"),
-       /* 15 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801EB_11, "ICH5"),
-       /* 16 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801E_11,  "C-ICH"),
-       /* 17 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801DB_10, "ICH4"),
-       /* 18 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_82801EB_1,  "ICH5-SATA"),
-       /* 19 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ESB_2,      "ICH5"),
-       /* 20 */ DECLARE_PIIX_DEV(PCI_DEVICE_ID_INTEL_ICH6_19,    "ICH6")
+       /*  3 */ DECLARE_PIIX_DEV("PIIX3"),
+       /*  4 */ DECLARE_PIIX_DEV("PIIX4"),
+       /*  5 */ DECLARE_PIIX_DEV("ICH0"),
+       /*  6 */ DECLARE_PIIX_DEV("PIIX4"),
+       /*  7 */ DECLARE_PIIX_DEV("ICH"),
+       /*  8 */ DECLARE_PIIX_DEV("PIIX4"),
+       /*  9 */ DECLARE_PIIX_DEV("PIIX4"),
+       /* 10 */ DECLARE_PIIX_DEV("ICH2"),
+       /* 11 */ DECLARE_PIIX_DEV("ICH2M"),
+       /* 12 */ DECLARE_PIIX_DEV("ICH3M"),
+       /* 13 */ DECLARE_PIIX_DEV("ICH3"),
+       /* 14 */ DECLARE_PIIX_DEV("ICH4"),
+       /* 15 */ DECLARE_PIIX_DEV("ICH5"),
+       /* 16 */ DECLARE_PIIX_DEV("C-ICH"),
+       /* 17 */ DECLARE_PIIX_DEV("ICH4"),
+       /* 18 */ DECLARE_PIIX_DEV("ICH5-SATA"),
+       /* 19 */ DECLARE_PIIX_DEV("ICH5"),
+       /* 20 */ DECLARE_PIIX_DEV("ICH6")
 };
 
 #endif /* PIIX_H */
index 963b845..7866906 100644 (file)
@@ -56,10 +56,7 @@ static void __init init_hwif_rz1000 (ide_hwif_t *hwif)
 
 static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &rz1000_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &rz1000_chipsets[id->driver_data]);
        return 0;
 }
 
index 0f4575e..5c7c611 100644 (file)
@@ -8,17 +8,13 @@
 static void init_hwif_rz1000(ide_hwif_t *);
 
 static ide_pci_device_t rz1000_chipsets[] __devinitdata = {
-{
-               .vendor         = PCI_VENDOR_ID_PCTECH,
-               .device         = PCI_DEVICE_ID_PCTECH_RZ1000,
+       {
                .name           = "RZ1000",
                .init_hwif      = init_hwif_rz1000,
                .channels       = 2,
                .autodma        = NODMA,
                .bootable       = ON_BOARD,
        },{
-               .vendor         = PCI_VENDOR_ID_PCTECH,
-               .device         = PCI_DEVICE_ID_PCTECH_RZ1001,
                .name           = "RZ1001",
                .init_hwif      = init_hwif_rz1000,
                .channels       = 2,
index 29a263a..58d1e58 100644 (file)
@@ -547,10 +547,7 @@ static void __init init_hwif_sc1200 (ide_hwif_t *hwif)
 
 static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &sc1200_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &sc1200_chipsets[id->driver_data]);
        return 0;
 }
 
index 22e303d..c58e689 100644 (file)
@@ -12,8 +12,6 @@ static void init_hwif_sc1200(ide_hwif_t *);
 
 static ide_pci_device_t sc1200_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_NS,
-               .device         = PCI_DEVICE_ID_NS_SCx200_IDE,
                .name           = "SC1200",
                .init_chipset   = init_chipset_sc1200,
                .init_hwif      = init_hwif_sc1200,
index 3418232..27d907c 100644 (file)
@@ -777,8 +777,8 @@ static void __init init_setup_csb6 (struct pci_dev *dev, ide_pci_device_t *d)
                d->autodma = AUTODMA;
 #endif
 
-       d->channels = (((d->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE) ||
-                       (d->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)) &&
+       d->channels = ((dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE ||
+                       dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2) &&
                       (!(PCI_FUNC(dev->devfn) & 1))) ? 1 : 2;
 
        ide_setup_pci_device(dev, d);
@@ -798,8 +798,6 @@ static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device
 {
        ide_pci_device_t *d = &serverworks_chipsets[id->driver_data];
 
-       if (dev->device != d->device)
-               BUG();
        d->init_setup(dev, d);
        return 0;
 }
index 8a1d9fe..aa8bd8b 100644 (file)
@@ -31,8 +31,6 @@ static void init_dma_svwks(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_SERVERWORKS,
-               .device         = PCI_DEVICE_ID_SERVERWORKS_OSB4IDE,
                .name           = "SvrWks OSB4",
                .init_setup     = init_setup_svwks,
                .init_chipset   = init_chipset_svwks,
@@ -41,8 +39,6 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_SERVERWORKS,
-               .device         = PCI_DEVICE_ID_SERVERWORKS_CSB5IDE,
                .name           = "SvrWks CSB5",
                .init_setup     = init_setup_svwks,
                .init_chipset   = init_chipset_svwks,
@@ -52,8 +48,6 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_SERVERWORKS,
-               .device         = PCI_DEVICE_ID_SERVERWORKS_CSB6IDE,
                .name           = "SvrWks CSB6",
                .init_setup     = init_setup_csb6,
                .init_chipset   = init_chipset_svwks,
@@ -63,8 +57,6 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 3 */
-               .vendor         = PCI_VENDOR_ID_SERVERWORKS,
-               .device         = PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2,
                .name           = "SvrWks CSB6",
                .init_setup     = init_setup_csb6,
                .init_chipset   = init_chipset_svwks,
index d8e739f..0187aaf 100644 (file)
@@ -757,8 +757,6 @@ pci_init_sgiioc4(struct pci_dev *dev, ide_pci_device_t * d)
 static ide_pci_device_t sgiioc4_chipsets[] __devinitdata = {
        {
         /* Channel 0 */
-        .vendor = PCI_VENDOR_ID_SGI,
-        .device = PCI_DEVICE_ID_SGI_IOC4,
         .name = "SGIIOC4",
         .init_hwif = ide_init_sgiioc4,
         .init_dma = ide_dma_sgiioc4,
@@ -772,16 +770,7 @@ static ide_pci_device_t sgiioc4_chipsets[] __devinitdata = {
 static int __devinit
 sgiioc4_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &sgiioc4_chipsets[id->driver_data];
-       if (dev->device != d->device) {
-               printk(KERN_ERR "Error in %s(dev 0x%p | id 0x%p )\n",
-                      __FUNCTION__, (void *) dev, (void *) id);
-               BUG();
-       }
-
-       if (pci_init_sgiioc4(dev, d))
-               return 0;
-
+       pci_init_sgiioc4(dev, &sgiioc4_chipsets[id->driver_data]);
        return 0;
 }
 
index ff530bf..5b2ab76 100644 (file)
@@ -21,7 +21,6 @@
  *     if neccessary
  */
 
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 
 #include "siimage.h"
 
-#if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
-#include <linux/proc_fs.h>
-
-static u8 siimage_proc = 0;
-#define SIIMAGE_MAX_DEVS               16
-static struct pci_dev *siimage_devs[SIIMAGE_MAX_DEVS];
-static int n_siimage_devs;
-#endif /* defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS) */
-
 /**
  *     pdev_is_sata            -       check if device is SATA
  *     @pdev:  PCI device to check
@@ -121,67 +111,6 @@ static inline unsigned long siimage_seldev(ide_drive_t *drive, int r)
        return base;
 }
 
-#if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
-/**
- *     print_siimage_get_info  -       print minimal proc information
- *     @buf: buffer to write into (kernel space)
- *     @dev: PCI device we are describing
- *     @index: Controller number
- *
- *     Print the basic information for the state of the CMD680/SI3112
- *     channel. We don't actually dump a lot of information out for
- *     this controller although we could expand it if we needed.
- */
-static char *print_siimage_get_info (char *buf, struct pci_dev *dev, int index)
-{
-       char *p         = buf;
-       u8 mmio         = (pci_get_drvdata(dev) != NULL) ? 1 : 0;
-       unsigned long bmdma = pci_resource_start(dev, 4);
-       
-       if(mmio)
-               bmdma = pci_resource_start(dev, 5);
-
-       p += sprintf(p, "\nController: %d\n", index);
-       p += sprintf(p, "SiI%x Chipset.\n", dev->device);
-       if (mmio)
-               p += sprintf(p, "MMIO Base 0x%lx\n", bmdma);
-       p += sprintf(p, "%s-DMA Base 0x%lx\n", (mmio)?"MMIO":"BM", bmdma);
-       p += sprintf(p, "%s-DMA Base 0x%lx\n", (mmio)?"MMIO":"BM", bmdma+8);
-       return (char *)p;
-}
-
-/**
- *     siimage_get_info        -       proc callback
- *     @buffer: kernel buffer to complete
- *     @addr: written with base of data to return
- *     offset: seek offset
- *     count: bytes to fill in 
- *
- *     Called when the user reads data from the virtual file for this
- *     controller from /proc
- */
-static int siimage_get_info (char *buffer, char **addr, off_t offset, int count)
-{
-       char *p = buffer;
-       int len;
-       u16 i;
-
-       p += sprintf(p, "\n");
-       for (i = 0; i < n_siimage_devs; i++) {
-               struct pci_dev *dev     = siimage_devs[i];
-               p = print_siimage_get_info(p, dev, i);
-       }
-       /* p - buffer must be less than 4k! */
-       len = (p - buffer) - offset;
-       *addr = buffer + offset;
-       
-       return len > count ? count : len;
-}
-
-#endif /* defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS) */
-
 /**
  *     siimage_ratemask        -       Compute available modes
  *     @drive: IDE drive
@@ -779,15 +708,6 @@ static void proc_reports_siimage (struct pci_dev *dev, u8 clocking, const char *
                        case 0x00: printk("== 100\n"); break;
                }
        }
-
-#if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
-       siimage_devs[n_siimage_devs++] = dev;
-
-       if (!siimage_proc) {
-               siimage_proc = 1;
-               ide_pci_create_host_proc("siimage", siimage_get_info);
-       }
-#endif /* DISPLAY_SIIMAGE_TIMINGS && CONFIG_PROC_FS */
 }
 
 /**
@@ -1183,10 +1103,7 @@ static void __init init_hwif_siimage (ide_hwif_t *hwif)
  
 static int __devinit siimage_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &siimage_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &siimage_chipsets[id->driver_data]);
        return 0;
 }
 
index 1f0885e..b83b4c3 100644 (file)
@@ -1,14 +1,11 @@
 #ifndef SIIMAGE_H
 #define SIIMAGE_H
 
-#include <linux/config.h>
 #include <linux/pci.h>
 #include <linux/ide.h>
 
 #include <asm/io.h>
 
-#define DISPLAY_SIIMAGE_TIMINGS
-
 #undef SIIMAGE_VIRTUAL_DMAPIO
 #undef SIIMAGE_BUFFERED_TASKFILE
 #undef SIIMAGE_LARGE_DMA
@@ -27,8 +24,6 @@ static void init_hwif_siimage(ide_hwif_t *);
 
 static ide_pci_device_t siimage_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_SII_680,
                .name           = "SiI680",
                .init_chipset   = init_chipset_siimage,
                .init_iops      = init_iops_siimage,
@@ -37,8 +32,6 @@ static ide_pci_device_t siimage_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_SII_3112,
                .name           = "SiI3112 Serial ATA",
                .init_chipset   = init_chipset_siimage,
                .init_iops      = init_iops_siimage,
@@ -47,8 +40,6 @@ static ide_pci_device_t siimage_chipsets[] __devinitdata = {
                .autodma        = AUTODMA,
                .bootable       = ON_BOARD,
        },{     /* 2 */
-               .vendor         = PCI_VENDOR_ID_CMD,
-               .device         = PCI_DEVICE_ID_SII_1210SA,
                .name           = "Adaptec AAR-1210SA",
                .init_chipset   = init_chipset_siimage,
                .init_iops      = init_iops_siimage,
index 6c56f56..6254eab 100644 (file)
@@ -946,10 +946,7 @@ static void __init init_hwif_sis5513 (ide_hwif_t *hwif)
 
 static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &sis5513_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &sis5513_chipsets[id->driver_data]);
        return 0;
 }
 
index 5627097..d66e9a7 100644 (file)
@@ -12,8 +12,6 @@ static void init_hwif_sis5513(ide_hwif_t *);
 
 static ide_pci_device_t sis5513_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_SI,
-               .device         = PCI_DEVICE_ID_SI_5513,
                .name           = "SIS5513",
                .init_chipset   = init_chipset_sis5513,
                .init_hwif      = init_hwif_sis5513,
index 516f799..4706ebf 100644 (file)
@@ -483,10 +483,7 @@ static void __init init_hwif_sl82c105(ide_hwif_t *hwif)
 
 static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &sl82c105_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &sl82c105_chipsets[id->driver_data]);
        return 0;
 }
 
index a4e6e46..f2d34a2 100644 (file)
@@ -11,8 +11,6 @@ static void init_dma_sl82c105(ide_hwif_t *, unsigned long);
 
 static ide_pci_device_t sl82c105_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_WINBOND,
-               .device         = PCI_DEVICE_ID_WINBOND_82C105,
                .name           = "W82C105",
                .init_chipset   = init_chipset_sl82c105,
                .init_hwif      = init_hwif_sl82c105,
index 7fa07e1..7842242 100644 (file)
@@ -366,10 +366,7 @@ static void __init init_hwif_slc90e66 (ide_hwif_t *hwif)
 
 static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &slc90e66_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &slc90e66_chipsets[id->driver_data]);
        return 0;
 }
 
index 0771637..5701795 100644 (file)
@@ -14,8 +14,6 @@ static void init_hwif_slc90e66(ide_hwif_t *);
 
 static ide_pci_device_t slc90e66_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_EFAR,
-               .device         = PCI_DEVICE_ID_EFAR_SLC90E66_1,
                .name           = "SLC90E66",
                .init_chipset   = init_chipset_slc90e66,
                .init_hwif      = init_hwif_slc90e66,
index f7ff2f4..fc61865 100644 (file)
@@ -220,13 +220,9 @@ static unsigned int __init init_chipset_triflex(struct pci_dev *dev,
 static int __devinit triflex_init_one(struct pci_dev *dev, 
                const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &triflex_devices[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &triflex_devices[id->driver_data]);
        triflex_dev = dev;
-       
+
        return 0;
 }
 
index d99496e..f826608 100644 (file)
@@ -17,8 +17,6 @@ static void init_hwif_triflex(ide_hwif_t *);
 
 static ide_pci_device_t triflex_devices[] __devinitdata = {
        {
-               .vendor         = PCI_VENDOR_ID_COMPAQ,
-               .device         = PCI_DEVICE_ID_COMPAQ_TRIFLEX_IDE,
                .name           = "TRIFLEX",
                .init_chipset   = init_chipset_triflex,
                .init_hwif      = init_hwif_triflex,
index 8a1f88f..c074089 100644 (file)
@@ -397,10 +397,7 @@ void __init init_hwif_trm290 (ide_hwif_t *hwif)
 
 static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &trm290_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &trm290_chipsets[id->driver_data]);
        return 0;
 }
 
index f633c0f..6c001d4 100644 (file)
@@ -9,8 +9,6 @@ extern void init_hwif_trm290(ide_hwif_t *);
 
 static ide_pci_device_t trm290_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_TEKRAM,
-               .device         = PCI_DEVICE_ID_TEKRAM_DC290,
                .name           = "TRM290",
                .init_hwif      = init_hwif_trm290,
                .channels       = 2,
index 044b6c4..47c241d 100644 (file)
@@ -609,16 +609,13 @@ static void __init init_hwif_via82cxxx(ide_hwif_t *hwif)
 
 static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       ide_pci_device_t *d = &via82cxxx_chipsets[id->driver_data];
-       if (dev->device != d->device)
-               BUG();
-       ide_setup_pci_device(dev, d);
+       ide_setup_pci_device(dev, &via82cxxx_chipsets[id->driver_data]);
        return 0;
 }
 
 static struct pci_device_id via_pci_tbl[] = {
        { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
-       { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
+       { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
        { 0, },
 };
 MODULE_DEVICE_TABLE(pci, via_pci_tbl);
index 151c30a..6504ca0 100644 (file)
@@ -12,18 +12,6 @@ static void init_hwif_via82cxxx(ide_hwif_t *);
 
 static ide_pci_device_t via82cxxx_chipsets[] __devinitdata = {
        {       /* 0 */
-               .vendor         = PCI_VENDOR_ID_VIA,
-               .device         = PCI_DEVICE_ID_VIA_82C576_1,
-               .name           = "VP_IDE",
-               .init_chipset   = init_chipset_via82cxxx,
-               .init_hwif      = init_hwif_via82cxxx,
-               .channels       = 2,
-               .autodma        = NOAUTODMA,
-               .enablebits     = {{0x40,0x02,0x02}, {0x40,0x01,0x01}},
-               .bootable       = ON_BOARD,
-       },{     /* 1 */
-               .vendor         = PCI_VENDOR_ID_VIA,
-               .device         = PCI_DEVICE_ID_VIA_82C586_1,
                .name           = "VP_IDE",
                .init_chipset   = init_chipset_via82cxxx,
                .init_hwif      = init_hwif_via82cxxx,
index 993e030..b485e6b 100644 (file)
@@ -285,14 +285,8 @@ second_chance_to_dma:
 
 void ide_setup_pci_noise (struct pci_dev *dev, ide_pci_device_t *d)
 {
-       if ((d->vendor != dev->vendor) && (d->device != dev->device)) {
-               printk(KERN_INFO "%s: unknown IDE controller at PCI slot "
-                       "%s, VID=%04x, DID=%04x\n",
-                       d->name, pci_name(dev), dev->vendor, dev->device);
-        } else {
-               printk(KERN_INFO "%s: IDE controller at PCI slot %s\n",
-                       d->name, pci_name(dev));
-       }
+       printk(KERN_INFO "%s: IDE controller at PCI slot %s\n",
+                        d->name, pci_name(dev));
 }
 
 EXPORT_SYMBOL_GPL(ide_setup_pci_noise);
@@ -422,8 +416,7 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, ide_pci_device_t *d,
        unsigned long ctl = 0, base = 0;
        ide_hwif_t *hwif;
 
-       if(!d->isa_ports)
-       {
+       if ((d->flags & IDEPCI_FLAG_ISA_PORTS) == 0) {
                /*  Possibly we should fail if these checks report true */
                ide_pci_check_iomem(dev, d, 2*port);
                ide_pci_check_iomem(dev, d, 2*port+1);
@@ -495,9 +488,7 @@ static void ide_hwif_setup_dma(struct pci_dev *dev, ide_pci_device_t *d, ide_hwi
                         * Set up BM-DMA capability
                         * (PnP BIOS should have done this)
                         */
-                       if (!((d->device == PCI_DEVICE_ID_CYRIX_5530_IDE && d->vendor == PCI_VENDOR_ID_CYRIX)
-                           ||(d->device == PCI_DEVICE_ID_NS_SCx200_IDE && d->vendor == PCI_VENDOR_ID_NS)))
-                       {
+                       if ((d->flags & IDEPCI_FLAG_FORCE_MASTER) == 0) {
                                /*
                                 * default DMA off if we had to
                                 * configure it here
@@ -613,9 +604,7 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int autodma,
                 * by the bios for raid purposes. 
                 * Skip the normal "is it enabled" test for those.
                 */
-               if (((d->vendor == PCI_VENDOR_ID_PROMISE) &&
-                    ((d->device == PCI_DEVICE_ID_PROMISE_20262) ||
-                     (d->device == PCI_DEVICE_ID_PROMISE_20265))) &&
+               if ((d->flags & IDEPCI_FLAG_FORCE_PDC) &&
                    (secondpdc++==1) && (port==1))
                        goto controller_ok;
                        
index c451c8d..7992b21 100644 (file)
@@ -1607,7 +1607,7 @@ static int do_md_run(mddev_t * mddev)
        spin_lock(&pers_lock);
        if (!pers[pnum] || !try_module_get(pers[pnum]->owner)) {
                spin_unlock(&pers_lock);
-               printk(KERN_ERR "md: personality %d is not loaded!\n",
+               printk(KERN_WARNING "md: personality %d is not loaded!\n",
                       pnum);
                return -EINVAL;
        }
index 589ab05..346f595 100644 (file)
@@ -1873,25 +1873,12 @@ endmenu
 #      Gigabit Ethernet
 #
 
-menu "Gigabit Ethernet (1000/10000 Mbit)"
+menu "Ethernet (1000 Mbit)"
        depends on NETDEVICES
 
-config NET_GIGE
-       bool "Gigabit Ethernet (1000/10000 Mbit) controller support"
-       depends on NETDEVICES && NET_ETHERNET && (PCI || SBUS)
-       help
-         Gigabit ethernet.  It's yummy and fast, fast, fast.
-
-         Note that the answer to this question doesn't directly affect the
-         kernel: saying N will just cause the configurator to skip all
-         the questions about this class of network cards. If you say Y, you
-         will be asked for your specific card in the following questions.
-         
-         If you are unsure, say Y.
-
 config ACENIC
        tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        ---help---
          Say Y here if you have an Alteon AceNIC, 3Com 3C985(B), NetGear
          GA620, SGI Gigabit or Farallon PN9000-SX PCI Gigabit Ethernet
@@ -1918,7 +1905,7 @@ config ACENIC_OMIT_TIGON_I
 
 config DL2K
        tristate "D-Link DL2000-based Gigabit Ethernet support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        select CRC32
        help
          This driver supports D-Link 2000-based gigabit ethernet cards, which
@@ -1931,7 +1918,7 @@ config DL2K
 
 config E1000
        tristate "Intel(R) PRO/1000 Gigabit Ethernet support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        ---help---
          This driver supports Intel(R) PRO/1000 gigabit ethernet family of
          adapters, which includes:
@@ -1978,7 +1965,7 @@ config E1000_NAPI
 
 config MYRI_SBUS
        tristate "MyriCOM Gigabit Ethernet support"
-       depends on SBUS && NET_GIGE
+       depends on SBUS
        help
          This driver supports MyriCOM Sbus gigabit Ethernet cards.
 
@@ -1987,7 +1974,7 @@ config MYRI_SBUS
 
 config NS83820
        tristate "National Semiconduct DP83820 support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        help
          This is a driver for the National Semiconductor DP83820 series
          of gigabit ethernet MACs.  Cards using this chipset include
@@ -1997,7 +1984,7 @@ config NS83820
 
 config HAMACHI
        tristate "Packet Engines Hamachi GNIC-II support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        select MII
        help
          If you have a Gigabit Ethernet card of this type, say Y and read
@@ -2010,7 +1997,7 @@ config HAMACHI
 
 config YELLOWFIN
        tristate "Packet Engines Yellowfin Gigabit-NIC support (EXPERIMENTAL)"
-       depends on PCI && EXPERIMENTAL && NET_GIGE
+       depends on PCI && EXPERIMENTAL
        select CRC32
        ---help---
          Say Y here if you have a Packet Engines G-NIC PCI Gigabit Ethernet
@@ -2024,7 +2011,7 @@ config YELLOWFIN
 
 config R8169
        tristate "Realtek 8169 gigabit ethernet support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        select CRC32
        ---help---
          Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter.
@@ -2034,7 +2021,7 @@ config R8169
 
 config SK98LIN
        tristate "Marvell Yukon Chipset / SysKonnect SK-98xx Support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        ---help---
          Say Y here if you have a Marvell Yukon or SysKonnect SK-98xx/SK-95xx
          compliant Gigabit Ethernet Adapter. The following adapters are supported
@@ -2113,16 +2100,25 @@ config SK98LIN
 
 config TIGON3
        tristate "Broadcom Tigon3 support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        help
          This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
 
          To compile this driver as a module, choose M here: the module
          will be called tg3.  This is recommended.
 
+endmenu
+
+#
+#      10 Gigabit Ethernet
+#
+
+menu "Ethernet (10000 Mbit)"
+       depends on NETDEVICES
+
 config IXGB
        tristate "Intel(R) PRO/10GbE support"
-       depends on PCI && NET_GIGE
+       depends on PCI
        ---help---
          This driver supports Intel(R) PRO/10GbE family of
          adapters, which includes:
@@ -2154,7 +2150,7 @@ config IXGB_NAPI
 
 config S2IO
        tristate "S2IO 10Gbe XFrame NIC"
-       depends on PCI && NET_GIGE
+       depends on PCI
        ---help---
          This driver supports the 10Gbe XFrame NIC of S2IO. 
          For help regarding driver compilation, installation and 
index c5fd371..634cb04 100644 (file)
@@ -461,6 +461,11 @@ static void veth_statemachine(void *p)
                if (cnx->msgs)
                        for (i = 0; i < VETH_NUMBUFFERS; ++i)
                                veth_recycle_msg(cnx, cnx->msgs + i);
+               spin_unlock_irq(&cnx->lock);
+               veth_flush_pending(cnx);
+               spin_lock_irq(&cnx->lock);
+               if (cnx->state & VETH_STATE_RESET)
+                       goto restart;
        }
 
        if (cnx->state & VETH_STATE_SHUTDOWN)
@@ -796,6 +801,48 @@ static int veth_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        return -EOPNOTSUPP;
 }
 
+static void veth_tx_timeout(struct net_device *dev)
+{
+       struct veth_port *port = (struct veth_port *)dev->priv;
+       struct net_device_stats *stats = &port->stats;
+       unsigned long flags;
+       int i;
+
+       stats->tx_errors++;
+
+       spin_lock_irqsave(&port->pending_gate, flags);
+
+       printk(KERN_WARNING "%s: Tx timeout!  Resetting lp connections: %08x\n",
+              dev->name, port->pending_lpmask);
+
+       /* If we've timed out the queue must be stopped, which should
+        * only ever happen when there is a pending packet. */
+       WARN_ON(! port->pending_lpmask);
+
+       for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
+               struct veth_lpar_connection *cnx = veth_cnx[i];
+
+               if (! (port->pending_lpmask & (1<<i)))
+                       continue;
+
+               /* If we're pending on it, we must be connected to it,
+                * so we should certainly have a structure for it. */
+               BUG_ON(! cnx);
+
+               /* Theoretically we could be kicking a connection
+                * which doesn't deserve it, but in practice if we've
+                * had a Tx timeout, the pending_lpmask will have
+                * exactly one bit set - the connection causing the
+                * problem. */
+               spin_lock(&cnx->lock);
+               cnx->state |= VETH_STATE_RESET;
+               veth_kick_statemachine(cnx);
+               spin_unlock(&cnx->lock);
+       }
+
+       spin_unlock_irqrestore(&port->pending_gate, flags);
+}
+
 struct net_device * __init veth_probe_one(int vlan)
 {
        struct net_device *dev;
@@ -843,6 +890,9 @@ struct net_device * __init veth_probe_one(int vlan)
        dev->set_multicast_list = veth_set_multicast_list;
        dev->do_ioctl = veth_ioctl;
 
+       dev->watchdog_timeo = 2 * (VETH_ACKTIMEOUT * HZ / 1000000);
+       dev->tx_timeout = veth_tx_timeout;
+
        rc = register_netdev(dev);
        if (rc != 0) {
                veth_printk(KERN_ERR,
@@ -938,19 +988,10 @@ static HvLpIndexMap veth_transmit_to_many(struct sk_buff *skb,
        int rc;
 
        for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
-               struct sk_buff *clone;
-
                if ((lpmask & (1 << i)) == 0)
                        continue;
 
-               clone = skb_clone(skb, GFP_ATOMIC);
-               if (! clone) {
-                       veth_error("%s: skb_clone failed %p\n",
-                                  dev->name, skb);
-                       continue;
-               }
-
-               rc = veth_transmit_to_one(clone, i, dev);
+               rc = veth_transmit_to_one(skb_get(skb), i, dev);
                if (! rc)
                        lpmask &= ~(1<<i);
        }
@@ -984,27 +1025,28 @@ static int veth_start_xmit(struct sk_buff *skb, struct net_device *dev)
                lpmask = port->lpar_map;
        }
 
+       spin_lock_irqsave(&port->pending_gate, flags);
+
        lpmask = veth_transmit_to_many(skb, lpmask, dev);
 
        if (! lpmask) {
                dev_kfree_skb(skb);
        } else {
-               spin_lock_irqsave(&port->pending_gate, flags);
                if (port->pending_skb) {
                        veth_error("%s: Tx while skb was pending!\n",
                                   dev->name);
                        dev_kfree_skb(skb);
-                       spin_unlock_irqrestore(&port->pending_gate, flags);
+                       spin_unlock_irqrestore(&port->pending_gate, flags);
                        return 1;
                }
 
                port->pending_skb = skb;
                port->pending_lpmask = lpmask;
                netif_stop_queue(dev);
-
-               spin_unlock_irqrestore(&port->pending_gate, flags);
        }
 
+       spin_unlock_irqrestore(&port->pending_gate, flags);
+
        return 0;
 }
 
@@ -1058,7 +1100,7 @@ static void veth_flush_pending(struct veth_lpar_connection *cnx)
                        if (! port->pending_lpmask) {
                                dev_kfree_skb_any(port->pending_skb);
                                port->pending_skb = NULL;
-                               netif_start_queue(dev);
+                               netif_wake_queue(dev);
                        }
                }
                spin_unlock_irqrestore(&port->pending_gate, flags);
index 4b8256c..31bbff4 100644 (file)
@@ -1219,6 +1219,9 @@ plip_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        struct net_local *nl = netdev_priv(dev);
        struct plipconf *pc = (struct plipconf *) &rq->ifr_data;
 
+       if (cmd != SIOCDEVPLIP)
+               return -EOPNOTSUPP;
+
        switch(pc->pcmd) {
        case PLIP_GET_TIMEOUT:
                pc->trigger = nl->trigger;
index 338f2cd..0394ee0 100644 (file)
@@ -205,10 +205,10 @@ ppp_asynctty_close(struct tty_struct *tty)
 {
        struct asyncppp *ap;
 
-       write_lock(&disc_data_lock);
+       write_lock_irq(&disc_data_lock);
        ap = tty->disc_data;
        tty->disc_data = 0;
-       write_unlock(&disc_data_lock);
+       write_unlock_irq(&disc_data_lock);
        if (ap == 0)
                return;
 
index fc93451..0e1e057 100644 (file)
@@ -251,10 +251,10 @@ ppp_sync_close(struct tty_struct *tty)
 {
        struct syncppp *ap;
 
-       write_lock(&disc_data_lock);
+       write_lock_irq(&disc_data_lock);
        ap = tty->disc_data;
        tty->disc_data = 0;
-       write_unlock(&disc_data_lock);
+       write_unlock_irq(&disc_data_lock);
        if (ap == 0)
                return;
 
index 6372def..ce6c56b 100644 (file)
@@ -61,6 +61,9 @@ obj-$(CONFIG_C101)            += c101.o
 obj-$(CONFIG_WANXL)            += wanxl.o
 obj-$(CONFIG_PCI200SYN)                += pci200syn.o
 
+clean-files := wanxlfw.inc
+$(obj)/wanxl.o:        $(obj)/wanxlfw.inc
+
 ifeq ($(CONFIG_WANXL_BUILD_FIRMWARE),y)
 ifeq ($(ARCH),m68k)
   AS68K = $(AS)
@@ -72,12 +75,12 @@ endif
 
 quiet_cmd_build_wanxlfw = BLD FW  $@
       cmd_build_wanxlfw = \
-       $(CPP) -Wp,-MD,$(depfile) -Iinclude $(obj)/wanxlfw.S | $(AS68K) -m68360 -o $(obj)/wanxlfw.o; \
+       $(CPP) -Wp,-MD,$(depfile) -I$(srctree)/include $< | $(AS68K) -m68360 -o $(obj)/wanxlfw.o; \
        $(LD68K) --oformat binary -Ttext 0x1000 $(obj)/wanxlfw.o -o $(obj)/wanxlfw.bin; \
        hexdump -ve '"\n" 16/1 "0x%02X,"' $(obj)/wanxlfw.bin | sed 's/0x  ,//g;1s/^/static u8 firmware[]={/;$$s/,$$/\n};\n/' >$(obj)/wanxlfw.inc; \
        rm -f $(obj)/wanxlfw.bin $(obj)/wanxlfw.o
 
-$(obj)/wanxlfw.inc:    $(obj)/wanxlfw.S
+$(obj)/wanxlfw.inc:    $(src)/wanxlfw.S
        $(call if_changed_dep,build_wanxlfw)
 targets += wanxlfw.inc
 endif
index a5445c1..7f47180 100644 (file)
@@ -379,8 +379,6 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
                return result;
        }
 
-       /* XXX: are we OK with having that done when card is already up? */
-
        sca_init_sync_port(card); /* Set up C101 memory */
        hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, card) & ST3_DCD), dev);
 
index 43e8bf3..31b379d 100644 (file)
@@ -180,7 +180,8 @@ static int cisco_rx(struct sk_buff *skb)
 
                case CISCO_KEEPALIVE_REQ:
                        hdlc->state.cisco.rxseq = ntohl(cisco_data->par1);
-                       if (ntohl(cisco_data->par2)==hdlc->state.cisco.txseq) {
+                       if (hdlc->state.cisco.request_sent &&
+                           ntohl(cisco_data->par2)==hdlc->state.cisco.txseq) {
                                hdlc->state.cisco.last_poll = jiffies;
                                if (!hdlc->state.cisco.up) {
                                        u32 sec, min, hrs, days;
@@ -192,8 +193,9 @@ static int cisco_rx(struct sk_buff *skb)
                                               "uptime %ud%uh%um%us)\n",
                                               dev->name, days, hrs,
                                               min, sec);
+                                       netif_carrier_on(dev);
+                                       hdlc->state.cisco.up = 1;
                                }
-                               hdlc->state.cisco.up = 1;
                        }
 
                        dev_kfree_skb_any(skb);
@@ -219,17 +221,18 @@ static void cisco_timer(unsigned long arg)
        struct net_device *dev = (struct net_device *)arg;
        hdlc_device *hdlc = dev_to_hdlc(dev);
 
-       if (hdlc->state.cisco.up && jiffies - hdlc->state.cisco.last_poll >=
-           hdlc->state.cisco.settings.timeout * HZ) {
+       if (hdlc->state.cisco.up &&
+           time_after(jiffies, hdlc->state.cisco.last_poll +
+                      hdlc->state.cisco.settings.timeout * HZ)) {
                hdlc->state.cisco.up = 0;
                printk(KERN_INFO "%s: Link down\n", dev->name);
-               if (netif_carrier_ok(dev))
-                       netif_carrier_off(dev);
+               netif_carrier_off(dev);
        }
 
        cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ,
                             ++hdlc->state.cisco.txseq,
                             hdlc->state.cisco.rxseq);
+       hdlc->state.cisco.request_sent = 1;
        hdlc->state.cisco.timer.expires = jiffies +
                hdlc->state.cisco.settings.interval * HZ;
        hdlc->state.cisco.timer.function = cisco_timer;
@@ -242,8 +245,8 @@ static void cisco_timer(unsigned long arg)
 static void cisco_start(struct net_device *dev)
 {
        hdlc_device *hdlc = dev_to_hdlc(dev);
-       hdlc->state.cisco.last_poll = 0;
        hdlc->state.cisco.up = 0;
+       hdlc->state.cisco.request_sent = 0;
        hdlc->state.cisco.txseq = hdlc->state.cisco.rxseq = 0;
 
        init_timer(&hdlc->state.cisco.timer);
@@ -257,9 +260,12 @@ static void cisco_start(struct net_device *dev)
 
 static void cisco_stop(struct net_device *dev)
 {
-       del_timer_sync(&dev_to_hdlc(dev)->state.cisco.timer);
+       hdlc_device *hdlc = dev_to_hdlc(dev);
+       del_timer_sync(&hdlc->state.cisco.timer);
        if (netif_carrier_ok(dev))
                netif_carrier_off(dev);
+       hdlc->state.cisco.up = 0;
+       hdlc->state.cisco.request_sent = 0;
 }
 
 
index e9c995e..8feed45 100644 (file)
@@ -584,8 +584,9 @@ static void fr_timer(unsigned long arg)
        u32 list;
 
        if (hdlc->state.fr.settings.dce)
-               reliable = (jiffies - hdlc->state.fr.last_poll <
-                           hdlc->state.fr.settings.t392 * HZ);
+               reliable = hdlc->state.fr.request &&
+                       time_before(jiffies, hdlc->state.fr.last_poll +
+                                   hdlc->state.fr.settings.t392 * HZ);
        else {
                hdlc->state.fr.last_errors <<= 1; /* Shift the list */
                if (hdlc->state.fr.request) {
@@ -617,6 +618,7 @@ static void fr_timer(unsigned long arg)
 
                fr_lmi_send(dev, hdlc->state.fr.n391cnt == 0);
 
+               hdlc->state.fr.last_poll = jiffies;
                hdlc->state.fr.request = 1;
                hdlc->state.fr.timer.expires = jiffies +
                        hdlc->state.fr.settings.t391 * HZ;
@@ -689,6 +691,7 @@ static int fr_lmi_recv(struct net_device *dev, struct sk_buff *skb)
                               dev->name, reptype);
                        return 1;
                }
+               hdlc->state.fr.last_poll = jiffies;
        }
 
        error = 0;
@@ -728,7 +731,12 @@ static int fr_lmi_recv(struct net_device *dev, struct sk_buff *skb)
 
        /* DTE */
 
-       if (reptype != LMI_FULLREP || error)
+       hdlc->state.fr.request = 0; /* got response, no request pending */
+
+       if (error)
+               return 0;
+
+       if (reptype != LMI_FULLREP)
                return 0;
 
        stat_len = 3;
@@ -829,9 +837,6 @@ static int fr_rx(struct sk_buff *skb)
                        if (fr_lmi_recv(ndev, skb))
                                goto rx_error;
                        else {
-                               /* No request pending */
-                               hdlc->state.fr.request = 0;
-                               hdlc->state.fr.last_poll = jiffies;
                                dev_kfree_skb_any(skb);
                                return NET_RX_SUCCESS;
                        }
@@ -946,9 +951,6 @@ static void fr_start(struct net_device *dev)
        printk(KERN_DEBUG "fr_start\n");
 #endif
        if (hdlc->state.fr.settings.lmi != LMI_NONE) {
-               if (netif_carrier_ok(dev))
-                       netif_carrier_off(dev);
-               hdlc->state.fr.last_poll = 0;
                hdlc->state.fr.reliable = 0;
                hdlc->state.fr.dce_changed = 1;
                hdlc->state.fr.request = 0;
index 2aa4ae0..6ed064c 100644 (file)
  *     * X.25
  *
  * Use sethdlc utility to set line parameters, protocol and PVCs
+ *
+ * How does it work:
+ * - proto.open(), close(), start(), stop() calls are serialized.
+ *   The order is: open, [ start, stop ... ] close ...
+ * - proto.start() and stop() are called with spin_lock_irq held.
  */
 
 #include <linux/config.h>
@@ -33,7 +38,7 @@
 #include <linux/hdlc.h>
 
 
-static const char* version = "HDLC support module revision 1.16";
+static const char* version = "HDLC support module revision 1.17";
 
 #undef DEBUG_LINK
 
@@ -69,51 +74,75 @@ static int hdlc_rcv(struct sk_buff *skb, struct net_device *dev,
 
 
 
+static void __hdlc_set_carrier_on(struct net_device *dev)
+{
+       hdlc_device *hdlc = dev_to_hdlc(dev);
+       if (hdlc->proto.start)
+               return hdlc->proto.start(dev);
+#ifdef DEBUG_LINK
+       if (netif_carrier_ok(dev))
+               printk(KERN_ERR "hdlc_set_carrier_on(): already on\n");
+#endif
+       netif_carrier_on(dev);
+}
+
+
+
+static void __hdlc_set_carrier_off(struct net_device *dev)
+{
+       hdlc_device *hdlc = dev_to_hdlc(dev);
+       if (hdlc->proto.stop)
+               return hdlc->proto.stop(dev);
+
+#ifdef DEBUG_LINK
+       if (!netif_carrier_ok(dev))
+               printk(KERN_ERR "hdlc_set_carrier_off(): already off\n");
+#endif
+       netif_carrier_off(dev);
+}
+
+
+
 void hdlc_set_carrier(int on, struct net_device *dev)
 {
        hdlc_device *hdlc = dev_to_hdlc(dev);
+       unsigned long flags;
        on = on ? 1 : 0;
 
 #ifdef DEBUG_LINK
        printk(KERN_DEBUG "hdlc_set_carrier %i\n", on);
 #endif
 
-       spin_lock_irq(&hdlc->state_lock);
+       spin_lock_irqsave(&hdlc->state_lock, flags);
 
        if (hdlc->carrier == on)
                goto carrier_exit; /* no change in DCD line level */
 
-       printk(KERN_INFO "%s: carrier %s\n", dev->name,
-              on ? "ON" : "off");
+#ifdef DEBUG_LINK
+       printk(KERN_INFO "%s: carrier %s\n", dev->name, on ? "ON" : "off");
+#endif
        hdlc->carrier = on;
 
        if (!hdlc->open)
                goto carrier_exit;
 
-       if (hdlc->carrier) {
-               if (hdlc->proto.start)
-                       hdlc->proto.start(dev);
-               else if (!netif_carrier_ok(dev))
-                       netif_carrier_on(dev);
-
-       } else { /* no carrier */
-               if (hdlc->proto.stop)
-                       hdlc->proto.stop(dev);
-               else if (netif_carrier_ok(dev))
-                       netif_carrier_off(dev);
-       }
+       if (hdlc->carrier)
+               __hdlc_set_carrier_on(dev);
+       else
+               __hdlc_set_carrier_off(dev);
 
- carrier_exit:
-       spin_unlock_irq(&hdlc->state_lock);
+carrier_exit:
+       spin_unlock_irqrestore(&hdlc->state_lock, flags);
 }
 
 
+
 /* Must be called by hardware driver when HDLC device is being opened */
 int hdlc_open(struct net_device *dev)
 {
        hdlc_device *hdlc = dev_to_hdlc(dev);
 #ifdef DEBUG_LINK
-       printk(KERN_DEBUG "hdlc_open carrier %i open %i\n",
+       printk(KERN_DEBUG "hdlc_open() carrier %i open %i\n",
               hdlc->carrier, hdlc->open);
 #endif
 
@@ -128,14 +157,8 @@ int hdlc_open(struct net_device *dev)
 
        spin_lock_irq(&hdlc->state_lock);
 
-       if (hdlc->carrier) {
-               if (hdlc->proto.start)
-                       hdlc->proto.start(dev);
-               else if (!netif_carrier_ok(dev))
-                       netif_carrier_on(dev);
-
-       } else if (netif_carrier_ok(dev))
-               netif_carrier_off(dev);
+       if (hdlc->carrier)
+               __hdlc_set_carrier_on(dev);
 
        hdlc->open = 1;
 
@@ -150,15 +173,15 @@ void hdlc_close(struct net_device *dev)
 {
        hdlc_device *hdlc = dev_to_hdlc(dev);
 #ifdef DEBUG_LINK
-       printk(KERN_DEBUG "hdlc_close carrier %i open %i\n",
+       printk(KERN_DEBUG "hdlc_close() carrier %i open %i\n",
               hdlc->carrier, hdlc->open);
 #endif
 
        spin_lock_irq(&hdlc->state_lock);
 
        hdlc->open = 0;
-       if (hdlc->carrier && hdlc->proto.stop)
-               hdlc->proto.stop(dev);
+       if (hdlc->carrier)
+               __hdlc_set_carrier_off(dev);
 
        spin_unlock_irq(&hdlc->state_lock);
 
@@ -185,7 +208,7 @@ void hdlc_close(struct net_device *dev)
 #endif
 
 #ifndef CONFIG_HDLC_FR
-#define hdlc_fr_ioctl(dev, ifr)        -ENOSYS
+#define hdlc_fr_ioctl(dev, ifr)                -ENOSYS
 #endif
 
 #ifndef CONFIG_HDLC_X25
@@ -257,25 +280,7 @@ struct net_device *alloc_hdlcdev(void *priv)
 
 int register_hdlc_device(struct net_device *dev)
 {
-       int result;
-       hdlc_device *hdlc = dev_to_hdlc(dev);
-
-       dev->get_stats = hdlc_get_stats;
-       dev->change_mtu = hdlc_change_mtu;
-       dev->mtu = HDLC_MAX_MTU;
-
-       dev->type = ARPHRD_RAWHDLC;
-       dev->hard_header_len = 16;
-
-       dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-
-       hdlc->proto.id = -1;
-       hdlc->proto.detach = NULL;
-       hdlc->carrier = 1;
-       hdlc->open = 0;
-       spin_lock_init(&hdlc->state_lock);
-
-       result = dev_alloc_name(dev, "hdlc%d");
+       int result = dev_alloc_name(dev, "hdlc%d");
        if (result < 0)
                return result;
 
@@ -283,6 +288,9 @@ int register_hdlc_device(struct net_device *dev)
        if (result != 0)
                return -EIO;
 
+       if (netif_carrier_ok(dev))
+               netif_carrier_off(dev); /* no carrier until DCD goes up */
+
        return 0;
 }
 
diff --git a/drivers/net/wan/wanxlfw.inc b/drivers/net/wan/wanxlfw.inc
deleted file mode 100644 (file)
index 73da688..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-static u8 firmware[]={
-0x60,0x00,0x00,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0xB9,0x40,0x00,0x00,0x00,0x00,0x00,
-0x10,0x14,0x42,0x80,0x4A,0xB0,0x09,0xB0,0x00,0x00,0x10,0x04,0x67,0x00,0x00,0x0E,
-0x06,0xB0,0x40,0x00,0x00,0x00,0x09,0xB0,0x00,0x00,0x10,0x04,0x58,0x80,0x0C,0x80,
-0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0xDE,0x21,0xFC,0x00,0x00,0x16,0xBC,0x00,0x6C,
-0x21,0xFC,0x00,0x00,0x17,0x5E,0x01,0x00,0x21,0xFC,0x00,0x00,0x16,0xDE,0x01,0x78,
-0x21,0xFC,0x00,0x00,0x16,0xFE,0x01,0x74,0x21,0xFC,0x00,0x00,0x17,0x1E,0x01,0x70,
-0x21,0xFC,0x00,0x00,0x17,0x3E,0x01,0x6C,0x21,0xFC,0x00,0x00,0x18,0x4C,0x02,0x00,
-0x23,0xFC,0x78,0x00,0x00,0x00,0xFF,0xFC,0x15,0x48,0x33,0xFC,0x04,0x80,0xFF,0xFC,
-0x10,0x26,0x33,0xFC,0x01,0x10,0xFF,0xFC,0x10,0x2A,0x23,0xFC,0x00,0xD4,0x9F,0x40,
-0xFF,0xFC,0x15,0x40,0x23,0xFC,0x00,0x00,0x05,0x43,0xFF,0xF9,0x01,0x00,0x23,0xFC,
-0x00,0x00,0x05,0x43,0xFF,0xF9,0x01,0x14,0x23,0xFC,0x00,0x00,0x00,0x00,0xFF,0xF9,
-0x01,0x10,0x23,0xFC,0x00,0x00,0x00,0x08,0xFF,0xF9,0x01,0x24,0x23,0xFC,0x00,0x00,
-0x01,0x01,0xFF,0xF9,0x01,0x28,0x00,0xB9,0x00,0x0F,0x03,0x00,0xFF,0xF9,0x00,0xE8,
-0x23,0xFC,0x00,0x00,0x00,0x01,0xFF,0xF9,0x00,0xD4,0x61,0x00,0x06,0x74,0x33,0xFC,
-0xFF,0xFF,0xFF,0xFC,0x15,0x52,0x42,0x79,0xFF,0xFC,0x15,0x50,0x42,0x79,0xFF,0xFC,
-0x15,0x64,0x2E,0x3A,0x08,0x50,0x42,0xB9,0x00,0x00,0x19,0x54,0x4A,0x87,0x66,0x00,
-0x00,0x0E,0x4E,0x72,0x22,0x00,0x46,0xFC,0x27,0x00,0x60,0x00,0xFF,0xE6,0x42,0x80,
-0x42,0x86,0x08,0x07,0x00,0x04,0x67,0x00,0x00,0x0A,0x08,0x87,0x00,0x00,0x61,0x00,
-0x02,0xA0,0x08,0x07,0x00,0x00,0x67,0x00,0x00,0x06,0x61,0x00,0x00,0x36,0x08,0x07,
-0x00,0x08,0x67,0x00,0x00,0x06,0x61,0x00,0x02,0xB8,0x08,0x07,0x00,0x0C,0x67,0x00,
-0x00,0x0A,0x61,0x00,0x04,0x94,0x61,0x00,0x03,0x60,0xE2,0x8F,0x58,0x80,0x0C,0x80,
-0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0xBC,0x23,0xC6,0xFF,0xF9,0x00,0xE4,0x60,0x00,
-0xFF,0x92,0x20,0x70,0x09,0xB0,0x00,0x00,0x10,0x04,0x4A,0xA8,0x00,0x00,0x66,0x00,
-0x02,0x4E,0x21,0x7C,0x00,0x00,0x00,0x01,0x00,0x00,0x42,0xB0,0x09,0xB0,0x00,0x00,
-0x19,0x58,0x42,0xB0,0x09,0xB0,0x00,0x00,0x19,0x68,0x42,0xB0,0x09,0xB0,0x00,0x00,
-0x19,0x78,0x42,0xB0,0x09,0xB0,0x00,0x00,0x19,0x88,0x22,0x39,0xFF,0xFC,0x16,0xEC,
-0xC2,0xB0,0x09,0xB0,0x00,0x00,0x18,0xF2,0x0C,0xA8,0x00,0x00,0x00,0x04,0x00,0x18,
-0x66,0x00,0x00,0x0E,0x82,0xB0,0x09,0xB0,0x00,0x00,0x18,0xE2,0x60,0x00,0x00,0x0A,
-0x82,0xB0,0x09,0xB0,0x00,0x00,0x18,0xD2,0x23,0xC1,0xFF,0xFC,0x16,0xEC,0x00,0x70,
-0x10,0x00,0x09,0xB0,0x00,0x00,0x19,0xAA,0x61,0x00,0x05,0x76,0x22,0x30,0x09,0xB0,
-0x00,0x00,0x18,0x92,0x22,0x70,0x09,0xB0,0x00,0x00,0x18,0x72,0x74,0x08,0x26,0x3C,
-0x18,0x00,0x00,0x00,0x0C,0xA8,0x00,0x00,0x00,0x01,0x00,0x10,0x67,0x00,0x00,0x06,
-0x08,0xC3,0x00,0x1A,0x22,0xC3,0x22,0xC1,0x06,0x81,0x00,0x00,0x05,0xFC,0x51,0xCA,
-0xFF,0xF4,0x08,0xC3,0x00,0x1D,0x22,0xC3,0x22,0xC1,0x74,0x1C,0x22,0xFC,0x90,0x00,
-0x00,0x00,0x22,0xC1,0x06,0x81,0x00,0x00,0x05,0xFC,0x51,0xCA,0xFF,0xF0,0x22,0xFC,
-0xB0,0x00,0x00,0x00,0x22,0xC1,0x22,0x70,0x09,0xB0,0x00,0x00,0x18,0x62,0x24,0x70,
-0x09,0xB0,0x00,0x00,0x18,0x52,0x25,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x10,0x25,0x7C,
-0x00,0x00,0x00,0x00,0x00,0x14,0x22,0x30,0x09,0xB0,0x00,0x00,0x18,0x72,0x33,0x41,
-0x00,0x02,0x06,0x81,0x00,0x00,0x00,0x50,0x33,0x41,0x00,0x00,0x13,0x7C,0x00,0x08,
-0x00,0x04,0x13,0x7C,0x00,0x08,0x00,0x05,0x0C,0xA8,0x00,0x00,0x00,0x05,0x00,0x10,
-0x66,0x00,0x00,0x2A,0x42,0x6A,0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34,
-0x23,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x38,0x33,0x7C,0x05,0xFA,0x00,0x46,0x31,0xBC,
-0x00,0x02,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00,0x00,0xBC,0x0C,0xA8,0x00,0x00,
-0x00,0x07,0x00,0x10,0x66,0x00,0x00,0x2C,0x35,0x7C,0x08,0x00,0x00,0x08,0x23,0x7C,
-0xDE,0xBB,0x20,0xE3,0x00,0x34,0x23,0x7C,0xFF,0xFF,0xFF,0xFF,0x00,0x38,0x33,0x7C,
-0x05,0xFC,0x00,0x46,0x31,0xBC,0x00,0x04,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00,
-0x00,0x86,0x0C,0xA8,0x00,0x00,0x00,0x04,0x00,0x10,0x66,0x00,0x00,0x26,0x42,0x6A,
-0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34,0x42,0xA9,0x00,0x38,0x33,0x7C,
-0x05,0xFA,0x00,0x46,0x31,0xBC,0x00,0x02,0x09,0xB0,0x00,0x00,0x19,0x9C,0x60,0x00,
-0x00,0x56,0x0C,0xA8,0x00,0x00,0x00,0x06,0x00,0x10,0x66,0x00,0x00,0x28,0x35,0x7C,
-0x08,0x00,0x00,0x08,0x23,0x7C,0xDE,0xBB,0x20,0xE3,0x00,0x34,0x42,0xA9,0x00,0x38,
-0x33,0x7C,0x05,0xFC,0x00,0x46,0x31,0xBC,0x00,0x04,0x09,0xB0,0x00,0x00,0x19,0x9C,
-0x60,0x00,0x00,0x24,0x42,0x6A,0x00,0x08,0x23,0x7C,0x00,0x00,0xF0,0xB8,0x00,0x34,
-0x23,0x7C,0x00,0x00,0xFF,0xFF,0x00,0x38,0x33,0x7C,0x05,0xF8,0x00,0x46,0x42,0x70,
-0x09,0xB0,0x00,0x00,0x19,0x9C,0x25,0x7C,0x00,0x00,0x00,0x03,0x00,0x04,0x0C,0xA8,
-0x00,0x00,0x00,0x02,0x00,0x14,0x66,0x00,0x00,0x0E,0x25,0x7C,0x10,0x04,0x09,0x00,
-0x00,0x00,0x60,0x00,0x00,0x0A,0x25,0x7C,0x10,0x04,0x00,0x00,0x00,0x00,0x33,0x7C,
-0x05,0xFC,0x00,0x06,0x22,0x00,0xE9,0x89,0x00,0x81,0x00,0x00,0x00,0x01,0x33,0xC1,
-0xFF,0xFC,0x15,0xC0,0x08,0x39,0x00,0x00,0xFF,0xFC,0x15,0xC0,0x66,0x00,0xFF,0xF6,
-0x35,0x7C,0x00,0x1F,0x00,0x14,0x00,0xAA,0x00,0x00,0x00,0x30,0x00,0x00,0x4E,0x75,
-0x20,0x70,0x09,0xB0,0x00,0x00,0x18,0x52,0x42,0x68,0x00,0x14,0x02,0xA8,0xFF,0xFF,
-0xFF,0xCF,0x00,0x00,0x02,0x70,0xEF,0xFF,0x09,0xB0,0x00,0x00,0x19,0xAA,0x61,0x00,
-0x03,0x70,0x22,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x42,0xB0,0x19,0x90,0x4E,0x75,
-0x0C,0xB0,0x00,0x00,0x00,0x0A,0x09,0xB0,0x00,0x00,0x19,0x78,0x67,0x00,0x00,0xA8,
-0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x68,0x24,0x01,0x4C,0x3C,0x20,0x00,0x00,0x00,
-0x00,0x0C,0xD4,0xB0,0x09,0xB0,0x00,0x00,0x10,0x04,0x06,0x82,0x00,0x00,0x00,0x1C,
-0x0C,0xB0,0x00,0x00,0x00,0x10,0x29,0x90,0x66,0x00,0x00,0x7C,0x20,0x70,0x29,0xA0,
-0x00,0x04,0xE7,0x89,0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x72,0x22,0x70,0x19,0xA0,
-0x00,0x04,0x24,0x30,0x29,0xA0,0x00,0x08,0x31,0x82,0x19,0xA0,0x00,0x02,0x56,0x82,
-0x02,0x82,0xFF,0xFF,0xFF,0xFC,0x23,0xC8,0xFF,0xF9,0x01,0x04,0x23,0xC9,0xFF,0xF9,
-0x01,0x08,0x23,0xC2,0xFF,0xF9,0x01,0x0C,0x23,0xFC,0x00,0x00,0x01,0x03,0xFF,0xF9,
-0x01,0x28,0x61,0x00,0x01,0xF6,0x08,0xF0,0x00,0x1F,0x19,0x90,0x22,0x30,0x09,0xB0,
-0x00,0x00,0x19,0x68,0x52,0x81,0x0C,0x81,0x00,0x00,0x00,0x0A,0x66,0x00,0x00,0x04,
-0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00,0x19,0x68,0x52,0xB0,0x09,0xB0,0x00,0x00,
-0x19,0x78,0x60,0x00,0xFF,0x4C,0x4E,0x75,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x88,
-0xE7,0x89,0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x82,0x34,0x30,0x19,0x90,0x08,0x02,
-0x00,0x0F,0x66,0x00,0x01,0x12,0x08,0x02,0x00,0x01,0x66,0x00,0x00,0xE6,0x4A,0x70,
-0x09,0xB0,0x00,0x00,0x19,0x9C,0x66,0x00,0x00,0x06,0x08,0x82,0x00,0x02,0x02,0x42,
-0x0C,0xBC,0x0C,0x42,0x0C,0x00,0x66,0x00,0x00,0xDC,0x42,0x83,0x36,0x30,0x19,0xA0,
-0x00,0x02,0x96,0x70,0x09,0xB0,0x00,0x00,0x19,0x9C,0x0C,0x43,0x05,0xF8,0x6E,0x00,
-0x00,0xC4,0x24,0x3A,0x04,0x84,0x4C,0x3C,0x20,0x00,0x00,0x00,0x00,0x0C,0xD4,0xBA,
-0xFA,0xF4,0x0C,0xB0,0x00,0x00,0x00,0x00,0x29,0x90,0x66,0x00,0x00,0x96,0x21,0x83,
-0x29,0xA0,0x00,0x08,0x20,0x70,0x19,0xA0,0x00,0x04,0x22,0x70,0x29,0xA0,0x00,0x04,
-0x4A,0x89,0x67,0x00,0x00,0x2A,0x56,0x83,0x02,0x83,0xFF,0xFF,0xFF,0xFC,0x23,0xC8,
-0xFF,0xF9,0x01,0x1C,0x23,0xC9,0xFF,0xF9,0x01,0x18,0x23,0xC3,0xFF,0xF9,0x01,0x20,
-0x23,0xFC,0x00,0x00,0x03,0x01,0xFF,0xF9,0x01,0x28,0x61,0x00,0x01,0x2C,0x21,0xB0,
-0x09,0xB0,0x00,0x00,0x18,0xC2,0x29,0x90,0x08,0xC6,0x00,0x04,0x24,0x3A,0x04,0x1A,
-0x52,0x82,0x0C,0x82,0x00,0x00,0x00,0x28,0x66,0x00,0x00,0x04,0x42,0x82,0x23,0xC2,
-0x00,0x00,0x19,0x98,0x02,0x70,0xF0,0x00,0x19,0x90,0x08,0xF0,0x00,0x1F,0x19,0x90,
-0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x88,0x52,0x81,0x0C,0x81,0x00,0x00,0x00,0x1E,
-0x66,0x00,0x00,0x04,0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00,0x19,0x88,0x60,0x00,
-0xFE,0xF8,0x24,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x52,0xB0,0x29,0xA0,0x00,0x08,
-0x60,0x00,0xFF,0xC2,0x24,0x30,0x09,0xB0,0x00,0x00,0x10,0x04,0x52,0xB0,0x29,0xA0,
-0x00,0x0C,0x60,0x00,0xFF,0xB0,0x4E,0x75,0x4A,0xB0,0x09,0xB0,0x00,0x00,0x19,0x78,
-0x67,0x00,0x00,0x86,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x58,0x24,0x01,0xE7,0x89,
-0xD2,0xB0,0x09,0xB0,0x00,0x00,0x18,0x72,0x36,0x30,0x19,0x90,0x08,0x03,0x00,0x0F,
-0x66,0x00,0x00,0x66,0x8C,0xB0,0x09,0xB0,0x00,0x00,0x18,0xA2,0x53,0xB0,0x09,0xB0,
-0x00,0x00,0x19,0x78,0x22,0x30,0x09,0xB0,0x00,0x00,0x19,0x58,0x52,0x81,0x0C,0x81,
-0x00,0x00,0x00,0x0A,0x66,0x00,0x00,0x04,0x42,0x81,0x21,0x81,0x09,0xB0,0x00,0x00,
-0x19,0x58,0x4C,0x3C,0x20,0x00,0x00,0x00,0x00,0x0C,0xD4,0xB0,0x09,0xB0,0x00,0x00,
-0x10,0x04,0x06,0x82,0x00,0x00,0x00,0x1C,0x08,0x03,0x00,0x01,0x66,0x00,0x00,0x0E,
-0x21,0xBC,0x00,0x00,0x00,0x20,0x29,0x90,0x60,0x00,0xFF,0x7E,0x21,0xBC,0x00,0x00,
-0x00,0x30,0x29,0x90,0x60,0x00,0xFF,0x72,0x4E,0x75,0x2F,0x00,0x40,0xE7,0x20,0x39,
-0xFF,0xF9,0x01,0x28,0x08,0x00,0x00,0x04,0x66,0x00,0x00,0x2C,0x4E,0x72,0x22,0x00,
-0x46,0xFC,0x27,0x00,0x60,0x00,0xFF,0xE8,0x2F,0x00,0x40,0xE7,0x20,0x39,0xFF,0xF9,
-0x01,0x28,0x08,0x00,0x00,0x0C,0x66,0x00,0x00,0x0E,0x4E,0x72,0x22,0x00,0x46,0xFC,
-0x27,0x00,0x60,0x00,0xFF,0xE8,0x46,0xDF,0x20,0x1F,0x4E,0x75,0x2F,0x00,0x20,0x39,
-0xFF,0xF9,0x00,0xE0,0x23,0xC0,0xFF,0xF9,0x00,0xE0,0x81,0xB9,0x00,0x00,0x19,0x54,
-0x23,0xFC,0x00,0x00,0x09,0x09,0xFF,0xF9,0x01,0x28,0x20,0x1F,0x4E,0x73,0x00,0xB9,
-0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x10,0x00,0xB9,0x00,0x00,0x10,0x00,0x00,0x00,
-0x19,0x54,0x23,0xFC,0x40,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9,
-0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x30,0x00,0xB9,0x00,0x00,0x20,0x00,0x00,0x00,
-0x19,0x54,0x23,0xFC,0x20,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9,
-0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x50,0x00,0xB9,0x00,0x00,0x40,0x00,0x00,0x00,
-0x19,0x54,0x23,0xFC,0x10,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x00,0xB9,
-0x00,0x00,0x00,0x00,0xFF,0xFC,0x16,0x70,0x00,0xB9,0x00,0x00,0x80,0x00,0x00,0x00,
-0x19,0x54,0x23,0xFC,0x08,0x00,0x00,0x00,0xFF,0xFC,0x15,0x4C,0x4E,0x73,0x4E,0x73,
-0x2F,0x00,0x2F,0x01,0x2F,0x02,0x2F,0x08,0x2F,0x09,0x42,0x80,0x20,0x7C,0xFF,0xFB,
-0x00,0x00,0x32,0x10,0x02,0x81,0x00,0x00,0x00,0xE7,0x0C,0x41,0x00,0x42,0x66,0x00,
-0x00,0x0A,0x32,0x3C,0x0E,0x08,0x60,0x00,0x00,0x3E,0x0C,0x41,0x00,0x63,0x66,0x00,
-0x00,0x0A,0x32,0x3C,0x04,0x08,0x60,0x00,0x00,0x2E,0x0C,0x41,0x00,0x84,0x66,0x00,
-0x00,0x0A,0x32,0x3C,0x02,0x08,0x60,0x00,0x00,0x1E,0x0C,0x41,0x00,0xA5,0x66,0x00,
-0x00,0x0A,0x32,0x3C,0x0D,0x08,0x60,0x00,0x00,0x0E,0x32,0x3C,0x00,0x08,0x34,0x3C,
-0x80,0xE7,0x60,0x00,0x00,0x14,0x34,0x30,0x09,0xB0,0x00,0x00,0x19,0xAA,0x02,0x42,
-0x30,0x00,0x82,0x42,0x34,0x3C,0x80,0xFF,0xB2,0x70,0x09,0xB0,0x00,0x00,0x19,0xAC,
-0x67,0x00,0x00,0x0C,0x31,0x81,0x09,0xB0,0x00,0x00,0x19,0xAC,0x30,0x81,0x32,0x39,
-0xFF,0xFC,0x15,0x66,0xC2,0x70,0x09,0xB0,0x00,0x00,0x19,0x02,0x67,0x00,0x00,0x0C,
-0x32,0x10,0x02,0x41,0xFF,0xF7,0x60,0x00,0x00,0x08,0x32,0x10,0x00,0x41,0x00,0x08,
-0xC2,0x42,0x22,0x70,0x09,0xB0,0x00,0x00,0x10,0x04,0xB2,0xA9,0x00,0x04,0x67,0x00,
-0x00,0x12,0x23,0x41,0x00,0x04,0x23,0xF0,0x09,0xB0,0x00,0x00,0x18,0xB2,0xFF,0xF9,
-0x00,0xE4,0x54,0x88,0x58,0x80,0x0C,0x80,0x00,0x00,0x00,0x10,0x66,0x00,0xFF,0x34,
-0x22,0x5F,0x20,0x5F,0x24,0x1F,0x22,0x1F,0x20,0x1F,0x4E,0x75,0x61,0x00,0xFF,0x12,
-0x4E,0x73,0xFF,0xFC,0x16,0x00,0xFF,0xFC,0x16,0x20,0xFF,0xFC,0x16,0x40,0xFF,0xFC,
-0x16,0x60,0xFF,0xFC,0x0C,0x00,0xFF,0xFC,0x0D,0x00,0xFF,0xFC,0x0E,0x00,0xFF,0xFC,
-0x0F,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xFC,0x01,0x40,0xFF,0xFC,0x02,0x80,0xFF,0xFC,
-0x03,0xC0,0xFF,0xFC,0x00,0x50,0xFF,0xFC,0x01,0x90,0xFF,0xFC,0x02,0xD0,0xFF,0xFC,
-0x04,0x10,0x00,0x00,0x40,0x00,0x00,0x01,0x2F,0x60,0x00,0x02,0x1E,0xC0,0x00,0x03,
-0x0E,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,
-0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x80,0x00,0x00,
-0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,
-0x00,0x13,0x00,0x00,0x00,0x2C,0x00,0x00,0x3E,0x00,0x00,0x2C,0x00,0x00,0x3E,0x00,
-0x00,0x00,0x00,0x00,0x00,0x2D,0x00,0x00,0x3F,0x00,0x00,0x2D,0x00,0x00,0x3F,0x00,
-0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,
-0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,
-0x77,0x61,0x6E,0x58,0x4C,0x20,0x66,0x69,0x72,0x6D,0x77,0x61,0x72,0x65,0x0A,0x43,
-0x6F,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x28,0x43,0x29,0x20,0x32,0x30,0x30,
-0x33,0x20,0x4B,0x72,0x7A,0x79,0x73,0x7A,0x74,0x6F,0x66,0x20,0x48,0x61,0x6C,0x61,
-0x73,0x61,0x20,0x3C,0x6B,0x68,0x63,0x40,0x70,0x6D,0x2E,0x77,0x61,0x77,0x2E,0x70,
-0x6C,0x3E,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-};
index bbda5cd..2e669a6 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/isl_38xx.c,v 1.22 2004/02/28 03:06:07 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *  Copyright (C) 2003-2004 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>_
index ea954f1..5f64483 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/isl_38xx.h,v 1.22 2004/02/28 03:06:07 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *
index e1261e5..426fc2e 100644 (file)
@@ -1,7 +1,7 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/isl_ioctl.c,v 1.140 2004/02/28 03:06:07 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
- *            (C) 2003 Aurelien Alleaume <slts@free.fr>
+ *            (C) 2003,2004 Aurelien Alleaume <slts@free.fr>
  *            (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
  *            (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
  *
@@ -87,9 +87,9 @@ prism54_mib_mode_helper(islpci_private *priv, u32 iw_mode)
 
        /* For now, just catch early the Repeater and Secondary modes here */
        if (iw_mode == IW_MODE_REPEAT || iw_mode == IW_MODE_SECOND) {
-               printk(KERN_DEBUG "%s(): Sorry, Repeater mode and Secondary mode "
-                               "are not yet supported by this driver.\n",
-                      __FUNCTION__);
+               printk(KERN_DEBUG
+                      "%s(): Sorry, Repeater mode and Secondary mode "
+                      "are not yet supported by this driver.\n", __FUNCTION__);
                return -EINVAL;
        }
 
@@ -143,8 +143,8 @@ prism54_mib_init(islpci_private *priv)
 {
        u32 t;
        struct obj_buffer psm_buffer = {
-               .size = cpu_to_le32(PSM_BUFFER_SIZE),
-               .addr = cpu_to_le32(priv->device_psm_buffer)
+               .size = PSM_BUFFER_SIZE,
+               .addr = priv->device_psm_buffer
        };
 
        mgt_set(priv, DOT11_OID_CHANNEL, &init_channel);
@@ -285,7 +285,7 @@ prism54_commit(struct net_device *ndev, struct iw_request_info *info,
        /* Commit in Monitor mode is not necessary, also setting essid
         * in Monitor mode does not make sense and isn't allowed for this
         * device's firmware */
-       if(priv->iw_mode != IW_MODE_MONITOR)
+       if (priv->iw_mode != IW_MODE_MONITOR)
                return mgt_set_request(priv, DOT11_OID_SSID, 0, NULL);
        return 0;
 }
@@ -327,34 +327,15 @@ prism54_set_freq(struct net_device *ndev, struct iw_request_info *info,
 {
        islpci_private *priv = netdev_priv(ndev);
        int rvalue;
-       u32 c = 0;
+       u32 c;
 
-       /* prepare the structure for the set object */
        if (fwrq->m < 1000)
-               /* structure value contains a channel indication */
+               /* we have a channel number */
                c = fwrq->m;
-       else {
-               /* structure contains a frequency indication and fwrq->e = 1 */
-               int f = fwrq->m / 100000;
-
-               if (fwrq->e != 1)
-                       return -EINVAL;
-               if ((f >= 2412) && (f <= 2484)) {
-                       while ((c < 14) && (f != frequency_list_bg[c]))
-                               c++;
-                       if (c >= 14)
-                               return -EINVAL;
-               } else if ((f >= (int) 5170) && (f <= (int) 5320)) {
-                       while ((c < 12) && (f != frequency_list_a[c]))
-                               c++;
-                       if (c >= 12)
-                               return -EINVAL;
-               } else
-                       return -EINVAL;
-               c++;
-       }
+       else
+               c = (fwrq->e == 1) ? channel_of_freq(fwrq->m / 100000) : 0;
 
-       rvalue = mgt_set_request(priv, DOT11_OID_CHANNEL, 0, &c);
+       rvalue = c ? mgt_set_request(priv, DOT11_OID_CHANNEL, 0, &c) : -EINVAL;
 
        /* Call commit handler */
        return (rvalue ? rvalue : -EINPROGRESS);
@@ -410,7 +391,7 @@ prism54_set_mode(struct net_device *ndev, struct iw_request_info *info,
 
        mgt_commit(priv);
        priv->ndev->type = (priv->iw_mode == IW_MODE_MONITOR)
-           ? ARPHRD_IEEE80211 : ARPHRD_ETHER;
+           ? priv->monitor_type : ARPHRD_ETHER;
        up_write(&priv->mib_sem);
 
        return 0;
@@ -531,20 +512,20 @@ prism54_get_range(struct net_device *ndev, struct iw_request_info *info,
            mgt_get_request(priv, DOT11_OID_SUPPORTEDFREQUENCIES, 0, NULL, &r);
        freq = r.ptr;
 
-       range->num_channels = le16_to_cpu(freq->nr);
-       range->num_frequency = le16_to_cpu(freq->nr);
+       range->num_channels = freq->nr;
+       range->num_frequency = freq->nr;
 
        /* Frequencies are not listed in the right order. The reordering is probably
         * firmware dependant and thus should work for everyone.
         */
-       m = min(IW_MAX_FREQUENCIES, (int) le16_to_cpu(freq->nr));
+       m = min(IW_MAX_FREQUENCIES, (int) freq->nr);
        for (i = 0; i < m - 12; i++) {
-               range->freq[i].m = le16_to_cpu(freq->mhz[12 + i]);
+               range->freq[i].m = freq->mhz[12 + i];
                range->freq[i].e = 6;
                range->freq[i].i = i + 1;
        }
        for (i = m - 12; i < m; i++) {
-               range->freq[i].m = le16_to_cpu(freq->mhz[i - m + 12]);
+               range->freq[i].m = freq->mhz[i - m + 12];
                range->freq[i].e = 6;
                range->freq[i].i = i + 23;
        }
@@ -655,7 +636,7 @@ prism54_translate_bss(struct net_device *ndev, char *current_ev,
 #define CAP_CRYPT 0x10
 
        /* Mode */
-       cap = le16_to_cpu(bss->capinfo);
+       cap = bss->capinfo;
        iwe.u.mode = 0;
        if (cap & CAP_ESS)
                iwe.u.mode = IW_MODE_MASTER;
@@ -747,7 +728,7 @@ prism54_get_scan(struct net_device *ndev, struct iw_request_info *info,
        bsslist = r.ptr;
 
        /* ok now, scan the list and translate its info */
-       for (i = 0; i < min(IW_MAX_AP, (int) le32_to_cpu(bsslist->nr)); i++)
+       for (i = 0; i < min(IW_MAX_AP, (int) bsslist->nr); i++)
                current_ev = prism54_translate_bss(ndev, current_ev,
                                                   extra + IW_SCAN_MAX_DATA,
                                                   &(bsslist->bsslist[i]),
@@ -869,25 +850,26 @@ prism54_set_rate(struct net_device *ndev,
                return mgt_set_request(priv, DOT11_OID_PROFILES, 0, &profile);
        }
        
-       if((ret = mgt_get_request(priv, DOT11_OID_SUPPORTEDRATES, 0, NULL, &r)))
+       if ((ret =
+            mgt_get_request(priv, DOT11_OID_SUPPORTEDRATES, 0, NULL, &r)))
                return ret;
                
        rate = (u32) (vwrq->value / 500000);
        data = r.ptr;
        i = 0;
        
-       while(data[i]) {
-               if(rate && (data[i] == rate)) {
+       while (data[i]) {
+               if (rate && (data[i] == rate)) {
                        break;
                }
-               if(vwrq->value == i) {
+               if (vwrq->value == i) {
                        break;
                }
                data[i] |= 0x80;
                i++;
        }
                
-       if(!data[i]) {
+       if (!data[i]) {
                return -EINVAL;
        }
        
@@ -931,12 +913,12 @@ prism54_get_rate(struct net_device *ndev,
        union oid_res_t r;
 
        /* Get the current bit rate */
-       if((rvalue = mgt_get_request(priv, GEN_OID_LINKSTATE, 0, NULL, &r)))
+       if ((rvalue = mgt_get_request(priv, GEN_OID_LINKSTATE, 0, NULL, &r)))
                return rvalue;
        vwrq->value = r.u * 500000;
 
        /* request the device for the enabled rates */
-       if((rvalue = mgt_get_request(priv, DOT11_OID_RATES, 0, NULL, &r)))
+       if ((rvalue = mgt_get_request(priv, DOT11_OID_RATES, 0, NULL, &r)))
                return rvalue;
        data = r.ptr;
        vwrq->fixed = (data[0] != 0) && (data[1] == 0);
@@ -1225,7 +1207,7 @@ prism54_get_txpower(struct net_device *ndev, struct iw_request_info *info,
 
        rvalue = mgt_get_request(priv, OID_INL_OUTPUTPOWER, 0, NULL, &r);
        /* intersil firmware operates in 0.25 dBm (1/4 dBm) */
-       vwrq->value = (s32)r.u / 4;
+       vwrq->value = (s32) r.u / 4;
        vwrq->fixed = 1;
        /* radio is not turned of
         * btw: how is possible to turn off only the radio 
@@ -1271,28 +1253,41 @@ prism54_reset(struct net_device *ndev, struct iw_request_info *info,
 }
 
 static int
-prism54_set_beacon(struct net_device *ndev, struct iw_request_info *info,
-                  __u32 * uwrq, char *extra)
+prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
+               struct iw_point *dwrq, char *extra)
 {
-       int rvalue = mgt_set_request((islpci_private *) netdev_priv(ndev),
-                                    DOT11_OID_BEACONPERIOD, 0, uwrq);
+       union oid_res_t r;
+       int rvalue;
+       enum oid_num_t n = dwrq->flags;
 
-       return (rvalue ? rvalue : -EINPROGRESS);
+       rvalue = mgt_get_request((islpci_private *) ndev->priv, n, 0, NULL, &r);
+       dwrq->length = mgt_response_to_str(n, &r, extra);
+       if ((isl_oid[n].flags & OID_FLAG_TYPE) != OID_TYPE_U32)
+               kfree(r.ptr);
+       return rvalue;
 }
 
 static int
-prism54_get_beacon(struct net_device *ndev, struct iw_request_info *info,
+prism54_set_u32(struct net_device *ndev, struct iw_request_info *info,
                   __u32 * uwrq, char *extra)
 {
-       union oid_res_t r;
-       int rvalue;
+       /*
+          u32 *i = (int *) extra;
+          int param = *i;
+          int u = *(i + 1);
+        */
+       u32 oid = uwrq[0], u = uwrq[1];
 
-       rvalue =
-           mgt_get_request((islpci_private *) netdev_priv(ndev),
-                           DOT11_OID_BEACONPERIOD, 0, NULL, &r);
-       *uwrq = r.u;
+       return mgt_set_request((islpci_private *) ndev->priv, oid, 0, &u);
+}
 
-       return rvalue;
+static int
+prism54_set_raw(struct net_device *ndev, struct iw_request_info *info,
+               struct iw_point *dwrq, char *extra)
+{
+       u32 oid = dwrq->flags;
+
+       return mgt_set_request((islpci_private *) ndev->priv, oid, 0, extra);
 }
 
 void
@@ -1511,8 +1506,9 @@ prism54_kick_all(struct net_device *ndev, struct iw_request_info *info,
                return -ENOMEM;
 
        /* Tell the card to kick every client */
-       mlme->id = cpu_to_le16(0);
-       rvalue = mgt_set_request(netdev_priv(ndev), DOT11_OID_DISASSOCIATE, 0, mlme);
+       mlme->id = 0;
+       rvalue =
+           mgt_set_request(netdev_priv(ndev), DOT11_OID_DISASSOCIATE, 0, mlme);
        kfree(mlme);
 
        return rvalue;
@@ -1535,8 +1531,9 @@ prism54_kick_mac(struct net_device *ndev, struct iw_request_info *info,
 
        /* Tell the card to only kick the corresponding bastard */
        memcpy(mlme->address, addr->sa_data, ETH_ALEN);
-       mlme->id = cpu_to_le16(-1);
-       rvalue = mgt_set_request(netdev_priv(ndev), DOT11_OID_DISASSOCIATE, 0, mlme);
+       mlme->id = -1;
+       rvalue =
+           mgt_set_request(netdev_priv(ndev), DOT11_OID_DISASSOCIATE, 0, mlme);
 
        kfree(mlme);
 
@@ -1551,12 +1548,12 @@ format_event(islpci_private *priv, char *dest, const char *str,
 {
        const u8 *a = mlme->address;
        int n = snprintf(dest, IW_CUSTOM_MAX,
-                        "%s %s %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X %s",
+                        "%s %s %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X %s (%2.2X)",
                         str,
-                        ((priv->iw_mode == IW_MODE_MASTER) ? "to" : "from"),
+                        ((priv->iw_mode == IW_MODE_MASTER) ? "from" : "to"),
                         a[0], a[1], a[2], a[3], a[4], a[5],
                         (error ? (mlme->code ? " : REJECTED " : " : ACCEPTED ")
-                         : ""));
+                         : ""), mlme->code);
        BUG_ON(n > IW_CUSTOM_MAX);
        *length = n;
 }
@@ -1598,14 +1595,15 @@ link_changed(struct net_device *ndev, u32 bitrate)
 {
        islpci_private *priv = netdev_priv(ndev);
 
-       if (le32_to_cpu(bitrate)) {
+       if (bitrate) {
                if (priv->iw_mode == IW_MODE_INFRA) {
                        union iwreq_data uwrq;
                        prism54_get_wap(ndev, NULL, (struct sockaddr *) &uwrq,
                                        NULL);
                        wireless_send_event(ndev, SIOCGIWAP, &uwrq, NULL);
                } else
-                       send_simple_event(netdev_priv(ndev), "Link established");
+                       send_simple_event(netdev_priv(ndev),
+                                         "Link established");
        } else
                send_simple_event(netdev_priv(ndev), "Link lost");
 }
@@ -1765,15 +1763,14 @@ prism54_process_bss_data(islpci_private *priv, u32 oid, u8 *addr,
 static void
 handle_request(islpci_private *priv, struct obj_mlme *mlme, enum oid_num_t oid)
 {
-       if (((le16_to_cpu(mlme->state) == DOT11_STATE_AUTHING) ||
-            (le16_to_cpu(mlme->state) == DOT11_STATE_ASSOCING))
+       if (((mlme->state == DOT11_STATE_AUTHING) ||
+            (mlme->state == DOT11_STATE_ASSOCING))
            && mgt_mlme_answer(priv)) {
                /* Someone is requesting auth and we must respond. Just send back
                 * the trap with error code set accordingly.
                 */
-               mlme->code = cpu_to_le16(prism54_mac_accept(&priv->acl,
-                                                           mlme->
-                                                           address) ? 0 : 1);
+               mlme->code = prism54_mac_accept(&priv->acl,
+                                               mlme->address) ? 0 : 1;
                mgt_set_request(priv, oid, 0, mlme);
        }
 }
@@ -1797,6 +1794,13 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
         * suited. We use the more flexible custom event facility.
         */
 
+       /* I fear prism54_process_bss_data won't work with big endian data */
+       if ((oid == DOT11_OID_BEACON) || (oid == DOT11_OID_PROBE))
+               prism54_process_bss_data(priv, oid, mlme->address,
+                                        payload, len);
+
+       mgt_le_to_cpu(isl_oid[oid].flags & OID_FLAG_TYPE, (void *) mlme);
+
        switch (oid) {
 
        case GEN_OID_LINKSTATE:
@@ -1831,8 +1835,6 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
                break;
 
        case DOT11_OID_BEACON:
-               prism54_process_bss_data(priv, oid, mlme->address,
-                                        payload, len);
                send_formatted_event(priv,
                                     "Received a beacon from an unkown AP",
                                     mlme, 0);
@@ -1840,8 +1842,6 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
 
        case DOT11_OID_PROBE:
                /* we received a probe from a client. */
-               prism54_process_bss_data(priv, oid, mlme->address,
-                                        payload, len);
                send_formatted_event(priv, "Received a probe from client", mlme,
                                     0);
                break;
@@ -1914,13 +1914,6 @@ prism54_set_mac_address(struct net_device *ndev, void *addr)
        return ret;
 }
 
-int
-prism54_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
-{
-       /* should we really support this old stuff ? */
-       return -EOPNOTSUPP;
-}
-
 int
 prism54_set_wpa(struct net_device *ndev, struct iw_request_info *info,
                __u32 * uwrq, char *extra)
@@ -1950,9 +1943,31 @@ prism54_get_wpa(struct net_device *ndev, struct iw_request_info *info,
        return 0;
 }
 
+int
+prism54_set_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+                    __u32 * uwrq, char *extra)
+{
+       islpci_private *priv = netdev_priv(ndev);
+       priv->monitor_type =
+           (*uwrq ? ARPHRD_IEEE80211_PRISM : ARPHRD_IEEE80211);
+       if (priv->iw_mode == IW_MODE_MONITOR)
+               priv->ndev->type = priv->monitor_type;
+
+       return 0;
+}
+
+int
+prism54_get_prismhdr(struct net_device *ndev, struct iw_request_info *info,
+                    __u32 * uwrq, char *extra)
+{
+       islpci_private *priv = netdev_priv(ndev);
+       *uwrq = (priv->monitor_type == ARPHRD_IEEE80211_PRISM);
+       return 0;
+}
+
 int
 prism54_set_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
-               __u32 *uwrq, char *extra)
+                         __u32 * uwrq, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        u32 max_burst;
@@ -1965,7 +1980,7 @@ prism54_set_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
 
 int
 prism54_get_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
-               __u32 *uwrq, char *extra)
+                         __u32 * uwrq, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        union oid_res_t r;
@@ -1979,7 +1994,7 @@ prism54_get_maxframeburst(struct net_device *ndev, struct iw_request_info *info,
 
 int
 prism54_set_profile(struct net_device *ndev, struct iw_request_info *info,
-               __u32 *uwrq, char *extra)
+                   __u32 * uwrq, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        u32 profile;
@@ -1992,7 +2007,7 @@ prism54_set_profile(struct net_device *ndev, struct iw_request_info *info,
 
 int
 prism54_get_profile(struct net_device *ndev, struct iw_request_info *info,
-               __u32 *uwrq, char *extra)
+                   __u32 * uwrq, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        union oid_res_t r;
@@ -2005,8 +2020,8 @@ prism54_get_profile(struct net_device *ndev, struct iw_request_info *info,
 }
 
 int
-prism54_oid(struct net_device *ndev, struct iw_request_info *info,
-               __u32 *uwrq, char *extra)
+prism54_debug_oid(struct net_device *ndev, struct iw_request_info *info,
+                 __u32 * uwrq, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        
@@ -2017,7 +2032,7 @@ prism54_oid(struct net_device *ndev, struct iw_request_info *info,
 }
 
 int
-prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
+prism54_debug_get_oid(struct net_device *ndev, struct iw_request_info *info,
                struct iw_point *data, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
@@ -2028,11 +2043,15 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
        data->length = 0;
        
        if (islpci_get_state(priv) >= PRV_STATE_INIT) {
-               ret = islpci_mgt_transaction(priv->ndev, PIMFOR_OP_GET, priv->priv_oid, extra, 256, &response);
+               ret =
+                   islpci_mgt_transaction(priv->ndev, PIMFOR_OP_GET,
+                                          priv->priv_oid, extra, 256,
+                                          &response);
                response_op = response->header->operation;
                printk("%s: ret: %i\n", ndev->name, ret);
                printk("%s: response_op: %i\n", ndev->name, response_op);
-               if (ret || !response || response->header->operation == PIMFOR_OP_ERROR) {
+               if (ret || !response
+                   || response->header->operation == PIMFOR_OP_ERROR) {
                        if (response) {
                                islpci_mgt_release(response);
                        }
@@ -2051,21 +2070,26 @@ prism54_get_oid(struct net_device *ndev, struct iw_request_info *info,
 }
 
 int
-prism54_set_oid(struct net_device *ndev, struct iw_request_info *info,
+prism54_debug_set_oid(struct net_device *ndev, struct iw_request_info *info,
                struct iw_point *data, char *extra)
 {
        islpci_private *priv = netdev_priv(ndev);
        struct islpci_mgmtframe *response = NULL;
        int ret = 0, response_op = PIMFOR_OP_ERROR;
        
-       printk("%s: set_oid 0x%08X\tlen: %d\n", ndev->name, priv->priv_oid, data->length);
+       printk("%s: set_oid 0x%08X\tlen: %d\n", ndev->name, priv->priv_oid,
+              data->length);
        
        if (islpci_get_state(priv) >= PRV_STATE_INIT) {
-               ret = islpci_mgt_transaction(priv->ndev, PIMFOR_OP_SET, priv->priv_oid, extra, data->length, &response);
+               ret =
+                   islpci_mgt_transaction(priv->ndev, PIMFOR_OP_SET,
+                                          priv->priv_oid, extra, data->length,
+                                          &response);
                printk("%s: ret: %i\n", ndev->name, ret);
                if (!ret) {
                        response_op = response->header->operation;
-                       printk("%s: response_op: %i\n", ndev->name, response_op);
+                       printk("%s: response_op: %i\n", ndev->name,
+                              response_op);
                        islpci_mgt_release(response);
                }
                if (ret || response_op == PIMFOR_OP_ERROR) {
@@ -2077,6 +2101,31 @@ prism54_set_oid(struct net_device *ndev, struct iw_request_info *info,
        return ret;
 }
 
+static int
+prism54_set_spy(struct net_device *ndev,
+               struct iw_request_info *info,
+               union iwreq_data *uwrq, char *extra)
+{
+       islpci_private *priv = netdev_priv(ndev);
+       u32 u, oid = OID_INL_CONFIG;
+
+       down_write(&priv->mib_sem);
+       mgt_get(priv, OID_INL_CONFIG, &u);
+
+       if ((uwrq->data.length == 0) && (priv->spy_data.spy_number > 0))
+               /* disable spy */
+               u &= ~INL_CONFIG_RXANNEX;
+       else if ((uwrq->data.length > 0) && (priv->spy_data.spy_number == 0))
+               /* enable spy */
+               u |= INL_CONFIG_RXANNEX;
+
+       mgt_set(priv, OID_INL_CONFIG, &u);
+       mgt_commit_list(priv, &oid, 1);
+       up_write(&priv->mib_sem);
+
+       return iw_handler_set_spy(ndev, info, uwrq, extra);
+}
+
 static const iw_handler prism54_handler[] = {
        (iw_handler) prism54_commit,    /* SIOCSIWCOMMIT */
        (iw_handler) prism54_get_name,  /* SIOCGIWNAME */
@@ -2094,7 +2143,7 @@ static const iw_handler prism54_handler[] = {
        (iw_handler) NULL,      /* SIOCGIWPRIV */
        (iw_handler) NULL,      /* SIOCSIWSTATS */
        (iw_handler) NULL,      /* SIOCGIWSTATS */
-       iw_handler_set_spy,     /* SIOCSIWSPY */
+       prism54_set_spy,        /* SIOCSIWSPY */
        iw_handler_get_spy,     /* SIOCGIWSPY */
        iw_handler_set_thrspy,  /* SIOCSIWTHRSPY */
        iw_handler_get_thrspy,  /* SIOCGIWTHRSPY */
@@ -2129,33 +2178,50 @@ static const iw_handler prism54_handler[] = {
 /* The low order bit identify a SET (0) or a GET (1) ioctl.  */
 
 #define PRISM54_RESET          SIOCIWFIRSTPRIV
-#define PRISM54_GET_BEACON     SIOCIWFIRSTPRIV+1
-#define PRISM54_SET_BEACON     SIOCIWFIRSTPRIV+2
-#define PRISM54_GET_POLICY SIOCIWFIRSTPRIV+3
-#define PRISM54_SET_POLICY SIOCIWFIRSTPRIV+4
-#define PRISM54_GET_MAC           SIOCIWFIRSTPRIV+5
-#define PRISM54_ADD_MAC           SIOCIWFIRSTPRIV+6
+#define PRISM54_GET_POLICY     SIOCIWFIRSTPRIV+1
+#define PRISM54_SET_POLICY     SIOCIWFIRSTPRIV+2
+#define PRISM54_GET_MAC                SIOCIWFIRSTPRIV+3
+#define PRISM54_ADD_MAC                SIOCIWFIRSTPRIV+4
+
+#define PRISM54_DEL_MAC                SIOCIWFIRSTPRIV+6
 
-#define PRISM54_DEL_MAC    SIOCIWFIRSTPRIV+8
+#define PRISM54_KICK_MAC       SIOCIWFIRSTPRIV+8
 
-#define PRISM54_KICK_MAC   SIOCIWFIRSTPRIV+10
+#define PRISM54_KICK_ALL       SIOCIWFIRSTPRIV+10
 
-#define PRISM54_KICK_ALL   SIOCIWFIRSTPRIV+12
+#define PRISM54_GET_WPA                SIOCIWFIRSTPRIV+11
+#define PRISM54_SET_WPA                SIOCIWFIRSTPRIV+12
 
-#define PRISM54_GET_WPA           SIOCIWFIRSTPRIV+13
-#define PRISM54_SET_WPA           SIOCIWFIRSTPRIV+14
+#define PRISM54_DBG_OID                SIOCIWFIRSTPRIV+14
+#define PRISM54_DBG_GET_OID    SIOCIWFIRSTPRIV+15
+#define PRISM54_DBG_SET_OID    SIOCIWFIRSTPRIV+16
 
-#define PRISM54_OID       SIOCIWFIRSTPRIV+16
 #define PRISM54_GET_OID           SIOCIWFIRSTPRIV+17
-#define PRISM54_SET_OID           SIOCIWFIRSTPRIV+18
+#define PRISM54_SET_OID_U32    SIOCIWFIRSTPRIV+18
+#define        PRISM54_SET_OID_STR     SIOCIWFIRSTPRIV+20
+#define        PRISM54_SET_OID_ADDR    SIOCIWFIRSTPRIV+22
+
+#define PRISM54_GET_PRISMHDR   SIOCIWFIRSTPRIV+23
+#define PRISM54_SET_PRISMHDR   SIOCIWFIRSTPRIV+24
+
+#define IWPRIV_SET_U32(n,x)    { n, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
+#define IWPRIV_SET_SSID(n,x)   { n, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
+#define IWPRIV_SET_ADDR(n,x)   { n, IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, "set_"x }
+#define IWPRIV_GET(n,x)        { n, 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | PRIV_STR_SIZE, "get_"x }
+
+#define IWPRIV_U32(n,x)                IWPRIV_SET_U32(n,x), IWPRIV_GET(n,x)
+#define IWPRIV_SSID(n,x)       IWPRIV_SET_SSID(n,x), IWPRIV_GET(n,x)
+#define IWPRIV_ADDR(n,x)       IWPRIV_SET_ADDR(n,x), IWPRIV_GET(n,x)
+
+/* Note : limited to 128 private ioctls */
 
 static const struct iw_priv_args prism54_private_args[] = {
 /*{ cmd, set_args, get_args, name } */
        {PRISM54_RESET, 0, 0, "reset"},
-       {PRISM54_GET_BEACON, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-        "getBeaconPeriod"},
-       {PRISM54_SET_BEACON, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0,
-        "setBeaconPeriod"},
+       {PRISM54_GET_PRISMHDR, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+        "get_prismhdr"},
+       {PRISM54_SET_PRISMHDR, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0,
+        "set_prismhdr"},
        {PRISM54_GET_POLICY, 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
         "getPolicy"},
        {PRISM54_SET_POLICY, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0,
@@ -2172,15 +2238,77 @@ static const struct iw_priv_args prism54_private_args[] = {
         "get_wpa"},
        {PRISM54_SET_WPA, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0,
         "set_wpa"},
-       {PRISM54_OID, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "oid"},
-       {PRISM54_GET_OID, 0, IW_PRIV_TYPE_BYTE | 256, "get_oid"},
-       {PRISM54_SET_OID, IW_PRIV_TYPE_BYTE | 256, 0, "set_oid"},
+       {PRISM54_DBG_OID, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0,
+        "dbg_oid"},
+       {PRISM54_DBG_GET_OID, 0, IW_PRIV_TYPE_BYTE | 256, "dbg_get_oid"},
+       {PRISM54_DBG_SET_OID, IW_PRIV_TYPE_BYTE | 256, 0, "dbg_get_oid"},
+       /* --- sub-ioctls handlers --- */
+       {PRISM54_GET_OID,
+        0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | PRIV_STR_SIZE, ""},
+       {PRISM54_SET_OID_U32,
+        IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, ""},
+       {PRISM54_SET_OID_STR,
+        IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 1, 0, ""},
+       {PRISM54_SET_OID_ADDR,
+        IW_PRIV_TYPE_ADDR | IW_PRIV_SIZE_FIXED | 1, 0, ""},
+       /* --- sub-ioctls definitions --- */
+       IWPRIV_ADDR(GEN_OID_MACADDRESS, "addr"),
+       IWPRIV_GET(GEN_OID_LINKSTATE, "linkstate"),
+       IWPRIV_U32(DOT11_OID_BSSTYPE, "bsstype"),
+       IWPRIV_ADDR(DOT11_OID_BSSID, "bssid"),
+       IWPRIV_U32(DOT11_OID_STATE, "state"),
+       IWPRIV_U32(DOT11_OID_AID, "aid"),
+
+       IWPRIV_SSID(DOT11_OID_SSIDOVERRIDE, "ssidoverride"),
+
+       IWPRIV_U32(DOT11_OID_MEDIUMLIMIT, "medlimit"),
+       IWPRIV_U32(DOT11_OID_BEACONPERIOD, "beacon"),
+       IWPRIV_U32(DOT11_OID_DTIMPERIOD, "dtimperiod"),
+
+       IWPRIV_U32(DOT11_OID_AUTHENABLE, "authenable"),
+       IWPRIV_U32(DOT11_OID_PRIVACYINVOKED, "privinvok"),
+       IWPRIV_U32(DOT11_OID_EXUNENCRYPTED, "exunencrypt"),
+       
+       IWPRIV_U32(DOT11_OID_REKEYTHRESHOLD, "rekeythresh"),
+
+       IWPRIV_U32(DOT11_OID_MAXTXLIFETIME, "maxtxlife"),
+       IWPRIV_U32(DOT11_OID_MAXRXLIFETIME, "maxrxlife"),
+       IWPRIV_U32(DOT11_OID_ALOFT_FIXEDRATE, "fixedrate"),
+       IWPRIV_U32(DOT11_OID_MAXFRAMEBURST, "frameburst"),
+       IWPRIV_U32(DOT11_OID_PSM, "psm"),
+
+       IWPRIV_U32(DOT11_OID_BRIDGELOCAL, "bridge"),
+       IWPRIV_U32(DOT11_OID_CLIENTS, "clients"),
+       IWPRIV_U32(DOT11_OID_CLIENTSASSOCIATED, "clientassoc"),
+       IWPRIV_U32(DOT11_OID_DOT1XENABLE, "dot1xenable"),
+       IWPRIV_U32(DOT11_OID_ANTENNARX, "rxant"),
+       IWPRIV_U32(DOT11_OID_ANTENNATX, "txant"),
+       IWPRIV_U32(DOT11_OID_ANTENNADIVERSITY, "antdivers"),
+       IWPRIV_U32(DOT11_OID_EDTHRESHOLD, "edthresh"),
+       IWPRIV_U32(DOT11_OID_PREAMBLESETTINGS, "preamble"),
+       IWPRIV_GET(DOT11_OID_RATES, "rates"),
+       IWPRIV_U32(DOT11_OID_OUTPUTPOWER, ".11outpower"),
+       IWPRIV_GET(DOT11_OID_SUPPORTEDRATES, "supprates"),
+       IWPRIV_GET(DOT11_OID_SUPPORTEDFREQUENCIES, "suppfreq"),
+
+       IWPRIV_U32(DOT11_OID_NOISEFLOOR, "noisefloor"),
+       IWPRIV_GET(DOT11_OID_FREQUENCYACTIVITY, "freqactivity"),
+       IWPRIV_U32(DOT11_OID_NONERPPROTECTION, "nonerpprotec"),
+       IWPRIV_U32(DOT11_OID_PROFILES, "profile"),
+       IWPRIV_GET(DOT11_OID_EXTENDEDRATES, "extrates"),
+       IWPRIV_U32(DOT11_OID_MLMEAUTOLEVEL, "mlmelevel"),
+
+       IWPRIV_GET(DOT11_OID_BSSS, "bsss"),
+       IWPRIV_GET(DOT11_OID_BSSLIST, "bsslist"),
+       IWPRIV_U32(OID_INL_MODE, "mode"),
+       IWPRIV_U32(OID_INL_CONFIG, "config"),
+       IWPRIV_U32(OID_INL_DOT11D_CONFORMANCE, ".11dconform"),
+       IWPRIV_GET(OID_INL_PHYCAPABILITIES, "phycapa"),
+       IWPRIV_U32(OID_INL_OUTPUTPOWER, "outpower"),
 };
 
 static const iw_handler prism54_private_handler[] = {
        (iw_handler) prism54_reset,
-       (iw_handler) prism54_get_beacon,
-       (iw_handler) prism54_set_beacon,
        (iw_handler) prism54_get_policy,
        (iw_handler) prism54_set_policy,
        (iw_handler) prism54_get_mac,
@@ -2194,9 +2322,17 @@ static const iw_handler prism54_private_handler[] = {
        (iw_handler) prism54_get_wpa,
        (iw_handler) prism54_set_wpa,
        (iw_handler) NULL,
-       (iw_handler) prism54_oid,
+       (iw_handler) prism54_debug_oid,
+       (iw_handler) prism54_debug_get_oid,
+       (iw_handler) prism54_debug_set_oid,
        (iw_handler) prism54_get_oid,
-       (iw_handler) prism54_set_oid,
+       (iw_handler) prism54_set_u32,
+       (iw_handler) NULL,
+       (iw_handler) prism54_set_raw,
+       (iw_handler) NULL,
+       (iw_handler) prism54_set_raw,
+       (iw_handler) prism54_get_prismhdr,
+       (iw_handler) prism54_set_prismhdr,
 };
 
 const struct iw_handler_def prism54_handler_def = {
@@ -2207,5 +2343,13 @@ const struct iw_handler_def prism54_handler_def = {
        .standard = (iw_handler *) prism54_handler,
        .private = (iw_handler *) prism54_private_handler,
        .private_args = (struct iw_priv_args *) prism54_private_args,
+       .spy_offset = offsetof(islpci_private, spy_data),
 };
 
+/* For ioctls that don't work with the new API */
+
+int
+prism54_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
+{
+       return -EOPNOTSUPP;
+}
index 0e43dea..d5170c4 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/isl_ioctl.h,v 1.30 2004/01/30 16:24:00 ajfa Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *            (C) 2003 Aurelien Alleaume <slts@free.fr>
index 25732d2..c4b27d2 100644 (file)
@@ -1,8 +1,9 @@
 /*
- *  $Id: isl_oid.h,v 1.3 2004/03/09 09:05:27 mcgrof Exp $
+ *
  *  
  *  Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
  *  Copyright (C) 2004 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
+ *  Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
  *
  *  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
@@ -457,16 +458,29 @@ enum oid_num_t {
        OID_NUM_LAST
 };
 
-/* We  could add more flags. eg: in which mode are they allowed, ro, rw, ...*/
-#define OID_FLAG_CACHED        0x01
-#define OID_FLAG_U32   0x02
-#define OID_FLAG_MLMEEX        0x04    /* this type is special because of a variable
-                                  size field when sending. Not yet implemented (not used in driver). */
+#define OID_FLAG_CACHED                0x80
+#define OID_FLAG_TYPE          0x7f
+
+#define OID_TYPE_U32           0x01
+#define OID_TYPE_SSID          0x02
+#define OID_TYPE_KEY           0x03
+#define OID_TYPE_BUFFER                0x04
+#define OID_TYPE_BSS           0x05
+#define OID_TYPE_BSSLIST       0x06
+#define OID_TYPE_FREQUENCIES   0x07
+#define OID_TYPE_MLME          0x08
+#define OID_TYPE_MLMEEX                0x09
+#define OID_TYPE_ADDR          0x0A
+#define OID_TYPE_RAW           0x0B
+
+/* OID_TYPE_MLMEEX is special because of a variable size field when sending.
+ * Not yet implemented (not used in driver anyway).
+ */
 
 struct oid_t {
        enum oid_num_t oid;
        short range;            /* to define a range of oid */
-       short size;             /* size of the associated data */
+       short size;             /* max size of the associated data */
        char flags;
 };
 
@@ -478,6 +492,7 @@ union oid_res_t {
 #define        IWMAX_BITRATES  20
 #define        IWMAX_BSS       24
 #define IWMAX_FREQ     30
+#define PRIV_STR_SIZE  1024
 
 #endif                         /* !defined(_ISL_OID_H) */
 /* EOF */
index e1545f6..1571939 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_dev.c,v 1.68 2004/02/28 03:06:07 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *  Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
@@ -715,9 +715,9 @@ islpci_setup(struct pci_dev *pdev)
        priv = netdev_priv(ndev);
        priv->ndev = ndev;
        priv->pdev = pdev;
-
+       priv->monitor_type = ARPHRD_IEEE80211;
        priv->ndev->type = (priv->iw_mode == IW_MODE_MONITOR) ?
-               ARPHRD_IEEE80211: ARPHRD_ETHER;
+               priv->monitor_type : ARPHRD_ETHER;
 
        /* save the start and end address of the PCI memory area */
        ndev->mem_start = (unsigned long) priv->device_base;
@@ -743,9 +743,11 @@ islpci_setup(struct pci_dev *pdev)
        /* initialize workqueue's */
        INIT_WORK(&priv->stats_work,
                  (void (*)(void *)) prism54_update_stats, priv);
-
        priv->stats_timestamp = 0;
 
+       INIT_WORK(&priv->reset_task, islpci_do_reset_and_wake, priv);
+       priv->reset_task_pending = 0;
+
        /* allocate various memory areas */
        if (islpci_alloc_memory(priv))
                goto do_free_netdev;
index 65f696c..de92b4e 100644 (file)
@@ -1,8 +1,9 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_dev.h,v 1.53 2004/02/28 03:06:07 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc. 
  *  Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
  *  Copyright (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
+ *  Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
  *
  *  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
@@ -25,6 +26,7 @@
 #include <linux/version.h>
 #include <linux/netdevice.h>
 #include <linux/wireless.h>
+#include <net/iw_handler.h>
 #include <linux/list.h>
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41)
@@ -110,6 +112,10 @@ typedef struct {
        struct iw_statistics local_iwstatistics;
        struct iw_statistics iwstatistics;
 
+       struct iw_spy_data spy_data; /* iwspy support */
+
+       int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
+
        struct islpci_acl acl;
 
        /* PCI bus allocation & configuration members */
@@ -187,6 +193,9 @@ typedef struct {
        struct list_head bss_wpa_list;
        int num_bss_wpa;
        struct semaphore wpa_sem;
+
+       struct work_struct reset_task;
+       int reset_task_pending;
 } islpci_private;
 
 static inline islpci_state_t
index 3bc6c5f..c18c42d 100644 (file)
@@ -1,7 +1,7 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_eth.c,v 1.27 2004/01/30 16:24:00 ajfa Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
- *
+ *  Copyright (C) 2004 Aurelien Alleaume <slts@free.fr>
  *  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
 #include <linux/delay.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
+#include <linux/if_arp.h>
 
 #include "isl_38xx.h"
 #include "islpci_eth.h"
 #include "islpci_mgt.h"
+#include "oid_mgt.h"
 
 /******************************************************************************
     Network Interface functions
@@ -246,6 +248,69 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
        return err;
 }
 
+static inline int
+islpci_monitor_rx(islpci_private *priv, struct sk_buff **skb)
+{
+       /* The card reports full 802.11 packets but with a 20 bytes
+        * header and without the FCS. But there a is a bit that
+        * indicates if the packet is corrupted :-) */
+       struct rfmon_header *hdr = (struct rfmon_header *) (*skb)->data;
+       if (hdr->flags & 0x01)
+               /* This one is bad. Drop it ! */
+               return -1;
+       if (priv->ndev->type == ARPHRD_IEEE80211_PRISM) {
+               struct avs_80211_1_header *avs;
+               /* extract the relevant data from the header */
+               u32 clock = hdr->clock;
+               u8 rate = hdr->rate;
+               u16 freq = be16_to_cpu(hdr->freq);
+               u8 rssi = hdr->rssi;
+
+               skb_pull(*skb, sizeof (struct rfmon_header));
+
+               if (skb_headroom(*skb) < sizeof (struct avs_80211_1_header)) {
+                       struct sk_buff *newskb = skb_copy_expand(*skb,
+                                                                sizeof (struct
+                                                                        avs_80211_1_header),
+                                                                0, GFP_ATOMIC);
+                       if (newskb) {
+                               kfree_skb(*skb);
+                               *skb = newskb;
+                       } else
+                               return -1;
+                       /* This behavior is not very subtile... */
+               }
+
+               /* make room for the new header and fill it. */
+               avs =
+                   (struct avs_80211_1_header *) skb_push(*skb,
+                                                          sizeof (struct
+                                                                  avs_80211_1_header));
+
+               avs->version = htonl(P80211CAPTURE_VERSION);
+               avs->length = htonl(sizeof (struct avs_80211_1_header));
+               avs->mactime = __cpu_to_be64(clock);
+               avs->hosttime = __cpu_to_be64(jiffies);
+               avs->phytype = htonl(6);        /*OFDM: 6 for (g), 8 for (a) */
+               avs->channel = htonl(channel_of_freq(freq));
+               avs->datarate = htonl(rate * 5);
+               avs->antenna = htonl(0);        /*unknown */
+               avs->priority = htonl(0);       /*unknown */
+               avs->ssi_type = htonl(2);       /*2: dBm, 3: raw RSSI */
+               avs->ssi_signal = htonl(rssi);
+               avs->ssi_noise = htonl(priv->local_iwstatistics.qual.noise);    /*better than 'undefined', I assume */
+               avs->preamble = htonl(0);       /*unknown */
+               avs->encoding = htonl(0);       /*unknown */
+       } else
+               skb_pull(*skb, sizeof (struct rfmon_header));
+
+       (*skb)->protocol = htons(ETH_P_802_2);
+       (*skb)->mac.raw = (*skb)->data;
+       (*skb)->pkt_type = PACKET_OTHERHOST;
+
+       return 0;
+}
+
 int
 islpci_eth_receive(islpci_private *priv)
 {
@@ -266,7 +331,8 @@ islpci_eth_receive(islpci_private *priv)
        index = priv->free_data_rx % ISL38XX_CB_RX_QSIZE;
        size = le16_to_cpu(control_block->rx_data_low[index].size);
        skb = priv->data_low_rx[index];
-       offset = ((unsigned long) le32_to_cpu(control_block->rx_data_low[index].address) -
+       offset = ((unsigned long)
+                 le32_to_cpu(control_block->rx_data_low[index].address) -
                  (unsigned long) skb->data) & 3;
 
 #if VERBOSE > SHOW_ERROR_MESSAGES
@@ -314,29 +380,32 @@ islpci_eth_receive(islpci_private *priv)
        /* do some additional sk_buff and network layer parameters */
        skb->dev = ndev;
 
-       /* take care of monitor mode */
-       if (priv->iw_mode == IW_MODE_MONITOR) {
-               /* The card reports full 802.11 packets but with a 20 bytes
-                * header and without the FCS. But there a is a bit that
-                * indicates if the packet is corrupted :-) */
-               /* int i; */
-               if (skb->data[8] & 0x01){
-                       /* This one is bad. Drop it !*/
-                       discard = 1;
-                       /* printk("BAD\n");*/
+       /* take care of monitor mode and spy monitoring. */
+       if (priv->iw_mode == IW_MODE_MONITOR)
+               discard = islpci_monitor_rx(priv, &skb);
+       else {
+               if (skb->data[2 * ETH_ALEN] == 0) {
+                       /* The packet has a rx_annex. Read it for spy monitoring, Then
+                        * remove it, while keeping the 2 leading MAC addr.
+                        */
+                       struct iw_quality wstats;
+                       struct rx_annex_header *annex =
+                           (struct rx_annex_header *) skb->data;
+                       wstats.level = annex->rfmon.rssi;
+                       /* The noise value can be a bit outdated if nobody's 
+                        * reading wireless stats... */
+                       wstats.noise = priv->local_iwstatistics.qual.noise;
+                       wstats.qual = wstats.level - wstats.noise;
+                       wstats.updated = 0x07;
+                       /* Update spy records */
+                       wireless_spy_update(ndev, annex->addr2, &wstats);
+
+                       memcpy(skb->data + sizeof (struct rfmon_header),
+                              skb->data, 2 * ETH_ALEN);
+                       skb_pull(skb, sizeof (struct rfmon_header));
                }
-               /*
-               for(i=0;i<50;i++)
-                       printk("%2.2X:",skb->data[i]);
-               printk("\n");
-               */              
-               skb_pull(skb, 20);
-               skb->protocol = htons(ETH_P_802_2);
-               skb->mac.raw = skb->data;
-               skb->pkt_type = PACKET_OTHERHOST;
-       } else
                skb->protocol = eth_type_trans(skb, ndev);
-
+       }
        skb->ip_summed = CHECKSUM_NONE;
        priv->statistics.rx_packets++;
        priv->statistics.rx_bytes += size;
@@ -351,8 +420,7 @@ islpci_eth_receive(islpci_private *priv)
        if (discard) {
                dev_kfree_skb(skb);
                skb = NULL;
-       }
-       else
+       } else
                netif_rx(skb);
 
        /* increment the read index for the rx data low queue */
@@ -403,7 +471,7 @@ islpci_eth_receive(islpci_private *priv)
                wmb();
 
                /* increment the driver read pointer */
-               add_le32p((u32 *) & control_block->
+               add_le32p((u32 *) &control_block->
                          driver_curr_frag[ISL38XX_CB_RX_DATA_LQ], 1);
        }
 
@@ -413,6 +481,15 @@ islpci_eth_receive(islpci_private *priv)
        return 0;
 }
 
+void
+islpci_do_reset_and_wake(void *data)
+{
+       islpci_private *priv = (islpci_private *) data;
+       islpci_reset(priv, 1);
+       netif_wake_queue(priv->ndev);
+       priv->reset_task_pending = 0;
+}
+
 void
 islpci_eth_tx_timeout(struct net_device *ndev)
 {
@@ -422,13 +499,11 @@ islpci_eth_tx_timeout(struct net_device *ndev)
        /* increment the transmit error counter */
        statistics->tx_errors++;
 
-#if 0
-       /* don't do this here! we are not allowed to sleep since we are in interrupt context */
-       if (islpci_reset(priv))
-               printk(KERN_ERR "%s: error on TX timeout card reset!\n",
-                      ndev->name);
-#endif
+       if (!priv->reset_task_pending) {
+               priv->reset_task_pending = 1;
+               netif_stop_queue(ndev);
+               schedule_work(&priv->reset_task);
+       }
 
-       /* netif_wake_queue(ndev); */
        return;
 }
index 35845f2..bc9d7a6 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_eth.h,v 1.5 2004/01/12 22:16:32 jmaurer Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *
 #include "isl_38xx.h"
 #include "islpci_dev.h"
 
+struct rfmon_header {
+       u16 unk0;               /* = 0x0000 */
+       u16 length;             /* = 0x1400 */
+       u32 clock;              /* 1MHz clock */
+       u8 flags;
+       u8 unk1;
+       u8 rate;
+       u8 unk2;
+       u16 freq;
+       u16 unk3;
+       u8 rssi;
+       u8 padding[3];
+} __attribute__ ((packed));
+
+struct rx_annex_header {
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       struct rfmon_header rfmon;
+} __attribute__ ((packed));
+
+/* wlan-ng (and hopefully others) AVS header, version one.  Fields in
+ * network byte order. */
+#define P80211CAPTURE_VERSION 0x80211001
+
+struct avs_80211_1_header {
+       uint32_t version;
+       uint32_t length;
+       uint64_t mactime;
+       uint64_t hosttime;
+       uint32_t phytype;
+       uint32_t channel;
+       uint32_t datarate;
+       uint32_t antenna;
+       uint32_t priority;
+       uint32_t ssi_type;
+       int32_t ssi_signal;
+       int32_t ssi_noise;
+       uint32_t preamble;
+       uint32_t encoding;
+};
+
 void islpci_eth_cleanup_transmit(islpci_private *, isl38xx_control_block *);
 int islpci_eth_transmit(struct sk_buff *, struct net_device *);
 int islpci_eth_receive(islpci_private *);
 void islpci_eth_tx_timeout(struct net_device *);
+void islpci_do_reset_and_wake(void *data);
 
 #endif                         /* _ISL_GEN_H */
index 5cd7da4..34b3b59 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_hotplug.c,v 1.56 2004/02/26 23:33:02 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *  Copyright (C) 2003 Herbert Valerio Riedel <hvr@gnu.org>
index 3dbe208..bdf77d6 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_mgt.c,v 1.40 2004/02/01 10:57:23 mcgrof Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *  Copyright 2004 Jens Maurer <Jens.Maurer@gmx.net>
index cb2ea6f..80337f9 100644 (file)
@@ -1,4 +1,4 @@
-/*  $Header: /var/lib/cvs/prism54-ng/ksrc/islpci_mgt.h,v 1.22 2004/01/30 16:24:00 ajfa Exp $
+/*
  *  
  *  Copyright (C) 2002 Intersil Americas Inc.
  *  Copyright (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
index 29aa136..cfa541c 100644 (file)
@@ -1,5 +1,5 @@
 /*   
- *  Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
+ *  Copyright (C) 2003,2004 Aurelien Alleaume <slts@free.fr>
  *
  *  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
@@ -31,182 +31,210 @@ const int frequency_list_a[] = { 5170, 5180, 5190, 5200, 5210, 5220, 5230,
        5240, 5260, 5280, 5300, 5320
 };
 
-#define OID_U32(x) {x, 0, sizeof(u32), OID_FLAG_U32}
-#define OID_U32_C(x) {x, 0, sizeof(u32), OID_FLAG_U32 | OID_FLAG_CACHED}
-#define OID_STRUCT(x,s) {x, 0, sizeof(s), 0}
-#define OID_STRUCT_C(x,s) {x, 0, sizeof(s), OID_FLAG_CACHED}
-#define OID_STRUCT_MLME(x){x, 0, sizeof(struct obj_mlme), 0}
-#define OID_STRUCT_MLMEEX(x){x, 0, sizeof(struct obj_mlmeex), OID_FLAG_MLMEEX}
+int
+channel_of_freq(int f)
+{
+       int c = 0;
+
+       if ((f >= 2412) && (f <= 2484)) {
+               while ((c < 14) && (f != frequency_list_bg[c]))
+                       c++;
+               if (c >= 14)
+                       return 0;
+       } else if ((f >= (int) 5170) && (f <= (int) 5320)) {
+               while ((c < 12) && (f != frequency_list_a[c]))
+                       c++;
+               if (c >= 12)
+                       return 0;
+       } else
+               return 0;
+
+       return ++c;
+}
+
+#define OID_STRUCT(name,oid,s,t) [name] = {oid, 0, sizeof(s), t}
+#define OID_STRUCT_C(name,oid,s,t) OID_STRUCT(name,oid,s,t | OID_FLAG_CACHED)
+#define OID_U32(name,oid) OID_STRUCT(name,oid,u32,OID_TYPE_U32)
+#define OID_U32_C(name,oid) OID_STRUCT_C(name,oid,u32,OID_TYPE_U32)
+#define OID_STRUCT_MLME(name,oid) OID_STRUCT(name,oid,struct obj_mlme,OID_TYPE_MLME)
+#define OID_STRUCT_MLMEEX(name,oid) OID_STRUCT(name,oid,struct obj_mlmeex,OID_TYPE_MLMEEX)
 
-#define OID_UNKNOWN(x) {x, 0, 0, 0}
+#define OID_UNKNOWN(name,oid) OID_STRUCT(name,oid,0,0)
 
 struct oid_t isl_oid[] = {
-       [GEN_OID_MACADDRESS] = OID_STRUCT(0x00000000, u8[6]),
-       [GEN_OID_LINKSTATE] = OID_U32(0x00000001),
-       [GEN_OID_WATCHDOG] = OID_UNKNOWN(0x00000002),
-       [GEN_OID_MIBOP] = OID_UNKNOWN(0x00000003),
-       [GEN_OID_OPTIONS] = OID_UNKNOWN(0x00000004),
-       [GEN_OID_LEDCONFIG] = OID_UNKNOWN(0x00000005),
+       OID_STRUCT(GEN_OID_MACADDRESS, 0x00000000, u8[6], OID_TYPE_ADDR),
+       OID_U32(GEN_OID_LINKSTATE, 0x00000001),
+       OID_UNKNOWN(GEN_OID_WATCHDOG, 0x00000002),
+       OID_UNKNOWN(GEN_OID_MIBOP, 0x00000003),
+       OID_UNKNOWN(GEN_OID_OPTIONS, 0x00000004),
+       OID_UNKNOWN(GEN_OID_LEDCONFIG, 0x00000005),
 
        /* 802.11 */
-       [DOT11_OID_BSSTYPE] = OID_U32_C(0x10000000),
-       [DOT11_OID_BSSID] = OID_STRUCT_C(0x10000001, u8[6]),
-       [DOT11_OID_SSID] = OID_STRUCT_C(0x10000002, struct obj_ssid),
-       [DOT11_OID_STATE] = OID_U32(0x10000003),
-       [DOT11_OID_AID] = OID_U32(0x10000004),
-       [DOT11_OID_COUNTRYSTRING] = OID_STRUCT(0x10000005, u8[4]),
-       [DOT11_OID_SSIDOVERRIDE] = OID_STRUCT_C(0x10000006, struct obj_ssid),
-
-       [DOT11_OID_MEDIUMLIMIT] = OID_U32(0x11000000),
-       [DOT11_OID_BEACONPERIOD] = OID_U32_C(0x11000001),
-       [DOT11_OID_DTIMPERIOD] = OID_U32(0x11000002),
-       [DOT11_OID_ATIMWINDOW] = OID_U32(0x11000003),
-       [DOT11_OID_LISTENINTERVAL] = OID_U32(0x11000004),
-       [DOT11_OID_CFPPERIOD] = OID_U32(0x11000005),
-       [DOT11_OID_CFPDURATION] = OID_U32(0x11000006),
-
-       [DOT11_OID_AUTHENABLE] = OID_U32_C(0x12000000),
-       [DOT11_OID_PRIVACYINVOKED] = OID_U32_C(0x12000001),
-       [DOT11_OID_EXUNENCRYPTED] = OID_U32_C(0x12000002),
-       [DOT11_OID_DEFKEYID] = OID_U32_C(0x12000003),
-       [DOT11_OID_DEFKEYX] = {0x12000004, 3, sizeof (struct obj_key), OID_FLAG_CACHED},        /* DOT11_OID_DEFKEY1,...DOT11_OID_DEFKEY4 */
-       [DOT11_OID_STAKEY] = OID_UNKNOWN(0x12000008),
-       [DOT11_OID_REKEYTHRESHOLD] = OID_U32(0x12000009),
-       [DOT11_OID_STASC] = OID_UNKNOWN(0x1200000a),
-
-       [DOT11_OID_PRIVTXREJECTED] = OID_U32(0x1a000000),
-       [DOT11_OID_PRIVRXPLAIN] = OID_U32(0x1a000001),
-       [DOT11_OID_PRIVRXFAILED] = OID_U32(0x1a000002),
-       [DOT11_OID_PRIVRXNOKEY] = OID_U32(0x1a000003),
-
-       [DOT11_OID_RTSTHRESH] = OID_U32_C(0x13000000),
-       [DOT11_OID_FRAGTHRESH] = OID_U32_C(0x13000001),
-       [DOT11_OID_SHORTRETRIES] = OID_U32_C(0x13000002),
-       [DOT11_OID_LONGRETRIES] = OID_U32_C(0x13000003),
-       [DOT11_OID_MAXTXLIFETIME] = OID_U32_C(0x13000004),
-       [DOT11_OID_MAXRXLIFETIME] = OID_U32(0x13000005),
-       [DOT11_OID_AUTHRESPTIMEOUT] = OID_U32(0x13000006),
-       [DOT11_OID_ASSOCRESPTIMEOUT] = OID_U32(0x13000007),
-
-       [DOT11_OID_ALOFT_TABLE] = OID_UNKNOWN(0x1d000000),
-       [DOT11_OID_ALOFT_CTRL_TABLE] = OID_UNKNOWN(0x1d000001),
-       [DOT11_OID_ALOFT_RETREAT] = OID_UNKNOWN(0x1d000002),
-       [DOT11_OID_ALOFT_PROGRESS] = OID_UNKNOWN(0x1d000003),
-       [DOT11_OID_ALOFT_FIXEDRATE] = OID_U32(0x1d000004),
-       [DOT11_OID_ALOFT_RSSIGRAPH] = OID_UNKNOWN(0x1d000005),
-       [DOT11_OID_ALOFT_CONFIG] = OID_UNKNOWN(0x1d000006),
+       OID_U32_C(DOT11_OID_BSSTYPE, 0x10000000),
+       OID_STRUCT_C(DOT11_OID_BSSID, 0x10000001, u8[6], OID_TYPE_SSID),
+       OID_STRUCT_C(DOT11_OID_SSID, 0x10000002, struct obj_ssid,
+                    OID_TYPE_SSID),
+       OID_U32(DOT11_OID_STATE, 0x10000003),
+       OID_U32(DOT11_OID_AID, 0x10000004),
+       OID_STRUCT(DOT11_OID_COUNTRYSTRING, 0x10000005, u8[4], OID_TYPE_RAW),
+       OID_STRUCT_C(DOT11_OID_SSIDOVERRIDE, 0x10000006, struct obj_ssid,
+                    OID_TYPE_SSID),
+
+       OID_U32(DOT11_OID_MEDIUMLIMIT, 0x11000000),
+       OID_U32_C(DOT11_OID_BEACONPERIOD, 0x11000001),
+       OID_U32(DOT11_OID_DTIMPERIOD, 0x11000002),
+       OID_U32(DOT11_OID_ATIMWINDOW, 0x11000003),
+       OID_U32(DOT11_OID_LISTENINTERVAL, 0x11000004),
+       OID_U32(DOT11_OID_CFPPERIOD, 0x11000005),
+       OID_U32(DOT11_OID_CFPDURATION, 0x11000006),
+
+       OID_U32_C(DOT11_OID_AUTHENABLE, 0x12000000),
+       OID_U32_C(DOT11_OID_PRIVACYINVOKED, 0x12000001),
+       OID_U32_C(DOT11_OID_EXUNENCRYPTED, 0x12000002),
+       OID_U32_C(DOT11_OID_DEFKEYID, 0x12000003),
+       [DOT11_OID_DEFKEYX] = {0x12000004, 3, sizeof (struct obj_key),
+                              OID_FLAG_CACHED | OID_TYPE_KEY}, /* DOT11_OID_DEFKEY1,...DOT11_OID_DEFKEY4 */
+       OID_UNKNOWN(DOT11_OID_STAKEY, 0x12000008),
+       OID_U32(DOT11_OID_REKEYTHRESHOLD, 0x12000009),
+       OID_UNKNOWN(DOT11_OID_STASC, 0x1200000a),
+
+       OID_U32(DOT11_OID_PRIVTXREJECTED, 0x1a000000),
+       OID_U32(DOT11_OID_PRIVRXPLAIN, 0x1a000001),
+       OID_U32(DOT11_OID_PRIVRXFAILED, 0x1a000002),
+       OID_U32(DOT11_OID_PRIVRXNOKEY, 0x1a000003),
+
+       OID_U32_C(DOT11_OID_RTSTHRESH, 0x13000000),
+       OID_U32_C(DOT11_OID_FRAGTHRESH, 0x13000001),
+       OID_U32_C(DOT11_OID_SHORTRETRIES, 0x13000002),
+       OID_U32_C(DOT11_OID_LONGRETRIES, 0x13000003),
+       OID_U32_C(DOT11_OID_MAXTXLIFETIME, 0x13000004),
+       OID_U32(DOT11_OID_MAXRXLIFETIME, 0x13000005),
+       OID_U32(DOT11_OID_AUTHRESPTIMEOUT, 0x13000006),
+       OID_U32(DOT11_OID_ASSOCRESPTIMEOUT, 0x13000007),
+
+       OID_UNKNOWN(DOT11_OID_ALOFT_TABLE, 0x1d000000),
+       OID_UNKNOWN(DOT11_OID_ALOFT_CTRL_TABLE, 0x1d000001),
+       OID_UNKNOWN(DOT11_OID_ALOFT_RETREAT, 0x1d000002),
+       OID_UNKNOWN(DOT11_OID_ALOFT_PROGRESS, 0x1d000003),
+       OID_U32(DOT11_OID_ALOFT_FIXEDRATE, 0x1d000004),
+       OID_UNKNOWN(DOT11_OID_ALOFT_RSSIGRAPH, 0x1d000005),
+       OID_UNKNOWN(DOT11_OID_ALOFT_CONFIG, 0x1d000006),
 
        [DOT11_OID_VDCFX] = {0x1b000000, 7, 0, 0},
-       [DOT11_OID_MAXFRAMEBURST] = OID_U32(0x1b000008), /* in microseconds */
+       OID_U32(DOT11_OID_MAXFRAMEBURST, 0x1b000008),
 
-       [DOT11_OID_PSM] = OID_U32(0x14000000),
-       [DOT11_OID_CAMTIMEOUT] = OID_U32(0x14000001),
-       [DOT11_OID_RECEIVEDTIMS] = OID_U32(0x14000002),
-       [DOT11_OID_ROAMPREFERENCE] = OID_U32(0x14000003),
+       OID_U32(DOT11_OID_PSM, 0x14000000),
+       OID_U32(DOT11_OID_CAMTIMEOUT, 0x14000001),
+       OID_U32(DOT11_OID_RECEIVEDTIMS, 0x14000002),
+       OID_U32(DOT11_OID_ROAMPREFERENCE, 0x14000003),
 
-       [DOT11_OID_BRIDGELOCAL] = OID_U32(0x15000000),
-       [DOT11_OID_CLIENTS] = OID_U32(0x15000001),
-       [DOT11_OID_CLIENTSASSOCIATED] = OID_U32(0x15000002),
+       OID_U32(DOT11_OID_BRIDGELOCAL, 0x15000000),
+       OID_U32(DOT11_OID_CLIENTS, 0x15000001),
+       OID_U32(DOT11_OID_CLIENTSASSOCIATED, 0x15000002),
        [DOT11_OID_CLIENTX] = {0x15000003, 2006, 0, 0}, /* DOT11_OID_CLIENTX,...DOT11_OID_CLIENT2007 */
 
-       [DOT11_OID_CLIENTFIND] = OID_STRUCT(0x150007DB, u8[6]),
-       [DOT11_OID_WDSLINKADD] = OID_STRUCT(0x150007DC, u8[6]),
-       [DOT11_OID_WDSLINKREMOVE] = OID_STRUCT(0x150007DD, u8[6]),
-       [DOT11_OID_EAPAUTHSTA] = OID_STRUCT(0x150007DE, u8[6]),
-       [DOT11_OID_EAPUNAUTHSTA] = OID_STRUCT(0x150007DF, u8[6]),
-       [DOT11_OID_DOT1XENABLE] = OID_U32_C(0x150007E0),
-       [DOT11_OID_MICFAILURE] = OID_UNKNOWN(0x150007E1),
-       [DOT11_OID_REKEYINDICATE] = OID_UNKNOWN(0x150007E2),
-
-       [DOT11_OID_MPDUTXSUCCESSFUL] = OID_U32(0x16000000),
-       [DOT11_OID_MPDUTXONERETRY] = OID_U32(0x16000001),
-       [DOT11_OID_MPDUTXMULTIPLERETRIES] = OID_U32(0x16000002),
-       [DOT11_OID_MPDUTXFAILED] = OID_U32(0x16000003),
-       [DOT11_OID_MPDURXSUCCESSFUL] = OID_U32(0x16000004),
-       [DOT11_OID_MPDURXDUPS] = OID_U32(0x16000005),
-       [DOT11_OID_RTSSUCCESSFUL] = OID_U32(0x16000006),
-       [DOT11_OID_RTSFAILED] = OID_U32(0x16000007),
-       [DOT11_OID_ACKFAILED] = OID_U32(0x16000008),
-       [DOT11_OID_FRAMERECEIVES] = OID_U32(0x16000009),
-       [DOT11_OID_FRAMEERRORS] = OID_U32(0x1600000A),
-       [DOT11_OID_FRAMEABORTS] = OID_U32(0x1600000B),
-       [DOT11_OID_FRAMEABORTSPHY] = OID_U32(0x1600000C),
-
-       [DOT11_OID_SLOTTIME] = OID_U32(0x17000000),
-       [DOT11_OID_CWMIN] = OID_U32(0x17000001),
-       [DOT11_OID_CWMAX] = OID_U32(0x17000002),
-       [DOT11_OID_ACKWINDOW] = OID_U32(0x17000003),
-       [DOT11_OID_ANTENNARX] = OID_U32(0x17000004),
-       [DOT11_OID_ANTENNATX] = OID_U32(0x17000005),
-       [DOT11_OID_ANTENNADIVERSITY] = OID_U32(0x17000006),
-       [DOT11_OID_CHANNEL] = OID_U32_C(0x17000007),
-       [DOT11_OID_EDTHRESHOLD] = OID_U32_C(0x17000008),
-       [DOT11_OID_PREAMBLESETTINGS] = OID_U32(0x17000009),
-       [DOT11_OID_RATES] = OID_STRUCT(0x1700000A, u8[IWMAX_BITRATES + 1]),
-       [DOT11_OID_CCAMODESUPPORTED] = OID_U32(0x1700000B),
-       [DOT11_OID_CCAMODE] = OID_U32(0x1700000C),
-       [DOT11_OID_RSSIVECTOR] = OID_U32(0x1700000D),
-       [DOT11_OID_OUTPUTPOWERTABLE] = OID_U32(0x1700000E),
-       [DOT11_OID_OUTPUTPOWER] = OID_U32_C(0x1700000F),
-       [DOT11_OID_SUPPORTEDRATES] =
-           OID_STRUCT(0x17000010, u8[IWMAX_BITRATES + 1]),
-       [DOT11_OID_FREQUENCY] = OID_U32_C(0x17000011),
-       [DOT11_OID_SUPPORTEDFREQUENCIES] = {0x17000012, 0, sizeof (struct
-                                                                  obj_frequencies)
-                                           + sizeof (u16) * IWMAX_FREQ, 0},
-
-       [DOT11_OID_NOISEFLOOR] = OID_U32(0x17000013),
-       [DOT11_OID_FREQUENCYACTIVITY] =
-           OID_STRUCT(0x17000014, u8[IWMAX_FREQ + 1]),
-       [DOT11_OID_IQCALIBRATIONTABLE] = OID_UNKNOWN(0x17000015),
-       [DOT11_OID_NONERPPROTECTION] = OID_U32(0x17000016),
-       [DOT11_OID_SLOTSETTINGS] = OID_U32(0x17000017),
-       [DOT11_OID_NONERPTIMEOUT] = OID_U32(0x17000018),
-       [DOT11_OID_PROFILES] = OID_U32(0x17000019),
-       [DOT11_OID_EXTENDEDRATES] =
-           OID_STRUCT(0x17000020, u8[IWMAX_BITRATES + 1]),
-
-       [DOT11_OID_DEAUTHENTICATE] = OID_STRUCT_MLME(0x18000000),
-       [DOT11_OID_AUTHENTICATE] = OID_STRUCT_MLME(0x18000001),
-       [DOT11_OID_DISASSOCIATE] = OID_STRUCT_MLME(0x18000002),
-       [DOT11_OID_ASSOCIATE] = OID_STRUCT_MLME(0x18000003),
-       [DOT11_OID_SCAN] = OID_UNKNOWN(0x18000004),
-       [DOT11_OID_BEACON] = OID_STRUCT_MLMEEX(0x18000005),
-       [DOT11_OID_PROBE] = OID_STRUCT_MLMEEX(0x18000006),
-       [DOT11_OID_DEAUTHENTICATEEX] = OID_STRUCT_MLMEEX(0x18000007),
-       [DOT11_OID_AUTHENTICATEEX] = OID_STRUCT_MLMEEX(0x18000008),
-       [DOT11_OID_DISASSOCIATEEX] = OID_STRUCT_MLMEEX(0x18000009),
-       [DOT11_OID_ASSOCIATEEX] = OID_STRUCT_MLMEEX(0x1800000A),
-       [DOT11_OID_REASSOCIATE] = OID_STRUCT_MLMEEX(0x1800000B),
-       [DOT11_OID_REASSOCIATEEX] = OID_STRUCT_MLMEEX(0x1800000C),
-
-       [DOT11_OID_NONERPSTATUS] = OID_U32(0x1E000000),
-
-       [DOT11_OID_STATIMEOUT] = OID_U32(0x19000000),
-       [DOT11_OID_MLMEAUTOLEVEL] = OID_U32_C(0x19000001),
-       [DOT11_OID_BSSTIMEOUT] = OID_U32(0x19000002),
-       [DOT11_OID_ATTACHMENT] = OID_UNKNOWN(0x19000003),
-       [DOT11_OID_PSMBUFFER] = OID_STRUCT_C(0x19000004, struct obj_buffer),
-
-       [DOT11_OID_BSSS] = OID_U32(0x1C000000),
-       [DOT11_OID_BSSX] = {0x1C000001, 63, sizeof (struct obj_bss), 0},        /*DOT11_OID_BSS1,...,DOT11_OID_BSS64 */
-       [DOT11_OID_BSSFIND] = OID_STRUCT(0x1C000042, struct obj_bss),
+       OID_STRUCT(DOT11_OID_CLIENTFIND, 0x150007DB, u8[6], OID_TYPE_ADDR),
+       OID_STRUCT(DOT11_OID_WDSLINKADD, 0x150007DC, u8[6], OID_TYPE_ADDR),
+       OID_STRUCT(DOT11_OID_WDSLINKREMOVE, 0x150007DD, u8[6], OID_TYPE_ADDR),
+       OID_STRUCT(DOT11_OID_EAPAUTHSTA, 0x150007DE, u8[6], OID_TYPE_ADDR),
+       OID_STRUCT(DOT11_OID_EAPUNAUTHSTA, 0x150007DF, u8[6], OID_TYPE_ADDR),
+       OID_U32_C(DOT11_OID_DOT1XENABLE, 0x150007E0),
+       OID_UNKNOWN(DOT11_OID_MICFAILURE, 0x150007E1),
+       OID_UNKNOWN(DOT11_OID_REKEYINDICATE, 0x150007E2),
+
+       OID_U32(DOT11_OID_MPDUTXSUCCESSFUL, 0x16000000),
+       OID_U32(DOT11_OID_MPDUTXONERETRY, 0x16000001),
+       OID_U32(DOT11_OID_MPDUTXMULTIPLERETRIES, 0x16000002),
+       OID_U32(DOT11_OID_MPDUTXFAILED, 0x16000003),
+       OID_U32(DOT11_OID_MPDURXSUCCESSFUL, 0x16000004),
+       OID_U32(DOT11_OID_MPDURXDUPS, 0x16000005),
+       OID_U32(DOT11_OID_RTSSUCCESSFUL, 0x16000006),
+       OID_U32(DOT11_OID_RTSFAILED, 0x16000007),
+       OID_U32(DOT11_OID_ACKFAILED, 0x16000008),
+       OID_U32(DOT11_OID_FRAMERECEIVES, 0x16000009),
+       OID_U32(DOT11_OID_FRAMEERRORS, 0x1600000A),
+       OID_U32(DOT11_OID_FRAMEABORTS, 0x1600000B),
+       OID_U32(DOT11_OID_FRAMEABORTSPHY, 0x1600000C),
+
+       OID_U32(DOT11_OID_SLOTTIME, 0x17000000),
+       OID_U32(DOT11_OID_CWMIN, 0x17000001),
+       OID_U32(DOT11_OID_CWMAX, 0x17000002),
+       OID_U32(DOT11_OID_ACKWINDOW, 0x17000003),
+       OID_U32(DOT11_OID_ANTENNARX, 0x17000004),
+       OID_U32(DOT11_OID_ANTENNATX, 0x17000005),
+       OID_U32(DOT11_OID_ANTENNADIVERSITY, 0x17000006),
+       OID_U32_C(DOT11_OID_CHANNEL, 0x17000007),
+       OID_U32_C(DOT11_OID_EDTHRESHOLD, 0x17000008),
+       OID_U32(DOT11_OID_PREAMBLESETTINGS, 0x17000009),
+       OID_STRUCT(DOT11_OID_RATES, 0x1700000A, u8[IWMAX_BITRATES + 1],
+                  OID_TYPE_RAW),
+       OID_U32(DOT11_OID_CCAMODESUPPORTED, 0x1700000B),
+       OID_U32(DOT11_OID_CCAMODE, 0x1700000C),
+       OID_UNKNOWN(DOT11_OID_RSSIVECTOR, 0x1700000D),
+       OID_UNKNOWN(DOT11_OID_OUTPUTPOWERTABLE, 0x1700000E),
+       OID_U32(DOT11_OID_OUTPUTPOWER, 0x1700000F),
+       OID_STRUCT(DOT11_OID_SUPPORTEDRATES, 0x17000010,
+                  u8[IWMAX_BITRATES + 1], OID_TYPE_RAW),
+       OID_U32_C(DOT11_OID_FREQUENCY, 0x17000011),
+       [DOT11_OID_SUPPORTEDFREQUENCIES] =
+           {0x17000012, 0, sizeof (struct obj_frequencies)
+            + sizeof (u16) * IWMAX_FREQ, OID_TYPE_FREQUENCIES},
+
+       OID_U32(DOT11_OID_NOISEFLOOR, 0x17000013),
+       OID_STRUCT(DOT11_OID_FREQUENCYACTIVITY, 0x17000014, u8[IWMAX_FREQ + 1],
+                  OID_TYPE_RAW),
+       OID_UNKNOWN(DOT11_OID_IQCALIBRATIONTABLE, 0x17000015),
+       OID_U32(DOT11_OID_NONERPPROTECTION, 0x17000016),
+       OID_U32(DOT11_OID_SLOTSETTINGS, 0x17000017),
+       OID_U32(DOT11_OID_NONERPTIMEOUT, 0x17000018),
+       OID_U32(DOT11_OID_PROFILES, 0x17000019),
+       OID_STRUCT(DOT11_OID_EXTENDEDRATES, 0x17000020,
+                  u8[IWMAX_BITRATES + 1], OID_TYPE_RAW),
+
+       OID_STRUCT_MLME(DOT11_OID_DEAUTHENTICATE, 0x18000000),
+       OID_STRUCT_MLME(DOT11_OID_AUTHENTICATE, 0x18000001),
+       OID_STRUCT_MLME(DOT11_OID_DISASSOCIATE, 0x18000002),
+       OID_STRUCT_MLME(DOT11_OID_ASSOCIATE, 0x18000003),
+       OID_UNKNOWN(DOT11_OID_SCAN, 0x18000004),
+       OID_STRUCT_MLMEEX(DOT11_OID_BEACON, 0x18000005),
+       OID_STRUCT_MLMEEX(DOT11_OID_PROBE, 0x18000006),
+       OID_STRUCT_MLMEEX(DOT11_OID_DEAUTHENTICATEEX, 0x18000007),
+       OID_STRUCT_MLMEEX(DOT11_OID_AUTHENTICATEEX, 0x18000008),
+       OID_STRUCT_MLMEEX(DOT11_OID_DISASSOCIATEEX, 0x18000009),
+       OID_STRUCT_MLMEEX(DOT11_OID_ASSOCIATEEX, 0x1800000A),
+       OID_STRUCT_MLMEEX(DOT11_OID_REASSOCIATE, 0x1800000B),
+       OID_STRUCT_MLMEEX(DOT11_OID_REASSOCIATEEX, 0x1800000C),
+
+       OID_U32(DOT11_OID_NONERPSTATUS, 0x1E000000),
+
+       OID_U32(DOT11_OID_STATIMEOUT, 0x19000000),
+       OID_U32_C(DOT11_OID_MLMEAUTOLEVEL, 0x19000001),
+       OID_U32(DOT11_OID_BSSTIMEOUT, 0x19000002),
+       OID_UNKNOWN(DOT11_OID_ATTACHMENT, 0x19000003),
+       OID_STRUCT_C(DOT11_OID_PSMBUFFER, 0x19000004, struct obj_buffer,
+                    OID_TYPE_BUFFER),
+
+       OID_U32(DOT11_OID_BSSS, 0x1C000000),
+       [DOT11_OID_BSSX] = {0x1C000001, 63, sizeof (struct obj_bss),
+                           OID_TYPE_BSS},      /*DOT11_OID_BSS1,...,DOT11_OID_BSS64 */
+       OID_STRUCT(DOT11_OID_BSSFIND, 0x1C000042, struct obj_bss, OID_TYPE_BSS),
        [DOT11_OID_BSSLIST] = {0x1C000043, 0, sizeof (struct
                                                      obj_bsslist) +
-                              sizeof (struct obj_bss[IWMAX_BSS]), 0},
-
-       [OID_INL_TUNNEL] = OID_UNKNOWN(0xFF020000),
-       [OID_INL_MEMADDR] = OID_UNKNOWN(0xFF020001),
-       [OID_INL_MEMORY] = OID_UNKNOWN(0xFF020002),
-       [OID_INL_MODE] = OID_U32_C(0xFF020003),
-       [OID_INL_COMPONENT_NR] = OID_UNKNOWN(0xFF020004),
-       [OID_INL_VERSION] = OID_UNKNOWN(0xFF020005),
-       [OID_INL_INTERFACE_ID] = OID_UNKNOWN(0xFF020006),
-       [OID_INL_COMPONENT_ID] = OID_UNKNOWN(0xFF020007),
-       [OID_INL_CONFIG] = OID_U32_C(0xFF020008),
-       [OID_INL_DOT11D_CONFORMANCE] = OID_U32_C(0xFF02000C),
-       [OID_INL_PHYCAPABILITIES] = OID_U32(0xFF02000D),
-       [OID_INL_OUTPUTPOWER] = OID_U32_C(0xFF02000F),
+                              sizeof (struct obj_bss[IWMAX_BSS]),
+                              OID_TYPE_BSSLIST},
+
+       OID_UNKNOWN(OID_INL_TUNNEL, 0xFF020000),
+       OID_UNKNOWN(OID_INL_MEMADDR, 0xFF020001),
+       OID_UNKNOWN(OID_INL_MEMORY, 0xFF020002),
+       OID_U32_C(OID_INL_MODE, 0xFF020003),
+       OID_UNKNOWN(OID_INL_COMPONENT_NR, 0xFF020004),
+       OID_UNKNOWN(OID_INL_VERSION, 0xFF020005),
+       OID_UNKNOWN(OID_INL_INTERFACE_ID, 0xFF020006),
+       OID_UNKNOWN(OID_INL_COMPONENT_ID, 0xFF020007),
+       OID_U32_C(OID_INL_CONFIG, 0xFF020008),
+       OID_U32_C(OID_INL_DOT11D_CONFORMANCE, 0xFF02000C),
+       OID_U32(OID_INL_PHYCAPABILITIES, 0xFF02000D),
+       OID_U32_C(OID_INL_OUTPUTPOWER, 0xFF02000F),
 
 };
 
@@ -257,6 +285,134 @@ mgt_clean(islpci_private *priv)
        priv->mib = NULL;
 }
 
+void
+mgt_le_to_cpu(int type, void *data)
+{
+       switch (type) {
+       case OID_TYPE_U32:
+               *(u32 *) data = le32_to_cpu(*(u32 *) data);
+               break;
+       case OID_TYPE_BUFFER:{
+                       struct obj_buffer *buff = data;
+                       buff->size = le32_to_cpu(buff->size);
+                       buff->addr = le32_to_cpu(buff->addr);
+                       break;
+               }
+       case OID_TYPE_BSS:{
+                       struct obj_bss *bss = data;
+                       bss->age = le16_to_cpu(bss->age);
+                       bss->channel = le16_to_cpu(bss->channel);
+                       bss->capinfo = le16_to_cpu(bss->capinfo);
+                       bss->rates = le16_to_cpu(bss->rates);
+                       bss->basic_rates = le16_to_cpu(bss->basic_rates);
+                       break;
+               }
+       case OID_TYPE_BSSLIST:{
+                       struct obj_bsslist *list = data;
+                       int i;
+                       list->nr = le32_to_cpu(list->nr);
+                       for (i = 0; i < list->nr; i++)
+                               mgt_le_to_cpu(OID_TYPE_BSS, &list->bsslist[i]);
+                       break;
+               }
+       case OID_TYPE_FREQUENCIES:{
+                       struct obj_frequencies *freq = data;
+                       int i;
+                       freq->nr = le16_to_cpu(freq->nr);
+                       for (i = 0; i < freq->nr; i++)
+                               freq->mhz[i] = le16_to_cpu(freq->mhz[i]);
+                       break;
+               }
+       case OID_TYPE_MLME:{
+                       struct obj_mlme *mlme = data;
+                       mlme->id = le16_to_cpu(mlme->id);
+                       mlme->state = le16_to_cpu(mlme->state);
+                       mlme->code = le16_to_cpu(mlme->code);
+                       break;
+               }
+       case OID_TYPE_MLMEEX:{
+                       struct obj_mlmeex *mlme = data;
+                       mlme->id = le16_to_cpu(mlme->id);
+                       mlme->state = le16_to_cpu(mlme->state);
+                       mlme->code = le16_to_cpu(mlme->code);
+                       mlme->size = le16_to_cpu(mlme->size);
+                       break;
+               }
+       case OID_TYPE_SSID:
+       case OID_TYPE_KEY:
+       case OID_TYPE_ADDR:
+       case OID_TYPE_RAW:
+               break;
+       default:
+               BUG();
+       }
+}
+
+static void
+mgt_cpu_to_le(int type, void *data)
+{
+       switch (type) {
+       case OID_TYPE_U32:
+               *(u32 *) data = cpu_to_le32(*(u32 *) data);
+               break;
+       case OID_TYPE_BUFFER:{
+                       struct obj_buffer *buff = data;
+                       buff->size = cpu_to_le32(buff->size);
+                       buff->addr = cpu_to_le32(buff->addr);
+                       break;
+               }
+       case OID_TYPE_BSS:{
+                       struct obj_bss *bss = data;
+                       bss->age = cpu_to_le16(bss->age);
+                       bss->channel = cpu_to_le16(bss->channel);
+                       bss->capinfo = cpu_to_le16(bss->capinfo);
+                       bss->rates = cpu_to_le16(bss->rates);
+                       bss->basic_rates = cpu_to_le16(bss->basic_rates);
+                       break;
+               }
+       case OID_TYPE_BSSLIST:{
+                       struct obj_bsslist *list = data;
+                       int i;
+                       list->nr = cpu_to_le32(list->nr);
+                       for (i = 0; i < list->nr; i++)
+                               mgt_cpu_to_le(OID_TYPE_BSS, &list->bsslist[i]);
+                       break;
+               }
+       case OID_TYPE_FREQUENCIES:{
+                       struct obj_frequencies *freq = data;
+                       int i;
+                       freq->nr = cpu_to_le16(freq->nr);
+                       for (i = 0; i < freq->nr; i++)
+                               freq->mhz[i] = cpu_to_le16(freq->mhz[i]);
+                       break;
+               }
+       case OID_TYPE_MLME:{
+                       struct obj_mlme *mlme = data;
+                       mlme->id = cpu_to_le16(mlme->id);
+                       mlme->state = cpu_to_le16(mlme->state);
+                       mlme->code = cpu_to_le16(mlme->code);
+                       break;
+               }
+       case OID_TYPE_MLMEEX:{
+                       struct obj_mlmeex *mlme = data;
+                       mlme->id = cpu_to_le16(mlme->id);
+                       mlme->state = cpu_to_le16(mlme->state);
+                       mlme->code = cpu_to_le16(mlme->code);
+                       mlme->size = cpu_to_le16(mlme->size);
+                       break;
+               }
+       case OID_TYPE_SSID:
+       case OID_TYPE_KEY:
+       case OID_TYPE_ADDR:
+       case OID_TYPE_RAW:
+               break;
+       default:
+               BUG();
+       }
+}
+
+/* Note : data is modified during this function */
+
 int
 mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
 {
@@ -265,7 +421,7 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
        int response_op = PIMFOR_OP_ERROR;
        int dlen;
        void *cache, *_data = data;
-       u32 oid, u;
+       u32 oid;
 
        BUG_ON(OID_NUM_LAST <= n);
        BUG_ON(extra > isl_oid[n].range);
@@ -279,13 +435,11 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
        cache += (cache ? extra * dlen : 0);
        oid = isl_oid[n].oid + extra;
 
-       if (data == NULL)
+       if (_data == NULL)
                /* we are requested to re-set a cached value */
                _data = cache;
-       if ((isl_oid[n].flags & OID_FLAG_U32) && data) {
-               u = cpu_to_le32(*(u32 *) data);
-               _data = &u;
-       }
+       else
+               mgt_cpu_to_le(isl_oid[n].flags & OID_FLAG_TYPE, _data);
        /* If we are going to write to the cache, we don't want anyone to read
         * it -> acquire write lock.
         * Else we could acquire a read lock to be sure we don't bother the
@@ -313,6 +467,10 @@ mgt_set_request(islpci_private *priv, enum oid_num_t n, int extra, void *data)
                up_write(&priv->mib_sem);
        }
 
+       /* re-set given data to what it was */
+       if (data)
+               mgt_le_to_cpu(isl_oid[n].flags & OID_FLAG_TYPE, data);
+
        return ret;
 }
 
@@ -326,7 +484,7 @@ mgt_get_request(islpci_private *priv, enum oid_num_t n, int extra, void *data,
        struct islpci_mgmtframe *response = NULL;
        
        int dlen;
-       void *cache, *_res=NULL;
+       void *cache, *_res = NULL;
        u32 oid;
 
        BUG_ON(OID_NUM_LAST <= n);
@@ -362,20 +520,19 @@ mgt_get_request(islpci_private *priv, enum oid_num_t n, int extra, void *data,
                _res = cache;
                ret = 0;
        }
-       if (isl_oid[n].flags & OID_FLAG_U32) {
-               if (ret)
-                       res->u = 0;
-               else
-                       res->u = le32_to_cpu(*(u32 *) _res);
-       } else {
+       if ((isl_oid[n].flags & OID_FLAG_TYPE) == OID_TYPE_U32)
+               res->u = ret ? 0 : le32_to_cpu(*(u32 *) _res);
+       else {
                res->ptr = kmalloc(reslen, GFP_KERNEL);
                BUG_ON(res->ptr == NULL);
                if (ret)
                        memset(res->ptr, 0, reslen);
-               else
+               else {
                        memcpy(res->ptr, _res, reslen);
+                       mgt_le_to_cpu(isl_oid[n].flags & OID_FLAG_TYPE,
+                                     res->ptr);
+               }
        }
-
        if (cache)
                up_read(&priv->mib_sem);
 
@@ -404,7 +561,7 @@ mgt_commit_list(islpci_private *priv, enum oid_num_t *l, int n)
                int j = 0;
                u32 oid = t->oid;
                BUG_ON(data == NULL);
-               while (j <= t->range){
+               while (j <= t->range) {
                        response = NULL;
                        ret |= islpci_mgt_transaction(priv->ndev, PIMFOR_OP_SET,
                                                      oid, data, t->size,
@@ -431,13 +588,21 @@ mgt_set(islpci_private *priv, enum oid_num_t n, void *data)
        BUG_ON(priv->mib[n] == NULL);
 
        memcpy(priv->mib[n], data, isl_oid[n].size);
-       if (isl_oid[n].flags & OID_FLAG_U32)
-               *(u32 *) priv->mib[n] = cpu_to_le32(*(u32 *) priv->mib[n]);
+       mgt_cpu_to_le(isl_oid[n].flags & OID_FLAG_TYPE, priv->mib[n]);
 }
 
-/* Commits the cache. If something goes wrong, it restarts the device. Lock
- * outside
- */
+void
+mgt_get(islpci_private *priv, enum oid_num_t n, void *res)
+{
+       BUG_ON(OID_NUM_LAST <= n);
+       BUG_ON(priv->mib[n] == NULL);
+       BUG_ON(res == NULL);
+
+       memcpy(res, priv->mib[n], isl_oid[n].size);
+       mgt_le_to_cpu(isl_oid[n].flags & OID_FLAG_TYPE, res);
+}
+
+/* Commits the cache. Lock outside. */
 
 static enum oid_num_t commit_part1[] = {
        OID_INL_CONFIG,
@@ -530,3 +695,102 @@ mgt_oidtonum(u32 oid)
 
        return 0;
 }
+
+int
+mgt_response_to_str(enum oid_num_t n, union oid_res_t *r, char *str)
+{
+       switch (isl_oid[n].flags & OID_FLAG_TYPE) {
+       case OID_TYPE_U32:
+               return snprintf(str, PRIV_STR_SIZE, "%u\n", r->u);
+               break;
+       case OID_TYPE_BUFFER:{
+                       struct obj_buffer *buff = r->ptr;
+                       return snprintf(str, PRIV_STR_SIZE,
+                                       "size=%u\naddr=0x%X\n", buff->size,
+                                       buff->addr);
+               }
+               break;
+       case OID_TYPE_BSS:{
+                       struct obj_bss *bss = r->ptr;
+                       return snprintf(str, PRIV_STR_SIZE,
+                                       "age=%u\nchannel=%u\n\
+                                       capinfo=0x%X\nrates=0x%X\nbasic_rates=0x%X\n", bss->age, bss->channel, bss->capinfo, bss->rates, bss->basic_rates);
+               }
+               break;
+       case OID_TYPE_BSSLIST:{
+                       struct obj_bsslist *list = r->ptr;
+                       int i, k;
+                       k = snprintf(str, PRIV_STR_SIZE, "nr=%u\n", list->nr);
+                       for (i = 0; i < list->nr; i++)
+                               k += snprintf(str + k, PRIV_STR_SIZE - k,
+                                             "bss[%u] : \nage=%u\nchannel=%u\ncapinfo=0x%X\nrates=0x%X\nbasic_rates=0x%X\n",
+                                             i, list->bsslist[i].age,
+                                             list->bsslist[i].channel,
+                                             list->bsslist[i].capinfo,
+                                             list->bsslist[i].rates,
+                                             list->bsslist[i].basic_rates);
+                       return k;
+               }
+               break;
+       case OID_TYPE_FREQUENCIES:{
+                       struct obj_frequencies *freq = r->ptr;
+                       int i, t;
+                       printk("nr : %u\n", freq->nr);
+                       t = snprintf(str, PRIV_STR_SIZE, "nr=%u\n", freq->nr);
+                       for (i = 0; i < freq->nr; i++)
+                               t += snprintf(str + t, PRIV_STR_SIZE - t,
+                                             "mhz[%u]=%u\n", i, freq->mhz[i]);
+                       return t;
+               }
+               break;
+       case OID_TYPE_MLME:{
+                       struct obj_mlme *mlme = r->ptr;
+                       return snprintf(str, PRIV_STR_SIZE, "id=0x%X\nstate=0x%X\n\
+                                code=0x%X\n", mlme->id, mlme->state,
+                                       mlme->code);
+               }
+               break;
+       case OID_TYPE_MLMEEX:{
+                       struct obj_mlmeex *mlme = r->ptr;
+                       return snprintf(str, PRIV_STR_SIZE, "id=0x%X\nstate=0x%X\n\
+                                code=0x%X\nsize=0x%X\n", mlme->id, mlme->state,
+                                       mlme->code, mlme->size);
+               }
+               break;
+       case OID_TYPE_SSID:{
+                       struct obj_ssid *ssid = r->ptr;
+                       return snprintf(str, PRIV_STR_SIZE,
+                                       "length=%u\noctets=%s\n",
+                                       ssid->length, ssid->octets);
+               }
+               break;
+       case OID_TYPE_KEY:{
+                       struct obj_key *key = r->ptr;
+                       int t, i;
+                       t = snprintf(str, PRIV_STR_SIZE,
+                                    "type=0x%X\nlength=0x%X\nkey=0x",
+                                    key->type, key->length);
+                       for (i = 0; i < key->length; i++)
+                               t += snprintf(str + t, PRIV_STR_SIZE - t,
+                                             "%02X:", key->key[i]);
+                       t += snprintf(str + t, PRIV_STR_SIZE - t, "\n");
+                       return t;
+               }
+               break;
+       case OID_TYPE_RAW:
+       case OID_TYPE_ADDR:{
+                       unsigned char *buff = r->ptr;
+                       int t, i;
+                       t = snprintf(str, PRIV_STR_SIZE, "hex data=");
+                       for (i = 0; i < isl_oid[n].size; i++)
+                               t += snprintf(str + t, PRIV_STR_SIZE - t,
+                                             "%02X:", buff[i]);
+                       t += snprintf(str + t, PRIV_STR_SIZE - t, "\n");
+                       return t;
+               }
+               break;
+       default:
+               BUG();
+       }
+       return 0;
+}
index d00af18..cd8167e 100644 (file)
@@ -1,4 +1,4 @@
-/*   
+/*
  *  Copyright (C) 2003 Aurelien Alleaume <slts@free.fr>
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -28,9 +28,12 @@ int mgt_init(islpci_private *);
 
 void mgt_clean(islpci_private *);
 
+/* I don't know where to put these 3 */
 extern const int frequency_list_bg[];
-
 extern const int frequency_list_a[];
+int channel_of_freq(int);
+
+void mgt_le_to_cpu(int, void *);
 
 int mgt_set_request(islpci_private *, enum oid_num_t, int, void *);
 
@@ -41,11 +44,15 @@ int mgt_commit_list(islpci_private *, enum oid_num_t *, int);
 
 void mgt_set(islpci_private *, enum oid_num_t, void *);
 
+void mgt_get(islpci_private *, enum oid_num_t, void *);
+
 void mgt_commit(islpci_private *);
 
 int mgt_mlme_answer(islpci_private *);
 
 enum oid_num_t mgt_oidtonum(u32 oid);
 
+int mgt_response_to_str(enum oid_num_t, union oid_res_t *, char *);
+
 #endif                         /* !defined(_OID_MGT_H) */
 /* EOF */
index 58eb949..ff17c7e 100644 (file)
@@ -3,7 +3,7 @@
 #
 config PNPBIOS
        bool "Plug and Play BIOS support (EXPERIMENTAL)"
-       depends on PNP && EXPERIMENTAL
+       depends on PNP && X86 && EXPERIMENTAL
        ---help---
          Linux uses the PNPBIOS as defined in "Plug and Play BIOS
          Specification Version 1.0A May 5, 1994" to autodetect built-in
index 427d187..5237cad 100644 (file)
@@ -26,8 +26,6 @@
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
 
-#include "scsi.h"
-#include <scsi/scsi_host.h>
 #include "esp.h"
 
 #include <asm/sbus.h>
@@ -366,7 +364,7 @@ static char *phase_string(int phase)
 }
 
 #ifdef DEBUG_STATE_MACHINE
-static inline void esp_advance_phase(Scsi_Cmnd *s, int newphase)
+static inline void esp_advance_phase(struct scsi_cmnd *s, int newphase)
 {
        ESPLOG(("<%s>", phase_string(newphase)));
        s->SCp.sent_command = s->SCp.phase;
@@ -419,48 +417,48 @@ static inline void esp_cmd(struct esp *esp, u8 cmd)
  * Note that these are per-ESP queues, not global queues like
  * the aha152x driver uses.
  */
-static inline void append_SC(Scsi_Cmnd **SC, Scsi_Cmnd *new_SC)
+static inline void append_SC(struct scsi_cmnd **SC, struct scsi_cmnd *new_SC)
 {
-       Scsi_Cmnd *end;
+       struct scsi_cmnd *end;
 
        new_SC->host_scribble = (unsigned char *) NULL;
        if (!*SC)
                *SC = new_SC;
        else {
-               for (end=*SC;end->host_scribble;end=(Scsi_Cmnd *)end->host_scribble)
+               for (end=*SC;end->host_scribble;end=(struct scsi_cmnd *)end->host_scribble)
                        ;
                end->host_scribble = (unsigned char *) new_SC;
        }
 }
 
-static inline void prepend_SC(Scsi_Cmnd **SC, Scsi_Cmnd *new_SC)
+static inline void prepend_SC(struct scsi_cmnd **SC, struct scsi_cmnd *new_SC)
 {
        new_SC->host_scribble = (unsigned char *) *SC;
        *SC = new_SC;
 }
 
-static inline Scsi_Cmnd *remove_first_SC(Scsi_Cmnd **SC)
+static inline struct scsi_cmnd *remove_first_SC(struct scsi_cmnd **SC)
 {
-       Scsi_Cmnd *ptr;
+       struct scsi_cmnd *ptr;
        ptr = *SC;
        if (ptr)
-               *SC = (Scsi_Cmnd *) (*SC)->host_scribble;
+               *SC = (struct scsi_cmnd *) (*SC)->host_scribble;
        return ptr;
 }
 
-static inline Scsi_Cmnd *remove_SC(Scsi_Cmnd **SC, int target, int lun)
+static inline struct scsi_cmnd *remove_SC(struct scsi_cmnd **SC, int target, int lun)
 {
-       Scsi_Cmnd *ptr, *prev;
+       struct scsi_cmnd *ptr, *prev;
 
        for (ptr = *SC, prev = NULL;
             ptr && ((ptr->device->id != target) || (ptr->device->lun != lun));
-            prev = ptr, ptr = (Scsi_Cmnd *) ptr->host_scribble)
+            prev = ptr, ptr = (struct scsi_cmnd *) ptr->host_scribble)
                ;
        if (ptr) {
                if (prev)
                        prev->host_scribble=ptr->host_scribble;
                else
-                       *SC=(Scsi_Cmnd *)ptr->host_scribble;
+                       *SC=(struct scsi_cmnd *)ptr->host_scribble;
        }
        return ptr;
 }
@@ -1062,7 +1060,7 @@ static void __init esp_init_swstate(struct esp *esp)
        esp->prev_hme_dmacsr = 0xffffffff;
 }
 
-static int __init detect_one_esp(Scsi_Host_Template *tpnt, struct sbus_dev *esp_dev,
+static int __init detect_one_esp(struct scsi_host_template *tpnt, struct sbus_dev *esp_dev,
                                 struct sbus_dev *espdma, struct sbus_bus *sbus,
                                 int id, int hme)
 {
@@ -1137,7 +1135,7 @@ fail_unlink:
 
 #include <asm/sun4paddr.h>
 
-static int __init esp_detect(Scsi_Host_Template *tpnt)
+static int __init esp_detect(struct scsi_host_template *tpnt)
 {
        static struct sbus_dev esp_dev;
        int esps_in_use = 0;
@@ -1162,7 +1160,7 @@ static int __init esp_detect(Scsi_Host_Template *tpnt)
 
 #else /* !CONFIG_SUN4 */
 
-static int __init esp_detect(Scsi_Host_Template *tpnt)
+static int __init esp_detect(struct scsi_host_template *tpnt)
 {
        struct sbus_bus *sbus;
        struct sbus_dev *esp_dev, *sbdev_iter;
@@ -1428,7 +1426,7 @@ static int esp_proc_info(struct Scsi_Host *host, char *buffer, char **start, off
        return esp_host_info(esp, buffer, offset, length);
 }
 
-static void esp_get_dmabufs(struct esp *esp, Scsi_Cmnd *sp)
+static void esp_get_dmabufs(struct esp *esp, struct scsi_cmnd *sp)
 {
        if (sp->use_sg == 0) {
                sp->SCp.this_residual = sp->request_bufflen;
@@ -1437,7 +1435,7 @@ static void esp_get_dmabufs(struct esp *esp, Scsi_Cmnd *sp)
                if (sp->request_bufflen) {
                        sp->SCp.have_data_in = sbus_map_single(esp->sdev, sp->SCp.buffer,
                                                               sp->SCp.this_residual,
-                                                              scsi_to_sbus_dma_dir(sp->sc_data_direction));
+                                                              sp->sc_data_direction);
                        sp->SCp.ptr = (char *) ((unsigned long)sp->SCp.have_data_in);
                } else {
                        sp->SCp.ptr = NULL;
@@ -1447,26 +1445,26 @@ static void esp_get_dmabufs(struct esp *esp, Scsi_Cmnd *sp)
                sp->SCp.buffers_residual = sbus_map_sg(esp->sdev,
                                                       sp->SCp.buffer,
                                                       sp->use_sg,
-                                                      scsi_to_sbus_dma_dir(sp->sc_data_direction));
+                                                      sp->sc_data_direction);
                sp->SCp.this_residual = sg_dma_len(sp->SCp.buffer);
                sp->SCp.ptr = (char *) ((unsigned long)sg_dma_address(sp->SCp.buffer));
        }
 }
 
-static void esp_release_dmabufs(struct esp *esp, Scsi_Cmnd *sp)
+static void esp_release_dmabufs(struct esp *esp, struct scsi_cmnd *sp)
 {
        if (sp->use_sg) {
                sbus_unmap_sg(esp->sdev, sp->buffer, sp->use_sg,
-                             scsi_to_sbus_dma_dir(sp->sc_data_direction));
+                             sp->sc_data_direction);
        } else if (sp->request_bufflen) {
                sbus_unmap_single(esp->sdev,
                                  sp->SCp.have_data_in,
                                  sp->request_bufflen,
-                                 scsi_to_sbus_dma_dir(sp->sc_data_direction));
+                                 sp->sc_data_direction);
        }
 }
 
-static void esp_restore_pointers(struct esp *esp, Scsi_Cmnd *sp)
+static void esp_restore_pointers(struct esp *esp, struct scsi_cmnd *sp)
 {
        struct esp_pointers *ep = &esp->data_pointers[sp->device->id];
 
@@ -1476,7 +1474,7 @@ static void esp_restore_pointers(struct esp *esp, Scsi_Cmnd *sp)
        sp->SCp.buffers_residual = ep->saved_buffers_residual;
 }
 
-static void esp_save_pointers(struct esp *esp, Scsi_Cmnd *sp)
+static void esp_save_pointers(struct esp *esp, struct scsi_cmnd *sp)
 {
        struct esp_pointers *ep = &esp->data_pointers[sp->device->id];
 
@@ -1506,7 +1504,7 @@ static void esp_save_pointers(struct esp *esp, Scsi_Cmnd *sp)
  * case where we could see an interrupt is where we have disconnected
  * commands active and they are trying to reselect us.
  */
-static inline void esp_check_cmd(struct esp *esp, Scsi_Cmnd *sp)
+static inline void esp_check_cmd(struct esp *esp, struct scsi_cmnd *sp)
 {
        switch (sp->cmd_len) {
        case 6:
@@ -1557,8 +1555,8 @@ static inline void build_wide_nego_msg(struct esp *esp, int size)
 
 static void esp_exec_cmd(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr;
-       Scsi_Device *SDptr;
+       struct scsi_cmnd *SCptr;
+       struct scsi_device *SDptr;
        struct esp_device *esp_dev;
        volatile u8 *cmdp = esp->esp_command;
        u8 the_esp_command;
@@ -1834,7 +1832,7 @@ after_nego_msg_built:
 }
 
 /* Queue a SCSI command delivered from the mid-level Linux SCSI code. */
-static int esp_queue(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
+static int esp_queue(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
 {
        struct esp *esp;
 
@@ -1871,7 +1869,7 @@ static int esp_queue(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
 }
 
 /* Dump driver state. */
-static void esp_dump_cmd(Scsi_Cmnd *SCptr)
+static void esp_dump_cmd(struct scsi_cmnd *SCptr)
 {
        ESPLOG(("[tgt<%02x> lun<%02x> "
                "pphase<%s> cphase<%s>]",
@@ -1882,7 +1880,7 @@ static void esp_dump_cmd(Scsi_Cmnd *SCptr)
 
 static void esp_dump_state(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
 #ifdef DEBUG_ESP_CMDS
        int i;
 #endif
@@ -1921,13 +1919,13 @@ static void esp_dump_state(struct esp *esp)
        ESPLOG(("esp%d: disconnected ", esp->esp_id));
        while (SCptr) {
                esp_dump_cmd(SCptr);
-               SCptr = (Scsi_Cmnd *) SCptr->host_scribble;
+               SCptr = (struct scsi_cmnd *) SCptr->host_scribble;
        }
        ESPLOG(("\n"));
 }
 
 /* Abort a command.  The host_lock is acquired by caller. */
-static int esp_abort(Scsi_Cmnd *SCptr)
+static int esp_abort(struct scsi_cmnd *SCptr)
 {
        struct esp *esp = (struct esp *) SCptr->device->host->hostdata;
        int don;
@@ -1957,14 +1955,14 @@ static int esp_abort(Scsi_Cmnd *SCptr)
                ESP_INTSOFF(esp->dregs);
        }
        if (esp->issue_SC) {
-               Scsi_Cmnd **prev, *this;
+               struct scsi_cmnd **prev, *this;
                for (prev = (&esp->issue_SC), this = esp->issue_SC;
                     this != NULL;
-                    prev = (Scsi_Cmnd **) &(this->host_scribble),
-                            this = (Scsi_Cmnd *) this->host_scribble) {
+                    prev = (struct scsi_cmnd **) &(this->host_scribble),
+                            this = (struct scsi_cmnd *) this->host_scribble) {
 
                        if (this == SCptr) {
-                               *prev = (Scsi_Cmnd *) this->host_scribble;
+                               *prev = (struct scsi_cmnd *) this->host_scribble;
                                this->host_scribble = NULL;
 
                                esp_release_dmabufs(esp, this);
@@ -2010,7 +2008,7 @@ static int esp_abort(Scsi_Cmnd *SCptr)
  */
 static int esp_finish_reset(struct esp *esp)
 {
-       Scsi_Cmnd *sp = esp->current_SC;
+       struct scsi_cmnd *sp = esp->current_SC;
 
        /* Clean up currently executing command, if any. */
        if (sp != NULL) {
@@ -2059,7 +2057,7 @@ static int esp_do_resetbus(struct esp *esp)
  *
  * The host_lock is acquired by caller.
  */
-static int esp_reset(Scsi_Cmnd *SCptr)
+static int esp_reset(struct scsi_cmnd *SCptr)
 {
        struct esp *esp = (struct esp *) SCptr->device->host->hostdata;
 
@@ -2077,7 +2075,7 @@ static int esp_reset(Scsi_Cmnd *SCptr)
 /* Internal ESP done function. */
 static void esp_done(struct esp *esp, int error)
 {
-       Scsi_Cmnd *done_SC = esp->current_SC;
+       struct scsi_cmnd *done_SC = esp->current_SC;
 
        esp->current_SC = NULL;
 
@@ -2168,7 +2166,7 @@ static inline void hme_fifo_push(struct esp *esp, u8 *bytes, u8 count)
 /* We try to avoid some interrupts by jumping ahead and see if the ESP
  * has gotten far enough yet.  Hence the following.
  */
-static inline int skipahead1(struct esp *esp, Scsi_Cmnd *scp,
+static inline int skipahead1(struct esp *esp, struct scsi_cmnd *scp,
                             int prev_phase, int new_phase)
 {
        if (scp->SCp.sent_command != prev_phase)
@@ -2202,7 +2200,7 @@ static inline int skipahead1(struct esp *esp, Scsi_Cmnd *scp,
        return do_intr_end;
 }
 
-static inline int skipahead2(struct esp *esp, Scsi_Cmnd *scp,
+static inline int skipahead2(struct esp *esp, struct scsi_cmnd *scp,
                             int prev_phase1, int prev_phase2, int new_phase)
 {
        if (scp->SCp.sent_command != prev_phase1 &&
@@ -2318,7 +2316,7 @@ static inline void dma_flashclear(struct esp *esp)
        dma_invalidate(esp);
 }
 
-static int dma_can_transfer(struct esp *esp, Scsi_Cmnd *sp)
+static int dma_can_transfer(struct esp *esp, struct scsi_cmnd *sp)
 {
        __u32 base, end, sz;
 
@@ -2379,7 +2377,7 @@ static int dma_can_transfer(struct esp *esp, Scsi_Cmnd *sp)
  * tell the ESP to eat the extraneous byte so that we can proceed
  * to the next phase.
  */
-static int esp100_sync_hwbug(struct esp *esp, Scsi_Cmnd *sp, int fifocnt)
+static int esp100_sync_hwbug(struct esp *esp, struct scsi_cmnd *sp, int fifocnt)
 {
        /* Do not touch this piece of code. */
        if ((!(esp->erev == esp100)) ||
@@ -2479,7 +2477,7 @@ static inline int reconnect_lun(struct esp *esp)
 /* This puts the driver in a state where it can revitalize a command that
  * is being continued due to reselection.
  */
-static inline void esp_connect(struct esp *esp, Scsi_Cmnd *sp)
+static inline void esp_connect(struct esp *esp, struct scsi_cmnd *sp)
 {
        struct esp_device *esp_dev = sp->device->hostdata;
 
@@ -2502,7 +2500,7 @@ static inline void esp_connect(struct esp *esp, Scsi_Cmnd *sp)
 /* This will place the current working command back into the issue queue
  * if we are to receive a reselection amidst a selection attempt.
  */
-static inline void esp_reconnect(struct esp *esp, Scsi_Cmnd *sp)
+static inline void esp_reconnect(struct esp *esp, struct scsi_cmnd *sp)
 {
        if (!esp->disconnected_SC)
                ESPLOG(("esp%d: Weird, being reselected but disconnected "
@@ -2540,7 +2538,7 @@ static inline int esp_bytes_sent(struct esp *esp, int fifo_count)
        return rval - fifo_count;
 }
 
-static inline void advance_sg(Scsi_Cmnd *sp)
+static inline void advance_sg(struct scsi_cmnd *sp)
 {
        ++sp->SCp.buffer;
        --sp->SCp.buffers_residual;
@@ -2568,7 +2566,7 @@ static inline void advance_sg(Scsi_Cmnd *sp)
  */
 static int esp_do_data(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        int thisphase, hmuch;
 
        ESPDATA(("esp_do_data: "));
@@ -2619,7 +2617,7 @@ static int esp_do_data(struct esp *esp)
 /* See how successful the data transfer was. */
 static int esp_do_data_finale(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        struct esp_device *esp_dev = SCptr->device->hostdata;
        int bogus_data = 0, bytes_sent = 0, fifocnt, ecount = 0;
 
@@ -2800,7 +2798,7 @@ static int esp_do_data_finale(struct esp *esp)
  * a tape, we don't want to go into a loop re-negotiating
  * synchronous capabilities over and over.
  */
-static int esp_should_clear_sync(Scsi_Cmnd *sp)
+static int esp_should_clear_sync(struct scsi_cmnd *sp)
 {
        u8 cmd1 = sp->cmnd[0];
        u8 cmd2 = sp->data_cmnd[0];
@@ -2834,7 +2832,7 @@ static int esp_should_clear_sync(Scsi_Cmnd *sp)
  */
 static int esp_do_freebus(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        struct esp_device *esp_dev = SCptr->device->hostdata;
        int rval;
 
@@ -2905,7 +2903,7 @@ static int esp_do_freebus(struct esp *esp)
  */
 static int esp_bad_reconnect(struct esp *esp)
 {
-       Scsi_Cmnd *sp;
+       struct scsi_cmnd *sp;
 
        ESPLOG(("esp%d: Eieeee, reconnecting unknown command!\n",
                esp->esp_id));
@@ -2914,7 +2912,7 @@ static int esp_bad_reconnect(struct esp *esp)
        ESPLOG(("esp%d: issue_SC[", esp->esp_id));
        while (sp) {
                ESPLOG(("<%02x,%02x>", sp->device->id, sp->device->lun));
-               sp = (Scsi_Cmnd *) sp->host_scribble;
+               sp = (struct scsi_cmnd *) sp->host_scribble;
        }
        ESPLOG(("]\n"));
        sp = esp->current_SC;
@@ -2928,7 +2926,7 @@ static int esp_bad_reconnect(struct esp *esp)
        ESPLOG(("esp%d: disconnected_SC[", esp->esp_id));
        while (sp) {
                ESPLOG(("<%02x,%02x>", sp->device->id, sp->device->lun));
-               sp = (Scsi_Cmnd *) sp->host_scribble;
+               sp = (struct scsi_cmnd *) sp->host_scribble;
        }
        ESPLOG(("]\n"));
        return do_reset_bus;
@@ -2938,7 +2936,7 @@ static int esp_bad_reconnect(struct esp *esp)
 static int esp_do_reconnect(struct esp *esp)
 {
        int lun, target;
-       Scsi_Cmnd *SCptr;
+       struct scsi_cmnd *SCptr;
 
        /* Check for all bogus conditions first. */
        target = reconnect_target(esp);
@@ -2988,7 +2986,7 @@ static int esp_do_reconnect(struct esp *esp)
  */
 static int esp_do_status(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        int intr, rval;
 
        rval = skipahead1(esp, SCptr, in_the_dark, in_status);
@@ -3133,7 +3131,7 @@ static int esp_enter_status(struct esp *esp)
 
 static int esp_disconnect_amidst_phases(struct esp *esp)
 {
-       Scsi_Cmnd *sp = esp->current_SC;
+       struct scsi_cmnd *sp = esp->current_SC;
        struct esp_device *esp_dev = sp->device->hostdata;
 
        /* This means real problems if we see this
@@ -3226,7 +3224,7 @@ static int esp_do_phase_determine(struct esp *esp)
 /* First interrupt after exec'ing a cmd comes here. */
 static int esp_select_complete(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        struct esp_device *esp_dev = SCptr->device->hostdata;
        int cmd_bytes_sent, fcnt;
 
@@ -3582,7 +3580,7 @@ static int check_singlebyte_msg(struct esp *esp)
  * this because so many initiators cannot cope with this occurring.
  */
 static int target_with_ants_in_pants(struct esp *esp,
-                                    Scsi_Cmnd *SCptr,
+                                    struct scsi_cmnd *SCptr,
                                     struct esp_device *esp_dev)
 {
        if (esp_dev->sync || SCptr->device->borken) {
@@ -3641,7 +3639,7 @@ static void sync_report(struct esp *esp)
 
 static int check_multibyte_msg(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        struct esp_device *esp_dev = SCptr->device->hostdata;
        u8 regval = 0;
        int message_out = 0;
@@ -3822,7 +3820,7 @@ finish:
 
 static int esp_do_msgindone(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        int message_out = 0, it = 0, rval;
 
        rval = skipahead1(esp, SCptr, in_msgin, in_msgindone);
@@ -3904,7 +3902,7 @@ static int esp_do_msgindone(struct esp *esp)
 
 static int esp_do_cmdbegin(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
 
        esp_advance_phase(SCptr, in_cmdend);
        if (esp->erev == fashme) {
@@ -4125,7 +4123,7 @@ static espfunc_t bus_vector[] = {
 /* This is the second tier in our dual-level SCSI state machine. */
 static int esp_work_bus(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr = esp->current_SC;
+       struct scsi_cmnd *SCptr = esp->current_SC;
        unsigned int phase;
 
        ESPBUS(("esp_work_bus: "));
@@ -4153,7 +4151,7 @@ static espfunc_t isvc_vector[] = {
 /* Main interrupt handler for an esp adapter. */
 static void esp_handle(struct esp *esp)
 {
-       Scsi_Cmnd *SCptr;
+       struct scsi_cmnd *SCptr;
        int what_next = do_intr_end;
 
        SCptr = esp->current_SC;
@@ -4353,7 +4351,7 @@ static irqreturn_t esp_intr(int irq, void *dev_id, struct pt_regs *pregs)
        return IRQ_HANDLED;
 }
 
-static int esp_slave_alloc(Scsi_Device *SDptr)
+static int esp_slave_alloc(struct scsi_device *SDptr)
 {
        struct esp_device *esp_dev =
                kmalloc(sizeof(struct esp_device), GFP_ATOMIC);
@@ -4365,7 +4363,7 @@ static int esp_slave_alloc(Scsi_Device *SDptr)
        return 0;
 }
 
-static void esp_slave_destroy(Scsi_Device *SDptr)
+static void esp_slave_destroy(struct scsi_device *SDptr)
 {
        struct esp *esp = (struct esp *) SDptr->host->hostdata;
 
@@ -4374,7 +4372,7 @@ static void esp_slave_destroy(Scsi_Device *SDptr)
        SDptr->hostdata = NULL;
 }
 
-static Scsi_Host_Template driver_template = {
+static struct scsi_host_template driver_template = {
        .proc_name              = "esp",
        .proc_info              = esp_proc_info,
        .name                   = "Sun ESP 100/100a/200",
index df6d41a..2957394 100644 (file)
 
 #include <linux/config.h>
 
+/* #include "scsi.h" */
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_eh.h>
+#include <scsi/scsi_request.h>
+#include <scsi/scsi_tcq.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_host.h>
+
 /* For dvma controller register definitions. */
 #include <asm/dma.h>
 
+#define scsi_to_sbus_dma_dir(scsi_dir) ((int)(scsi_dir))
+
 /* The ESP SCSI controllers have their register sets in three
  * "classes":
  *
@@ -181,9 +192,9 @@ struct esp {
        int                     bursts;         /* Burst sizes our DVMA supports */
 
        /* Our command queues, only one cmd lives in the current_SC queue. */
-       Scsi_Cmnd               *issue_SC;      /* Commands to be issued */
-       Scsi_Cmnd               *current_SC;    /* Who is currently working the bus */
-       Scsi_Cmnd               *disconnected_SC;/* Commands disconnected from the bus */
+       struct scsi_cmnd        *issue_SC;      /* Commands to be issued */
+       struct scsi_cmnd        *current_SC;    /* Who is currently working the bus */
+       struct scsi_cmnd        *disconnected_SC;/* Commands disconnected from the bus */
 
        /* Message goo */
        u8                      cur_msgout[16];
index 246639f..fed311e 100644 (file)
@@ -1156,6 +1156,7 @@ static void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev,
 
        switch(scsicmd[0]) {
                /* no-op's, complete with success */
+               case SYNCHRONIZE_CACHE:         /* FIXME: temporary */
                case REZERO_UNIT:
                case SEEK_6:
                case SEEK_10:
index 250380c..29522c4 100644 (file)
@@ -26,8 +26,6 @@
 
 #include <asm/byteorder.h>
 
-#include "scsi.h"
-#include <scsi/scsi_host.h>
 #include "qlogicpti.h"
 
 #include <asm/sbus.h>
@@ -809,7 +807,7 @@ static int __init qpti_map_queues(struct qlogicpti *qpti)
 }
 
 /* Detect all PTI Qlogic ISP's in the machine. */
-static int __init qlogicpti_detect(Scsi_Host_Template *tpnt)
+static int __init qlogicpti_detect(struct scsi_host_template *tpnt)
 {
        struct qlogicpti *qpti;
        struct Scsi_Host *qpti_host;
@@ -878,7 +876,7 @@ static int __init qlogicpti_detect(Scsi_Host_Template *tpnt)
                        qpti_get_bursts(qpti);
                        qpti_get_clock(qpti);
 
-                       /* Clear out Scsi_Cmnd array. */
+                       /* Clear out scsi_cmnd array. */
                        memset(qpti->cmd_slots, 0, sizeof(qpti->cmd_slots));
 
                        if (qpti_map_queues(qpti) < 0)
@@ -997,7 +995,7 @@ static inline void marker_frob(struct Command_Entry *cmd)
        marker->rsvd = 0;
 }
 
-static inline void cmd_frob(struct Command_Entry *cmd, Scsi_Cmnd *Cmnd,
+static inline void cmd_frob(struct Command_Entry *cmd, struct scsi_cmnd *Cmnd,
                            struct qlogicpti *qpti)
 {
        memset(cmd, 0, sizeof(struct Command_Entry));
@@ -1027,7 +1025,7 @@ static inline void cmd_frob(struct Command_Entry *cmd, Scsi_Cmnd *Cmnd,
 }
 
 /* Do it to it baby. */
-static inline int load_cmd(Scsi_Cmnd *Cmnd, struct Command_Entry *cmd,
+static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
                           struct qlogicpti *qpti, u_int in_ptr, u_int out_ptr)
 {
        struct dataseg *ds;
@@ -1038,7 +1036,7 @@ static inline int load_cmd(Scsi_Cmnd *Cmnd, struct Command_Entry *cmd,
                int sg_count;
 
                sg = (struct scatterlist *) Cmnd->buffer;
-               sg_count = sbus_map_sg(qpti->sdev, sg, Cmnd->use_sg, scsi_to_sbus_dma_dir(Cmnd->sc_data_direction));
+               sg_count = sbus_map_sg(qpti->sdev, sg, Cmnd->use_sg, Cmnd->sc_data_direction);
 
                ds = cmd->dataseg;
                cmd->segment_cnt = sg_count;
@@ -1081,7 +1079,7 @@ static inline int load_cmd(Scsi_Cmnd *Cmnd, struct Command_Entry *cmd,
                        sbus_map_single(qpti->sdev,
                                        Cmnd->request_buffer,
                                        Cmnd->request_bufflen,
-                                       scsi_to_sbus_dma_dir(Cmnd->sc_data_direction));
+                                       Cmnd->sc_data_direction);
 
                cmd->dataseg[0].d_base = (u32) ((unsigned long)Cmnd->SCp.ptr);
                cmd->dataseg[0].d_count = Cmnd->request_bufflen;
@@ -1115,11 +1113,11 @@ static inline void update_can_queue(struct Scsi_Host *host, u_int in_ptr, u_int
 /*
  * Until we scan the entire bus with inquiries, go throught this fella...
  */
-static void ourdone(Scsi_Cmnd *Cmnd)
+static void ourdone(struct scsi_cmnd *Cmnd)
 {
        struct qlogicpti *qpti = (struct qlogicpti *) Cmnd->device->host->hostdata;
        int tgt = Cmnd->device->id;
-       void (*done) (Scsi_Cmnd *);
+       void (*done) (struct scsi_cmnd *);
 
        /* This grot added by DaveM, blame him for ugliness.
         * The issue is that in the 2.3.x driver we use the
@@ -1127,7 +1125,7 @@ static void ourdone(Scsi_Cmnd *Cmnd)
         * completion linked list at interrupt service time,
         * so we have to store the done function pointer elsewhere.
         */
-       done = (void (*)(Scsi_Cmnd *))
+       done = (void (*)(struct scsi_cmnd *))
                (((unsigned long) Cmnd->SCp.Message)
 #ifdef __sparc_v9__
                 | ((unsigned long) Cmnd->SCp.Status << 32UL)
@@ -1164,10 +1162,10 @@ static void ourdone(Scsi_Cmnd *Cmnd)
        done(Cmnd);
 }
 
-static int qlogicpti_queuecommand(Scsi_Cmnd *Cmnd, void (*done)(Scsi_Cmnd *));
+static int qlogicpti_queuecommand(struct scsi_cmnd *Cmnd, void (*done)(struct scsi_cmnd *));
 
-static int qlogicpti_queuecommand_slow(Scsi_Cmnd *Cmnd,
-                                      void (*done)(Scsi_Cmnd *))
+static int qlogicpti_queuecommand_slow(struct scsi_cmnd *Cmnd,
+                                      void (*done)(struct scsi_cmnd *))
 {
        struct qlogicpti *qpti = (struct qlogicpti *) Cmnd->device->host->hostdata;
 
@@ -1238,7 +1236,7 @@ static int qlogicpti_queuecommand_slow(Scsi_Cmnd *Cmnd,
  *
  * "This code must fly." -davem
  */
-static int qlogicpti_queuecommand(Scsi_Cmnd *Cmnd, void (*done)(Scsi_Cmnd *))
+static int qlogicpti_queuecommand(struct scsi_cmnd *Cmnd, void (*done)(struct scsi_cmnd *))
 {
        struct Scsi_Host *host = Cmnd->device->host;
        struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata;
@@ -1351,9 +1349,9 @@ static int qlogicpti_return_status(struct Status_Entry *sts, int id)
        return (sts->scsi_status & STATUS_MASK) | (host_status << 16);
 }
 
-static Scsi_Cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti)
+static struct scsi_cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti)
 {
-       Scsi_Cmnd *Cmnd, *done_queue = NULL;
+       struct scsi_cmnd *Cmnd, *done_queue = NULL;
        struct Status_Entry *sts;
        u_int in_ptr, out_ptr;
 
@@ -1412,12 +1410,12 @@ static Scsi_Cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti)
                        sbus_unmap_sg(qpti->sdev,
                                      (struct scatterlist *)Cmnd->buffer,
                                      Cmnd->use_sg,
-                                     scsi_to_sbus_dma_dir(Cmnd->sc_data_direction));
+                                     Cmnd->sc_data_direction);
                } else {
                        sbus_unmap_single(qpti->sdev,
                                          (__u32)((unsigned long)Cmnd->SCp.ptr),
                                          Cmnd->request_bufflen,
-                                         scsi_to_sbus_dma_dir(Cmnd->sc_data_direction));
+                                         Cmnd->sc_data_direction);
                }
                qpti->cmd_count[Cmnd->device->id]--;
                sbus_writew(out_ptr, qpti->qregs + MBOX5);
@@ -1433,16 +1431,16 @@ static irqreturn_t qpti_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct qlogicpti *qpti = dev_id;
        unsigned long flags;
-       Scsi_Cmnd *dq;
+       struct scsi_cmnd *dq;
 
        spin_lock_irqsave(qpti->qhost->host_lock, flags);
        dq = qlogicpti_intr_handler(qpti);
 
        if (dq != NULL) {
                do {
-                       Scsi_Cmnd *next;
+                       struct scsi_cmnd *next;
 
-                       next = (Scsi_Cmnd *) dq->host_scribble;
+                       next = (struct scsi_cmnd *) dq->host_scribble;
                        dq->scsi_done(dq);
                        dq = next;
                } while (dq != NULL);
@@ -1452,7 +1450,7 @@ static irqreturn_t qpti_intr(int irq, void *dev_id, struct pt_regs *regs)
        return IRQ_HANDLED;
 }
 
-static int qlogicpti_abort(Scsi_Cmnd *Cmnd)
+static int qlogicpti_abort(struct scsi_cmnd *Cmnd)
 {
        u_short param[6];
        struct Scsi_Host *host = Cmnd->device->host;
@@ -1489,7 +1487,7 @@ static int qlogicpti_abort(Scsi_Cmnd *Cmnd)
        return return_status;
 }
 
-static int qlogicpti_reset(Scsi_Cmnd *Cmnd)
+static int qlogicpti_reset(struct scsi_cmnd *Cmnd)
 {
        u_short param[6];
        struct Scsi_Host *host = Cmnd->device->host;
@@ -1513,7 +1511,7 @@ static int qlogicpti_reset(Scsi_Cmnd *Cmnd)
        return return_status;
 }
 
-static Scsi_Host_Template driver_template = {
+static struct scsi_host_template driver_template = {
        .detect                 = qlogicpti_detect,
        .release                = qlogicpti_release,
        .info                   = qlogicpti_info,
index 942e286..91dead6 100644 (file)
@@ -8,6 +8,17 @@
 
 #include <linux/config.h>
 
+/* #include "scsi.h" */
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_eh.h>
+#include <scsi/scsi_request.h>
+#include <scsi/scsi_tcq.h>
+#include <scsi/scsi.h>
+#include <scsi/scsi_host.h>
+
+#define scsi_to_sbus_dma_dir(scsi_dir) ((int)(scsi_dir))
+
 /* Qlogic/SBUS controller registers. */
 #define SBUS_CFG1      0x006UL
 #define SBUS_CTRL      0x008UL
@@ -352,7 +363,7 @@ struct qlogicpti {
         * Ex000 sparc64 machines with >4GB of ram we just keep track of the
         * scsi command pointers here.  This is essentially what Matt Jacob does. -DaveM
         */
-       Scsi_Cmnd                *cmd_slots[QLOGICPTI_REQ_QUEUE_LEN + 1];
+       struct scsi_cmnd         *cmd_slots[QLOGICPTI_REQ_QUEUE_LEN + 1];
 
        /* The rest of the elements are unimportant for performance. */
        struct qlogicpti         *next;
index 94954eb..268b2c3 100644 (file)
@@ -457,14 +457,14 @@ static void pdc_dma_start(struct ata_queued_cmd *qc)
 
 static void pdc_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf)
 {
-       if (tf->protocol == ATA_PROT_PIO)
+       if (tf->protocol != ATA_PROT_DMA)
                ata_tf_load_mmio(ap, tf);
 }
 
 
 static void pdc_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf)
 {
-       if (tf->protocol == ATA_PROT_PIO)
+       if (tf->protocol != ATA_PROT_DMA)
                ata_exec_command_mmio(ap, tf);
 }
 
index c87a43f..82614b4 100644 (file)
@@ -13,7 +13,10 @@ static void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
                rinfo->dp_gui_master_cntl  /* contains, like GMC_DST_32BPP */
                 | GMC_BRUSH_SOLID_COLOR
                 | ROP3_P);
-       OUTREG(DP_BRUSH_FRGD_CLR, region->color);
+       if (radeon_get_dstbpp(rinfo->depth) != DST_8BPP)
+               OUTREG(DP_BRUSH_FRGD_CLR, rinfo->pseudo_palette[region->color]);
+       else
+               OUTREG(DP_BRUSH_FRGD_CLR, region->color);
        OUTREG(DP_WRITE_MSK, 0xffffffff);
        OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
 
index 8bc80fa..c5e37bd 100644 (file)
@@ -867,7 +867,7 @@ int radeonfb_pci_suspend(struct pci_dev *pdev, u32 state)
        }
 
        /* Blank display and LCD */
-       radeonfb_blank(VESA_POWERDOWN+1, info);
+       radeonfb_blank(VESA_POWERDOWN, info);
 
        /* Sleep */
        rinfo->asleep = 1;
index 9b75ded..b8cb975 100644 (file)
@@ -207,7 +207,7 @@ int __init vesafb_setup(char *options)
                        mtrr=1;
                else if (! strcmp(this_opt, "nomtrr"))
                        mtrr=0;
-               else if (! strncmp(this_opt, "vram=", 5))
+               else if (! strncmp(this_opt, "vram:", 5))
                        vram = simple_strtoul(this_opt+5, NULL, 0);
        }
        return 0;
index 574eeaf..a2cf986 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -538,19 +538,25 @@ struct kioctx *lookup_ioctx(unsigned long ctx_id)
 
 static void use_mm(struct mm_struct *mm)
 {
-       struct mm_struct *active_mm = current->active_mm;
+       struct mm_struct *active_mm;
+
        atomic_inc(&mm->mm_count);
+       task_lock(current);
+       active_mm = current->active_mm;
        current->mm = mm;
        if (mm != active_mm) {
                current->active_mm = mm;
                activate_mm(active_mm, mm);
        }
+       task_unlock(current);
        mmdrop(active_mm);
 }
 
 static void unuse_mm(struct mm_struct *mm)
 {
+       task_lock(current);
        current->mm = NULL;
+       task_unlock(current);
        /* active_mm is still 'mm' */
        enter_lazy_tlb(mm, current);
 }
@@ -608,7 +614,7 @@ void fastcall kick_iocb(struct kiocb *iocb)
                spin_lock_irqsave(&ctx->ctx_lock, flags);
                list_add_tail(&iocb->ki_run_list, &ctx->run_list);
                spin_unlock_irqrestore(&ctx->ctx_lock, flags);
-               schedule_work(&ctx->wq);
+               queue_work(aio_wq, &ctx->wq);
        }
 }
 
index d9e71fc..2eef1b0 100644 (file)
@@ -737,10 +737,10 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
 
 #ifdef __i386__
        /*
-        * In the exec-shield-disabled case turn off the CS limit
-        * completely:
+        * Turn off the CS limit completely if exec-shield disabled or
+        * NX active:
         */
-       if (!exec_shield)
+       if (!exec_shield || use_nx)
                arch_add_exec_range(current->mm, -1);
 #endif
 
index 94fe000..689fdd0 100644 (file)
@@ -744,9 +744,9 @@ extern int copy_mount_options (const void __user *, unsigned long *);
 #define SMBFS_NAME      "smbfs"
 #define NCPFS_NAME      "ncpfs"
 
-asmlinkage int compat_sys_mount(char __user * dev_name, char __user * dir_name,
-                               char __user * type, unsigned long flags,
-                               void __user * data)
+asmlinkage long compat_sys_mount(char __user * dev_name, char __user * dir_name,
+                                char __user * type, unsigned long flags,
+                                void __user * data)
 {
        unsigned long type_page;
        unsigned long data_page;
index b90d381..cf32eb2 100644 (file)
@@ -59,6 +59,9 @@ static unsigned int d_hash_shift;
 static struct hlist_head *dentry_hashtable;
 static LIST_HEAD(dentry_unused);
 
+static void prune_dcache(int count);
+
+
 /* Statistics gathering. */
 struct dentry_stat_t dentry_stat = {
        .age_limit = 45,
@@ -685,6 +688,19 @@ struct dentry *d_alloc(struct dentry * parent, const struct qstr *name)
        struct dentry *dentry;
        char *dname;
 
+#define DENTRY_UNUSED_THRESHOLD 30000
+#define DENTRY_BATCH_COUNT 32
+       if (dentry_stat.nr_unused > DENTRY_UNUSED_THRESHOLD) {
+               int doit = 1;
+               spin_lock(&dcache_lock);
+               if (dentry_stat.nr_unused < DENTRY_UNUSED_THRESHOLD)
+                       doit = 0;
+               spin_unlock(&dcache_lock);
+               if (doit)
+                       prune_dcache(DENTRY_BATCH_COUNT);
+       }
+
        dentry = kmem_cache_alloc(dentry_cache, GFP_KERNEL); 
        if (!dentry)
                return NULL;
index 0831f49..a2910fb 100644 (file)
@@ -690,8 +690,11 @@ out:
 static void clean_blockdev_aliases(struct dio *dio)
 {
        unsigned i;
+       unsigned nblocks;
 
-       for (i = 0; i < dio->blocks_available; i++) {
+       nblocks = dio->map_bh.b_size >> dio->inode->i_blkbits;
+
+       for (i = 0; i < nblocks; i++) {
                unmap_underlying_metadata(dio->map_bh.b_bdev,
                                        dio->map_bh.b_blocknr + i);
        }
index 6362e20..0e73e30 100644 (file)
@@ -535,6 +535,9 @@ void write_inode_now(struct inode *inode, int sync)
                .sync_mode = WB_SYNC_ALL,
        };
 
+       if (inode->i_mapping->backing_dev_info->memory_backed)
+               return;
+
        spin_lock(&inode_lock);
        __writeback_single_inode(inode, &wbc);
        spin_unlock(&inode_lock);
index db1c175..abfd24a 100644 (file)
@@ -725,7 +725,7 @@ struct file *hugetlb_zero_setup(size_t size)
        struct qstr quick_string;
        char buf[16];
 
-       if (!capable(CAP_IPC_LOCK))
+       if (!can_do_mlock())
                return ERR_PTR(-EPERM);
 
        if (!is_hugepage_mem_enough(size))
index 1f847ba..7e1d502 100644 (file)
@@ -98,13 +98,36 @@ struct inodes_stat_t inodes_stat;
 
 static kmem_cache_t * inode_cachep;
 
+static void prune_icache(int nr_to_scan);
+
+
+#define INODE_UNUSED_THRESHOLD 15000
+#define PRUNE_BATCH_COUNT 32
+
+void try_to_clip_inodes(void)
+{
+       unsigned long count = 0; 
+       /* if there are a LOT of unused inodes in cache, better shrink a few first */
+       
+       /* check lockless first to not take the lock always here; racing occasionally isn't a big deal */
+       if (inodes_stat.nr_unused > INODE_UNUSED_THRESHOLD) {
+               spin_lock(&inode_lock);
+               if (inodes_stat.nr_unused > INODE_UNUSED_THRESHOLD)
+                       count = inodes_stat.nr_unused - INODE_UNUSED_THRESHOLD;
+               spin_unlock(&inode_lock);
+               if (count)
+                       prune_icache(count);
+       }
+}
+
+
 static struct inode *alloc_inode(struct super_block *sb)
 {
        static struct address_space_operations empty_aops;
        static struct inode_operations empty_iops;
        static struct file_operations empty_fops;
        struct inode *inode;
-
+       
        if (sb->s_op->alloc_inode)
                inode = sb->s_op->alloc_inode(sb);
        else
index a252cac..3c57bc3 100644 (file)
@@ -567,7 +567,7 @@ nfsd_sync_dir(struct dentry *dp)
 static spinlock_t ra_lock = SPIN_LOCK_UNLOCKED;
 
 static inline struct raparms *
-nfsd_get_raparms(dev_t dev, ino_t ino)
+nfsd_get_raparms(dev_t dev, ino_t ino, struct address_space *mapping)
 {
        struct raparms  *ra, **rap, **frap = NULL;
        int depth = 0;
@@ -589,7 +589,7 @@ nfsd_get_raparms(dev_t dev, ino_t ino)
        ra = *frap;
        ra->p_dev = dev;
        ra->p_ino = ino;
-       memset(&ra->p_ra, 0, sizeof(ra->p_ra));
+       file_ra_state_init(&ra->p_ra, mapping);
 found:
        if (rap != &raparm_cache) {
                *rap = ra->p_next;
@@ -661,7 +661,8 @@ nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
 #endif
 
        /* Get readahead parameters */
-       ra = nfsd_get_raparms(inode->i_sb->s_dev, inode->i_ino);
+       ra = nfsd_get_raparms(inode->i_sb->s_dev, inode->i_ino,
+                             inode->i_mapping->host->i_mapping);
        if (ra)
                file.f_ra = ra->p_ra;
 
@@ -677,9 +678,12 @@ nfsd_read(struct svc_rqst *rqstp, struct svc_fh *fhp, loff_t offset,
        }
 
        /* Write back readahead params */
-       if (ra)
+       if (ra) {
+               spin_lock(&ra_lock);
                ra->p_ra = file.f_ra;
-
+               ra->p_count--;
+               spin_unlock(&ra_lock);
+       }
        if (err >= 0) {
                nfsdstats.io_read += err;
                *count = err;
index cdb894c..097555b 100644 (file)
@@ -25,6 +25,22 @@ ToDo:
          sufficient for synchronisation here. We then just need to make sure
          ntfs_readpage/writepage/truncate interoperate properly with us.
 
+2.1.12 - Fix the second fix to the decompression engine and some cleanups.
+
+       - Add a new address space operations struct, ntfs_mst_aops, for mst
+         protected attributes.  This is because the default ntfs_aops do not
+         make sense with mst protected data and were they to write anything to
+         such an attribute they would cause data corruption so we provide
+         ntfs_mst_aops which does not have any write related operations set.
+       - Cleanup dirty ntfs inode handling (fs/ntfs/inode.[hc]) which also
+         includes an adapted ntfs_commit_inode() and an implementation of
+         ntfs_write_inode() which for now just cleans dirty inodes without
+         writing them (it does emit a warning that this is happening).
+       - Undo the second decompression engine fix (see 2.1.9 release ChangeLog
+         entry) as it was only fixing a theoretical bug but at the same time
+         it badly broke the handling of sparse and uncompressed compression
+         blocks.
+
 2.1.11 - Driver internal cleanups.
 
        - Only build logfile.o if building the driver with read-write support.
index 545d4ed..715dc2c 100644 (file)
@@ -5,7 +5,7 @@ obj-$(CONFIG_NTFS_FS) += ntfs.o
 ntfs-objs := aops.o attrib.o compress.o debug.o dir.o file.o inode.o mft.o \
             mst.o namei.o super.o sysctl.o unistr.o upcase.o
 
-EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.11\"
+EXTRA_CFLAGS = -DNTFS_VERSION=\"2.1.12\"
 
 ifeq ($(CONFIG_NTFS_DEBUG),y)
 EXTRA_CFLAGS += -DDEBUG
index 797846b..f7f561a 100644 (file)
@@ -1788,3 +1788,12 @@ struct address_space_operations ntfs_aops = {
 #endif
 };
 
+/**
+ * ntfs_mst_aops - general address space operations for mst protecteed inodes
+ *                and attributes
+ */
+struct address_space_operations ntfs_mst_aops = {
+       .readpage       = ntfs_readpage,        /* Fill page with data. */
+       .sync_page      = block_sync_page,      /* Currently, just unplugs the
+                                                  disk request queue. */
+};
index 2959ef1..5836232 100644 (file)
@@ -507,7 +507,7 @@ int ntfs_read_compressed_block(struct page *page)
         */
        unsigned int nr_pages = (end_vcn - start_vcn) <<
                        vol->cluster_size_bits >> PAGE_CACHE_SHIFT;
-       unsigned int xpage, max_page, max_ofs, cur_page, cur_ofs, i;
+       unsigned int xpage, max_page, cur_page, cur_ofs, i;
        unsigned int cb_clusters, cb_max_ofs;
        int block, max_block, cb_max_page, bhs_size, nr_bhs, err = 0;
        struct page **pages;
@@ -550,11 +550,8 @@ int ntfs_read_compressed_block(struct page *page)
         */
        max_page = ((VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) >>
                        PAGE_CACHE_SHIFT) - offset;
-       max_ofs = (VFS_I(ni)->i_size + PAGE_CACHE_SIZE - 1) & ~PAGE_CACHE_MASK;
-       if (nr_pages < max_page) {
+       if (nr_pages < max_page)
                max_page = nr_pages;
-               max_ofs = 0;
-       }
        for (i = 0; i < max_page; i++, offset++) {
                if (i != xpage)
                        pages[i] = grab_cache_page_nowait(mapping, offset);
@@ -722,14 +719,8 @@ lock_retry_remap:
        cb_max_page >>= PAGE_CACHE_SHIFT;
 
        /* Catch end of file inside a compression block. */
-       if (cb_max_page >= max_page) {
-               if (cb_max_page > max_page) {
-                       cb_max_page = max_page;
-                       cb_max_ofs = max_ofs;
-               } else if (cb_max_ofs > max_ofs) {
-                       cb_max_ofs = max_ofs;
-               }
-       }
+       if (cb_max_page > max_page)
+               cb_max_page = max_page;
 
        if (vcn == start_vcn - cb_clusters) {
                /* Sparse cb, zero out page range overlapping the cb. */
@@ -897,7 +888,8 @@ lock_retry_remap:
                if (page) {
                        ntfs_error(vol->sb, "Still have pages left! "
                                        "Terminating them with extreme "
-                                       "prejudice.");
+                                       "prejudice.  Inode 0x%lx, page index "
+                                       "0x%lx.", ni->mft_no, page->index);
                        if (cur_page == xpage && !xpage_done)
                                SetPageError(page);
                        flush_dcache_page(page);
index 65f74d3..470a1e9 100644 (file)
@@ -1196,7 +1196,7 @@ skip_index_root:
        ia_mapping = vdir->i_mapping;
        bmp_vi = ndir->itype.index.bmp_ino;
        if (unlikely(!bmp_vi)) {
-               ntfs_debug("Inode %lu, regetting index bitmap.", vdir->i_ino);
+               ntfs_debug("Inode 0x%lx, regetting index bitmap.", vdir->i_ino);
                bmp_vi = ntfs_attr_iget(vdir, AT_BITMAP, I30, 4);
                if (unlikely(IS_ERR(bmp_vi))) {
                        ntfs_error(sb, "Failed to get bitmap attribute.");
index 273e4c3..0bb39d8 100644 (file)
@@ -872,7 +872,7 @@ skip_large_dir_stuff:
                /* Setup the operations for this inode. */
                vi->i_op = &ntfs_dir_inode_ops;
                vi->i_fop = &ntfs_dir_ops;
-               vi->i_mapping->a_ops = &ntfs_aops;
+               vi->i_mapping->a_ops = &ntfs_mst_aops;
        } else {
                /* It is a file. */
                reinit_attr_search_ctx(ctx);
@@ -1249,7 +1249,10 @@ static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
        /* Setup the operations for this attribute inode. */
        vi->i_op = NULL;
        vi->i_fop = NULL;
-       vi->i_mapping->a_ops = &ntfs_aops;
+       if (NInoMstProtected(ni))
+               vi->i_mapping->a_ops = &ntfs_mst_aops;
+       else
+               vi->i_mapping->a_ops = &ntfs_aops;
 
        if (!NInoCompressed(ni))
                vi->i_blocks = ni->allocated_size >> 9;
@@ -1339,7 +1342,7 @@ int ntfs_read_inode_mount(struct inode *vi)
        ni->name_len = 0;
 
        /*
-        * This sets up our little cheat allowing us to reuse the async io
+        * This sets up our little cheat allowing us to reuse the async read io
         * completion handler for directories.
         */
        ni->itype.index.block_size = vol->mft_record_size;
@@ -1702,18 +1705,6 @@ err_out:
        return -1;
 }
 
-/**
- * ntfs_commit_inode - write out a dirty inode
- * @ni:                inode to write out
- *
- */
-int ntfs_commit_inode(ntfs_inode *ni)
-{
-       ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
-       NInoClearDirty(ni);
-       return 0;
-}
-
 /**
  * ntfs_put_inode - handler for when the inode reference count is decremented
  * @vi:                vfs inode
@@ -1742,34 +1733,6 @@ void ntfs_put_inode(struct inode *vi)
 
 void __ntfs_clear_inode(ntfs_inode *ni)
 {
-       int err;
-
-       ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
-       if (NInoDirty(ni)) {
-               err = ntfs_commit_inode(ni);
-               if (err) {
-                       ntfs_error(ni->vol->sb, "Failed to commit dirty "
-                                       "inode synchronously.");
-                       // FIXME: Do something!!!
-               }
-       }
-       /* Synchronize with ntfs_commit_inode(). */
-       down(&ni->mrec_lock);
-       up(&ni->mrec_lock);
-       if (NInoDirty(ni)) {
-               ntfs_error(ni->vol->sb, "Failed to commit dirty inode "
-                               "asynchronously.");
-               // FIXME: Do something!!!
-       }
-       /* No need to lock at this stage as no one else has a reference. */
-       if (ni->nr_extents > 0) {
-               int i;
-
-               // FIXME: Handle dirty case for each extent inode!
-               for (i = 0; i < ni->nr_extents; i++)
-                       ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
-               kfree(ni->ext.extent_ntfs_inos);
-       }
        /* Free all alocated memory. */
        down_write(&ni->run_list.lock);
        if (ni->run_list.rl) {
@@ -1799,6 +1762,20 @@ void __ntfs_clear_inode(ntfs_inode *ni)
 
 void ntfs_clear_extent_inode(ntfs_inode *ni)
 {
+       ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
+
+       BUG_ON(NInoAttr(ni));
+       BUG_ON(ni->nr_extents != -1);
+
+#ifdef NTFS_RW
+       if (NInoDirty(ni)) {
+               if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
+                       ntfs_error(ni->vol->sb, "Clearing dirty extent inode!  "
+                                       "Losing data!  This is a BUG!!!");
+               // FIXME:  Do something!!!
+       }
+#endif /* NTFS_RW */
+
        __ntfs_clear_inode(ni);
 
        /* Bye, bye... */
@@ -1819,6 +1796,30 @@ void ntfs_clear_big_inode(struct inode *vi)
 {
        ntfs_inode *ni = NTFS_I(vi);
 
+#ifdef NTFS_RW
+       if (NInoDirty(ni)) {
+               BOOL was_bad = (is_bad_inode(vi));
+
+               /* Committing the inode also commits all extent inodes. */
+               ntfs_commit_inode(vi);
+
+               if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
+                       ntfs_error(vi->i_sb, "Failed to commit dirty inode "
+                                       "0x%lx.  Losing data!", vi->i_ino);
+                       // FIXME:  Do something!!!
+               }
+       }
+#endif /* NTFS_RW */
+
+       /* No need to lock at this stage as no one else has a reference. */
+       if (ni->nr_extents > 0) {
+               int i;
+
+               for (i = 0; i < ni->nr_extents; i++)
+                       ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
+               kfree(ni->ext.extent_ntfs_inos);
+       }
+
        __ntfs_clear_inode(ni);
 
        if (NInoAttr(ni)) {
@@ -1959,4 +1960,49 @@ trunc_err:
        return err;
 }
 
-#endif
+void ntfs_write_inode(struct inode *vi, int sync)
+{
+       ntfs_inode *ni = NTFS_I(vi);
+
+       ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
+                       vi->i_ino);
+
+       /*
+        * Dirty attribute inodes are written via their real inodes so just
+        * clean them here.
+        */
+       if (NInoAttr(ni)) {
+               NInoClearDirty(ni);
+               return;
+       }
+
+       /* Write this base mft record. */
+       if (NInoDirty(ni)) {
+               ntfs_warning(vi->i_sb, "Cleaning dirty inode 0x%lx without "
+                               "writing to disk as this is not yet "
+                               "implemented.", vi->i_ino);
+               NInoClearDirty(ni);
+       }
+
+       /* Write all attached extent mft records. */
+       down(&ni->extent_lock);
+       if (ni->nr_extents > 0) {
+               int i;
+               ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
+
+               for (i = 0; i < ni->nr_extents; i++) {
+                       ntfs_inode *tni = extent_nis[i];
+
+                       if (NInoDirty(tni)) {
+                               ntfs_warning(vi->i_sb, "Cleaning dirty extent "
+                                               "inode 0x%lx without writing "
+                                               "to disk as this is not yet "
+                                               "implemented.", tni->mft_no);
+                               NInoClearDirty(tni);
+                       }
+               }
+       }
+       up(&ni->extent_lock);
+}
+
+#endif /* NTFS_RW */
index 7346ebd..59af63e 100644 (file)
@@ -281,6 +281,15 @@ extern void ntfs_truncate(struct inode *vi);
 
 extern int ntfs_setattr(struct dentry *dentry, struct iattr *attr);
 
+extern void ntfs_write_inode(struct inode *vi, int sync);
+
+static inline void ntfs_commit_inode(struct inode *vi)
+{
+       if (!is_bad_inode(vi))
+               ntfs_write_inode(vi, 1);
+       return;
+}
+
 #endif /* NTFS_RW */
 
 #endif /* _LINUX_NTFS_INODE_H */
index 58bc6b4..c4ccbc9 100644 (file)
@@ -62,6 +62,7 @@ extern kmem_cache_t *ntfs_attr_ctx_cache;
 /* The various operations structs defined throughout the driver files. */
 extern struct super_operations ntfs_sops;
 extern struct address_space_operations ntfs_aops;
+extern struct address_space_operations ntfs_mst_aops;
 extern struct address_space_operations ntfs_mft_aops;
 
 extern struct  file_operations ntfs_file_ops;
index a5d65cb..22939a5 100644 (file)
@@ -763,7 +763,7 @@ static BOOL load_and_init_mft_mirror(ntfs_volume *vol)
        /* The $MFTMirr, like the $MFT is multi sector transfer protected. */
        NInoSetMstProtected(tmp_ni);
        /*
-        * Set up our little cheat allowing us to reuse the async io
+        * Set up our little cheat allowing us to reuse the async read io
         * completion handler for directories.
         */
        tmp_ni->itype.index.block_size = vol->mft_record_size;
@@ -1142,7 +1142,7 @@ get_ctx_vol_failed:
 #ifdef NTFS_RW
        /* Make sure that no unsupported volume flags are set. */
        if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) {
-               static const char *es1 = "Volume has unsupported flags set ";
+               static const char *es1 = "Volume has unsupported flags set";
                static const char *es2 = ".  Run chkdsk and mount in Windows.";
 
                /* If a read-write mount, convert it to a read-only mount. */
index 6624e54..68934a2 100644 (file)
@@ -19,6 +19,8 @@
 #define MAX_HWIFS      CONFIG_IDE_MAX_HWIFS
 #endif
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static inline int ide_default_irq(unsigned long base)
 {
        switch (base) {
index 686b955..558d177 100644 (file)
@@ -39,7 +39,7 @@
     {INR_OPEN, INR_OPEN},                      /* RLIMIT_NOFILE */     \
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_AS */         \
     {LONG_MAX, LONG_MAX},                      /* RLIMIT_NPROC */      \
-    {LONG_MAX, LONG_MAX},                      /* RLIMIT_MEMLOCK */    \
+    {PAGE_SIZE,PAGE_SIZE},                     /* RLIMIT_MEMLOCK */    \
     {LONG_MAX, LONG_MAX},                       /* RLIMIT_LOCKS */      \
 }
 
index 94380f5..bd600bd 100644 (file)
@@ -83,9 +83,10 @@ typedef struct { volatile u32 offset[4096]; } __regbase;
 extern void pxa_gpio_mode( int gpio_mode );
 
 /*
- * return current lclk frequency in units of 10kHz
+ * return current memory and LCD clock frequency in units of 10kHz
  */
-extern unsigned int get_lclk_frequency_10khz(void);
+extern unsigned int get_memclk_frequency_10khz(void);
+extern unsigned int get_lcdclk_frequency_10khz(void);
 
 #endif
 
index d43dee1..b2b9b3d 100644 (file)
 # include <asm/arch/ide.h>     /* obsolete + broken */
 #endif
 
-/*
- * We always use the new IDE port registering,
- * so these are fixed here.
- */
-#define ide_default_io_base(i)         (0)
-#define ide_default_irq(b)             (0)
-
 #if !defined(CONFIG_ARCH_L7200) && !defined(CONFIG_ARCH_LH7A40X)
 # define IDE_ARCH_OBSOLETE_INIT
 # ifdef CONFIG_ARCH_CLPS7500
@@ -37,8 +30,6 @@
 # endif
 #endif /* !ARCH_L7200 && !ARCH_LH7A40X */
 
-#define ide_init_default_irq(base)     (0)
-
 #define __ide_mm_insw(port,addr,len)   readsw(port,addr,len)
 #define __ide_mm_insl(port,addr,len)   readsl(port,addr,len)
 #define __ide_mm_outsw(port,addr,len)  writesw(port,addr,len)
index 9da87b6..0e42fa8 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },       \
        { 0,             0             },       \
        { INR_OPEN,      INR_OPEN      },       \
-       { RLIM_INFINITY, RLIM_INFINITY },       \
+       { PAGE_SIZE,      PAGE_SIZE    },       \
        { RLIM_INFINITY, RLIM_INFINITY },       \
        { RLIM_INFINITY, RLIM_INFINITY },       \
 }
index 2d29108..db804d7 100644 (file)
 #define __ide_mm_outsw(port,addr,len)   writesw(port,addr,len)
 #define __ide_mm_outsl(port,addr,len)   writesl(port,addr,len)
 
-#define ide_init_default_irq(base)     (0)
-
-/*
- * We always use the new IDE port registering,
- * so these are fixed here.
- */
-#define ide_default_io_base(i)         (0)
-#define ide_default_irq(b)             (0)
-
 #define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       (0)
 
index 9da87b6..1187008 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },       \
        { 0,             0             },       \
        { INR_OPEN,      INR_OPEN      },       \
-       { RLIM_INFINITY, RLIM_INFINITY },       \
+       { PAGE_SIZE,     PAGE_SIZE     },       \
        { RLIM_INFINITY, RLIM_INFINITY },       \
        { RLIM_INFINITY, RLIM_INFINITY },       \
 }
index 1e79627..1d1d1ba 100644 (file)
@@ -3,6 +3,7 @@
 
 /* Etrax 100LX have 32-byte cache-lines. */
 #define L1_CACHE_BYTES 32
+#define L1_CACHE_SHIFT 5
 #define L1_CACHE_SHIFT_MAX 5
 
 #endif /* _ASM_ARCH_CACHE_H */
index f657c75..a2a6e15 100644 (file)
@@ -8,6 +8,11 @@
 #include <asm/arch/sv_addr_ag.h>
 
 #define NR_IRQS 32
+
+/* The first vector number used for IRQs in v10 is really 0x20 */
+/* but all the code and constants are offseted to make 0 the first */
+#define FIRST_IRQ 0
+
 #define SOME_IRQ_NBR        IO_BITNR(R_VECT_MASK_RD, some)   /* 0 ? */
 #define NMI_IRQ_NBR         IO_BITNR(R_VECT_MASK_RD, nmi)    /* 1 */
 #define TIMER0_IRQ_NBR      IO_BITNR(R_VECT_MASK_RD, timer0) /* 2 */
index 87901a7..fcbd77e 100644 (file)
@@ -25,7 +25,7 @@
 #define THREAD_usp 4 /* offsetof(struct thread_struct, usp) */
 #define THREAD_dccr 8 /* offsetof(struct thread_struct, dccr) */
 
-#define TASK_pid 121 /* offsetof(struct task_struct, pid) */
+#define TASK_pid 133 /* offsetof(struct task_struct, pid) */
 
 #define LCLONE_VM 256 /* CLONE_VM */
 #define LCLONE_UNTRACED 8388608 /* CLONE_UNTRACED */
index f740103..d786111 100644 (file)
@@ -295,6 +295,50 @@ extern inline int find_next_zero_bit (void * addr, int size, int offset)
        return result + ffz(tmp);
 }
 
+/**
+ * find_next_bit - find the first set bit in a memory region
+ * @addr: The address to base the search on
+ * @offset: The bitnumber to start searching at
+ * @size: The maximum size to search
+ */
+static __inline__ int find_next_bit(void *addr, int size, int offset)
+{
+       unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
+        unsigned long result = offset & ~31UL;
+        unsigned long tmp;
+
+        if (offset >= size)
+                return size;
+        size -= result;
+        offset &= 31UL;
+        if (offset) {
+                tmp = *(p++);
+                tmp &= (~0UL << offset);
+                if (size < 32)
+                        goto found_first;
+                if (tmp)
+                        goto found_middle;
+                size -= 32;
+                result += 32;
+        }
+        while (size & ~31UL) {
+                if ((tmp = *(p++)))
+                        goto found_middle;
+                result += 32;
+                size -= 32;
+        }
+        if (!size)
+                return result;
+        tmp = *p;
+
+found_first:
+        tmp &= (~0UL >> (32 - size));
+        if (tmp == 0UL)        /* Are any bits set? */
+                return result + size; /* Nope. */
+found_middle:
+        return result + __ffs(tmp);
+}
+
 /**
  * find_first_zero_bit - find the first zero bit in a memory region
  * @addr: The address to start the search at
@@ -306,6 +350,8 @@ extern inline int find_next_zero_bit (void * addr, int size, int offset)
 
 #define find_first_zero_bit(addr, size) \
         find_next_zero_bit((addr), (size), 0)
+#define find_first_bit(addr, size) \
+        find_next_bit((addr), (size), 0)
 
 #define ext2_set_bit                 test_and_set_bit
 #define ext2_set_bit_atomic(l,n,a)   test_and_set_bit(n,a)
index e7e1690..0d770f6 100644 (file)
@@ -1 +1,125 @@
-#include <asm-generic/dma-mapping.h>
+#ifndef _ASM_CRIS_DMA_MAPPING_H
+#define _ASM_CRIS_DMA_MAPPING_H
+
+#include "scatterlist.h"
+
+static inline int
+dma_supported(struct device *dev, u64 mask)
+{
+       BUG();
+       return 0;
+}
+
+static inline int
+dma_set_mask(struct device *dev, u64 dma_mask)
+{
+       BUG();
+       return 1;
+}
+
+static inline void *
+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
+                  int flag)
+{
+       BUG();
+       return NULL;
+}
+
+static inline void
+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
+                   dma_addr_t dma_handle)
+{
+       BUG();
+}
+
+static inline dma_addr_t
+dma_map_single(struct device *dev, void *cpu_addr, size_t size,
+              enum dma_data_direction direction)
+{
+       BUG();
+       return 0;
+}
+
+static inline void
+dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
+                enum dma_data_direction direction)
+{
+       BUG();
+}
+
+static inline dma_addr_t
+dma_map_page(struct device *dev, struct page *page,
+            unsigned long offset, size_t size,
+            enum dma_data_direction direction)
+{
+       BUG();
+       return 0;
+}
+
+static inline void
+dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
+              enum dma_data_direction direction)
+{
+       BUG();
+}
+
+static inline int
+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
+          enum dma_data_direction direction)
+{
+       BUG();
+       return 1;
+}
+
+static inline void
+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
+            enum dma_data_direction direction)
+{
+       BUG();
+}
+
+static inline void
+dma_sync_single(struct device *dev, dma_addr_t dma_handle, size_t size,
+               enum dma_data_direction direction)
+{
+       BUG();
+}
+
+static inline void
+dma_sync_sg(struct device *dev, struct scatterlist *sg, int nelems,
+           enum dma_data_direction direction)
+{
+       BUG();
+}
+
+/* Now for the API extensions over the pci_ one */
+
+#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
+#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
+#define dma_is_consistent(d)   (1)
+
+static inline int
+dma_get_cache_alignment(void)
+{
+       /* no easy way to get cache size on all processors, so return
+        * the maximum possible, to be safe */
+       return (1 << L1_CACHE_SHIFT_MAX);
+}
+
+static inline void
+dma_sync_single_range(struct device *dev, dma_addr_t dma_handle,
+                     unsigned long offset, size_t size,
+                     enum dma_data_direction direction)
+{
+       BUG();
+}
+
+static inline void
+dma_cache_sync(void *vaddr, size_t size,
+              enum dma_data_direction direction)
+{
+       BUG();
+}
+
+#endif
+
index 10a7706..6952202 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fasttimer.h,v 1.2 2002/12/11 13:03:43 starvik Exp $
+/* $Id: fasttimer.h,v 1.3 2004/05/14 10:19:19 starvik Exp $
  * linux/include/asm-cris/fasttimer.h
  *
  * Fast timers for ETRAX100LX
@@ -24,6 +24,8 @@ struct fast_timer{ /* Close to timer_list */
   const char *name;
 };
 
+extern struct fast_timer *fast_timer_list;
+
 void start_one_shot_timer(struct fast_timer *t,
                           fast_timer_function_type *function,
                           unsigned long data,
index b89c1f9..ac8807b 100644 (file)
@@ -72,6 +72,8 @@ extern void iounmap(void *addr);
 
 #define IO_SPACE_LIMIT 0xffff
 #define inb(x) (0)
+#define inw(x) (0)
+#define inl(x) (0)
 #define outb(x,y)
 #define outw(x,y)
 #define outl(x,y)
index bb12a10..be2d8f6 100644 (file)
         ((nr)   << _IOC_NRSHIFT) | \
         ((size) << _IOC_SIZESHIFT))
 
+/* provoke compile error for invalid uses of size argument */
+extern int __invalid_size_argument_for_IOC;
+#define _IOC_TYPECHECK(t) \
+       ((sizeof(t) == sizeof(t[1]) && \
+         sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
+         sizeof(t) : __invalid_size_argument_for_IOC)
+
 /* used to create numbers */
 #define _IO(type,nr)           _IOC(_IOC_NONE,(type),(nr),0)
-#define _IOR(type,nr,size)     _IOC(_IOC_READ,(type),(nr),sizeof(size))
-#define _IOW(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
-#define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
+#define _IOR(type,nr,size)     _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOW(type,nr,size)     _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOWR(type,nr,size)    _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
 
 /* used to decode ioctl numbers.. */
 #define _IOC_DIR(nr)           (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
index 05dc155..bebb889 100644 (file)
@@ -6,7 +6,11 @@
 
 /* PAGE_SHIFT determines the page size */
 #define PAGE_SHIFT     13
+#ifndef __ASSEMBLY__
 #define PAGE_SIZE      (1UL << PAGE_SHIFT)
+#else
+#define PAGE_SIZE      (1 << PAGE_SHIFT)
+#endif
 #define PAGE_MASK      (~(PAGE_SIZE-1))
 
 #ifdef __KERNEL__
 /*
  * These are used to make use of C type-checking..
  */
+#ifndef __ASSEMBLY__
 typedef struct { unsigned long pte; } pte_t;
 typedef struct { unsigned long pmd; } pmd_t;
 typedef struct { unsigned long pgd; } pgd_t;
 typedef struct { unsigned long pgprot; } pgprot_t;
+#endif
 
 #define pte_val(x)     ((x).pte)
 #define pmd_val(x)     ((x).pmd)
@@ -51,7 +57,7 @@ typedef struct { unsigned long pgprot; } pgprot_t;
 
 #define virt_to_page(kaddr)    (mem_map + (((unsigned long)(kaddr) - PAGE_OFFSET) >> PAGE_SHIFT))
 #define VALID_PAGE(page)       (((page) - mem_map) < max_mapnr)
-#define virt_addr_valid(kaddr) pfn_valid((kaddr) >> PAGE_SHIFT)
+#define virt_addr_valid(kaddr) pfn_valid((unsigned)(kaddr) >> PAGE_SHIFT)
 
 /* convert a page (based on mem_map and forward) to a physical address
  * do this by figuring out the virtual address and then use __pa
@@ -72,8 +78,6 @@ typedef struct { unsigned long pgprot; } pgprot_t;
          BUG(); \
 } while (0)
 
-#endif /* __ASSEMBLY__ */
-
 /* Pure 2^n version of get_order */
 static inline int get_order(unsigned long size)
 {
@@ -87,6 +91,7 @@ static inline int get_order(unsigned long size)
        } while (size);
        return order;
 }
+#endif /* __ASSEMBLY__ */
 
 #define VM_DATA_DEFAULT_FLAGS  (VM_READ | VM_WRITE | VM_EXEC | \
                                 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
index e080860..c610415 100644 (file)
@@ -1,9 +1,13 @@
 #ifndef __ASM_CRIS_PCI_H
 #define __ASM_CRIS_PCI_H
 
+#include <asm/scatterlist.h>
+#include <asm-generic/pci-dma-compat.h>
+
 /* ETRAX chips don't have a PCI bus. This file is just here because some stupid .c code
  * includes it even if CONFIG_PCI is not set.
  */
+#define PCI_DMA_BUS_IS_PHYS       (1)
 
 #endif /* __ASM_CRIS_PCI_H */
 
index e4bdb23..4a08ed8 100644 (file)
@@ -5,9 +5,11 @@
 #ifndef _CRIS_PGTABLE_H
 #define _CRIS_PGTABLE_H
 
+#ifndef __ASSEMBLY__
 #include <linux/config.h>
 #include <linux/sched.h>
 #include <asm/mmu.h>
+#endif
 #include <asm/arch/pgtable.h>
 
 /*
@@ -21,8 +23,9 @@
  * This file contains the functions and defines necessary to modify and use
  * the CRIS page table tree.
  */
-
+#ifndef __ASSEMBLY__
 extern void paging_init(void);
+#endif
 
 /* Certain architectures need to do special things when pte's
  * within a page table are directly modified.  Thus, the following
@@ -72,8 +75,10 @@ extern void paging_init(void);
 #define FIRST_USER_PGD_NR       0
 
 /* zero page used for uninitialized stuff */
+#ifndef __ASSEMBLY__
 extern unsigned long empty_zero_page;
 #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
+#endif
 
 /* number of bits that fit into a memory pointer */
 #define BITS_PER_PTR                   (8*sizeof(unsigned long))
@@ -104,6 +109,8 @@ extern unsigned long empty_zero_page;
 #define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
 #define pmd_clear(xp)  do { pmd_val(*(xp)) = 0; } while (0)
 
+#ifndef __ASSEMBLY__
+
 /*
  * The "pgd_xxx()" functions here are trivial for a folded two-level
  * setup: the pgd is never bad, and a pmd always exists (as it's folded
@@ -337,4 +344,5 @@ extern inline void update_mmu_cache(struct vm_area_struct * vma,
 #define pte_to_pgoff(x)        (pte_val(x) >> 6)
 #define pgoff_to_pte(x)        __pte(((x) << 6) | _PAGE_FILE)
 
+#endif /* __ASSEMBLY__ */
 #endif /* _CRIS_PGTABLE_H */
index 79045e3..7a8c288 100644 (file)
@@ -3,8 +3,10 @@
 
 #include <asm/arch/ptrace.h>
 
+#ifdef __KERNEL__
 /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
 #define PTRACE_GETREGS            12
 #define PTRACE_SETREGS            13
+#endif
 
 #endif /* _CRIS_PTRACE_H */
index 83561da..78848fb 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index 382081c..97c1303 100644 (file)
@@ -100,6 +100,8 @@ struct rtc_time {
 #define RTC_RD_TIME            _IOR(RTC_MAGIC, 0x09, struct rtc_time)  /* Read RTC time. */
 #define RTC_SET_TIME           _IOW(RTC_MAGIC, 0x0a, struct rtc_time)  /* Set RTC time. */
 #define RTC_SET_CHARGE         _IOW(RTC_MAGIC, 0x0b, int)              
-#define RTC_MAX_IOCTL 0x0b
+#define RTC_VLOW_RD     _IOR(RTC_MAGIC, 0x11, int)  /* Voltage Low detector */
+#define RTC_VLOW_SET    _IO(RTC_MAGIC, 0x12)        /* Clear voltage low information */
+#define RTC_MAX_IOCTL 0x12
 
 #endif /* __RTC_H__ */
index 461c5e4..dbd0f30 100644 (file)
@@ -52,7 +52,7 @@ extern inline int waking_non_zero_interruptible(struct semaphore *sem,
                dec(&sem->waking);
                ret = 1;
        } else if (signal_pending(tsk)) {
-               count_inc(&sem->count);
+               inc(&sem->count);
                ret = -EINTR;
        }
        local_irq_restore(flags);
@@ -67,7 +67,7 @@ extern inline int waking_non_zero_trylock(struct semaphore *sem)
        local_save_flags(flags);
        local_irq_disable();
        if (read(&sem->waking) <= 0)
-               count_inc(&sem->count);
+               inc(&sem->count);
        else {
                dec(&sem->waking);
                ret = 0;
index d0821f6..9ee66b9 100644 (file)
@@ -21,7 +21,7 @@
 int printk(const char *fmt, ...);
 
 struct semaphore {
-       int count; /* not atomic_t since we do the atomicity here already */
+       atomic_t count;
        atomic_t waking;
        wait_queue_head_t wait;
 #if WAITQUEUE_DEBUG
@@ -36,7 +36,7 @@ struct semaphore {
 #endif
 
 #define __SEMAPHORE_INITIALIZER(name,count)             \
-        { count, ATOMIC_INIT(0),          \
+        { ATOMIC_INIT(count), ATOMIC_INIT(0),           \
           __WAIT_QUEUE_HEAD_INITIALIZER((name).wait)    \
           __SEM_DEBUG_INIT(name) }
 
@@ -84,7 +84,7 @@ extern inline void down(struct semaphore * sem)
        /* atomically decrement the semaphores count, and if its negative, we wait */
        local_save_flags(flags);
        local_irq_disable();
-       failed = --(sem->count) < 0;
+       failed = --(sem->count.counter) < 0;
        local_irq_restore(flags);
        if(failed) {
                __down(sem);
@@ -110,7 +110,7 @@ extern inline int down_interruptible(struct semaphore * sem)
        /* atomically decrement the semaphores count, and if its negative, we wait */
        local_save_flags(flags);
        local_irq_disable();
-       failed = --(sem->count) < 0;
+       failed = --(sem->count.counter) < 0;
        local_irq_restore(flags);
        if(failed)
                failed = __down_interruptible(sem);
@@ -128,7 +128,7 @@ extern inline int down_trylock(struct semaphore * sem)
 
        local_save_flags(flags);
        local_irq_disable();
-       failed = --(sem->count) < 0;
+       failed = --(sem->count.counter) < 0;
        local_irq_restore(flags);
        if(failed)
                failed = __down_trylock(sem);
@@ -153,7 +153,7 @@ extern inline void up(struct semaphore * sem)
        /* atomically increment the semaphores count, and if it was negative, we wake people */
        local_save_flags(flags);
        local_irq_disable();
-       wakeup = ++(sem->count) <= 0;
+       wakeup = ++(sem->count.counter) <= 0;
        local_irq_restore(flags);
        if(wakeup) {
                __up(sem);
index 118e9b8..16d9a49 100644 (file)
@@ -154,7 +154,7 @@ struct termios {
 #define  B6250000  0010007
 /* etrax 200 supports this as well */
 #define  B12500000 0010010
-#define CIBAUD   002003600000  /* input baud rate */
+#define CIBAUD   002003600000  /* input baud rate (used in v32) */
 /* The values for CIBAUD bits are the same as the values for CBAUD and CBAUDEX
  * shifted left IBSHIFT bits.
  */
index bd329ff..41a0d45 100644 (file)
@@ -50,6 +50,7 @@ typedef unsigned long long u64;
 /* Dma addresses are 32-bits wide, just like our other addresses.  */
  
 typedef u32 dma_addr_t;
+typedef u32 dma64_addr_t;
 
 typedef unsigned int kmem_bufctl_t;
 
index 4336911..71b7f69 100644 (file)
 #define __NR_clock_nanosleep   (__NR_timer_create+8)
 #define __NR_statfs64          268
 #define __NR_fstatfs64         269
+#define __NR_tgkill            270
+#define __NR_utimes            271
+#define __NR_fadvise64_64      272
+#define __NR_vserver           273
+#define __NR_mbind             274
+#define __NR_get_mempolicy     275
+#define __NR_set_mempolicy     276
+#define __NR_mq_open           277
+#define __NR_mq_unlink         (__NR_mq_open+1)
+#define __NR_mq_timedsend      (__NR_mq_open+2)
+#define __NR_mq_timedreceive   (__NR_mq_open+3)
+#define __NR_mq_notify         (__NR_mq_open+4)
+#define __NR_mq_getsetattr     (__NR_mq_open+5)
  
-#define NR_syscalls 270
+#define NR_syscalls 283
 
 
 #ifdef __KERNEL__
 
 #include <linux/compiler.h>
 #include <linux/types.h>
+#include <linux/linkage.h>
 
 /*
  * we need this inline - forking from kernel space will result
index b24fc9b..f8535ce 100644 (file)
 #ifdef __KERNEL__
 /****************************************************************************/
 
-#define ide_default_irq(base)          (0)
-#define ide_default_io_base(index)     (0)
-
-#define ide_init_default_irq(base)     (0)
-
 #define MAX_HWIFS      1
 
 #include <asm-generic/ide_iops.h>
index 38b8e94..278f104 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
 }
index 114ac7a..2c6a7bb 100644 (file)
@@ -290,7 +290,7 @@ static __inline__ int find_first_zero_bit(const unsigned long *addr, unsigned si
                "shll $3,%%edi\n\t"
                "addl %%edi,%%edx"
                :"=d" (res), "=&c" (d0), "=&D" (d1), "=&a" (d2)
-               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
+               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr) : "memory");
        return res;
 }
 
@@ -318,7 +318,7 @@ static __inline__ int find_first_bit(const unsigned long *addr, unsigned size)
                "shll $3,%%edi\n\t"
                "addl %%edi,%%eax"
                :"=a" (res), "=&c" (d0), "=&D" (d1)
-               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
+               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr) : "memory");
        return res;
 }
 
index a6fceb3..d6005e6 100644 (file)
@@ -47,6 +47,7 @@
 /* Don't duplicate feature flags which are redundant with Intel! */
 #define X86_FEATURE_SYSCALL    (1*32+11) /* SYSCALL/SYSRET */
 #define X86_FEATURE_MP         (1*32+19) /* MP Capable. */
+#define X86_FEATURE_NX         (1*32+20) /* Execute Disable */
 #define X86_FEATURE_MMXEXT     (1*32+22) /* AMD MMX extensions */
 #define X86_FEATURE_LM         (1*32+29) /* Long Mode (x86-64) */
 #define X86_FEATURE_3DNOWEXT   (1*32+30) /* AMD 3DNow! extensions */
 #define cpu_has_xmm            boot_cpu_has(X86_FEATURE_XMM)
 #define cpu_has_ht             boot_cpu_has(X86_FEATURE_HT)
 #define cpu_has_mp             boot_cpu_has(X86_FEATURE_MP)
+#define cpu_has_nx             boot_cpu_has(X86_FEATURE_NX)
 #define cpu_has_k6_mtrr                boot_cpu_has(X86_FEATURE_K6_MTRR)
 #define cpu_has_cyrix_arr      boot_cpu_has(X86_FEATURE_CYRIX_ARR)
 #define cpu_has_centaur_mcr    boot_cpu_has(X86_FEATURE_CENTAUR_MCR)
index 916b23b..baf5b5a 100644 (file)
@@ -53,6 +53,7 @@ extern void FASTCALL(kunmap_high(struct page *page));
 void *kmap(struct page *page);
 void kunmap(struct page *page);
 void *kmap_atomic(struct page *page, enum km_type type);
+void *kmap_atomic_nocache_pfn(unsigned long pfn, enum km_type type);
 void kunmap_atomic(void *kvaddr, enum km_type type);
 struct page *kmap_atomic_to_page(void *ptr);
 
index d133348..0409c22 100644 (file)
@@ -23,6 +23,8 @@
 # endif
 #endif
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static __inline__ int ide_default_irq(unsigned long base)
 {
        switch (base) {
index 03fb6b1..a82d62f 100644 (file)
@@ -29,10 +29,7 @@ enum km_type {
        KM_IRQ1,
        KM_SOFTIRQ0,
        KM_SOFTIRQ1,
-       /*
-        * Be wary when adding entries:
-        * the 4G/4G virtual stack must be THREAD_SIZE aligned on each cpu.
-        */
        KM_TYPE_NR
 };
+
 #endif
index ffdeea9..3589c36 100644 (file)
@@ -217,6 +217,15 @@ static inline void wrmsrl (unsigned long msr, unsigned long long val)
 #define MSR_K7_FID_VID_CTL             0xC0010041
 #define MSR_K7_FID_VID_STATUS          0xC0010042
 
+/* extended feature register */
+#define MSR_EFER                       0xc0000080
+
+/* EFER bits: */
+
+/* Execute Disable enable */
+#define _EFER_NX                       11
+#define EFER_NX                                (1<<_EFER_NX)
+
 /* Centaur-Hauls/IDT defined MSRs. */
 #define MSR_IDT_FCR1                   0x107
 #define MSR_IDT_FCR2                   0x108
index f3d21c1..627420f 100644 (file)
  * These are used to make use of C type-checking..
  */
 #ifdef CONFIG_X86_PAE
+extern unsigned long long __supported_pte_mask;
 typedef struct { unsigned long pte_low, pte_high; } pte_t;
 typedef struct { unsigned long long pmd; } pmd_t;
 typedef struct { unsigned long long pgd; } pgd_t;
+typedef struct { unsigned long long pgprot; } pgprot_t;
 #define pte_val(x)     ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
 #define HPAGE_SHIFT    21
 #else
 typedef struct { unsigned long pte_low; } pte_t;
 typedef struct { unsigned long pmd; } pmd_t;
 typedef struct { unsigned long pgd; } pgd_t;
+typedef struct { unsigned long pgprot; } pgprot_t;
 #define boot_pte_t pte_t /* or would you rather have a typedef */
 #define pte_val(x)     ((x).pte_low)
 #define HPAGE_SHIFT    22
@@ -62,7 +65,6 @@ typedef struct { unsigned long pgd; } pgd_t;
 #define HUGETLB_PAGE_ORDER     (HPAGE_SHIFT - PAGE_SHIFT)
 #endif
 
-typedef struct { unsigned long pgprot; } pgprot_t;
 
 #define pmd_val(x)     ((x).pmd)
 #define pgd_val(x)     ((x).pgd)
index 147acd8..a4c24db 100644 (file)
@@ -101,18 +101,24 @@ static inline unsigned long pte_pfn(pte_t pte)
                (pte.pte_high << (32 - PAGE_SHIFT));
 }
 
+extern unsigned long long __supported_pte_mask;
+
 static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
 {
        pte_t pte;
 
-       pte.pte_high = page_nr >> (32 - PAGE_SHIFT);
-       pte.pte_low = (page_nr << PAGE_SHIFT) | pgprot_val(pgprot);
+       pte.pte_high = (page_nr >> (32 - PAGE_SHIFT)) | \
+                                       (pgprot_val(pgprot) >> 32);
+       pte.pte_high &= (__supported_pte_mask >> 32);
+       pte.pte_low = ((page_nr << PAGE_SHIFT) | pgprot_val(pgprot)) & \
+                                                       __supported_pte_mask;
        return pte;
 }
 
 static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
 {
-       return __pmd(((unsigned long long)page_nr << PAGE_SHIFT) | pgprot_val(pgprot));
+       return __pmd((((unsigned long long)page_nr << PAGE_SHIFT) | \
+                       pgprot_val(pgprot)) & __supported_pte_mask);
 }
 
 /*
index 790b3c4..dd0bb8a 100644 (file)
@@ -118,6 +118,7 @@ extern void entry_trampoline_setup(void);
 #define _PAGE_BIT_UNUSED1      9       /* available for programmer */
 #define _PAGE_BIT_UNUSED2      10
 #define _PAGE_BIT_UNUSED3      11
+#define _PAGE_BIT_NX           63
 
 #define _PAGE_PRESENT  0x001
 #define _PAGE_RW       0x002
@@ -134,28 +135,51 @@ extern void entry_trampoline_setup(void);
 
 #define _PAGE_FILE     0x040   /* set:pagecache unset:swap */
 #define _PAGE_PROTNONE 0x080   /* If not present */
+#ifdef CONFIG_X86_PAE
+#define _PAGE_NX       (1ULL<<_PAGE_BIT_NX)
+#else
+#define _PAGE_NX       0
+#endif
 
 #define _PAGE_TABLE    (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
 #define _KERNPG_TABLE  (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
 #define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
 
-#define PAGE_NONE      __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
-#define PAGE_SHARED    __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
-#define PAGE_COPY      __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
-#define PAGE_READONLY  __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
+#define PAGE_NONE \
+       __pgprot(_PAGE_PROTNONE | _PAGE_ACCESSED)
+#define PAGE_SHARED \
+       __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
+
+#define PAGE_SHARED_EXEC \
+       __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)
+#define PAGE_COPY_NOEXEC \
+       __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_NX)
+#define PAGE_COPY_EXEC \
+       __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
+#define PAGE_COPY \
+       PAGE_COPY_NOEXEC
+#define PAGE_READONLY \
+       __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_NX)
+#define PAGE_READONLY_EXEC \
+       __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
 
 #define _PAGE_KERNEL \
+       (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_NX)
+#define _PAGE_KERNEL_EXEC \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
 
-extern unsigned long __PAGE_KERNEL;
-#define __PAGE_KERNEL_RO       (__PAGE_KERNEL & ~_PAGE_RW)
-#define __PAGE_KERNEL_NOCACHE  (__PAGE_KERNEL | _PAGE_PCD)
-#define __PAGE_KERNEL_LARGE    (__PAGE_KERNEL | _PAGE_PSE)
+extern unsigned long long __PAGE_KERNEL, __PAGE_KERNEL_EXEC;
+#define __PAGE_KERNEL_RO               (__PAGE_KERNEL & ~_PAGE_RW)
+#define __PAGE_KERNEL_NOCACHE          (__PAGE_KERNEL | _PAGE_PCD)
+#define __PAGE_KERNEL_LARGE            (__PAGE_KERNEL | _PAGE_PSE)
+#define __PAGE_KERNEL_LARGE_EXEC       (__PAGE_KERNEL_EXEC | _PAGE_PSE)
 
 #define PAGE_KERNEL            __pgprot(__PAGE_KERNEL)
 #define PAGE_KERNEL_RO         __pgprot(__PAGE_KERNEL_RO)
+#define PAGE_KERNEL_EXEC       __pgprot(__PAGE_KERNEL_EXEC)
 #define PAGE_KERNEL_NOCACHE    __pgprot(__PAGE_KERNEL_NOCACHE)
 #define PAGE_KERNEL_LARGE      __pgprot(__PAGE_KERNEL_LARGE)
+#define PAGE_KERNEL_LARGE_EXEC __pgprot(__PAGE_KERNEL_LARGE_EXEC)
 
 /*
  * The i386 can't do page protection for execute, and considers that
@@ -166,19 +190,19 @@ extern unsigned long __PAGE_KERNEL;
 #define __P001 PAGE_READONLY
 #define __P010 PAGE_COPY
 #define __P011 PAGE_COPY
-#define __P100 PAGE_READONLY
-#define __P101 PAGE_READONLY
-#define __P110 PAGE_COPY
-#define __P111 PAGE_COPY
+#define __P100 PAGE_READONLY_EXEC
+#define __P101 PAGE_READONLY_EXEC
+#define __P110 PAGE_COPY_EXEC
+#define __P111 PAGE_COPY_EXEC
 
 #define __S000 PAGE_NONE
 #define __S001 PAGE_READONLY
 #define __S010 PAGE_SHARED
 #define __S011 PAGE_SHARED
-#define __S100 PAGE_READONLY
-#define __S101 PAGE_READONLY
-#define __S110 PAGE_SHARED
-#define __S111 PAGE_SHARED
+#define __S100 PAGE_READONLY_EXEC
+#define __S101 PAGE_READONLY_EXEC
+#define __S110 PAGE_SHARED_EXEC
+#define __S111 PAGE_SHARED_EXEC
 
 /*
  * Define this if things work differently on an i386 and an i486:
@@ -253,6 +277,15 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 {
        pte.pte_low &= _PAGE_CHG_MASK;
        pte.pte_low |= pgprot_val(newprot);
+#ifdef CONFIG_X86_PAE
+       /*
+        * Chop off the NX bit (if present), and add the NX portion of
+        * the newprot (if present):
+        */
+       pte.pte_high &= -1 ^ (1 << (_PAGE_BIT_NX - 32));
+       pte.pte_high |= (pgprot_val(newprot) >> 32) & \
+                                       (__supported_pte_mask >> 32);
+#endif
        return pte;
 }
 
index a34e753..efdbf17 100644 (file)
@@ -473,6 +473,8 @@ load_esp0(struct tss_struct *tss, struct thread_struct *thread)
        }
 }
 
+extern int use_nx;
+
 #define start_thread(regs, new_eip, new_esp) do {              \
        __asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0));       \
        set_fs(USER_DS);                                        \
index e0da3ad..afa2eec 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
 }
index 9e31639..d3ac37f 100644 (file)
 
 #define segment_eq(a,b)        ((a).seg == (b).seg)
 
-extern long not_a_user_address;
-#define check_user_ptr(x) \
-       (void) ({ void __user * __userptr = (__typeof__(*(x)) *)&not_a_user_address; __userptr; })
-
 /*
  * movsl can be slow when source and dest are not both 8-byte aligned
  */
@@ -61,7 +57,7 @@ extern struct movsl_mask {
  */
 #define __range_ok(addr,size) ({ \
        unsigned long flag,sum; \
-       check_user_ptr(addr); \
+       __chk_user_ptr(addr); \
        asm("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0" \
                :"=&r" (flag), "=r" (sum) \
                :"1" (addr),"g" ((int)(size)),"g" (current_thread_info()->addr_limit.seg)); \
@@ -215,7 +211,7 @@ extern int zero_user_size(unsigned int size, void *ptr);
  */
 #define direct_get_user(x,ptr)                                         \
 ({     int __ret_gu,__val_gu;                                          \
-       check_user_ptr(ptr);                                            \
+       __chk_user_ptr(ptr);                                            \
        switch(sizeof (*(ptr))) {                                       \
        case 1:  __get_user_x(1,__ret_gu,__val_gu,ptr); break;          \
        case 2:  __get_user_x(2,__ret_gu,__val_gu,ptr); break;          \
@@ -334,7 +330,7 @@ extern void __put_user_bad(void);
 #define __put_user_size(x,ptr,size,retval,errret)                      \
 do {                                                                   \
        retval = 0;                                                     \
-       check_user_ptr(ptr);                                            \
+       __chk_user_ptr(ptr);                                            \
        switch (size) {                                                 \
        case 1: __put_user_asm(x,ptr,retval,"b","b","iq",errret);break; \
        case 2: __put_user_asm(x,ptr,retval,"w","w","ir",errret);break; \
@@ -393,7 +389,7 @@ extern long __get_user_bad(void);
 #define __get_user_size(x,ptr,size,retval,errret)                      \
 do {                                                                   \
        retval = 0;                                                     \
-       check_user_ptr(ptr);                                            \
+       __chk_user_ptr(ptr);                                            \
        switch (size) {                                                 \
        case 1: __get_user_asm(x,ptr,retval,"b","b","=q",errret);break; \
        case 2: __get_user_asm(x,ptr,retval,"w","w","=r",errret);break; \
index 2adbd91..e62b953 100644 (file)
@@ -25,6 +25,8 @@
 # endif
 #endif
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static inline int ide_default_irq(unsigned long base)
 {
        switch (base) {
index 06d1177..eb171fc 100644 (file)
@@ -44,7 +44,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index bcb7015..36118fd 100644 (file)
 #define MAX_HWIFS      4       /* same as the other archs */
 #endif
 
-
-static __inline__ int ide_default_irq(unsigned long base)
-{
-         return 0;
-}
-
-static __inline__ unsigned long ide_default_io_base(int index)
-{
-          return 0;
-}
-
-
-/*
- * Set up a hw structure for a specified data port, control port and IRQ.
- * This should follow whatever the default interface uses.
- */
-static __inline__ void ide_init_hwif_ports(hw_regs_t *hw,
-                                          unsigned long data_port,
-                                          unsigned long ctrl_port, int *irq)
-{
-       if (data_port || ctrl_port)
-               printk("ide_init_hwif_ports: must not be called\n");
-}
-
-#define ide_init_default_irq(base)     (0)
-
 /*
  * Get rid of defs from io.h - ide has its private and conflicting versions
  * Since so far no single m68k platform uses ISA/PCI I/O space for IDE, we
index e2ad93f..8b6e74a 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
 }
index b70b1ec..fa2760a 100644 (file)
@@ -20,6 +20,8 @@
 # endif
 #endif
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static inline int ide_default_irq(unsigned long base)
 {
        switch (base) {
index c2df5fc..15a9374 100644 (file)
 #define MAX_HWIFS      2
 #endif
 
-#define ide_default_irq(base) (0)
-#define ide_default_io_base(index) (0)
-
 #define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
-#define ide_init_default_irq(base)     (0)
-
 #define ide_request_irq(irq,hand,flg,dev,id)   request_irq((irq),(hand),(flg),(dev),(id))
 #define ide_free_irq(irq,dev_id)               free_irq((irq), (dev_id))
 #define ide_check_region(from,extent)          check_region((from), (extent))
index f908884..8b0fab7 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index fbcddf3..6c09158 100644 (file)
@@ -43,6 +43,8 @@ extern struct ide_machdep_calls ppc_ide_md;
 #undef SUPPORT_SLOW_DATA_PORTS
 #define        SUPPORT_SLOW_DATA_PORTS 0
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static __inline__ int ide_default_irq(unsigned long base)
 {
        if (ppc_ide_md.default_irq)
index 956b346..475f309 100644 (file)
@@ -34,7 +34,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index a8ee7d1..928dc5e 100644 (file)
@@ -47,16 +47,16 @@ void *eeh_ioremap(unsigned long addr, void *vaddr);
 void __init pci_addr_cache_build(void);
 
 /**
- * eeh_add_device - perform EEH initialization for the indicated pci device
- * @dev: pci device for which to set up EEH
+ * eeh_add_device_early
+ * eeh_add_device_late
  *
- * This routine can be used to perform EEH initialization for PCI
- * devices that were added after system boot (e.g. hotplug, dlpar).
- * Whether this actually enables EEH or not for this device depends
- * on the type of the device, on earlier boot command-line
- * arguments & etc.
+ * Perform eeh initialization for devices added after boot.
+ * Call eeh_add_device_early before doing any i/o to the
+ * device (including config space i/o).  Call eeh_add_device_late
+ * to finish the eeh setup for this device.
  */
-void eeh_add_device(struct pci_dev *);
+void eeh_add_device_early(struct device_node *);
+void eeh_add_device_late(struct pci_dev *);
 
 /**
  * eeh_remove_device - undo EEH setup for the indicated pci device
index a06fef9..00df66e 100644 (file)
 # define MAX_HWIFS     4
 #endif
 
-static inline int ide_default_irq(unsigned long base) { return 0; }
-static inline unsigned long ide_default_io_base(int index) { return 0; }
-
 #define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
-#define ide_init_default_irq(base)     (0)
-
 #endif /* __KERNEL__ */
 
 #endif /* __ASMPPC64_IDE_H */
index 5119645..505ad13 100644 (file)
@@ -172,8 +172,14 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
  * After we have set current->mm to a new value, this activates
  * the context for the new mm so we see the new mappings.
  */
-#define activate_mm(active_mm, mm) \
-       switch_mm(active_mm, mm, current);
+static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       switch_mm(prev, next, current);
+       local_irq_restore(flags);
+}
 
 #define VSID_RANDOMIZER 42470972311UL
 #define VSID_MASK      0xfffffffffUL
index a501894..3c0b8d3 100644 (file)
@@ -30,7 +30,7 @@ struct naca_struct {
        u64 log;                        /* Ptr to log buffer         0x30 */
        u64 serialPortAddr;             /* Phy addr of serial port   0x38 */
        u64 interrupt_controller;       /* Type of int controller    0x40 */ 
-       u64 slb_size;                   /* SLB size in entries       0x48 */
+       u64 unused1;                    /* was SLB size in entries   0x48 */
        u64 pftSize;                    /* Log 2 of page table size  0x50 */
        void *systemcfg;                /* Pointer to systemcfg data 0x58 */
        u32 dCacheL1LogLineSize;        /* L1 d-cache line size Log2 0x60 */
index 64b606a..4280809 100644 (file)
@@ -634,4 +634,10 @@ static inline void prefetchw(const void *x)
 
 #endif /* ASSEMBLY */
 
+/*
+ * Number of entries in the SLB. If this ever changes we should handle
+ * it with a use a cpu feature fixup.
+ */
+#define SLB_NUM_ENTRIES 64
+
 #endif /* __ASM_PPC64_PROCESSOR_H */
index b43a4ea..691a3fa 100644 (file)
@@ -43,7 +43,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index 5b949d2..9423be5 100644 (file)
 #define VERIFY_READ    0
 #define VERIFY_WRITE   1
 
-extern long not_a_user_address;
-#define check_user_ptr(x) \
-       (void) ({ void __user * __userptr = (__typeof__(*(x)) *)&not_a_user_address; __userptr; })
-
 /*
  * The fs value determines whether argument validity checking should be
  * performed or not.  If get_fs() == USER_DS, checking is performed, with
@@ -120,7 +116,7 @@ extern long __put_user_bad(void);
 #define __put_user_nocheck(x,ptr,size)                         \
 ({                                                             \
        long __pu_err;                                          \
-       check_user_ptr(ptr);                                    \
+       __chk_user_ptr(ptr);                                    \
        __put_user_size((x),(ptr),(size),__pu_err,-EFAULT);     \
        __pu_err;                                               \
 })
@@ -192,7 +188,7 @@ extern long __get_user_bad(void);
 do {                                                                   \
        might_sleep();                                                  \
        retval = 0;                                                     \
-       check_user_ptr(ptr);                                            \
+       __chk_user_ptr(ptr);                                            \
        switch (size) {                                                 \
          case 1: __get_user_asm(x,ptr,retval,"lbz",errret); break;     \
          case 2: __get_user_asm(x,ptr,retval,"lhz",errret); break;     \
index bc2520e..5ecbcbc 100644 (file)
@@ -45,7 +45,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        { INR_OPEN, INR_OPEN },                         \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index ca4afdd..dd57b3f 100644 (file)
@@ -93,9 +93,10 @@ typedef u64 sector_t;
 #define HAVE_SECTOR_T
 #endif
 
+#endif /* ! __s390x__   */
+
 typedef unsigned int kmem_bufctl_t;
 
-#endif /* ! __s390x__   */
 #endif /* __ASSEMBLY__  */
 #endif /* __KERNEL__    */
 #endif /* _S390_TYPES_H */
index c88ba76..7758b3e 100644 (file)
@@ -22,6 +22,8 @@
 #define MAX_HWIFS      2
 #endif
 
+#define IDE_ARCH_OBSOLETE_DEFAULTS
+
 static inline int ide_default_irq_hp600(unsigned long base)
 {
        switch (base) {
index 574b644..42faf5b 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE,     PAGE_SIZE     },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
        { RLIM_INFINITY, RLIM_INFINITY },               \
 }
index 6e8468f..64d8103 100644 (file)
 #undef  MAX_HWIFS
 #define MAX_HWIFS      2
 
-static __inline__ int ide_default_irq(unsigned long base)
-{
-       return 0;
-}
-
-static __inline__ unsigned long ide_default_io_base(int index)
-{
-       return 0;
-}
-
 #define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
-#define ide_init_default_irq(base)     (0)
-
 #define __ide_insl(data_reg, buffer, wcount) \
        __ide_insw(data_reg, buffer, (wcount)<<1)
 #define __ide_outsl(data_reg, buffer, wcount) \
index 8237763..b6a5aca 100644 (file)
@@ -42,7 +42,7 @@
     {       0, RLIM_INFINITY},         \
     {RLIM_INFINITY, RLIM_INFINITY},    \
     {INR_OPEN, INR_OPEN}, {0, 0},      \
-    {RLIM_INFINITY, RLIM_INFINITY},    \
+    {PAGE_SIZE, PAGE_SIZE},    \
     {RLIM_INFINITY, RLIM_INFINITY},    \
     {RLIM_INFINITY, RLIM_INFINITY}     \
 }
index 2fb2291..4072875 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef _SPARC_SBUS_H
 #define _SPARC_SBUS_H
 
+#include <linux/dma-mapping.h>
 #include <linux/ioport.h>
 
 #include <asm/oplib.h>
@@ -106,10 +107,10 @@ extern void sbus_set_sbus64(struct sbus_dev *, int);
 extern void *sbus_alloc_consistent(struct sbus_dev *, long, u32 *dma_addrp);
 extern void sbus_free_consistent(struct sbus_dev *, long, void *, u32);
 
-#define SBUS_DMA_BIDIRECTIONAL 0
-#define SBUS_DMA_TODEVICE      1
-#define SBUS_DMA_FROMDEVICE    2
-#define        SBUS_DMA_NONE           3
+#define SBUS_DMA_BIDIRECTIONAL DMA_BIDIRECTIONAL
+#define SBUS_DMA_TODEVICE      DMA_TO_DEVICE
+#define SBUS_DMA_FROMDEVICE    DMA_FROM_DEVICE
+#define        SBUS_DMA_NONE           DMA_NONE
 
 /* All the rest use streaming mode mappings. */
 extern dma_addr_t sbus_map_single(struct sbus_dev *, void *, size_t, int);
index 9d1b75c..8ef47f1 100644 (file)
@@ -83,10 +83,6 @@ extern unsigned long search_extables_range(unsigned long addr, unsigned long *g2
 
 extern void __ret_efault(void);
 
-extern long not_a_user_address;
-#define check_user_ptr(x) \
-       (void) ({ void __user * __userptr = (__typeof__(*(x)) *)&not_a_user_address; __userptr; })
-
 /* Uh, these should become the main single-value transfer routines..
  * They automatically use the right size if we just have the right
  * pointer type..
@@ -98,12 +94,12 @@ extern long not_a_user_address;
  */
 #define put_user(x,ptr) ({ \
 unsigned long __pu_addr = (unsigned long)(ptr); \
-check_user_ptr(ptr); \
+__chk_user_ptr(ptr); \
 __put_user_check((__typeof__(*(ptr)))(x),__pu_addr,sizeof(*(ptr))); })
 
 #define get_user(x,ptr) ({ \
 unsigned long __gu_addr = (unsigned long)(ptr); \
-check_user_ptr(ptr); \
+__chk_user_ptr(ptr); \
 __get_user_check((x),__gu_addr,sizeof(*(ptr)),__typeof__(*(ptr))); })
 
 /*
index f4e6201..f850b61 100644 (file)
 # endif
 #endif
 
-static __inline__ int ide_default_irq(unsigned long base)
-{
-       return 0;
-}
-
-static __inline__ unsigned long ide_default_io_base(int index)
-{
-       return 0;
-}
-
 #define IDE_ARCH_OBSOLETE_INIT
 #define ide_default_io_ctl(base)       ((base) + 0x206) /* obsolete */
 
-#define ide_init_default_irq(base)     (0)
-
 #define __ide_insl(data_reg, buffer, wcount) \
        __ide_insw(data_reg, buffer, (wcount)<<1)
 #define __ide_outsl(data_reg, buffer, wcount) \
index 06150c0..0ae54dc 100644 (file)
@@ -41,7 +41,7 @@
     {       0, RLIM_INFINITY},         \
     {RLIM_INFINITY, RLIM_INFINITY},    \
     {INR_OPEN, INR_OPEN}, {0, 0},      \
-    {RLIM_INFINITY, RLIM_INFINITY},    \
+    {PAGE_SIZE,     PAGE_SIZE    },    \
     {RLIM_INFINITY, RLIM_INFINITY},    \
     {RLIM_INFINITY, RLIM_INFINITY}     \
 }
index 2d669b1..48279e1 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef _SPARC64_SBUS_H
 #define _SPARC64_SBUS_H
 
+#include <linux/dma-mapping.h>
 #include <linux/ioport.h>
 
 #include <asm/oplib.h>
@@ -99,10 +100,10 @@ extern void sbus_set_sbus64(struct sbus_dev *, int);
 extern void *sbus_alloc_consistent(struct sbus_dev *, size_t, dma_addr_t *dma_addrp);
 extern void sbus_free_consistent(struct sbus_dev *, size_t, void *, dma_addr_t);
 
-#define SBUS_DMA_BIDIRECTIONAL 0
-#define SBUS_DMA_TODEVICE      1
-#define SBUS_DMA_FROMDEVICE    2
-#define        SBUS_DMA_NONE           3
+#define SBUS_DMA_BIDIRECTIONAL DMA_BIDIRECTIONAL
+#define SBUS_DMA_TODEVICE      DMA_TO_DEVICE
+#define SBUS_DMA_FROMDEVICE    DMA_FROM_DEVICE
+#define        SBUS_DMA_NONE           DMA_NONE
 
 /* All the rest use streaming mode mappings. */
 extern dma_addr_t sbus_map_single(struct sbus_dev *, void *, size_t, int);
index 680391d..e1ce87c 100644 (file)
@@ -90,10 +90,6 @@ unsigned long search_extables_range(unsigned long addr, unsigned long *g2);
 
 extern void __ret_efault(void);
 
-extern long not_a_user_address;
-#define check_user_ptr(x) \
-       (void) ({ void __user * __userptr = (__typeof__(*(x)) *)&not_a_user_address; __userptr; })
-
 /* Uh, these should become the main single-value transfer routines..
  * They automatically use the right size if we just have the right
  * pointer type..
@@ -105,12 +101,12 @@ extern long not_a_user_address;
  */
 #define put_user(x,ptr) ({ \
 unsigned long __pu_addr = (unsigned long)(ptr); \
-check_user_ptr(ptr); \
+__chk_user_ptr(ptr); \
 __put_user_nocheck((__typeof__(*(ptr)))(x),__pu_addr,sizeof(*(ptr))); })
 
 #define get_user(x,ptr) ({ \
 unsigned long __gu_addr = (unsigned long)(ptr); \
-check_user_ptr(ptr); \
+__chk_user_ptr(ptr); \
 __get_user_nocheck((x),__gu_addr,sizeof(*(ptr)),__typeof__(*(ptr))); })
 
 #define __put_user(x,ptr) put_user(x,ptr)
index e907d84..0a06763 100644 (file)
@@ -446,7 +446,6 @@ static __inline__ _syscall1(int,dup,int,fd)
 static __inline__ _syscall3(int,execve,__const__ char *,file,char **,argv,char **,envp)
 static __inline__ _syscall3(int,open,__const__ char *,file,int,flag,int,mode)
 static __inline__ _syscall1(int,close,int,fd)
-static __inline__ _syscall1(int,_exit,int,exitcode)
 static __inline__ _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 
 #include <linux/linkage.h>
index 6f59c85..0203d2e 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE, PAGE_SIZE  },              \
        { RLIM_INFINITY, RLIM_INFINITY },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
 }
index c91f028..ae42bca 100644 (file)
@@ -337,15 +337,16 @@ static __inline__ int find_first_bit(const unsigned long * addr, unsigned size)
                "repe; scasl\n\t"
                "jz 1f\n\t"
                "leaq -4(%%rdi),%%rdi\n\t"
-               "bsfl (%%rdi),%%eax\n"
-               "1:\tsubq %%rbx,%%rdi\n\t"
+               "bsfq (%%rdi),%%rax\n"
+               "1:\tsubl %%ebx,%%edi\n\t"
                "shll $3,%%edi\n\t"
                "addl %%edi,%%eax"
                :"=a" (res), "=&c" (d0), "=&D" (d1)
-               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr) : "memory");
+               :"1" ((size + 31) >> 5), "2" (addr), "b" (addr));
        return res;
 }
 
+
 /**
  * find_next_bit - find the first set bit in a memory region
  * @addr: The address to base the search on
index abcabbc..3718a8f 100644 (file)
@@ -139,9 +139,9 @@ extern unsigned long csum_partial_copy_generic(const char *src, const char *dst,
                                               int *src_err_ptr, int *dst_err_ptr);
 
 
-extern unsigned int csum_partial_copy_from_user(const char __user *src, char *dst, 
+extern unsigned int csum_partial_copy_from_user(const char *src, char *dst, 
                                       int len, unsigned int isum, int *errp);
-extern unsigned int csum_partial_copy_to_user(const char *src, char __user *dst, 
+extern unsigned int csum_partial_copy_to_user(const char *src, char *dst, 
                                      int len, unsigned int isum, int *errp);
 extern unsigned int csum_partial_copy_nocheck(const char *src, char *dst, int len, 
                                              unsigned int sum);
index c1e04aa..c4f5209 100644 (file)
@@ -186,15 +186,15 @@ struct compat_shmid64_ds {
  */
 typedef        u32             compat_uptr_t;
 
-static inline void __user *compat_ptr(compat_uptr_t uptr)
+static inline void *compat_ptr(compat_uptr_t uptr)
 {
-       return (void __user *)(unsigned long)uptr;
+       return (void *)(unsigned long)uptr;
 }
 
-static __inline__ void __user *compat_alloc_user_space(long len)
+static __inline__ void *compat_alloc_user_space(long len)
 {
        struct pt_regs *regs = (void *)current->thread.rsp0 - sizeof(struct pt_regs); 
-       return (void __user *)regs->rsp - len; 
+       return (void *)regs->rsp - len; 
 }
 
 #endif /* _ASM_X86_64_COMPAT_H */
index bca9b28..2f2df23 100644 (file)
@@ -170,7 +170,7 @@ static unsigned long vdma_mem_alloc(unsigned long size)
 static void _fd_dma_mem_free(unsigned long addr, unsigned long size)
 {
        if((unsigned long) addr >= (unsigned long) high_memory)
-               vfree((void *)addr);
+               return vfree((void *)addr);
        else
                free_pages(addr, get_order(size));              
 }
index 4153db5..244ffe2 100644 (file)
@@ -3,8 +3,8 @@
 
 struct _fpstate_ia32;
 
-int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, int fsave);
-int save_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 __user *buf, 
+int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 *buf, int fsave);
+int save_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 *buf, 
                   struct pt_regs *regs, int fsave);
 
 #endif
index 0518b4d..bb5edc3 100644 (file)
@@ -23,7 +23,7 @@ extern void fpu_init(void);
 extern unsigned int mxcsr_feature_mask;
 extern void mxcsr_feature_mask_init(void);
 extern void init_fpu(struct task_struct *child);
-extern int save_i387(struct _fpstate __user *buf);
+extern int save_i387(struct _fpstate *buf);
 
 static inline int need_signal_i387(struct task_struct *me) 
 { 
@@ -57,10 +57,10 @@ static inline int need_signal_i387(struct task_struct *me)
 /*
  * ptrace request handers...
  */
-extern int get_fpregs(struct user_i387_struct __user *buf,
+extern int get_fpregs(struct user_i387_struct *buf,
                      struct task_struct *tsk);
 extern int set_fpregs(struct task_struct *tsk,
-                     struct user_i387_struct __user *buf);
+                     struct user_i387_struct *buf);
 
 /*
  * i387 state interaction
@@ -93,7 +93,7 @@ static inline int restore_fpu_checking(struct i387_fxsave_struct *fx)
        return err;
 } 
 
-static inline int save_i387_checking(struct i387_fxsave_struct __user *fx) 
+static inline int save_i387_checking(struct i387_fxsave_struct *fx) 
 { 
        int err;
        asm volatile("1:  rex64 ; fxsave (%[fx])\n\t"
@@ -136,7 +136,7 @@ static inline void save_init_fpu( struct task_struct *tsk )
 /* 
  * This restores directly out of user space. Exceptions are handled.
  */
-static inline int restore_i387(struct _fpstate __user *buf)
+static inline int restore_i387(struct _fpstate *buf)
 {
        return restore_fpu_checking((struct i387_fxsave_struct *)buf);
 }
index a680d03..b29899e 100644 (file)
@@ -168,8 +168,8 @@ struct ustat32 {
 #ifdef __KERNEL__
 struct user_desc;
 struct siginfo_t;
-int do_get_thread_area(struct thread_struct *t, struct user_desc __user *info);
-int do_set_thread_area(struct thread_struct *t, struct user_desc __user *info);
+int do_get_thread_area(struct thread_struct *t, struct user_desc *u_info);
+int do_set_thread_area(struct thread_struct *t, struct user_desc *u_info);
 int ia32_child_tls(struct task_struct *p, struct pt_regs *childregs);
 int ia32_copy_siginfo_from_user(siginfo_t *to, siginfo_t32 __user *from);
 int ia32_copy_siginfo_to_user(siginfo_t32 __user *to, siginfo_t *from);
index ff0309c..5facf56 100644 (file)
 #define __NR_ia32_mq_timedreceive      (__NR_ia32_mq_open+3)
 #define __NR_ia32_mq_notify            (__NR_ia32_mq_open+4)
 #define __NR_ia32_mq_getsetattr        (__NR_ia32_mq_open+5)
-#define __NR_ia32_kexec                283
 
-#define IA32_NR_syscalls 287   /* must be > than biggest syscall! */
+#define IA32_NR_syscalls 285   /* must be > than biggest syscall! */
 
 #endif /* _ASM_X86_64_IA32_UNISTD_H_ */
index 1ddce4b..b0ce61d 100644 (file)
@@ -195,13 +195,8 @@ extern void iounmap(void *addr);
 #define __raw_writel writel
 #define __raw_writeq writeq
 
-void *__memcpy_fromio(void*,unsigned long,unsigned);
-void *__memcpy_toio(unsigned long,const void*,unsigned);
-
-#define memcpy_fromio(to,from,len) \
-  __memcpy_fromio((to),(unsigned long)(from),(len))
-#define memcpy_toio(to,from,len) \
-  __memcpy_toio((unsigned long)(to),(from),(len))
+void *memcpy_fromio(void*,const void*,unsigned); 
+void *memcpy_toio(void*,const void*,unsigned); 
 #define memset_io(a,b,c)       memset((void *)(a),(b),(c))
 
 /*
index 3816619..8f0b0f3 100644 (file)
@@ -65,26 +65,21 @@ extern unsigned long vm_stack_flags, vm_stack_flags32;
 extern unsigned long vm_data_default_flags, vm_data_default_flags32;
 extern unsigned long vm_force_exec32;
 
-#define __START_KERNEL         0xffffffff80100000UL
-#define __START_KERNEL_map     0xffffffff80000000UL
-#define __PAGE_OFFSET           0x0000010000000000UL   /* 1 << 40 */
-
-#else
-#define __START_KERNEL         0xffffffff80100000
-#define __START_KERNEL_map     0xffffffff80000000
-#define __PAGE_OFFSET           0x0000010000000000     /* 1 << 40 */
 #endif /* !__ASSEMBLY__ */
 
 /* to align the pointer to the (next) page boundary */
 #define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)
 
 /* See Documentation/x86_64/mm.txt for a description of the memory map. */
+#define __START_KERNEL         0xffffffff80100000
+#define __START_KERNEL_map     0xffffffff80000000
+#define __PAGE_OFFSET           0x0000010000000000     /* 1 << 40 */
 #define __PHYSICAL_MASK_SHIFT  40
 #define __PHYSICAL_MASK                ((1UL << __PHYSICAL_MASK_SHIFT) - 1)
 #define __VIRTUAL_MASK_SHIFT   48
 #define __VIRTUAL_MASK         ((1UL << __VIRTUAL_MASK_SHIFT) - 1)
 
-#define KERNEL_TEXT_SIZE  (10UL*1024*1024)
+#define KERNEL_TEXT_SIZE  (40UL*1024*1024)
 #define KERNEL_TEXT_START 0xffffffff80000000UL 
 
 #ifndef __ASSEMBLY__
index 37ebbad..5555b9c 100644 (file)
@@ -124,13 +124,13 @@ static inline void set_pml4(pml4_t *dst, pml4_t val)
 
 
 #ifndef __ASSEMBLY__
-#define VMALLOC_START    0xffffff0000000000UL
-#define VMALLOC_END      0xffffff7fffffffffUL
-#define MODULES_VADDR    0xffffffffa0000000UL
-#define MODULES_END      0xffffffffafffffffUL
+#define VMALLOC_START    0xffffff0000000000
+#define VMALLOC_END      0xffffff7fffffffff
+#define MODULES_VADDR    0xffffffffa0000000
+#define MODULES_END      0xffffffffafffffff
 #define MODULES_LEN   (MODULES_END - MODULES_VADDR)
 
-#define IOMAP_START      0xfffffe8000000000UL
+#define IOMAP_START      0xfffffe8000000000
 
 #define _PAGE_BIT_PRESENT      0
 #define _PAGE_BIT_RW           1
@@ -172,7 +172,7 @@ static inline void set_pml4(pml4_t *dst, pml4_t val)
 #define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED)
 #define __PAGE_KERNEL \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_NX)
-#define __PAGE_KERNEL_EXECUTABLE \
+#define __PAGE_KERNEL_EXEC \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
 #define __PAGE_KERNEL_NOCACHE \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_PCD | _PAGE_ACCESSED | _PAGE_NX)
@@ -188,7 +188,7 @@ static inline void set_pml4(pml4_t *dst, pml4_t val)
 #define MAKE_GLOBAL(x) __pgprot((x) | _PAGE_GLOBAL)
 
 #define PAGE_KERNEL MAKE_GLOBAL(__PAGE_KERNEL)
-#define PAGE_KERNEL_EXECUTABLE MAKE_GLOBAL(__PAGE_KERNEL_EXECUTABLE)
+#define PAGE_KERNEL_EXEC MAKE_GLOBAL(__PAGE_KERNEL_EXEC)
 #define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)
 #define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)
 #define PAGE_KERNEL_VSYSCALL MAKE_GLOBAL(__PAGE_KERNEL_VSYSCALL)
@@ -383,20 +383,6 @@ extern inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 
 #define update_mmu_cache(vma,address,pte) do { } while (0)
 
-/* We only update the dirty/accessed state if we set
- * the dirty bit by hand in the kernel, since the hardware
- * will do the accessed bit for us, and we don't want to
- * race with other CPU's that might be updating the dirty
- * bit at the same time. */
-#define  __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
-#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
-       do {                                                              \
-               if (__dirty) {                                            \
-                       set_pte(__ptep, __entry);                         \
-                       flush_tlb_page(__vma, __address);                 \
-               }                                                         \
-       } while (0)
-
 /* Encode and de-code a swap entry */
 #define __swp_type(x)                  (((x).val >> 1) & 0x3f)
 #define __swp_offset(x)                        ((x).val >> 8)
index ec696b2..7a253a8 100644 (file)
@@ -166,7 +166,7 @@ static inline void clear_in_cr4 (unsigned long mask)
 /*
  * User space process size: 512GB - 1GB (default).
  */
-#define TASK_SIZE      (0x0000007fc0000000UL)
+#define TASK_SIZE      (0x0000007fc0000000)
 
 /* This decides where the kernel will search for a free chunk of vm
  * space during mmap's.
index cbc19a7..3c5c3a4 100644 (file)
@@ -83,7 +83,7 @@ struct pt_regs {
 #if defined(__KERNEL__) && !defined(__ASSEMBLY__) 
 #define user_mode(regs) (!!((regs)->cs & 3))
 #define instruction_pointer(regs) ((regs)->rip)
-void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
+void signal_fault(struct pt_regs *regs, void *frame, char *where);
 
 enum {
         EF_CF   = 0x00000001,
index b430c85..f88aee8 100644 (file)
@@ -37,7 +37,7 @@
        { RLIM_INFINITY, RLIM_INFINITY },               \
        {             0,             0 },               \
        {      INR_OPEN,     INR_OPEN  },               \
-       { RLIM_INFINITY, RLIM_INFINITY },               \
+       { PAGE_SIZE , PAGE_SIZE  },             \
        { RLIM_INFINITY, RLIM_INFINITY },               \
         { RLIM_INFINITY, RLIM_INFINITY },              \
 }
index 2788834..5fe2548 100644 (file)
@@ -47,12 +47,12 @@ struct semaphore {
        atomic_t count;
        int sleepers;
        wait_queue_head_t wait;
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        long __magic;
 #endif
 };
 
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
 # define __SEM_DEBUG_INIT(name) \
                , (int)&(name).__magic
 #else
@@ -83,7 +83,7 @@ static inline void sema_init (struct semaphore *sem, int val)
        atomic_set(&sem->count, val);
        sem->sleepers = 0;
        init_waitqueue_head(&sem->wait);
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        sem->__magic = (int)&sem->__magic;
 #endif
 }
@@ -115,7 +115,7 @@ asmlinkage void __up(struct semaphore * sem);
  */
 static inline void down(struct semaphore * sem)
 {
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
        might_sleep();
@@ -142,7 +142,7 @@ static inline int down_interruptible(struct semaphore * sem)
 {
        int result;
 
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
        might_sleep();
@@ -171,7 +171,7 @@ static inline int down_trylock(struct semaphore * sem)
 {
        int result;
 
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
 
@@ -199,7 +199,7 @@ static inline int down_trylock(struct semaphore * sem)
  */
 static inline void up(struct semaphore * sem)
 {
-#ifdef WAITQUEUE_DEBUG
+#if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
        __asm__ __volatile__(
index b4e4023..6a62408 100644 (file)
@@ -2,7 +2,6 @@
 #define _ASM_X86_64_SIGCONTEXT_H
 
 #include <asm/types.h>
-#include <linux/compiler.h>
 
 /* FXSAVE frame */
 /* Note: reserved1/2 may someday contain valuable data. Always save/restore
@@ -48,7 +47,7 @@ struct sigcontext {
        unsigned long trapno;
        unsigned long oldmask;
        unsigned long cr2;
-       struct _fpstate __user *fpstate;        /* zero when no FPU context */
+       struct _fpstate *fpstate;       /* zero when no FPU context */
        unsigned long reserved1[8];
 };
 
index 779c742..9b4c018 100644 (file)
@@ -24,7 +24,7 @@
 
 #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
 
-#define KERNEL_DS      MAKE_MM_SEG(0xFFFFFFFFFFFFFFFFUL)
+#define KERNEL_DS      MAKE_MM_SEG(0xFFFFFFFFFFFFFFFF)
 #define USER_DS                MAKE_MM_SEG(PAGE_OFFSET)
 
 #define get_ds()       (KERNEL_DS)
 
 #define segment_eq(a,b)        ((a).seg == (b).seg)
 
-#ifdef __CHECKER__
-#define CHECK_UPTR(ptr) do {                           \
-       __typeof__(*(ptr)) *__dummy_check_uptr =        \
-               (void __user *)&__dummy_check_uptr;     \
-} while(0)
-#else
-#define CHECK_UPTR(ptr)
-#endif
-
-
 #define __addr_ok(addr) (!((unsigned long)(addr) & (current_thread_info()->addr_limit.seg)))
 
 /*
  */
 #define __range_not_ok(addr,size) ({ \
        unsigned long flag,sum; \
-       CHECK_UPTR(addr);       \
        asm("# range_ok\n\r" \
                "addq %3,%1 ; sbbq %0,%0 ; cmpq %1,%4 ; sbbq $0,%0"  \
                :"=&r" (flag), "=r" (sum) \
                :"1" (addr),"g" ((long)(size)),"g" (current_thread_info()->addr_limit.seg)); \
        flag; })
 
-#define access_ok(type, addr, size) (__range_not_ok(addr,size) == 0)
+#define access_ok(type,addr,size) (__range_not_ok(addr,size) == 0)
 
-extern inline int verify_area(int type, const void __user * addr, unsigned long size)
+extern inline int verify_area(int type, const void * addr, unsigned long size)
 {
        return access_ok(type,addr,size) ? 0 : -EFAULT;
 }
@@ -114,7 +103,6 @@ extern void __get_user_8(void);
 #define get_user(x,ptr)                                                        \
 ({     long __val_gu;                                                  \
        int __ret_gu;                                                   \
-       CHECK_UPTR(ptr);                                                \
        switch(sizeof (*(ptr))) {                                       \
        case 1:  __get_user_x(1,__ret_gu,__val_gu,ptr); break;          \
        case 2:  __get_user_x(2,__ret_gu,__val_gu,ptr); break;          \
@@ -150,7 +138,6 @@ extern void __put_user_bad(void);
 #define __put_user_nocheck(x,ptr,size)                 \
 ({                                                     \
        int __pu_err;                                   \
-       CHECK_UPTR(ptr);                                \
        __put_user_size((x),(ptr),(size),__pu_err);     \
        __pu_err;                                       \
 })
@@ -206,7 +193,6 @@ struct __large_struct { unsigned long buf[100]; };
 ({                                                             \
        int __gu_err;                                           \
        long __gu_val;                                          \
-       CHECK_UPTR(ptr);                                        \
        __get_user_size(__gu_val,(ptr),(size),__gu_err);        \
        (x) = (__typeof__(*(ptr)))__gu_val;                     \
        __gu_err;                                               \
@@ -249,15 +235,15 @@ do {                                                                      \
 /* Handles exceptions in both to and from, but doesn't do access_ok */
 extern unsigned long copy_user_generic(void *to, const void *from, unsigned len); 
 
-extern unsigned long copy_to_user(void __user *to, const void *from, unsigned len); 
-extern unsigned long copy_from_user(void *to, const void __user *from, unsigned len); 
-extern unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len); 
+extern unsigned long copy_to_user(void *to, const void *from, unsigned len); 
+extern unsigned long copy_from_user(void *to, const void *from, unsigned len); 
+extern unsigned long copy_in_user(void *to, const void *from, unsigned len); 
 
-static inline int __copy_from_user(void *dst, const void __user *src, unsigned size) 
+static inline int __copy_from_user(void *dst, const void *src, unsigned size) 
 { 
        int ret = 0;
        if (!__builtin_constant_p(size))
-               return copy_user_generic(dst,(void *)src,size);
+               return copy_user_generic(dst,src,size);
        switch (size) { 
        case 1:__get_user_asm(*(u8*)dst,(u8 *)src,ret,"b","b","=q",1); 
                return ret;
@@ -278,15 +264,15 @@ static inline int __copy_from_user(void *dst, const void __user *src, unsigned s
                __get_user_asm(*(u64*)(8+(char*)dst),(u64*)(8+(char*)src),ret,"q","","=r",8);
                return ret; 
        default:
-               return copy_user_generic(dst,(void *)src,size); 
+               return copy_user_generic(dst,src,size); 
        }
 }      
 
-static inline int __copy_to_user(void __user *dst, const void *src, unsigned size) 
+static inline int __copy_to_user(void *dst, const void *src, unsigned size) 
 { 
        int ret = 0;
        if (!__builtin_constant_p(size))
-               return copy_user_generic((void *)dst,src,size);
+               return copy_user_generic(dst,src,size);
        switch (size) { 
        case 1:__put_user_asm(*(u8*)src,(u8 *)dst,ret,"b","b","iq",1); 
                return ret;
@@ -309,16 +295,16 @@ static inline int __copy_to_user(void __user *dst, const void *src, unsigned siz
                __put_user_asm(1[(u64*)src],1+(u64*)dst,ret,"q","","ir",8);
                return ret; 
        default:
-               return copy_user_generic((void *)dst,src,size); 
+               return copy_user_generic(dst,src,size); 
        }
 }      
 
 
-static inline int __copy_in_user(void __user *dst, const void __user *src, unsigned size) 
+static inline int __copy_in_user(void *dst, const void *src, unsigned size) 
 { 
        int ret = 0;
        if (!__builtin_constant_p(size))
-               return copy_user_generic((void *)dst,(void *)src,size);
+               return copy_user_generic(dst,src,size);
        switch (size) { 
        case 1: { 
                u8 tmp;
@@ -350,15 +336,15 @@ static inline int __copy_in_user(void __user *dst, const void __user *src, unsig
                return ret;
        }
        default:
-               return copy_user_generic((void *)dst,(void *)src,size); 
+               return copy_user_generic(dst,src,size); 
        }
 }      
 
-long strncpy_from_user(char *dst, const char __user *src, long count);
-long __strncpy_from_user(char *dst, const char __user *src, long count);
-long strnlen_user(const char __user *str, long n);
-long strlen_user(const char __user *str);
-unsigned long clear_user(void __user *mem, unsigned long len);
-unsigned long __clear_user(void __user *mem, unsigned long len);
+long strncpy_from_user(char *dst, const char *src, long count);
+long __strncpy_from_user(char *dst, const char *src, long count);
+long strnlen_user(const char *str, long n);
+long strlen_user(const char *str);
+unsigned long clear_user(void *mem, unsigned long len);
+unsigned long __clear_user(void *mem, unsigned long len);
 
 #endif /* __X86_64_UACCESS_H */
index 6e88c87..b03ebea 100644 (file)
@@ -149,11 +149,11 @@ struct mm_struct;
 extern void FASTCALL(exit_aio(struct mm_struct *mm));
 extern struct kioctx *lookup_ioctx(unsigned long ctx_id);
 extern int FASTCALL(io_submit_one(struct kioctx *ctx,
-                       struct iocb __user *user_iocb, struct iocb *iocb));
+                       struct iocb *user_iocb, struct iocb *iocb));
 
 /* semi private, but used by the 32bit emulations: */
 struct kioctx *lookup_ioctx(unsigned long ctx_id);
-int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
+int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb *user_iocb,
                                  struct iocb *iocb));
 
 #define get_ioctx(kioctx)      do { if (unlikely(atomic_read(&(kioctx)->users) <= 0)) BUG(); atomic_inc(&(kioctx)->users); } while (0)
diff --git a/include/linux/autoconf.h b/include/linux/autoconf.h
deleted file mode 100644 (file)
index c480636..0000000
+++ /dev/null
@@ -1,2361 +0,0 @@
-/*
- * Automatically generated C config: don't edit
- */
-#define AUTOCONF_INCLUDED
-#define CONFIG_X86 1
-#define CONFIG_MMU 1
-#define CONFIG_UID16 1
-#define CONFIG_GENERIC_ISA_DMA 1
-
-/*
- * Code maturity level options
- */
-#define CONFIG_EXPERIMENTAL 1
-#define CONFIG_CLEAN_COMPILE 1
-#define CONFIG_STANDALONE 1
-
-/*
- * General setup
- */
-#define CONFIG_SWAP 1
-#define CONFIG_SYSVIPC 1
-#define CONFIG_POSIX_MQUEUE 1
-#define CONFIG_BSD_PROCESS_ACCT 1
-#define CONFIG_SYSCTL 1
-#undef CONFIG_AUDIT
-#define CONFIG_LOG_BUF_SHIFT 17
-#define CONFIG_HOTPLUG 1
-#undef CONFIG_IKCONFIG
-#undef CONFIG_EMBEDDED
-#define CONFIG_KALLSYMS 1
-#undef CONFIG_KALLSYMS_ALL
-#define CONFIG_FUTEX 1
-#define CONFIG_EPOLL 1
-#define CONFIG_IOSCHED_NOOP 1
-#define CONFIG_IOSCHED_AS 1
-#define CONFIG_IOSCHED_DEADLINE 1
-#define CONFIG_IOSCHED_CFQ 1
-#define CONFIG_CC_OPTIMIZE_FOR_SIZE 1
-
-/*
- * Loadable module support
- */
-#define CONFIG_MODULES 1
-#define CONFIG_MODULE_UNLOAD 1
-#undef CONFIG_MODULE_FORCE_UNLOAD
-#define CONFIG_OBSOLETE_MODPARM 1
-#undef CONFIG_MODVERSIONS
-#define CONFIG_KMOD 1
-#define CONFIG_STOP_MACHINE 1
-
-/*
- * Processor type and features
- */
-#undef CONFIG_X86_PC
-#undef CONFIG_X86_ELAN
-#undef CONFIG_X86_VOYAGER
-#undef CONFIG_X86_NUMAQ
-#undef CONFIG_X86_SUMMIT
-#undef CONFIG_X86_BIGSMP
-#undef CONFIG_X86_VISWS
-#define CONFIG_X86_GENERICARCH 1
-#undef CONFIG_X86_ES7000
-#define CONFIG_X86_CYCLONE_TIMER 1
-#undef CONFIG_M386
-#undef CONFIG_M486
-#undef CONFIG_M586
-#undef CONFIG_M586TSC
-#undef CONFIG_M586MMX
-#define CONFIG_M686 1
-#undef CONFIG_MPENTIUMII
-#undef CONFIG_MPENTIUMIII
-#undef CONFIG_MPENTIUMM
-#undef CONFIG_MPENTIUM4
-#undef CONFIG_MK6
-#undef CONFIG_MK7
-#undef CONFIG_MK8
-#undef CONFIG_MCRUSOE
-#undef CONFIG_MWINCHIPC6
-#undef CONFIG_MWINCHIP2
-#undef CONFIG_MWINCHIP3D
-#undef CONFIG_MCYRIXIII
-#undef CONFIG_MVIAC3_2
-#define CONFIG_X86_GENERIC 1
-#define CONFIG_X86_CMPXCHG 1
-#define CONFIG_X86_XADD 1
-#define CONFIG_X86_L1_CACHE_SHIFT 7
-#define CONFIG_RWSEM_XCHGADD_ALGORITHM 1
-#define CONFIG_X86_PPRO_FENCE 1
-#define CONFIG_X86_WP_WORKS_OK 1
-#define CONFIG_X86_INVLPG 1
-#define CONFIG_X86_BSWAP 1
-#define CONFIG_X86_POPAD_OK 1
-#define CONFIG_X86_GOOD_APIC 1
-#define CONFIG_X86_INTEL_USERCOPY 1
-#define CONFIG_X86_USE_PPRO_CHECKSUM 1
-#define CONFIG_X86_4G 1
-#define CONFIG_X86_SWITCH_PAGETABLES 1
-#define CONFIG_X86_4G_VM_LAYOUT 1
-#define CONFIG_X86_UACCESS_INDIRECT 1
-#define CONFIG_X86_HIGH_ENTRY 1
-#define CONFIG_HPET_TIMER 1
-#define CONFIG_HPET_EMULATE_RTC 1
-#define CONFIG_SMP 1
-#define CONFIG_NR_CPUS 32
-#define CONFIG_SCHED_SMT 1
-#undef CONFIG_PREEMPT
-#define CONFIG_X86_LOCAL_APIC 1
-#define CONFIG_X86_IO_APIC 1
-#define CONFIG_X86_TSC 1
-#define CONFIG_X86_MCE 1
-#undef CONFIG_X86_MCE_NONFATAL
-#define CONFIG_X86_MCE_P4THERMAL 1
-#define CONFIG_TOSHIBA_MODULE 1
-#define CONFIG_I8K_MODULE 1
-#define CONFIG_MICROCODE_MODULE 1
-#define CONFIG_X86_MSR_MODULE 1
-#define CONFIG_X86_CPUID_MODULE 1
-
-/*
- * Firmware Drivers
- */
-#define CONFIG_EDD_MODULE 1
-#undef CONFIG_NOHIGHMEM
-#undef CONFIG_HIGHMEM4G
-#define CONFIG_HIGHMEM64G 1
-#define CONFIG_HIGHMEM 1
-#define CONFIG_X86_PAE 1
-#undef CONFIG_NUMA
-#define CONFIG_HIGHPTE 1
-#undef CONFIG_MATH_EMULATION
-#define CONFIG_MTRR 1
-#undef CONFIG_EFI
-#undef CONFIG_IRQBALANCE
-#define CONFIG_HAVE_DEC_LOCK 1
-#define CONFIG_REGPARM 1
-
-/*
- * Power management options (ACPI, APM)
- */
-#define CONFIG_PM 1
-#undef CONFIG_SOFTWARE_SUSPEND
-#undef CONFIG_PM_DISK
-
-/*
- * ACPI (Advanced Configuration and Power Interface) Support
- */
-#define CONFIG_ACPI 1
-#define CONFIG_ACPI_BOOT 1
-#define CONFIG_ACPI_INTERPRETER 1
-#define CONFIG_ACPI_SLEEP 1
-#define CONFIG_ACPI_SLEEP_PROC_FS 1
-#define CONFIG_ACPI_AC_MODULE 1
-#define CONFIG_ACPI_BATTERY_MODULE 1
-#define CONFIG_ACPI_BUTTON_MODULE 1
-#define CONFIG_ACPI_FAN 1
-#define CONFIG_ACPI_PROCESSOR 1
-#define CONFIG_ACPI_THERMAL 1
-#define CONFIG_ACPI_ASUS_MODULE 1
-#define CONFIG_ACPI_TOSHIBA_MODULE 1
-#undef CONFIG_ACPI_DEBUG
-#define CONFIG_ACPI_BUS 1
-#define CONFIG_ACPI_EC 1
-#define CONFIG_ACPI_POWER 1
-#define CONFIG_ACPI_PCI 1
-#define CONFIG_ACPI_SYSTEM 1
-#define CONFIG_X86_PM_TIMER 1
-
-/*
- * APM (Advanced Power Management) BIOS Support
- */
-#define CONFIG_APM 1
-#undef CONFIG_APM_IGNORE_USER_SUSPEND
-#undef CONFIG_APM_DO_ENABLE
-#define CONFIG_APM_CPU_IDLE 1
-#undef CONFIG_APM_DISPLAY_BLANK
-#define CONFIG_APM_RTC_IS_GMT 1
-#undef CONFIG_APM_ALLOW_INTS
-#undef CONFIG_APM_REAL_MODE_POWER_OFF
-
-/*
- * CPU Frequency scaling
- */
-#define CONFIG_CPU_FREQ 1
-#undef CONFIG_CPU_FREQ_PROC_INTF
-#undef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
-#define CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE 1
-#define CONFIG_CPU_FREQ_GOV_PERFORMANCE 1
-#define CONFIG_CPU_FREQ_GOV_POWERSAVE_MODULE 1
-#define CONFIG_CPU_FREQ_GOV_USERSPACE 1
-#undef CONFIG_CPU_FREQ_24_API
-#define CONFIG_CPU_FREQ_TABLE 1
-
-/*
- * CPUFreq processor drivers
- */
-#define CONFIG_X86_ACPI_CPUFREQ_MODULE 1
-#undef CONFIG_X86_ACPI_CPUFREQ_PROC_INTF
-#define CONFIG_X86_POWERNOW_K6_MODULE 1
-#define CONFIG_X86_POWERNOW_K7 1
-#define CONFIG_X86_POWERNOW_K8_MODULE 1
-#undef CONFIG_X86_GX_SUSPMOD
-#define CONFIG_X86_SPEEDSTEP_CENTRINO 1
-#define CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE 1
-#define CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI 1
-#define CONFIG_X86_SPEEDSTEP_ICH 1
-#define CONFIG_X86_SPEEDSTEP_SMI_MODULE 1
-#define CONFIG_X86_P4_CLOCKMOD_MODULE 1
-#define CONFIG_X86_SPEEDSTEP_LIB 1
-#undef CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK
-#define CONFIG_X86_LONGRUN 1
-#undef CONFIG_X86_LONGHAUL
-
-/*
- * Bus options (PCI, PCMCIA, EISA, MCA, ISA)
- */
-#define CONFIG_PCI 1
-#undef CONFIG_PCI_GOBIOS
-#undef CONFIG_PCI_GOMMCONFIG
-#undef CONFIG_PCI_GODIRECT
-#define CONFIG_PCI_GOANY 1
-#define CONFIG_PCI_BIOS 1
-#define CONFIG_PCI_DIRECT 1
-#define CONFIG_PCI_MMCONFIG 1
-#define CONFIG_PCI_USE_VECTOR 1
-#define CONFIG_PCI_LEGACY_PROC 1
-#undef CONFIG_PCI_NAMES
-#define CONFIG_ISA 1
-#undef CONFIG_EISA
-#undef CONFIG_MCA
-#undef CONFIG_SCx200
-
-/*
- * PCMCIA/CardBus support
- */
-#define CONFIG_PCMCIA_MODULE 1
-#undef CONFIG_PCMCIA_DEBUG
-#define CONFIG_YENTA_MODULE 1
-#define CONFIG_CARDBUS 1
-#define CONFIG_I82092_MODULE 1
-#define CONFIG_I82365_MODULE 1
-#define CONFIG_TCIC_MODULE 1
-#define CONFIG_PCMCIA_PROBE 1
-
-/*
- * PCI Hotplug Support
- */
-#define CONFIG_HOTPLUG_PCI 1
-#undef CONFIG_HOTPLUG_PCI_FAKE
-#define CONFIG_HOTPLUG_PCI_COMPAQ_MODULE 1
-#undef CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM
-#define CONFIG_HOTPLUG_PCI_IBM_MODULE 1
-#undef CONFIG_HOTPLUG_PCI_ACPI
-#undef CONFIG_HOTPLUG_PCI_CPCI
-#define CONFIG_HOTPLUG_PCI_PCIE_MODULE 1
-#define CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE 1
-#define CONFIG_HOTPLUG_PCI_SHPC_MODULE 1
-#define CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE 1
-
-/*
- * Executable file formats
- */
-#define CONFIG_BINFMT_ELF 1
-#undef CONFIG_BINFMT_AOUT
-#define CONFIG_BINFMT_MISC_MODULE 1
-
-/*
- * Device Drivers
- */
-
-/*
- * Generic Driver Options
- */
-#define CONFIG_FW_LOADER 1
-#undef CONFIG_DEBUG_DRIVER
-
-/*
- * Memory Technology Devices (MTD)
- */
-#define CONFIG_MTD_MODULE 1
-#undef CONFIG_MTD_DEBUG
-#define CONFIG_MTD_PARTITIONS_MODULE 1
-#define CONFIG_MTD_CONCAT_MODULE 1
-#define CONFIG_MTD_REDBOOT_PARTS_MODULE 1
-#define CONFIG_MTD_CMDLINE_PARTS_MODULE 1
-
-/*
- * User Modules And Translation Layers
- */
-#define CONFIG_MTD_CHAR_MODULE 1
-#define CONFIG_MTD_BLOCK_MODULE 1
-#define CONFIG_MTD_BLOCK_RO_MODULE 1
-#define CONFIG_FTL_MODULE 1
-#define CONFIG_NFTL_MODULE 1
-#define CONFIG_NFTL_RW 1
-#define CONFIG_INFTL_MODULE 1
-
-/*
- * RAM/ROM/Flash chip drivers
- */
-#define CONFIG_MTD_CFI_MODULE 1
-#define CONFIG_MTD_JEDECPROBE_MODULE 1
-#define CONFIG_MTD_GEN_PROBE_MODULE 1
-#undef CONFIG_MTD_CFI_ADV_OPTIONS
-#define CONFIG_MTD_CFI_INTELEXT_MODULE 1
-#define CONFIG_MTD_CFI_AMDSTD_MODULE 1
-#define CONFIG_MTD_CFI_STAA_MODULE 1
-#define CONFIG_MTD_RAM_MODULE 1
-#define CONFIG_MTD_ROM_MODULE 1
-#define CONFIG_MTD_ABSENT_MODULE 1
-#undef CONFIG_MTD_OBSOLETE_CHIPS
-
-/*
- * Mapping drivers for chip access
- */
-#define CONFIG_MTD_COMPLEX_MAPPINGS 1
-#undef CONFIG_MTD_PHYSMAP
-#undef CONFIG_MTD_PNC2000
-#define CONFIG_MTD_SC520CDP_MODULE 1
-#define CONFIG_MTD_NETSC520_MODULE 1
-#define CONFIG_MTD_SBC_GXX_MODULE 1
-#define CONFIG_MTD_ELAN_104NC_MODULE 1
-#define CONFIG_MTD_SCx200_DOCFLASH_MODULE 1
-#define CONFIG_MTD_AMD76XROM_MODULE 1
-#define CONFIG_MTD_ICH2ROM_MODULE 1
-#define CONFIG_MTD_SCB2_FLASH_MODULE 1
-#undef CONFIG_MTD_NETtel
-#undef CONFIG_MTD_DILNETPC
-#define CONFIG_MTD_L440GX_MODULE 1
-#define CONFIG_MTD_PCI_MODULE 1
-
-/*
- * Self-contained MTD device drivers
- */
-#define CONFIG_MTD_PMC551_MODULE 1
-#undef CONFIG_MTD_PMC551_BUGFIX
-#undef CONFIG_MTD_PMC551_DEBUG
-#undef CONFIG_MTD_SLRAM
-#define CONFIG_MTD_MTDRAM_MODULE 1
-#define CONFIG_MTDRAM_TOTAL_SIZE 4096
-#define CONFIG_MTDRAM_ERASE_SIZE 128
-#undef CONFIG_MTD_BLKMTD
-
-/*
- * Disk-On-Chip Device Drivers
- */
-#define CONFIG_MTD_DOC2000_MODULE 1
-#undef CONFIG_MTD_DOC2001
-#define CONFIG_MTD_DOC2001PLUS_MODULE 1
-#define CONFIG_MTD_DOCPROBE_MODULE 1
-#undef CONFIG_MTD_DOCPROBE_ADVANCED
-#define CONFIG_MTD_DOCPROBE_ADDRESS 0x0
-
-/*
- * NAND Flash Device Drivers
- */
-#define CONFIG_MTD_NAND_MODULE 1
-#undef CONFIG_MTD_NAND_VERIFY_WRITE
-#define CONFIG_MTD_NAND_IDS_MODULE 1
-
-/*
- * Parallel port support
- */
-#define CONFIG_PARPORT_MODULE 1
-#define CONFIG_PARPORT_PC_MODULE 1
-#define CONFIG_PARPORT_PC_CML1_MODULE 1
-#define CONFIG_PARPORT_SERIAL_MODULE 1
-#undef CONFIG_PARPORT_PC_FIFO
-#undef CONFIG_PARPORT_PC_SUPERIO
-#define CONFIG_PARPORT_PC_PCMCIA_MODULE 1
-#undef CONFIG_PARPORT_OTHER
-#define CONFIG_PARPORT_1284 1
-
-/*
- * Plug and Play support
- */
-#define CONFIG_PNP 1
-#undef CONFIG_PNP_DEBUG
-
-/*
- * Protocols
- */
-#define CONFIG_ISAPNP 1
-#undef CONFIG_PNPBIOS
-
-/*
- * Block devices
- */
-#define CONFIG_BLK_DEV_FD_MODULE 1
-#undef CONFIG_BLK_DEV_XD
-#undef CONFIG_PARIDE
-#define CONFIG_BLK_CPQ_DA_MODULE 1
-#define CONFIG_BLK_CPQ_CISS_DA_MODULE 1
-#define CONFIG_CISS_SCSI_TAPE 1
-#define CONFIG_BLK_DEV_DAC960_MODULE 1
-#define CONFIG_BLK_DEV_UMEM_MODULE 1
-#define CONFIG_BLK_DEV_LOOP_MODULE 1
-#define CONFIG_BLK_DEV_CRYPTOLOOP_MODULE 1
-#define CONFIG_BLK_DEV_NBD_MODULE 1
-#define CONFIG_BLK_DEV_CARMEL_MODULE 1
-#define CONFIG_BLK_DEV_RAM 1
-#define CONFIG_BLK_DEV_RAM_SIZE 16384
-#define CONFIG_BLK_DEV_INITRD 1
-#define CONFIG_LBD 1
-
-/*
- * ATA/ATAPI/MFM/RLL support
- */
-#define CONFIG_IDE 1
-#define CONFIG_BLK_DEV_IDE 1
-
-/*
- * Please see Documentation/ide.txt for help/info on IDE drives
- */
-#undef CONFIG_BLK_DEV_HD_IDE
-#define CONFIG_BLK_DEV_IDEDISK 1
-#define CONFIG_IDEDISK_MULTI_MODE 1
-#undef CONFIG_IDEDISK_STROKE
-#define CONFIG_BLK_DEV_IDECS_MODULE 1
-#define CONFIG_BLK_DEV_IDECD 1
-#define CONFIG_BLK_DEV_IDETAPE_MODULE 1
-#define CONFIG_BLK_DEV_IDEFLOPPY 1
-#undef CONFIG_BLK_DEV_IDESCSI
-#undef CONFIG_IDE_TASK_IOCTL
-#undef CONFIG_IDE_TASKFILE_IO
-
-/*
- * IDE chipset support/bugfixes
- */
-#define CONFIG_IDE_GENERIC 1
-#undef CONFIG_BLK_DEV_CMD640
-#define CONFIG_BLK_DEV_IDEPNP 1
-#define CONFIG_BLK_DEV_IDEPCI 1
-#define CONFIG_IDEPCI_SHARE_IRQ 1
-#undef CONFIG_BLK_DEV_OFFBOARD
-#define CONFIG_BLK_DEV_GENERIC 1
-#undef CONFIG_BLK_DEV_OPTI621
-#define CONFIG_BLK_DEV_RZ1000 1
-#define CONFIG_BLK_DEV_IDEDMA_PCI 1
-#undef CONFIG_BLK_DEV_IDEDMA_FORCED
-#define CONFIG_IDEDMA_PCI_AUTO 1
-#undef CONFIG_IDEDMA_ONLYDISK
-#define CONFIG_BLK_DEV_ADMA 1
-#define CONFIG_BLK_DEV_AEC62XX 1
-#define CONFIG_BLK_DEV_ALI15X3 1
-#undef CONFIG_WDC_ALI15X3
-#define CONFIG_BLK_DEV_AMD74XX 1
-#define CONFIG_BLK_DEV_ATIIXP 1
-#define CONFIG_BLK_DEV_CMD64X 1
-#define CONFIG_BLK_DEV_TRIFLEX 1
-#define CONFIG_BLK_DEV_CY82C693 1
-#define CONFIG_BLK_DEV_CS5520 1
-#define CONFIG_BLK_DEV_CS5530 1
-#define CONFIG_BLK_DEV_HPT34X 1
-#undef CONFIG_HPT34X_AUTODMA
-#define CONFIG_BLK_DEV_HPT366 1
-#undef CONFIG_BLK_DEV_SC1200
-#define CONFIG_BLK_DEV_PIIX 1
-#undef CONFIG_BLK_DEV_NS87415
-#define CONFIG_BLK_DEV_PDC202XX_OLD 1
-#undef CONFIG_PDC202XX_BURST
-#define CONFIG_BLK_DEV_PDC202XX_NEW 1
-#define CONFIG_PDC202XX_FORCE 1
-#define CONFIG_BLK_DEV_SVWKS 1
-#define CONFIG_BLK_DEV_SIIMAGE 1
-#define CONFIG_BLK_DEV_SIS5513 1
-#define CONFIG_BLK_DEV_SLC90E66 1
-#undef CONFIG_BLK_DEV_TRM290
-#define CONFIG_BLK_DEV_VIA82CXXX 1
-#undef CONFIG_IDE_ARM
-#undef CONFIG_IDE_CHIPSETS
-#define CONFIG_BLK_DEV_IDEDMA 1
-#undef CONFIG_IDEDMA_IVB
-#define CONFIG_IDEDMA_AUTO 1
-#undef CONFIG_BLK_DEV_HD
-
-/*
- * SCSI device support
- */
-#define CONFIG_SCSI_MODULE 1
-#define CONFIG_SCSI_PROC_FS 1
-
-/*
- * SCSI support type (disk, tape, CD-ROM)
- */
-#define CONFIG_BLK_DEV_SD_MODULE 1
-#define CONFIG_CHR_DEV_ST_MODULE 1
-#define CONFIG_CHR_DEV_OSST_MODULE 1
-#define CONFIG_BLK_DEV_SR_MODULE 1
-#define CONFIG_BLK_DEV_SR_VENDOR 1
-#define CONFIG_CHR_DEV_SG_MODULE 1
-
-/*
- * Some SCSI devices (e.g. CD jukebox) support multiple LUNs
- */
-#undef CONFIG_SCSI_MULTI_LUN
-#define CONFIG_SCSI_CONSTANTS 1
-#define CONFIG_SCSI_LOGGING 1
-
-/*
- * SCSI Transport Attributes
- */
-#define CONFIG_SCSI_SPI_ATTRS_MODULE 1
-#define CONFIG_SCSI_FC_ATTRS_MODULE 1
-
-/*
- * SCSI low-level drivers
- */
-#define CONFIG_BLK_DEV_3W_XXXX_RAID_MODULE 1
-#undef CONFIG_SCSI_7000FASST
-#define CONFIG_SCSI_ACARD_MODULE 1
-#define CONFIG_SCSI_AHA152X_MODULE 1
-#define CONFIG_SCSI_AHA1542_MODULE 1
-#define CONFIG_SCSI_AACRAID_MODULE 1
-#define CONFIG_SCSI_AIC7XXX_MODULE 1
-#define CONFIG_AIC7XXX_CMDS_PER_DEVICE 4
-#define CONFIG_AIC7XXX_RESET_DELAY_MS 15000
-#undef CONFIG_AIC7XXX_BUILD_FIRMWARE
-#undef CONFIG_AIC7XXX_DEBUG_ENABLE
-#define CONFIG_AIC7XXX_DEBUG_MASK 0
-#undef CONFIG_AIC7XXX_REG_PRETTY_PRINT
-#define CONFIG_SCSI_AIC7XXX_OLD_MODULE 1
-#define CONFIG_SCSI_AIC79XX_MODULE 1
-#define CONFIG_AIC79XX_CMDS_PER_DEVICE 4
-#define CONFIG_AIC79XX_RESET_DELAY_MS 15000
-#undef CONFIG_AIC79XX_BUILD_FIRMWARE
-#undef CONFIG_AIC79XX_ENABLE_RD_STRM
-#undef CONFIG_AIC79XX_DEBUG_ENABLE
-#define CONFIG_AIC79XX_DEBUG_MASK 0
-#undef CONFIG_AIC79XX_REG_PRETTY_PRINT
-#undef CONFIG_SCSI_DPT_I2O
-#define CONFIG_SCSI_ADVANSYS_MODULE 1
-#define CONFIG_SCSI_IN2000_MODULE 1
-#define CONFIG_SCSI_MEGARAID_MODULE 1
-#define CONFIG_SCSI_SATA 1
-#define CONFIG_SCSI_SATA_SVW_MODULE 1
-#define CONFIG_SCSI_ATA_PIIX_MODULE 1
-#define CONFIG_SCSI_SATA_PROMISE_MODULE 1
-#define CONFIG_SCSI_SATA_SX4_MODULE 1
-#define CONFIG_SCSI_SATA_SIL_MODULE 1
-#define CONFIG_SCSI_SATA_SIS_MODULE 1
-#define CONFIG_SCSI_SATA_VIA_MODULE 1
-#define CONFIG_SCSI_SATA_VITESSE_MODULE 1
-#define CONFIG_SCSI_BUSLOGIC_MODULE 1
-#undef CONFIG_SCSI_OMIT_FLASHPOINT
-#undef CONFIG_SCSI_CPQFCTS
-#undef CONFIG_SCSI_DMX3191D
-#undef CONFIG_SCSI_DTC3280
-#undef CONFIG_SCSI_EATA
-#undef CONFIG_SCSI_EATA_PIO
-#define CONFIG_SCSI_FUTURE_DOMAIN_MODULE 1
-#define CONFIG_SCSI_GDTH_MODULE 1
-#undef CONFIG_SCSI_GENERIC_NCR5380
-#undef CONFIG_SCSI_GENERIC_NCR5380_MMIO
-#define CONFIG_SCSI_IPS_MODULE 1
-#define CONFIG_SCSI_INIA100_MODULE 1
-#define CONFIG_SCSI_PPA_MODULE 1
-#define CONFIG_SCSI_IMM_MODULE 1
-#undef CONFIG_SCSI_IZIP_EPP16
-#undef CONFIG_SCSI_IZIP_SLOW_CTR
-#undef CONFIG_SCSI_NCR53C406A
-#define CONFIG_SCSI_SYM53C8XX_2_MODULE 1
-#define CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE 1
-#define CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS 16
-#define CONFIG_SCSI_SYM53C8XX_MAX_TAGS 64
-#undef CONFIG_SCSI_SYM53C8XX_IOMAPPED
-#undef CONFIG_SCSI_IPR
-#undef CONFIG_SCSI_PAS16
-#undef CONFIG_SCSI_PSI240I
-#define CONFIG_SCSI_QLOGIC_FAS_MODULE 1
-#define CONFIG_SCSI_QLOGIC_ISP_MODULE 1
-#undef CONFIG_SCSI_QLOGIC_FC
-#define CONFIG_SCSI_QLOGIC_1280_MODULE 1
-#define CONFIG_SCSI_QLA2XXX_MODULE 1
-#define CONFIG_SCSI_QLA21XX_MODULE 1
-#define CONFIG_SCSI_QLA22XX_MODULE 1
-#define CONFIG_SCSI_QLA2300_MODULE 1
-#define CONFIG_SCSI_QLA2322_MODULE 1
-#define CONFIG_SCSI_QLA6312_MODULE 1
-#define CONFIG_SCSI_QLA6322_MODULE 1
-#undef CONFIG_SCSI_SYM53C416
-#undef CONFIG_SCSI_DC395x
-#define CONFIG_SCSI_DC390T_MODULE 1
-#undef CONFIG_SCSI_T128
-#undef CONFIG_SCSI_U14_34F
-#undef CONFIG_SCSI_ULTRASTOR
-#undef CONFIG_SCSI_NSP32
-#undef CONFIG_SCSI_DEBUG
-
-/*
- * PCMCIA SCSI adapter support
- */
-#define CONFIG_PCMCIA_AHA152X_MODULE 1
-#define CONFIG_PCMCIA_FDOMAIN_MODULE 1
-#define CONFIG_PCMCIA_NINJA_SCSI_MODULE 1
-#define CONFIG_PCMCIA_QLOGIC_MODULE 1
-#define CONFIG_PCMCIA_SYM53C500_MODULE 1
-
-/*
- * Old CD-ROM drivers (not SCSI, not IDE)
- */
-#undef CONFIG_CD_NO_IDESCSI
-
-/*
- * Multi-device support (RAID and LVM)
- */
-#define CONFIG_MD 1
-#define CONFIG_BLK_DEV_MD 1
-#define CONFIG_MD_LINEAR_MODULE 1
-#define CONFIG_MD_RAID0_MODULE 1
-#define CONFIG_MD_RAID1_MODULE 1
-#define CONFIG_MD_RAID5_MODULE 1
-#define CONFIG_MD_RAID6_MODULE 1
-#define CONFIG_MD_MULTIPATH_MODULE 1
-#define CONFIG_BLK_DEV_DM_MODULE 1
-#define CONFIG_DM_CRYPT_MODULE 1
-
-/*
- * Fusion MPT device support
- */
-#define CONFIG_FUSION_MODULE 1
-#define CONFIG_FUSION_MAX_SGE 40
-#undef CONFIG_FUSION_ISENSE
-#define CONFIG_FUSION_CTL_MODULE 1
-#define CONFIG_FUSION_LAN_MODULE 1
-
-/*
- * IEEE 1394 (FireWire) support
- */
-#define CONFIG_IEEE1394_MODULE 1
-
-/*
- * Subsystem Options
- */
-#undef CONFIG_IEEE1394_VERBOSEDEBUG
-#define CONFIG_IEEE1394_OUI_DB 1
-#undef CONFIG_IEEE1394_EXTRA_CONFIG_ROMS
-
-/*
- * Device Drivers
- */
-#undef CONFIG_IEEE1394_PCILYNX
-#define CONFIG_IEEE1394_OHCI1394_MODULE 1
-
-/*
- * Protocol Drivers
- */
-#define CONFIG_IEEE1394_VIDEO1394_MODULE 1
-#define CONFIG_IEEE1394_SBP2_MODULE 1
-#undef CONFIG_IEEE1394_SBP2_PHYS_DMA
-#undef CONFIG_IEEE1394_ETH1394
-#define CONFIG_IEEE1394_DV1394_MODULE 1
-#define CONFIG_IEEE1394_RAWIO_MODULE 1
-#define CONFIG_IEEE1394_CMP_MODULE 1
-#define CONFIG_IEEE1394_AMDTP_MODULE 1
-
-/*
- * I2O device support
- */
-#define CONFIG_I2O_MODULE 1
-#define CONFIG_I2O_CONFIG_MODULE 1
-#define CONFIG_I2O_BLOCK_MODULE 1
-#define CONFIG_I2O_SCSI_MODULE 1
-#define CONFIG_I2O_PROC_MODULE 1
-
-/*
- * Networking support
- */
-#define CONFIG_NET 1
-
-/*
- * Networking options
- */
-#define CONFIG_PACKET 1
-#define CONFIG_PACKET_MMAP 1
-#define CONFIG_NETLINK_DEV 1
-#define CONFIG_UNIX 1
-#define CONFIG_NET_KEY_MODULE 1
-#define CONFIG_INET 1
-#define CONFIG_IP_MULTICAST 1
-#define CONFIG_IP_ADVANCED_ROUTER 1
-#define CONFIG_IP_MULTIPLE_TABLES 1
-#define CONFIG_IP_ROUTE_FWMARK 1
-#define CONFIG_IP_ROUTE_NAT 1
-#define CONFIG_IP_ROUTE_MULTIPATH 1
-#define CONFIG_IP_ROUTE_TOS 1
-#define CONFIG_IP_ROUTE_VERBOSE 1
-#undef CONFIG_IP_PNP
-#define CONFIG_NET_IPIP_MODULE 1
-#define CONFIG_NET_IPGRE_MODULE 1
-#define CONFIG_NET_IPGRE_BROADCAST 1
-#define CONFIG_IP_MROUTE 1
-#define CONFIG_IP_PIMSM_V1 1
-#define CONFIG_IP_PIMSM_V2 1
-#undef CONFIG_ARPD
-#define CONFIG_SYN_COOKIES 1
-#define CONFIG_INET_AH_MODULE 1
-#define CONFIG_INET_ESP_MODULE 1
-#define CONFIG_INET_IPCOMP_MODULE 1
-
-/*
- * IP: Virtual Server Configuration
- */
-#define CONFIG_IP_VS_MODULE 1
-#undef CONFIG_IP_VS_DEBUG
-#define CONFIG_IP_VS_TAB_BITS 12
-
-/*
- * IPVS transport protocol load balancing support
- */
-#define CONFIG_IP_VS_PROTO_TCP 1
-#define CONFIG_IP_VS_PROTO_UDP 1
-#define CONFIG_IP_VS_PROTO_ESP 1
-#define CONFIG_IP_VS_PROTO_AH 1
-
-/*
- * IPVS scheduler
- */
-#define CONFIG_IP_VS_RR_MODULE 1
-#define CONFIG_IP_VS_WRR_MODULE 1
-#define CONFIG_IP_VS_LC_MODULE 1
-#define CONFIG_IP_VS_WLC_MODULE 1
-#define CONFIG_IP_VS_LBLC_MODULE 1
-#define CONFIG_IP_VS_LBLCR_MODULE 1
-#define CONFIG_IP_VS_DH_MODULE 1
-#define CONFIG_IP_VS_SH_MODULE 1
-#define CONFIG_IP_VS_SED_MODULE 1
-#define CONFIG_IP_VS_NQ_MODULE 1
-
-/*
- * IPVS application helper
- */
-#define CONFIG_IP_VS_FTP_MODULE 1
-#define CONFIG_IPV6_MODULE 1
-#define CONFIG_IPV6_PRIVACY 1
-#define CONFIG_INET6_AH_MODULE 1
-#define CONFIG_INET6_ESP_MODULE 1
-#define CONFIG_INET6_IPCOMP_MODULE 1
-#define CONFIG_IPV6_TUNNEL_MODULE 1
-#define CONFIG_NETFILTER 1
-#undef CONFIG_NETFILTER_DEBUG
-#define CONFIG_BRIDGE_NETFILTER 1
-
-/*
- * IP: Netfilter Configuration
- */
-#define CONFIG_IP_NF_CONNTRACK_MODULE 1
-#define CONFIG_IP_NF_FTP_MODULE 1
-#define CONFIG_IP_NF_IRC_MODULE 1
-#define CONFIG_IP_NF_TFTP_MODULE 1
-#define CONFIG_IP_NF_AMANDA_MODULE 1
-#define CONFIG_IP_NF_QUEUE_MODULE 1
-#define CONFIG_IP_NF_IPTABLES_MODULE 1
-#define CONFIG_IP_NF_MATCH_LIMIT_MODULE 1
-#define CONFIG_IP_NF_MATCH_IPRANGE_MODULE 1
-#define CONFIG_IP_NF_MATCH_MAC_MODULE 1
-#define CONFIG_IP_NF_MATCH_PKTTYPE_MODULE 1
-#define CONFIG_IP_NF_MATCH_MARK_MODULE 1
-#define CONFIG_IP_NF_MATCH_MULTIPORT_MODULE 1
-#define CONFIG_IP_NF_MATCH_TOS_MODULE 1
-#define CONFIG_IP_NF_MATCH_RECENT_MODULE 1
-#define CONFIG_IP_NF_MATCH_ECN_MODULE 1
-#define CONFIG_IP_NF_MATCH_DSCP_MODULE 1
-#define CONFIG_IP_NF_MATCH_AH_ESP_MODULE 1
-#define CONFIG_IP_NF_MATCH_LENGTH_MODULE 1
-#define CONFIG_IP_NF_MATCH_TTL_MODULE 1
-#define CONFIG_IP_NF_MATCH_TCPMSS_MODULE 1
-#define CONFIG_IP_NF_MATCH_HELPER_MODULE 1
-#define CONFIG_IP_NF_MATCH_STATE_MODULE 1
-#define CONFIG_IP_NF_MATCH_CONNTRACK_MODULE 1
-#define CONFIG_IP_NF_MATCH_OWNER_MODULE 1
-#define CONFIG_IP_NF_MATCH_PHYSDEV_MODULE 1
-#define CONFIG_IP_NF_FILTER_MODULE 1
-#define CONFIG_IP_NF_TARGET_REJECT_MODULE 1
-#define CONFIG_IP_NF_NAT_MODULE 1
-#define CONFIG_IP_NF_NAT_NEEDED 1
-#define CONFIG_IP_NF_TARGET_MASQUERADE_MODULE 1
-#define CONFIG_IP_NF_TARGET_REDIRECT_MODULE 1
-#define CONFIG_IP_NF_TARGET_NETMAP_MODULE 1
-#define CONFIG_IP_NF_TARGET_SAME_MODULE 1
-#define CONFIG_IP_NF_NAT_LOCAL 1
-#define CONFIG_IP_NF_NAT_SNMP_BASIC_MODULE 1
-#define CONFIG_IP_NF_NAT_IRC_MODULE 1
-#define CONFIG_IP_NF_NAT_FTP_MODULE 1
-#define CONFIG_IP_NF_NAT_TFTP_MODULE 1
-#define CONFIG_IP_NF_NAT_AMANDA_MODULE 1
-#define CONFIG_IP_NF_MANGLE_MODULE 1
-#define CONFIG_IP_NF_TARGET_TOS_MODULE 1
-#define CONFIG_IP_NF_TARGET_ECN_MODULE 1
-#define CONFIG_IP_NF_TARGET_DSCP_MODULE 1
-#define CONFIG_IP_NF_TARGET_MARK_MODULE 1
-#define CONFIG_IP_NF_TARGET_CLASSIFY_MODULE 1
-#define CONFIG_IP_NF_TARGET_LOG_MODULE 1
-#define CONFIG_IP_NF_TARGET_ULOG_MODULE 1
-#define CONFIG_IP_NF_TARGET_TCPMSS_MODULE 1
-#define CONFIG_IP_NF_ARPTABLES_MODULE 1
-#define CONFIG_IP_NF_ARPFILTER_MODULE 1
-#define CONFIG_IP_NF_ARP_MANGLE_MODULE 1
-#undef CONFIG_IP_NF_COMPAT_IPCHAINS
-#undef CONFIG_IP_NF_COMPAT_IPFWADM
-#define CONFIG_IP_NF_TARGET_NOTRACK_MODULE 1
-#define CONFIG_IP_NF_RAW_MODULE 1
-
-/*
- * IPv6: Netfilter Configuration
- */
-#undef CONFIG_IP6_NF_QUEUE
-#define CONFIG_IP6_NF_IPTABLES_MODULE 1
-#define CONFIG_IP6_NF_MATCH_LIMIT_MODULE 1
-#define CONFIG_IP6_NF_MATCH_MAC_MODULE 1
-#define CONFIG_IP6_NF_MATCH_RT_MODULE 1
-#define CONFIG_IP6_NF_MATCH_OPTS_MODULE 1
-#define CONFIG_IP6_NF_MATCH_FRAG_MODULE 1
-#define CONFIG_IP6_NF_MATCH_HL_MODULE 1
-#define CONFIG_IP6_NF_MATCH_MULTIPORT_MODULE 1
-#define CONFIG_IP6_NF_MATCH_OWNER_MODULE 1
-#define CONFIG_IP6_NF_MATCH_MARK_MODULE 1
-#define CONFIG_IP6_NF_MATCH_IPV6HEADER_MODULE 1
-#define CONFIG_IP6_NF_MATCH_AHESP_MODULE 1
-#define CONFIG_IP6_NF_MATCH_LENGTH_MODULE 1
-#define CONFIG_IP6_NF_MATCH_EUI64_MODULE 1
-#define CONFIG_IP6_NF_FILTER_MODULE 1
-#define CONFIG_IP6_NF_TARGET_LOG_MODULE 1
-#define CONFIG_IP6_NF_MANGLE_MODULE 1
-#define CONFIG_IP6_NF_TARGET_MARK_MODULE 1
-#define CONFIG_IP6_NF_RAW_MODULE 1
-
-/*
- * Bridge: Netfilter Configuration
- */
-#define CONFIG_BRIDGE_NF_EBTABLES_MODULE 1
-#define CONFIG_BRIDGE_EBT_BROUTE_MODULE 1
-#define CONFIG_BRIDGE_EBT_T_FILTER_MODULE 1
-#define CONFIG_BRIDGE_EBT_T_NAT_MODULE 1
-#define CONFIG_BRIDGE_EBT_802_3_MODULE 1
-#define CONFIG_BRIDGE_EBT_AMONG_MODULE 1
-#define CONFIG_BRIDGE_EBT_ARP_MODULE 1
-#define CONFIG_BRIDGE_EBT_IP_MODULE 1
-#define CONFIG_BRIDGE_EBT_LIMIT_MODULE 1
-#define CONFIG_BRIDGE_EBT_MARK_MODULE 1
-#define CONFIG_BRIDGE_EBT_PKTTYPE_MODULE 1
-#define CONFIG_BRIDGE_EBT_STP_MODULE 1
-#define CONFIG_BRIDGE_EBT_VLAN_MODULE 1
-#define CONFIG_BRIDGE_EBT_ARPREPLY_MODULE 1
-#define CONFIG_BRIDGE_EBT_DNAT_MODULE 1
-#define CONFIG_BRIDGE_EBT_MARK_T_MODULE 1
-#define CONFIG_BRIDGE_EBT_REDIRECT_MODULE 1
-#define CONFIG_BRIDGE_EBT_SNAT_MODULE 1
-#define CONFIG_BRIDGE_EBT_LOG_MODULE 1
-#define CONFIG_XFRM 1
-#define CONFIG_XFRM_USER 1
-
-/*
- * SCTP Configuration (EXPERIMENTAL)
- */
-#define CONFIG_IP_SCTP_MODULE 1
-#undef CONFIG_SCTP_DBG_MSG
-#undef CONFIG_SCTP_DBG_OBJCNT
-#undef CONFIG_SCTP_HMAC_NONE
-#undef CONFIG_SCTP_HMAC_SHA1
-#define CONFIG_SCTP_HMAC_MD5 1
-#undef CONFIG_ATM
-#define CONFIG_BRIDGE_MODULE 1
-#define CONFIG_VLAN_8021Q_MODULE 1
-#undef CONFIG_DECNET
-#define CONFIG_LLC_MODULE 1
-#undef CONFIG_LLC2
-#define CONFIG_IPX_MODULE 1
-#undef CONFIG_IPX_INTERN
-#define CONFIG_ATALK_MODULE 1
-#define CONFIG_DEV_APPLETALK 1
-#define CONFIG_LTPC_MODULE 1
-#define CONFIG_COPS_MODULE 1
-#define CONFIG_COPS_DAYNA 1
-#define CONFIG_COPS_TANGENT 1
-#define CONFIG_IPDDP_MODULE 1
-#define CONFIG_IPDDP_ENCAP 1
-#define CONFIG_IPDDP_DECAP 1
-#undef CONFIG_X25
-#undef CONFIG_LAPB
-#define CONFIG_NET_DIVERT 1
-#undef CONFIG_ECONET
-#define CONFIG_WAN_ROUTER_MODULE 1
-#undef CONFIG_NET_FASTROUTE
-#undef CONFIG_NET_HW_FLOWCONTROL
-
-/*
- * QoS and/or fair queueing
- */
-#define CONFIG_NET_SCHED 1
-#define CONFIG_NET_SCH_CBQ_MODULE 1
-#define CONFIG_NET_SCH_HTB_MODULE 1
-#define CONFIG_NET_SCH_HFSC_MODULE 1
-#define CONFIG_NET_SCH_CSZ_MODULE 1
-#define CONFIG_NET_SCH_PRIO_MODULE 1
-#define CONFIG_NET_SCH_RED_MODULE 1
-#define CONFIG_NET_SCH_SFQ_MODULE 1
-#define CONFIG_NET_SCH_TEQL_MODULE 1
-#define CONFIG_NET_SCH_TBF_MODULE 1
-#define CONFIG_NET_SCH_GRED_MODULE 1
-#define CONFIG_NET_SCH_DSMARK_MODULE 1
-#define CONFIG_NET_SCH_DELAY_MODULE 1
-#define CONFIG_NET_SCH_INGRESS_MODULE 1
-#define CONFIG_NET_QOS 1
-#define CONFIG_NET_ESTIMATOR 1
-#define CONFIG_NET_CLS 1
-#define CONFIG_NET_CLS_TCINDEX_MODULE 1
-#define CONFIG_NET_CLS_ROUTE4_MODULE 1
-#define CONFIG_NET_CLS_ROUTE 1
-#define CONFIG_NET_CLS_FW_MODULE 1
-#define CONFIG_NET_CLS_U32_MODULE 1
-#define CONFIG_NET_CLS_RSVP_MODULE 1
-#define CONFIG_NET_CLS_RSVP6_MODULE 1
-#define CONFIG_NET_CLS_POLICE 1
-
-/*
- * Network testing
- */
-#undef CONFIG_NET_PKTGEN
-#define CONFIG_NETPOLL 1
-#undef CONFIG_NETPOLL_RX
-#undef CONFIG_NETPOLL_TRAP
-#define CONFIG_NET_POLL_CONTROLLER 1
-#undef CONFIG_HAMRADIO
-#define CONFIG_IRDA_MODULE 1
-
-/*
- * IrDA protocols
- */
-#define CONFIG_IRLAN_MODULE 1
-#define CONFIG_IRNET_MODULE 1
-#define CONFIG_IRCOMM_MODULE 1
-#undef CONFIG_IRDA_ULTRA
-
-/*
- * IrDA options
- */
-#define CONFIG_IRDA_CACHE_LAST_LSAP 1
-#define CONFIG_IRDA_FAST_RR 1
-#undef CONFIG_IRDA_DEBUG
-
-/*
- * Infrared-port device drivers
- */
-
-/*
- * SIR device drivers
- */
-#define CONFIG_IRTTY_SIR_MODULE 1
-
-/*
- * Dongle support
- */
-#define CONFIG_DONGLE 1
-#define CONFIG_ESI_DONGLE_MODULE 1
-#define CONFIG_ACTISYS_DONGLE_MODULE 1
-#define CONFIG_TEKRAM_DONGLE_MODULE 1
-#define CONFIG_LITELINK_DONGLE_MODULE 1
-#define CONFIG_MA600_DONGLE_MODULE 1
-#define CONFIG_GIRBIL_DONGLE_MODULE 1
-#define CONFIG_MCP2120_DONGLE_MODULE 1
-#define CONFIG_OLD_BELKIN_DONGLE_MODULE 1
-#define CONFIG_ACT200L_DONGLE_MODULE 1
-
-/*
- * Old SIR device drivers
- */
-
-/*
- * Old Serial dongle support
- */
-
-/*
- * FIR device drivers
- */
-#define CONFIG_USB_IRDA_MODULE 1
-#define CONFIG_SIGMATEL_FIR_MODULE 1
-#define CONFIG_NSC_FIR_MODULE 1
-#undef CONFIG_WINBOND_FIR
-#undef CONFIG_TOSHIBA_FIR
-#undef CONFIG_SMC_IRCC_FIR
-#undef CONFIG_ALI_FIR
-#undef CONFIG_VLSI_FIR
-#undef CONFIG_VIA_FIR
-#define CONFIG_BT_MODULE 1
-#define CONFIG_BT_L2CAP_MODULE 1
-#define CONFIG_BT_SCO_MODULE 1
-#define CONFIG_BT_RFCOMM_MODULE 1
-#define CONFIG_BT_RFCOMM_TTY 1
-#define CONFIG_BT_BNEP_MODULE 1
-#define CONFIG_BT_BNEP_MC_FILTER 1
-#define CONFIG_BT_BNEP_PROTO_FILTER 1
-#define CONFIG_BT_CMTP_MODULE 1
-
-/*
- * Bluetooth device drivers
- */
-#define CONFIG_BT_HCIUSB_MODULE 1
-#define CONFIG_BT_HCIUSB_SCO 1
-#define CONFIG_BT_HCIUART_MODULE 1
-#define CONFIG_BT_HCIUART_H4 1
-#define CONFIG_BT_HCIUART_BCSP 1
-#define CONFIG_BT_HCIUART_BCSP_TXCRC 1
-#define CONFIG_BT_HCIBCM203X_MODULE 1
-#define CONFIG_BT_HCIBFUSB_MODULE 1
-#define CONFIG_BT_HCIDTL1_MODULE 1
-#define CONFIG_BT_HCIBT3C_MODULE 1
-#define CONFIG_BT_HCIBLUECARD_MODULE 1
-#define CONFIG_BT_HCIBTUART_MODULE 1
-#define CONFIG_BT_HCIVHCI_MODULE 1
-#define CONFIG_TUX_MODULE 1
-
-/*
- * TUX options
- */
-#define CONFIG_TUX_EXTCGI 1
-#undef CONFIG_TUX_EXTENDED_LOG
-#undef CONFIG_TUX_DEBUG
-#define CONFIG_NETDEVICES 1
-#define CONFIG_DUMMY_MODULE 1
-#define CONFIG_BONDING_MODULE 1
-#define CONFIG_EQUALIZER_MODULE 1
-#define CONFIG_TUN_MODULE 1
-#define CONFIG_ETHERTAP_MODULE 1
-#define CONFIG_NET_SB1000_MODULE 1
-
-/*
- * ARCnet devices
- */
-#undef CONFIG_ARCNET
-
-/*
- * Ethernet (10 or 100Mbit)
- */
-#define CONFIG_NET_ETHERNET 1
-#define CONFIG_MII_MODULE 1
-#define CONFIG_HAPPYMEAL_MODULE 1
-#define CONFIG_SUNGEM_MODULE 1
-#define CONFIG_NET_VENDOR_3COM 1
-#define CONFIG_EL1_MODULE 1
-#define CONFIG_EL2_MODULE 1
-#define CONFIG_ELPLUS_MODULE 1
-#define CONFIG_EL16_MODULE 1
-#define CONFIG_EL3_MODULE 1
-#define CONFIG_3C515_MODULE 1
-#define CONFIG_VORTEX_MODULE 1
-#define CONFIG_TYPHOON_MODULE 1
-#define CONFIG_LANCE_MODULE 1
-#define CONFIG_NET_VENDOR_SMC 1
-#define CONFIG_WD80x3_MODULE 1
-#define CONFIG_ULTRA_MODULE 1
-#define CONFIG_SMC9194_MODULE 1
-#define CONFIG_NET_VENDOR_RACAL 1
-#define CONFIG_NI52_MODULE 1
-#define CONFIG_NI65_MODULE 1
-
-/*
- * Tulip family network device support
- */
-#define CONFIG_NET_TULIP 1
-#define CONFIG_DE2104X_MODULE 1
-#define CONFIG_TULIP_MODULE 1
-#undef CONFIG_TULIP_MWI
-#define CONFIG_TULIP_MMIO 1
-#undef CONFIG_TULIP_NAPI
-#define CONFIG_DE4X5_MODULE 1
-#define CONFIG_WINBOND_840_MODULE 1
-#define CONFIG_DM9102_MODULE 1
-#define CONFIG_PCMCIA_XIRCOM_MODULE 1
-#undef CONFIG_AT1700
-#define CONFIG_DEPCA_MODULE 1
-#define CONFIG_HP100_MODULE 1
-#undef CONFIG_NET_ISA
-#define CONFIG_NE2000_MODULE 1
-#define CONFIG_NET_PCI 1
-#define CONFIG_PCNET32_MODULE 1
-#define CONFIG_AMD8111_ETH_MODULE 1
-#define CONFIG_AMD8111E_NAPI 1
-#define CONFIG_ADAPTEC_STARFIRE_MODULE 1
-#define CONFIG_ADAPTEC_STARFIRE_NAPI 1
-#define CONFIG_AC3200_MODULE 1
-#define CONFIG_APRICOT_MODULE 1
-#define CONFIG_B44_MODULE 1
-#define CONFIG_FORCEDETH_MODULE 1
-#define CONFIG_CS89x0_MODULE 1
-#define CONFIG_DGRS_MODULE 1
-#define CONFIG_EEPRO100_MODULE 1
-#undef CONFIG_EEPRO100_PIO
-#define CONFIG_E100_MODULE 1
-#define CONFIG_E100_NAPI 1
-#define CONFIG_FEALNX_MODULE 1
-#define CONFIG_NATSEMI_MODULE 1
-#define CONFIG_NE2K_PCI_MODULE 1
-#define CONFIG_8139CP_MODULE 1
-#define CONFIG_8139TOO_MODULE 1
-#define CONFIG_8139TOO_PIO 1
-#undef CONFIG_8139TOO_TUNE_TWISTER
-#define CONFIG_8139TOO_8129 1
-#undef CONFIG_8139_OLD_RX_RESET
-#define CONFIG_SIS900_MODULE 1
-#define CONFIG_EPIC100_MODULE 1
-#define CONFIG_SUNDANCE_MODULE 1
-#undef CONFIG_SUNDANCE_MMIO
-#define CONFIG_TLAN_MODULE 1
-#define CONFIG_VIA_RHINE_MODULE 1
-#define CONFIG_VIA_RHINE_MMIO 1
-#define CONFIG_NET_POCKET 1
-#define CONFIG_ATP_MODULE 1
-#define CONFIG_DE600_MODULE 1
-#define CONFIG_DE620_MODULE 1
-
-/*
- * Gigabit Ethernet (1000/10000 Mbit)
- */
-#define CONFIG_NET_GIGE 1
-#define CONFIG_ACENIC_MODULE 1
-#undef CONFIG_ACENIC_OMIT_TIGON_I
-#define CONFIG_DL2K_MODULE 1
-#define CONFIG_E1000_MODULE 1
-#define CONFIG_E1000_NAPI 1
-#define CONFIG_NS83820_MODULE 1
-#define CONFIG_HAMACHI_MODULE 1
-#define CONFIG_YELLOWFIN_MODULE 1
-#define CONFIG_R8169_MODULE 1
-#define CONFIG_SK98LIN_MODULE 1
-#define CONFIG_TIGON3_MODULE 1
-#define CONFIG_IXGB_MODULE 1
-#define CONFIG_IXGB_NAPI 1
-#define CONFIG_S2IO_MODULE 1
-#define CONFIG_S2IO_NAPI 1
-
-/*
- * Token Ring devices
- */
-#undef CONFIG_TR
-
-/*
- * Wireless LAN (non-hamradio)
- */
-#define CONFIG_NET_RADIO 1
-
-/*
- * Obsolete Wireless cards support (pre-802.11)
- */
-#undef CONFIG_STRIP
-#undef CONFIG_ARLAN
-#define CONFIG_WAVELAN_MODULE 1
-#define CONFIG_PCMCIA_WAVELAN_MODULE 1
-#define CONFIG_PCMCIA_NETWAVE_MODULE 1
-
-/*
- * Wireless 802.11 Frequency Hopping cards support
- */
-#undef CONFIG_PCMCIA_RAYCS
-
-/*
- * Wireless 802.11b ISA/PCI cards support
- */
-#define CONFIG_AIRO_MODULE 1
-#define CONFIG_HERMES_MODULE 1
-#define CONFIG_PLX_HERMES_MODULE 1
-#define CONFIG_TMD_HERMES_MODULE 1
-#define CONFIG_PCI_HERMES_MODULE 1
-#define CONFIG_ATMEL_MODULE 1
-#define CONFIG_PCI_ATMEL_MODULE 1
-
-/*
- * Wireless 802.11b Pcmcia/Cardbus cards support
- */
-#define CONFIG_PCMCIA_HERMES_MODULE 1
-#define CONFIG_AIRO_CS_MODULE 1
-#define CONFIG_PCMCIA_ATMEL_MODULE 1
-#define CONFIG_PCMCIA_WL3501_MODULE 1
-
-/*
- * Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
- */
-#define CONFIG_PRISM54_MODULE 1
-#define CONFIG_NET_WIRELESS 1
-
-/*
- * PCMCIA network device support
- */
-#define CONFIG_NET_PCMCIA 1
-#define CONFIG_PCMCIA_3C589_MODULE 1
-#define CONFIG_PCMCIA_3C574_MODULE 1
-#define CONFIG_PCMCIA_FMVJ18X_MODULE 1
-#define CONFIG_PCMCIA_PCNET_MODULE 1
-#define CONFIG_PCMCIA_NMCLAN_MODULE 1
-#define CONFIG_PCMCIA_SMC91C92_MODULE 1
-#define CONFIG_PCMCIA_XIRC2PS_MODULE 1
-#define CONFIG_PCMCIA_AXNET_MODULE 1
-
-/*
- * Wan interfaces
- */
-#undef CONFIG_WAN
-#define CONFIG_FDDI 1
-#undef CONFIG_DEFXX
-#define CONFIG_SKFP_MODULE 1
-#undef CONFIG_HIPPI
-#define CONFIG_PLIP_MODULE 1
-#define CONFIG_PPP_MODULE 1
-#define CONFIG_PPP_MULTILINK 1
-#define CONFIG_PPP_FILTER 1
-#define CONFIG_PPP_ASYNC_MODULE 1
-#define CONFIG_PPP_SYNC_TTY_MODULE 1
-#define CONFIG_PPP_DEFLATE_MODULE 1
-#undef CONFIG_PPP_BSDCOMP
-#define CONFIG_PPPOE_MODULE 1
-#undef CONFIG_SLIP
-#define CONFIG_NET_FC 1
-#undef CONFIG_SHAPER
-#define CONFIG_NETCONSOLE_MODULE 1
-
-/*
- * ISDN subsystem
- */
-#define CONFIG_ISDN_MODULE 1
-
-/*
- * Old ISDN4Linux
- */
-#define CONFIG_ISDN_I4L_MODULE 1
-#define CONFIG_ISDN_PPP 1
-#define CONFIG_ISDN_PPP_VJ 1
-#define CONFIG_ISDN_MPP 1
-#define CONFIG_IPPP_FILTER 1
-#undef CONFIG_ISDN_PPP_BSDCOMP
-#define CONFIG_ISDN_AUDIO 1
-#define CONFIG_ISDN_TTY_FAX 1
-
-/*
- * ISDN feature submodules
- */
-
-/*
- * ISDN4Linux hardware drivers
- */
-
-/*
- * Passive cards
- */
-#define CONFIG_ISDN_DRV_HISAX_MODULE 1
-
-/*
- * D-channel protocol features
- */
-#define CONFIG_HISAX_EURO 1
-#define CONFIG_DE_AOC 1
-#define CONFIG_HISAX_NO_SENDCOMPLETE 1
-#define CONFIG_HISAX_NO_LLC 1
-#define CONFIG_HISAX_NO_KEYPAD 1
-#define CONFIG_HISAX_1TR6 1
-#define CONFIG_HISAX_NI1 1
-#define CONFIG_HISAX_MAX_CARDS 8
-
-/*
- * HiSax supported cards
- */
-#define CONFIG_HISAX_16_0 1
-#define CONFIG_HISAX_16_3 1
-#define CONFIG_HISAX_TELESPCI 1
-#define CONFIG_HISAX_S0BOX 1
-#define CONFIG_HISAX_AVM_A1 1
-#define CONFIG_HISAX_FRITZPCI 1
-#define CONFIG_HISAX_AVM_A1_PCMCIA 1
-#define CONFIG_HISAX_ELSA 1
-#define CONFIG_HISAX_IX1MICROR2 1
-#define CONFIG_HISAX_DIEHLDIVA 1
-#define CONFIG_HISAX_ASUSCOM 1
-#define CONFIG_HISAX_TELEINT 1
-#define CONFIG_HISAX_HFCS 1
-#define CONFIG_HISAX_SEDLBAUER 1
-#define CONFIG_HISAX_SPORTSTER 1
-#define CONFIG_HISAX_MIC 1
-#define CONFIG_HISAX_NETJET 1
-#define CONFIG_HISAX_NETJET_U 1
-#define CONFIG_HISAX_NICCY 1
-#define CONFIG_HISAX_ISURF 1
-#define CONFIG_HISAX_HSTSAPHIR 1
-#define CONFIG_HISAX_BKM_A4T 1
-#define CONFIG_HISAX_SCT_QUADRO 1
-#define CONFIG_HISAX_GAZEL 1
-#define CONFIG_HISAX_HFC_PCI 1
-#define CONFIG_HISAX_W6692 1
-#define CONFIG_HISAX_HFC_SX 1
-#define CONFIG_HISAX_ENTERNOW_PCI 1
-#undef CONFIG_HISAX_DEBUG
-
-/*
- * HiSax PCMCIA card service modules
- */
-#define CONFIG_HISAX_SEDLBAUER_CS_MODULE 1
-#define CONFIG_HISAX_ELSA_CS_MODULE 1
-#define CONFIG_HISAX_AVM_A1_CS_MODULE 1
-#define CONFIG_HISAX_TELES_CS_MODULE 1
-
-/*
- * HiSax sub driver modules
- */
-#define CONFIG_HISAX_ST5481_MODULE 1
-#define CONFIG_HISAX_HFCUSB_MODULE 1
-#define CONFIG_HISAX_FRITZ_PCIPNP_MODULE 1
-#define CONFIG_HISAX_HDLC 1
-
-/*
- * Active cards
- */
-#define CONFIG_ISDN_DRV_ICN_MODULE 1
-#define CONFIG_ISDN_DRV_PCBIT_MODULE 1
-#define CONFIG_ISDN_DRV_SC_MODULE 1
-#define CONFIG_ISDN_DRV_ACT2000_MODULE 1
-#define CONFIG_ISDN_DRV_TPAM_MODULE 1
-
-/*
- * CAPI subsystem
- */
-#define CONFIG_ISDN_CAPI_MODULE 1
-#define CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON 1
-#define CONFIG_ISDN_CAPI_MIDDLEWARE 1
-#define CONFIG_ISDN_CAPI_CAPI20_MODULE 1
-#define CONFIG_ISDN_CAPI_CAPIFS_BOOL 1
-#define CONFIG_ISDN_CAPI_CAPIFS_MODULE 1
-#define CONFIG_ISDN_CAPI_CAPIDRV_MODULE 1
-
-/*
- * CAPI hardware drivers
- */
-
-/*
- * Active AVM cards
- */
-#define CONFIG_CAPI_AVM 1
-
-/*
- * Active Eicon DIVA Server cards
- */
-#define CONFIG_CAPI_EICON 1
-#define CONFIG_ISDN_DIVAS_MODULE 1
-#define CONFIG_ISDN_DIVAS_BRIPCI 1
-#define CONFIG_ISDN_DIVAS_PRIPCI 1
-#define CONFIG_ISDN_DIVAS_DIVACAPI_MODULE 1
-#define CONFIG_ISDN_DIVAS_USERIDI_MODULE 1
-#define CONFIG_ISDN_DIVAS_MAINT_MODULE 1
-
-/*
- * Telephony Support
- */
-#undef CONFIG_PHONE
-
-/*
- * Input device support
- */
-#define CONFIG_INPUT 1
-
-/*
- * Userland interfaces
- */
-#define CONFIG_INPUT_MOUSEDEV 1
-#undef CONFIG_INPUT_MOUSEDEV_PSAUX
-#define CONFIG_INPUT_MOUSEDEV_SCREEN_X 1024
-#define CONFIG_INPUT_MOUSEDEV_SCREEN_Y 768
-#define CONFIG_INPUT_JOYDEV_MODULE 1
-#undef CONFIG_INPUT_TSDEV
-#define CONFIG_INPUT_EVDEV 1
-#undef CONFIG_INPUT_EVBUG
-
-/*
- * Input I/O drivers
- */
-#define CONFIG_GAMEPORT_MODULE 1
-#define CONFIG_SOUND_GAMEPORT_MODULE 1
-#define CONFIG_GAMEPORT_NS558_MODULE 1
-#define CONFIG_GAMEPORT_L4_MODULE 1
-#define CONFIG_GAMEPORT_EMU10K1_MODULE 1
-#define CONFIG_GAMEPORT_VORTEX_MODULE 1
-#define CONFIG_GAMEPORT_FM801_MODULE 1
-#define CONFIG_GAMEPORT_CS461x_MODULE 1
-#define CONFIG_SERIO 1
-#define CONFIG_SERIO_I8042 1
-#define CONFIG_SERIO_SERPORT 1
-#undef CONFIG_SERIO_CT82C710
-#undef CONFIG_SERIO_PARKBD
-#undef CONFIG_SERIO_PCIPS2
-
-/*
- * Input Device Drivers
- */
-#define CONFIG_INPUT_KEYBOARD 1
-#define CONFIG_KEYBOARD_ATKBD 1
-#undef CONFIG_KEYBOARD_SUNKBD
-#undef CONFIG_KEYBOARD_LKKBD
-#undef CONFIG_KEYBOARD_XTKBD
-#undef CONFIG_KEYBOARD_NEWTON
-#define CONFIG_INPUT_MOUSE 1
-#define CONFIG_MOUSE_PS2 1
-#define CONFIG_MOUSE_SERIAL_MODULE 1
-#define CONFIG_MOUSE_INPORT_MODULE 1
-#define CONFIG_MOUSE_ATIXL 1
-#define CONFIG_MOUSE_LOGIBM_MODULE 1
-#define CONFIG_MOUSE_PC110PAD_MODULE 1
-#define CONFIG_MOUSE_VSXXXAA_MODULE 1
-#define CONFIG_INPUT_JOYSTICK 1
-#define CONFIG_JOYSTICK_ANALOG_MODULE 1
-#define CONFIG_JOYSTICK_A3D_MODULE 1
-#define CONFIG_JOYSTICK_ADI_MODULE 1
-#define CONFIG_JOYSTICK_COBRA_MODULE 1
-#define CONFIG_JOYSTICK_GF2K_MODULE 1
-#define CONFIG_JOYSTICK_GRIP_MODULE 1
-#define CONFIG_JOYSTICK_GRIP_MP_MODULE 1
-#define CONFIG_JOYSTICK_GUILLEMOT_MODULE 1
-#define CONFIG_JOYSTICK_INTERACT_MODULE 1
-#define CONFIG_JOYSTICK_SIDEWINDER_MODULE 1
-#define CONFIG_JOYSTICK_TMDC_MODULE 1
-#define CONFIG_JOYSTICK_IFORCE_MODULE 1
-#define CONFIG_JOYSTICK_IFORCE_USB 1
-#define CONFIG_JOYSTICK_IFORCE_232 1
-#define CONFIG_JOYSTICK_WARRIOR_MODULE 1
-#define CONFIG_JOYSTICK_MAGELLAN_MODULE 1
-#define CONFIG_JOYSTICK_SPACEORB_MODULE 1
-#define CONFIG_JOYSTICK_SPACEBALL_MODULE 1
-#define CONFIG_JOYSTICK_STINGER_MODULE 1
-#define CONFIG_JOYSTICK_TWIDDLER_MODULE 1
-#define CONFIG_JOYSTICK_DB9_MODULE 1
-#define CONFIG_JOYSTICK_GAMECON_MODULE 1
-#define CONFIG_JOYSTICK_TURBOGRAFX_MODULE 1
-#undef CONFIG_INPUT_JOYDUMP
-#define CONFIG_INPUT_TOUCHSCREEN 1
-#define CONFIG_TOUCHSCREEN_GUNZE_MODULE 1
-#define CONFIG_INPUT_MISC 1
-#define CONFIG_INPUT_PCSPKR_MODULE 1
-#undef CONFIG_INPUT_UINPUT
-
-/*
- * Character devices
- */
-#define CONFIG_VT 1
-#define CONFIG_VT_CONSOLE 1
-#define CONFIG_HW_CONSOLE 1
-#define CONFIG_SERIAL_NONSTANDARD 1
-#define CONFIG_ROCKETPORT_MODULE 1
-#undef CONFIG_CYCLADES
-#define CONFIG_SYNCLINK_MODULE 1
-#define CONFIG_SYNCLINKMP_MODULE 1
-#define CONFIG_N_HDLC_MODULE 1
-#define CONFIG_STALDRV 1
-
-/*
- * Serial drivers
- */
-#define CONFIG_SERIAL_8250 1
-#define CONFIG_SERIAL_8250_CONSOLE 1
-#define CONFIG_SERIAL_8250_CS_MODULE 1
-#undef CONFIG_SERIAL_8250_ACPI
-#define CONFIG_SERIAL_8250_NR_UARTS 4
-#define CONFIG_SERIAL_8250_EXTENDED 1
-#undef CONFIG_SERIAL_8250_MANY_PORTS
-#define CONFIG_SERIAL_8250_SHARE_IRQ 1
-#define CONFIG_SERIAL_8250_DETECT_IRQ 1
-#define CONFIG_SERIAL_8250_MULTIPORT 1
-#define CONFIG_SERIAL_8250_RSA 1
-
-/*
- * Non-8250 serial port support
- */
-#define CONFIG_SERIAL_CORE 1
-#define CONFIG_SERIAL_CORE_CONSOLE 1
-#define CONFIG_UNIX98_PTYS 1
-#undef CONFIG_LEGACY_PTYS
-#define CONFIG_CRASH_MODULE 1
-#define CONFIG_PRINTER_MODULE 1
-#define CONFIG_LP_CONSOLE 1
-#define CONFIG_PPDEV_MODULE 1
-#define CONFIG_TIPAR_MODULE 1
-#undef CONFIG_QIC02_TAPE
-
-/*
- * IPMI
- */
-#define CONFIG_IPMI_HANDLER_MODULE 1
-#undef CONFIG_IPMI_PANIC_EVENT
-#define CONFIG_IPMI_DEVICE_INTERFACE_MODULE 1
-#define CONFIG_IPMI_SI_MODULE 1
-#define CONFIG_IPMI_WATCHDOG_MODULE 1
-
-/*
- * Watchdog Cards
- */
-#define CONFIG_WATCHDOG 1
-#undef CONFIG_WATCHDOG_NOWAYOUT
-
-/*
- * Watchdog Device Drivers
- */
-#define CONFIG_SOFT_WATCHDOG_MODULE 1
-#define CONFIG_ACQUIRE_WDT_MODULE 1
-#define CONFIG_ADVANTECH_WDT_MODULE 1
-#define CONFIG_ALIM1535_WDT_MODULE 1
-#define CONFIG_ALIM7101_WDT_MODULE 1
-#define CONFIG_SC520_WDT_MODULE 1
-#define CONFIG_EUROTECH_WDT_MODULE 1
-#define CONFIG_IB700_WDT_MODULE 1
-#define CONFIG_WAFER_WDT_MODULE 1
-#define CONFIG_I8XX_TCO_MODULE 1
-#define CONFIG_SC1200_WDT_MODULE 1
-#undef CONFIG_SCx200_WDT
-#undef CONFIG_60XX_WDT
-#define CONFIG_CPU5_WDT_MODULE 1
-#define CONFIG_W83627HF_WDT_MODULE 1
-#define CONFIG_W83877F_WDT_MODULE 1
-#define CONFIG_MACHZ_WDT_MODULE 1
-
-/*
- * ISA-based Watchdog Cards
- */
-#define CONFIG_PCWATCHDOG_MODULE 1
-#undef CONFIG_MIXCOMWD
-#define CONFIG_WDT_MODULE 1
-#undef CONFIG_WDT_501
-
-/*
- * PCI-based Watchdog Cards
- */
-#define CONFIG_PCIPCWATCHDOG_MODULE 1
-#define CONFIG_WDTPCI_MODULE 1
-#define CONFIG_WDT_501_PCI 1
-
-/*
- * USB-based Watchdog Cards
- */
-#define CONFIG_USBPCWATCHDOG_MODULE 1
-#define CONFIG_HW_RANDOM_MODULE 1
-#define CONFIG_NVRAM_MODULE 1
-#define CONFIG_RTC 1
-#define CONFIG_DTLK_MODULE 1
-#define CONFIG_R3964_MODULE 1
-#undef CONFIG_APPLICOM
-#define CONFIG_SONYPI_MODULE 1
-
-/*
- * Ftape, the floppy tape device driver
- */
-#define CONFIG_AGP 1
-#define CONFIG_AGP_ALI 1
-#define CONFIG_AGP_ATI 1
-#define CONFIG_AGP_AMD 1
-#define CONFIG_AGP_AMD64 1
-#define CONFIG_AGP_INTEL 1
-#define CONFIG_AGP_INTEL_MCH 1
-#define CONFIG_AGP_NVIDIA 1
-#define CONFIG_AGP_SIS 1
-#define CONFIG_AGP_SWORKS 1
-#define CONFIG_AGP_VIA 1
-#define CONFIG_AGP_EFFICEON 1
-#define CONFIG_DRM 1
-#define CONFIG_DRM_TDFX_MODULE 1
-#define CONFIG_DRM_GAMMA_MODULE 1
-#define CONFIG_DRM_R128_MODULE 1
-#define CONFIG_DRM_RADEON_MODULE 1
-#define CONFIG_DRM_I810_MODULE 1
-#define CONFIG_DRM_I830_MODULE 1
-#define CONFIG_DRM_MGA_MODULE 1
-#define CONFIG_DRM_SIS_MODULE 1
-
-/*
- * PCMCIA character devices
- */
-#define CONFIG_SYNCLINK_CS_MODULE 1
-#define CONFIG_MWAVE_MODULE 1
-#undef CONFIG_RAW_DRIVER
-#define CONFIG_HANGCHECK_TIMER_MODULE 1
-
-/*
- * I2C support
- */
-#define CONFIG_I2C_MODULE 1
-#define CONFIG_I2C_CHARDEV_MODULE 1
-
-/*
- * I2C Algorithms
- */
-#define CONFIG_I2C_ALGOBIT_MODULE 1
-#define CONFIG_I2C_ALGOPCF_MODULE 1
-
-/*
- * I2C Hardware Bus support
- */
-#define CONFIG_I2C_ALI1535_MODULE 1
-#define CONFIG_I2C_ALI1563_MODULE 1
-#define CONFIG_I2C_ALI15X3_MODULE 1
-#define CONFIG_I2C_AMD756_MODULE 1
-#define CONFIG_I2C_AMD8111_MODULE 1
-#define CONFIG_I2C_I801_MODULE 1
-#define CONFIG_I2C_I810_MODULE 1
-#define CONFIG_I2C_ISA_MODULE 1
-#define CONFIG_I2C_NFORCE2_MODULE 1
-#undef CONFIG_I2C_PARPORT
-#undef CONFIG_I2C_PARPORT_LIGHT
-#define CONFIG_I2C_PIIX4_MODULE 1
-#define CONFIG_I2C_PROSAVAGE_MODULE 1
-#define CONFIG_I2C_SAVAGE4_MODULE 1
-#undef CONFIG_SCx200_ACB
-#define CONFIG_I2C_SIS5595_MODULE 1
-#define CONFIG_I2C_SIS630_MODULE 1
-#define CONFIG_I2C_SIS96X_MODULE 1
-#define CONFIG_I2C_VIA_MODULE 1
-#define CONFIG_I2C_VIAPRO_MODULE 1
-#define CONFIG_I2C_VOODOO3_MODULE 1
-
-/*
- * Hardware Sensors Chip support
- */
-#define CONFIG_I2C_SENSOR_MODULE 1
-#define CONFIG_SENSORS_ADM1021_MODULE 1
-#define CONFIG_SENSORS_ASB100_MODULE 1
-#define CONFIG_SENSORS_DS1621_MODULE 1
-#define CONFIG_SENSORS_FSCHER_MODULE 1
-#define CONFIG_SENSORS_GL518SM_MODULE 1
-#define CONFIG_SENSORS_IT87_MODULE 1
-#define CONFIG_SENSORS_LM75_MODULE 1
-#define CONFIG_SENSORS_LM78_MODULE 1
-#define CONFIG_SENSORS_LM80_MODULE 1
-#define CONFIG_SENSORS_LM83_MODULE 1
-#define CONFIG_SENSORS_LM85_MODULE 1
-#define CONFIG_SENSORS_LM90_MODULE 1
-#define CONFIG_SENSORS_MAX1619_MODULE 1
-#define CONFIG_SENSORS_VIA686A_MODULE 1
-#define CONFIG_SENSORS_W83781D_MODULE 1
-#define CONFIG_SENSORS_W83L785TS_MODULE 1
-#define CONFIG_SENSORS_W83627HF_MODULE 1
-
-/*
- * Other I2C Chip support
- */
-#define CONFIG_SENSORS_EEPROM_MODULE 1
-#define CONFIG_SENSORS_PCF8574_MODULE 1
-#define CONFIG_SENSORS_PCF8591_MODULE 1
-#define CONFIG_SENSORS_RTC8564_MODULE 1
-#undef CONFIG_I2C_DEBUG_CORE
-#undef CONFIG_I2C_DEBUG_ALGO
-#undef CONFIG_I2C_DEBUG_BUS
-#undef CONFIG_I2C_DEBUG_CHIP
-
-/*
- * Misc devices
- */
-#define CONFIG_IBM_ASM_MODULE 1
-
-/*
- * Multimedia devices
- */
-#define CONFIG_VIDEO_DEV_MODULE 1
-
-/*
- * Video For Linux
- */
-
-/*
- * Video Adapters
- */
-#define CONFIG_VIDEO_BT848_MODULE 1
-#define CONFIG_VIDEO_PMS_MODULE 1
-#define CONFIG_VIDEO_BWQCAM_MODULE 1
-#define CONFIG_VIDEO_CQCAM_MODULE 1
-#define CONFIG_VIDEO_W9966_MODULE 1
-#define CONFIG_VIDEO_CPIA_MODULE 1
-#define CONFIG_VIDEO_CPIA_PP_MODULE 1
-#define CONFIG_VIDEO_CPIA_USB_MODULE 1
-#define CONFIG_VIDEO_SAA5246A_MODULE 1
-#define CONFIG_VIDEO_SAA5249_MODULE 1
-#define CONFIG_TUNER_3036_MODULE 1
-#define CONFIG_VIDEO_STRADIS_MODULE 1
-#define CONFIG_VIDEO_ZORAN_MODULE 1
-#define CONFIG_VIDEO_ZORAN_BUZ_MODULE 1
-#define CONFIG_VIDEO_ZORAN_DC10_MODULE 1
-#define CONFIG_VIDEO_ZORAN_DC30_MODULE 1
-#define CONFIG_VIDEO_ZORAN_LML33_MODULE 1
-#define CONFIG_VIDEO_ZORAN_LML33R10_MODULE 1
-#define CONFIG_VIDEO_SAA7134_MODULE 1
-#define CONFIG_VIDEO_MXB_MODULE 1
-#define CONFIG_VIDEO_DPC_MODULE 1
-#define CONFIG_VIDEO_HEXIUM_ORION_MODULE 1
-#define CONFIG_VIDEO_HEXIUM_GEMINI_MODULE 1
-#define CONFIG_VIDEO_CX88_MODULE 1
-
-/*
- * Radio Adapters
- */
-#define CONFIG_RADIO_CADET_MODULE 1
-#define CONFIG_RADIO_RTRACK_MODULE 1
-#define CONFIG_RADIO_RTRACK2_MODULE 1
-#define CONFIG_RADIO_AZTECH_MODULE 1
-#define CONFIG_RADIO_GEMTEK_MODULE 1
-#define CONFIG_RADIO_GEMTEK_PCI_MODULE 1
-#define CONFIG_RADIO_MAXIRADIO_MODULE 1
-#define CONFIG_RADIO_MAESTRO_MODULE 1
-#define CONFIG_RADIO_SF16FMI_MODULE 1
-#define CONFIG_RADIO_SF16FMR2_MODULE 1
-#define CONFIG_RADIO_TERRATEC_MODULE 1
-#define CONFIG_RADIO_TRUST_MODULE 1
-#define CONFIG_RADIO_TYPHOON_MODULE 1
-#define CONFIG_RADIO_TYPHOON_PROC_FS 1
-#define CONFIG_RADIO_ZOLTRIX_MODULE 1
-
-/*
- * Digital Video Broadcasting Devices
- */
-#undef CONFIG_DVB
-#define CONFIG_VIDEO_SAA7146_MODULE 1
-#define CONFIG_VIDEO_SAA7146_VV_MODULE 1
-#define CONFIG_VIDEO_VIDEOBUF_MODULE 1
-#define CONFIG_VIDEO_TUNER_MODULE 1
-#define CONFIG_VIDEO_BUF_MODULE 1
-#define CONFIG_VIDEO_BTCX_MODULE 1
-#define CONFIG_VIDEO_IR_MODULE 1
-
-/*
- * Graphics support
- */
-#define CONFIG_FB 1
-#undef CONFIG_FB_PM2
-#undef CONFIG_FB_CYBER2000
-#undef CONFIG_FB_ASILIANT
-#undef CONFIG_FB_IMSTT
-#define CONFIG_FB_VGA16_MODULE 1
-#define CONFIG_FB_VESA 1
-#define CONFIG_VIDEO_SELECT 1
-#define CONFIG_FB_HGA_MODULE 1
-#define CONFIG_FB_HGA_ACCEL 1
-#define CONFIG_FB_RIVA_MODULE 1
-#define CONFIG_FB_I810_MODULE 1
-#define CONFIG_FB_I810_GTF 1
-#define CONFIG_FB_MATROX_MODULE 1
-#define CONFIG_FB_MATROX_MILLENIUM 1
-#define CONFIG_FB_MATROX_MYSTIQUE 1
-#define CONFIG_FB_MATROX_G450 1
-#define CONFIG_FB_MATROX_G100 1
-#define CONFIG_FB_MATROX_I2C_MODULE 1
-#define CONFIG_FB_MATROX_MAVEN_MODULE 1
-#define CONFIG_FB_MATROX_MULTIHEAD 1
-#undef CONFIG_FB_RADEON_OLD
-#define CONFIG_FB_RADEON_MODULE 1
-#define CONFIG_FB_RADEON_I2C 1
-#undef CONFIG_FB_RADEON_DEBUG
-#define CONFIG_FB_ATY128_MODULE 1
-#define CONFIG_FB_ATY_MODULE 1
-#define CONFIG_FB_ATY_CT 1
-#define CONFIG_FB_ATY_GX 1
-#undef CONFIG_FB_ATY_XL_INIT
-#undef CONFIG_FB_SIS
-#define CONFIG_FB_NEOMAGIC_MODULE 1
-#define CONFIG_FB_KYRO_MODULE 1
-#define CONFIG_FB_3DFX_MODULE 1
-#define CONFIG_FB_3DFX_ACCEL 1
-#define CONFIG_FB_VOODOO1_MODULE 1
-#define CONFIG_FB_TRIDENT_MODULE 1
-#define CONFIG_FB_TRIDENT_ACCEL 1
-#undef CONFIG_FB_VIRTUAL
-
-/*
- * Console display driver support
- */
-#define CONFIG_VGA_CONSOLE 1
-#define CONFIG_MDA_CONSOLE_MODULE 1
-#define CONFIG_DUMMY_CONSOLE 1
-#define CONFIG_FRAMEBUFFER_CONSOLE 1
-#define CONFIG_PCI_CONSOLE 1
-#undef CONFIG_FONTS
-#define CONFIG_FONT_8x8 1
-#define CONFIG_FONT_8x16 1
-
-/*
- * Logo configuration
- */
-#define CONFIG_LOGO 1
-#undef CONFIG_LOGO_LINUX_MONO
-#undef CONFIG_LOGO_LINUX_VGA16
-#define CONFIG_LOGO_LINUX_CLUT224 1
-
-/*
- * Sound
- */
-#define CONFIG_SOUND_MODULE 1
-
-/*
- * Advanced Linux Sound Architecture
- */
-#define CONFIG_SND_MODULE 1
-#define CONFIG_SND_TIMER_MODULE 1
-#define CONFIG_SND_PCM_MODULE 1
-#define CONFIG_SND_HWDEP_MODULE 1
-#define CONFIG_SND_RAWMIDI_MODULE 1
-#define CONFIG_SND_SEQUENCER_MODULE 1
-#define CONFIG_SND_SEQ_DUMMY_MODULE 1
-#define CONFIG_SND_OSSEMUL 1
-#define CONFIG_SND_MIXER_OSS_MODULE 1
-#define CONFIG_SND_PCM_OSS_MODULE 1
-#define CONFIG_SND_SEQUENCER_OSS 1
-#define CONFIG_SND_RTCTIMER_MODULE 1
-#undef CONFIG_SND_VERBOSE_PRINTK
-#undef CONFIG_SND_DEBUG
-
-/*
- * Generic devices
- */
-#define CONFIG_SND_MPU401_UART_MODULE 1
-#define CONFIG_SND_OPL3_LIB_MODULE 1
-#define CONFIG_SND_OPL4_LIB_MODULE 1
-#define CONFIG_SND_VX_LIB_MODULE 1
-#define CONFIG_SND_DUMMY_MODULE 1
-#define CONFIG_SND_VIRMIDI_MODULE 1
-#define CONFIG_SND_MTPAV_MODULE 1
-#undef CONFIG_SND_SERIAL_U16550
-#define CONFIG_SND_MPU401_MODULE 1
-
-/*
- * ISA devices
- */
-#define CONFIG_SND_AD1816A_MODULE 1
-#define CONFIG_SND_AD1848_MODULE 1
-#define CONFIG_SND_CS4231_MODULE 1
-#define CONFIG_SND_CS4232_MODULE 1
-#define CONFIG_SND_CS4236_MODULE 1
-#define CONFIG_SND_ES968_MODULE 1
-#define CONFIG_SND_ES1688_MODULE 1
-#define CONFIG_SND_ES18XX_MODULE 1
-#define CONFIG_SND_GUSCLASSIC_MODULE 1
-#define CONFIG_SND_GUSEXTREME_MODULE 1
-#define CONFIG_SND_GUSMAX_MODULE 1
-#define CONFIG_SND_INTERWAVE_MODULE 1
-#define CONFIG_SND_INTERWAVE_STB_MODULE 1
-#define CONFIG_SND_OPTI92X_AD1848_MODULE 1
-#define CONFIG_SND_OPTI92X_CS4231_MODULE 1
-#define CONFIG_SND_OPTI93X_MODULE 1
-#define CONFIG_SND_SB8_MODULE 1
-#define CONFIG_SND_SB16_MODULE 1
-#define CONFIG_SND_SBAWE_MODULE 1
-#define CONFIG_SND_SB16_CSP 1
-#undef CONFIG_SND_WAVEFRONT
-#define CONFIG_SND_ALS100_MODULE 1
-#define CONFIG_SND_AZT2320_MODULE 1
-#define CONFIG_SND_CMI8330_MODULE 1
-#define CONFIG_SND_DT019X_MODULE 1
-#define CONFIG_SND_OPL3SA2_MODULE 1
-#define CONFIG_SND_SGALAXY_MODULE 1
-#define CONFIG_SND_SSCAPE_MODULE 1
-
-/*
- * PCI devices
- */
-#define CONFIG_SND_AC97_CODEC_MODULE 1
-#define CONFIG_SND_ALI5451_MODULE 1
-#define CONFIG_SND_ATIIXP_MODULE 1
-#define CONFIG_SND_AU8810_MODULE 1
-#define CONFIG_SND_AU8820_MODULE 1
-#define CONFIG_SND_AU8830_MODULE 1
-#define CONFIG_SND_AZT3328_MODULE 1
-#define CONFIG_SND_BT87X_MODULE 1
-#define CONFIG_SND_CS46XX_MODULE 1
-#define CONFIG_SND_CS46XX_NEW_DSP 1
-#define CONFIG_SND_CS4281_MODULE 1
-#define CONFIG_SND_EMU10K1_MODULE 1
-#define CONFIG_SND_KORG1212_MODULE 1
-#define CONFIG_SND_MIXART_MODULE 1
-#define CONFIG_SND_NM256_MODULE 1
-#define CONFIG_SND_RME32_MODULE 1
-#define CONFIG_SND_RME96_MODULE 1
-#define CONFIG_SND_RME9652_MODULE 1
-#define CONFIG_SND_HDSP_MODULE 1
-#define CONFIG_SND_TRIDENT_MODULE 1
-#define CONFIG_SND_YMFPCI_MODULE 1
-#define CONFIG_SND_ALS4000_MODULE 1
-#define CONFIG_SND_CMIPCI_MODULE 1
-#define CONFIG_SND_ENS1370_MODULE 1
-#define CONFIG_SND_ENS1371_MODULE 1
-#define CONFIG_SND_ES1938_MODULE 1
-#define CONFIG_SND_ES1968_MODULE 1
-#define CONFIG_SND_MAESTRO3_MODULE 1
-#define CONFIG_SND_FM801_MODULE 1
-#define CONFIG_SND_FM801_TEA575X_MODULE 1
-#define CONFIG_SND_ICE1712_MODULE 1
-#define CONFIG_SND_ICE1724_MODULE 1
-#define CONFIG_SND_INTEL8X0_MODULE 1
-#define CONFIG_SND_INTEL8X0M_MODULE 1
-#define CONFIG_SND_SONICVIBES_MODULE 1
-#define CONFIG_SND_VIA82XX_MODULE 1
-#define CONFIG_SND_VX222_MODULE 1
-
-/*
- * ALSA USB devices
- */
-#define CONFIG_SND_USB_AUDIO_MODULE 1
-
-/*
- * PCMCIA devices
- */
-#undef CONFIG_SND_VXPOCKET
-#undef CONFIG_SND_VXP440
-#define CONFIG_SND_PDAUDIOCF_MODULE 1
-
-/*
- * Open Sound System
- */
-#undef CONFIG_SOUND_PRIME
-
-/*
- * USB support
- */
-#define CONFIG_USB 1
-#undef CONFIG_USB_DEBUG
-
-/*
- * Miscellaneous USB options
- */
-#define CONFIG_USB_DEVICEFS 1
-#undef CONFIG_USB_BANDWIDTH
-#undef CONFIG_USB_DYNAMIC_MINORS
-
-/*
- * USB Host Controller Drivers
- */
-#define CONFIG_USB_EHCI_HCD_MODULE 1
-#define CONFIG_USB_EHCI_SPLIT_ISO 1
-#define CONFIG_USB_EHCI_ROOT_HUB_TT 1
-#define CONFIG_USB_OHCI_HCD_MODULE 1
-#define CONFIG_USB_UHCI_HCD_MODULE 1
-
-/*
- * USB Device Class drivers
- */
-#define CONFIG_USB_AUDIO_MODULE 1
-
-/*
- * USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
- */
-#define CONFIG_USB_MIDI_MODULE 1
-#define CONFIG_USB_ACM_MODULE 1
-#define CONFIG_USB_PRINTER_MODULE 1
-#define CONFIG_USB_STORAGE_MODULE 1
-#undef CONFIG_USB_STORAGE_DEBUG
-#define CONFIG_USB_STORAGE_DATAFAB 1
-#define CONFIG_USB_STORAGE_FREECOM 1
-#define CONFIG_USB_STORAGE_ISD200 1
-#define CONFIG_USB_STORAGE_DPCM 1
-#define CONFIG_USB_STORAGE_HP8200e 1
-#define CONFIG_USB_STORAGE_SDDR09 1
-#define CONFIG_USB_STORAGE_SDDR55 1
-#define CONFIG_USB_STORAGE_JUMPSHOT 1
-
-/*
- * USB Human Interface Devices (HID)
- */
-#define CONFIG_USB_HID 1
-#define CONFIG_USB_HIDINPUT 1
-#define CONFIG_HID_FF 1
-#define CONFIG_HID_PID 1
-#define CONFIG_LOGITECH_FF 1
-#define CONFIG_THRUSTMASTER_FF 1
-#define CONFIG_USB_HIDDEV 1
-#define CONFIG_USB_AIPTEK_MODULE 1
-#define CONFIG_USB_WACOM_MODULE 1
-#define CONFIG_USB_KBTAB_MODULE 1
-#define CONFIG_USB_POWERMATE_MODULE 1
-#define CONFIG_USB_MTOUCH_MODULE 1
-#define CONFIG_USB_EGALAX_MODULE 1
-#define CONFIG_USB_XPAD_MODULE 1
-#define CONFIG_USB_ATI_REMOTE_MODULE 1
-
-/*
- * USB Imaging devices
- */
-#define CONFIG_USB_MDC800_MODULE 1
-#define CONFIG_USB_MICROTEK_MODULE 1
-#define CONFIG_USB_HPUSBSCSI_MODULE 1
-
-/*
- * USB Multimedia devices
- */
-#define CONFIG_USB_DABUSB_MODULE 1
-#define CONFIG_USB_VICAM_MODULE 1
-#define CONFIG_USB_DSBR_MODULE 1
-#define CONFIG_USB_IBMCAM_MODULE 1
-#define CONFIG_USB_KONICAWC_MODULE 1
-#define CONFIG_USB_OV511_MODULE 1
-#define CONFIG_USB_SE401_MODULE 1
-#define CONFIG_USB_STV680_MODULE 1
-#define CONFIG_USB_W9968CF_MODULE 1
-
-/*
- * USB Network adaptors
- */
-#define CONFIG_USB_CATC_MODULE 1
-#define CONFIG_USB_KAWETH_MODULE 1
-#define CONFIG_USB_PEGASUS_MODULE 1
-#define CONFIG_USB_RTL8150_MODULE 1
-#define CONFIG_USB_USBNET_MODULE 1
-
-/*
- * USB Host-to-Host Cables
- */
-#define CONFIG_USB_ALI_M5632 1
-#define CONFIG_USB_AN2720 1
-#define CONFIG_USB_BELKIN 1
-#define CONFIG_USB_GENESYS 1
-#define CONFIG_USB_NET1080 1
-#define CONFIG_USB_PL2301 1
-
-/*
- * Intelligent USB Devices/Gadgets
- */
-#define CONFIG_USB_ARMLINUX 1
-#define CONFIG_USB_EPSON2888 1
-#define CONFIG_USB_ZAURUS 1
-#define CONFIG_USB_CDCETHER 1
-
-/*
- * USB Network Adapters
- */
-#define CONFIG_USB_AX8817X 1
-
-/*
- * USB port drivers
- */
-#define CONFIG_USB_USS720_MODULE 1
-
-/*
- * USB Serial Converter support
- */
-#define CONFIG_USB_SERIAL_MODULE 1
-#define CONFIG_USB_SERIAL_GENERIC 1
-#define CONFIG_USB_SERIAL_BELKIN_MODULE 1
-#define CONFIG_USB_SERIAL_DIGI_ACCELEPORT_MODULE 1
-#define CONFIG_USB_SERIAL_EMPEG_MODULE 1
-#define CONFIG_USB_SERIAL_FTDI_SIO_MODULE 1
-#define CONFIG_USB_SERIAL_VISOR_MODULE 1
-#define CONFIG_USB_SERIAL_IPAQ_MODULE 1
-#define CONFIG_USB_SERIAL_IR_MODULE 1
-#define CONFIG_USB_SERIAL_EDGEPORT_MODULE 1
-#define CONFIG_USB_SERIAL_EDGEPORT_TI_MODULE 1
-#define CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE 1
-#define CONFIG_USB_SERIAL_KEYSPAN_MODULE 1
-#define CONFIG_USB_SERIAL_KEYSPAN_MPR 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA28 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA28X 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA28XA 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA28XB 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA19 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA18X 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA19W 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA19QW 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA19QI 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA49W 1
-#define CONFIG_USB_SERIAL_KEYSPAN_USA49WLC 1
-#define CONFIG_USB_SERIAL_KLSI_MODULE 1
-#define CONFIG_USB_SERIAL_KOBIL_SCT_MODULE 1
-#define CONFIG_USB_SERIAL_MCT_U232_MODULE 1
-#define CONFIG_USB_SERIAL_PL2303_MODULE 1
-#define CONFIG_USB_SERIAL_SAFE_MODULE 1
-#define CONFIG_USB_SERIAL_SAFE_PADDED 1
-#define CONFIG_USB_SERIAL_CYBERJACK_MODULE 1
-#define CONFIG_USB_SERIAL_XIRCOM_MODULE 1
-#define CONFIG_USB_SERIAL_OMNINET_MODULE 1
-#define CONFIG_USB_EZUSB 1
-
-/*
- * USB Miscellaneous drivers
- */
-#define CONFIG_USB_EMI62_MODULE 1
-#undef CONFIG_USB_EMI26
-#define CONFIG_USB_TIGL_MODULE 1
-#define CONFIG_USB_AUERSWALD_MODULE 1
-#define CONFIG_USB_RIO500_MODULE 1
-#define CONFIG_USB_LEGOTOWER_MODULE 1
-#define CONFIG_USB_LCD_MODULE 1
-#define CONFIG_USB_LED_MODULE 1
-#undef CONFIG_USB_CYTHERM
-#define CONFIG_USB_PHIDGETSERVO_MODULE 1
-#define CONFIG_USB_TEST_MODULE 1
-
-/*
- * USB Gadget Support
- */
-#undef CONFIG_USB_GADGET
-
-/*
- * File systems
- */
-#define CONFIG_EXT2_FS 1
-#define CONFIG_EXT2_FS_XATTR 1
-#define CONFIG_EXT2_FS_POSIX_ACL 1
-#define CONFIG_EXT2_FS_SECURITY 1
-#define CONFIG_EXT3_FS_MODULE 1
-#define CONFIG_EXT3_FS_XATTR 1
-#define CONFIG_EXT3_FS_POSIX_ACL 1
-#define CONFIG_EXT3_FS_SECURITY 1
-#define CONFIG_JBD_MODULE 1
-#undef CONFIG_JBD_DEBUG
-#define CONFIG_FS_MBCACHE 1
-#define CONFIG_REISERFS_FS_MODULE 1
-#undef CONFIG_REISERFS_CHECK
-#define CONFIG_REISERFS_PROC_INFO 1
-#define CONFIG_REISERFS_FS_XATTR 1
-#define CONFIG_REISERFS_FS_POSIX_ACL 1
-#define CONFIG_REISERFS_FS_SECURITY 1
-#define CONFIG_JFS_FS_MODULE 1
-#define CONFIG_JFS_POSIX_ACL 1
-#undef CONFIG_JFS_DEBUG
-#undef CONFIG_JFS_STATISTICS
-#define CONFIG_FS_POSIX_ACL 1
-#define CONFIG_XFS_FS_MODULE 1
-#undef CONFIG_XFS_RT
-#define CONFIG_XFS_QUOTA 1
-#define CONFIG_XFS_SECURITY 1
-#define CONFIG_XFS_POSIX_ACL 1
-#define CONFIG_MINIX_FS_MODULE 1
-#define CONFIG_ROMFS_FS_MODULE 1
-#define CONFIG_QUOTA 1
-#undef CONFIG_QFMT_V1
-#define CONFIG_QFMT_V2 1
-#define CONFIG_QUOTACTL 1
-#define CONFIG_AUTOFS_FS_MODULE 1
-#define CONFIG_AUTOFS4_FS_MODULE 1
-
-/*
- * CD-ROM/DVD Filesystems
- */
-#define CONFIG_ISO9660_FS 1
-#define CONFIG_JOLIET 1
-#define CONFIG_ZISOFS 1
-#define CONFIG_ZISOFS_FS 1
-#define CONFIG_UDF_FS_MODULE 1
-
-/*
- * DOS/FAT/NT Filesystems
- */
-#define CONFIG_FAT_FS_MODULE 1
-#define CONFIG_MSDOS_FS_MODULE 1
-#define CONFIG_VFAT_FS_MODULE 1
-#undef CONFIG_NTFS_FS
-
-/*
- * Pseudo filesystems
- */
-#define CONFIG_PROC_FS 1
-#define CONFIG_PROC_KCORE 1
-#define CONFIG_SYSFS 1
-#undef CONFIG_DEVFS_FS
-#define CONFIG_DEVPTS_FS_XATTR 1
-#define CONFIG_DEVPTS_FS_SECURITY 1
-#define CONFIG_TMPFS 1
-#define CONFIG_HUGETLBFS 1
-#define CONFIG_HUGETLB_PAGE 1
-#define CONFIG_RAMFS 1
-
-/*
- * Miscellaneous filesystems
- */
-#undef CONFIG_ADFS_FS
-#define CONFIG_AFFS_FS_MODULE 1
-#define CONFIG_HFS_FS_MODULE 1
-#define CONFIG_HFSPLUS_FS_MODULE 1
-#define CONFIG_BEFS_FS_MODULE 1
-#undef CONFIG_BEFS_DEBUG
-#define CONFIG_BFS_FS_MODULE 1
-#define CONFIG_EFS_FS_MODULE 1
-#undef CONFIG_JFFS_FS
-#define CONFIG_JFFS2_FS_MODULE 1
-#define CONFIG_JFFS2_FS_DEBUG 0
-#define CONFIG_JFFS2_FS_NAND 1
-#define CONFIG_CRAMFS_MODULE 1
-#define CONFIG_VXFS_FS_MODULE 1
-#undef CONFIG_HPFS_FS
-#define CONFIG_QNX4FS_FS_MODULE 1
-#undef CONFIG_QNX4FS_RW
-#define CONFIG_SYSV_FS_MODULE 1
-#define CONFIG_UFS_FS_MODULE 1
-#undef CONFIG_UFS_FS_WRITE
-
-/*
- * Network File Systems
- */
-#define CONFIG_NFS_FS_MODULE 1
-#define CONFIG_NFS_V3 1
-#define CONFIG_NFS_V4 1
-#define CONFIG_NFS_DIRECTIO 1
-#define CONFIG_NFSD_MODULE 1
-#define CONFIG_NFSD_V3 1
-#define CONFIG_NFSD_V4 1
-#define CONFIG_NFSD_TCP 1
-#define CONFIG_LOCKD_MODULE 1
-#define CONFIG_LOCKD_V4 1
-#define CONFIG_EXPORTFS_MODULE 1
-#define CONFIG_SUNRPC_MODULE 1
-#define CONFIG_SUNRPC_GSS_MODULE 1
-#define CONFIG_RPCSEC_GSS_KRB5_MODULE 1
-#define CONFIG_SMB_FS_MODULE 1
-#undef CONFIG_SMB_NLS_DEFAULT
-#define CONFIG_CIFS_MODULE 1
-#undef CONFIG_CIFS_STATS
-#define CONFIG_NCP_FS_MODULE 1
-#define CONFIG_NCPFS_PACKET_SIGNING 1
-#define CONFIG_NCPFS_IOCTL_LOCKING 1
-#define CONFIG_NCPFS_STRONG 1
-#define CONFIG_NCPFS_NFS_NS 1
-#define CONFIG_NCPFS_OS2_NS 1
-#define CONFIG_NCPFS_SMALLDOS 1
-#define CONFIG_NCPFS_NLS 1
-#define CONFIG_NCPFS_EXTRAS 1
-#undef CONFIG_CODA_FS
-#undef CONFIG_AFS_FS
-
-/*
- * Partition Types
- */
-#define CONFIG_PARTITION_ADVANCED 1
-#undef CONFIG_ACORN_PARTITION
-#define CONFIG_OSF_PARTITION 1
-#undef CONFIG_AMIGA_PARTITION
-#undef CONFIG_ATARI_PARTITION
-#define CONFIG_MAC_PARTITION 1
-#define CONFIG_MSDOS_PARTITION 1
-#define CONFIG_BSD_DISKLABEL 1
-#define CONFIG_MINIX_SUBPARTITION 1
-#define CONFIG_SOLARIS_X86_PARTITION 1
-#define CONFIG_UNIXWARE_DISKLABEL 1
-#undef CONFIG_LDM_PARTITION
-#undef CONFIG_NEC98_PARTITION
-#define CONFIG_SGI_PARTITION 1
-#undef CONFIG_ULTRIX_PARTITION
-#define CONFIG_SUN_PARTITION 1
-#define CONFIG_EFI_PARTITION 1
-
-/*
- * Native Language Support
- */
-#define CONFIG_NLS 1
-#define CONFIG_NLS_DEFAULT "utf8"
-#define CONFIG_NLS_CODEPAGE_437_MODULE 1
-#define CONFIG_NLS_CODEPAGE_737_MODULE 1
-#define CONFIG_NLS_CODEPAGE_775_MODULE 1
-#define CONFIG_NLS_CODEPAGE_850_MODULE 1
-#define CONFIG_NLS_CODEPAGE_852_MODULE 1
-#define CONFIG_NLS_CODEPAGE_855_MODULE 1
-#define CONFIG_NLS_CODEPAGE_857_MODULE 1
-#define CONFIG_NLS_CODEPAGE_860_MODULE 1
-#define CONFIG_NLS_CODEPAGE_861_MODULE 1
-#define CONFIG_NLS_CODEPAGE_862_MODULE 1
-#define CONFIG_NLS_CODEPAGE_863_MODULE 1
-#define CONFIG_NLS_CODEPAGE_864_MODULE 1
-#define CONFIG_NLS_CODEPAGE_865_MODULE 1
-#define CONFIG_NLS_CODEPAGE_866_MODULE 1
-#define CONFIG_NLS_CODEPAGE_869_MODULE 1
-#define CONFIG_NLS_CODEPAGE_936_MODULE 1
-#define CONFIG_NLS_CODEPAGE_950_MODULE 1
-#define CONFIG_NLS_CODEPAGE_932_MODULE 1
-#define CONFIG_NLS_CODEPAGE_949_MODULE 1
-#define CONFIG_NLS_CODEPAGE_874_MODULE 1
-#define CONFIG_NLS_ISO8859_8_MODULE 1
-#define CONFIG_NLS_CODEPAGE_1250_MODULE 1
-#define CONFIG_NLS_CODEPAGE_1251_MODULE 1
-#define CONFIG_NLS_ISO8859_1_MODULE 1
-#define CONFIG_NLS_ISO8859_2_MODULE 1
-#define CONFIG_NLS_ISO8859_3_MODULE 1
-#define CONFIG_NLS_ISO8859_4_MODULE 1
-#define CONFIG_NLS_ISO8859_5_MODULE 1
-#define CONFIG_NLS_ISO8859_6_MODULE 1
-#define CONFIG_NLS_ISO8859_7_MODULE 1
-#define CONFIG_NLS_ISO8859_9_MODULE 1
-#define CONFIG_NLS_ISO8859_13_MODULE 1
-#define CONFIG_NLS_ISO8859_14_MODULE 1
-#define CONFIG_NLS_ISO8859_15_MODULE 1
-#define CONFIG_NLS_KOI8_R_MODULE 1
-#define CONFIG_NLS_KOI8_U_MODULE 1
-#define CONFIG_NLS_UTF8_MODULE 1
-
-/*
- * Profiling support
- */
-#define CONFIG_PROFILING 1
-#define CONFIG_OPROFILE_MODULE 1
-
-/*
- * Kernel hacking
- */
-#define CONFIG_DEBUG_KERNEL 1
-#define CONFIG_EARLY_PRINTK 1
-#define CONFIG_DEBUG_STACKOVERFLOW 1
-#undef CONFIG_DEBUG_STACK_USAGE
-#undef CONFIG_DEBUG_SLAB
-#define CONFIG_MAGIC_SYSRQ 1
-#undef CONFIG_DEBUG_SPINLOCK
-#undef CONFIG_DEBUG_PAGEALLOC
-#undef CONFIG_DEBUG_HIGHMEM
-#define CONFIG_DEBUG_INFO 1
-#define CONFIG_DEBUG_SPINLOCK_SLEEP 1
-#undef CONFIG_FRAME_POINTER
-#define CONFIG_X86_FIND_SMP_CONFIG 1
-#define CONFIG_X86_MPPARSE 1
-
-/*
- * Linux VServer
- */
-#define CONFIG_VSERVER_LEGACY 1
-#define CONFIG_PROC_SECURE 1
-#undef CONFIG_VSERVER_HARDCPU
-#undef CONFIG_INOXID_NONE
-#undef CONFIG_INOXID_GID16
-#define CONFIG_INOXID_GID24 1
-#undef CONFIG_INOXID_GID32
-#undef CONFIG_INOXID_MAGIC
-
-/*
- * Security options
- */
-#define CONFIG_SECURITY 1
-#define CONFIG_SECURITY_NETWORK 1
-#define CONFIG_SECURITY_CAPABILITIES 1
-#undef CONFIG_SECURITY_ROOTPLUG
-#define CONFIG_SECURITY_SELINUX 1
-#define CONFIG_SECURITY_SELINUX_BOOTPARAM 1
-#define CONFIG_SECURITY_SELINUX_DISABLE 1
-#define CONFIG_SECURITY_SELINUX_DEVELOP 1
-#undef CONFIG_SECURITY_SELINUX_MLS
-
-/*
- * Cryptographic options
- */
-#define CONFIG_CRYPTO 1
-#define CONFIG_CRYPTO_HMAC 1
-#define CONFIG_CRYPTO_NULL_MODULE 1
-#define CONFIG_CRYPTO_MD4_MODULE 1
-#define CONFIG_CRYPTO_MD5 1
-#define CONFIG_CRYPTO_SHA1_MODULE 1
-#define CONFIG_CRYPTO_SHA256_MODULE 1
-#define CONFIG_CRYPTO_SHA512_MODULE 1
-#define CONFIG_CRYPTO_DES_MODULE 1
-#define CONFIG_CRYPTO_BLOWFISH_MODULE 1
-#define CONFIG_CRYPTO_TWOFISH_MODULE 1
-#define CONFIG_CRYPTO_SERPENT_MODULE 1
-#define CONFIG_CRYPTO_AES_MODULE 1
-#define CONFIG_CRYPTO_CAST5_MODULE 1
-#define CONFIG_CRYPTO_CAST6_MODULE 1
-#define CONFIG_CRYPTO_ARC4_MODULE 1
-#define CONFIG_CRYPTO_DEFLATE_MODULE 1
-#define CONFIG_CRYPTO_MICHAEL_MIC_MODULE 1
-#define CONFIG_CRYPTO_CRC32C_MODULE 1
-#undef CONFIG_CRYPTO_TEST
-
-/*
- * Library routines
- */
-#define CONFIG_CRC32 1
-#define CONFIG_LIBCRC32C_MODULE 1
-#define CONFIG_ZLIB_INFLATE 1
-#define CONFIG_ZLIB_DEFLATE_MODULE 1
-#define CONFIG_X86_SMP 1
-#define CONFIG_X86_HT 1
-#define CONFIG_X86_BIOS_REBOOT 1
-#define CONFIG_X86_TRAMPOLINE 1
-#define CONFIG_X86_STD_RESOURCES 1
-#define CONFIG_PC 1
index fb86768..c688095 100644 (file)
@@ -6,11 +6,13 @@
 # define __kernel      /* default address space */
 # define __safe                __attribute__((safe))
 # define __force       __attribute__((force))
+extern void __chk_user_ptr(void __user *);
 #else
 # define __user
 # define __kernel
 # define __safe
 # define __force
+# define __chk_user_ptr(x) (void)0
 #endif
 
 #ifdef __KERNEL__
index fe2527b..f8115ac 100644 (file)
@@ -37,8 +37,6 @@ typedef __s64 Elf64_Sxword;
 
 #define PT_GNU_STACK   (PT_LOOS + 0x474e551)
 
-#define PT_GNU_STACK           (PT_LOOS + 0x474e551)
-
 /* These constants define the different elf file types */
 #define ET_NONE   0
 #define ET_REL    1
index 87f4b25..65d6cfd 100644 (file)
@@ -8,9 +8,10 @@
 #define FUTEX_WAKE (1)
 #define FUTEX_FD (2)
 #define FUTEX_REQUEUE (3)
-
+#define FUTEX_CMP_REQUEUE (4)
 
 long do_futex(unsigned long uaddr, int op, int val,
-               unsigned long timeout, unsigned long uaddr2, int val2);
+               unsigned long timeout, unsigned long uaddr2, int val2,
+               int val3);
 
 #endif
index 4b92547..41e79a7 100644 (file)
@@ -134,7 +134,7 @@ typedef struct hdlc_device_struct {
                        int dce_pvc_count;
 
                        struct timer_list timer;
-                       int last_poll;
+                       unsigned long last_poll;
                        int reliable;
                        int dce_changed;
                        int request;
@@ -149,8 +149,9 @@ typedef struct hdlc_device_struct {
                        cisco_proto settings;
 
                        struct timer_list timer;
-                       int last_poll;
+                       unsigned long last_poll;
                        int up;
+                       int request_sent;
                        u32 txseq; /* TX sequence number */
                        u32 rxseq; /* RX sequence number */
                }cisco;
index 232d8fd..e334a5f 100644 (file)
@@ -28,9 +28,10 @@ static inline void *kmap(struct page *page)
 
 #define kunmap(page) do { (void) (page); } while (0)
 
-#define kmap_atomic(page, idx)         page_address(page)
-#define kunmap_atomic(addr, idx)       do { } while (0)
-#define kmap_atomic_to_page(ptr)       virt_to_page(ptr)
+#define kmap_atomic(page, idx)                 page_address(page)
+#define kmap_atomic_nocache_pfn(pfn, idx)      pfn_to_kaddr(pfn)
+#define kunmap_atomic(addr, idx)               do { } while (0)
+#define kmap_atomic_to_page(ptr)               virt_to_page(ptr)
 
 #endif /* CONFIG_HIGHMEM */
 
index 0aef418..8a773de 100644 (file)
@@ -305,14 +305,17 @@ static inline void ide_std_init_ports(hw_regs_t *hw,
 
 #include <asm/ide.h>
 
+/* needed on alpha, x86/x86_64, ia64, mips, ppc32 and sh */
+#ifndef IDE_ARCH_OBSOLETE_DEFAULTS
+# define ide_default_io_base(index)    (0)
+# define ide_default_irq(base)         (0)
+# define ide_init_default_irq(base)    (0)
+#endif
+
 /*
  * ide_init_hwif_ports() is OBSOLETE and will be removed in 2.7 series.
  * New ports shouldn't define IDE_ARCH_OBSOLETE_INIT in <asm/ide.h>.
- *
- * m68k, m68knommu (broken) and i386-pc9800 (broken)
- * still have their own versions.
  */
-#ifndef CONFIG_M68K
 #ifdef IDE_ARCH_OBSOLETE_INIT
 static inline void ide_init_hwif_ports(hw_regs_t *hw,
                                       unsigned long io_addr,
@@ -335,9 +338,15 @@ static inline void ide_init_hwif_ports(hw_regs_t *hw,
 #endif
 }
 #else
-# define ide_init_hwif_ports(hw, io, ctl, irq) do {} while (0)
+static inline void ide_init_hwif_ports(hw_regs_t *hw,
+                                      unsigned long io_addr,
+                                      unsigned long ctl_addr,
+                                      int *irq)
+{
+       if (io_addr || ctl_addr)
+               printk(KERN_WARNING "%s: must not be called\n", __FUNCTION__);
+}
 #endif /* IDE_ARCH_OBSOLETE_INIT */
-#endif /* !M68K */
 
 /* Currently only m68k, apus and m8xx need it */
 #ifndef IDE_ARCH_ACK_INTR
@@ -1552,9 +1561,15 @@ typedef struct ide_pci_enablebit_s {
        u8      val;    /* value of masked reg when "enabled" */
 } ide_pci_enablebit_t;
 
+enum {
+       /* Uses ISA control ports not PCI ones. */
+       IDEPCI_FLAG_ISA_PORTS           = (1 << 0),
+
+       IDEPCI_FLAG_FORCE_MASTER        = (1 << 1),
+       IDEPCI_FLAG_FORCE_PDC           = (1 << 2),
+};
+
 typedef struct ide_pci_device_s {
-       u16                     vendor;
-       u16                     device;
        char                    *name;
        void                    (*init_setup)(struct pci_dev *, struct ide_pci_device_s *);
        void                    (*init_setup_dma)(struct pci_dev *, struct ide_pci_device_s *, ide_hwif_t *);
@@ -1568,7 +1583,7 @@ typedef struct ide_pci_device_s {
        u8                      bootable;
        unsigned int            extra;
        struct ide_pci_device_s *next;
-       u8                      isa_ports;      /* Uses ISA control ports not PCI ones */
+       u8                      flags;
 } ide_pci_device_t;
 
 extern void ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *);
index b1289a7..554bbcf 100644 (file)
@@ -144,7 +144,7 @@ static inline void mca_do_proc_init(void)
 {
 }
 
-static inline void mca_set_adapter_procfn(int slot, MCA_ProcFn *fn, void* dev)
+static inline void mca_set_adapter_procfn(int slot, MCA_ProcFn fn, void* dev)
 {
 }
 #endif
index f018fb3..134cefb 100644 (file)
@@ -496,9 +496,19 @@ int shmem_set_policy(struct vm_area_struct *vma, struct mempolicy *new);
 struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
                                        unsigned long addr);
 struct file *shmem_file_setup(char * name, loff_t size, unsigned long flags);
-void shmem_lock(struct file * file, int lock);
+int shmem_lock(struct file * file, int lock);
 int shmem_zero_setup(struct vm_area_struct *);
 
+static inline int can_do_mlock(void)
+{
+       if (capable(CAP_IPC_LOCK))
+               return 1;
+       if (current->rlim[RLIMIT_MEMLOCK].rlim_cur != 0)
+               return 1;
+       return 0;
+}
+
+
 /*
  * Parameter block passed down to zap_pte_range in exceptional cases.
  */
@@ -716,6 +726,8 @@ extern unsigned int nr_used_zone_pages(void);
 extern struct page * vmalloc_to_page(void *addr);
 extern struct page * follow_page(struct mm_struct *mm, unsigned long address,
                int write);
+extern struct page * follow_page_pfn(struct mm_struct *mm,
+               unsigned long address, int write, unsigned long *pfn);
 extern int remap_page_range(struct vm_area_struct *vma, unsigned long from,
                unsigned long to, unsigned long size, pgprot_t prot);
 
index 2b983a7..b43a7f8 100644 (file)
 #define PCI_DEVICE_ID_NS_SCx200_AUDIO  0x0503
 #define PCI_DEVICE_ID_NS_SCx200_VIDEO  0x0504
 #define PCI_DEVICE_ID_NS_SCx200_XBUS   0x0505
+#define PCI_DEVICE_ID_NS_SC1100_BRIDGE 0x0510
 #define PCI_DEVICE_ID_NS_87410         0xd001
 
 #define PCI_VENDOR_ID_TSENG            0x100c
 #define PCI_DEVICE_ID_NVIDIA_UTNT2             0x0029
 #define PCI_DEVICE_ID_NVIDIA_VTNT2             0x002C
 #define PCI_DEVICE_ID_NVIDIA_UVTNT2            0x002D
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_IDE  0x0035
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA 0x0036
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2        0x003e
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_IDE  0x0053
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA 0x0054
+#define PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2        0x0055
 #define PCI_DEVICE_ID_NVIDIA_NFORCE2_IDE       0x0065
 #define PCI_DEVICE_ID_NVIDIA_MCP2_AUDIO                0x006a
 #define PCI_DEVICE_ID_NVIDIA_NFORCE2S_IDE      0x0085
index 8efb6bc..90db1cc 100644 (file)
@@ -4,6 +4,7 @@
 #include <linux/config.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
+#include <linux/stddef.h>
 
 struct tvec_t_base_s;
 
index 570778d..bad993c 100644 (file)
@@ -23,6 +23,7 @@ struct vm_struct {
  *     Highlevel APIs for driver use
  */
 extern void *vmalloc(unsigned long size);
+extern void *vmalloc_exec(unsigned long size);
 extern void *vmalloc_32(unsigned long size);
 extern void *__vmalloc(unsigned long size, int gfp_mask, pgprot_t prot);
 extern void vfree(void *addr);
index 0caf7bc..94ea1ed 100644 (file)
@@ -150,7 +150,7 @@ struct ipv4_config
 };
 
 extern struct ipv4_config ipv4_config;
-DECLARE_SNMP_STAT(struct ip_mib, ip_statistics);
+DECLARE_SNMP_STAT(struct ipstats_mib, ip_statistics);
 #define IP_INC_STATS(field)            SNMP_INC_STATS(ip_statistics, field)
 #define IP_INC_STATS_BH(field)         SNMP_INC_STATS_BH(ip_statistics, field)
 #define IP_INC_STATS_USER(field)       SNMP_INC_STATS_USER(ip_statistics, field)
index d0ca223..14d41c4 100644 (file)
@@ -57,6 +57,8 @@ struct rt6_info
                struct rt6_info         *next;
        } u;
 
+       struct inet6_dev                *rt6i_idev;
+
 #define rt6i_dev                       u.dst.dev
 #define rt6i_nexthop                   u.dst.neighbour
 #define rt6i_expires                   u.dst.expires
index 37876f7..06b350c 100644 (file)
@@ -111,7 +111,7 @@ extern int sysctl_ipv6_bindv6only;
 extern int sysctl_mld_max_msf;
 
 /* MIBs */
-DECLARE_SNMP_STAT(struct ipv6_mib, ipv6_statistics);
+DECLARE_SNMP_STAT(struct ipstats_mib, ipv6_statistics);
 #define IP6_INC_STATS(field)           SNMP_INC_STATS(ipv6_statistics, field)
 #define IP6_INC_STATS_BH(field)                SNMP_INC_STATS_BH(ipv6_statistics, field)
 #define IP6_INC_STATS_USER(field)      SNMP_INC_STATS_USER(ipv6_statistics, field)
index 4cbac7d..c9914c6 100644 (file)
@@ -56,6 +56,8 @@ struct rtable
                struct rtable           *rt_next;
        } u;
 
+       struct in_device        *idev;
+       
        unsigned                rt_flags;
        unsigned                rt_type;
 
index 67e22b8..c702dda 100644 (file)
  * cacheline machine it makes a *lot* of sense -AK
  */ 
 
+struct snmp_item {
+       char *name;
+       int offset;
+};
+
+#define SNMP_ITEM(mib,entry,procname)  {       \
+       .name = procname,                       \
+       .offset = offsetof(mib, entry),         \
+}
+
+#define SNMP_ITEM_SENTINEL {                   \
+       .name = NULL,                           \
+       .offset = 0,                            \
+}
+
 /*
  * RFC 1213:  MIB-II
  * RFC 2011 (updates 1213):  SNMPv2-MIB-IP
  * RFC 2863:  Interfaces Group MIB
- */
-struct ip_mib
-{
-       unsigned long   IpInReceives;
-       unsigned long   IpInHdrErrors;
-       unsigned long   IpInAddrErrors;
-       unsigned long   IpForwDatagrams;
-       unsigned long   IpInUnknownProtos;
-       unsigned long   IpInDiscards;
-       unsigned long   IpInDelivers;
-       unsigned long   IpOutRequests;
-       unsigned long   IpOutDiscards;
-       unsigned long   IpOutNoRoutes;
-       unsigned long   IpReasmTimeout;
-       unsigned long   IpReasmReqds;
-       unsigned long   IpReasmOKs;
-       unsigned long   IpReasmFails;
-       unsigned long   IpFragOKs;
-       unsigned long   IpFragFails;
-       unsigned long   IpFragCreates;
-       unsigned long   __pad[0]; 
-};
-/*
  * RFC 2465:  IPv6 MIB: General Group
+ * draft-ietf-ipv6-rfc2011-update-10.txt: MIB for IP: IP Statistics Tables
  */
-struct ipv6_mib
+struct ipstats_mib
 {
-       unsigned long   Ip6InReceives;
-       unsigned long   Ip6InHdrErrors;
-       unsigned long   Ip6InTooBigErrors;
-       unsigned long   Ip6InNoRoutes;
-       unsigned long   Ip6InAddrErrors;
-       unsigned long   Ip6InUnknownProtos;
-       unsigned long   Ip6InTruncatedPkts;
-       unsigned long   Ip6InDiscards;
-       unsigned long   Ip6InDelivers;
-       unsigned long   Ip6OutForwDatagrams;
-       unsigned long   Ip6OutRequests;
-       unsigned long   Ip6OutDiscards;
-       unsigned long   Ip6OutNoRoutes;
-       unsigned long   Ip6ReasmTimeout;
-       unsigned long   Ip6ReasmReqds;
-       unsigned long   Ip6ReasmOKs;
-       unsigned long   Ip6ReasmFails;
-       unsigned long   Ip6FragOKs;
-       unsigned long   Ip6FragFails;
-       unsigned long   Ip6FragCreates;
-       unsigned long   Ip6InMcastPkts;
-       unsigned long   Ip6OutMcastPkts;
+       unsigned long   InReceives;
+       unsigned long   InHdrErrors;
+       unsigned long   InTooBigErrors;
+       unsigned long   InNoRoutes;
+       unsigned long   InAddrErrors;
+       unsigned long   InUnknownProtos;
+       unsigned long   InTruncatedPkts;
+       unsigned long   InDiscards;
+       unsigned long   InDelivers;
+       unsigned long   OutForwDatagrams;
+       unsigned long   OutRequests;
+       unsigned long   OutDiscards;
+       unsigned long   OutNoRoutes;
+       unsigned long   ReasmTimeout;
+       unsigned long   ReasmReqds;
+       unsigned long   ReasmOKs;
+       unsigned long   ReasmFails;
+       unsigned long   FragOKs;
+       unsigned long   FragFails;
+       unsigned long   FragCreates;
+       unsigned long   InMcastPkts;
+       unsigned long   OutMcastPkts;
        unsigned long   __pad[0]; 
 };
  
index f9d4ecc..f0c5a23 100644 (file)
@@ -92,7 +92,7 @@ config SYSVIPC
 
 config POSIX_MQUEUE
        bool "POSIX Message Queues"
-       depends on EXPERIMENTAL
+       depends on NET && EXPERIMENTAL
        ---help---
          POSIX variant of message queues is a part of IPC. In POSIX message
          queues every message has a priority which decides about succession
index ea24094..9400dcd 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -505,14 +505,11 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
        case SHM_LOCK:
        case SHM_UNLOCK:
        {
-/* Allow superuser to lock segment in memory */
-/* Should the pages be faulted in here or leave it to user? */
-/* need to determine interaction with current->swappable */
-               if (!capable(CAP_IPC_LOCK)) {
+               /* Allow superuser to lock segment in memory */
+               if (!can_do_mlock()) {
                        err = -EPERM;
                        goto out;
                }
-
                shp = shm_lock(shmid);
                if(shp==NULL) {
                        err = -EINVAL;
@@ -527,9 +524,11 @@ asmlinkage long sys_shmctl (int shmid, int cmd, struct shmid_ds __user *buf)
                        goto out_unlock;
                
                if(cmd==SHM_LOCK) {
-                       if (!is_file_hugepages(shp->shm_file))
-                               shmem_lock(shp->shm_file, 1);
-                       shp->shm_flags |= SHM_LOCKED;
+                       if (!is_file_hugepages(shp->shm_file)) {
+                               err = shmem_lock(shp->shm_file, 1);
+                               if (!err)
+                                       shp->shm_flags |= SHM_LOCKED;
+                       }
                } else {
                        if (!is_file_hugepages(shp->shm_file))
                                shmem_lock(shp->shm_file, 0);
index 7c99ebe..0064a79 100644 (file)
@@ -381,8 +381,11 @@ int ipcperms (struct kern_ipc_perm *ipcp, short flag)
                granted_mode >>= 3;
        /* is there some bit set in requested_mode but not in granted_mode? */
        if ((requested_mode & ~granted_mode & 0007) && 
-           !capable(CAP_IPC_OWNER))
-               return -1;
+           !capable(CAP_IPC_OWNER)) {
+               if (!can_do_mlock())  {
+                       return -1;
+               }
+       }       
 
        return security_ipc_permission(ipcp, flag);
 }
index 9dccddd..540574c 100644 (file)
@@ -210,7 +210,8 @@ asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set,
 
 #ifdef CONFIG_FUTEX
 asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, int val,
-               struct compat_timespec __user *utime, u32 __user *uaddr2)
+               struct compat_timespec __user *utime, u32 __user *uaddr2,
+               int val3)
 {
        struct timespec t;
        unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
@@ -221,11 +222,11 @@ asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, int val,
                        return -EFAULT;
                timeout = timespec_to_jiffies(&t) + 1;
        }
-       if (op == FUTEX_REQUEUE)
+       if (op >= FUTEX_REQUEUE)
                val2 = (int) (long) utime;
 
        return do_futex((unsigned long)uaddr, op, val, timeout,
-                       (unsigned long)uaddr2, val2);
+                       (unsigned long)uaddr2, val2, val3);
 }
 #endif
 
@@ -398,8 +399,8 @@ asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid,
        return ret;
 }
 
-asmlinkage int compat_sys_sched_getaffinity(compat_pid_t pid, unsigned int len,
-                                          compat_ulong_t __user *user_mask_ptr)
+asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, unsigned int len,
+                                            compat_ulong_t __user *user_mask_ptr)
 {
        unsigned long kernel_mask;
        mm_segment_t old_fs;
index c6cd8ae..445499f 100644 (file)
@@ -744,6 +744,14 @@ static void exit_notify(struct task_struct *tsk)
        tsk->state = state;
        tsk->flags |= PF_DEAD;
 
+       /*
+        * Clear these here so that update_process_times() won't try to deliver
+        * itimer, profile or rlimit signals to this task while it is in late exit.
+        */
+       tsk->it_virt_incr = 0;
+       tsk->it_prof_value = 0;
+       tsk->rlim[RLIMIT_CPU].rlim_cur = RLIM_INFINITY;
+
        /*
         * In the preemption case it must be impossible for the task
         * to get runnable again, so use "_raw_" unlock to keep
index 18d5119..f7afaf5 100644 (file)
@@ -96,6 +96,7 @@ struct futex_q {
  */
 struct futex_hash_bucket {
        spinlock_t              lock;
+       unsigned int        nqueued;
        struct list_head       chain;
 };
 
@@ -318,13 +319,14 @@ out:
  * physical page.
  */
 static int futex_requeue(unsigned long uaddr1, unsigned long uaddr2,
-                               int nr_wake, int nr_requeue)
+                        int nr_wake, int nr_requeue, int *valp)
 {
        union futex_key key1, key2;
        struct futex_hash_bucket *bh1, *bh2;
        struct list_head *head1;
        struct futex_q *this, *next;
        int ret, drop_count = 0;
+       unsigned int nqueued;
 
        down_read(&current->mm->mmap_sem);
 
@@ -338,12 +340,41 @@ static int futex_requeue(unsigned long uaddr1, unsigned long uaddr2,
        bh1 = hash_futex(&key1);
        bh2 = hash_futex(&key2);
 
+       nqueued = bh1->nqueued;
+       if (likely(valp != NULL)) {
+               int curval;
+
+               /* In order to avoid doing get_user while
+                  holding bh1->lock and bh2->lock, nqueued
+                  (monotonically increasing field) must be first
+                  read, then *uaddr1 fetched from userland and
+                  after acquiring lock nqueued field compared with
+                  the stored value.  The smp_mb () below
+                  makes sure that bh1->nqueued is read from memory
+                  before *uaddr1.  */
+               smp_mb();
+
+               if (get_user(curval, (int *)uaddr1) != 0) {
+                       ret = -EFAULT;
+                       goto out;
+               }
+               if (curval != *valp) {
+                       ret = -EAGAIN;
+                       goto out;
+               }
+       }
+
        if (bh1 < bh2)
                spin_lock(&bh1->lock);
        spin_lock(&bh2->lock);
        if (bh1 > bh2)
                spin_lock(&bh1->lock);
 
+       if (unlikely(nqueued != bh1->nqueued && valp != NULL)) {
+               ret = -EAGAIN;
+               goto out_unlock;
+       }
+
        head1 = &bh1->chain;
        list_for_each_entry_safe(this, next, head1, list) {
                if (!match_futex (&this->key, &key1))
@@ -365,6 +396,7 @@ static int futex_requeue(unsigned long uaddr1, unsigned long uaddr2,
                }
        }
 
+out_unlock:
        spin_unlock(&bh1->lock);
        if (bh1 != bh2)
                spin_unlock(&bh2->lock);
@@ -398,6 +430,7 @@ static void queue_me(struct futex_q *q, int fd, struct file *filp)
        q->lock_ptr = &bh->lock;
 
        spin_lock(&bh->lock);
+       bh->nqueued++;
        list_add_tail(&q->list, &bh->chain);
        spin_unlock(&bh->lock);
 }
@@ -625,7 +658,7 @@ out:
 }
 
 long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
-               unsigned long uaddr2, int val2)
+               unsigned long uaddr2, int val2, int val3)
 {
        int ret;
 
@@ -641,7 +674,10 @@ long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
                ret = futex_fd(uaddr, val);
                break;
        case FUTEX_REQUEUE:
-               ret = futex_requeue(uaddr, uaddr2, val, val2);
+               ret = futex_requeue(uaddr, uaddr2, val, val2, NULL);
+               break;
+       case FUTEX_CMP_REQUEUE:
+               ret = futex_requeue(uaddr, uaddr2, val, val2, &val3);
                break;
        default:
                ret = -ENOSYS;
@@ -651,7 +687,8 @@ long do_futex(unsigned long uaddr, int op, int val, unsigned long timeout,
 
 
 asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
-                         struct timespec __user *utime, u32 __user *uaddr2)
+                         struct timespec __user *utime, u32 __user *uaddr2,
+                         int val3)
 {
        struct timespec t;
        unsigned long timeout = MAX_SCHEDULE_TIMEOUT;
@@ -665,11 +702,11 @@ asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
        /*
         * requeue parameter in 'utime' if op == FUTEX_REQUEUE.
         */
-       if (op == FUTEX_REQUEUE)
+       if (op >= FUTEX_REQUEUE)
                val2 = (int) (long) utime;
 
        return do_futex((unsigned long)uaddr, op, val, timeout,
-                       (unsigned long)uaddr2, val2);
+                       (unsigned long)uaddr2, val2, val3);
 }
 
 static struct super_block *
index 2e60249..da0ec5b 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/err.h>
 #include <linux/unistd.h>
 #include <linux/file.h>
+#include <linux/module.h>
 #include <asm/semaphore.h>
 
 struct kthread_create_info
@@ -41,7 +42,7 @@ int kthread_should_stop(void)
 {
        return (kthread_stop_info.k == current);
 }
-
+EXPORT_SYMBOL(kthread_should_stop);
 
 static void kthread_exit_files(void)
 {
@@ -144,6 +145,7 @@ struct task_struct *kthread_create(int (*threadfn)(void *data),
 
        return create.result;
 }
+EXPORT_SYMBOL(kthread_create);
 
 void kthread_bind(struct task_struct *k, unsigned int cpu)
 {
@@ -153,6 +155,7 @@ void kthread_bind(struct task_struct *k, unsigned int cpu)
        set_task_cpu(k, cpu);
        k->cpus_allowed = cpumask_of_cpu(cpu);
 }
+EXPORT_SYMBOL(kthread_bind);
 
 int kthread_stop(struct task_struct *k)
 {
@@ -180,3 +183,4 @@ int kthread_stop(struct task_struct *k)
 
        return ret;
 }
+EXPORT_SYMBOL(kthread_stop);
index 53c92f1..c46921c 100644 (file)
@@ -1671,11 +1671,8 @@ static runqueue_t *find_busiest_queue(struct sched_group *group)
  * tasks if there is an imbalance.
  *
  * Called with this_rq unlocked.
- *
- * This function is marked noinline to work around a compiler
- * bug with gcc 3.3.3-hammer on x86-64.
  */
-static int noinline load_balance(int this_cpu, runqueue_t *this_rq,
+static int load_balance(int this_cpu, runqueue_t *this_rq,
                        struct sched_domain *sd, enum idle_type idle)
 {
        struct sched_group *group;
@@ -1692,6 +1689,11 @@ static int noinline load_balance(int this_cpu, runqueue_t *this_rq,
        busiest = find_busiest_queue(group);
        if (!busiest)
                goto out_balanced;
+       /*
+        * This should be "impossible", but since load
+        * balancing is inherently racy and statistical,
+        * it could happen in theory.
+        */
        if (unlikely(busiest == this_rq)) {
                WARN_ON(1);
                goto out_balanced;
@@ -1855,6 +1857,15 @@ static void active_load_balance(runqueue_t *busiest, int busiest_cpu)
                }
 
                rq = cpu_rq(push_cpu);
+
+               /*
+                * This condition is "impossible", but since load
+                * balancing is inherently a bit racy and statistical,
+                * it can trigger.. Reported by Bjorn Helgaas on a
+                * 128-cpu setup.
+                */
+               if (unlikely(busiest == rq))
+                       goto next_group;
                double_lock_balance(busiest, rq);
                move_tasks(rq, push_cpu, busiest, 1, sd, IDLE);
                spin_unlock(&rq->lock);
index d8755d8..1ef2d54 100644 (file)
@@ -2214,7 +2214,7 @@ sys_kill(int pid, int sig)
 }
 
 /**
- *  sys_tkill - send signal to one specific thread
+ *  sys_tgkill - send signal to one specific thread
  *  @tgid: the thread group ID of the thread
  *  @pid: the PID of the thread
  *  @sig: signal to be sent
@@ -2515,6 +2515,8 @@ out:
        return error;
 }
 
+#endif /* SIGPROCMASK */
+
 #ifndef __sparc__
 asmlinkage long
 sys_rt_sigaction(int sig,
@@ -2544,7 +2546,6 @@ out:
        return ret;
 }
 #endif /* __sparc__ */
-#endif
 
 #ifdef __ARCH_WANT_SYS_SGETMASK
 
index 464d5cb..06fa7ef 100644 (file)
@@ -275,6 +275,7 @@ cond_syscall(compat_sys_mq_getsetattr)
 cond_syscall(sys_mbind)
 cond_syscall(sys_get_mempolicy)
 cond_syscall(sys_set_mempolicy)
+cond_syscall(compat_get_mempolicy)
 
 /* arch-specific weak syscall entries */
 cond_syscall(sys_pciconfig_read)
index 19e49a5..6e1658e 100644 (file)
@@ -667,6 +667,64 @@ out:
        return NULL;
 }
 
+struct page *
+follow_page_pfn(struct mm_struct *mm, unsigned long address, int write,
+               unsigned long *pfn_ptr)
+{
+       pgd_t *pgd;
+       pmd_t *pmd;
+       pte_t *ptep, pte;
+       unsigned long pfn;
+       struct page *page;
+
+       *pfn_ptr = 0;
+       page = follow_huge_addr(mm, address, write);
+       if (!IS_ERR(page))
+               return page;
+
+       pgd = pgd_offset(mm, address);
+       if (pgd_none(*pgd) || pgd_bad(*pgd))
+               goto out;
+
+       pmd = pmd_offset(pgd, address);
+       if (pmd_none(*pmd))
+               goto out;
+       if (pmd_huge(*pmd))
+               return follow_huge_pmd(mm, address, pmd, write);
+       if (pmd_bad(*pmd))
+               goto out;
+
+       ptep = pte_offset_map(pmd, address);
+       if (!ptep)
+               goto out;
+
+       pte = *ptep;
+       pte_unmap(ptep);
+       if (pte_present(pte)) {
+               if (write && !pte_write(pte))
+                       goto out;
+               if (write && !pte_dirty(pte)) {
+                       struct page *page = pte_page(pte);
+                       if (!PageDirty(page))
+                               set_page_dirty(page);
+               }
+               pfn = pte_pfn(pte);
+               if (pfn_valid(pfn)) {
+                       struct page *page = pfn_to_page(pfn);
+                       
+                       mark_page_accessed(page);
+                       return page;
+               } else {
+                       *pfn_ptr = pfn;
+                       return NULL;
+               }
+       }
+
+out:
+       return NULL;
+}
+
+
 /* 
  * Given a physical address, is there a useful struct page pointing to
  * it?  This may become more complex in the future if we start dealing
index b896132..1428063 100644 (file)
@@ -60,7 +60,7 @@ static int do_mlock(unsigned long start, size_t len, int on)
        struct vm_area_struct * vma, * next;
        int error;
 
-       if (on && !capable(CAP_IPC_LOCK))
+       if (on && !can_do_mlock())
                return -EPERM;
        len = PAGE_ALIGN(len);
        end = start + len;
@@ -120,7 +120,7 @@ asmlinkage long sys_mlock(unsigned long start, size_t len)
        lock_limit >>= PAGE_SHIFT;
 
        /* check against resource limits */
-       if (locked <= lock_limit)
+       if ( (locked <= lock_limit) || capable(CAP_IPC_LOCK))
                error = do_mlock(start, len, 1);
 out:
        up_write(&current->mm->mmap_sem);
@@ -145,7 +145,7 @@ static int do_mlockall(int flags)
        unsigned int def_flags;
        struct vm_area_struct * vma;
 
-       if (!capable(CAP_IPC_LOCK))
+       if (!can_do_mlock())
                return -EPERM;
 
        def_flags = 0;
@@ -183,7 +183,7 @@ asmlinkage long sys_mlockall(int flags)
        if (!vx_vmlocked_avail(current->mm, current->mm->total_vm))
                goto out;
        /* check vserver lock limits? */
-       if (current->mm->total_vm <= lock_limit)
+       if ((current->mm->total_vm <= lock_limit) || capable(CAP_IPC_LOCK))
                ret = do_mlockall(flags);
 out:
        up_write(&current->mm->mmap_sem);
index 03b30d1..cafada3 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -344,8 +344,9 @@ __insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
        validate_mm(mm);
 }
 
-static inline void __vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
-                 struct vm_area_struct *prev)
+static inline void
+__vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
+               struct vm_area_struct *prev)
 {
        prev->vm_next = vma->vm_next;
        rb_erase(&vma->vm_rb, &mm->mm_rb);
@@ -772,15 +773,17 @@ unsigned long do_mmap_pgoff(struct mm_struct *mm, struct file * file,
                        mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
 
        if (flags & MAP_LOCKED) {
-               if (!capable(CAP_IPC_LOCK))
+               if (!can_do_mlock())
                        return -EPERM;
                vm_flags |= VM_LOCKED;
        }
        /* mlock MCL_FUTURE? */
        if (vm_flags & VM_LOCKED) {
-               unsigned long locked = mm->locked_vm << PAGE_SHIFT;
+               unsigned long locked, lock_limit;
+               locked = mm->locked_vm << PAGE_SHIFT;
+               lock_limit = current->rlim[RLIMIT_MEMLOCK].rlim_cur;
                locked += len;
-               if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
+               if (locked > lock_limit && !capable(CAP_IPC_LOCK))
                        return -EAGAIN;
        }
 
@@ -1384,6 +1387,7 @@ no_mmaps:
 static void unmap_vma(struct mm_struct *mm, struct vm_area_struct *area)
 {
        size_t len = area->vm_end - area->vm_start;
+       unsigned long old_end = area->vm_end;
 
        // area->vm_mm->total_vm -= len >> PAGE_SHIFT;
        vx_vmpages_sub(area->vm_mm, len >> PAGE_SHIFT);
@@ -1402,10 +1406,9 @@ static void unmap_vma(struct mm_struct *mm, struct vm_area_struct *area)
         */
        if (area->vm_start > area->vm_mm->non_executable_cache)
                area->vm_mm->non_executable_cache = area->vm_start;
-                                                                                                                                                                                                    
        remove_vm_struct(area);
        if (unlikely(area->vm_flags & VM_EXEC))
-               arch_remove_exec_range(mm, area->vm_end);
+               arch_remove_exec_range(mm, old_end);
 }
 
 /*
@@ -1494,11 +1497,8 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
        /* most fields are the same, copy all, and then fixup */
        *new = *vma;
 
-       if (new_below) {
-               if (vma->vm_flags & VM_EXEC)
-                       arch_remove_exec_range(mm, new->vm_end);
+       if (new_below)
                new->vm_end = addr;
-       }
        else {
                new->vm_start = addr;
                new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
@@ -1517,10 +1517,14 @@ int split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
        if (new->vm_ops && new->vm_ops->open)
                new->vm_ops->open(new);
 
-       if (new_below)
+       if (new_below) {
+               unsigned long old_end = vma->vm_end;
+
                vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff +
                        ((addr - new->vm_start) >> PAGE_SHIFT), new);
-       else
+               if (vma->vm_flags & VM_EXEC)
+                       arch_remove_exec_range(mm, old_end);
+       } else
                vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
 
        return 0;
@@ -1636,9 +1640,11 @@ unsigned long do_brk(unsigned long addr, unsigned long len)
         * mlock MCL_FUTURE?
         */
        if (mm->def_flags & VM_LOCKED) {
-               unsigned long locked = mm->locked_vm << PAGE_SHIFT;
+               unsigned long locked, lock_limit;
+               locked = mm->locked_vm << PAGE_SHIFT;
+               lock_limit = current->rlim[RLIMIT_MEMLOCK].rlim_cur;
                locked += len;
-               if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
+               if (locked > lock_limit && !capable(CAP_IPC_LOCK))
                        return -EAGAIN;
                /* vserver checks ? */
        }
index 7a5582f..ec0e1aa 100644 (file)
@@ -114,7 +114,7 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
        unsigned long start, unsigned long end, unsigned int newflags)
 {
        struct mm_struct * mm = vma->vm_mm;
-       unsigned long charged = 0;
+       unsigned long charged = 0, old_end = vma->vm_end;
        pgprot_t newprot;
        unsigned int oldflags;
        pgoff_t pgoff;
@@ -181,7 +181,7 @@ success:
        vma->vm_flags = newflags;
        vma->vm_page_prot = newprot;
        if (oldflags & VM_EXEC)
-               arch_remove_exec_range(current->mm, vma->vm_end);
+               arch_remove_exec_range(current->mm, old_end);
        change_protection(vma, start, end, newprot);
        return 0;
 
index ca4ea79..4b45b59 100644 (file)
@@ -327,10 +327,12 @@ unsigned long do_mremap(unsigned long addr,
                        goto out;
        }
        if (vma->vm_flags & VM_LOCKED) {
-               unsigned long locked = current->mm->locked_vm << PAGE_SHIFT;
+               unsigned long locked, lock_limit;
+               locked = current->mm->locked_vm << PAGE_SHIFT;
+               lock_limit = current->rlim[RLIMIT_MEMLOCK].rlim_cur;
                locked += new_len - old_len;
                ret = -EAGAIN;
-               if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
+               if (locked > lock_limit && !capable(CAP_IPC_LOCK))
                        goto out;
        }
        ret = -ENOMEM;
index 1e682be..09e62cf 100644 (file)
@@ -88,6 +88,8 @@ struct pdflush_work {
        unsigned long when_i_went_to_sleep;
 };
 
+void try_to_clip_inodes(void);
+
 static int __pdflush(struct pdflush_work *my_work)
 {
        current->flags |= PF_FLUSHER;
@@ -125,6 +127,8 @@ static int __pdflush(struct pdflush_work *my_work)
                spin_unlock_irq(&pdflush_lock);
 
                (*my_work->fn)(my_work->arg0);
+               
+               try_to_clip_inodes();
 
                /*
                 * Thread creation: For how long have there been zero
index 21d58bd..ada4f73 100644 (file)
@@ -1161,17 +1161,36 @@ shmem_get_policy(struct vm_area_struct *vma, unsigned long addr)
 }
 #endif
 
-void shmem_lock(struct file *file, int lock)
+int shmem_lock(struct file *file, int lock)
 {
        struct inode *inode = file->f_dentry->d_inode;
        struct shmem_inode_info *info = SHMEM_I(inode);
+       struct mm_struct *mm = current->mm;
+       unsigned long lock_limit, locked;
+       int retval = -ENOMEM;
 
        spin_lock(&info->lock);
+       if (lock && !(info->flags & VM_LOCKED)) {
+               locked = inode->i_size >> PAGE_SHIFT;
+               locked += mm->locked_vm;
+               lock_limit = current->rlim[RLIMIT_MEMLOCK].rlim_cur;
+               lock_limit >>= PAGE_SHIFT;
+               if ((locked > lock_limit) && !capable(CAP_IPC_LOCK))
+                       goto out_nomem;
+               mm->locked_vm = locked;
+       }
+       if (!lock && (info->flags & VM_LOCKED) && mm) {
+               locked = inode->i_size >> PAGE_SHIFT;
+               mm->locked_vm -= locked;
+       }
        if (lock)
                info->flags |= VM_LOCKED;
        else
                info->flags &= ~VM_LOCKED;
+       retval = 0;
+out_nomem:
        spin_unlock(&info->lock);
+       return retval;
 }
 
 static int shmem_mmap(struct file *file, struct vm_area_struct *vma)
index 7e9deed..4f6ba90 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -477,10 +477,12 @@ struct cache_sizes malloc_sizes[] = {
 EXPORT_SYMBOL(malloc_sizes);
 
 /* Must match cache_sizes above. Out of line to keep cache footprint low. */
-static struct cache_names {
+struct cache_names {
        char *name;
        char *name_dma;
-} cache_names[] = {
+};
+
+static struct cache_names __initdata cache_names[] = {
 #define CACHE(x) { .name = "size-" #x, .name_dma = "size-" #x "(DMA)" },
 #include <linux/kmalloc_sizes.h>
        { 0, }
index 16e6f88..27400b9 100644 (file)
@@ -455,6 +455,28 @@ void *vmalloc(unsigned long size)
 
 EXPORT_SYMBOL(vmalloc);
 
+/**
+ *     vmalloc_exec  -  allocate virtually contiguous, executable memory
+ *
+ *     @size:          allocation size
+ *
+ *     Kernel-internal function to allocate enough pages to cover @size
+ *     the page level allocator and map them into contiguous and
+ *     executable kernel virtual space.
+ *
+ *     For tight cotrol over page level allocator and protection flags
+ *     use __vmalloc() instead.
+ */
+
+#ifndef PAGE_KERNEL_EXEC
+# define PAGE_KERNEL_EXEC PAGE_KERNEL
+#endif
+
+void *vmalloc_exec(unsigned long size)
+{
+       return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC);
+}
+
 /**
  *     vmalloc_32  -  allocate virtually contiguous memory (32bit addressable)
  *
index 2a111c8..da9e185 100644 (file)
 int vm_swappiness = 60;
 static long total_memory;
 
+
+
+void try_to_clip_inodes(void);
+
+
 #define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru))
 
 #ifdef ARCH_HAS_PREFETCH
@@ -1089,6 +1094,7 @@ int kswapd(void *p)
                prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
                schedule();
                finish_wait(&pgdat->kswapd_wait, &wait);
+               try_to_clip_inodes();           
                get_page_state(&ps);
                balance_pgdat(pgdat, 0, &ps);
        }
index 8d450fb..80d0243 100644 (file)
@@ -1115,8 +1115,8 @@ static int __init init_ipv4_mibs(void)
 {
        net_statistics[0] = alloc_percpu(struct linux_mib);
        net_statistics[1] = alloc_percpu(struct linux_mib);
-       ip_statistics[0] = alloc_percpu(struct ip_mib);
-       ip_statistics[1] = alloc_percpu(struct ip_mib);
+       ip_statistics[0] = alloc_percpu(struct ipstats_mib);
+       ip_statistics[1] = alloc_percpu(struct ipstats_mib);
        icmp_statistics[0] = alloc_percpu(struct icmp_mib);
        icmp_statistics[1] = alloc_percpu(struct icmp_mib);
        tcp_statistics[0] = alloc_percpu(struct tcp_mib);
index f26d67c..be1e87c 100644 (file)
@@ -46,7 +46,7 @@ static inline int ip_forward_finish(struct sk_buff *skb)
 {
        struct ip_options * opt = &(IPCB(skb)->opt);
 
-       IP_INC_STATS_BH(IpForwDatagrams);
+       IP_INC_STATS_BH(OutForwDatagrams);
 
        if (unlikely(opt->optlen))
                ip_forward_options(skb);
index 375caff..1f007c6 100644 (file)
@@ -263,7 +263,7 @@ static void ip_evictor(void)
                spin_unlock(&qp->lock);
 
                ipq_put(qp);
-               IP_INC_STATS_BH(IpReasmFails);
+               IP_INC_STATS_BH(ReasmFails);
        }
 }
 
@@ -281,8 +281,8 @@ static void ip_expire(unsigned long arg)
 
        ipq_kill(qp);
 
-       IP_INC_STATS_BH(IpReasmTimeout);
-       IP_INC_STATS_BH(IpReasmFails);
+       IP_INC_STATS_BH(ReasmTimeout);
+       IP_INC_STATS_BH(ReasmFails);
 
        if ((qp->last_in&FIRST_IN) && qp->fragments != NULL) {
                struct sk_buff *head = qp->fragments;
@@ -609,7 +609,7 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev)
        iph = head->nh.iph;
        iph->frag_off = 0;
        iph->tot_len = htons(len);
-       IP_INC_STATS_BH(IpReasmOKs);
+       IP_INC_STATS_BH(ReasmOKs);
        qp->fragments = NULL;
        return head;
 
@@ -625,7 +625,7 @@ out_oversize:
                        "Oversized IP packet from %d.%d.%d.%d.\n",
                        NIPQUAD(qp->saddr));
 out_fail:
-       IP_INC_STATS_BH(IpReasmFails);
+       IP_INC_STATS_BH(ReasmFails);
        return NULL;
 }
 
@@ -636,7 +636,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
        struct ipq *qp;
        struct net_device *dev;
        
-       IP_INC_STATS_BH(IpReasmReqds);
+       IP_INC_STATS_BH(ReasmReqds);
 
        /* Start by cleaning up the memory. */
        if (atomic_read(&ip_frag_mem) > sysctl_ipfrag_high_thresh)
@@ -661,7 +661,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
                return ret;
        }
 
-       IP_INC_STATS_BH(IpReasmFails);
+       IP_INC_STATS_BH(ReasmFails);
        kfree_skb(skb);
        return NULL;
 }
index 904f20a..2f71ed5 100644 (file)
  *     SNMP management statistics
  */
 
-DEFINE_SNMP_STAT(struct ip_mib, ip_statistics);
+DEFINE_SNMP_STAT(struct ipstats_mib, ip_statistics);
 
 /*
  *     Process Router Attention IP option
@@ -249,16 +249,16 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
                                protocol = -ret;
                                goto resubmit;
                        }
-                       IP_INC_STATS_BH(IpInDelivers);
+                       IP_INC_STATS_BH(InDelivers);
                } else {
                        if (!raw_sk) {
                                if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) {
-                                       IP_INC_STATS_BH(IpInUnknownProtos);
+                                       IP_INC_STATS_BH(InUnknownProtos);
                                        icmp_send(skb, ICMP_DEST_UNREACH,
                                                  ICMP_PROT_UNREACH, 0);
                                }
                        } else
-                               IP_INC_STATS_BH(IpInDelivers);
+                               IP_INC_STATS_BH(InDelivers);
                        kfree_skb(skb);
                }
        }
@@ -324,7 +324,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
                */
 
                if (skb_cow(skb, skb_headroom(skb))) {
-                       IP_INC_STATS_BH(IpInDiscards);
+                       IP_INC_STATS_BH(InDiscards);
                        goto drop;
                }
                iph = skb->nh.iph;
@@ -353,7 +353,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
        return dst_input(skb);
 
 inhdr_error:
-       IP_INC_STATS_BH(IpInHdrErrors);
+       IP_INC_STATS_BH(InHdrErrors);
 drop:
         kfree_skb(skb);
         return NET_RX_DROP;
@@ -372,10 +372,10 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
        if (skb->pkt_type == PACKET_OTHERHOST)
                goto drop;
 
-       IP_INC_STATS_BH(IpInReceives);
+       IP_INC_STATS_BH(InReceives);
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
-               IP_INC_STATS_BH(IpInDiscards);
+               IP_INC_STATS_BH(InDiscards);
                goto out;
        }
 
@@ -426,7 +426,7 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
                       ip_rcv_finish);
 
 inhdr_error:
-       IP_INC_STATS_BH(IpInHdrErrors);
+       IP_INC_STATS_BH(InHdrErrors);
 drop:
         kfree_skb(skb);
 out:
index 543dfba..84a3df3 100644 (file)
@@ -232,7 +232,7 @@ int ip_mc_output(struct sk_buff *skb)
        /*
         *      If the indicated interface is up and running, send the packet.
         */
-       IP_INC_STATS(IpOutRequests);
+       IP_INC_STATS(OutRequests);
 
        skb->dev = dev;
        skb->protocol = htons(ETH_P_IP);
@@ -255,7 +255,7 @@ int ip_mc_output(struct sk_buff *skb)
                    && ((rt->rt_flags&RTCF_LOCAL) || !(IPCB(skb)->flags&IPSKB_FORWARDED))
 #endif
                ) {
-                       struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
+                       struct sk_buff *newskb = skb_copy(skb, GFP_ATOMIC);
                        if (newskb)
                                NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,
                                        newskb->dev, 
@@ -271,7 +271,7 @@ int ip_mc_output(struct sk_buff *skb)
        }
 
        if (rt->rt_flags&RTCF_BROADCAST) {
-               struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
+               struct sk_buff *newskb = skb_copy(skb, GFP_ATOMIC);
                if (newskb)
                        NF_HOOK(PF_INET, NF_IP_POST_ROUTING, newskb, NULL,
                                newskb->dev, ip_dev_loopback_xmit);
@@ -285,7 +285,7 @@ int ip_mc_output(struct sk_buff *skb)
 
 int ip_output(struct sk_buff *skb)
 {
-       IP_INC_STATS(IpOutRequests);
+       IP_INC_STATS(OutRequests);
 
        if ((skb->len > dst_pmtu(skb->dst) || skb_shinfo(skb)->frag_list) &&
            !skb_shinfo(skb)->tso_size)
@@ -390,7 +390,7 @@ packet_routed:
                       dst_output);
 
 no_route:
-       IP_INC_STATS(IpOutNoRoutes);
+       IP_INC_STATS(OutNoRoutes);
        kfree_skb(skb);
        return -EHOSTUNREACH;
 }
@@ -547,7 +547,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
                }
 
                if (err == 0) {
-                       IP_INC_STATS(IpFragOKs);
+                       IP_INC_STATS(FragOKs);
                        return 0;
                }
 
@@ -556,7 +556,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
                        kfree_skb(frag);
                        frag = skb;
                }
-               IP_INC_STATS(IpFragFails);
+               IP_INC_STATS(FragFails);
                return err;
        }
 
@@ -662,7 +662,7 @@ slow_path:
                 *      Put this fragment into the sending queue.
                 */
 
-               IP_INC_STATS(IpFragCreates);
+               IP_INC_STATS(FragCreates);
 
                iph->tot_len = htons(len + hlen);
 
@@ -673,12 +673,12 @@ slow_path:
                        goto fail;
        }
        kfree_skb(skb);
-       IP_INC_STATS(IpFragOKs);
+       IP_INC_STATS(FragOKs);
        return err;
 
 fail:
        kfree_skb(skb); 
-       IP_INC_STATS(IpFragFails);
+       IP_INC_STATS(FragFails);
        return err;
 }
 
@@ -975,7 +975,7 @@ alloc_new_skb:
 
 error:
        inet->cork.length -= length;
-       IP_INC_STATS(IpOutDiscards);
+       IP_INC_STATS(OutDiscards);
        return err; 
 }
 
@@ -1088,7 +1088,7 @@ ssize_t   ip_append_page(struct sock *sk, struct page *page,
 
 error:
        inet->cork.length -= size;
-       IP_INC_STATS(IpOutDiscards);
+       IP_INC_STATS(OutDiscards);
        return err;
 }
 
@@ -1198,7 +1198,7 @@ out:
        return err;
 
 error:
-       IP_INC_STATS(IpOutDiscards);
+       IP_INC_STATS(OutDiscards);
        goto out;
 }
 
index 2a5a7df..57d84fa 100644 (file)
@@ -339,6 +339,7 @@ static void ipcomp_destroy(struct xfrm_state *x)
        struct ipcomp_data *ipcd = x->data;
        if (!ipcd)
                return;
+       xfrm_state_delete_tunnel(x);
        ipcomp_free_data(ipcd);
        kfree(ipcd);
 }
index 46f36a5..64ccce5 100644 (file)
@@ -1115,7 +1115,7 @@ static inline int ipmr_forward_finish(struct sk_buff *skb)
 {
        struct ip_options * opt = &(IPCB(skb)->opt);
 
-       IP_INC_STATS_BH(IpForwDatagrams);
+       IP_INC_STATS_BH(OutForwDatagrams);
 
        if (unlikely(opt->optlen))
                ip_forward_options(skb);
@@ -1178,7 +1178,7 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
                   to blackhole.
                 */
 
-               IP_INC_STATS_BH(IpFragFails);
+               IP_INC_STATS_BH(FragFails);
                ip_rt_put(rt);
                goto out_free;
        }
index 416e2e5..be47cbe 100644 (file)
@@ -88,7 +88,7 @@ static struct file_operations sockstat_seq_fops = {
 };
 
 static unsigned long
-fold_field(void *mib[], int nr)
+__fold_field(void *mib[], int offt)
 {
        unsigned long res = 0;
        int i;
@@ -98,14 +98,41 @@ fold_field(void *mib[], int nr)
                        continue;
                res +=
                    *((unsigned long *) (((void *) per_cpu_ptr(mib[0], i)) +
-                                        sizeof (unsigned long) * nr));
+                                        offt));
                res +=
                    *((unsigned long *) (((void *) per_cpu_ptr(mib[1], i)) +
-                                        sizeof (unsigned long) * nr));
+                                        offt));
        }
        return res;
 }
 
+#define fold_field(_mib, _nr)  __fold_field(_mib, (sizeof(unsigned long) * (_nr)))
+
+/* snmp items */
+static struct snmp_item snmp4_ipstats_list[] = {
+#define __SNMP_GEN(x,y)        SNMP_ITEM(struct ipstats_mib, x, y)
+#define SNMP_GEN(x)    __SNMP_GEN(x, #x)
+       SNMP_GEN(InReceives),
+       SNMP_GEN(InHdrErrors),
+       SNMP_GEN(InAddrErrors),
+       __SNMP_GEN(OutForwDatagrams,"ForwDatagrams"),   /* for backward compatibility */
+       SNMP_GEN(InUnknownProtos),
+       SNMP_GEN(InDiscards),
+       SNMP_GEN(InDelivers),
+       SNMP_GEN(OutRequests),
+       SNMP_GEN(OutDiscards),
+       SNMP_GEN(OutNoRoutes),
+       SNMP_GEN(ReasmTimeout),
+       SNMP_GEN(ReasmReqds),
+       SNMP_GEN(ReasmOKs),
+       SNMP_GEN(ReasmFails),
+       SNMP_GEN(FragOKs),
+       SNMP_GEN(FragFails),
+       SNMP_GEN(FragCreates),
+       SNMP_ITEM_SENTINEL
+#undef SNMP_GEN
+};
+
 /*
  *     Called from the PROCfs module. This outputs /proc/net/snmp.
  */
@@ -113,17 +140,18 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
 {
        int i;
 
-       seq_printf(seq, "Ip: Forwarding DefaultTTL InReceives InHdrErrors "
-                       "InAddrErrors ForwDatagrams InUnknownProtos "
-                       "InDiscards InDelivers OutRequests OutDiscards "
-                       "OutNoRoutes ReasmTimeout ReasmReqds ReasmOKs "
-                       "ReasmFails FragOKs FragFails FragCreates\nIp: %d %d",
+       seq_printf(seq, "Ip: Forwarding DefaultTTL");
+
+       for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
+               seq_printf(seq, " %s", snmp4_ipstats_list[i].name);
+
+       seq_printf(seq, "\nIp: %d %d",
                        ipv4_devconf.forwarding ? 1 : 2, sysctl_ip_default_ttl);
 
-       for (i = 0;
-            i < offsetof(struct ip_mib, __pad) / sizeof(unsigned long); i++)
+       for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
                seq_printf(seq, " %lu",
-                          fold_field((void **) ip_statistics, i));
+                          __fold_field((void **) ip_statistics, 
+                                       snmp4_ipstats_list[i].offset));
 
        seq_printf(seq, "\nIcmp: InMsgs InErrors InDestUnreachs InTimeExcds "
                        "InParmProbs InSrcQuenchs InRedirects InEchos "
index 9cba884..a2384c2 100644 (file)
@@ -352,7 +352,7 @@ error_fault:
        err = -EFAULT;
        kfree_skb(skb);
 error:
-       IP_INC_STATS(IpOutDiscards);
+       IP_INC_STATS(OutDiscards);
        return err; 
 }
 
index 5bdc280..6e7cbd3 100644 (file)
@@ -1040,6 +1040,8 @@ void ip_rt_redirect(u32 old_gw, u32 daddr, u32 new_gw,
                                rt->u.dst.child         = NULL;
                                if (rt->u.dst.dev)
                                        dev_hold(rt->u.dst.dev);
+                               if (rt->idev)
+                                       in_dev_hold(rt->idev);
                                rt->u.dst.obsolete      = 0;
                                rt->u.dst.lastuse       = jiffies;
                                rt->u.dst.path          = &rt->u.dst;
@@ -1321,11 +1323,17 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
 {
        struct rtable *rt = (struct rtable *) dst;
        struct inet_peer *peer = rt->peer;
+       struct in_device *idev = rt->idev;
 
        if (peer) {
                rt->peer = NULL;
                inet_putpeer(peer);
        }
+
+       if (idev) {
+               rt->idev = NULL;
+               in_dev_put(idev);
+       }
 }
 
 static void ipv4_link_failure(struct sk_buff *skb)
@@ -1486,6 +1494,7 @@ static int ip_route_input_mc(struct sk_buff *skb, u32 daddr, u32 saddr,
        rth->fl.iif     = dev->ifindex;
        rth->u.dst.dev  = &loopback_dev;
        dev_hold(rth->u.dst.dev);
+       rth->idev       = in_dev_get(rth->u.dst.dev);
        rth->fl.oif     = 0;
        rth->rt_gateway = daddr;
        rth->rt_spec_dst= spec_dst;
@@ -1695,6 +1704,7 @@ static int ip_route_input_slow(struct sk_buff *skb, u32 daddr, u32 saddr,
        rth->fl.iif     = dev->ifindex;
        rth->u.dst.dev  = out_dev->dev;
        dev_hold(rth->u.dst.dev);
+       rth->idev       = in_dev_get(rth->u.dst.dev);
        rth->fl.oif     = 0;
        rth->rt_spec_dst= spec_dst;
 
@@ -1774,6 +1784,7 @@ local_input:
        rth->fl.iif     = dev->ifindex;
        rth->u.dst.dev  = &loopback_dev;
        dev_hold(rth->u.dst.dev);
+       rth->idev       = in_dev_get(rth->u.dst.dev);
        rth->rt_gateway = daddr;
        rth->rt_spec_dst= spec_dst;
        rth->u.dst.input= ip_local_deliver;
@@ -2157,6 +2168,7 @@ make_route:
        rth->rt_iif     = oldflp->oif ? : dev_out->ifindex;
        rth->u.dst.dev  = dev_out;
        dev_hold(dev_out);
+       rth->idev       = in_dev_get(dev_out);
        rth->rt_gateway = fl.fl4_dst;
        rth->rt_spec_dst= fl.fl4_src;
 
index dd6d462..7eeddfd 100644 (file)
@@ -1369,12 +1369,12 @@ static struct dst_entry* tcp_v4_route_req(struct sock *sk,
                                         .dport = req->rmt_port } } };
 
        if (ip_route_output_flow(&rt, &fl, sk, 0)) {
-               IP_INC_STATS_BH(IpOutNoRoutes);
+               IP_INC_STATS_BH(OutNoRoutes);
                return NULL;
        }
        if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) {
                ip_rt_put(rt);
-               IP_INC_STATS_BH(IpOutNoRoutes);
+               IP_INC_STATS_BH(OutNoRoutes);
                return NULL;
        }
        return &rt->u.dst;
index e91d4f5..33e39d2 100644 (file)
@@ -667,14 +667,14 @@ snmp6_mib_free(void *ptr[2])
 
 static int __init init_ipv6_mibs(void)
 {
-       if (snmp6_mib_init((void **)ipv6_statistics, sizeof (struct ipv6_mib),
-                          __alignof__(struct ipv6_mib)) < 0)
+       if (snmp6_mib_init((void **)ipv6_statistics, sizeof (struct ipstats_mib),
+                          __alignof__(struct ipstats_mib)) < 0)
                goto err_ip_mib;
        if (snmp6_mib_init((void **)icmpv6_statistics, sizeof (struct icmpv6_mib),
-                          __alignof__(struct ipv6_mib)) < 0)
+                          __alignof__(struct icmpv6_mib)) < 0)
                goto err_icmp_mib;
        if (snmp6_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib),
-                          __alignof__(struct ipv6_mib)) < 0)
+                          __alignof__(struct udp_mib)) < 0)
                goto err_udp_mib;
        return 0;
 
index 24286b9..a5fd7d6 100644 (file)
@@ -159,7 +159,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
 
        if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) ||
            !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                kfree_skb(skb);
                return -1;
        }
@@ -172,7 +172,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
                return 1;
        }
 
-       IP6_INC_STATS_BH(Ip6InHdrErrors);
+       IP6_INC_STATS_BH(InHdrErrors);
        return -1;
 }
 
@@ -227,7 +227,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
 
        if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+8) ||
            !pskb_may_pull(skb, (skb->h.raw-skb->data)+((skb->h.raw[1]+1)<<3))) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                kfree_skb(skb);
                return -1;
        }
@@ -236,7 +236,7 @@ static int ipv6_rthdr_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
 
        if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr) ||
            skb->pkt_type != PACKET_HOST) {
-               IP6_INC_STATS_BH(Ip6InAddrErrors);
+               IP6_INC_STATS_BH(InAddrErrors);
                kfree_skb(skb);
                return -1;
        }
@@ -252,13 +252,13 @@ looped_back:
        }
 
        if (hdr->type != IPV6_SRCRT_TYPE_0) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->type) - skb->nh.raw);
                return -1;
        }
        
        if (hdr->hdrlen & 0x01) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->hdrlen) - skb->nh.raw);
                return -1;
        }
@@ -271,7 +271,7 @@ looped_back:
        n = hdr->hdrlen >> 1;
 
        if (hdr->segments_left > n) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, (&hdr->segments_left) - skb->nh.raw);
                return -1;
        }
@@ -284,7 +284,7 @@ looped_back:
                kfree_skb(skb);
                /* the copy is a forwarded packet */
                if (skb2 == NULL) {
-                       IP6_INC_STATS_BH(Ip6OutDiscards);       
+                       IP6_INC_STATS_BH(OutDiscards);  
                        return -1;
                }
                *skbp = skb = skb2;
@@ -302,7 +302,7 @@ looped_back:
        addr += i - 1;
 
        if (ipv6_addr_is_multicast(addr)) {
-               IP6_INC_STATS_BH(Ip6InAddrErrors);
+               IP6_INC_STATS_BH(InAddrErrors);
                kfree_skb(skb);
                return -1;
        }
@@ -319,7 +319,7 @@ looped_back:
        }
        if (skb->dst->dev->flags&IFF_LOOPBACK) {
                if (skb->nh.ipv6h->hop_limit <= 1) {
-                       IP6_INC_STATS_BH(Ip6InHdrErrors);
+                       IP6_INC_STATS_BH(InHdrErrors);
                        icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT,
                                    0, skb->dev);
                        kfree_skb(skb);
@@ -436,24 +436,24 @@ static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff)
        if (skb->nh.raw[optoff+1] != 4 || (optoff&3) != 2) {
                LIMIT_NETDEBUG(
                         printk(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", skb->nh.raw[optoff+1]));
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                goto drop;
        }
 
        pkt_len = ntohl(*(u32*)(skb->nh.raw+optoff+2));
        if (pkt_len <= IPV6_MAXPLEN) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff+2);
                return 0;
        }
        if (skb->nh.ipv6h->payload_len) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, optoff);
                return 0;
        }
 
        if (pkt_len > skb->len - sizeof(struct ipv6hdr)) {
-               IP6_INC_STATS_BH(Ip6InTruncatedPkts);
+               IP6_INC_STATS_BH(InTruncatedPkts);
                goto drop;
        }
        if (pkt_len + sizeof(struct ipv6hdr) < skb->len) {
index 24e3def..cfecd15 100644 (file)
@@ -174,7 +174,7 @@ static inline int icmpv6_xrlim_allow(struct sock *sk, int type,
         */
        dst = ip6_route_output(sk, fl);
        if (dst->error) {
-               IP6_INC_STATS(Ip6OutNoRoutes);
+               IP6_INC_STATS(OutNoRoutes);
        } else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) {
                res = 1;
        } else {
index a274679..61695f3 100644 (file)
@@ -64,10 +64,10 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
        if (skb->pkt_type == PACKET_OTHERHOST)
                goto drop;
 
-       IP6_INC_STATS_BH(Ip6InReceives);
+       IP6_INC_STATS_BH(InReceives);
 
        if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) {
-               IP6_INC_STATS_BH(Ip6InDiscards);
+               IP6_INC_STATS_BH(InDiscards);
                goto out;
        }
 
@@ -80,7 +80,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
                goto err;
 
        if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                goto drop;
        }
 
@@ -97,7 +97,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
                        goto truncated;
                if (pkt_len + sizeof(struct ipv6hdr) < skb->len) {
                        if (__pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr))){
-                               IP6_INC_STATS_BH(Ip6InHdrErrors);
+                               IP6_INC_STATS_BH(InHdrErrors);
                                goto drop;
                        }
                        hdr = skb->nh.ipv6h;
@@ -109,7 +109,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
        if (hdr->nexthdr == NEXTHDR_HOP) {
                skb->h.raw = (u8*)(hdr+1);
                if (ipv6_parse_hopopts(skb, offsetof(struct ipv6hdr, nexthdr)) < 0) {
-                       IP6_INC_STATS_BH(Ip6InHdrErrors);
+                       IP6_INC_STATS_BH(InHdrErrors);
                        return 0;
                }
                hdr = skb->nh.ipv6h;
@@ -117,9 +117,9 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
 
        return NF_HOOK(PF_INET6,NF_IP6_PRE_ROUTING, skb, dev, NULL, ip6_rcv_finish);
 truncated:
-       IP6_INC_STATS_BH(Ip6InTruncatedPkts);
+       IP6_INC_STATS_BH(InTruncatedPkts);
 err:
-       IP6_INC_STATS_BH(Ip6InHdrErrors);
+       IP6_INC_STATS_BH(InHdrErrors);
 drop:
        kfree_skb(skb);
 out:
@@ -194,15 +194,15 @@ resubmit:
                if (ret > 0)
                        goto resubmit;
                else if (ret == 0)
-                       IP6_INC_STATS_BH(Ip6InDelivers);
+                       IP6_INC_STATS_BH(InDelivers);
        } else {
                if (!raw_sk) {
                        if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
-                               IP6_INC_STATS_BH(Ip6InUnknownProtos);
+                               IP6_INC_STATS_BH(InUnknownProtos);
                                icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR, nhoff);
                        }
                } else {
-                       IP6_INC_STATS_BH(Ip6InDelivers);
+                       IP6_INC_STATS_BH(InDelivers);
                        kfree_skb(skb);
                }
        }
@@ -210,7 +210,7 @@ resubmit:
        return 0;
 
 discard:
-       IP6_INC_STATS_BH(Ip6InDiscards);
+       IP6_INC_STATS_BH(InDiscards);
        rcu_read_unlock();
        kfree_skb(skb);
        return 0;
@@ -227,7 +227,7 @@ int ip6_mc_input(struct sk_buff *skb)
        struct ipv6hdr *hdr;
        int deliver;
 
-       IP6_INC_STATS_BH(Ip6InMcastPkts);
+       IP6_INC_STATS_BH(InMcastPkts);
 
        hdr = skb->nh.ipv6h;
        deliver = likely(!(skb->dev->flags & (IFF_PROMISC|IFF_ALLMULTI))) ||
index d6f0db4..4f48168 100644 (file)
@@ -87,7 +87,7 @@ static inline int ip6_output_finish(struct sk_buff *skb)
        } else if (dst->neighbour)
                return dst->neighbour->output(skb);
 
-       IP6_INC_STATS_BH(Ip6OutNoRoutes);
+       IP6_INC_STATS_BH(OutNoRoutes);
        kfree_skb(skb);
        return -EINVAL;
 
@@ -121,7 +121,7 @@ int ip6_output2(struct sk_buff *skb)
                if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) &&
                    ipv6_chk_mcast_addr(dev, &skb->nh.ipv6h->daddr,
                                &skb->nh.ipv6h->saddr)) {
-                       struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
+                       struct sk_buff *newskb = skb_copy(skb, GFP_ATOMIC);
 
                        /* Do not check for IFF_ALLMULTI; multicast routing
                           is not supported in any case.
@@ -132,13 +132,13 @@ int ip6_output2(struct sk_buff *skb)
                                        ip6_dev_loopback_xmit);
 
                        if (skb->nh.ipv6h->hop_limit == 0) {
-                               IP6_INC_STATS(Ip6OutDiscards);
+                               IP6_INC_STATS(OutDiscards);
                                kfree_skb(skb);
                                return 0;
                        }
                }
 
-               IP6_INC_STATS(Ip6OutMcastPkts);
+               IP6_INC_STATS(OutMcastPkts);
        }
 
        return NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb,NULL, skb->dev,ip6_output_finish);
@@ -169,7 +169,7 @@ int ip6_route_me_harder(struct sk_buff *skb)
        dst = ip6_route_output(skb->sk, &fl);
 
        if (dst->error) {
-               IP6_INC_STATS(Ip6OutNoRoutes);
+               IP6_INC_STATS(OutNoRoutes);
                LIMIT_NETDEBUG(
                        printk(KERN_DEBUG "ip6_route_me_harder: No more route.\n"));
                dst_release(dst);
@@ -228,7 +228,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
                        kfree_skb(skb);
                        skb = skb2;
                        if (skb == NULL) {      
-                               IP6_INC_STATS(Ip6OutDiscards);
+                               IP6_INC_STATS(OutDiscards);
                                return -ENOBUFS;
                        }
                        if (sk)
@@ -262,7 +262,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
 
        mtu = dst_pmtu(dst);
        if ((skb->len <= mtu) || ipfragok) {
-               IP6_INC_STATS(Ip6OutRequests);
+               IP6_INC_STATS(OutRequests);
                return NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, ip6_maybe_reroute);
        }
 
@@ -270,7 +270,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,
                printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n");
        skb->dev = dst->dev;
        icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu, skb->dev);
-       IP6_INC_STATS(Ip6FragFails);
+       IP6_INC_STATS(FragFails);
        kfree_skb(skb);
        return -EMSGSIZE;
 }
@@ -352,7 +352,7 @@ int ip6_forward(struct sk_buff *skb)
                goto error;
 
        if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) {
-               IP6_INC_STATS(Ip6InDiscards);
+               IP6_INC_STATS(InDiscards);
                goto drop;
        }
 
@@ -391,7 +391,7 @@ int ip6_forward(struct sk_buff *skb)
        }
 
        if (!xfrm6_route_forward(skb)) {
-               IP6_INC_STATS(Ip6InDiscards);
+               IP6_INC_STATS(InDiscards);
                goto drop;
        }
 
@@ -429,14 +429,14 @@ int ip6_forward(struct sk_buff *skb)
                /* Again, force OUTPUT device used as source address */
                skb->dev = dst->dev;
                icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst_pmtu(dst), skb->dev);
-               IP6_INC_STATS_BH(Ip6InTooBigErrors);
-               IP6_INC_STATS_BH(Ip6FragFails);
+               IP6_INC_STATS_BH(InTooBigErrors);
+               IP6_INC_STATS_BH(FragFails);
                kfree_skb(skb);
                return -EMSGSIZE;
        }
 
        if (skb_cow(skb, dst->dev->hard_header_len)) {
-               IP6_INC_STATS(Ip6OutDiscards);
+               IP6_INC_STATS(OutDiscards);
                goto drop;
        }
 
@@ -446,11 +446,11 @@ int ip6_forward(struct sk_buff *skb)
  
        hdr->hop_limit--;
 
-       IP6_INC_STATS_BH(Ip6OutForwDatagrams);
+       IP6_INC_STATS_BH(OutForwDatagrams);
        return NF_HOOK(PF_INET6,NF_IP6_FORWARD, skb, skb->dev, dst->dev, ip6_forward_finish);
 
 error:
-       IP6_INC_STATS_BH(Ip6InAddrErrors);
+       IP6_INC_STATS_BH(InAddrErrors);
 drop:
        kfree_skb(skb);
        return -EINVAL;
@@ -563,7 +563,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
 
                tmp_hdr = kmalloc(hlen, GFP_ATOMIC);
                if (!tmp_hdr) {
-                       IP6_INC_STATS(Ip6FragFails);
+                       IP6_INC_STATS(FragFails);
                        return -ENOMEM;
                }
 
@@ -618,7 +618,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
                        kfree(tmp_hdr);
 
                if (err == 0) {
-                       IP6_INC_STATS(Ip6FragOKs);
+                       IP6_INC_STATS(FragOKs);
                        return 0;
                }
 
@@ -628,7 +628,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
                        frag = skb;
                }
 
-               IP6_INC_STATS(Ip6FragFails);
+               IP6_INC_STATS(FragFails);
                return err;
        }
 
@@ -661,7 +661,7 @@ slow_path:
 
                if ((frag = alloc_skb(len+hlen+sizeof(struct frag_hdr)+LL_RESERVED_SPACE(rt->u.dst.dev), GFP_ATOMIC)) == NULL) {
                        NETDEBUG(printk(KERN_INFO "IPv6: frag: no memory for new fragment!\n"));
-                       IP6_INC_STATS(Ip6FragFails);
+                       IP6_INC_STATS(FragFails);
                        err = -ENOMEM;
                        goto fail;
                }
@@ -719,19 +719,19 @@ slow_path:
                 *      Put this fragment into the sending queue.
                 */
 
-               IP6_INC_STATS(Ip6FragCreates);
+               IP6_INC_STATS(FragCreates);
 
                err = output(frag);
                if (err)
                        goto fail;
        }
        kfree_skb(skb);
-       IP6_INC_STATS(Ip6FragOKs);
+       IP6_INC_STATS(FragOKs);
        return err;
 
 fail:
        kfree_skb(skb); 
-       IP6_INC_STATS(Ip6FragFails);
+       IP6_INC_STATS(FragFails);
        return err;
 }
 
@@ -1016,7 +1016,7 @@ alloc_new_skb:
        return 0;
 error:
        inet->cork.length -= length;
-       IP6_INC_STATS(Ip6OutDiscards);
+       IP6_INC_STATS(OutDiscards);
        return err;
 }
 
@@ -1076,7 +1076,7 @@ int ip6_push_pending_frames(struct sock *sk)
        ipv6_addr_copy(&hdr->daddr, final_dst);
 
        skb->dst = dst_clone(&rt->u.dst);
-       IP6_INC_STATS(Ip6OutRequests);  
+       IP6_INC_STATS(OutRequests);     
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, skb->dst->dev, dst_output);
        if (err) {
                if (err > 0)
@@ -1108,7 +1108,7 @@ void ip6_flush_pending_frames(struct sock *sk)
        struct sk_buff *skb;
 
        while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) {
-               IP6_INC_STATS(Ip6OutDiscards);
+               IP6_INC_STATS(OutDiscards);
                kfree_skb(skb);
        }
 
index 420189d..73cc1dd 100644 (file)
@@ -55,7 +55,7 @@
 
 #include <asm/uaccess.h>
 
-DEFINE_SNMP_STAT(struct ipv6_mib, ipv6_statistics);
+DEFINE_SNMP_STAT(struct ipstats_mib, ipv6_statistics);
 
 static struct packet_type ipv6_packet_type = {
        .type = __constant_htons(ETH_P_IPV6), 
index 13be016..b351145 100644 (file)
@@ -1317,7 +1317,7 @@ static void mld_sendpack(struct sk_buff *skb)
        struct inet6_dev *idev = in6_dev_get(skb->dev);
        int err;
 
-       IP6_INC_STATS(Ip6OutRequests);
+       IP6_INC_STATS(OutRequests);
        payload_len = skb->tail - (unsigned char *)skb->nh.ipv6h -
                sizeof(struct ipv6hdr);
        mldlen = skb->tail - skb->h.raw;
@@ -1329,9 +1329,9 @@ static void mld_sendpack(struct sk_buff *skb)
                dev_queue_xmit);
        if (!err) {
                ICMP6_INC_STATS(idev,Icmp6OutMsgs);
-               IP6_INC_STATS(Ip6OutMcastPkts);
+               IP6_INC_STATS(OutMcastPkts);
        } else
-               IP6_INC_STATS(Ip6OutDiscards);
+               IP6_INC_STATS(OutDiscards);
 
        if (likely(idev != NULL))
                in6_dev_put(idev);
@@ -1613,7 +1613,7 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
                     IPV6_TLV_ROUTERALERT, 2, 0, 0,
                     IPV6_TLV_PADN, 0 };
 
-       IP6_INC_STATS(Ip6OutRequests);
+       IP6_INC_STATS(OutRequests);
        snd_addr = addr;
        if (type == ICMPV6_MGM_REDUCTION) {
                snd_addr = &all_routers;
@@ -1627,7 +1627,7 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
        skb = sock_alloc_send_skb(sk, LL_RESERVED_SPACE(dev) + full_len, 1, &err);
 
        if (skb == NULL) {
-               IP6_INC_STATS(Ip6OutDiscards);
+               IP6_INC_STATS(OutDiscards);
                return;
        }
 
@@ -1672,16 +1672,16 @@ static void igmp6_send(struct in6_addr *addr, struct net_device *dev, int type)
                else
                        ICMP6_INC_STATS(idev, Icmp6OutGroupMembResponses);
                ICMP6_INC_STATS(idev, Icmp6OutMsgs);
-               IP6_INC_STATS(Ip6OutMcastPkts);
+               IP6_INC_STATS(OutMcastPkts);
        } else
-               IP6_INC_STATS(Ip6OutDiscards);
+               IP6_INC_STATS(OutDiscards);
 
        if (likely(idev != NULL))
                in6_dev_put(idev);
        return;
 
 out:
-       IP6_INC_STATS(Ip6OutDiscards);
+       IP6_INC_STATS(OutDiscards);
        kfree_skb(skb);
 }
 
index 3de845a..aa6b74d 100644 (file)
@@ -452,7 +452,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
 
        skb->dst = dst;
        idev = in6_dev_get(dst->dev);
-       IP6_INC_STATS(Ip6OutRequests);
+       IP6_INC_STATS(OutRequests);
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output);
        if (!err) {
                ICMP6_INC_STATS(idev, Icmp6OutNeighborAdvertisements);
@@ -536,7 +536,7 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh,
        /* send it! */
        skb->dst = dst;
        idev = in6_dev_get(dst->dev);
-       IP6_INC_STATS(Ip6OutRequests);
+       IP6_INC_STATS(OutRequests);
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output);
        if (!err) {
                ICMP6_INC_STATS(idev, Icmp6OutNeighborSolicits);
@@ -609,7 +609,7 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
        /* send it! */
        skb->dst = dst;
        idev = in6_dev_get(dst->dev);
-       IP6_INC_STATS(Ip6OutRequests);  
+       IP6_INC_STATS(OutRequests);     
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, dst->dev, dst_output);
        if (!err) {
                ICMP6_INC_STATS(idev, Icmp6OutRouterSolicits);
@@ -1335,7 +1335,7 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
 
        buff->dst = dst;
        idev = in6_dev_get(dst->dev);
-       IP6_INC_STATS(Ip6OutRequests);
+       IP6_INC_STATS(OutRequests);
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, buff, NULL, dst->dev, dst_output);
        if (!err) {
                ICMP6_INC_STATS(idev, Icmp6OutRedirects);
index e6e4621..fda6285 100644 (file)
@@ -57,43 +57,36 @@ static int sockstat6_seq_show(struct seq_file *seq, void *v)
        return 0;
 }
 
-struct snmp6_item
-{
-       char *name;
-       int   offset;
-};
-#define SNMP6_SENTINEL { .name = NULL, .offset = 0 }
-
-static struct snmp6_item snmp6_ipv6_list[] = {
+static struct snmp_item snmp6_ipstats_list[] = {
 /* ipv6 mib according to RFC 2465 */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct ipv6_mib, x) }
-       SNMP6_GEN(Ip6InReceives),
-       SNMP6_GEN(Ip6InHdrErrors),
-       SNMP6_GEN(Ip6InTooBigErrors),
-       SNMP6_GEN(Ip6InNoRoutes),
-       SNMP6_GEN(Ip6InAddrErrors),
-       SNMP6_GEN(Ip6InUnknownProtos),
-       SNMP6_GEN(Ip6InTruncatedPkts),
-       SNMP6_GEN(Ip6InDiscards),
-       SNMP6_GEN(Ip6InDelivers),
-       SNMP6_GEN(Ip6OutForwDatagrams),
-       SNMP6_GEN(Ip6OutRequests),
-       SNMP6_GEN(Ip6OutDiscards),
-       SNMP6_GEN(Ip6OutNoRoutes),
-       SNMP6_GEN(Ip6ReasmTimeout),
-       SNMP6_GEN(Ip6ReasmReqds),
-       SNMP6_GEN(Ip6ReasmOKs),
-       SNMP6_GEN(Ip6ReasmFails),
-       SNMP6_GEN(Ip6FragOKs),
-       SNMP6_GEN(Ip6FragFails),
-       SNMP6_GEN(Ip6FragCreates),
-       SNMP6_GEN(Ip6InMcastPkts),
-       SNMP6_GEN(Ip6OutMcastPkts),
+#define SNMP6_GEN(x)   SNMP_ITEM(struct ipstats_mib, x, "Ip6" #x)
+       SNMP6_GEN(InReceives),
+       SNMP6_GEN(InHdrErrors),
+       SNMP6_GEN(InTooBigErrors),
+       SNMP6_GEN(InNoRoutes),
+       SNMP6_GEN(InAddrErrors),
+       SNMP6_GEN(InUnknownProtos),
+       SNMP6_GEN(InTruncatedPkts),
+       SNMP6_GEN(InDiscards),
+       SNMP6_GEN(InDelivers),
+       SNMP6_GEN(OutForwDatagrams),
+       SNMP6_GEN(OutRequests),
+       SNMP6_GEN(OutDiscards),
+       SNMP6_GEN(OutNoRoutes),
+       SNMP6_GEN(ReasmTimeout),
+       SNMP6_GEN(ReasmReqds),
+       SNMP6_GEN(ReasmOKs),
+       SNMP6_GEN(ReasmFails),
+       SNMP6_GEN(FragOKs),
+       SNMP6_GEN(FragFails),
+       SNMP6_GEN(FragCreates),
+       SNMP6_GEN(InMcastPkts),
+       SNMP6_GEN(OutMcastPkts),
 #undef SNMP6_GEN
-       SNMP6_SENTINEL
+       SNMP_ITEM_SENTINEL
 };
 
-static struct snmp6_item snmp6_icmp6_list[] = {
+static struct snmp_item snmp6_icmp6_list[] = {
 /* icmpv6 mib according to RFC 2466
 
    Exceptions:  {In|Out}AdminProhibs are removed, because I see
@@ -104,7 +97,7 @@ static struct snmp6_item snmp6_icmp6_list[] = {
                OutRouterAdvertisements too.
                OutGroupMembQueries too.
  */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct icmpv6_mib, x) }
+#define SNMP6_GEN(x)   SNMP_ITEM(struct icmpv6_mib, x, #x)
        SNMP6_GEN(Icmp6InMsgs),
        SNMP6_GEN(Icmp6InErrors),
        SNMP6_GEN(Icmp6InDestUnreachs),
@@ -134,17 +127,17 @@ static struct snmp6_item snmp6_icmp6_list[] = {
        SNMP6_GEN(Icmp6OutGroupMembResponses),
        SNMP6_GEN(Icmp6OutGroupMembReductions),
 #undef SNMP6_GEN
-       SNMP6_SENTINEL
+       SNMP_ITEM_SENTINEL
 };
 
-static struct snmp6_item snmp6_udp6_list[] = {
-#define SNMP6_GEN(x) { .name = "Udp6" #x , .offset = offsetof(struct udp_mib, Udp##x) }
+static struct snmp_item snmp6_udp6_list[] = {
+#define SNMP6_GEN(x)   SNMP_ITEM(struct udp_mib, Udp##x, "Udp6" #x)
        SNMP6_GEN(InDatagrams),
        SNMP6_GEN(NoPorts),
        SNMP6_GEN(InErrors),
        SNMP6_GEN(OutDatagrams),
 #undef SNMP6_GEN
-       SNMP6_SENTINEL
+       SNMP_ITEM_SENTINEL
 };
 
 static unsigned long
@@ -167,7 +160,7 @@ fold_field(void *mib[], int offt)
 }
 
 static inline void
-snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp6_item *itemlist)
+snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp_item *itemlist)
 {
        int i;
        for (i=0; itemlist[i].name; i++)
@@ -183,7 +176,7 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
                seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex);
                snmp6_seq_show_item(seq, (void **)idev->stats.icmpv6, snmp6_icmp6_list);
        } else {
-               snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipv6_list);
+               snmp6_seq_show_item(seq, (void **)ipv6_statistics, snmp6_ipstats_list);
                snmp6_seq_show_item(seq, (void **)icmpv6_statistics, snmp6_icmp6_list);
                snmp6_seq_show_item(seq, (void **)udp_stats_in6, snmp6_udp6_list);
        }
index 0bc3b5f..3d2961c 100644 (file)
@@ -535,7 +535,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length,
        if (err)
                goto error_fault;
 
-       IP6_INC_STATS(Ip6OutRequests);          
+       IP6_INC_STATS(OutRequests);             
        err = NF_HOOK(PF_INET6, NF_IP6_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
                      dst_output);
        if (err > 0)
@@ -549,7 +549,7 @@ error_fault:
        err = -EFAULT;
        kfree_skb(skb);
 error:
-       IP6_INC_STATS(Ip6OutDiscards);
+       IP6_INC_STATS(OutDiscards);
        return err; 
 }
 static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk,
index 1ee91bf..ccee987 100644 (file)
@@ -284,7 +284,7 @@ static void ip6_evictor(void)
                spin_unlock(&fq->lock);
 
                fq_put(fq);
-               IP6_INC_STATS_BH(Ip6ReasmFails);
+               IP6_INC_STATS_BH(ReasmFails);
        }
 }
 
@@ -299,8 +299,8 @@ static void ip6_frag_expire(unsigned long data)
 
        fq_kill(fq);
 
-       IP6_INC_STATS_BH(Ip6ReasmTimeout);
-       IP6_INC_STATS_BH(Ip6ReasmFails);
+       IP6_INC_STATS_BH(ReasmTimeout);
+       IP6_INC_STATS_BH(ReasmFails);
 
        /* Send error only if the first segment arrived. */
        if (fq->last_in&FIRST_IN && fq->fragments) {
@@ -386,7 +386,7 @@ ip6_frag_create(unsigned int hash, u32 id, struct in6_addr *src, struct in6_addr
        return ip6_frag_intern(hash, fq);
 
 oom:
-       IP6_INC_STATS_BH(Ip6ReasmFails);
+       IP6_INC_STATS_BH(ReasmFails);
        return NULL;
 }
 
@@ -426,7 +426,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
                        ((u8 *) (fhdr + 1) - (u8 *) (skb->nh.ipv6h + 1)));
 
        if ((unsigned int)end > IPV6_MAXPLEN) {
-               IP6_INC_STATS_BH(Ip6InHdrErrors);
+               IP6_INC_STATS_BH(InHdrErrors);
                icmpv6_param_prob(skb,ICMPV6_HDR_FIELD, (u8*)&fhdr->frag_off - skb->nh.raw);
                return;
        }
@@ -453,7 +453,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
                        /* RFC2460 says always send parameter problem in
                         * this case. -DaveM
                         */
-                       IP6_INC_STATS_BH(Ip6InHdrErrors);
+                       IP6_INC_STATS_BH(InHdrErrors);
                        icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, 
                                          offsetof(struct ipv6hdr, payload_len));
                        return;
@@ -572,7 +572,7 @@ static void ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
        return;
 
 err:
-       IP6_INC_STATS(Ip6ReasmFails);
+       IP6_INC_STATS(ReasmFails);
        kfree_skb(skb);
 }
 
@@ -666,7 +666,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
        if (head->ip_summed == CHECKSUM_HW)
                head->csum = csum_partial(head->nh.raw, head->h.raw-head->nh.raw, head->csum);
 
-       IP6_INC_STATS_BH(Ip6ReasmOKs);
+       IP6_INC_STATS_BH(ReasmOKs);
        fq->fragments = NULL;
        *nhoffp = nhoff;
        return 1;
@@ -679,7 +679,7 @@ out_oom:
        if (net_ratelimit())
                printk(KERN_DEBUG "ip6_frag_reasm: no memory for reassembly\n");
 out_fail:
-       IP6_INC_STATS_BH(Ip6ReasmFails);
+       IP6_INC_STATS_BH(ReasmFails);
        return -1;
 }
 
@@ -693,16 +693,16 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
 
        hdr = skb->nh.ipv6h;
 
-       IP6_INC_STATS_BH(Ip6ReasmReqds);
+       IP6_INC_STATS_BH(ReasmReqds);
 
        /* Jumbo payload inhibits frag. header */
        if (hdr->payload_len==0) {
-               IP6_INC_STATS(Ip6InHdrErrors);
+               IP6_INC_STATS(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw);
                return -1;
        }
        if (!pskb_may_pull(skb, (skb->h.raw-skb->data)+sizeof(struct frag_hdr))) {
-               IP6_INC_STATS(Ip6InHdrErrors);
+               IP6_INC_STATS(InHdrErrors);
                icmpv6_param_prob(skb, ICMPV6_HDR_FIELD, skb->h.raw-skb->nh.raw);
                return -1;
        }
@@ -713,7 +713,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
        if (!(fhdr->frag_off & htons(0xFFF9))) {
                /* It is not a fragmented frame */
                skb->h.raw += sizeof(struct frag_hdr);
-               IP6_INC_STATS_BH(Ip6ReasmOKs);
+               IP6_INC_STATS_BH(ReasmOKs);
 
                *nhoffp = (u8*)fhdr - skb->nh.raw;
                return 1;
@@ -738,7 +738,7 @@ static int ipv6_frag_rcv(struct sk_buff **skbp, unsigned int *nhoffp)
                return ret;
        }
 
-       IP6_INC_STATS_BH(Ip6ReasmFails);
+       IP6_INC_STATS_BH(ReasmFails);
        kfree_skb(skb);
        return -1;
 }
index 0386384..18057ed 100644 (file)
@@ -83,6 +83,7 @@ static int ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;
 static struct rt6_info * ip6_rt_copy(struct rt6_info *ort);
 static struct dst_entry        *ip6_dst_check(struct dst_entry *dst, u32 cookie);
 static struct dst_entry *ip6_negative_advice(struct dst_entry *);
+static void            ip6_dst_destroy(struct dst_entry *);
 static int              ip6_dst_gc(void);
 
 static int             ip6_pkt_discard(struct sk_buff *skb);
@@ -95,6 +96,7 @@ static struct dst_ops ip6_dst_ops = {
        .gc                     =       ip6_dst_gc,
        .gc_thresh              =       1024,
        .check                  =       ip6_dst_check,
+       .destroy                =       ip6_dst_destroy,
        .negative_advice        =       ip6_negative_advice,
        .link_failure           =       ip6_link_failure,
        .update_pmtu            =       ip6_rt_update_pmtu,
@@ -134,7 +136,15 @@ rwlock_t rt6_lock = RW_LOCK_UNLOCKED;
 /* allocate dst with ip6_dst_ops */
 static __inline__ struct rt6_info *ip6_dst_alloc(void)
 {
-       return dst_alloc(&ip6_dst_ops);
+       return (struct rt6_info *)dst_alloc(&ip6_dst_ops);
+}
+
+static void ip6_dst_destroy(struct dst_entry *dst)
+{
+       struct rt6_info *rt = (struct rt6_info *)dst;
+       if (rt->rt6i_idev != NULL)
+               in6_dev_put(rt->rt6i_idev);
+       
 }
 
 /*
@@ -573,14 +583,14 @@ struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
        if (unlikely(rt == NULL))
                goto out;
 
-       if (dev)
-               dev_hold(dev);
+       dev_hold(dev);
        if (neigh)
                neigh_hold(neigh);
        else
                neigh = ndisc_get_neigh(dev, addr);
 
        rt->rt6i_dev      = dev;
+       rt->rt6i_idev     = in6_dev_get(dev);
        rt->rt6i_nexthop  = neigh;
        rt->rt6i_expires  = 0;
        rt->rt6i_flags    = RTF_LOCAL;
@@ -714,6 +724,12 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
        if (rtmsg->rtmsg_src_len)
                return -EINVAL;
 #endif
+       if (rtmsg->rtmsg_ifindex) {
+               dev = dev_get_by_index(rtmsg->rtmsg_ifindex);
+               if (!dev)
+                       return -ENODEV;
+       }
+
        if (rtmsg->rtmsg_metric == 0)
                rtmsg->rtmsg_metric = IP6_RT_PRIO_USER;
 
@@ -739,13 +755,6 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
 
        rt->u.dst.output = ip6_output;
 
-       if (rtmsg->rtmsg_ifindex) {
-               dev = dev_get_by_index(rtmsg->rtmsg_ifindex);
-               err = -ENODEV;
-               if (dev == NULL)
-                       goto out;
-       }
-
        ipv6_addr_prefix(&rt->rt6i_dst.addr, 
                         &rtmsg->rtmsg_dst, rtmsg->rtmsg_dst_len);
        rt->rt6i_dst.plen = rtmsg->rtmsg_dst_len;
@@ -872,6 +881,7 @@ install_route:
        if (!rt->u.dst.metrics[RTAX_ADVMSS-1])
                rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_pmtu(&rt->u.dst));
        rt->u.dst.dev = dev;
+       rt->rt6i_idev = in6_dev_get(dev);
        return rt6_ins(rt, nlh, _rtattr);
 
 out:
@@ -1138,6 +1148,9 @@ static struct rt6_info * ip6_rt_copy(struct rt6_info *ort)
                rt->u.dst.dev = ort->u.dst.dev;
                if (rt->u.dst.dev)
                        dev_hold(rt->u.dst.dev);
+               rt->rt6i_idev = ort->rt6i_idev;
+               if (rt->rt6i_idev)
+                       in6_dev_hold(rt->rt6i_idev);
                rt->u.dst.lastuse = jiffies;
                rt->rt6i_expires = 0;
 
@@ -1259,7 +1272,7 @@ int ipv6_route_ioctl(unsigned int cmd, void __user *arg)
 
 int ip6_pkt_discard(struct sk_buff *skb)
 {
-       IP6_INC_STATS(Ip6OutNoRoutes);
+       IP6_INC_STATS(OutNoRoutes);
        icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_NOROUTE, 0, skb->dev);
        kfree_skb(skb);
        return 0;
@@ -1282,6 +1295,7 @@ int ip6_rt_addr_add(struct in6_addr *addr, struct net_device *dev, int anycast)
        rt->u.dst.input = ip6_input;
        rt->u.dst.output = ip6_output;
        rt->rt6i_dev = &loopback_dev;
+       rt->rt6i_idev = in6_dev_get(&loopback_dev);
        rt->u.dst.metrics[RTAX_MTU-1] = ipv6_get_mtu(rt->rt6i_dev);
        rt->u.dst.metrics[RTAX_ADVMSS-1] = ipv6_advmss(dst_pmtu(&rt->u.dst));
        rt->u.dst.metrics[RTAX_HOPLIMIT-1] = ipv6_get_hoplimit(rt->rt6i_dev);
index 6d45e05..d54f915 100644 (file)
@@ -496,7 +496,7 @@ out:
        return err;
 no_route:
        kfree_skb(nskb);
-       IP_INC_STATS_BH(IpOutNoRoutes);
+       IP_INC_STATS_BH(OutNoRoutes);
 
        /* FIXME: Returning the 'err' will effect all the associations
         * associated with a socket, although only one of the paths of the
index 8681465..44cb524 100644 (file)
@@ -231,7 +231,6 @@ static void __xfrm_state_delete(struct xfrm_state *x)
 
 void xfrm_state_delete(struct xfrm_state *x)
 {
-       xfrm_state_delete_tunnel(x);
        spin_lock_bh(&x->lock);
        __xfrm_state_delete(x);
        spin_unlock_bh(&x->lock);
diff --git a/scripts/basic/.docproc.cmd b/scripts/basic/.docproc.cmd
deleted file mode 100644 (file)
index 6d40859..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-cmd_scripts/basic/docproc := gcc -Wp,-MD,scripts/basic/.docproc.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer        -o scripts/basic/docproc scripts/basic/docproc.c
-
-deps_scripts/basic/docproc := \
-  scripts/basic/docproc.c \
-  /usr/include/stdio.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/include/stdlib.h \
-  /usr/include/sys/types.h \
-  /usr/include/time.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/time.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/alloca.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/include/ctype.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h \
-  /usr/include/limits.h \
-  /usr/include/bits/posix1_lim.h \
-  /usr/include/bits/local_lim.h \
-  /usr/include/linux/limits.h \
-  /usr/include/bits/posix2_lim.h \
-  /usr/include/sys/wait.h \
-  /usr/include/signal.h \
-  /usr/include/bits/signum.h \
-  /usr/include/bits/siginfo.h \
-  /usr/include/bits/sigaction.h \
-  /usr/include/bits/sigcontext.h \
-  /usr/include/asm/sigcontext.h \
-  /usr/include/bits/sigstack.h \
-  /usr/include/bits/sigthread.h \
-  /usr/include/sys/resource.h \
-  /usr/include/bits/resource.h \
-  /usr/include/bits/waitflags.h \
-  /usr/include/bits/waitstatus.h \
-
-scripts/basic/docproc: $(deps_scripts/basic/docproc)
-
-$(deps_scripts/basic/docproc):
diff --git a/scripts/basic/.fixdep.cmd b/scripts/basic/.fixdep.cmd
deleted file mode 100644 (file)
index 4f04c3f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-cmd_scripts/basic/fixdep := gcc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer        -o scripts/basic/fixdep scripts/basic/fixdep.c
-
-deps_scripts/basic/fixdep := \
-  scripts/basic/fixdep.c \
-    $(wildcard include/config/his/driver.h) \
-    $(wildcard include/config/my/option.h) \
-    $(wildcard include/config/.h) \
-    $(wildcard include/config/foo.h) \
-  /usr/include/sys/types.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/time.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/time.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/sys/stat.h \
-  /usr/include/bits/stat.h \
-  /usr/include/sys/mman.h \
-  /usr/include/bits/mman.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-  /usr/include/fcntl.h \
-  /usr/include/bits/fcntl.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/include/stdlib.h \
-  /usr/include/alloca.h \
-  /usr/include/stdio.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h \
-  /usr/include/limits.h \
-  /usr/include/bits/posix1_lim.h \
-  /usr/include/bits/local_lim.h \
-  /usr/include/linux/limits.h \
-  /usr/include/bits/posix2_lim.h \
-  /usr/include/ctype.h \
-  /usr/include/netinet/in.h \
-  /usr/include/stdint.h \
-  /usr/include/bits/socket.h \
-  /usr/include/bits/sockaddr.h \
-  /usr/include/asm/socket.h \
-  /usr/include/asm/sockios.h \
-  /usr/include/bits/in.h \
-  /usr/include/bits/byteswap.h \
-
-scripts/basic/fixdep: $(deps_scripts/basic/fixdep)
-
-$(deps_scripts/basic/fixdep):
diff --git a/scripts/basic/.split-include.cmd b/scripts/basic/.split-include.cmd
deleted file mode 100644 (file)
index e1a20d0..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-cmd_scripts/basic/split-include := gcc -Wp,-MD,scripts/basic/.split-include.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer        -o scripts/basic/split-include scripts/basic/split-include.c
-
-deps_scripts/basic/split-include := \
-  scripts/basic/split-include.c \
-    $(wildcard include/config/.h) \
-  /usr/include/sys/stat.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/time.h \
-  /usr/include/bits/stat.h \
-  /usr/include/sys/types.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/time.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/ctype.h \
-  /usr/include/errno.h \
-  /usr/include/bits/errno.h \
-  /usr/include/linux/errno.h \
-  /usr/include/asm/errno.h \
-  /usr/include/fcntl.h \
-  /usr/include/bits/fcntl.h \
-  /usr/include/stdio.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/include/stdlib.h \
-  /usr/include/alloca.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-
-scripts/basic/split-include: $(deps_scripts/basic/split-include)
-
-$(deps_scripts/basic/split-include):
diff --git a/scripts/basic/docproc b/scripts/basic/docproc
deleted file mode 100755 (executable)
index fd219c4..0000000
Binary files a/scripts/basic/docproc and /dev/null differ
diff --git a/scripts/basic/fixdep b/scripts/basic/fixdep
deleted file mode 100755 (executable)
index 08eb07b..0000000
Binary files a/scripts/basic/fixdep and /dev/null differ
diff --git a/scripts/basic/split-include b/scripts/basic/split-include
deleted file mode 100755 (executable)
index 964ac45..0000000
Binary files a/scripts/basic/split-include and /dev/null differ
diff --git a/scripts/kconfig/.conf.cmd b/scripts/kconfig/.conf.cmd
deleted file mode 100644 (file)
index 4f007fa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-cmd_scripts/kconfig/conf := gcc  -o scripts/kconfig/conf scripts/kconfig/conf.o  -Wl,-rpath,\$$ORIGIN -Lscripts/kconfig -lkconfig
diff --git a/scripts/kconfig/.conf.o.cmd b/scripts/kconfig/.conf.o.cmd
deleted file mode 100644 (file)
index 2b46bc4..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-cmd_scripts/kconfig/conf.o := gcc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer       -c -o scripts/kconfig/conf.o scripts/kconfig/conf.c
-
-deps_scripts/kconfig/conf.o := \
-  scripts/kconfig/conf.c \
-    $(wildcard include/config/.h) \
-  /usr/include/ctype.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/include/stdlib.h \
-  /usr/include/sys/types.h \
-  /usr/include/time.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/time.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/alloca.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-  /usr/include/sys/stat.h \
-  /usr/include/bits/stat.h \
-  scripts/kconfig/lkc.h \
-  scripts/kconfig/expr.h \
-  /usr/include/stdio.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdbool.h \
-  scripts/kconfig/lkc_proto.h \
-
-scripts/kconfig/conf.o: $(deps_scripts/kconfig/conf.o)
-
-$(deps_scripts/kconfig/conf.o):
diff --git a/scripts/kconfig/.libkconfig.so.cmd b/scripts/kconfig/.libkconfig.so.cmd
deleted file mode 100644 (file)
index c2f93cb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-cmd_scripts/kconfig/libkconfig.so := gcc  -shared -o scripts/kconfig/libkconfig.so scripts/kconfig/zconf.tab.o  
diff --git a/scripts/kconfig/.mconf.o.cmd b/scripts/kconfig/.mconf.o.cmd
deleted file mode 100644 (file)
index ecef013..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-cmd_scripts/kconfig/mconf.o := gcc -Wp,-MD,scripts/kconfig/.mconf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer       -c -o scripts/kconfig/mconf.o scripts/kconfig/mconf.c
-
-deps_scripts/kconfig/mconf.o := \
-  scripts/kconfig/mconf.c \
-    $(wildcard include/config/.h) \
-    $(wildcard include/config/mode.h) \
-  /usr/include/sys/ioctl.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/include/bits/ioctls.h \
-  /usr/include/asm/ioctls.h \
-  /usr/include/asm/ioctl.h \
-  /usr/include/bits/ioctl-types.h \
-  /usr/include/sys/ttydefaults.h \
-  /usr/include/sys/wait.h \
-  /usr/include/signal.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/bits/signum.h \
-  /usr/include/time.h \
-  /usr/include/bits/siginfo.h \
-  /usr/include/bits/sigaction.h \
-  /usr/include/bits/sigcontext.h \
-  /usr/include/asm/sigcontext.h \
-  /usr/include/bits/sigstack.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/bits/sigthread.h \
-  /usr/include/sys/resource.h \
-  /usr/include/bits/resource.h \
-  /usr/include/bits/time.h \
-  /usr/include/bits/waitflags.h \
-  /usr/include/bits/waitstatus.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/include/ctype.h \
-  /usr/include/errno.h \
-  /usr/include/bits/errno.h \
-  /usr/include/linux/errno.h \
-  /usr/include/asm/errno.h \
-  /usr/include/fcntl.h \
-  /usr/include/bits/fcntl.h \
-  /usr/include/sys/types.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h \
-  /usr/include/limits.h \
-  /usr/include/bits/posix1_lim.h \
-  /usr/include/bits/local_lim.h \
-  /usr/include/linux/limits.h \
-  /usr/include/bits/posix2_lim.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/stdlib.h \
-  /usr/include/alloca.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/include/termios.h \
-  /usr/include/bits/termios.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-  scripts/kconfig/lkc.h \
-  scripts/kconfig/expr.h \
-  /usr/include/stdio.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdbool.h \
-  scripts/kconfig/lkc_proto.h \
-
-scripts/kconfig/mconf.o: $(deps_scripts/kconfig/mconf.o)
-
-$(deps_scripts/kconfig/mconf.o):
diff --git a/scripts/kconfig/.zconf.tab.o.cmd b/scripts/kconfig/.zconf.tab.o.cmd
deleted file mode 100644 (file)
index fdd857e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-cmd_scripts/kconfig/zconf.tab.o := gcc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer      -Iscripts/kconfig -fPIC -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.c
-
-deps_scripts/kconfig/zconf.tab.o := \
-  scripts/kconfig/zconf.tab.c \
-  /usr/include/ctype.h \
-  /usr/include/features.h \
-  /usr/include/sys/cdefs.h \
-  /usr/include/gnu/stubs.h \
-  /usr/include/bits/types.h \
-  /usr/include/bits/wordsize.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stddef.h \
-  /usr/include/bits/typesizes.h \
-  /usr/include/endian.h \
-  /usr/include/bits/endian.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdarg.h \
-  /usr/include/stdio.h \
-  /usr/include/libio.h \
-  /usr/include/_G_config.h \
-  /usr/include/wchar.h \
-  /usr/include/bits/wchar.h \
-  /usr/include/gconv.h \
-  /usr/include/bits/stdio_lim.h \
-  /usr/include/bits/sys_errlist.h \
-  /usr/include/bits/stdio.h \
-  /usr/include/stdlib.h \
-  /usr/include/sys/types.h \
-  /usr/include/time.h \
-  /usr/include/sys/select.h \
-  /usr/include/bits/select.h \
-  /usr/include/bits/sigset.h \
-  /usr/include/bits/time.h \
-  /usr/include/sys/sysmacros.h \
-  /usr/include/bits/pthreadtypes.h \
-  /usr/include/bits/sched.h \
-  /usr/include/alloca.h \
-  /usr/include/string.h \
-  /usr/include/bits/string.h \
-  /usr/include/bits/string2.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/stdbool.h \
-  scripts/kconfig/lkc.h \
-  scripts/kconfig/expr.h \
-  scripts/kconfig/lkc_proto.h \
-  scripts/kconfig/lex.zconf.c \
-  /usr/include/errno.h \
-  /usr/include/bits/errno.h \
-  /usr/include/linux/errno.h \
-  /usr/include/asm/errno.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/limits.h \
-  /usr/lib/gcc-lib/i386-redhat-linux/3.2.2/include/syslimits.h \
-  /usr/include/limits.h \
-  /usr/include/bits/posix1_lim.h \
-  /usr/include/bits/local_lim.h \
-  /usr/include/linux/limits.h \
-  /usr/include/bits/posix2_lim.h \
-  /usr/include/unistd.h \
-  /usr/include/bits/posix_opt.h \
-  /usr/include/bits/confname.h \
-  /usr/include/getopt.h \
-  scripts/kconfig/confdata.c \
-    $(wildcard include/config/.h) \
-  /usr/include/sys/stat.h \
-  /usr/include/bits/stat.h \
-  scripts/kconfig/expr.c \
-  scripts/kconfig/symbol.c \
-  /usr/include/sys/utsname.h \
-  /usr/include/bits/utsname.h \
-  scripts/kconfig/menu.c \
-
-scripts/kconfig/zconf.tab.o: $(deps_scripts/kconfig/zconf.tab.o)
-
-$(deps_scripts/kconfig/zconf.tab.o):
diff --git a/scripts/kconfig/conf b/scripts/kconfig/conf
deleted file mode 100755 (executable)
index f979702..0000000
Binary files a/scripts/kconfig/conf and /dev/null differ
diff --git a/scripts/kconfig/conf.o b/scripts/kconfig/conf.o
deleted file mode 100644 (file)
index 733910a..0000000
Binary files a/scripts/kconfig/conf.o and /dev/null differ
diff --git a/scripts/kconfig/lex.zconf.c b/scripts/kconfig/lex.zconf.c
deleted file mode 100644 (file)
index 22dda11..0000000
+++ /dev/null
@@ -1,3688 +0,0 @@
-
-#line 3 "lex.zconf.c"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 31
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else  /* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_CONST
-
-#endif /* __STDC__ */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE zconfrestart(zconfin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int zconfleng;
-
-extern FILE *zconfin, *zconfout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    #define YY_LESS_LINENO(n)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-               *yy_cp = (yy_hold_char); \
-               YY_RESTORE_YY_MORE_OFFSET \
-               (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
-               } \
-       while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-       {
-       FILE *yy_input_file;
-
-       char *yy_ch_buf;                /* input buffer */
-       char *yy_buf_pos;               /* current position in input buffer */
-
-       /* Size of input buffer in bytes, not including room for EOB
-        * characters.
-        */
-       yy_size_t yy_buf_size;
-
-       /* Number of characters read into yy_ch_buf, not including EOB
-        * characters.
-        */
-       int yy_n_chars;
-
-       /* Whether we "own" the buffer - i.e., we know we created it,
-        * and can realloc() it to grow it, and should free() it to
-        * delete it.
-        */
-       int yy_is_our_buffer;
-
-       /* Whether this is an "interactive" input source; if so, and
-        * if we're using stdio for input, then we want to use getc()
-        * instead of fread(), to make sure we stop fetching input after
-        * each newline.
-        */
-       int yy_is_interactive;
-
-       /* Whether we're considered to be at the beginning of a line.
-        * If so, '^' rules will be active on the next match, otherwise
-        * not.
-        */
-       int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-       /* Whether to try to fill the input buffer when we reach the
-        * end of it.
-        */
-       int yy_fill_buffer;
-
-       int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-       /* When an EOF's been seen but there's still some text to process
-        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-        * shouldn't try reading from the input source any more.  We might
-        * still have a bunch of tokens to match, though, because of
-        * possible backing-up.
-        *
-        * When we actually see the EOF, we change the status to "new"
-        * (via zconfrestart()), so that the user can continue scanning by
-        * just pointing zconfin at a new input file.
-        */
-#define YY_BUFFER_EOF_PENDING 2
-
-       };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when zconftext is formed. */
-static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
-int zconfleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1;                /* whether we need to initialize */
-static int yy_start = 0;       /* start state number */
-
-/* Flag which is used to allow zconfwrap()'s to do buffer switches
- * instead of setting up a fresh zconfin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void zconfrestart (FILE *input_file  );
-void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size  );
-void zconf_delete_buffer (YY_BUFFER_STATE b  );
-void zconf_flush_buffer (YY_BUFFER_STATE b  );
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void zconfpop_buffer_state (void );
-
-static void zconfensure_buffer_stack (void );
-static void zconf_load_buffer_state (void );
-static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len  );
-
-void *zconfalloc (yy_size_t  );
-void *zconfrealloc (void *,yy_size_t  );
-void zconffree (void *  );
-
-#define yy_new_buffer zconf_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){ \
-        zconfensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-       }
-
-#define yy_set_bol(at_bol) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){\
-        zconfensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-       }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define zconfwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int zconflineno;
-
-int zconflineno = 1;
-
-extern char *zconftext;
-#define yytext_ptr zconftext
-static yyconst flex_int16_t yy_nxt[][38] =
-    {
-    {
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-
-       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   18,   18,   19,   20,
-       21,   22,   18,   18,   23,   24,   18,   25,   18,   26,
-       27,   18,   28,   29,   30,   18,   18,   16
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   18,   18,   19,   20,
-       21,   22,   18,   18,   23,   24,   18,   25,   18,   26,
-       27,   18,   28,   29,   30,   18,   18,   16
-
-    },
-
-    {
-       11,   31,   32,   33,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31
-    },
-
-    {
-       11,   31,   32,   33,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
-       31,   31,   31,   31,   31,   31,   31,   31
-    },
-
-    {
-       11,   34,   34,   35,   34,   36,   34,   34,   36,   34,
-       34,   34,   34,   34,   34,   37,   34,   34,   34,   34,
-
-       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
-       34,   34,   34,   34,   34,   34,   34,   34
-    },
-
-    {
-       11,   34,   34,   35,   34,   36,   34,   34,   36,   34,
-       34,   34,   34,   34,   34,   37,   34,   34,   34,   34,
-       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
-       34,   34,   34,   34,   34,   34,   34,   34
-    },
-
-    {
-       11,   38,   38,   39,   40,   41,   42,   43,   41,   44,
-       45,   46,   47,   47,   48,   49,   47,   47,   47,   47,
-       47,   47,   47,   47,   47,   50,   47,   47,   47,   51,
-       47,   47,   47,   47,   47,   47,   47,   52
-
-    },
-
-    {
-       11,   38,   38,   39,   40,   41,   42,   43,   41,   44,
-       45,   46,   47,   47,   48,   49,   47,   47,   47,   47,
-       47,   47,   47,   47,   47,   50,   47,   47,   47,   51,
-       47,   47,   47,   47,   47,   47,   47,   52
-    },
-
-    {
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11
-    },
-
-    {
-       11,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
-      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
-
-      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
-      -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12
-    },
-
-    {
-       11,  -13,   53,   54,  -13,  -13,   55,  -13,  -13,  -13,
-      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
-      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
-      -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13
-    },
-
-    {
-       11,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
-      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
-      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
-      -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14
-
-    },
-
-    {
-       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56
-    },
-
-    {
-       11,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-      -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16
-    },
-
-    {
-       11,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
-      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
-
-      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
-      -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17
-    },
-
-    {
-       11,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
-      -18,  -18,  -18,   58,  -18,  -18,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -18
-    },
-
-    {
-       11,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
-      -19,  -19,  -19,   58,  -19,  -19,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   59,
-       58,   58,   58,   58,   58,   58,   58,  -19
-
-    },
-
-    {
-       11,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
-      -20,  -20,  -20,   58,  -20,  -20,   58,   58,   58,   58,
-       58,   58,   58,   58,   60,   58,   58,   58,   58,   61,
-       58,   58,   58,   58,   58,   58,   58,  -20
-    },
-
-    {
-       11,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
-      -21,  -21,  -21,   58,  -21,  -21,   58,   58,   58,   58,
-       58,   62,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -21
-    },
-
-    {
-       11,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
-      -22,  -22,  -22,   58,  -22,  -22,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   63,   58,
-       58,   58,   58,   58,   58,   58,   58,  -22
-    },
-
-    {
-       11,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
-      -23,  -23,  -23,   58,  -23,  -23,   58,   58,   58,   58,
-       58,   64,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -23
-    },
-
-    {
-       11,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
-      -24,  -24,  -24,   58,  -24,  -24,   58,   58,   58,   58,
-       58,   58,   65,   58,   58,   58,   58,   58,   66,   58,
-       58,   58,   58,   58,   58,   58,   58,  -24
-
-    },
-
-    {
-       11,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
-      -25,  -25,  -25,   58,  -25,  -25,   58,   67,   58,   58,
-       58,   68,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -25
-    },
-
-    {
-       11,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
-      -26,  -26,  -26,   58,  -26,  -26,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       69,   58,   58,   58,   58,   58,   58,  -26
-    },
-
-    {
-       11,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
-      -27,  -27,  -27,   58,  -27,  -27,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   70,   58,   58,   58,   58,  -27
-    },
-
-    {
-       11,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
-      -28,  -28,  -28,   58,  -28,  -28,   58,   71,   58,   58,
-       58,   72,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -28
-    },
-
-    {
-       11,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
-      -29,  -29,  -29,   58,  -29,  -29,   58,   58,   58,   58,
-       58,   73,   58,   58,   58,   58,   58,   58,   58,   74,
-       58,   58,   58,   58,   75,   58,   58,  -29
-
-    },
-
-    {
-       11,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
-      -30,  -30,  -30,   58,  -30,  -30,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   76,   58,   58,   58,   58,  -30
-    },
-
-    {
-       11,   77,   77,  -31,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77
-    },
-
-    {
-       11,  -32,   78,   79,  -32,  -32,  -32,  -32,  -32,  -32,
-      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
-
-      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
-      -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32
-    },
-
-    {
-       11,   80,  -33,  -33,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80
-    },
-
-    {
-       11,   81,   81,   82,   81,  -34,   81,   81,  -34,   81,
-       81,   81,   81,   81,   81,  -34,   81,   81,   81,   81,
-       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
-       81,   81,   81,   81,   81,   81,   81,   81
-
-    },
-
-    {
-       11,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35
-    },
-
-    {
-       11,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36
-    },
-
-    {
-       11,   83,   83,   84,   83,   83,   83,   83,   83,   83,
-       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
-
-       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
-       83,   83,   83,   83,   83,   83,   83,   83
-    },
-
-    {
-       11,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38
-    },
-
-    {
-       11,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39
-
-    },
-
-    {
-       11,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
-      -40,  -40,  -40,  -40,   85,  -40,  -40,  -40,  -40,  -40,
-      -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
-      -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
-    },
-
-    {
-       11,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
-      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
-      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
-      -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41
-    },
-
-    {
-       11,   86,   86,  -42,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86
-    },
-
-    {
-       11,  -43,  -43,  -43,  -43,  -43,  -43,   87,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
-    },
-
-    {
-       11,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
-
-    },
-
-    {
-       11,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
-      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
-      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
-      -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45
-    },
-
-    {
-       11,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
-      -46,   88,   89,   89,  -46,  -46,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -46
-    },
-
-    {
-       11,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
-      -47,   89,   89,   89,  -47,  -47,   89,   89,   89,   89,
-
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -47
-    },
-
-    {
-       11,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48
-    },
-
-    {
-       11,  -49,  -49,   90,  -49,  -49,  -49,  -49,  -49,  -49,
-      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
-      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49,
-      -49,  -49,  -49,  -49,  -49,  -49,  -49,  -49
-
-    },
-
-    {
-       11,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
-      -50,   89,   89,   89,  -50,  -50,   89,   89,   89,   89,
-       89,   89,   91,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -50
-    },
-
-    {
-       11,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
-      -51,   89,   89,   89,  -51,  -51,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   92,   89,
-       89,   89,   89,   89,   89,   89,   89,  -51
-    },
-
-    {
-       11,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
-      -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
-
-      -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
-      -52,  -52,  -52,  -52,  -52,  -52,  -52,   93
-    },
-
-    {
-       11,  -53,   53,   54,  -53,  -53,   55,  -53,  -53,  -53,
-      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
-      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
-      -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53
-    },
-
-    {
-       11,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
-      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
-      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54,
-      -54,  -54,  -54,  -54,  -54,  -54,  -54,  -54
-
-    },
-
-    {
-       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56
-    },
-
-    {
-       11,   56,   56,   57,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   56,   56,   56
-    },
-
-    {
-       11,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-
-      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-      -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57
-    },
-
-    {
-       11,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,
-      -58,  -58,  -58,   58,  -58,  -58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -58
-    },
-
-    {
-       11,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
-      -59,  -59,  -59,   58,  -59,  -59,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   94,
-       58,   58,   58,   58,   58,   58,   58,  -59
-
-    },
-
-    {
-       11,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
-      -60,  -60,  -60,   58,  -60,  -60,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   95,
-       58,   58,   58,   58,   58,   58,   58,  -60
-    },
-
-    {
-       11,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,  -61,
-      -61,  -61,  -61,   58,  -61,  -61,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   96,   97,   58,
-       58,   58,   58,   58,   58,   58,   58,  -61
-    },
-
-    {
-       11,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62,
-      -62,  -62,  -62,   58,  -62,  -62,   58,   58,   58,   58,
-
-       58,   58,   98,   58,   58,   58,   58,   58,   58,   58,
-       99,   58,   58,   58,   58,   58,   58,  -62
-    },
-
-    {
-       11,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,  -63,
-      -63,  -63,  -63,   58,  -63,  -63,   58,  100,   58,   58,
-      101,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -63
-    },
-
-    {
-       11,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,  -64,
-      -64,  -64,  -64,   58,  -64,  -64,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  102,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  103,  -64
-
-    },
-
-    {
-       11,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,  -65,
-      -65,  -65,  -65,   58,  -65,  -65,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -65
-    },
-
-    {
-       11,  -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66,
-      -66,  -66,  -66,   58,  -66,  -66,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  104,   58,   58,  -66
-    },
-
-    {
-       11,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,  -67,
-      -67,  -67,  -67,   58,  -67,  -67,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,  105,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -67
-    },
-
-    {
-       11,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,  -68,
-      -68,  -68,  -68,   58,  -68,  -68,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  106,   58,
-       58,   58,   58,   58,   58,   58,   58,  -68
-    },
-
-    {
-       11,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,  -69,
-      -69,  -69,  -69,   58,  -69,  -69,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  107,   58,   58,  -69
-
-    },
-
-    {
-       11,  -70,  -70,  -70,  -70,  -70,  -70,  -70,  -70,  -70,
-      -70,  -70,  -70,   58,  -70,  -70,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  108,
-       58,   58,   58,   58,   58,   58,   58,  -70
-    },
-
-    {
-       11,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,  -71,
-      -71,  -71,  -71,   58,  -71,  -71,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  109,   58,
-       58,   58,   58,   58,   58,   58,   58,  -71
-    },
-
-    {
-       11,  -72,  -72,  -72,  -72,  -72,  -72,  -72,  -72,  -72,
-      -72,  -72,  -72,   58,  -72,  -72,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,  110,   58,   58,   58,   58,   58,  -72
-    },
-
-    {
-       11,  -73,  -73,  -73,  -73,  -73,  -73,  -73,  -73,  -73,
-      -73,  -73,  -73,   58,  -73,  -73,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  111,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -73
-    },
-
-    {
-       11,  -74,  -74,  -74,  -74,  -74,  -74,  -74,  -74,  -74,
-      -74,  -74,  -74,   58,  -74,  -74,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  112,   58,  -74
-
-    },
-
-    {
-       11,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,  -75,
-      -75,  -75,  -75,   58,  -75,  -75,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,  113,   58,   58,   58,   58,  -75
-    },
-
-    {
-       11,  -76,  -76,  -76,  -76,  -76,  -76,  -76,  -76,  -76,
-      -76,  -76,  -76,   58,  -76,  -76,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  114,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -76
-    },
-
-    {
-       11,   77,   77,  -77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-
-       77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   77,   77
-    },
-
-    {
-       11,  -78,   78,   79,  -78,  -78,  -78,  -78,  -78,  -78,
-      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,
-      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78,
-      -78,  -78,  -78,  -78,  -78,  -78,  -78,  -78
-    },
-
-    {
-       11,   80,  -79,  -79,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80,   80,   80,
-       80,   80,   80,   80,   80,   80,   80,   80
-
-    },
-
-    {
-       11,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
-      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
-      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80,
-      -80,  -80,  -80,  -80,  -80,  -80,  -80,  -80
-    },
-
-    {
-       11,   81,   81,   82,   81,  -81,   81,   81,  -81,   81,
-       81,   81,   81,   81,   81,  -81,   81,   81,   81,   81,
-       81,   81,   81,   81,   81,   81,   81,   81,   81,   81,
-       81,   81,   81,   81,   81,   81,   81,   81
-    },
-
-    {
-       11,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
-      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
-
-      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82,
-      -82,  -82,  -82,  -82,  -82,  -82,  -82,  -82
-    },
-
-    {
-       11,  -83,  -83,   84,  -83,  -83,  -83,  -83,  -83,  -83,
-      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,
-      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83,
-      -83,  -83,  -83,  -83,  -83,  -83,  -83,  -83
-    },
-
-    {
-       11,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
-      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
-      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84,
-      -84,  -84,  -84,  -84,  -84,  -84,  -84,  -84
-
-    },
-
-    {
-       11,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
-      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
-      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85,
-      -85,  -85,  -85,  -85,  -85,  -85,  -85,  -85
-    },
-
-    {
-       11,   86,   86,  -86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
-       86,   86,   86,   86,   86,   86,   86,   86
-    },
-
-    {
-       11,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
-      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
-
-      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87,
-      -87,  -87,  -87,  -87,  -87,  -87,  -87,  -87
-    },
-
-    {
-       11,  -88,  -88,  -88,  -88,  -88,  -88,  -88,  -88,  -88,
-      -88,  115,   89,   89,  -88,  -88,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -88
-    },
-
-    {
-       11,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,  -89,
-      -89,   89,   89,   89,  -89,  -89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -89
-
-    },
-
-    {
-       11,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
-      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
-      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90,
-      -90,  -90,  -90,  -90,  -90,  -90,  -90,  -90
-    },
-
-    {
-       11,  -91,  -91,  -91,  -91,  -91,  -91,  -91,  -91,  -91,
-      -91,   89,   89,   89,  -91,  -91,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -91
-    },
-
-    {
-       11,  -92,  -92,  -92,  -92,  -92,  -92,  -92,  -92,  -92,
-      -92,   89,   89,   89,  -92,  -92,   89,   89,   89,   89,
-
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,  -92
-    },
-
-    {
-       11,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
-      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
-      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93,
-      -93,  -93,  -93,  -93,  -93,  -93,  -93,  -93
-    },
-
-    {
-       11,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,  -94,
-      -94,  -94,  -94,   58,  -94,  -94,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  116,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -94
-
-    },
-
-    {
-       11,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,  -95,
-      -95,  -95,  -95,   58,  -95,  -95,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  117,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -95
-    },
-
-    {
-       11,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,  -96,
-      -96,  -96,  -96,   58,  -96,  -96,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  118,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -96
-    },
-
-    {
-       11,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,  -97,
-      -97,  -97,  -97,   58,  -97,  -97,   58,   58,   58,   58,
-
-       58,   58,  119,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -97
-    },
-
-    {
-       11,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,  -98,
-      -98,  -98,  -98,   58,  -98,  -98,  120,  121,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -98
-    },
-
-    {
-       11,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,  -99,
-      -99,  -99,  -99,   58,  -99,  -99,   58,   58,   58,   58,
-       58,  122,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  -99
-
-    },
-
-    {
-       11, -100, -100, -100, -100, -100, -100, -100, -100, -100,
-     -100, -100, -100,   58, -100, -100,   58,   58,  123,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -100
-    },
-
-    {
-       11, -101, -101, -101, -101, -101, -101, -101, -101, -101,
-     -101, -101, -101,   58, -101, -101,   58,   58,   58,  124,
-       58,   58,   58,   58,   58,  125,   58,  126,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -101
-    },
-
-    {
-       11, -102, -102, -102, -102, -102, -102, -102, -102, -102,
-     -102, -102, -102,   58, -102, -102,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-      127,   58,   58,   58,   58,   58,   58, -102
-    },
-
-    {
-       11, -103, -103, -103, -103, -103, -103, -103, -103, -103,
-     -103, -103, -103,   58, -103, -103,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -103
-    },
-
-    {
-       11, -104, -104, -104, -104, -104, -104, -104, -104, -104,
-     -104, -104, -104,   58, -104, -104,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -104
-
-    },
-
-    {
-       11, -105, -105, -105, -105, -105, -105, -105, -105, -105,
-     -105, -105, -105,   58, -105, -105,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  128,   58,
-       58,   58,   58,   58,   58,   58,   58, -105
-    },
-
-    {
-       11, -106, -106, -106, -106, -106, -106, -106, -106, -106,
-     -106, -106, -106,   58, -106, -106,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  129,   58, -106
-    },
-
-    {
-       11, -107, -107, -107, -107, -107, -107, -107, -107, -107,
-     -107, -107, -107,   58, -107, -107,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,  130,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -107
-    },
-
-    {
-       11, -108, -108, -108, -108, -108, -108, -108, -108, -108,
-     -108, -108, -108,   58, -108, -108,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  131,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -108
-    },
-
-    {
-       11, -109, -109, -109, -109, -109, -109, -109, -109, -109,
-     -109, -109, -109,   58, -109, -109,   58,   58,   58,   58,
-       58,   58,   58,  132,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -109
-
-    },
-
-    {
-       11, -110, -110, -110, -110, -110, -110, -110, -110, -110,
-     -110, -110, -110,   58, -110, -110,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  133,   58, -110
-    },
-
-    {
-       11, -111, -111, -111, -111, -111, -111, -111, -111, -111,
-     -111, -111, -111,   58, -111, -111,   58,   58,   58,   58,
-       58,  134,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -111
-    },
-
-    {
-       11, -112, -112, -112, -112, -112, -112, -112, -112, -112,
-     -112, -112, -112,   58, -112, -112,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,  135,   58,   58,   58,   58, -112
-    },
-
-    {
-       11, -113, -113, -113, -113, -113, -113, -113, -113, -113,
-     -113, -113, -113,   58, -113, -113,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  136,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -113
-    },
-
-    {
-       11, -114, -114, -114, -114, -114, -114, -114, -114, -114,
-     -114, -114, -114,   58, -114, -114,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,  137,   58,   58,   58, -114
-
-    },
-
-    {
-       11, -115, -115, -115, -115, -115, -115, -115, -115, -115,
-     -115,   89,   89,   89, -115, -115,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
-       89,   89,   89,   89,   89,   89,   89, -115
-    },
-
-    {
-       11, -116, -116, -116, -116, -116, -116, -116, -116, -116,
-     -116, -116, -116,   58, -116, -116,   58,   58,   58,   58,
-       58,  138,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -116
-    },
-
-    {
-       11, -117, -117, -117, -117, -117, -117, -117, -117, -117,
-     -117, -117, -117,   58, -117, -117,   58,   58,   58,  139,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -117
-    },
-
-    {
-       11, -118, -118, -118, -118, -118, -118, -118, -118, -118,
-     -118, -118, -118,   58, -118, -118,   58,   58,   58,   58,
-       58,  140,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -118
-    },
-
-    {
-       11, -119, -119, -119, -119, -119, -119, -119, -119, -119,
-     -119, -119, -119,   58, -119, -119,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  141,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -119
-
-    },
-
-    {
-       11, -120, -120, -120, -120, -120, -120, -120, -120, -120,
-     -120, -120, -120,   58, -120, -120,   58,   58,  142,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  143,   58,   58, -120
-    },
-
-    {
-       11, -121, -121, -121, -121, -121, -121, -121, -121, -121,
-     -121, -121, -121,   58, -121, -121,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  144,   58, -121
-    },
-
-    {
-       11, -122, -122, -122, -122, -122, -122, -122, -122, -122,
-     -122, -122, -122,   58, -122, -122,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,  145,   58,
-       58,   58,   58,   58,   58,   58,   58, -122
-    },
-
-    {
-       11, -123, -123, -123, -123, -123, -123, -123, -123, -123,
-     -123, -123, -123,   58, -123, -123,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  146,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -123
-    },
-
-    {
-       11, -124, -124, -124, -124, -124, -124, -124, -124, -124,
-     -124, -124, -124,   58, -124, -124,   58,   58,   58,   58,
-       58,   58,   58,   58,  147,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -124
-
-    },
-
-    {
-       11, -125, -125, -125, -125, -125, -125, -125, -125, -125,
-     -125, -125, -125,   58, -125, -125,   58,   58,   58,   58,
-       58,   58,  148,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -125
-    },
-
-    {
-       11, -126, -126, -126, -126, -126, -126, -126, -126, -126,
-     -126, -126, -126,   58, -126, -126,   58,   58,   58,   58,
-       58,  149,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -126
-    },
-
-    {
-       11, -127, -127, -127, -127, -127, -127, -127, -127, -127,
-     -127, -127, -127,   58, -127, -127,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -127
-    },
-
-    {
-       11, -128, -128, -128, -128, -128, -128, -128, -128, -128,
-     -128, -128, -128,   58, -128, -128,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,  150,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -128
-    },
-
-    {
-       11, -129, -129, -129, -129, -129, -129, -129, -129, -129,
-     -129, -129, -129,   58, -129, -129,   58,   58,   58,  151,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -129
-
-    },
-
-    {
-       11, -130, -130, -130, -130, -130, -130, -130, -130, -130,
-     -130, -130, -130,   58, -130, -130,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  152,
-       58,   58,   58,   58,   58,   58,   58, -130
-    },
-
-    {
-       11, -131, -131, -131, -131, -131, -131, -131, -131, -131,
-     -131, -131, -131,   58, -131, -131,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-      153,   58,   58,   58,   58,   58,   58, -131
-    },
-
-    {
-       11, -132, -132, -132, -132, -132, -132, -132, -132, -132,
-     -132, -132, -132,   58, -132, -132,   58,   58,   58,   58,
-
-       58,  154,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -132
-    },
-
-    {
-       11, -133, -133, -133, -133, -133, -133, -133, -133, -133,
-     -133, -133, -133,   58, -133, -133,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  155,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -133
-    },
-
-    {
-       11, -134, -134, -134, -134, -134, -134, -134, -134, -134,
-     -134, -134, -134,   58, -134, -134,   58,   58,   58,  156,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -134
-
-    },
-
-    {
-       11, -135, -135, -135, -135, -135, -135, -135, -135, -135,
-     -135, -135, -135,   58, -135, -135,   58,   58,   58,  157,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -135
-    },
-
-    {
-       11, -136, -136, -136, -136, -136, -136, -136, -136, -136,
-     -136, -136, -136,   58, -136, -136,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  158,   58,
-       58,   58,   58,   58,   58,   58,   58, -136
-    },
-
-    {
-       11, -137, -137, -137, -137, -137, -137, -137, -137, -137,
-     -137, -137, -137,   58, -137, -137,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  159,   58,   58, -137
-    },
-
-    {
-       11, -138, -138, -138, -138, -138, -138, -138, -138, -138,
-     -138, -138, -138,   58, -138, -138,   58,  160,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -138
-    },
-
-    {
-       11, -139, -139, -139, -139, -139, -139, -139, -139, -139,
-     -139, -139, -139,   58, -139, -139,   58,   58,   58,   58,
-       58,  161,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -139
-
-    },
-
-    {
-       11, -140, -140, -140, -140, -140, -140, -140, -140, -140,
-     -140, -140, -140,   58, -140, -140,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  162,   58,
-       58,   58,   58,   58,   58,   58,   58, -140
-    },
-
-    {
-       11, -141, -141, -141, -141, -141, -141, -141, -141, -141,
-     -141, -141, -141,   58, -141, -141,   58,   58,   58,   58,
-       58,   58,   58,  163,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -141
-    },
-
-    {
-       11, -142, -142, -142, -142, -142, -142, -142, -142, -142,
-     -142, -142, -142,   58, -142, -142,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  164,
-       58,   58,   58,   58,   58,   58,   58, -142
-    },
-
-    {
-       11, -143, -143, -143, -143, -143, -143, -143, -143, -143,
-     -143, -143, -143,   58, -143, -143,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,  165,   58,   58,   58,   58, -143
-    },
-
-    {
-       11, -144, -144, -144, -144, -144, -144, -144, -144, -144,
-     -144, -144, -144,   58, -144, -144,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  166,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -144
-
-    },
-
-    {
-       11, -145, -145, -145, -145, -145, -145, -145, -145, -145,
-     -145, -145, -145,   58, -145, -145,   58,   58,   58,   58,
-      167,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -145
-    },
-
-    {
-       11, -146, -146, -146, -146, -146, -146, -146, -146, -146,
-     -146, -146, -146,   58, -146, -146,   58,   58,   58,   58,
-       58,  168,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -146
-    },
-
-    {
-       11, -147, -147, -147, -147, -147, -147, -147, -147, -147,
-     -147, -147, -147,   58, -147, -147,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  169,
-       58,   58,   58,   58,   58,   58,   58, -147
-    },
-
-    {
-       11, -148, -148, -148, -148, -148, -148, -148, -148, -148,
-     -148, -148, -148,   58, -148, -148,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -148
-    },
-
-    {
-       11, -149, -149, -149, -149, -149, -149, -149, -149, -149,
-     -149, -149, -149,   58, -149, -149,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  170,   58,
-       58,   58,   58,   58,   58,   58,   58, -149
-
-    },
-
-    {
-       11, -150, -150, -150, -150, -150, -150, -150, -150, -150,
-     -150, -150, -150,   58, -150, -150,   58,   58,   58,   58,
-       58,  171,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -150
-    },
-
-    {
-       11, -151, -151, -151, -151, -151, -151, -151, -151, -151,
-     -151, -151, -151,   58, -151, -151,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  172,
-       58,   58,   58,   58,   58,   58,   58, -151
-    },
-
-    {
-       11, -152, -152, -152, -152, -152, -152, -152, -152, -152,
-     -152, -152, -152,   58, -152, -152,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,  173,   58,
-       58,   58,   58,   58,   58,   58,   58, -152
-    },
-
-    {
-       11, -153, -153, -153, -153, -153, -153, -153, -153, -153,
-     -153, -153, -153,   58, -153, -153,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  174,   58,   58, -153
-    },
-
-    {
-       11, -154, -154, -154, -154, -154, -154, -154, -154, -154,
-     -154, -154, -154,   58, -154, -154,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -154
-
-    },
-
-    {
-       11, -155, -155, -155, -155, -155, -155, -155, -155, -155,
-     -155, -155, -155,   58, -155, -155,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,  175,   58,   58,   58,   58, -155
-    },
-
-    {
-       11, -156, -156, -156, -156, -156, -156, -156, -156, -156,
-     -156, -156, -156,   58, -156, -156,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  176,   58,   58, -156
-    },
-
-    {
-       11, -157, -157, -157, -157, -157, -157, -157, -157, -157,
-     -157, -157, -157,   58, -157, -157,   58,   58,   58,   58,
-
-       58,  177,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -157
-    },
-
-    {
-       11, -158, -158, -158, -158, -158, -158, -158, -158, -158,
-     -158, -158, -158,   58, -158, -158,   58,   58,   58,   58,
-       58,   58,   58,  178,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -158
-    },
-
-    {
-       11, -159, -159, -159, -159, -159, -159, -159, -159, -159,
-     -159, -159, -159,   58, -159, -159,   58,  179,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -159
-
-    },
-
-    {
-       11, -160, -160, -160, -160, -160, -160, -160, -160, -160,
-     -160, -160, -160,   58, -160, -160,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  180,   58,
-       58,   58,   58,   58,   58,   58,   58, -160
-    },
-
-    {
-       11, -161, -161, -161, -161, -161, -161, -161, -161, -161,
-     -161, -161, -161,   58, -161, -161,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -161
-    },
-
-    {
-       11, -162, -162, -162, -162, -162, -162, -162, -162, -162,
-     -162, -162, -162,   58, -162, -162,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  181,   58,   58, -162
-    },
-
-    {
-       11, -163, -163, -163, -163, -163, -163, -163, -163, -163,
-     -163, -163, -163,   58, -163, -163,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -163
-    },
-
-    {
-       11, -164, -164, -164, -164, -164, -164, -164, -164, -164,
-     -164, -164, -164,   58, -164, -164,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,  182,
-       58,   58,   58,   58,   58,   58,   58, -164
-
-    },
-
-    {
-       11, -165, -165, -165, -165, -165, -165, -165, -165, -165,
-     -165, -165, -165,   58, -165, -165,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  183,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -165
-    },
-
-    {
-       11, -166, -166, -166, -166, -166, -166, -166, -166, -166,
-     -166, -166, -166,   58, -166, -166,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  184,   58,   58, -166
-    },
-
-    {
-       11, -167, -167, -167, -167, -167, -167, -167, -167, -167,
-     -167, -167, -167,   58, -167, -167,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,  185,   58,   58,   58, -167
-    },
-
-    {
-       11, -168, -168, -168, -168, -168, -168, -168, -168, -168,
-     -168, -168, -168,   58, -168, -168,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -168
-    },
-
-    {
-       11, -169, -169, -169, -169, -169, -169, -169, -169, -169,
-     -169, -169, -169,   58, -169, -169,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  186,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -169
-
-    },
-
-    {
-       11, -170, -170, -170, -170, -170, -170, -170, -170, -170,
-     -170, -170, -170,   58, -170, -170,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  187,   58, -170
-    },
-
-    {
-       11, -171, -171, -171, -171, -171, -171, -171, -171, -171,
-     -171, -171, -171,   58, -171, -171,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  188,   58,
-       58,   58,   58,   58,   58,   58,   58, -171
-    },
-
-    {
-       11, -172, -172, -172, -172, -172, -172, -172, -172, -172,
-     -172, -172, -172,   58, -172, -172,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,  189,   58,
-       58,   58,   58,   58,   58,   58,   58, -172
-    },
-
-    {
-       11, -173, -173, -173, -173, -173, -173, -173, -173, -173,
-     -173, -173, -173,   58, -173, -173,   58,  190,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -173
-    },
-
-    {
-       11, -174, -174, -174, -174, -174, -174, -174, -174, -174,
-     -174, -174, -174,   58, -174, -174,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -174
-
-    },
-
-    {
-       11, -175, -175, -175, -175, -175, -175, -175, -175, -175,
-     -175, -175, -175,   58, -175, -175,   58,   58,   58,   58,
-       58,  191,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -175
-    },
-
-    {
-       11, -176, -176, -176, -176, -176, -176, -176, -176, -176,
-     -176, -176, -176,   58, -176, -176,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -176
-    },
-
-    {
-       11, -177, -177, -177, -177, -177, -177, -177, -177, -177,
-     -177, -177, -177,   58, -177, -177,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -177
-    },
-
-    {
-       11, -178, -178, -178, -178, -178, -178, -178, -178, -178,
-     -178, -178, -178,   58, -178, -178,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -178
-    },
-
-    {
-       11, -179, -179, -179, -179, -179, -179, -179, -179, -179,
-     -179, -179, -179,   58, -179, -179,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  192,   58,   58, -179
-
-    },
-
-    {
-       11, -180, -180, -180, -180, -180, -180, -180, -180, -180,
-     -180, -180, -180,   58, -180, -180,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -180
-    },
-
-    {
-       11, -181, -181, -181, -181, -181, -181, -181, -181, -181,
-     -181, -181, -181,   58, -181, -181,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -181
-    },
-
-    {
-       11, -182, -182, -182, -182, -182, -182, -182, -182, -182,
-     -182, -182, -182,   58, -182, -182,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,  193,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -182
-    },
-
-    {
-       11, -183, -183, -183, -183, -183, -183, -183, -183, -183,
-     -183, -183, -183,   58, -183, -183,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,  194,   58,   58,   58, -183
-    },
-
-    {
-       11, -184, -184, -184, -184, -184, -184, -184, -184, -184,
-     -184, -184, -184,   58, -184, -184,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -184
-
-    },
-
-    {
-       11, -185, -185, -185, -185, -185, -185, -185, -185, -185,
-     -185, -185, -185,   58, -185, -185,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -185
-    },
-
-    {
-       11, -186, -186, -186, -186, -186, -186, -186, -186, -186,
-     -186, -186, -186,   58, -186, -186,   58,   58,   58,  195,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -186
-    },
-
-    {
-       11, -187, -187, -187, -187, -187, -187, -187, -187, -187,
-     -187, -187, -187,   58, -187, -187,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -187
-    },
-
-    {
-       11, -188, -188, -188, -188, -188, -188, -188, -188, -188,
-     -188, -188, -188,   58, -188, -188,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,  196,   58, -188
-    },
-
-    {
-       11, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-     -189, -189, -189,   58, -189, -189,   58,   58,   58,   58,
-       58,   58,  197,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -189
-
-    },
-
-    {
-       11, -190, -190, -190, -190, -190, -190, -190, -190, -190,
-     -190, -190, -190,   58, -190, -190,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,  198,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -190
-    },
-
-    {
-       11, -191, -191, -191, -191, -191, -191, -191, -191, -191,
-     -191, -191, -191,   58, -191, -191,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,  199,   58,   58,   58, -191
-    },
-
-    {
-       11, -192, -192, -192, -192, -192, -192, -192, -192, -192,
-     -192, -192, -192,   58, -192, -192,   58,   58,   58,   58,
-
-       58,  200,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -192
-    },
-
-    {
-       11, -193, -193, -193, -193, -193, -193, -193, -193, -193,
-     -193, -193, -193,   58, -193, -193,   58,   58,   58,   58,
-       58,  201,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -193
-    },
-
-    {
-       11, -194, -194, -194, -194, -194, -194, -194, -194, -194,
-     -194, -194, -194,   58, -194, -194,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  202,   58,   58, -194
-
-    },
-
-    {
-       11, -195, -195, -195, -195, -195, -195, -195, -195, -195,
-     -195, -195, -195,   58, -195, -195,   58,   58,   58,   58,
-       58,  203,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -195
-    },
-
-    {
-       11, -196, -196, -196, -196, -196, -196, -196, -196, -196,
-     -196, -196, -196,   58, -196, -196,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -196
-    },
-
-    {
-       11, -197, -197, -197, -197, -197, -197, -197, -197, -197,
-     -197, -197, -197,   58, -197, -197,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,  204,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -197
-    },
-
-    {
-       11, -198, -198, -198, -198, -198, -198, -198, -198, -198,
-     -198, -198, -198,   58, -198, -198,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -198
-    },
-
-    {
-       11, -199, -199, -199, -199, -199, -199, -199, -199, -199,
-     -199, -199, -199,   58, -199, -199,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -199
-
-    },
-
-    {
-       11, -200, -200, -200, -200, -200, -200, -200, -200, -200,
-     -200, -200, -200,   58, -200, -200,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -200
-    },
-
-    {
-       11, -201, -201, -201, -201, -201, -201, -201, -201, -201,
-     -201, -201, -201,   58, -201, -201,   58,  205,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -201
-    },
-
-    {
-       11, -202, -202, -202, -202, -202, -202, -202, -202, -202,
-     -202, -202, -202,   58, -202, -202,   58,  206,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -202
-    },
-
-    {
-       11, -203, -203, -203, -203, -203, -203, -203, -203, -203,
-     -203, -203, -203,   58, -203, -203,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -203
-    },
-
-    {
-       11, -204, -204, -204, -204, -204, -204, -204, -204, -204,
-     -204, -204, -204,   58, -204, -204,   58,   58,   58,   58,
-       58,   58,   58,  207,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -204
-
-    },
-
-    {
-       11, -205, -205, -205, -205, -205, -205, -205, -205, -205,
-     -205, -205, -205,   58, -205, -205,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,  208,   58,
-       58,   58,   58,   58,   58,   58,   58, -205
-    },
-
-    {
-       11, -206, -206, -206, -206, -206, -206, -206, -206, -206,
-     -206, -206, -206,   58, -206, -206,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,  209,   58,   58, -206
-    },
-
-    {
-       11, -207, -207, -207, -207, -207, -207, -207, -207, -207,
-     -207, -207, -207,   58, -207, -207,   58,   58,   58,   58,
-
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -207
-    },
-
-    {
-       11, -208, -208, -208, -208, -208, -208, -208, -208, -208,
-     -208, -208, -208,   58, -208, -208,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -208
-    },
-
-    {
-       11, -209, -209, -209, -209, -209, -209, -209, -209, -209,
-     -209, -209, -209,   58, -209, -209,   58,   58,   58,   58,
-       58,  210,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -209
-
-    },
-
-    {
-       11, -210, -210, -210, -210, -210, -210, -210, -210, -210,
-     -210, -210, -210,   58, -210, -210,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58, -210
-    },
-
-    } ;
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up zconftext.
- */
-#define YY_DO_BEFORE_ACTION \
-       (yytext_ptr) = yy_bp; \
-       zconfleng = (size_t) (yy_cp - yy_bp); \
-       (yy_hold_char) = *yy_cp; \
-       *yy_cp = '\0'; \
-       (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 64
-#define YY_END_OF_BUFFER 65
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-       {
-       flex_int32_t yy_verify;
-       flex_int32_t yy_nxt;
-       };
-static yyconst flex_int16_t yy_accept[211] =
-    {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       65,    5,    4,    3,    2,   36,   37,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       63,   60,   62,   55,   59,   58,   57,   53,   48,   42,
-       47,   51,   53,   40,   41,   50,   50,   43,   53,   50,
-       50,   53,    4,    3,    2,    2,    1,   35,   35,   35,
-       35,   35,   35,   35,   16,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   63,   60,   62,   61,
-       55,   54,   57,   56,   44,   51,   38,   50,   50,   52,
-       45,   46,   39,   35,   35,   35,   35,   35,   35,   35,
-
-       35,   35,   30,   29,   35,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   49,   25,   35,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   15,   35,    7,   35,
-       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
-       35,   35,   35,   35,   35,   35,   35,   17,   35,   35,
-       35,   35,   35,   34,   35,   35,   35,   35,   35,   35,
-       10,   35,   13,   35,   35,   35,   35,   33,   35,   35,
-       35,   35,   35,   22,   35,   32,    9,   31,   35,   26,
-       12,   35,   35,   21,   18,   35,    8,   35,   35,   35,
-       35,   35,   27,   35,   35,    6,   35,   20,   19,   23,
-
-       35,   35,   11,   35,   35,   35,   14,   28,   35,   24
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    6,    1,    1,    7,    8,    9,
-       10,    1,    1,    1,   11,   12,   12,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,    1,    1,    1,
-       14,    1,    1,    1,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-        1,   15,    1,    1,   16,    1,   17,   18,   19,   20,
-
-       21,   22,   23,   24,   25,   13,   13,   26,   27,   28,
-       29,   30,   31,   32,   33,   34,   35,   13,   13,   36,
-       13,   13,    1,   37,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-extern int zconf_flex_debug;
-int zconf_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *zconftext;
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define LKC_DIRECT_LINK
-#include "lkc.h"
-
-#define START_STRSIZE  16
-
-char *text;
-static char *text_ptr;
-static int text_size, text_asize;
-
-struct buffer {
-        struct buffer *parent;
-        YY_BUFFER_STATE state;
-};
-
-struct buffer *current_buf;
-
-static int last_ts, first_ts;
-
-static void zconf_endhelp(void);
-static struct buffer *zconf_endfile(void);
-
-void new_string(void)
-{
-       text = malloc(START_STRSIZE);
-       text_asize = START_STRSIZE;
-       text_ptr = text;
-       text_size = 0;
-       *text_ptr = 0;
-}
-
-void append_string(const char *str, int size)
-{
-       int new_size = text_size + size + 1;
-       if (new_size > text_asize) {
-               text = realloc(text, new_size);
-               text_asize = new_size;
-               text_ptr = text + text_size;
-       }
-       memcpy(text_ptr, str, size);
-       text_ptr += size;
-       text_size += size;
-       *text_ptr = 0;
-}
-
-void alloc_string(const char *str, int size)
-{
-       text = malloc(size + 1);
-       memcpy(text, str, size);
-       text[size] = 0;
-}
-
-#define INITIAL 0
-#define COMMAND 1
-#define HELP 2
-#define STRING 3
-#define PARAM 4
-
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int zconfwrap (void );
-#else
-extern int zconfwrap (void );
-#endif
-#endif
-
-    static void yyunput (int c,char *buf_ptr  );
-    
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( zconftext, zconfleng, 1, zconfout )
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-       errno=0; \
-       while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
-       { \
-               if( errno != EINTR) \
-               { \
-                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                       break; \
-               } \
-               errno=0; \
-               clearerr(zconfin); \
-       }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int zconflex (void);
-
-#define YY_DECL int zconflex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after zconftext and zconfleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-       YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-       register yy_state_type yy_current_state;
-       register char *yy_cp, *yy_bp;
-       register int yy_act;
-    
-       int str = 0;
-       int ts, i;
-
-       if ( (yy_init) )
-               {
-               (yy_init) = 0;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! zconfin )
-                       zconfin = stdin;
-
-               if ( ! zconfout )
-                       zconfout = stdout;
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       zconfensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               zconf_create_buffer(zconfin,YY_BUF_SIZE );
-               }
-
-               zconf_load_buffer_state( );
-               }
-
-       while ( 1 )             /* loops until end-of-file is reached */
-               {
-               yy_cp = (yy_c_buf_p);
-
-               /* Support of zconftext. */
-               *yy_cp = (yy_hold_char);
-
-               /* yy_bp points to the position in yy_ch_buf of the start of
-                * the current run.
-                */
-               yy_bp = yy_cp;
-
-               yy_current_state = (yy_start);
-yy_match:
-               while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)]  ]) > 0 )
-                       ++yy_cp;
-
-               yy_current_state = -yy_current_state;
-
-yy_find_action:
-               yy_act = yy_accept[yy_current_state];
-
-               YY_DO_BEFORE_ACTION;
-
-do_action:     /* This label is used only to access EOF actions. */
-
-               switch ( yy_act )
-       { /* beginning of action switch */
-case 1:
-/* rule 1 can match eol */
-YY_RULE_SETUP
-current_file->lineno++;
-       YY_BREAK
-case 2:
-YY_RULE_SETUP
-
-       YY_BREAK
-case 3:
-/* rule 3 can match eol */
-YY_RULE_SETUP
-current_file->lineno++; return T_EOL;
-       YY_BREAK
-case 4:
-YY_RULE_SETUP
-{
-       BEGIN(COMMAND);
-}
-       YY_BREAK
-case 5:
-YY_RULE_SETUP
-{
-       unput(zconftext[0]);
-       BEGIN(COMMAND);
-}
-       YY_BREAK
-
-case 6:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_MAINMENU;
-       YY_BREAK
-case 7:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_MENU;
-       YY_BREAK
-case 8:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_ENDMENU;
-       YY_BREAK
-case 9:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_SOURCE;
-       YY_BREAK
-case 10:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_CHOICE;
-       YY_BREAK
-case 11:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_ENDCHOICE;
-       YY_BREAK
-case 12:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_COMMENT;
-       YY_BREAK
-case 13:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_CONFIG;
-       YY_BREAK
-case 14:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_MENUCONFIG;
-       YY_BREAK
-case 15:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_HELP;
-       YY_BREAK
-case 16:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_IF;
-       YY_BREAK
-case 17:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_ENDIF;
-       YY_BREAK
-case 18:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_DEPENDS;
-       YY_BREAK
-case 19:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_REQUIRES;
-       YY_BREAK
-case 20:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_OPTIONAL;
-       YY_BREAK
-case 21:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_DEFAULT;
-       YY_BREAK
-case 22:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_PROMPT;
-       YY_BREAK
-case 23:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_TRISTATE;
-       YY_BREAK
-case 24:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_DEF_TRISTATE;
-       YY_BREAK
-case 25:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_BOOLEAN;
-       YY_BREAK
-case 26:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_BOOLEAN;
-       YY_BREAK
-case 27:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_DEF_BOOLEAN;
-       YY_BREAK
-case 28:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_DEF_BOOLEAN;
-       YY_BREAK
-case 29:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_INT;
-       YY_BREAK
-case 30:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_HEX;
-       YY_BREAK
-case 31:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_STRING;
-       YY_BREAK
-case 32:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_SELECT;
-       YY_BREAK
-case 33:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_SELECT;
-       YY_BREAK
-case 34:
-YY_RULE_SETUP
-BEGIN(PARAM); return T_RANGE;
-       YY_BREAK
-case 35:
-YY_RULE_SETUP
-{
-               alloc_string(zconftext, zconfleng);
-               zconflval.string = text;
-               return T_WORD;
-       }
-       YY_BREAK
-case 36:
-YY_RULE_SETUP
-
-       YY_BREAK
-case 37:
-/* rule 37 can match eol */
-YY_RULE_SETUP
-current_file->lineno++; BEGIN(INITIAL);
-       YY_BREAK
-
-case 38:
-YY_RULE_SETUP
-return T_AND;
-       YY_BREAK
-case 39:
-YY_RULE_SETUP
-return T_OR;
-       YY_BREAK
-case 40:
-YY_RULE_SETUP
-return T_OPEN_PAREN;
-       YY_BREAK
-case 41:
-YY_RULE_SETUP
-return T_CLOSE_PAREN;
-       YY_BREAK
-case 42:
-YY_RULE_SETUP
-return T_NOT;
-       YY_BREAK
-case 43:
-YY_RULE_SETUP
-return T_EQUAL;
-       YY_BREAK
-case 44:
-YY_RULE_SETUP
-return T_UNEQUAL;
-       YY_BREAK
-case 45:
-YY_RULE_SETUP
-return T_IF;
-       YY_BREAK
-case 46:
-YY_RULE_SETUP
-return T_ON;
-       YY_BREAK
-case 47:
-YY_RULE_SETUP
-{
-               str = zconftext[0];
-               new_string();
-               BEGIN(STRING);
-       }
-       YY_BREAK
-case 48:
-/* rule 48 can match eol */
-YY_RULE_SETUP
-BEGIN(INITIAL); current_file->lineno++; return T_EOL;
-       YY_BREAK
-case 49:
-YY_RULE_SETUP
-/* ignore */
-       YY_BREAK
-case 50:
-YY_RULE_SETUP
-{
-               alloc_string(zconftext, zconfleng);
-               zconflval.string = text;
-               return T_WORD;
-       }
-       YY_BREAK
-case 51:
-YY_RULE_SETUP
-/* comment */
-       YY_BREAK
-case 52:
-/* rule 52 can match eol */
-YY_RULE_SETUP
-current_file->lineno++;
-       YY_BREAK
-case 53:
-YY_RULE_SETUP
-
-       YY_BREAK
-case YY_STATE_EOF(PARAM):
-{
-               BEGIN(INITIAL);
-       }
-       YY_BREAK
-
-case 54:
-/* rule 54 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-               append_string(zconftext, zconfleng);
-               zconflval.string = text;
-               return T_WORD_QUOTE;
-       }
-       YY_BREAK
-case 55:
-YY_RULE_SETUP
-{
-               append_string(zconftext, zconfleng);
-       }
-       YY_BREAK
-case 56:
-/* rule 56 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-               append_string(zconftext + 1, zconfleng - 1);
-               zconflval.string = text;
-               return T_WORD_QUOTE;
-       }
-       YY_BREAK
-case 57:
-YY_RULE_SETUP
-{
-               append_string(zconftext + 1, zconfleng - 1);
-       }
-       YY_BREAK
-case 58:
-YY_RULE_SETUP
-{
-               if (str == zconftext[0]) {
-                       BEGIN(PARAM);
-                       zconflval.string = text;
-                       return T_WORD_QUOTE;
-               } else
-                       append_string(zconftext, 1);
-       }
-       YY_BREAK
-case 59:
-/* rule 59 can match eol */
-YY_RULE_SETUP
-{
-               printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
-               current_file->lineno++;
-               BEGIN(INITIAL);
-               return T_EOL;
-       }
-       YY_BREAK
-case YY_STATE_EOF(STRING):
-{
-               BEGIN(INITIAL);
-       }
-       YY_BREAK
-
-case 60:
-YY_RULE_SETUP
-{
-               ts = 0;
-               for (i = 0; i < zconfleng; i++) {
-                       if (zconftext[i] == '\t')
-                               ts = (ts & ~7) + 8;
-                       else
-                               ts++;
-               }
-               last_ts = ts;
-               if (first_ts) {
-                       if (ts < first_ts) {
-                               zconf_endhelp();
-                               return T_HELPTEXT;
-                       }
-                       ts -= first_ts;
-                       while (ts > 8) {
-                               append_string("        ", 8);
-                               ts -= 8;
-                       }
-                       append_string("        ", ts);
-               }
-       }
-       YY_BREAK
-case 61:
-/* rule 61 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-               current_file->lineno++;
-               zconf_endhelp();
-               return T_HELPTEXT;
-       }
-       YY_BREAK
-case 62:
-/* rule 62 can match eol */
-YY_RULE_SETUP
-{
-               current_file->lineno++;
-               append_string("\n", 1);
-       }
-       YY_BREAK
-case 63:
-YY_RULE_SETUP
-{
-               append_string(zconftext, zconfleng);
-               if (!first_ts)
-                       first_ts = last_ts;
-       }
-       YY_BREAK
-case YY_STATE_EOF(HELP):
-{
-               zconf_endhelp();
-               return T_HELPTEXT;
-       }
-       YY_BREAK
-
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(COMMAND):
-{
-       if (current_buf) {
-               zconf_endfile();
-               return T_EOF;
-       }
-       fclose(zconfin);
-       yyterminate();
-}
-       YY_BREAK
-case 64:
-YY_RULE_SETUP
-YY_FATAL_ERROR( "flex scanner jammed" );
-       YY_BREAK
-
-       case YY_END_OF_BUFFER:
-               {
-               /* Amount of text matched not including the EOB char. */
-               int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-               /* Undo the effects of YY_DO_BEFORE_ACTION. */
-               *yy_cp = (yy_hold_char);
-               YY_RESTORE_YY_MORE_OFFSET
-
-               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-                       {
-                       /* We're scanning a new file or input source.  It's
-                        * possible that this happened because the user
-                        * just pointed zconfin at a new source and called
-                        * zconflex().  If so, then we have to assure
-                        * consistency between YY_CURRENT_BUFFER and our
-                        * globals.  Here is the right place to do so, because
-                        * this is the first action (other than possibly a
-                        * back-up) that will match for the new input source.
-                        */
-                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
-                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-                       }
-
-               /* Note that here we test for yy_c_buf_p "<=" to the position
-                * of the first EOB in the buffer, since yy_c_buf_p will
-                * already have been incremented past the NUL character
-                * (since all states make transitions on EOB to the
-                * end-of-buffer state).  Contrast this with the test
-                * in input().
-                */
-               if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                       { /* This was really a NUL. */
-                       yy_state_type yy_next_state;
-
-                       (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-                       yy_current_state = yy_get_previous_state(  );
-
-                       /* Okay, we're now positioned to make the NUL
-                        * transition.  We couldn't have
-                        * yy_get_previous_state() go ahead and do it
-                        * for us because it doesn't know how to deal
-                        * with the possibility of jamming (and we don't
-                        * want to build jamming into it because then it
-                        * will run more slowly).
-                        */
-
-                       yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-                       yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-                       if ( yy_next_state )
-                               {
-                               /* Consume the NUL. */
-                               yy_cp = ++(yy_c_buf_p);
-                               yy_current_state = yy_next_state;
-                               goto yy_match;
-                               }
-
-                       else
-                               {
-                               yy_cp = (yy_c_buf_p);
-                               goto yy_find_action;
-                               }
-                       }
-
-               else switch ( yy_get_next_buffer(  ) )
-                       {
-                       case EOB_ACT_END_OF_FILE:
-                               {
-                               (yy_did_buffer_switch_on_eof) = 0;
-
-                               if ( zconfwrap( ) )
-                                       {
-                                       /* Note: because we've taken care in
-                                        * yy_get_next_buffer() to have set up
-                                        * zconftext, we can now set up
-                                        * yy_c_buf_p so that if some total
-                                        * hoser (like flex itself) wants to
-                                        * call the scanner after we return the
-                                        * YY_NULL, it'll still work - another
-                                        * YY_NULL will get returned.
-                                        */
-                                       (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-                                       yy_act = YY_STATE_EOF(YY_START);
-                                       goto do_action;
-                                       }
-
-                               else
-                                       {
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
-                                       }
-                               break;
-                               }
-
-                       case EOB_ACT_CONTINUE_SCAN:
-                               (yy_c_buf_p) =
-                                       (yytext_ptr) + yy_amount_of_matched_text;
-
-                               yy_current_state = yy_get_previous_state(  );
-
-                               yy_cp = (yy_c_buf_p);
-                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                               goto yy_match;
-
-                       case EOB_ACT_LAST_MATCH:
-                               (yy_c_buf_p) =
-                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-                               yy_current_state = yy_get_previous_state(  );
-
-                               yy_cp = (yy_c_buf_p);
-                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                               goto yy_find_action;
-                       }
-               break;
-               }
-
-       default:
-               YY_FATAL_ERROR(
-                       "fatal flex scanner internal error--no action found" );
-       } /* end of action switch */
-               } /* end of scanning one token */
-} /* end of zconflex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *     EOB_ACT_LAST_MATCH -
- *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *     EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       register char *source = (yytext_ptr);
-       register int number_to_move, i;
-       int ret_val;
-
-       if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-               YY_FATAL_ERROR(
-               "fatal flex scanner internal error--end of buffer missed" );
-
-       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-               { /* Don't try to fill the buffer, so this is an EOF. */
-               if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-                       {
-                       /* We matched a single character, the EOB, so
-                        * treat this as a final EOF.
-                        */
-                       return EOB_ACT_END_OF_FILE;
-                       }
-
-               else
-                       {
-                       /* We matched some text prior to the EOB, first
-                        * process it.
-                        */
-                       return EOB_ACT_LAST_MATCH;
-                       }
-               }
-
-       /* Try to read more data. */
-
-       /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-       for ( i = 0; i < number_to_move; ++i )
-               *(dest++) = *(source++);
-
-       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-               /* don't do the read, it's not guaranteed to return an EOF,
-                * just force an EOF
-                */
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-       else
-               {
-                       size_t num_to_read =
-                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-               while ( num_to_read <= 0 )
-                       { /* Not enough room in the buffer - grow it. */
-
-                       /* just a shorter name for the current buffer */
-                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-                       int yy_c_buf_p_offset =
-                               (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-                       if ( b->yy_is_our_buffer )
-                               {
-                               int new_size = b->yy_buf_size * 2;
-
-                               if ( new_size <= 0 )
-                                       b->yy_buf_size += b->yy_buf_size / 8;
-                               else
-                                       b->yy_buf_size *= 2;
-
-                               b->yy_ch_buf = (char *)
-                                       /* Include room in for 2 EOB chars. */
-                                       zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-                               }
-                       else
-                               /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = 0;
-
-                       if ( ! b->yy_ch_buf )
-                               YY_FATAL_ERROR(
-                               "fatal error - scanner input buffer overflow" );
-
-                       (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-                       num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-                                               number_to_move - 1;
-
-                       }
-
-               if ( num_to_read > YY_READ_BUF_SIZE )
-                       num_to_read = YY_READ_BUF_SIZE;
-
-               /* Read in more data. */
-               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       (yy_n_chars), num_to_read );
-
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       if ( (yy_n_chars) == 0 )
-               {
-               if ( number_to_move == YY_MORE_ADJ )
-                       {
-                       ret_val = EOB_ACT_END_OF_FILE;
-                       zconfrestart(zconfin  );
-                       }
-
-               else
-                       {
-                       ret_val = EOB_ACT_LAST_MATCH;
-                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-                               YY_BUFFER_EOF_PENDING;
-                       }
-               }
-
-       else
-               ret_val = EOB_ACT_CONTINUE_SCAN;
-
-       (yy_n_chars) += number_to_move;
-       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-       (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-       return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-       register yy_state_type yy_current_state;
-       register char *yy_cp;
-    
-       yy_current_state = (yy_start);
-
-       for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-               {
-               yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
-               }
-
-       return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *     next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-       register int yy_is_jam;
-    
-       yy_current_state = yy_nxt[yy_current_state][1];
-       yy_is_jam = (yy_current_state <= 0);
-
-       return yy_is_jam ? 0 : yy_current_state;
-}
-
-    static void yyunput (int c, register char * yy_bp )
-{
-       register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-       /* undo effects of setting up zconftext */
-       *yy_cp = (yy_hold_char);
-
-       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-               { /* need to shift things up to make room */
-               /* +2 for EOB chars. */
-               register int number_to_move = (yy_n_chars) + 2;
-               register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-               register char *source =
-                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                       *--dest = *--source;
-
-               yy_cp += (int) (dest - source);
-               yy_bp += (int) (dest - source);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
-               }
-
-       *--yy_cp = (char) c;
-
-       (yytext_ptr) = yy_bp;
-       (yy_hold_char) = *yy_cp;
-       (yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-       int c;
-    
-       *(yy_c_buf_p) = (yy_hold_char);
-
-       if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-               {
-               /* yy_c_buf_p now points to the character we want to return.
-                * If this occurs *before* the EOB characters, then it's a
-                * valid NUL; if not, then we've hit the end of the buffer.
-                */
-               if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                       /* This was really a NUL. */
-                       *(yy_c_buf_p) = '\0';
-
-               else
-                       { /* need more input */
-                       int offset = (yy_c_buf_p) - (yytext_ptr);
-                       ++(yy_c_buf_p);
-
-                       switch ( yy_get_next_buffer(  ) )
-                               {
-                               case EOB_ACT_LAST_MATCH:
-                                       /* This happens because yy_g_n_b()
-                                        * sees that we've accumulated a
-                                        * token and flags that we need to
-                                        * try matching the token before
-                                        * proceeding.  But for input(),
-                                        * there's no matching to consider.
-                                        * So convert the EOB_ACT_LAST_MATCH
-                                        * to EOB_ACT_END_OF_FILE.
-                                        */
-
-                                       /* Reset buffer status. */
-                                       zconfrestart(zconfin );
-
-                                       /*FALLTHROUGH*/
-
-                               case EOB_ACT_END_OF_FILE:
-                                       {
-                                       if ( zconfwrap( ) )
-                                               return EOF;
-
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
-#ifdef __cplusplus
-                                       return yyinput();
-#else
-                                       return input();
-#endif
-                                       }
-
-                               case EOB_ACT_CONTINUE_SCAN:
-                                       (yy_c_buf_p) = (yytext_ptr) + offset;
-                                       break;
-                               }
-                       }
-               }
-
-       c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve zconftext */
-       (yy_hold_char) = *++(yy_c_buf_p);
-
-       return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void zconfrestart  (FILE * input_file )
-{
-    
-       if ( ! YY_CURRENT_BUFFER ){
-        zconfensure_buffer_stack ();
-               YY_CURRENT_BUFFER_LVALUE =
-            zconf_create_buffer(zconfin,YY_BUF_SIZE );
-       }
-
-       zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
-       zconf_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void zconf_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-       /* TODO. We should be able to replace this entire function body
-        * with
-        *              zconfpop_buffer_state();
-        *              zconfpush_buffer_state(new_buffer);
-     */
-       zconfensure_buffer_stack ();
-       if ( YY_CURRENT_BUFFER == new_buffer )
-               return;
-
-       if ( YY_CURRENT_BUFFER )
-               {
-               /* Flush out information for old buffer. */
-               *(yy_c_buf_p) = (yy_hold_char);
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       zconf_load_buffer_state( );
-
-       /* We don't actually know whether we did this switch during
-        * EOF (zconfwrap()) processing, but the only time this flag
-        * is looked at is after zconfwrap() is called, so it's safe
-        * to go ahead and always set it.
-        */
-       (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void zconf_load_buffer_state  (void)
-{
-       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-       (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-       zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-       (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE zconf_create_buffer  (FILE * file, int  size )
-{
-       YY_BUFFER_STATE b;
-    
-       b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-       b->yy_buf_size = size;
-
-       /* yy_ch_buf has to be 2 characters longer than the size given because
-        * we need to put in 2 end-of-buffer characters.
-        */
-       b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2  );
-       if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-       b->yy_is_our_buffer = 1;
-
-       zconf_init_buffer(b,file );
-
-       return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with zconf_create_buffer()
- * 
- */
-    void zconf_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-       if ( ! b )
-               return;
-
-       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-       if ( b->yy_is_our_buffer )
-               zconffree((void *) b->yy_ch_buf  );
-
-       zconffree((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a zconfrestart() or at EOF.
- */
-    static void zconf_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-       int oerrno = errno;
-    
-       zconf_flush_buffer(b );
-
-       b->yy_input_file = file;
-       b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then zconf_init_buffer was _probably_
-     * called from zconfrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = 0;
-    
-       errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void zconf_flush_buffer (YY_BUFFER_STATE  b )
-{
-       if ( ! b )
-               return;
-
-       b->yy_n_chars = 0;
-
-       /* We always need two end-of-buffer characters.  The first causes
-        * a transition to the end-of-buffer state.  The second causes
-        * a jam in that state.
-        */
-       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-       b->yy_buf_pos = &b->yy_ch_buf[0];
-
-       b->yy_at_bol = 1;
-       b->yy_buffer_status = YY_BUFFER_NEW;
-
-       if ( b == YY_CURRENT_BUFFER )
-               zconf_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-       if (new_buffer == NULL)
-               return;
-
-       zconfensure_buffer_stack();
-
-       /* This block is copied from zconf_switch_to_buffer. */
-       if ( YY_CURRENT_BUFFER )
-               {
-               /* Flush out information for old buffer. */
-               *(yy_c_buf_p) = (yy_hold_char);
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       /* Only push if top exists. Otherwise, replace top. */
-       if (YY_CURRENT_BUFFER)
-               (yy_buffer_stack_top)++;
-       YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-       /* copied from zconf_switch_to_buffer. */
-       zconf_load_buffer_state( );
-       (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void zconfpop_buffer_state (void)
-{
-       if (!YY_CURRENT_BUFFER)
-               return;
-
-       zconf_delete_buffer(YY_CURRENT_BUFFER );
-       YY_CURRENT_BUFFER_LVALUE = NULL;
-       if ((yy_buffer_stack_top) > 0)
-               --(yy_buffer_stack_top);
-
-       if (YY_CURRENT_BUFFER) {
-               zconf_load_buffer_state( );
-               (yy_did_buffer_switch_on_eof) = 1;
-       }
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void zconfensure_buffer_stack (void)
-{
-       int num_to_alloc;
-    
-       if (!(yy_buffer_stack)) {
-
-               /* First allocation is just for 2 elements, since we don't know if this
-                * scanner will even need a stack. We use 2 instead of 1 to avoid an
-                * immediate realloc on the next call.
-         */
-               num_to_alloc = 1;
-               (yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
-                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               
-               memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-                               
-               (yy_buffer_stack_max) = num_to_alloc;
-               (yy_buffer_stack_top) = 0;
-               return;
-       }
-
-       if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-               /* Increase the buffer to prepare for a possible push. */
-               int grow_size = 8 /* arbitrary grow size */;
-
-               num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
-                                                               ((yy_buffer_stack),
-                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-
-               /* zero only the new slots.*/
-               memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-               (yy_buffer_stack_max) = num_to_alloc;
-       }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE zconf_scan_buffer  (char * base, yy_size_t  size )
-{
-       YY_BUFFER_STATE b;
-    
-       if ( size < 2 ||
-            base[size-2] != YY_END_OF_BUFFER_CHAR ||
-            base[size-1] != YY_END_OF_BUFFER_CHAR )
-               /* They forgot to leave room for the EOB's. */
-               return 0;
-
-       b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
-
-       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
-       b->yy_buf_pos = b->yy_ch_buf = base;
-       b->yy_is_our_buffer = 0;
-       b->yy_input_file = 0;
-       b->yy_n_chars = b->yy_buf_size;
-       b->yy_is_interactive = 0;
-       b->yy_at_bol = 1;
-       b->yy_fill_buffer = 0;
-       b->yy_buffer_status = YY_BUFFER_NEW;
-
-       zconf_switch_to_buffer(b  );
-
-       return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to zconflex() will
- * scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       zconf_scan_bytes() instead.
- */
-YY_BUFFER_STATE zconf_scan_string (yyconst char * str )
-{
-    
-       return zconf_scan_bytes(str,strlen(str) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE zconf_scan_bytes  (yyconst char * bytes, int  len )
-{
-       YY_BUFFER_STATE b;
-       char *buf;
-       yy_size_t n;
-       int i;
-    
-       /* Get memory for full buffer, including space for trailing EOB's. */
-       n = len + 2;
-       buf = (char *) zconfalloc(n  );
-       if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
-
-       for ( i = 0; i < len; ++i )
-               buf[i] = bytes[i];
-
-       buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
-       b = zconf_scan_buffer(buf,n );
-       if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
-
-       /* It's okay to grow etc. this buffer, and we should throw it
-        * away when we're done.
-        */
-       b->yy_is_our_buffer = 1;
-
-       return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-       (void) fprintf( stderr, "%s\n", msg );
-       exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-               zconftext[zconfleng] = (yy_hold_char); \
-               (yy_c_buf_p) = zconftext + yyless_macro_arg; \
-               (yy_hold_char) = *(yy_c_buf_p); \
-               *(yy_c_buf_p) = '\0'; \
-               zconfleng = yyless_macro_arg; \
-               } \
-       while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int zconfget_lineno  (void)
-{
-        
-    return zconflineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *zconfget_in  (void)
-{
-        return zconfin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *zconfget_out  (void)
-{
-        return zconfout;
-}
-
-/** Get the length of the current token.
- * 
- */
-int zconfget_leng  (void)
-{
-        return zconfleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *zconfget_text  (void)
-{
-        return zconftext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void zconfset_lineno (int  line_number )
-{
-    
-    zconflineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see zconf_switch_to_buffer
- */
-void zconfset_in (FILE *  in_str )
-{
-        zconfin = in_str ;
-}
-
-void zconfset_out (FILE *  out_str )
-{
-        zconfout = out_str ;
-}
-
-int zconfget_debug  (void)
-{
-        return zconf_flex_debug;
-}
-
-void zconfset_debug (int  bdebug )
-{
-        zconf_flex_debug = bdebug ;
-}
-
-/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
-int zconflex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-       while(YY_CURRENT_BUFFER){
-               zconf_delete_buffer(YY_CURRENT_BUFFER  );
-               YY_CURRENT_BUFFER_LVALUE = NULL;
-               zconfpop_buffer_state();
-       }
-
-       /* Destroy the stack itself. */
-       zconffree((yy_buffer_stack) );
-       (yy_buffer_stack) = NULL;
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-       register int i;
-       for ( i = 0; i < n; ++i )
-               s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-       register int n;
-       for ( n = 0; s[n]; ++n )
-               ;
-
-       return n;
-}
-#endif
-
-void *zconfalloc (yy_size_t  size )
-{
-       return (void *) malloc( size );
-}
-
-void *zconfrealloc  (void * ptr, yy_size_t  size )
-{
-       /* The cast to (char *) in the following accommodates both
-        * implementations that use char* generic pointers, and those
-        * that use void* generic pointers.  It works with the latter
-        * because both ANSI C and C++ allow castless assignment from
-        * any pointer type to void*, and deal with argument conversions
-        * as though doing an assignment.
-        */
-       return (void *) realloc( (char *) ptr, size );
-}
-
-void zconffree (void * ptr )
-{
-       free( (char *) ptr );   /* see zconfrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-#undef YY_NEW_FILE
-#undef YY_FLUSH_BUFFER
-#undef yy_set_bol
-#undef yy_new_buffer
-#undef yy_set_interactive
-#undef yytext_ptr
-#undef YY_DO_BEFORE_ACTION
-
-#ifdef YY_DECL_IS_OURS
-#undef YY_DECL_IS_OURS
-#undef YY_DECL
-#endif
-
-void zconf_starthelp(void)
-{
-       new_string();
-       last_ts = first_ts = 0;
-       BEGIN(HELP);
-}
-
-static void zconf_endhelp(void)
-{
-       zconflval.string = text;
-       BEGIN(INITIAL);
-}
-
-/*
- * Try to open specified file with following names:
- * ./name
- * $(srctree)/name
- * The latter is used when srctree is separate from objtree
- * when compiling the kernel.
- * Return NULL if file is not found.
- */
-FILE *zconf_fopen(const char *name)
-{
-       char *env, fullname[PATH_MAX+1];
-       FILE *f;
-
-       f = fopen(name, "r");
-       if (!f && name[0] != '/') {
-               env = getenv(SRCTREE);
-               if (env) {
-                       sprintf(fullname, "%s/%s", env, name);
-                       f = fopen(fullname, "r");
-               }
-       }
-       return f;
-}
-
-void zconf_initscan(const char *name)
-{
-       zconfin = zconf_fopen(name);
-       if (!zconfin) {
-               printf("can't find file %s\n", name);
-               exit(1);
-       }
-
-       current_buf = malloc(sizeof(*current_buf));
-       memset(current_buf, 0, sizeof(*current_buf));
-
-       current_file = file_lookup(name);
-       current_file->lineno = 1;
-       current_file->flags = FILE_BUSY;
-}
-
-void zconf_nextfile(const char *name)
-{
-       struct file *file = file_lookup(name);
-       struct buffer *buf = malloc(sizeof(*buf));
-       memset(buf, 0, sizeof(*buf));
-
-       current_buf->state = YY_CURRENT_BUFFER;
-       zconfin = zconf_fopen(name);
-       if (!zconfin) {
-               printf("%s:%d: can't open file \"%s\"\n", zconf_curname(), zconf_lineno(), name);
-               exit(1);
-       }
-       zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
-       buf->parent = current_buf;
-       current_buf = buf;
-
-       if (file->flags & FILE_BUSY) {
-               printf("recursive scan (%s)?\n", name);
-               exit(1);
-       }
-       if (file->flags & FILE_SCANNED) {
-               printf("file %s already scanned?\n", name);
-               exit(1);
-       }
-       file->flags |= FILE_BUSY;
-       file->lineno = 1;
-       file->parent = current_file;
-       current_file = file;
-}
-
-static struct buffer *zconf_endfile(void)
-{
-       struct buffer *parent;
-
-       current_file->flags |= FILE_SCANNED;
-       current_file->flags &= ~FILE_BUSY;
-       current_file = current_file->parent;
-
-       parent = current_buf->parent;
-       if (parent) {
-               fclose(zconfin);
-               zconf_delete_buffer(YY_CURRENT_BUFFER);
-               zconf_switch_to_buffer(parent->state);
-       }
-       free(current_buf);
-       current_buf = parent;
-
-       return parent;
-}
-
-int zconf_lineno(void)
-{
-       if (current_buf)
-               return current_file->lineno - 1;
-       else
-               return 0;
-}
-
-char *zconf_curname(void)
-{
-       if (current_buf)
-               return current_file->name;
-       else
-               return "<none>";
-}
-
diff --git a/scripts/kconfig/libkconfig.so b/scripts/kconfig/libkconfig.so
deleted file mode 100755 (executable)
index f6f9275..0000000
Binary files a/scripts/kconfig/libkconfig.so and /dev/null differ
diff --git a/scripts/kconfig/mconf.o b/scripts/kconfig/mconf.o
deleted file mode 100644 (file)
index 6e9e827..0000000
Binary files a/scripts/kconfig/mconf.o and /dev/null differ
diff --git a/scripts/kconfig/zconf.tab.c b/scripts/kconfig/zconf.tab.c
deleted file mode 100644 (file)
index c9bfdb4..0000000
+++ /dev/null
@@ -1,2127 +0,0 @@
-/* A Bison parser, made by GNU Bison 1.875a.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   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, 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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Written by Richard Stallman by simplifying the original so called
-   ``semantic'' parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* If NAME_PREFIX is specified substitute the variables and functions
-   names.  */
-#define yyparse zconfparse
-#define yylex   zconflex
-#define yyerror zconferror
-#define yylval  zconflval
-#define yychar  zconfchar
-#define yydebug zconfdebug
-#define yynerrs zconfnerrs
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     T_MAINMENU = 258,
-     T_MENU = 259,
-     T_ENDMENU = 260,
-     T_SOURCE = 261,
-     T_CHOICE = 262,
-     T_ENDCHOICE = 263,
-     T_COMMENT = 264,
-     T_CONFIG = 265,
-     T_MENUCONFIG = 266,
-     T_HELP = 267,
-     T_HELPTEXT = 268,
-     T_IF = 269,
-     T_ENDIF = 270,
-     T_DEPENDS = 271,
-     T_REQUIRES = 272,
-     T_OPTIONAL = 273,
-     T_PROMPT = 274,
-     T_DEFAULT = 275,
-     T_TRISTATE = 276,
-     T_DEF_TRISTATE = 277,
-     T_BOOLEAN = 278,
-     T_DEF_BOOLEAN = 279,
-     T_STRING = 280,
-     T_INT = 281,
-     T_HEX = 282,
-     T_WORD = 283,
-     T_WORD_QUOTE = 284,
-     T_UNEQUAL = 285,
-     T_EOF = 286,
-     T_EOL = 287,
-     T_CLOSE_PAREN = 288,
-     T_OPEN_PAREN = 289,
-     T_ON = 290,
-     T_SELECT = 291,
-     T_RANGE = 292,
-     T_OR = 293,
-     T_AND = 294,
-     T_EQUAL = 295,
-     T_NOT = 296
-   };
-#endif
-#define T_MAINMENU 258
-#define T_MENU 259
-#define T_ENDMENU 260
-#define T_SOURCE 261
-#define T_CHOICE 262
-#define T_ENDCHOICE 263
-#define T_COMMENT 264
-#define T_CONFIG 265
-#define T_MENUCONFIG 266
-#define T_HELP 267
-#define T_HELPTEXT 268
-#define T_IF 269
-#define T_ENDIF 270
-#define T_DEPENDS 271
-#define T_REQUIRES 272
-#define T_OPTIONAL 273
-#define T_PROMPT 274
-#define T_DEFAULT 275
-#define T_TRISTATE 276
-#define T_DEF_TRISTATE 277
-#define T_BOOLEAN 278
-#define T_DEF_BOOLEAN 279
-#define T_STRING 280
-#define T_INT 281
-#define T_HEX 282
-#define T_WORD 283
-#define T_WORD_QUOTE 284
-#define T_UNEQUAL 285
-#define T_EOF 286
-#define T_EOL 287
-#define T_CLOSE_PAREN 288
-#define T_OPEN_PAREN 289
-#define T_ON 290
-#define T_SELECT 291
-#define T_RANGE 292
-#define T_OR 293
-#define T_AND 294
-#define T_EQUAL 295
-#define T_NOT 296
-
-
-
-
-/* Copy the first part of user declarations.  */
-
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
-
-#define PRINTD         0x0001
-#define DEBUG_PARSE    0x0002
-
-int cdebug = PRINTD;
-
-extern int zconflex(void);
-static void zconfprint(const char *err, ...);
-static void zconferror(const char *err);
-static bool zconf_endtoken(int token, int starttoken, int endtoken);
-
-struct symbol *symbol_hash[257];
-
-#define YYERROR_VERBOSE
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-
-typedef union YYSTYPE {
-       int token;
-       char *string;
-       struct symbol *symbol;
-       struct expr *expr;
-       struct menu *menu;
-} YYSTYPE;
-/* Line 191 of yacc.c.  */
-
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations.  */
-
-
-#define LKC_DIRECT_LINK
-#include "lkc.h"
-
-
-/* Line 214 of yacc.c.  */
-
-
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
-# else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
-#   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
-# else
-#  if defined (__STDC__) || defined (__cplusplus)
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
-#  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
-# endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
-
-
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  short yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         register YYSIZE_T yyi;                \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (0)
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (0)
-
-#endif
-
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
-#else
-   typedef short yysigned_char;
-#endif
-
-/* YYFINAL -- State number of the termination state. */
-#define YYFINAL  2
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   201
-
-/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  42
-/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS  41
-/* YYNRULES -- Number of rules. */
-#define YYNRULES  104
-/* YYNRULES -- Number of states. */
-#define YYNSTATES  182
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   296
-
-#define YYTRANSLATE(YYX)                                               \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const unsigned short yyprhs[] =
-{
-       0,     0,     3,     4,     7,     9,    11,    13,    17,    19,
-      21,    23,    26,    28,    30,    32,    34,    36,    38,    42,
-      45,    49,    52,    53,    56,    59,    62,    65,    69,    74,
-      78,    83,    87,    91,    95,   100,   105,   110,   116,   119,
-     122,   124,   128,   131,   132,   135,   138,   141,   144,   149,
-     153,   157,   160,   165,   166,   169,   173,   175,   179,   182,
-     183,   186,   189,   192,   196,   199,   201,   205,   208,   209,
-     212,   215,   218,   222,   226,   228,   232,   235,   238,   241,
-     242,   245,   248,   253,   257,   261,   262,   265,   267,   269,
-     272,   275,   278,   280,   282,   283,   286,   288,   292,   296,
-     300,   303,   307,   311,   313
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
-{
-      43,     0,    -1,    -1,    43,    44,    -1,    45,    -1,    55,
-      -1,    66,    -1,     3,    77,    79,    -1,     5,    -1,    15,
-      -1,     8,    -1,     1,    79,    -1,    61,    -1,    71,    -1,
-      47,    -1,    49,    -1,    69,    -1,    79,    -1,    10,    28,
-      32,    -1,    46,    50,    -1,    11,    28,    32,    -1,    48,
-      50,    -1,    -1,    50,    51,    -1,    50,    75,    -1,    50,
-      73,    -1,    50,    32,    -1,    21,    76,    32,    -1,    22,
-      81,    80,    32,    -1,    23,    76,    32,    -1,    24,    81,
-      80,    32,    -1,    26,    76,    32,    -1,    27,    76,    32,
-      -1,    25,    76,    32,    -1,    19,    77,    80,    32,    -1,
-      20,    81,    80,    32,    -1,    36,    28,    80,    32,    -1,
-      37,    82,    82,    80,    32,    -1,     7,    32,    -1,    52,
-      56,    -1,    78,    -1,    53,    58,    54,    -1,    53,    58,
-      -1,    -1,    56,    57,    -1,    56,    75,    -1,    56,    73,
-      -1,    56,    32,    -1,    19,    77,    80,    32,    -1,    21,
-      76,    32,    -1,    23,    76,    32,    -1,    18,    32,    -1,
-      20,    28,    80,    32,    -1,    -1,    58,    45,    -1,    14,
-      81,    32,    -1,    78,    -1,    59,    62,    60,    -1,    59,
-      62,    -1,    -1,    62,    45,    -1,    62,    66,    -1,    62,
-      55,    -1,     4,    77,    32,    -1,    63,    74,    -1,    78,
-      -1,    64,    67,    65,    -1,    64,    67,    -1,    -1,    67,
-      45,    -1,    67,    66,    -1,    67,    55,    -1,    67,     1,
-      32,    -1,     6,    77,    32,    -1,    68,    -1,     9,    77,
-      32,    -1,    70,    74,    -1,    12,    32,    -1,    72,    13,
-      -1,    -1,    74,    75,    -1,    74,    32,    -1,    16,    35,
-      81,    32,    -1,    16,    81,    32,    -1,    17,    81,    32,
-      -1,    -1,    77,    80,    -1,    28,    -1,    29,    -1,     5,
-      79,    -1,     8,    79,    -1,    15,    79,    -1,    32,    -1,
-      31,    -1,    -1,    14,    81,    -1,    82,    -1,    82,    40,
-      82,    -1,    82,    30,    82,    -1,    34,    81,    33,    -1,
-      41,    81,    -1,    81,    38,    81,    -1,    81,    39,    81,
-      -1,    28,    -1,    29,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short yyrline[] =
-{
-       0,    94,    94,    95,    98,    99,   100,   101,   102,   103,
-     104,   105,   109,   110,   111,   112,   113,   114,   120,   128,
-     134,   142,   152,   154,   155,   156,   157,   160,   166,   173,
-     179,   186,   192,   198,   204,   210,   216,   222,   230,   239,
-     245,   254,   255,   261,   263,   264,   265,   266,   269,   275,
-     281,   287,   293,   299,   301,   306,   315,   324,   325,   331,
-     333,   334,   335,   340,   347,   353,   362,   363,   369,   371,
-     372,   373,   374,   377,   383,   390,   397,   404,   410,   417,
-     418,   419,   422,   427,   432,   440,   442,   447,   448,   451,
-     452,   453,   457,   457,   459,   460,   463,   464,   465,   466,
-     467,   468,   469,   472,   473
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU", 
-  "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG", 
-  "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS", 
-  "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE", 
-  "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT", 
-  "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL", 
-  "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR", 
-  "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block", 
-  "common_block", "config_entry_start", "config_stmt", 
-  "menuconfig_entry_start", "menuconfig_stmt", "config_option_list", 
-  "config_option", "choice", "choice_entry", "choice_end", "choice_stmt", 
-  "choice_option_list", "choice_option", "choice_block", "if", "if_end", 
-  "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt", 
-  "menu_block", "source", "source_stmt", "comment", "comment_stmt", 
-  "help_start", "help", "depends_list", "depends", "prompt_stmt_opt", 
-  "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const unsigned short yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] =
-{
-       0,    42,    43,    43,    44,    44,    44,    44,    44,    44,
-      44,    44,    45,    45,    45,    45,    45,    45,    46,    47,
-      48,    49,    50,    50,    50,    50,    50,    51,    51,    51,
-      51,    51,    51,    51,    51,    51,    51,    51,    52,    53,
-      54,    55,    55,    56,    56,    56,    56,    56,    57,    57,
-      57,    57,    57,    58,    58,    59,    60,    61,    61,    62,
-      62,    62,    62,    63,    64,    65,    66,    66,    67,    67,
-      67,    67,    67,    68,    69,    70,    71,    72,    73,    74,
-      74,    74,    75,    75,    75,    76,    76,    77,    77,    78,
-      78,    78,    79,    79,    80,    80,    81,    81,    81,    81,
-      81,    81,    81,    82,    82
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] =
-{
-       0,     2,     0,     2,     1,     1,     1,     3,     1,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     3,     2,
-       3,     2,     0,     2,     2,     2,     2,     3,     4,     3,
-       4,     3,     3,     3,     4,     4,     4,     5,     2,     2,
-       1,     3,     2,     0,     2,     2,     2,     2,     4,     3,
-       3,     2,     4,     0,     2,     3,     1,     3,     2,     0,
-       2,     2,     2,     3,     2,     1,     3,     2,     0,     2,
-       2,     2,     3,     3,     1,     3,     2,     2,     2,     0,
-       2,     2,     4,     3,     3,     0,     2,     1,     1,     2,
-       2,     2,     1,     1,     0,     2,     1,     3,     3,     3,
-       2,     3,     3,     1,     1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const unsigned char yydefact[] =
-{
-       2,     0,     1,     0,     0,     0,     8,     0,     0,    10,
-       0,     0,     0,     0,     9,    93,    92,     3,     4,    22,
-      14,    22,    15,    43,    53,     5,    59,    12,    79,    68,
-       6,    74,    16,    79,    13,    17,    11,    87,    88,     0,
-       0,     0,    38,     0,     0,     0,   103,   104,     0,     0,
-       0,    96,    19,    21,    39,    42,    58,    64,     0,    76,
-       7,    63,    73,    75,    18,    20,     0,   100,    55,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    85,     0,
-      85,     0,    85,    85,    85,    26,     0,     0,    23,     0,
-      25,    24,     0,     0,     0,    85,    85,    47,    44,    46,
-      45,     0,     0,     0,    54,    41,    40,    60,    62,    57,
-      61,    56,    81,    80,     0,    69,    71,    66,    70,    65,
-      99,   101,   102,    98,    97,    77,     0,     0,     0,    94,
-      94,     0,    94,    94,     0,    94,     0,     0,     0,    94,
-       0,    78,    51,    94,    94,     0,     0,    89,    90,    91,
-      72,     0,    83,    84,     0,     0,     0,    27,    86,     0,
-      29,     0,    33,    31,    32,     0,    94,     0,     0,    49,
-      50,    82,    95,    34,    35,    28,    30,    36,     0,    48,
-      52,    37
-};
-
-/* YYDEFGOTO[NTERM-NUM]. */
-static const short yydefgoto[] =
-{
-      -1,     1,    17,    18,    19,    20,    21,    22,    52,    88,
-      23,    24,   105,    25,    54,    98,    55,    26,   109,    27,
-      56,    28,    29,   117,    30,    58,    31,    32,    33,    34,
-      89,    90,    57,    91,   131,   132,   106,    35,   155,    50,
-      51
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -99
-static const short yypact[] =
-{
-     -99,    48,   -99,    38,    46,    46,   -99,    46,   -29,   -99,
-      46,   -17,    -3,   -11,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,   -99,    38,
-      12,    15,   -99,    18,    51,    62,   -99,   -99,   -11,   -11,
-       4,   -24,   138,   138,   160,   121,   110,    -4,    81,    -4,
-     -99,   -99,   -99,   -99,   -99,   -99,   -19,   -99,   -99,   -11,
-     -11,    70,    70,    73,    32,   -11,    46,   -11,    46,   -11,
-      46,   -11,    46,    46,    46,   -99,    36,    70,   -99,    95,
-     -99,   -99,    96,    46,   106,    46,    46,   -99,   -99,   -99,
-     -99,    38,    38,    38,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,   -99,   -99,   -99,   112,   -99,   -99,   -99,   -99,   -99,
-     -99,   117,   -99,   -99,   -99,   -99,   -11,    33,    65,   131,
-       1,   119,   131,     1,   136,     1,   153,   154,   155,   131,
-      70,   -99,   -99,   131,   131,   156,   157,   -99,   -99,   -99,
-     -99,   101,   -99,   -99,   -11,   158,   159,   -99,   -99,   161,
-     -99,   162,   -99,   -99,   -99,   163,   131,   164,   165,   -99,
-     -99,   -99,    99,   -99,   -99,   -99,   -99,   -99,   166,   -99,
-     -99,   -99
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const short yypgoto[] =
-{
-     -99,   -99,   -99,   111,   -99,   -99,   -99,   -99,   178,   -99,
-     -99,   -99,   -99,    91,   -99,   -99,   -99,   -99,   -99,   -99,
-     -99,   -99,   -99,   -99,   115,   -99,   -99,   -99,   -99,   -99,
-     -99,   146,   168,    89,    27,     0,   126,    -1,   -98,   -48,
-     -63
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -68
-static const short yytable[] =
-{
-      66,    67,    36,    42,    39,    40,    71,    41,   123,   124,
-      43,    44,    74,    75,   120,   154,    72,    46,    47,    69,
-      70,   121,   122,    48,   140,    45,   127,   128,   112,   130,
-      49,   133,   156,   135,   158,   159,    68,   161,    60,    69,
-      70,   165,    69,    70,    61,   167,   168,    62,     2,     3,
-      63,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      46,    47,    13,    14,   139,   152,    48,   126,   178,    15,
-      16,    69,    70,    49,    37,    38,   129,   166,   151,    15,
-      16,   -67,   114,    64,   -67,     5,   101,     7,     8,   102,
-      10,    11,    12,   143,    65,    13,   103,   153,    46,    47,
-     147,   148,   149,    69,    70,   125,   172,   134,   141,   136,
-     137,   138,    15,    16,     5,   101,     7,     8,   102,    10,
-      11,    12,   145,   146,    13,   103,   101,     7,   142,   102,
-      10,    11,    12,   171,   144,    13,   103,    69,    70,    69,
-      70,    15,    16,   100,   150,   154,   113,   108,   113,   116,
-      73,   157,    15,    16,    74,    75,    70,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,   104,   107,   160,   115,
-      85,   110,    73,   118,    86,    87,    74,    75,    92,    93,
-      94,    95,   111,    96,   119,   162,   163,   164,   169,   170,
-     173,   174,    97,   175,   176,   177,   179,   180,   181,    53,
-      99,    59
-};
-
-static const unsigned char yycheck[] =
-{
-      48,    49,     3,    32,     4,     5,    30,     7,    71,    72,
-      10,    28,    16,    17,    33,    14,    40,    28,    29,    38,
-      39,    69,    70,    34,    87,    28,    74,    75,    32,    77,
-      41,    79,   130,    81,   132,   133,    32,   135,    39,    38,
-      39,   139,    38,    39,    32,   143,   144,    32,     0,     1,
-      32,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      28,    29,    14,    15,    28,    32,    34,    35,   166,    31,
-      32,    38,    39,    41,    28,    29,    76,   140,   126,    31,
-      32,     0,     1,    32,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    93,    32,    14,    15,    32,    28,    29,
-     101,   102,   103,    38,    39,    32,   154,    80,    13,    82,
-      83,    84,    31,    32,     4,     5,     6,     7,     8,     9,
-      10,    11,    95,    96,    14,    15,     5,     6,    32,     8,
-       9,    10,    11,    32,    28,    14,    15,    38,    39,    38,
-      39,    31,    32,    54,    32,    14,    57,    56,    59,    58,
-      12,    32,    31,    32,    16,    17,    39,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    55,    56,    32,    58,
-      32,    56,    12,    58,    36,    37,    16,    17,    18,    19,
-      20,    21,    56,    23,    58,    32,    32,    32,    32,    32,
-      32,    32,    32,    32,    32,    32,    32,    32,    32,    21,
-      54,    33
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
-{
-       0,    43,     0,     1,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    14,    15,    31,    32,    44,    45,    46,
-      47,    48,    49,    52,    53,    55,    59,    61,    63,    64,
-      66,    68,    69,    70,    71,    79,    79,    28,    29,    77,
-      77,    77,    32,    77,    28,    28,    28,    29,    34,    41,
-      81,    82,    50,    50,    56,    58,    62,    74,    67,    74,
-      79,    32,    32,    32,    32,    32,    81,    81,    32,    38,
-      39,    30,    40,    12,    16,    17,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    32,    36,    37,    51,    72,
-      73,    75,    18,    19,    20,    21,    23,    32,    57,    73,
-      75,     5,     8,    15,    45,    54,    78,    45,    55,    60,
-      66,    78,    32,    75,     1,    45,    55,    65,    66,    78,
-      33,    81,    81,    82,    82,    32,    35,    81,    81,    77,
-      81,    76,    77,    81,    76,    81,    76,    76,    76,    28,
-      82,    13,    32,    77,    28,    76,    76,    79,    79,    79,
-      32,    81,    32,    32,    14,    80,    80,    32,    80,    80,
-      32,    80,    32,    32,    32,    80,    82,    80,    80,    32,
-      32,    32,    81,    32,    32,    32,    32,    32,    80,    32,
-      32,    32
-};
-
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrlab1
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");\
-      YYERROR;                                                 \
-    }                                                          \
-while (0)
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).  */
-
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)         \
-  Current.first_line   = Rhs[1].first_line;      \
-  Current.first_column = Rhs[1].first_column;    \
-  Current.last_line    = Rhs[N].last_line;       \
-  Current.last_column  = Rhs[N].last_column;
-#endif
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (0)
-
-# define YYDSYMPRINT(Args)                     \
-do {                                           \
-  if (yydebug)                                 \
-    yysymprint Args;                           \
-} while (0)
-
-# define YYDSYMPRINTF(Title, Token, Value, Location)           \
-do {                                                           \
-  if (yydebug)                                                 \
-    {                                                          \
-      YYFPRINTF (stderr, "%s ", Title);                                \
-      yysymprint (stderr,                                      \
-                  Token, Value);       \
-      YYFPRINTF (stderr, "\n");                                        \
-    }                                                          \
-} while (0)
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (cinluded).                                                   |
-`------------------------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_stack_print (short *bottom, short *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    short *bottom;
-    short *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (/* Nothing. */; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (0)
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yy_reduce_print (int yyrule)
-#else
-static void
-yy_reduce_print (yyrule)
-    int yyrule;
-#endif
-{
-  int yyi;
-  unsigned int yylineno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
-             yyrule - 1, yylineno);
-  /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
-}
-
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (Rule);            \
-} while (0)
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-# define YYDSYMPRINTF(Title, Token, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
-yystrlen (const char *yystr)
-#   else
-yystrlen (yystr)
-     const char *yystr;
-#   endif
-{
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
-    continue;
-
-  return yys - yystr - 1;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-static char *
-#   if defined (__STDC__) || defined (__cplusplus)
-yystpcpy (char *yydest, const char *yysrc)
-#   else
-yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
-{
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-#endif /* !YYERROR_VERBOSE */
-
-\f
-
-#if YYDEBUG
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yysymprint (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  if (yytype < YYNTOKENS)
-    {
-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-# ifdef YYPRINT
-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# endif
-    }
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  switch (yytype)
-    {
-      default:
-        break;
-    }
-  YYFPRINTF (yyoutput, ")");
-}
-
-#endif /* ! YYDEBUG */
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yydestruct (int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yytype, yyvaluep)
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
-
-  switch (yytype)
-    {
-
-      default:
-        break;
-    }
-}
-\f
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM);
-# else
-int yyparse ();
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM)
-# else
-int yyparse (YYPARSE_PARAM)
-  void *YYPARSE_PARAM;
-# endif
-#else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-  
-  register int yystate;
-  register int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  short        yyssa[YYINITDEPTH];
-  short *yyss = yyssa;
-  register short *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  register YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK   (yyvsp--, yyssp--)
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* When reducing, the number of symbols on the RHS of the reduced
-     rule.  */
-  int yylen;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed. so pushing a state here evens the stacks.
-     */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack. Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       short *yyss1 = yyss;
-
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow ("parser stack overflow",
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyoverflowlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-       goto yyoverflowlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       short *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyoverflowlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-/* Do appropriate processing given the current state.  */
-/* Read a lookahead token if we need one and don't already have one.  */
-/* yyresume: */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Shift the lookahead token.  */
-  YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
-
-  /* Discard the token being shifted unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  *++yyvsp = yylval;
-
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 8:
-
-    { zconfprint("unexpected 'endmenu' statement"); ;}
-    break;
-
-  case 9:
-
-    { zconfprint("unexpected 'endif' statement"); ;}
-    break;
-
-  case 10:
-
-    { zconfprint("unexpected 'endchoice' statement"); ;}
-    break;
-
-  case 11:
-
-    { zconfprint("syntax error"); yyerrok; ;}
-    break;
-
-  case 18:
-
-    {
-       struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
-       sym->flags |= SYMBOL_OPTIONAL;
-       menu_add_entry(sym);
-       printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
-;}
-    break;
-
-  case 19:
-
-    {
-       menu_end_entry();
-       printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 20:
-
-    {
-       struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
-       sym->flags |= SYMBOL_OPTIONAL;
-       menu_add_entry(sym);
-       printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
-;}
-    break;
-
-  case 21:
-
-    {
-       if (current_entry->prompt)
-               current_entry->prompt->type = P_MENU;
-       else
-               zconfprint("warning: menuconfig statement without prompt");
-       menu_end_entry();
-       printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 27:
-
-    {
-       menu_set_type(S_TRISTATE);
-       printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 28:
-
-    {
-       menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
-       menu_set_type(S_TRISTATE);
-       printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 29:
-
-    {
-       menu_set_type(S_BOOLEAN);
-       printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 30:
-
-    {
-       menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
-       menu_set_type(S_BOOLEAN);
-       printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 31:
-
-    {
-       menu_set_type(S_INT);
-       printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 32:
-
-    {
-       menu_set_type(S_HEX);
-       printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 33:
-
-    {
-       menu_set_type(S_STRING);
-       printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 34:
-
-    {
-       menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 35:
-
-    {
-       menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 36:
-
-    {
-       menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 37:
-
-    {
-       menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 38:
-
-    {
-       struct symbol *sym = sym_lookup(NULL, 0);
-       sym->flags |= SYMBOL_CHOICE;
-       menu_add_entry(sym);
-       menu_add_expr(P_CHOICE, NULL, NULL);
-       printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 39:
-
-    {
-       menu_end_entry();
-       menu_add_menu();
-;}
-    break;
-
-  case 40:
-
-    {
-       if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) {
-               menu_end_menu();
-               printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
-       }
-;}
-    break;
-
-  case 42:
-
-    {
-       printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
-       zconfnerrs++;
-;}
-    break;
-
-  case 48:
-
-    {
-       menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 49:
-
-    {
-       menu_set_type(S_TRISTATE);
-       printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 50:
-
-    {
-       menu_set_type(S_BOOLEAN);
-       printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 51:
-
-    {
-       current_entry->sym->flags |= SYMBOL_OPTIONAL;
-       printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 52:
-
-    {
-       menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 55:
-
-    {
-       printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
-       menu_add_entry(NULL);
-       menu_add_dep(yyvsp[-1].expr);
-       menu_end_entry();
-       menu_add_menu();
-;}
-    break;
-
-  case 56:
-
-    {
-       if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) {
-               menu_end_menu();
-               printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
-       }
-;}
-    break;
-
-  case 58:
-
-    {
-       printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
-       zconfnerrs++;
-;}
-    break;
-
-  case 63:
-
-    {
-       menu_add_entry(NULL);
-       menu_add_prop(P_MENU, yyvsp[-1].string, NULL, NULL);
-       printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 64:
-
-    {
-       menu_end_entry();
-       menu_add_menu();
-;}
-    break;
-
-  case 65:
-
-    {
-       if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) {
-               menu_end_menu();
-               printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
-       }
-;}
-    break;
-
-  case 67:
-
-    {
-       printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
-       zconfnerrs++;
-;}
-    break;
-
-  case 72:
-
-    { zconfprint("invalid menu option"); yyerrok; ;}
-    break;
-
-  case 73:
-
-    {
-       yyval.string = yyvsp[-1].string;
-       printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
-;}
-    break;
-
-  case 74:
-
-    {
-       zconf_nextfile(yyvsp[0].string);
-;}
-    break;
-
-  case 75:
-
-    {
-       menu_add_entry(NULL);
-       menu_add_prop(P_COMMENT, yyvsp[-1].string, NULL, NULL);
-       printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 76:
-
-    {
-       menu_end_entry();
-;}
-    break;
-
-  case 77:
-
-    {
-       printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
-       zconf_starthelp();
-;}
-    break;
-
-  case 78:
-
-    {
-       current_entry->sym->help = yyvsp[0].string;
-;}
-    break;
-
-  case 82:
-
-    {
-       menu_add_dep(yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 83:
-
-    {
-       menu_add_dep(yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 84:
-
-    {
-       menu_add_dep(yyvsp[-1].expr);
-       printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
-;}
-    break;
-
-  case 86:
-
-    {
-       menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr);
-;}
-    break;
-
-  case 89:
-
-    { yyval.token = T_ENDMENU; ;}
-    break;
-
-  case 90:
-
-    { yyval.token = T_ENDCHOICE; ;}
-    break;
-
-  case 91:
-
-    { yyval.token = T_ENDIF; ;}
-    break;
-
-  case 94:
-
-    { yyval.expr = NULL; ;}
-    break;
-
-  case 95:
-
-    { yyval.expr = yyvsp[0].expr; ;}
-    break;
-
-  case 96:
-
-    { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
-    break;
-
-  case 97:
-
-    { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
-    break;
-
-  case 98:
-
-    { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
-    break;
-
-  case 99:
-
-    { yyval.expr = yyvsp[-1].expr; ;}
-    break;
-
-  case 100:
-
-    { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
-    break;
-
-  case 101:
-
-    { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
-    break;
-
-  case 102:
-
-    { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
-    break;
-
-  case 103:
-
-    { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
-    break;
-
-  case 104:
-
-    { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
-    break;
-
-
-    }
-
-/* Line 999 of yacc.c.  */
-
-\f
-  yyvsp -= yylen;
-  yyssp -= yylen;
-
-
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if YYERROR_VERBOSE
-      yyn = yypact[yystate];
-
-      if (YYPACT_NINF < yyn && yyn < YYLAST)
-       {
-         YYSIZE_T yysize = 0;
-         int yytype = YYTRANSLATE (yychar);
-         char *yymsg;
-         int yyx, yycount;
-
-         yycount = 0;
-         /* Start YYX at -YYN if negative to avoid negative indexes in
-            YYCHECK.  */
-         for (yyx = yyn < 0 ? -yyn : 0;
-              yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
-           if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-             yysize += yystrlen (yytname[yyx]) + 15, yycount++;
-         yysize += yystrlen ("syntax error, unexpected ") + 1;
-         yysize += yystrlen (yytname[yytype]);
-         yymsg = (char *) YYSTACK_ALLOC (yysize);
-         if (yymsg != 0)
-           {
-             char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
-             yyp = yystpcpy (yyp, yytname[yytype]);
-
-             if (yycount < 5)
-               {
-                 yycount = 0;
-                 for (yyx = yyn < 0 ? -yyn : 0;
-                      yyx < (int) (sizeof (yytname) / sizeof (char *));
-                      yyx++)
-                   if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-                     {
-                       const char *yyq = ! yycount ? ", expecting " : " or ";
-                       yyp = yystpcpy (yyp, yyq);
-                       yyp = yystpcpy (yyp, yytname[yyx]);
-                       yycount++;
-                     }
-               }
-             yyerror (yymsg);
-             YYSTACK_FREE (yymsg);
-           }
-         else
-           yyerror ("syntax error; also virtual memory exhausted");
-       }
-      else
-#endif /* YYERROR_VERBOSE */
-       yyerror ("syntax error");
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-        error, discard it.  */
-
-      /* Return failure if at end of input.  */
-      if (yychar == YYEOF)
-        {
-         /* Pop the error token.  */
-          YYPOPSTACK;
-         /* Pop the rest of the stack.  */
-         while (yyss < yyssp)
-           {
-             YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-             yydestruct (yystos[*yyssp], yyvsp);
-             YYPOPSTACK;
-           }
-         YYABORT;
-        }
-
-      YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
-      yydestruct (yytoken, &yylval);
-      yychar = YYEMPTY;
-
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*----------------------------------------------------.
-| yyerrlab1 -- error raised explicitly by an action.  |
-`----------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-      YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
-      yydestruct (yystos[yystate], yyvsp);
-      yyvsp--;
-      yystate = *--yyssp;
-
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  YYDPRINTF ((stderr, "Shifting error token, "));
-
-  *++yyvsp = yylval;
-
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*----------------------------------------------.
-| yyoverflowlab -- parser overflow comes here.  |
-`----------------------------------------------*/
-yyoverflowlab:
-  yyerror ("parser stack overflow");
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-  return yyresult;
-}
-
-
-
-
-
-void conf_parse(const char *name)
-{
-       struct symbol *sym;
-       int i;
-
-       zconf_initscan(name);
-
-       sym_init();
-       menu_init();
-       modules_sym = sym_lookup("MODULES", 0);
-       rootmenu.prompt = menu_add_prop(P_MENU, "Linux Kernel Configuration", NULL, NULL);
-
-       //zconfdebug = 1;
-       zconfparse();
-       if (zconfnerrs)
-               exit(1);
-       menu_finalize(&rootmenu);
-       for_all_symbols(i, sym) {
-                if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
-                        printf("\n");
-               else
-                       sym->flags |= SYMBOL_CHECK_DONE;
-        }
-
-       sym_change_count = 1;
-}
-
-const char *zconf_tokenname(int token)
-{
-       switch (token) {
-       case T_MENU:            return "menu";
-       case T_ENDMENU:         return "endmenu";
-       case T_CHOICE:          return "choice";
-       case T_ENDCHOICE:       return "endchoice";
-       case T_IF:              return "if";
-       case T_ENDIF:           return "endif";
-       }
-       return "<token>";
-}
-
-static bool zconf_endtoken(int token, int starttoken, int endtoken)
-{
-       if (token != endtoken) {
-               zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
-               zconfnerrs++;
-               return false;
-       }
-       if (current_menu->file != current_file) {
-               zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
-               zconfprint("location of the '%s'", zconf_tokenname(starttoken));
-               zconfnerrs++;
-               return false;
-       }
-       return true;
-}
-
-static void zconfprint(const char *err, ...)
-{
-       va_list ap;
-
-       fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
-       va_start(ap, err);
-       vfprintf(stderr, err, ap);
-       va_end(ap);
-       fprintf(stderr, "\n");
-}
-
-static void zconferror(const char *err)
-{
-       fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
-}
-
-void print_quoted_string(FILE *out, const char *str)
-{
-       const char *p;
-       int len;
-
-       putc('"', out);
-       while ((p = strchr(str, '"'))) {
-               len = p - str;
-               if (len)
-                       fprintf(out, "%.*s", len, str);
-               fputs("\\\"", out);
-               str = p + 1;
-       }
-       fputs(str, out);
-       putc('"', out);
-}
-
-void print_symbol(FILE *out, struct menu *menu)
-{
-       struct symbol *sym = menu->sym;
-       struct property *prop;
-
-       if (sym_is_choice(sym))
-               fprintf(out, "choice\n");
-       else
-               fprintf(out, "config %s\n", sym->name);
-       switch (sym->type) {
-       case S_BOOLEAN:
-               fputs("  boolean\n", out);
-               break;
-       case S_TRISTATE:
-               fputs("  tristate\n", out);
-               break;
-       case S_STRING:
-               fputs("  string\n", out);
-               break;
-       case S_INT:
-               fputs("  integer\n", out);
-               break;
-       case S_HEX:
-               fputs("  hex\n", out);
-               break;
-       default:
-               fputs("  ???\n", out);
-               break;
-       }
-       for (prop = sym->prop; prop; prop = prop->next) {
-               if (prop->menu != menu)
-                       continue;
-               switch (prop->type) {
-               case P_PROMPT:
-                       fputs("  prompt ", out);
-                       print_quoted_string(out, prop->text);
-                       if (!expr_is_yes(prop->visible.expr)) {
-                               fputs(" if ", out);
-                               expr_fprint(prop->visible.expr, out);
-                       }
-                       fputc('\n', out);
-                       break;
-               case P_DEFAULT:
-                       fputs( "  default ", out);
-                       expr_fprint(prop->expr, out);
-                       if (!expr_is_yes(prop->visible.expr)) {
-                               fputs(" if ", out);
-                               expr_fprint(prop->visible.expr, out);
-                       }
-                       fputc('\n', out);
-                       break;
-               case P_CHOICE:
-                       fputs("  #choice value\n", out);
-                       break;
-               default:
-                       fprintf(out, "  unknown prop %d!\n", prop->type);
-                       break;
-               }
-       }
-       if (sym->help) {
-               int len = strlen(sym->help);
-               while (sym->help[--len] == '\n')
-                       sym->help[len] = 0;
-               fprintf(out, "  help\n%s\n", sym->help);
-       }
-       fputc('\n', out);
-}
-
-void zconfdump(FILE *out)
-{
-       struct property *prop;
-       struct symbol *sym;
-       struct menu *menu;
-
-       menu = rootmenu.list;
-       while (menu) {
-               if ((sym = menu->sym))
-                       print_symbol(out, menu);
-               else if ((prop = menu->prompt)) {
-                       switch (prop->type) {
-                       case P_COMMENT:
-                               fputs("\ncomment ", out);
-                               print_quoted_string(out, prop->text);
-                               fputs("\n", out);
-                               break;
-                       case P_MENU:
-                               fputs("\nmenu ", out);
-                               print_quoted_string(out, prop->text);
-                               fputs("\n", out);
-                               break;
-                       default:
-                               ;
-                       }
-                       if (!expr_is_yes(prop->visible.expr)) {
-                               fputs("  depends ", out);
-                               expr_fprint(prop->visible.expr, out);
-                               fputc('\n', out);
-                       }
-                       fputs("\n", out);
-               }
-
-               if (menu->list)
-                       menu = menu->list;
-               else if (menu->next)
-                       menu = menu->next;
-               else while ((menu = menu->parent)) {
-                       if (menu->prompt && menu->prompt->type == P_MENU)
-                               fputs("\nendmenu\n", out);
-                       if (menu->next) {
-                               menu = menu->next;
-                               break;
-                       }
-               }
-       }
-}
-
-#include "lex.zconf.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
-#include "menu.c"
-
-
diff --git a/scripts/kconfig/zconf.tab.h b/scripts/kconfig/zconf.tab.h
deleted file mode 100644 (file)
index 3b191ef..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-/* A Bison parser, made from zconf.y, by GNU bison 1.75.  */
-
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc.
-
-   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, 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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-#ifndef BISON_ZCONF_TAB_H
-# define BISON_ZCONF_TAB_H
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     T_MAINMENU = 258,
-     T_MENU = 259,
-     T_ENDMENU = 260,
-     T_SOURCE = 261,
-     T_CHOICE = 262,
-     T_ENDCHOICE = 263,
-     T_COMMENT = 264,
-     T_CONFIG = 265,
-     T_HELP = 266,
-     T_HELPTEXT = 267,
-     T_IF = 268,
-     T_ENDIF = 269,
-     T_DEPENDS = 270,
-     T_REQUIRES = 271,
-     T_OPTIONAL = 272,
-     T_PROMPT = 273,
-     T_DEFAULT = 274,
-     T_TRISTATE = 275,
-     T_BOOLEAN = 276,
-     T_INT = 277,
-     T_HEX = 278,
-     T_WORD = 279,
-     T_STRING = 280,
-     T_UNEQUAL = 281,
-     T_EOF = 282,
-     T_EOL = 283,
-     T_CLOSE_PAREN = 284,
-     T_OPEN_PAREN = 285,
-     T_ON = 286,
-     T_OR = 287,
-     T_AND = 288,
-     T_EQUAL = 289,
-     T_NOT = 290
-   };
-#endif
-#define T_MAINMENU 258
-#define T_MENU 259
-#define T_ENDMENU 260
-#define T_SOURCE 261
-#define T_CHOICE 262
-#define T_ENDCHOICE 263
-#define T_COMMENT 264
-#define T_CONFIG 265
-#define T_HELP 266
-#define T_HELPTEXT 267
-#define T_IF 268
-#define T_ENDIF 269
-#define T_DEPENDS 270
-#define T_REQUIRES 271
-#define T_OPTIONAL 272
-#define T_PROMPT 273
-#define T_DEFAULT 274
-#define T_TRISTATE 275
-#define T_BOOLEAN 276
-#define T_INT 277
-#define T_HEX 278
-#define T_WORD 279
-#define T_STRING 280
-#define T_UNEQUAL 281
-#define T_EOF 282
-#define T_EOL 283
-#define T_CLOSE_PAREN 284
-#define T_OPEN_PAREN 285
-#define T_ON 286
-#define T_OR 287
-#define T_AND 288
-#define T_EQUAL 289
-#define T_NOT 290
-
-
-
-
-#ifndef YYSTYPE
-#line 33 "zconf.y"
-typedef union {
-       int token;
-       char *string;
-       struct symbol *symbol;
-       struct expr *expr;
-       struct menu *menu;
-} yystype;
-/* Line 1281 of /usr/share/bison/yacc.c.  */
-#line 118 "zconf.tab.h"
-# define YYSTYPE yystype
-#endif
-
-extern YYSTYPE zconflval;
-
-
-#endif /* not BISON_ZCONF_TAB_H */
-
diff --git a/scripts/kconfig/zconf.tab.o b/scripts/kconfig/zconf.tab.o
deleted file mode 100644 (file)
index b0e7ec7..0000000
Binary files a/scripts/kconfig/zconf.tab.o and /dev/null differ
index be4d398..8819822 100644 (file)
@@ -1,6 +1,6 @@
 config SECURITY_SELINUX
        bool "NSA SELinux Support"
-       depends on SECURITY
+       depends on SECURITY && NET
        default n
        help
          This selects NSA Security-Enhanced Linux (SELinux).
index 155dec4..35d779a 100644 (file)
@@ -83,7 +83,7 @@ __setup("enforcing=", enforcing_setup);
 #endif
 
 #ifdef CONFIG_SECURITY_SELINUX_BOOTPARAM
-int selinux_enabled = 0;
+int selinux_enabled = 1;
 
 static int __init selinux_enabled_setup(char *str)
 {