aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.25-sparse
diff options
context:
space:
mode:
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-04-15 15:55:59 +0000
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>2004-04-15 15:55:59 +0000
commit778d03a089c7cc31c5d3f983ecd18704d287fa0e (patch)
treedabfe9171855f64dd1f2fd00f473763dd1dbf154 /xenolinux-2.4.25-sparse
parent0a4286ffcd388d268719a7b05cdf4276ff546169 (diff)
downloadxen-778d03a089c7cc31c5d3f983ecd18704d287fa0e.tar.gz
xen-778d03a089c7cc31c5d3f983ecd18704d287fa0e.tar.bz2
xen-778d03a089c7cc31c5d3f983ecd18704d287fa0e.zip
bitkeeper revision 1.864.1.1 (407eb08fW2eUAKOIh6v4T-Ew4bCchg)
upgrade to linux 2.4.26
Diffstat (limited to 'xenolinux-2.4.25-sparse')
-rw-r--r--xenolinux-2.4.25-sparse/Documentation/Configure.help29077
-rw-r--r--xenolinux-2.4.25-sparse/Makefile591
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/Makefile133
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/boot/Makefile14
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/config.in311
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/defconfig459
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/defconfig-physdev1005
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/balloon.c282
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/block/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.c625
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.h82
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/block/vbd.c561
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/console/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/console/console.c543
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/core.c104
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/vfr.c343
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/evtchn.c372
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/network/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/network/network.c643
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.c625
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.h82
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/vbd.c561
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/Makefile3
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/vnetif.c565
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/Makefile19
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/ctrl_if.c334
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/entry.S790
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/evtchn.c466
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/head.S39
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/i386_ksyms.c175
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/ioport.c48
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/irq.c1212
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/ldt.c287
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/pci-dma.c37
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/pci-pc.c260
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/process.c477
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c1274
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/signal.c717
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/time.c675
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/kernel/traps.c692
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/lib/Makefile15
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/lib/delay.c52
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/lib/xen_proc.c18
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/mm/Makefile16
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/mm/fault.c326
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/mm/hypervisor.c243
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/mm/init.c475
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/mm/ioremap.c226
-rw-r--r--xenolinux-2.4.25-sparse/arch/xen/vmlinux.lds82
-rw-r--r--xenolinux-2.4.25-sparse/drivers/block/ll_rw_blk.c1644
-rw-r--r--xenolinux-2.4.25-sparse/drivers/char/mem.c815
-rw-r--r--xenolinux-2.4.25-sparse/drivers/char/tty_io.c2472
-rw-r--r--xenolinux-2.4.25-sparse/fs/exec.c1157
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/bugs.h53
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/ctrl_if.h114
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/desc.h41
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/evtchn.h84
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/fixmap.h105
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/highmem.h132
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/hw_irq.h61
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/hypervisor.h462
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/io.h430
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/irq.h59
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/keyboard.h100
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/mmu_context.h74
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/msr.h138
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/multicall.h84
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/page.h173
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/pgalloc.h274
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/pgtable-2level.h71
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/pgtable.h374
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/proc_cmd.h28
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/processor.h484
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/ptrace.h63
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/segment.h15
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/smp.h102
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/suspend.h25
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/synch_bitops.h83
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/system.h408
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/vga.h42
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/xen_proc.h13
-rw-r--r--xenolinux-2.4.25-sparse/include/asm-xen/xor.h879
-rw-r--r--xenolinux-2.4.25-sparse/include/linux/blk.h409
-rw-r--r--xenolinux-2.4.25-sparse/include/linux/major.h206
-rw-r--r--xenolinux-2.4.25-sparse/include/linux/sched.h968
-rw-r--r--xenolinux-2.4.25-sparse/include/linux/sunrpc/debug.h95
-rw-r--r--xenolinux-2.4.25-sparse/include/linux/timer.h77
-rw-r--r--xenolinux-2.4.25-sparse/init/do_mounts.c1084
-rw-r--r--xenolinux-2.4.25-sparse/kernel/time.c415
-rw-r--r--xenolinux-2.4.25-sparse/kernel/timer.c968
-rwxr-xr-xxenolinux-2.4.25-sparse/mkbuildtree224
-rw-r--r--xenolinux-2.4.25-sparse/mm/highmem.c455
-rw-r--r--xenolinux-2.4.25-sparse/mm/memory.c1549
-rw-r--r--xenolinux-2.4.25-sparse/mm/mprotect.c344
-rw-r--r--xenolinux-2.4.25-sparse/mm/mremap.c377
-rw-r--r--xenolinux-2.4.25-sparse/mm/swapfile.c1267
-rw-r--r--xenolinux-2.4.25-sparse/mm/vmalloc.c381
101 files changed, 0 insertions, 65835 deletions
diff --git a/xenolinux-2.4.25-sparse/Documentation/Configure.help b/xenolinux-2.4.25-sparse/Documentation/Configure.help
deleted file mode 100644
index 8fff3cae45..0000000000
--- a/xenolinux-2.4.25-sparse/Documentation/Configure.help
+++ /dev/null
@@ -1,29077 +0,0 @@
-# Maintained by:
-# Eric S. Raymond <mailto:esr@thyrsus.com>
-# Steven Cole <mailto:elenstev@mesatop.com>
-#
-# Translations of this file available on the WWW:
-#
-# - Japanese, maintained by the JF Project <mailto:JF@linux.or.jp>, at
-# <http://www.linux.or.jp/JF/JFdocs/Configure.help/>
-# - Russian, by <mailto:kaf@linux.nevod.perm.su>, at
-# <http://nevod.perm.su/service/linux/doc/kernel/Configure.help>
-# - French, by Pierre Tane <mailto:tanep@bigfoot.com>, at
-# <http://www.traduc.org/kernelfr/>
-# - Polish, by Dominik Mierzejewski <mailto:dominik@piorunek.pl>, at
-# <http://www.piorunek.pl/~dominik/linux/kernel/>
-# - German, by SuSE, at <http://www.suse.de/~ke/kernel/>. This patch
-# also includes infrastructure to support different languages.
-# - Catalan, by Antoni Bella <mailto:bella5@teleline.es>, at
-# <http://www.terra.es/personal7/bella5/traduccions.htm>
-#
-# Information about what a kernel is, what it does, how to patch and
-# compile it and much more is contained in the Kernel-HOWTO, available
-# at <http://www.tldp.org/docs.html#howto>. Before you start
-# compiling, make sure that you have the necessary versions of all
-# programs and libraries required to compile and run this kernel; they
-# are listed in the <file:Documentation/Changes>. Make sure to read the
-# toplevel kernel README file as well.
-#
-# Format of this file: description<nl>variable<nl>help text<nl><nl>.
-# The help texts may contain empty lines, but every non-empty line must
-# be indented two positions. Order of the help texts does not matter,
-# however, no variable should be documented twice: if it is, only the
-# first occurrence will be used. We try to keep the help texts of related
-# variables close together. Lines starting with `#' are ignored. To be
-# nice to menuconfig, limit your line length to 70 characters. Use emacs'
-# kfill.el to edit and ispell.el to spell check this file or you lose.
-#
-# Comments of the form "# Choice:" followed by a menu name are used
-# internally by the maintainers' consistency-checking tools.
-#
-# If you add a help text to this file, please try to be as gentle as
-# possible. Don't use unexplained acronyms and generally write for the
-# hypothetical ignorant but intelligent user who has just bought a PC,
-# removed Windows, installed Linux and is now recompiling the kernel
-# for the first time. Tell them what to do if they're unsure. Technical
-# information should go in a README in the Documentation directory.
-#
-# Mention all the relevant READMEs and HOWTOs in the help text.
-# Make them file URLs relative to the top level of the source tree so
-# that help browsers can turn them into hotlinks. All URLs should be
-# surrounded by <>.
-#
-# Repetitions are fine since the help texts are not meant to be read
-# in sequence. It is good style to include URLs pointing to more
-# detailed technical information, pictures of the hardware, etc.
-#
-# The most important thing to include in a help entry is *motivation*.
-# Explain why someone configuring a kernel might want to select your
-# option.
-#
-# All this was shamelessly stolen from numerous different sources. Many
-# thanks to all the contributors. Feel free to use these help texts in
-# your own kernel configuration tools. The texts are copyrighted (c)
-# 1995-2000 by Axel Boldt and many others and are governed by the GNU
-# General Public License.
-
-Prompt for development and/or incomplete code/drivers
-CONFIG_EXPERIMENTAL
- Some of the various things that Linux supports (such as network
- drivers, file systems, network protocols, etc.) can be in a state
- of development where the functionality, stability, or the level of
- testing is not yet high enough for general use. This is usually
- known as the "alpha-test" phase among developers. If a feature is
- currently in alpha-test, then the developers usually discourage
- uninformed widespread use of this feature by the general public to
- avoid "Why doesn't this work?" type mail messages. However, active
- testing and use of these systems is welcomed. Just be aware that it
- may not meet the normal level of reliability or it may fail to work
- in some special cases. Detailed bug reports from people familiar
- with the kernel internals are usually welcomed by the developers
- (before submitting bug reports, please read the documents
- <file:README>, <file:MAINTAINERS>, <file:REPORTING-BUGS>,
- <file:Documentation/BUG-HUNTING>, and
- <file:Documentation/oops-tracing.txt> in the kernel source).
-
- This option will also make obsoleted drivers available. These are
- drivers that have been replaced by something else, and/or are
- scheduled to be removed in a future kernel release.
-
- Unless you intend to help test and develop a feature or driver that
- falls into this category, or you have a situation that requires
- using these features, you should probably say N here, which will
- cause the configurator to present you with fewer choices. If
- you say Y here, you will be offered the choice of using features or
- drivers that are currently considered to be in the alpha-test phase.
-
-Prompt for drivers for obsolete features and hardware
-CONFIG_OBSOLETE
- Obsolete drivers have usually been replaced by more recent software
- that can talk to the same hardware. Obsolete hardware is things
- like MGA monitors that you are very unlikely to see on today's
- systems.
-
-Prompt for advanced kernel configuration options
-CONFIG_ADVANCED_OPTIONS
- This option will enable prompting for a variety of advanced kernel
- configuration options. These options can cause the kernel to not
- work if they are set incorrectly, but can be used to optimize certain
- aspects of kernel memory management.
-
- Unless you know what you are doing you *should not* enable this option.
-
-Symmetric Multi-Processing support
-CONFIG_SMP
- This enables support for systems with more than one CPU. If you have
- a system with only one CPU, like most personal computers, say N. If
- you have a system with more than one CPU, say Y.
-
- If you say N here, the kernel will run on single and multiprocessor
- machines, but will use only one CPU of a multiprocessor machine. If
- you say Y here, the kernel will run on many, but not all,
- single machines. On a singleprocessor machine, the kernel
- will run faster if you say N here.
-
- Note that if you say Y here and choose architecture "586" or
- "Pentium" under "Processor family", the kernel will not work on 486
- architectures. Similarly, multiprocessor kernels for the "PPro"
- architecture may not work on all Pentium based boards.
-
- People using multiprocessor machines who say Y here should also say
- Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
- Management" code will be disabled if you say Y here.
-
- See also the <file:Documentation/smp.tex>,
- <file:Documentation/smp.txt>, <file:Documentation/i386/IO-APIC.txt>,
- <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
- <http://www.tldp.org/docs.html#howto>.
-
- If you don't know what to do here, say N.
-
-Maximum number of CPUs
-CONFIG_NR_CPUS
- This allows you to specify the maximum number of CPUs which this
- kernel will support. The maximum supported value is 32 and the
- mimimum value which makes sense is 2.
-
- This is purely to save memory - each supported CPU adds
- approximately eight kilobytes to the kernel image.
-
-Intel or compatible 80x86 processor
-CONFIG_X86
- This is Linux's home port. Linux was originally native to the Intel
- 386, and runs on all the later x86 processors including the Intel
- 486, 586, Pentiums, and various instruction-set-compatible chips by
- AMD, Cyrix, and others.
-
-Alpha processor
-CONFIG_ALPHA
- The Alpha is a 64-bit general-purpose processor designed and
- marketed by the Digital Equipment Corporation of blessed memory, now
- Compaq. Alpha Linux dates from 1995-1996 and was the first non-x86
- port. The Alpha Linux project has a home page at
- <http://www.alphalinux.org/>.
-
-32-bit Sun Sparc
-CONFIG_SPARC32
- SPARC is a family of RISC microprocessors designed and marketed by
- Sun Microsystems, incorporated. They are very widely found in Sun
- workstations and clones. This port covers the original 32-bit SPARC;
- it is old and stable and usually considered one of the "big three"
- along with the Intel and Alpha ports. The UltraLinux project
- maintains both the SPARC32 and SPARC64 ports; its web page is
- available at <http://www.ultralinux.org/>.
-
-64-bit Sun Sparc
-CONFIG_SPARC64
- SPARC is a family of RISC microprocessors designed and marketed by
- Sun Microsystems, incorporated. This port covers the newer 64-bit
- UltraSPARC. The UltraLinux project maintains both the SPARC32 and
- SPARC64 ports; its web page is available at
- <http://www.ultralinux.org/>.
-
-Power PC processor
-CONFIG_PPC
- The PowerPC is a very capable 32-bit RISC processor from Motorola,
- the successor to their 68000 and 88000 series. It powers recent
- Macintoshes and also a widely-used series of single-board computers
- from Motorola. The Linux PowerPC port has a home page at
- <http://penguinppc.org/>.
-
-Motorola 68K processors
-CONFIG_M68K
- The Motorola 68K microprocessors are now obsolete, having been
- superseded by the PowerPC line also from Motorola. But they powered
- the first wave of workstation hardware in the 1980s, including Sun
- workstations; they were also the basis of the original Amiga and
- later Atari personal computers. A lot of this hardware is still
- around. The m68k project has a home page at
- <http://www.linux-m68k.org/>.
-
-ARM processors
-CONFIG_ARM
- The ARM series is a line of low-power-consumption RISC chip designs
- licensed by ARM ltd and targeted at embedded applications and
- handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
- manufactured, but legacy ARM-based PC hardware remains popular in
- Europe. There is an ARM Linux project with a web page at
- <http://www.arm.linux.org.uk/>.
-
-SuperH processors
-CONFIG_SUPERH
- The SuperH is a RISC processor targeted for use in embedded systems
- and consumer electronics; it was also used in the Sega Dreamcast
- gaming console. The SuperH port has a home page at
- <http://www.sh-linux.org/>.
-
-IA64 processors, including Intel Itanium
-CONFIG_IA64
- The Itanium is Intel's 64-bit successor to the 32-bit X86 line. As
- of early 2001 it is not yet in widespread production use. The Linux
- IA-64 project has a home page at <http://www.linuxia64.org/>.
-
-HP PA-RISC processor
-CONFIG_PARISC
- The PA-RISC microprocessor is a RISC chip designed by
- Hewlett-Packard and used in their line of workstations. The PA-RISC
- Linux project has a home page at <www.parisc-linux.org>.
-
-IBM System/390
-CONFIG_S390
- Linux now runs on the venerable System/390 mainframe from IBM, in a
- guest partition under VM. In fact, over 40,000 simultaneous Linux
- images have been run on a single mainframe! The S390 Linux project
- has a home page at <http://linux.s390.org/>.
-
-Axis Communications ETRAX 100LX embedded network CPU
-CONFIG_CRIS
- Linux has been ported to run on the Axis Communications ETRAX 100LX
- CPU and the single-board computers built around it, targeted for
- network and embedded applications. For more information see the
- Axis Communication site, <http://developer.axis.com/>.
-
-Unsynced TSC support
-CONFIG_X86_TSC_DISABLE
- This option is used for getting Linux to run on a NUMA multi-node
- boxes, laptops and other systems suffering from unsynced TSCs or
- TSC drift, which can cause gettimeofday to return non-monotonic values.
- Choosing this option will disable the CONFIG_X86_TSC optimization,
- and allows you to then specify "notsc" as a boot option regardless of
- which processor you have compiled for.
-
- NOTE: If your system hangs when init should run, you are probably
- using a i686 compiled glibc which reads the TSC without checking for
- availability. Boot without "notsc" and install a i386 compiled glibc
- to solve the problem.
-
- If unsure, say N.
-
-Multiquad support for NUMAQ systems
-CONFIG_X86_NUMAQ
- This option is used for getting Linux to run on a (IBM/Sequent) NUMA
- multiquad box. This changes the way that processors are bootstrapped,
- and uses Clustered Logical APIC addressing mode instead of Flat Logical.
- You will need a new lynxer.elf file to flash your firmware with - send
- email to Martin.Bligh@us.ibm.com
-
-Support for IBM Summit (EXA) systems
-CONFIG_X86_SUMMIT
- This option is needed for IBM systems that use the Summit/EXA chipset.
- (EXA: Extendable Xseries Architecture)In particular, it is needed for
- the x440 (even for the 4-CPU model).
-
- If you don't have this computer, you may safely say N.
-
-IO-APIC support on uniprocessors
-CONFIG_X86_UP_IOAPIC
- An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an
- SMP-capable replacement for PC-style interrupt controllers. Most
- SMP systems and a small number of uniprocessor systems have one.
- If you have a single-CPU system with an IO-APIC, you can say Y here
- to use it. If you say Y here even though your machine doesn't have
- an IO-APIC, then the kernel will still run with no slowdown at all.
-
- If you have a system with several CPUs, you do not need to say Y
- here: the IO-APIC will be used automatically.
-
-Local APIC Support on Uniprocessors
-CONFIG_X86_UP_APIC
- A local APIC (Advanced Programmable Interrupt Controller) is an
- integrated interrupt controller in the CPU. If you have a single-CPU
- system which has a processor with a local APIC, you can say Y here to
- enable and use it. If you say Y here even though your machine doesn't
- have a local APIC, then the kernel will still run with no slowdown at
- all. The local APIC supports CPU-generated self-interrupts (timer,
- performance counters), and the NMI watchdog which detects hard lockups.
-
- If you have a system with several CPUs, you do not need to say Y
- here: the local APIC will be used automatically.
-
-Kernel math emulation
-CONFIG_MATH_EMULATION
- Linux can emulate a math coprocessor (used for floating point
- operations) if you don't have one. 486DX and Pentium processors have
- a math coprocessor built in, 486SX and 386 do not, unless you added
- a 487DX or 387, respectively. (The messages during boot time can
- give you some hints here ["man dmesg"].) Everyone needs either a
- coprocessor or this emulation.
-
- If you don't have a math coprocessor, you need to say Y here; if you
- say Y here even though you have a coprocessor, the coprocessor will
- be used nevertheless. (This behaviour can be changed with the kernel
- command line option "no387", which comes handy if your coprocessor
- is broken. Try "man bootparam" or see the documentation of your boot
- loader (lilo or loadlin) about how to pass options to the kernel at
- boot time.) This means that it is a good idea to say Y here if you
- intend to use this kernel on different machines.
-
- More information about the internals of the Linux math coprocessor
- emulation can be found in <file:arch/i386/math-emu/README>.
-
- If you are not sure, say Y; apart from resulting in a 66 KB bigger
- kernel, it won't hurt.
-
-Timer and CPU usage LEDs
-CONFIG_LEDS
- If you say Y here, the LEDs on your machine will be used
- to provide useful information about your current system status.
-
- If you are compiling a kernel for a NetWinder or EBSA-285, you will
- be able to select which LEDs are active using the options below. If
- you are compiling a kernel for the EBSA-110 or the LART however, the
- red LED will simply flash regularly to indicate that the system is
- still functional. It is safe to say Y here if you have a CATS
- system, but the driver will do nothing.
-
-Timer LED
-CONFIG_LEDS_TIMER
- If you say Y here, one of the system LEDs (the green one on the
- NetWinder, the amber one on the EBSA285, or the red one on the LART)
- will flash regularly to indicate that the system is still
- operational. This is mainly useful to kernel hackers who are
- debugging unstable kernels.
-
- The LART uses the same LED for both Timer LED and CPU usage LED
- functions. You may choose to use both, but the Timer LED function
- will overrule the CPU usage LED.
-
-CPU usage LED
-CONFIG_LEDS_CPU
- If you say Y here, the red LED will be used to give a good real
- time indication of CPU usage, by lighting whenever the idle task
- is not currently executing.
-
- The LART uses the same LED for both Timer LED and CPU usage LED
- functions. You may choose to use both, but the Timer LED function
- will overrule the CPU usage LED.
-
-Kernel FP software completion
-CONFIG_MATHEMU
- This option is required for IEEE compliant floating point arithmetic
- on the Alpha. The only time you would ever not say Y is to say M in
- order to debug the code. Say Y unless you know what you are doing.
-
-# Choice: himem
-High Memory support
-CONFIG_NOHIGHMEM
- Linux can use up to 64 Gigabytes of physical memory on x86 systems.
- However, the address space of 32-bit x86 processors is only 4
- Gigabytes large. That means that, if you have a large amount of
- physical memory, not all of it can be "permanently mapped" by the
- kernel. The physical memory that's not permanently mapped is called
- "high memory".
-
- If you are compiling a kernel which will never run on a machine with
- more than 960 megabytes of total physical RAM, answer "off" here (default
- choice and suitable for most users). This will result in a "3GB/1GB"
- split: 3GB are mapped so that each process sees a 3GB virtual memory
- space and the remaining part of the 4GB virtual memory space is used
- by the kernel to permanently map as much physical memory as
- possible.
-
- If the machine has between 1 and 4 Gigabytes physical RAM, then
- answer "4GB" here.
-
- If more than 4 Gigabytes is used then answer "64GB" here. This
- selection turns Intel PAE (Physical Address Extension) mode on.
- PAE implements 3-level paging on IA32 processors. PAE is fully
- supported by Linux, PAE mode is implemented on all recent Intel
- processors (Pentium Pro and better). NOTE: If you say "64GB" here,
- then the kernel will not boot on CPUs that don't support PAE!
-
- The actual amount of total physical memory will either be auto
- detected or can be forced by using a kernel command line option such
- as "mem=256M". (Try "man bootparam" or see the documentation of your
- boot loader (grub, lilo or loadlin) about how to pass options to the
- kernel at boot time.)
-
- If unsure, say "off".
-
-4GB
-CONFIG_HIGHMEM4G
- Select this if you have a 32-bit processor and between 1 and 4
- gigabytes of physical RAM.
-
-64GB
-CONFIG_HIGHMEM64G
- Select this if you have a 32-bit processor and more than 4
- gigabytes of physical RAM.
-
-HIGHMEM I/O support
-CONFIG_HIGHIO
- If you want to be able to do I/O to high memory pages, say Y.
- Otherwise low memory pages are used as bounce buffers causing a
- degrade in performance.
-
-OOM killer support
-CONFIG_OOM_KILLER
- This option selects the kernel behaviour during total out of memory
- condition.
-
- The default behaviour is to, as soon as no freeable memory and no swap
- space are available, kill the task which tries to allocate memory.
- The default behaviour is very reliable.
-
- If you select this option, as soon as no freeable memory is available,
- the kernel will try to select the "best" task to be killed.
-
- If unsure, say N.
-
-Normal floppy disk support
-CONFIG_BLK_DEV_FD
- If you want to use the floppy disk drive(s) of your PC under Linux,
- say Y. Information about this driver, especially important for IBM
- Thinkpad users, is contained in <file:Documentation/floppy.txt>.
- That file also contains the location of the Floppy driver FAQ as
- well as location of the fdutils package used to configure additional
- parameters of the driver at run time.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called floppy.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-iSeries Virtual I/O Disk Support
-CONFIG_VIODASD
- If you are running on an iSeries system and you want to use
- virtual disks created and managed by OS/400, say Y.
-
-iSeries Virtual I/O Disk IDE Emulation
-CONFIG_VIODASD_IDE
- This causes the iSeries virtual disks to look like IDE disks.
- If you have programs or utilities that only support certain
- kinds of disks, this option will cause iSeries virtual disks
- to pretend to be IDE disks, which may satisfy the program.
-
-Support for PowerMac floppy
-CONFIG_MAC_FLOPPY
- If you have a SWIM-3 (Super Woz Integrated Machine 3; from Apple)
- floppy controller, say Y here. Most commonly found in PowerMacs.
-
-RAM disk support
-CONFIG_BLK_DEV_RAM
- Saying Y here will allow you to use a portion of your RAM memory as
- a block device, so that you can make file systems on it, read and
- write to it and do all the other things that you can do with normal
- block devices (such as hard drives). It is usually used to load and
- store a copy of a minimal root file system off of a floppy into RAM
- during the initial install of Linux.
-
- Note that the kernel command line option "ramdisk=XX" is now
- obsolete. For details, read <file:Documentation/ramdisk.txt>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M and read <file:Documentation/modules.txt>. The module will be
- called rd.o.
-
- Most normal users won't need the RAM disk functionality, and can
- thus say N here.
-
-Default RAM disk size
-CONFIG_BLK_DEV_RAM_SIZE
- The default value is 4096. Only change this if you know what are
- you doing. If you are using IBM S/390, then set this to 8192.
-
-Initial RAM disk (initrd) support
-CONFIG_BLK_DEV_INITRD
- The initial RAM disk is a RAM disk that is loaded by the boot loader
- (loadlin or lilo) and that is mounted as root before the normal boot
- procedure. It is typically used to load modules needed to mount the
- "real" root file system, etc. See <file:Documentation/initrd.txt>
- for details.
-
-Embed root filesystem ramdisk into the kernel
-CONFIG_EMBEDDED_RAMDISK
- Select this option if you want to build the ramdisk image into the
- the final kernel binary.
-
-Filename of gziped ramdisk image
-CONFIG_EMBEDDED_RAMDISK_IMAGE
- This is the filename of the ramdisk image to be built into the
- kernel. Relative pathnames are relative to arch/mips/ramdisk/.
- The ramdisk image is not part of the kernel distribution; you must
- provide one yourself.
-
-Loopback device support
-CONFIG_BLK_DEV_LOOP
- Saying Y here will allow you to use a regular file as a block
- device; you can then create a file system on that block device and
- mount it just as you would mount other block devices such as hard
- drive partitions, CD-ROM drives or floppy drives. The loop devices
- are block special device files with major number 7 and typically
- called /dev/loop0, /dev/loop1 etc.
-
- This is useful if you want to check an ISO 9660 file system before
- burning the CD, or if you want to use floppy images without first
- writing them to floppy. Furthermore, some Linux distributions avoid
- the need for a dedicated Linux partition by keeping their complete
- root file system inside a DOS FAT file using this loop device
- driver.
-
- The loop device driver can also be used to "hide" a file system in a
- disk partition, floppy, or regular file, either using encryption
- (scrambling the data) or steganography (hiding the data in the low
- bits of, say, a sound file). This is also safe if the file resides
- on a remote file server. If you want to do this, you will first have
- to acquire and install a kernel patch from
- <ftp://ftp.kerneli.org/pub/kerneli/>, and then you need to
- say Y to this option.
-
- Note that alternative ways to use encrypted file systems are
- provided by the cfs package, which can be gotten from
- <ftp://ftp.kerneli.org/pub/kerneli/net-source/>, and the newer tcfs
- package, available at <http://tcfs.dia.unisa.it/>. You do not need
- to say Y here if you want to use one of these. However, using cfs
- requires saying Y to "NFS file system support" below while using
- tcfs requires applying a kernel patch. An alternative steganography
- solution is provided by StegFS, also available from
- <ftp://ftp.kerneli.org/pub/kerneli/net-source/>.
-
- To use the loop device, you need the losetup utility and a recent
- version of the mount program, both contained in the util-linux
- package. The location and current version number of util-linux is
- contained in the file <file:Documentation/Changes>.
-
- Note that this loop device has nothing to do with the loopback
- device used for network connections from the machine to itself.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called loop.o.
-
- Most users will answer N here.
-
-Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)
-CONFIG_BLK_DEV_UMEM
- Saying Y here will include support for the MM5415 family of
- battery backed (Non-volatile) RAM cards.
- <http://www.umem.com/>
-
- The cards appear as block devices that can be partitioned into
- as many as 15 partitions.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module will be
- called umem.o.
-
- The umem driver has been allocated block major number 116.
- See Documentation/devices.txt for recommended device naming.
-
-Network block device support
-CONFIG_BLK_DEV_NBD
- Saying Y here will allow your computer to be a client for network
- block devices, i.e. it will be able to use block devices exported by
- servers (mount file systems on them etc.). Communication between
- client and server works over TCP/IP networking, but to the client
- program this is hidden: it looks like a regular local file access to
- a block device special file such as /dev/nd0.
-
- Network block devices also allows you to run a block-device in
- userland (making server and client physically the same computer,
- communicating using the loopback network device).
-
- Read <file:Documentation/nbd.txt> for more information, especially
- about where to find the server code, which runs in user space and
- does not need special kernel support.
-
- Note that this has nothing to do with the network file systems NFS
- or Coda; you can say N here even if you intend to use NFS or Coda.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called nbd.o.
-
- If unsure, say N.
-
-XenoLinux virtual block device support
-CONFIG_XEN_VBD
- Xen can export virtual block devices which map back to extents of
- blocks on the physical partitions. This option is needed for
- Linux to make use of such devices when running as a Xen guest.
-
- If unsure, say Y.
-
-Per partition statistics in /proc/partitions
-CONFIG_BLK_STATS
- If you say yes here, your kernel will keep statistical information
- for every partition. The information includes things as numbers of
- read and write accesses, the number of merged requests etc.
-
- This is required for the full functionality of sar(8) and interesting
- if you want to do performance tuning, by tweaking the elevator, e.g.
-
- If unsure, say N.
-
-ATA/IDE/MFM/RLL support
-CONFIG_IDE
- If you say Y here, your kernel will be able to manage low cost mass
- storage units such as ATA/(E)IDE and ATAPI units. The most common
- cases are IDE hard drives and ATAPI CD-ROM drives.
-
- If your system is pure SCSI and doesn't use these interfaces, you
- can say N here.
-
- Integrated Disk Electronics (IDE aka ATA-1) is a connecting standard
- for mass storage units such as hard disks. It was designed by
- Western Digital and Compaq Computer in 1984. It was then named
- ST506. Quite a number of disks use the IDE interface.
-
- AT Attachment (ATA) is the superset of the IDE specifications.
- ST506 was also called ATA-1.
-
- Fast-IDE is ATA-2 (also named Fast ATA), Enhanced IDE (EIDE) is
- ATA-3. It provides support for larger disks (up to 8.4GB by means of
- the LBA standard), more disks (4 instead of 2) and for other mass
- storage units such as tapes and cdrom. UDMA/33 (aka UltraDMA/33) is
- ATA-4 and provides faster (and more CPU friendly) transfer modes
- than previous PIO (Programmed processor Input/Output) from previous
- ATA/IDE standards by means of fast DMA controllers.
-
- ATA Packet Interface (ATAPI) is a protocol used by EIDE tape and
- CD-ROM drives, similar in many respects to the SCSI protocol.
-
- SMART IDE (Self Monitoring, Analysis and Reporting Technology) was
- designed in order to prevent data corruption and disk crash by
- detecting pre hardware failure conditions (heat, access time, and
- the like...). Disks built since June 1995 may follow this standard.
- The kernel itself don't manage this; however there are quite a
- number of user programs such as smart that can query the status of
- SMART parameters disk.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ide.o.
-
- For further information, please read <file:Documentation/ide.txt>.
-
- If unsure, say Y.
-
-Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
-CONFIG_BLK_DEV_IDE
- If you say Y here, you will use the full-featured IDE driver to
- control up to ten ATA/IDE interfaces, each being able to serve a
- "master" and a "slave" device, for a total of up to twenty ATA/IDE
- disk/cdrom/tape/floppy drives.
-
- Useful information about large (>540 MB) IDE disks, multiple
- interfaces, what to do if ATA/IDE devices are not automatically
- detected, sound card ATA/IDE ports, module support, and other
- topics, is contained in <file:Documentation/ide.txt>. For detailed
- information about hard drives, consult the Disk-HOWTO and the
- Multi-Disk-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- To fine-tune ATA/IDE drive/interface parameters for improved
- performance, look for the hdparm package at
- <ftp://ibiblio.org/pub/Linux/system/hardware/>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/ide.txt>. The module will be called ide-mod.o.
- Do not compile this driver as a module if your root file system (the
- one containing the directory /) is located on an IDE device.
-
- If you have one or more IDE drives, say Y or M here. If your system
- has no IDE drives, or if memory requirements are really tight, you
- could say N here, and select the "Old hard disk driver" below
- instead to save about 13 KB of memory in the kernel.
-
-Old hard disk (MFM/RLL/IDE) driver
-CONFIG_BLK_DEV_HD_ONLY
- There are two drivers for MFM/RLL/IDE hard disks. Most people use
- the newer enhanced driver, but this old one is still around for two
- reasons. Some older systems have strange timing problems and seem to
- work only with the old driver (which itself does not work with some
- newer systems). The other reason is that the old driver is smaller,
- since it lacks the enhanced functionality of the new one. This makes
- it a good choice for systems with very tight memory restrictions, or
- for systems with only older MFM/RLL/ESDI drives. Choosing the old
- driver can save 13 KB or so of kernel memory.
-
- If you are unsure, then just choose the Enhanced IDE/MFM/RLL driver
- instead of this one. For more detailed information, read the
- Disk-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Use old disk-only driver on primary interface
-CONFIG_BLK_DEV_HD_IDE
- There are two drivers for MFM/RLL/IDE disks. Most people use just
- the new enhanced driver by itself. This option however installs the
- old hard disk driver to control the primary IDE/disk interface in
- the system, leaving the new enhanced IDE driver to take care of only
- the 2nd/3rd/4th IDE interfaces. Doing this will prevent you from
- having an IDE/ATAPI CD-ROM or tape drive connected to the primary
- IDE interface. Choosing this option may be useful for older systems
- which have MFM/RLL/ESDI controller+drives at the primary port
- address (0x1f0), along with IDE drives at the secondary/3rd/4th port
- addresses.
-
- Normally, just say N here; you will then use the new driver for all
- 4 interfaces.
-
-Include IDE/ATA-2 DISK support
-CONFIG_BLK_DEV_IDEDISK
- This will include enhanced support for MFM/RLL/IDE hard disks. If
- you have a MFM/RLL/IDE disk, and there is no special reason to use
- the old hard disk driver instead, say Y. If you have an SCSI-only
- system, you can say N here.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ide-disk.o. Do not compile this driver as a module
- if your root file system (the one containing the directory /) is
- located on the IDE disk. If unsure, say Y.
-
-Use multi-mode by default
-CONFIG_IDEDISK_MULTI_MODE
- If you get this error, try to say Y here:
-
- hda: set_multmode: status=0x51 { DriveReady SeekComplete Error }
- hda: set_multmode: error=0x04 { DriveStatusError }
-
- If in doubt, say N.
-
-PCMCIA IDE support
-CONFIG_BLK_DEV_IDECS
- Support for outboard IDE disks, tape drives, and CD-ROM drives
- connected through a PCMCIA card.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ide-cs.o
-
-Include IDE/ATAPI CD-ROM support
-CONFIG_BLK_DEV_IDECD
- If you have a CD-ROM drive using the ATAPI protocol, say Y. ATAPI is
- a newer protocol used by IDE CD-ROM and TAPE drives, similar to the
- SCSI protocol. Most new CD-ROM drives use ATAPI, including the
- NEC-260, Mitsumi FX400, Sony 55E, and just about all non-SCSI
- double(2X) or better speed drives.
-
- If you say Y here, the CD-ROM drive will be identified at boot time
- along with other IDE devices, as "hdb" or "hdc", or something
- similar (check the boot messages with dmesg). If this is your only
- CD-ROM drive, you can say N to all other CD-ROM options, but be sure
- to say Y or M to "ISO 9660 CD-ROM file system support".
-
- Note that older versions of LILO (LInux LOader) cannot properly deal
- with IDE/ATAPI CD-ROMs, so install LILO 16 or higher, available from
- <ftp://brun.dyndns.org/pub/linux/lilo/>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ide-cd.o.
-
-Include IDE/ATAPI TAPE support
-CONFIG_BLK_DEV_IDETAPE
- If you have an IDE tape drive using the ATAPI protocol, say Y.
- ATAPI is a newer protocol used by IDE tape and CD-ROM drives,
- similar to the SCSI protocol. If you have an SCSI tape drive
- however, you can say N here.
-
- You should also say Y if you have an OnStream DI-30 tape drive; this
- will not work with the SCSI protocol, until there is support for the
- SC-30 and SC-50 versions.
-
- If you say Y here, the tape drive will be identified at boot time
- along with other IDE devices, as "hdb" or "hdc", or something
- similar, and will be mapped to a character device such as "ht0"
- (check the boot messages with dmesg). Be sure to consult the
- <file:drivers/ide/ide-tape.c> and <file:Documentation/ide.txt> files
- for usage information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ide-tape.o.
-
-Include IDE/ATAPI FLOPPY support
-CONFIG_BLK_DEV_IDEFLOPPY
- If you have an IDE floppy drive which uses the ATAPI protocol,
- answer Y. ATAPI is a newer protocol used by IDE CD-ROM/tape/floppy
- drives, similar to the SCSI protocol.
-
- The LS-120 and the IDE/ATAPI Iomega ZIP drive are also supported by
- this driver. For information about jumper settings and the question
- of when a ZIP drive uses a partition table, see
- <http://www.win.tue.nl/~aeb/linux/zip/zip-1.html>.
- (ATAPI PD-CD/CDR drives are not supported by this driver; support
- for PD-CD/CDR drives is available if you answer Y to
- "SCSI emulation support", below).
-
- If you say Y here, the FLOPPY drive will be identified along with
- other IDE devices, as "hdb" or "hdc", or something similar (check
- the boot messages with dmesg).
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ide-floppy.o.
-
-AWARD Bios Work-Around
-CONFIG_IDEDISK_STROKE
- Should you have a system w/ an AWARD Bios and your drives are larger
- than 32GB and it will not boot, one is required to perform a few OEM
- operations first. The option is called "STROKE" because it allows
- one to "soft clip" the drive to work around a barrier limit. For
- Maxtor drives it is called "jumpon.exe". Please search Maxtor's
- web-site for "JUMPON.EXE". IBM has a similar tool at:
- <http://www.storage.ibm.com/hdd/support/download.htm>.
-
- If you are unsure, say N here.
-
-Raw Access to Media
-CONFIG_IDE_TASK_IOCTL
- This is a direct raw access to the media. It is a complex but
- elegant solution to test and validate the domain of the hardware and
- perform below the driver data recover if needed. This is the most
- basic form of media-forensics.
-
- If you are unsure, say N here.
-
-Use Taskfile I/O
-CONFIG_IDE_TASKFILE_IO
- This is the "Jewel" of the patch. It will go away and become the new
- driver core. Since all the chipsets/host side hardware deal w/ their
- exceptions in "their local code" currently, adoption of a
- standardized data-transport is the only logical solution.
- Additionally we packetize the requests and gain rapid performance and
- a reduction in system latency. Additionally by using a memory struct
- for the commands we can redirect to a MMIO host hardware in the next
- generation of controllers, specifically second generation Ultra133
- and Serial ATA.
-
- Since this is a major transition, it was deemed necessary to make the
- driver paths buildable in separate models. Therefore if using this
- option fails for your arch then we need to address the needs for that
- arch.
-
- If you want to test this functionality, say Y here.
-
-Force DMA
-CONFIG_BLK_DEV_IDEDMA_FORCED
- This is an old piece of lost code from Linux 2.0 Kernels.
-
- Generally say N here.
-
-DMA Only on Disks
-CONFIG_IDEDMA_ONLYDISK
- This is used if you know your ATAPI Devices are going to fail DMA
- Transfers.
-
- Generally say N here.
-
-SCSI emulation support
-CONFIG_BLK_DEV_IDESCSI
- This will provide SCSI host adapter emulation for IDE ATAPI devices,
- and will allow you to use a SCSI device driver instead of a native
- ATAPI driver.
-
- This is useful if you have an ATAPI device for which no native
- driver has been written (for example, an ATAPI PD-CD or CDR drive);
- you can then use this emulation together with an appropriate SCSI
- device driver. In order to do this, say Y here and to "SCSI support"
- and "SCSI generic support", below. You must then provide the kernel
- command line "hdx=scsi" (try "man bootparam" or see the
- documentation of your boot loader (lilo or loadlin) about how to
- pass options to the kernel at boot time) for devices if you want the
- native EIDE sub-drivers to skip over the native support, so that
- this SCSI emulation can be used instead. This is required for use of
- CD-RW's.
-
- Note that this option does NOT allow you to attach SCSI devices to a
- box that doesn't have a SCSI host adapter installed.
-
- If both this SCSI emulation and native ATAPI support are compiled
- into the kernel, the native support will be used.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ide-scsi.o
-
-Use the NOOP Elevator (WARNING)
-CONFIG_BLK_DEV_ELEVATOR_NOOP
- If you are using a raid class top-level driver above the ATA/IDE core,
- one may find a performance boost by preventing a merging and re-sorting
- of the new requests.
-
- If unsure, say N.
-
-ISA-PNP EIDE support
-CONFIG_BLK_DEV_ISAPNP
- If you have an ISA EIDE card that is PnP (Plug and Play) and
- requires setup first before scanning for devices, say Y here.
-
- If unsure, say N.
-
-CMD640 chipset bugfix/support
-CONFIG_BLK_DEV_CMD640
- The CMD-Technologies CMD640 IDE chip is used on many common 486 and
- Pentium motherboards, usually in combination with a "Neptune" or
- "SiS" chipset. Unfortunately, it has a number of rather nasty
- design flaws that can cause severe data corruption under many common
- conditions. Say Y here to include code which tries to automatically
- detect and correct the problems under Linux. This option also
- enables access to the secondary IDE ports in some CMD640 based
- systems.
-
- This driver will work automatically in PCI based systems (most new
- systems have PCI slots). But if your system uses VESA local bus
- (VLB) instead of PCI, you must also supply a kernel boot parameter
- to enable the CMD640 bugfix/support: "ide0=cmd640_vlb". (Try "man
- bootparam" or see the documentation of your boot loader about how to
- pass options to the kernel.)
-
- The CMD640 chip is also used on add-in cards by Acculogic, and on
- the "CSA-6400E PCI to IDE controller" that some people have. For
- details, read <file:Documentation/ide.txt>.
-
-CMD640 enhanced support
-CONFIG_BLK_DEV_CMD640_ENHANCED
- This option includes support for setting/autotuning PIO modes and
- prefetch on CMD640 IDE interfaces. For details, read
- <file:Documentation/ide.txt>. If you have a CMD640 IDE interface
- and your BIOS does not already do this for you, then say Y here.
- Otherwise say N.
-
-RZ1000 chipset bugfix/support
-CONFIG_BLK_DEV_RZ1000
- The PC-Technologies RZ1000 IDE chip is used on many common 486 and
- Pentium motherboards, usually along with the "Neptune" chipset.
- Unfortunately, it has a rather nasty design flaw that can cause
- severe data corruption under many conditions. Say Y here to include
- code which automatically detects and corrects the problem under
- Linux. This may slow disk throughput by a few percent, but at least
- things will operate 100% reliably.
-
-Generic PCI IDE chipset support
-CONFIG_BLK_DEV_IDEPCI
- Say Y here for PCI systems which use IDE drive(s).
- This option helps the IDE driver to automatically detect and
- configure all PCI-based IDE interfaces in your system.
-
-Support for sharing PCI IDE interrupts
-CONFIG_IDEPCI_SHARE_IRQ
- Some ATA/IDE chipsets have hardware support which allows for
- sharing a single IRQ with other cards. To enable support for
- this in the ATA/IDE driver, say Y here.
-
- It is safe to say Y to this question, in most cases.
- If unsure, say N.
-
-Generic PCI bus-master DMA support
-CONFIG_BLK_DEV_IDEDMA_PCI
- If your PCI system uses IDE drive(s) (as opposed to SCSI, say) and
- is capable of bus-master DMA operation (most Pentium PCI systems),
- you will want to say Y here to reduce CPU overhead. You can then use
- the "hdparm" utility to enable DMA for drives for which it was not
- enabled automatically. By default, DMA is not enabled automatically
- for these drives, but you can change that by saying Y to the
- following question "Use DMA by default when available". You can get
- the latest version of the hdparm utility from
- <ftp://ibiblio.org/pub/Linux/system/hardware/>.
-
- Read the comments at the beginning of <file:drivers/ide/ide-dma.c>
- and the file <file:Documentation/ide.txt> for more information.
-
- It is safe to say Y to this question.
-
-Good-Bad DMA Model-Firmware (WIP)
-CONFIG_IDEDMA_NEW_DRIVE_LISTINGS
- If you say Y here, the model and firmware revision of your drive
- will be compared against a blacklist of buggy drives that claim to
- be (U)DMA capable but aren't. This is a blanket on/off test with no
- speed limit options.
-
- Straight GNU GCC 2.7.3/2.8.X compilers are known to be safe;
- whereas, many versions of EGCS have a problem and miscompile if you
- say Y here.
-
- If in doubt, say N.
-
-Attempt to HACK around Chipsets that TIMEOUT (WIP)
-CONFIG_BLK_DEV_IDEDMA_TIMEOUT
- If you say Y here, this is a NASTY UGLY HACK!
-
- We have to issue an abort and requeue the request DMA engine got
- turned off by a goofy ASIC, and we have to clean up the mess, and
- here is as good as any. Do it globally for all chipsets.
-
- If in doubt, say N.
-
-Boot off-board chipsets first support
-CONFIG_BLK_DEV_OFFBOARD
- Normally, IDE controllers built into the motherboard (on-board
- controllers) are assigned to ide0 and ide1 while those on add-in PCI
- cards (off-board controllers) are relegated to ide2 and ide3.
- Answering Y here will allow you to reverse the situation, with
- off-board controllers on ide0/1 and on-board controllers on ide2/3.
- This can improve the usability of some boot managers such as lilo
- when booting from a drive on an off-board controller.
-
- If you say Y here, and you actually want to reverse the device scan
- order as explained above, you also need to issue the kernel command
- line option "ide=reverse". (Try "man bootparam" or see the
- documentation of your boot loader (lilo or loadlin) about how to
- pass options to the kernel at boot time.)
-
- Note that, if you do this, the order of the hd* devices will be
- rearranged which may require modification of fstab and other files.
-
- If in doubt, say N.
-
-Use PCI DMA by default when available
-CONFIG_IDEDMA_PCI_AUTO
- Prior to kernel version 2.1.112, Linux used to automatically use
- DMA for IDE drives and chipsets which support it. Due to concerns
- about a couple of cases where buggy hardware may have caused damage,
- the default is now to NOT use DMA automatically. To revert to the
- previous behaviour, say Y to this question.
-
- If you suspect your hardware is at all flakey, say N here.
- Do NOT email the IDE kernel people regarding this issue!
-
- It is normally safe to answer Y to this question unless your
- motherboard uses a VIA VP2 chipset, in which case you should say N.
-
-IGNORE word93 Validation BITS
-CONFIG_IDEDMA_IVB
- There are unclear terms in ATA-4 and ATA-5 standards how certain
- hardware (an 80c ribbon) should be detected. Different interpretations
- of the standards have been released in hardware. This causes problems:
- for example, a host with Ultra Mode 4 (or higher) will not run
- in that mode with an 80c ribbon.
-
- If you are experiencing compatibility or performance problems, you
- MAY try to answering Y here. However, it does not necessarily solve
- any of your problems, it could even cause more of them.
-
- It is normally safe to answer Y; however, the default is N.
-
-ATA Work(s) In Progress (EXPERIMENTAL)
-CONFIG_IDEDMA_PCI_WIP
- If you enable this you will be able to use and test highly
- developmental projects. If you say N, the configurator will
- simply skip those options.
-
- It is SAFEST to say N to this question.
-
-Asynchronous DMA support (EXPERIMENTAL)
-CONFIG_BLK_DEV_ADMA
- Please read the comments at the top of
- <file:drivers/ide/ide-adma.c>.
-
-Pacific Digital A-DMA support (EXPERIMENTAL)
-CONFIG_BLK_DEV_PDC_ADMA
- Please read the comments at the top of <file:drivers/ide/setup-pci.c>.
-
-3ware Hardware ATA-RAID support
-CONFIG_BLK_DEV_3W_XXXX_RAID
- 3ware is the only hardware ATA-Raid product in Linux to date.
- This card is 2,4, or 8 channel master mode support only.
- SCSI support required!!!
-
- <http://www.3ware.com/>
-
- Please read the comments at the top of
- <file:drivers/scsi/3w-xxxx.c>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called 3w-xxxx.o.
-
-AEC62XX chipset support
-CONFIG_BLK_DEV_AEC62XX
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt. This add-on card is a bootable PCI UDMA controller. In
- order to get this card to initialize correctly in some cases, you
- should say Y here, and preferably also to "Use DMA by default when
- available".
-
- The ATP850U/UF is an UltraDMA 33 chipset base.
- The ATP860 is an UltraDMA 66 chipset base.
- The ATP860M(acintosh) version is an UltraDMA 66 chipset base.
-
- Please read the comments at the top of <file:drivers/ide/pci/aec62xx.c>.
- If you say Y here, then say Y to "Use DMA by default when available"
- as well.
-
-AEC62XX Tuning support
-CONFIG_AEC62XX_TUNING
- Please read the comments at the top of <file:drivers/ide/pci/aec62xx.c>.
- If unsure, say N.
-
-ALI M15x3 chipset support
-CONFIG_BLK_DEV_ALI15X3
- This driver ensures (U)DMA support for ALI 1533, 1543 and 1543C
- onboard chipsets. It also tests for Simplex mode and enables
- normal dual channel support.
-
- If you say Y here, you also need to say Y to "Use DMA by default
- when available", above. Please read the comments at the top of
- <file:drivers/ide/pci/alim15x3.c>.
-
- If unsure, say N.
-
-ALI M15x3 WDC support (DANGEROUS)
-CONFIG_WDC_ALI15X3
- This allows for UltraDMA support for WDC drives that ignore CRC
- checking. You are a fool for enabling this option, but there have
- been requests. DO NOT COMPLAIN IF YOUR DRIVE HAS FS CORRUPTION, IF
- YOU ENABLE THIS! No one will listen, just laugh for ignoring this
- SERIOUS WARNING.
-
- Using this option can allow WDC drives to run at ATA-4/5 transfer
- rates with only an ATA-2 support structure.
-
- SAY N!
-
-AMD and nVidia IDE support
-CONFIG_BLK_DEV_AMD74XX
- This driver adds explicit support for AMD-7xx and AMD-8111 chips
- and also for the nVidia nForce chip. This allows the kernel to
- change PIO, DMA and UDMA speeds and to configure the chip to
- optimum performance.
-
- If you say Y here, you also need to say Y to "Use DMA by default
- when available", above.
- Please read the comments at the top of <file:drivers/ide/pci/amd74xx.c>.
-
- If unsure, say N.
-
-AMD Viper ATA-66 Override support (WIP)
-CONFIG_AMD74XX_OVERRIDE
- This option auto-forces the ata66 flag.
- This effect can be also invoked by calling "idex=ata66"
- If unsure, say N.
-
-CMD64X/CMD680 chipset support
-CONFIG_BLK_DEV_CMD64X
- Say Y here if you have an IDE controller which uses any of these
- chipsets: CMD643, CMD646 and CMD648.
-
-Compaq Triflex IDE support
-CONFIG_BLK_DEV_TRIFLEX
- Say Y here if you have a Compaq Triflex IDE controller, such
- as those commonly found on Compaq Pentium-Pro systems
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- triflex.o.
-
-CY82C693 chipset support
-CONFIG_BLK_DEV_CY82C693
- This driver adds detection and support for the CY82C693 chipset
- used on Digital's PC-Alpha 164SX boards.
-
- If you say Y here, you need to say Y to "Use DMA by default
- when available" as well.
-
-Cyrix CS5530 MediaGX chipset support
-CONFIG_BLK_DEV_CS5530
- Include support for UDMA on the Cyrix MediaGX 5530 chipset. This
- will automatically be detected and configured if found.
-
- It is safe to say Y to this question.
-
- People with SCSI-only systems should say N here. If unsure, say Y.
-
-HPT34X chipset support
-CONFIG_BLK_DEV_HPT34X
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt. The HPT343 chipset in its current form is a non-bootable
- controller; the HPT345/HPT363 chipset is a bootable (needs BIOS FIX)
- PCI UDMA controllers. This driver requires dynamic tuning of the
- chipset during the ide-probe at boot time. It is reported to support
- DVD II drives, by the manufacturer.
-
-HPT34X AUTODMA support (WIP)
-CONFIG_HPT34X_AUTODMA
- This is a dangerous thing to attempt currently! Please read the
- comments at the top of <file:drivers/ide/pci/hpt34x.c>. If you say Y
- here, then say Y to "Use DMA by default when available" as well.
-
- If unsure, say N.
-
-HPT36X/37X chipset support
-CONFIG_BLK_DEV_HPT366
- HPT366 is an Ultra DMA chipset for ATA-66.
- HPT368 is an Ultra DMA chipset for ATA-66 RAID Based.
- HPT370 is an Ultra DMA chipset for ATA-100.
- HPT372 is an Ultra DMA chipset for ATA-133.
- HPT374 is an Ultra DMA chipset for ATA-133.
-
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt.
-
- The HPT366 chipset in its current form is bootable. One solution
- for this problem are special LILO commands for redirecting the
- reference to device 0x80. The other solution is to say Y to "Boot
- off-board chipsets first support" (CONFIG_BLK_DEV_OFFBOARD) unless
- your mother board has the chipset natively mounted. Regardless one
- should use the fore mentioned option and call at LILO or include
- "ide=reverse" in LILO's append-line.
-
- This driver requires dynamic tuning of the chipset during the
- ide-probe at boot. It is reported to support DVD II drives, by the
- manufacturer.
-
-NS87415 chipset support (EXPERIMENTAL)
-CONFIG_BLK_DEV_NS87415
- This driver adds detection and support for the NS87415 chip
- (used in SPARC64, among others).
-
- Please read the comments at the top of <file:drivers/ide/pci/ns87415.c>.
-
-OPTi 82C621 chipset enhanced support (EXPERIMENTAL)
-CONFIG_BLK_DEV_OPTI621
- This is a driver for the OPTi 82C621 EIDE controller.
- Please read the comments at the top of <file:drivers/ide/pci/opti621.c>.
-
-National SCx200 chipset support
-CONFIG_BLK_DEV_SC1200
- This driver adds support for the built in IDE on the National
- SCx200 series of embedded x86 "Geode" systems
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- sc1200.o.
-
-ServerWorks OSB4/CSB5 chipset support
-CONFIG_BLK_DEV_SVWKS
- This driver adds PIO/(U)DMA support for the ServerWorks OSB4/CSB5
- chipsets.
-
-SGI IOC4 chipset support
-CONFIG_BLK_DEV_SGIIOC4
- This driver adds PIO & MultiMode DMA-2 support for the SGI IOC4
- chipset. Please say Y here, if you have an Altix System from
- Silicon Graphics Inc.
-
-Intel PIIXn chipsets support
-CONFIG_BLK_DEV_PIIX
- This driver adds PIO mode setting and tuning for all PIIX IDE
- controllers by Intel. Since the BIOS can sometimes improperly tune
- PIO 0-4 mode settings, this allows dynamic tuning of the chipset
- via the standard end-user tool 'hdparm'.
-
- Please read the comments at the top of <file:drivers/ide/pci/piix.c>.
-
- If you say Y here, you should also say Y to "PIIXn Tuning support",
- below.
-
- If unsure, say N.
-
-PIIXn Tuning support
-CONFIG_PIIX_TUNING
- This driver extension adds DMA mode setting and tuning for all PIIX
- IDE controllers by Intel. Since the BIOS can sometimes improperly
- set up the device/adapter combination and speed limits, it has
- become a necessity to back/forward speed devices as needed.
-
- Case 430HX/440FX PIIX3 need speed limits to reduce UDMA to DMA mode
- 2 if the BIOS can not perform this task at initialization.
-
- If unsure, say N.
-
-PROMISE PDC20246/PDC20262/PDC20265/PDC20267/PDC20268 support
-CONFIG_BLK_DEV_PDC202XX_OLD
- Promise Ultra33 or PDC20246
- Promise Ultra66 or PDC20262
- Promise Ultra100 or PDC20265/PDC20267/PDC20268
-
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt. This add-on card is a bootable PCI UDMA controller. Since
- multiple cards can be installed and there are BIOS ROM problems that
- happen if the BIOS revisions of all installed cards (three-max) do
- not match, the driver attempts to do dynamic tuning of the chipset
- at boot-time for max-speed. Ultra33 BIOS 1.25 or newer is required
- for more than one card. This card may require that you say Y to
- "Special UDMA Feature".
-
- If you say Y here, you need to say Y to "Use DMA by default when
- available" as well.
-
- Please read the comments at the top of
- <file:drivers/ide/pci/pdc202xx_old.c>.
-
- If unsure, say N.
-
-PROMISE PDC202{68|69|70|71|75|76|77} support
-CONFIG_BLK_DEV_PDC202XX_NEW
- Promise Ultra 100 TX2 [PDC20268]
- Promise Ultra 133 PTX2 [PDC20269]
- Promise FastTrak LP/TX2/TX4 [PDC20270]
- Promise FastTrak TX2000 [PDC20271]
- Promise MB Ultra 133 [PDC20275]
- Promise MB FastTrak 133 [PDC20276]
- Promise FastTrak 133 [PDC20277]
-
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt. This device is a bootable PCI UDMA controller. Since
- multiple cards can be installed and there are BIOS ROM problems that
- happen if the BIOS revisions of all installed cards (max of five) do
- not match, the driver attempts to do dynamic tuning of the chipset
- at boot-time for max speed. Ultra33 BIOS 1.25 or newer is required
- for more than one card.
-
- If you say Y here, you need to say Y to "Use DMA by default when
- available" as well.
-
- If unsure, say N.
-
-Special UDMA Feature
-CONFIG_PDC202XX_BURST
- This option causes the pdc202xx driver to enable UDMA modes on the
- PDC202xx even when the PDC202xx BIOS has not done so.
-
- It was originally designed for the PDC20246/Ultra33, whose BIOS will
- only setup UDMA on the first two PDC20246 cards. It has also been
- used successfully on a PDC20265/Ultra100, allowing use of UDMA modes
- when the PDC20265 BIOS has been disabled (for faster boot up).
-
- Please read the comments at the top of
- <file:drivers/ide/pci/pdc202xx_old.c>.
-
- If unsure, say N.
-
-Special FastTrak Feature
-CONFIG_PDC202XX_FORCE
- For FastTrak enable overriding BIOS.
-
-SiS5513 chipset support
-CONFIG_BLK_DEV_SIS5513
- This driver ensures (U)DMA support for SIS5513 chipset family based
- mainboards.
-
- The following chipsets are supported:
- ATA16: SiS5511, SiS5513
- ATA33: SiS5591, SiS5597, SiS5598, SiS5600
- ATA66: SiS530, SiS540, SiS620, SiS630, SiS640
- ATA100: SiS635, SiS645, SiS650, SiS730, SiS735, SiS740,
- SiS745, SiS750
-
- If you say Y here, you need to say Y to "Use DMA by default when
- available" as well.
-
- Please read the comments at the top of <file:drivers/ide/pci/sis5513.c>.
-
-Silicon Image chipset support
-CONFIG_BLK_DEV_SIIMAGE
- This driver provides (U)DMA support for the SII3112 SATA controllers and
- for the CMD/SI680 UDMA/DMA ATA controller.
-
-SLC90E66 chipset support
-CONFIG_BLK_DEV_SLC90E66
- This driver ensures (U)DMA support for Victroy66 SouthBridges for
- SMsC with Intel NorthBridges. This is an Ultra66 based chipset.
- The nice thing about it is that you can mix Ultra/DMA/PIO devices
- and it will handle timing cycles. Since this is an improved
- look-a-like to the PIIX4 it should be a nice addition.
-
- If you say Y here, you need to say Y to "Use DMA by default when
- available" as well.
-
- Please read the comments at the top of
- <file:drivers/ide/pci/slc90e66.c>.
-
-Winbond SL82c105 support
-CONFIG_BLK_DEV_SL82C105
- If you have a Winbond SL82c105 IDE controller, say Y here to enable
- special configuration for this chip. This is common on various CHRP
- motherboards, but could be used elsewhere. If in doubt, say Y.
-
-Tekram TRM290 chipset support
-CONFIG_BLK_DEV_TRM290
- This driver adds support for bus master DMA transfers
- using the Tekram TRM290 PCI IDE chip. Volunteers are
- needed for further tweaking and development.
- Please read the comments at the top of <file:drivers/ide/pci/trm290.c>.
-
-VIA82CXXX chipset support
-CONFIG_BLK_DEV_VIA82CXXX
- This allows you to configure your chipset for a better use while
- running PIO/(U)DMA, it will allow you to enable efficiently the
- second channel dma usage, as it may not be set by BIOS. It will try
- to set fifo configuration at its best. It will allow you to get
- information from /proc/ide/via provided you enabled "/proc file
- system" support.
-
- Please read the comments at the top of
- <file:drivers/ide/pci/via82cxxx.c>.
-
- If you say Y here, then say Y to "Use DMA by default when available"
- as well.
-
- If unsure, say N.
-
-RapIDE interface support
-CONFIG_BLK_DEV_IDE_RAPIDE
- Say Y here if you want to support the Yellowstone RapIDE controller
- manufactured for use with Acorn computers.
-
-Other IDE chipset support
-CONFIG_IDE_CHIPSETS
- Say Y here if you want to include enhanced support for various IDE
- interface chipsets used on motherboards and add-on cards. You can
- then pick your particular IDE chip from among the following options.
- This enhanced support may be necessary for Linux to be able to
- access the 3rd/4th drives in some systems. It may also enable
- setting of higher speed I/O rates to improve system performance with
- these chipsets. Most of these also require special kernel boot
- parameters to actually turn on the support at runtime; you can find
- a list of these in the file <file:Documentation/ide.txt>.
-
- People with SCSI-only systems can say N here.
-
-Generic 4 drives/port support
-CONFIG_BLK_DEV_4DRIVES
- Certain older chipsets, including the Tekram 690CD, use a single set
- of I/O ports at 0x1f0 to control up to four drives, instead of the
- customary two drives per port. Support for this can be enabled at
- runtime using the "ide0=four" kernel boot parameter if you say Y
- here.
-
-ALI M14xx support
-CONFIG_BLK_DEV_ALI14XX
- This driver is enabled at runtime using the "ide0=ali14xx" kernel
- boot parameter. It enables support for the secondary IDE interface
- of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
- I/O speeds to be set as well. See the files
- <file:Documentation/ide.txt> and <file:drivers/ide/legacy/ali14xx.c> for
- more info.
-
-DTC-2278 support
-CONFIG_BLK_DEV_DTC2278
- This driver is enabled at runtime using the "ide0=dtc2278" kernel
- boot parameter. It enables support for the secondary IDE interface
- of the DTC-2278 card, and permits faster I/O speeds to be set as
- well. See the <file:Documentation/ide.txt> and
- <file:drivers/ide/legacy/dtc2278.c> files for more info.
-
-Holtek HT6560B support
-CONFIG_BLK_DEV_HT6560B
- This driver is enabled at runtime using the "ide0=ht6560b" kernel
- boot parameter. It enables support for the secondary IDE interface
- of the Holtek card, and permits faster I/O speeds to be set as well.
- See the <file:Documentation/ide.txt> and
- <file:drivers/ide/legacy/ht6560b.c> files for more info.
-
-PROMISE DC4030 support (EXPERIMENTAL)
-CONFIG_BLK_DEV_PDC4030
- This driver provides support for the secondary IDE interface and
- cache of Promise IDE chipsets, e.g. DC4030 and DC5030. This driver
- is known to incur timeouts/retries during heavy I/O to drives
- attached to the secondary interface. CD-ROM and TAPE devices are
- not supported yet. This driver is enabled at runtime using the
- "ide0=dc4030" kernel boot parameter. See the
- <file:Documentation/ide.txt> and <file:drivers/ide/legacy/pdc4030.c> files
- for more info.
-
-QDI QD65XX support
-CONFIG_BLK_DEV_QD65XX
- This driver is enabled at runtime using the "ide0=qd65xx" kernel
- boot parameter. It permits faster I/O speeds to be set. See the
- <file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c> for
- more info.
-
-UMC 8672 support
-CONFIG_BLK_DEV_UMC8672
- This driver is enabled at runtime using the "ide0=umc8672" kernel
- boot parameter. It enables support for the secondary IDE interface
- of the UMC-8672, and permits faster I/O speeds to be set as well.
- See the files <file:Documentation/ide.txt> and
- <file:drivers/ide/legacy/umc8672.c> for more info.
-
-Amiga Gayle IDE interface support
-CONFIG_BLK_DEV_GAYLE
- This is the IDE driver for the Amiga Gayle IDE interface. It supports
- both the `A1200 style' and `A4000 style' of the Gayle IDE interface,
- This includes builtin IDE interfaces on some Amiga models (A600,
- A1200, A4000, and A4000T), and IDE interfaces on the Zorro expansion
- bus (M-Tech E-Matrix 530 expansion card).
- Say Y if you have an Amiga with a Gayle IDE interface and want to use
- IDE devices (hard disks, CD-ROM drives, etc.) that are connected to it.
- Note that you also have to enable Zorro bus support if you want to
- use Gayle IDE interfaces on the Zorro expansion bus.
-
-Falcon IDE interface support
-CONFIG_BLK_DEV_FALCON_IDE
- This is the IDE driver for the builtin IDE interface on the Atari
- Falcon. Say Y if you have a Falcon and want to use IDE devices (hard
- disks, CD-ROM drives, etc.) that are connected to the builtin IDE
- interface.
-
-Amiga Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)
-CONFIG_BLK_DEV_BUDDHA
- This is the IDE driver for the IDE interfaces on the Buddha,
- Catweasel and X-Surf expansion boards. It supports up to two interfaces
- on the Buddha, three on the Catweasel and two on the X-Surf.
-
- Say Y if you have a Buddha or Catweasel expansion board and want to
- use IDE devices (hard disks, CD-ROM drives, etc.) that are connected
- to one of its IDE interfaces.
-
-Amiga IDE Doubler support (EXPERIMENTAL)
-CONFIG_BLK_DEV_IDEDOUBLER
- This driver provides support for the so-called `IDE doublers' (made
- by various manufacturers, e.g. Eyetech) that can be connected to the
- builtin IDE interface of some Amiga models. Using such an IDE
- doubler, you can connect up to four instead of two IDE devices on
- the Amiga's builtin IDE interface.
-
- Note that the normal Amiga Gayle IDE driver may not work correctly
- if you have an IDE doubler and don't enable this driver!
-
- Say Y if you have an IDE doubler. The driver is enabled at kernel
- runtime using the "ide=doubler" kernel boot parameter.
-
-Builtin PowerMac IDE support
-CONFIG_BLK_DEV_IDE_PMAC
- This driver provides support for the built-in IDE controller on
- most of the recent Apple Power Macintoshes and PowerBooks.
- If unsure, say Y.
-
-PowerMac IDE DMA support
-CONFIG_BLK_DEV_IDEDMA_PMAC
- This option allows the driver for the built-in IDE controller on
- Power Macintoshes and PowerBooks to use DMA (direct memory access)
- to transfer data to and from memory. Saying Y is safe and improves
- performance.
-
-Broadcom SiByte onboard IDE support
-CONFIG_BLK_DEV_IDE_SIBYTE
- Include the driver for on-board IDE on the SiByte Generic Bus. Note
- that this limits the number of IDE devices to 4 (ide0...ide3).
-
-Use DMA by default
-CONFIG_BLK_DEV_IDEDMA_PMAC_AUTO
- This option allows the driver for the built-in IDE controller on
- Power Macintoshes and PowerBooks to use DMA automatically, without
- it having to be explicitly enabled. This option is provided because
- of concerns about a couple of cases where using DMA on buggy PC
- hardware may have caused damage. Saying Y should be safe on all
- Apple machines.
-
-Macintosh Quadra/Powerbook IDE interface support
-CONFIG_BLK_DEV_MAC_IDE
- This is the IDE driver for the builtin IDE interface on some m68k
- Macintosh models. It supports both the `Quadra style' (used in
- Quadra/ Centris 630 and Performa 588 models) and `Powerbook style'
- (used in the Powerbook 150 and 190 models) IDE interface.
-
- Say Y if you have such an Macintosh model and want to use IDE
- devices (hard disks, CD-ROM drives, etc.) that are connected to the
- builtin IDE interface.
-
-ICS IDE interface support
-CONFIG_BLK_DEV_IDE_ICSIDE
- On Acorn systems, say Y here if you wish to use the ICS IDE
- interface card. This is not required for ICS partition support.
- If you are unsure, say N to this.
-
-ICS DMA support
-CONFIG_BLK_DEV_IDEDMA_ICS
- Say Y here if you want to add DMA (Direct Memory Access) support to
- the ICS IDE driver.
-
-Use ICS DMA by default
-CONFIG_IDEDMA_ICS_AUTO
- Prior to kernel version 2.1.112, Linux used to automatically use
- DMA for IDE drives and chipsets which support it. Due to concerns
- about a couple of cases where buggy hardware may have caused damage,
- the default is now to NOT use DMA automatically. To revert to the
- previous behaviour, say Y to this question.
-
- If you suspect your hardware is at all flakey, say N here.
- Do NOT email the IDE kernel people regarding this issue!
-
-XT hard disk support
-CONFIG_BLK_DEV_XD
- Very old 8 bit hard disk controllers used in the IBM XT computer
- will be supported if you say Y here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called xd.o.
-
- It's pretty unlikely that you have one of these: say N.
-
-PS/2 ESDI hard disk support
-CONFIG_BLK_DEV_PS2
- Say Y here if you have a PS/2 machine with a MCA bus and an ESDI
- hard disk.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ps2esdi.o.
-
-Mylex DAC960/DAC1100 PCI RAID Controller support
-CONFIG_BLK_DEV_DAC960
- This driver adds support for the Mylex DAC960, AcceleRAID, and
- eXtremeRAID PCI RAID controllers. See the file
- <file:Documentation/README.DAC960> for further information about
- this driver.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called DAC960.o.
-
-Parallel port IDE device support
-CONFIG_PARIDE
- There are many external CD-ROM and disk devices that connect through
- your computer's parallel port. Most of them are actually IDE devices
- using a parallel port IDE adapter. This option enables the PARIDE
- subsystem which contains drivers for many of these external drives.
- Read <file:Documentation/paride.txt> for more information.
-
- If you have said Y to the "Parallel-port support" configuration
- option, you may share a single port between your printer and other
- parallel port devices. Answer Y to build PARIDE support into your
- kernel, or M if you would like to build it as a loadable module. If
- your parallel port support is in a loadable module, you must build
- PARIDE as a module. If you built PARIDE support into your kernel,
- you may still build the individual protocol modules and high-level
- drivers as loadable modules. If you build this support as a module,
- it will be called paride.o.
-
- To use the PARIDE support, you must say Y or M here and also to at
- least one high-level driver (e.g. "Parallel port IDE disks",
- "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and
- to at least one protocol driver (e.g. "ATEN EH-100 protocol",
- "MicroSolutions backpack protocol", "DataStor Commuter protocol"
- etc.).
-
-Parallel port IDE disks
-CONFIG_PARIDE_PD
- This option enables the high-level driver for IDE-type disk devices
- connected through a parallel port. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- parallel port IDE driver, otherwise you should answer M to build
- it as a loadable module. The module will be called pd.o. You
- must also have at least one parallel port protocol driver in your
- system. Among the devices supported by this driver are the SyQuest
- EZ-135, EZ-230 and SparQ drives, the Avatar Shark and the backpack
- hard drives from MicroSolutions.
-
-Parallel port ATAPI CD-ROMs
-CONFIG_PARIDE_PCD
- This option enables the high-level driver for ATAPI CD-ROM devices
- connected through a parallel port. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- parallel port ATAPI CD-ROM driver, otherwise you should answer M to
- build it as a loadable module. The module will be called pcd.o. You
- must also have at least one parallel port protocol driver in your
- system. Among the devices supported by this driver are the
- MicroSolutions backpack CD-ROM drives and the Freecom Power CD. If
- you have such a CD-ROM drive, you should also say Y or M to "ISO
- 9660 CD-ROM file system support" below, because that's the file
- system used on CD-ROMs.
-
-Parallel port ATAPI disks
-CONFIG_PARIDE_PF
- This option enables the high-level driver for ATAPI disk devices
- connected through a parallel port. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- parallel port ATAPI disk driver, otherwise you should answer M
- to build it as a loadable module. The module will be called pf.o.
- You must also have at least one parallel port protocol driver in
- your system. Among the devices supported by this driver are the
- MicroSolutions backpack PD/CD drive and the Imation Superdisk
- LS-120 drive.
-
-Parallel port ATAPI tapes
-CONFIG_PARIDE_PT
- This option enables the high-level driver for ATAPI tape devices
- connected through a parallel port. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- parallel port ATAPI disk driver, otherwise you should answer M
- to build it as a loadable module. The module will be called pt.o.
- You must also have at least one parallel port protocol driver in
- your system. Among the devices supported by this driver is the
- parallel port version of the HP 5GB drive.
-
-Parallel port generic ATAPI devices
-CONFIG_PARIDE_PG
- This option enables a special high-level driver for generic ATAPI
- devices connected through a parallel port. The driver allows user
- programs, such as cdrtools, to send ATAPI commands directly to a
- device.
-
- If you chose to build PARIDE support into your kernel, you may
- answer Y here to build in the parallel port generic ATAPI driver,
- otherwise you should answer M to build it as a loadable module. The
- module will be called pg.o.
-
- You must also have at least one parallel port protocol driver in
- your system.
-
- This driver implements an API loosely related to the generic SCSI
- driver. See <file:include/linux/pg.h>. for details.
-
- You can obtain the most recent version of cdrtools from
- <ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/>. Versions 1.6.1a3 and
- later fully support this driver.
-
-ATEN EH-100 protocol
-CONFIG_PARIDE_ATEN
- This option enables support for the ATEN EH-100 parallel port IDE
- protocol. This protocol is used in some inexpensive low performance
- parallel port kits made in Hong Kong. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- protocol driver, otherwise you should answer M to build it as a
- loadable module. The module will be called aten.o. You must also
- have a high-level driver for the type of device that you want to
- support.
-
-Micro Solutions BACKPACK Series 5 protocol
-CONFIG_PARIDE_BPCK
- This option enables support for the Micro Solutions BACKPACK
- parallel port Series 5 IDE protocol. (Most BACKPACK drives made
- before 1999 were Series 5) Series 5 drives will NOT always have the
- Series noted on the bottom of the drive. Series 6 drivers will.
-
- In other words, if your BACKPACK drive dosen't say "Series 6" on the
- bottom, enable this option.
-
- If you chose to build PARIDE support into your kernel, you may
- answer Y here to build in the protocol driver, otherwise you should
- answer M to build it as a loadable module. The module will be
- called bpck.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-Micro Solutions BACKPACK Series 6 protocol
-CONFIG_PARIDE_BPCK6
- This option enables support for the Micro Solutions BACKPACK
- parallel port Series 6 IDE protocol. (Most BACKPACK drives made
- after 1999 were Series 6) Series 6 drives will have the Series noted
- on the bottom of the drive. Series 5 drivers don't always have it
- noted.
-
- In other words, if your BACKPACK drive says "Series 6" on the
- bottom, enable this option.
-
- If you chose to build PARIDE support into your kernel, you may
- answer Y here to build in the protocol driver, otherwise you should
- answer M to build it as a loadable module. The module will be
- called bpck6.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-DataStor Commuter protocol
-CONFIG_PARIDE_COMM
- This option enables support for the Commuter parallel port IDE
- protocol from DataStor. If you chose to build PARIDE support
- into your kernel, you may answer Y here to build in the protocol
- driver, otherwise you should answer M to build it as a loadable
- module. The module will be called comm.o. You must also have
- a high-level driver for the type of device that you want to support.
-
-DataStor EP-2000 protocol
-CONFIG_PARIDE_DSTR
- This option enables support for the EP-2000 parallel port IDE
- protocol from DataStor. If you chose to build PARIDE support
- into your kernel, you may answer Y here to build in the protocol
- driver, otherwise you should answer M to build it as a loadable
- module. The module will be called dstr.o. You must also have
- a high-level driver for the type of device that you want to support.
-
-Shuttle EPAT/EPEZ protocol
-CONFIG_PARIDE_EPAT
- This option enables support for the EPAT parallel port IDE protocol.
- EPAT is a parallel port IDE adapter manufactured by Shuttle
- Technology and widely used in devices from major vendors such as
- Hewlett-Packard, SyQuest, Imation and Avatar. If you chose to build
- PARIDE support into your kernel, you may answer Y here to build in
- the protocol driver, otherwise you should answer M to build it as a
- loadable module. The module will be called epat.o. You must also
- have a high-level driver for the type of device that you want to
- support.
-
-Shuttle EPAT c7/c8 extension
-CONFIG_PARIDE_EPATC8
- This option enables support for the newer Shuttle EP1284 (aka c7 and
- c8) chip. You need this if you are using any recent Imation SuperDisk
- (LS-120) drive.
-
-Shuttle EPIA protocol
-CONFIG_PARIDE_EPIA
- This option enables support for the (obsolete) EPIA parallel port
- IDE protocol from Shuttle Technology. This adapter can still be
- found in some no-name kits. If you chose to build PARIDE support
- into your kernel, you may answer Y here to build in the protocol
- driver, otherwise you should answer M to build it as a loadable
- module. The module will be called epia.o. You must also have a
- high-level driver for the type of device that you want to support.
-
-FIT TD-2000 protocol
-CONFIG_PARIDE_FIT2
- This option enables support for the TD-2000 parallel port IDE
- protocol from Fidelity International Technology. This is a simple
- (low speed) adapter that is used in some portable hard drives. If
- you chose to build PARIDE support into your kernel, you may answer Y
- here to build in the protocol driver, otherwise you should answer M
- to build it as a loadable module. The module will be called fit2.o.
- You must also have a high-level driver for the type of device that
- you want to support.
-
-FIT TD-3000 protocol
-CONFIG_PARIDE_FIT3
- This option enables support for the TD-3000 parallel port IDE
- protocol from Fidelity International Technology. This protocol is
- used in newer models of their portable disk, CD-ROM and PD/CD
- devices. If you chose to build PARIDE support into your kernel, you
- may answer Y here to build in the protocol driver, otherwise you
- should answer M to build it as a loadable module. The module will be
- called fit3.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-Freecom IQ ASIC-2 protocol
-CONFIG_PARIDE_FRIQ
- This option enables support for version 2 of the Freecom IQ parallel
- port IDE adapter. This adapter is used by the Maxell Superdisk
- drive. If you chose to build PARIDE support into your kernel, you
- may answer Y here to build in the protocol driver, otherwise you
- should answer M to build it as a loadable module. The module will be
- called friq.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-FreeCom power protocol
-CONFIG_PARIDE_FRPW
- This option enables support for the Freecom power parallel port IDE
- protocol. If you chose to build PARIDE support into your kernel, you
- may answer Y here to build in the protocol driver, otherwise you
- should answer M to build it as a loadable module. The module will be
- called frpw.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-KingByte KBIC-951A/971A protocols
-CONFIG_PARIDE_KBIC
- This option enables support for the KBIC-951A and KBIC-971A parallel
- port IDE protocols from KingByte Information Corp. KingByte's
- adapters appear in many no-name portable disk and CD-ROM products,
- especially in Europe. If you chose to build PARIDE support into your
- kernel, you may answer Y here to build in the protocol driver,
- otherwise you should answer M to build it as a loadable module. The
- module will be called kbic.o. You must also have a high-level driver
- for the type of device that you want to support.
-
-KT PHd protocol
-CONFIG_PARIDE_KTTI
- This option enables support for the "PHd" parallel port IDE protocol
- from KT Technology. This is a simple (low speed) adapter that is
- used in some 2.5" portable hard drives. If you chose to build PARIDE
- support into your kernel, you may answer Y here to build in the
- protocol driver, otherwise you should answer M to build it as a
- loadable module. The module will be called ktti.o. You must also
- have a high-level driver for the type of device that you want to
- support.
-
-OnSpec 90c20 protocol
-CONFIG_PARIDE_ON20
- This option enables support for the (obsolete) 90c20 parallel port
- IDE protocol from OnSpec (often marketed under the ValuStore brand
- name). If you chose to build PARIDE support into your kernel, you
- may answer Y here to build in the protocol driver, otherwise you
- should answer M to build it as a loadable module. The module will
- be called on20.o. You must also have a high-level driver for the
- type of device that you want to support.
-
-OnSpec 90c26 protocol
-CONFIG_PARIDE_ON26
- This option enables support for the 90c26 parallel port IDE protocol
- from OnSpec Electronics (often marketed under the ValuStore brand
- name). If you chose to build PARIDE support into your kernel, you
- may answer Y here to build in the protocol driver, otherwise you
- should answer M to build it as a loadable module. The module will be
- called on26.o. You must also have a high-level driver for the type
- of device that you want to support.
-
-Logical Volume Manager (LVM) support
-CONFIG_BLK_DEV_LVM
- This driver lets you combine several hard disks, hard disk
- partitions, multiple devices or even loop devices (for evaluation
- purposes) into a volume group. Imagine a volume group as a kind of
- virtual disk. Logical volumes, which can be thought of as virtual
- partitions, can be created in the volume group. You can resize
- volume groups and logical volumes after creation time, corresponding
- to new capacity needs. Logical volumes are accessed as block
- devices named /dev/VolumeGroupName/LogicalVolumeName.
-
- For details see <file:Documentation/LVM-HOWTO>. You will need
- supporting user space software; location is in
- <file:Documentation/Changes>.
-
- If you want to compile this support as a module ( = code which can
- be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called lvm-mod.o.
-
-Multiple devices driver support (RAID and LVM)
-CONFIG_MD
- Support multiple physical spindles through a single logical device.
- Required for RAID and logical volume management (LVM).
-
-Multiple devices driver support
-CONFIG_BLK_DEV_MD
- This driver lets you combine several hard disk partitions into one
- logical block device. This can be used to simply append one
- partition to another one or to combine several redundant hard disks
- into a RAID1/4/5 device so as to provide protection against hard
- disk failures. This is called "Software RAID" since the combining of
- the partitions is done by the kernel. "Hardware RAID" means that the
- combining is done by a dedicated controller; if you have such a
- controller, you do not need to say Y here.
-
- More information about Software RAID on Linux is contained in the
- Software RAID mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. There you will also learn
- where to get the supporting user space utilities raidtools.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- md.o
-
- If unsure, say N.
-
-Linear (append) mode
-CONFIG_MD_LINEAR
- If you say Y here, then your multiple devices driver will be able to
- use the so-called linear mode, i.e. it will combine the hard disk
- partitions by simply appending one to the other.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called linear.o.
-
- If unsure, say Y.
-
-RAID-0 (striping) mode
-CONFIG_MD_RAID0
- If you say Y here, then your multiple devices driver will be able to
- use the so-called raid0 mode, i.e. it will combine the hard disk
- partitions into one logical device in such a fashion as to fill them
- up evenly, one chunk here and one chunk there. This will increase
- the throughput rate if the partitions reside on distinct disks.
-
- Information about Software RAID on Linux is contained in the
- Software-RAID mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. There you will also
- learn where to get the supporting user space utilities raidtools.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called raid0.o.
-
- If unsure, say Y.
-
-RAID-1 (mirroring) mode
-CONFIG_MD_RAID1
- A RAID-1 set consists of several disk drives which are exact copies
- of each other. In the event of a mirror failure, the RAID driver
- will continue to use the operational mirrors in the set, providing
- an error free MD (multiple device) to the higher levels of the
- kernel. In a set with N drives, the available space is the capacity
- of a single drive, and the set protects against a failure of (N - 1)
- drives.
-
- Information about Software RAID on Linux is contained in the
- Software-RAID mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. There you will also
- learn where to get the supporting user space utilities raidtools.
-
- If you want to use such a RAID-1 set, say Y. This code is also
- available as a module called raid1.o ( = code which can be inserted
- in and removed from the running kernel whenever you want). If you
- want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- If unsure, say Y.
-
-RAID-4/RAID-5 mode
-CONFIG_MD_RAID5
- A RAID-5 set of N drives with a capacity of C MB per drive provides
- the capacity of C * (N - 1) MB, and protects against a failure
- of a single drive. For a given sector (row) number, (N - 1) drives
- contain data sectors, and one drive contains the parity protection.
- For a RAID-4 set, the parity blocks are present on a single drive,
- while a RAID-5 set distributes the parity across the drives in one
- of the available parity distribution methods.
-
- Information about Software RAID on Linux is contained in the
- Software-RAID mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. There you will also
- learn where to get the supporting user space utilities raidtools.
-
- If you want to use such a RAID-4/RAID-5 set, say Y. This code is
- also available as a module called raid5.o ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- If unsure, say Y.
-
-Multipath I/O support
-CONFIG_MD_MULTIPATH
- Multipath-IO is the ability of certain devices to address the same
- physical disk over multiple 'IO paths'. The code ensures that such
- paths can be defined and handled at runtime, and ensures that a
- transparent failover to the backup path(s) happens if a IO errors
- arrives on the primary path.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- multipath.o
-
- If unsure, say N.
-
-Support for IDE Raid controllers
-CONFIG_BLK_DEV_ATARAID
- Say Y or M if you have an IDE Raid controller and want linux
- to use its softwareraid feature. You must also select an
- appropriate for your board low-level driver below.
-
- Note, that Linux does not use the Raid implementation in BIOS, and
- the main purpose for this feature is to retain compatibility and
- data integrity with other OS-es, using the same disk array. Linux
- has its own Raid drivers, which you should use if you need better
- performance.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ataraid.o
-
-Support Promise software RAID (Fasttrak(tm))
-CONFIG_BLK_DEV_ATARAID_PDC
- Say Y or M if you have a Promise Fasttrak (tm) Raid controller
- and want linux to use the softwareraid feature of this card.
- This driver uses /dev/ataraid/dXpY (X and Y numbers) as device
- names.
-
- If you choose to compile this as a module, the module will be called
- pdcraid.o.
-
-Highpoint 370 software RAID
-CONFIG_BLK_DEV_ATARAID_HPT
- Say Y or M if you have a Highpoint HPT 370 Raid controller
- and want linux to use the softwareraid feature of this card.
- This driver uses /dev/ataraid/dXpY (X and Y numbers) as device
- names.
-
- If you choose to compile this as a module, the module will be called
- hptraid.o.
-
-Support for Acer PICA 1 chipset
-CONFIG_ACER_PICA_61
- This is a machine with a R4400 133/150 MHz CPU. To compile a Linux
- kernel that runs on these, say Y here. For details about Linux on
- the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at
- <http://www.linux-mips.org/>.
-
-Support for Algorithmics P4032 (EXPERIMENTAL)
-CONFIG_ALGOR_P4032
- This is an evaluation board of the British company Algorithmics.
- The board uses the R4300 and a R5230 CPUs. For more information
- about this board see <http://www.algor.co.uk/>.
-
-SGI SN2 L1 serial port support
-CONFIG_SGI_L1_SERIAL
- If you have an SGI SN2 and you want to use the serial port connected
- to the system controller (you want this!), say Y. Otherwise, say N.
-
-SGI SN2 L1 serial console support
-CONFIG_SGI_L1_SERIAL_CONSOLE
- If you have an SGI SN2 and you would like to use the system
- controller serial port as your console (you want this!), say Y.
- Otherwise, say N.
-
-Support for BAGET MIPS series
-CONFIG_BAGET_MIPS
- This enables support for the Baget, a Russian embedded system. For
- more details about the Baget see the Linux/MIPS FAQ on
- <http://www.linux-mips.org/>.
-
-Baget AMD LANCE support
-CONFIG_BAGETLANCE
- Say Y to enable kernel support for AMD Lance Ethernet cards on the
- MIPS-32-based Baget embedded system. This chipset is better known
- via the NE2100 cards.
-
-Support for DECstations
-CONFIG_DECSTATION
- This enables support for DEC's MIPS based workstations. For details
- see the Linux/MIPS FAQ on <http://www.linux-mips.org/> and the
- DECstation porting pages on <http://decstation.unix-ag.org/>.
-
- If you have one of the following DECstation Models you definitely
- want to choose R4xx0 for the CPU Type:
-
- DECstation 5000/50
- DECstation 5000/150
- DECstation 5000/260
- DECsystem 5900/260
-
- otherwise choose R3000.
-
-Support for Cobalt Micro Server
-CONFIG_COBALT_MICRO_SERVER
- Support for MIPS-based Cobalt boxes (they have been bought by Sun
- and are now the "Server Appliance Business Unit") including the 2700
- series -- versions 1 of the Qube and Raq. To compile a Linux kernel
- for this hardware, say Y here.
-
-Support for Cobalt 2800
-CONFIG_COBALT_28
- Support for the second generation of MIPS-based Cobalt boxes (they
- have been bought by Sun and are now the "Server Appliance Business
- Unit") including the 2800 series -- versions 2 of the Qube and Raq.
- To compile a Linux kernel for this hardware, say Y here.
-
-Support for the Momentum Computer Ocelot SBC
-CONFIG_MOMENCO_OCELOT
- The Ocelot is a MIPS-based Single Board Computer (SBC) made by
- Momentum Computer <http://www.momenco.com/>.
-
-Support for NEC DDB Vrc-5074
-CONFIG_DDB5074
- This enables support for the VR5000-based NEC DDB Vrc-5074
- evaluation board.
-
-Support for NEC DDB Vrc-5476
-CONFIG_DDB5476
- This enables support for the R5432-based NEC DDB Vrc-5476
- evaluation board.
-
- Features : kernel debugging, serial terminal, NFS root fs, on-board
- ether port (Need an additional patch at <http://linux.junsun.net/>),
- USB, AC97, PCI, PCI VGA card & framebuffer console, IDE controller,
- PS2 keyboard, PS2 mouse, etc.
-
-Support for NEC DDB Vrc-5477
-CONFIG_DDB5477
- This enables support for the R5432-based NEC DDB Vrc-5477
- evaluation board.
-
- Features : kernel debugging, serial terminal, NFS root fs, on-board
- ether port (Need an additional patch at <http://linux.junsun.net/>),
- USB, AC97, PCI, etc.
-
-Support for MIPS Atlas board
-CONFIG_MIPS_ATLAS
- This enables support for the QED R5231-based MIPS Atlas evaluation
- board.
-
-Support for MIPS Malta board
-CONFIG_MIPS_MALTA
- This enables support for the VR5000-based MIPS Malta evaluation
- board.
-
-# Choice: bcmboard
-Support for Broadcom SiByte boards
-CONFIG_SIBYTE_SWARM
- Enable support for boards based on the Broadcom SiByte family:
-
- BCM91250A-SWARM BCM1250 ATX size Eval Board (BCM91250A-SWARM)
-
- BCM91250E-Sentosa BCM1250 PCI card Eval Board (BCM91250E-Sentosa)
-
- BCM91125E-Rhone BCM1125 PCI card Eval Board (BCM91125E-Rhone)
-
- Other Non-Broadcom SiByte-based platform
-
-# Choice: bcmsoc
-Support for Broadcom BCM1xxx SOCs
-CONFIG_SIBYTE_SB1250
-
- BCM1250 Dual-CPU SB1 with PCI and HyperTransport.
-
- BCM1120 Uniprocessor SB1.
-
- BCM1125 Uniprocessor SB1 with PCI (and HyperTransport for 1125H).
-
-BCM1250 Stepping
-CONFIG_CPU_SB1_PASS_1
- Which pass of the SOC is supported (see the "system_revision"
- register in the User Manual for more discussion of revisions):
-
- Pass1 1250 "Pass 1"
-
- An 1250 "Pass 2"
-
- Bn 1250 "Pass 2.2"
-
- Cn 1250 "Pass 3"
-
-BCM112x Stepping
-CONFIG_CPU_SB1_PASS_2
- Which pass of the SOC is supported (see the "system_revision"
- register in the User Manual for more discussion of revisions):
-
- Hybrid 1250 "Pass 2"
-
- An 112x "Pass 1"
-
-Booting from CFE
-CONFIG_SIBYTE_CFE
- Make use of the CFE API for enumerating available memory,
- controlling secondary CPUs, and possibly console output.
-
-Use firmware console
-CONFIG_SIBYTE_CFE_CONSOLE
- Use the CFE API's console write routines during boot. Other console
- options (VT console, sb1250 duart console, etc.) should not be
- configured.
-
-Support for Bus Watcher statistics
-CONFIG_SIBYTE_BUS_WATCHER
- Handle and keep statistics on the bus error interrupts (COR_ECC,
- BAD_ECC, IO_BUS).
-
-Bus trace dump on bus error
-CONFIG_SIBYTE_BW_TRACE
- Run a continuous bus trace, dumping the raw data as soon as a ZBbus
- error is detected. Cannot work if ZBbus profiling is turned on, and
- also will interfere with JTAG-based trace buffer activity. Raw
- buffer data is dumped to console, and must be processed off-line.
-
-Corelis Debugger
-CONFIG_SB1XXX_CORELIS
- Select compile flags that produce code that can be processed by the
- Corelis mksym utility and UDB Emulator.
-
-DMA for page clear and copy
-CONFIG_SIBYTE_DMA_PAGEOPS
- Instead of using the CPU to zero and copy pages, use a Data Mover
- channel. These DMA channels are otherwise unused by the standard
- SiByte Linux port. Seems to give a small performance benefit.
-
-Support for Galileo Evaluation board or CoSine Orion
-CONFIG_ORION
- Say Y if configuring for the Galileo evaluation board
- or CoSine Orion. More information is available at
- <http://tochna.technion.ac.il/project/linux/html/linux.html>.
-
- Otherwise, say N.
-
-Support for Mips Magnum 4000
-CONFIG_MIPS_MAGNUM_4000
- This is a machine with a R4000 100 MHz CPU. To compile a Linux
- kernel that runs on these, say Y here. For details about Linux on
- the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at
- <http://www.linux-mips.org/>.
-
-Enable Qtronix 990P Keyboard Support
-CONFIG_QTRONIX_KEYBOARD
- Images of Qtronix keyboards are at
- <http://www.qtronix.com/keyboard.html>.
-
-Support for Olivetti M700
-CONFIG_OLIVETTI_M700
- This is a machine with a R4000 100 MHz CPU. To compile a Linux
- kernel that runs on these, say Y here. For details about Linux on
- the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at
- <http://www.linux-mips.org/>.
-
-Support for SNI RM200 PCI
-CONFIG_SNI_RM200_PCI
- The SNI RM200 PCI was a MIPS-based platform manufactured by Siemens
- Nixdorf Informationssysteme (SNI), parent company of Pyramid
- Technology and now in turn merged with Fujitsu. Say Y here to
- support this machine type.
-
-Support for SGI-IP22 (Indy/Indigo2)
-CONFIG_SGI_IP22
- This are the SGI Indy, Challenge S and Indigo2, as well as certain
- OEM variants like the Tandem CMN B006S. To compile a Linux kernel
- that runs on these, say Y here.
-
-Support for SGI IP27 (Origin200/2000)
-CONFIG_SGI_IP27
- This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
- workstations. To compile a Linux kernel that runs on these, say Y
- here.
-
-IP27 N-Mode
-CONFIG_SGI_SN0_N_MODE
- The nodes of Origin 200, Origin 2000 and Onyx 2 systems can be
- configured in either N-Modes which allows for more nodes or M-Mode
- which allows for more memory. Your system is most probably
- running in M-Mode, so you should say N here.
-
-Lasi Ethernet
-CONFIG_LASI_82596
- Say Y here to support the on-board Intel 82596 ethernet controller
- built into Hewlett-Packard PA-RISC machines.
-
-MIPS JAZZ onboard SONIC Ethernet support
-CONFIG_MIPS_JAZZ_SONIC
- This is the driver for the onboard card of MIPS Magnum 4000,
- Acer PICA, Olivetti M700-10 and a few other identical OEM systems.
-
-MIPS JAZZ FAS216 SCSI support
-CONFIG_JAZZ_ESP
- This is the driver for the onboard SCSI host adapter of MIPS Magnum
- 4000, Acer PICA, Olivetti M700-10 and a few other identical OEM
- systems.
-
-MIPS GT96100 Ethernet support
-CONFIG_MIPS_GT96100ETH
- Say Y here to support the Ethernet subsystem on your GT96100 card.
-
-Zalon SCSI support
-CONFIG_SCSI_ZALON
- The Zalon is an interface chip that sits between the PA-RISC
- processor and the NCR 53c720 SCSI controller on K-series PA-RISC
- boards (these are used, among other places, on some HP 780
- workstations). Say Y here to make sure it gets initialized
- correctly before the Linux kernel tries to talk to the controller.
-
-SGI PROM Console Support
-CONFIG_SGI_PROM_CONSOLE
- Say Y here to set up the boot console on serial port 0.
-
-DECstation serial support
-CONFIG_SERIAL_DEC
- This selects whether you want to be asked about drivers for
- DECstation serial ports.
-
- 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 DECstation serial ports.
-
- If unsure, say Y.
-
-Support for console on a DECstation serial port
-CONFIG_SERIAL_DEC_CONSOLE
- If you say Y here, it will be possible to use a serial port as the
- system console (the system console is the device which receives all
- kernel messages and warnings and which allows logins in single user
- mode). Note that the firmware uses ttyS0 as the serial console on
- the Maxine and ttyS2 on the others.
-
- If unsure, say Y.
-
-DZ11 Serial Support
-CONFIG_DZ
- DZ11-family serial controllers for VAXstations, including the
- DC7085, M7814, and M7819.
-
-TURBOchannel support
-CONFIG_TC
- TurboChannel is a DEC (now Compaq) bus for Alpha and MIPS processors.
- Documentation on writing device drivers for TurboChannel is available at:
- <http://www.cs.arizona.edu/computer.help/policy/DIGITAL_unix/AA-PS3HD-TET1_html/TITLE.html>.
-
-# Choice: galileo_clock
-75
-CONFIG_SYSCLK_75
- Configure the kernel for clock speed of your Galileo board.
- The choices are 75MHz, 83.3MHz, and 100MHz.
-
-83.3
-CONFIG_SYSCLK_83
- Configure the Galileo kernel for a clock speed of 83.3 MHz.
-
-100
-CONFIG_SYSCLK_100
- Configure the Galileo kernel for a clock speed of 100 MHz.
-
-Z85C30 Serial Support
-CONFIG_ZS
- Documentation on the Zilog 85C350 serial communications controller
- is downloadable at <http://www.zilog.com/pdfs/serial/z85c30.pdf>.
-
-PCMCIA SCSI adapter support
-CONFIG_SCSI_PCMCIA
- Say Y here if you intend to attach a PCMCIA or CardBus card to your
- computer which acts as a SCSI host adapter. These are credit card
- size devices often used with laptops.
-
- 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 PCMCIA SCSI host adapters.
-
-Adaptec APA1480 CardBus support
-CONFIG_PCMCIA_APA1480
- Say Y here if you intend to attach this type of CardBus SCSI host
- adapter to your computer.
-
- This driver is also available as a module called apa1480_cb.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-NinjaSCSI-3 / NinjaSCSI-32Bi (16bit) PCMCIA support
-CONFIG_PCMCIA_NINJA_SCSI
- If you intend to attach this type of PCMCIA SCSI host adapter to
- your computer, say Y here and read
- <file:Documentation/README.nsp_cs.eng>.
-
- This driver is also available as a module called nsp_cs.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Adaptec AHA152X PCMCIA support
-CONFIG_PCMCIA_AHA152X
- Say Y here if you intend to attach this type of PCMCIA SCSI host
- adapter to your computer.
-
- This driver is also available as a module called aha152x_cs.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Qlogic PCMCIA support
-CONFIG_PCMCIA_QLOGIC
- Say Y here if you intend to attach this type of PCMCIA SCSI host
- adapter to your computer.
-
- This driver is also available as a module called qlogic_cs.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Future Domain PCMCIA support
-CONFIG_PCMCIA_FDOMAIN
- Say Y here if you intend to attach this type of PCMCIA SCSI host
- adapter to your computer.
-
- This driver is also available as a module called fdomain_cs.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-# Choice: mipstype
-CPU type
-CONFIG_CPU_R3000
- Please make sure to pick the right CPU type. Linux/MIPS is not
- designed to be generic, i.e. Kernels compiled for R3000 CPUs will
- *not* work on R4000 machines and vice versa. However, since most
- of the supported machines have an R4000 (or similar) CPU, R4x00
- might be a safe bet. If the resulting kernel does not work,
- try to recompile with R3000.
-
- R3000 MIPS Technologies R3000-series processors,
- including the 3041, 3051, and 3081.
-
- R6000 MIPS Technologies R6000-series processors,
- including the 64474, 64475, 64574 and 64575.
-
- R4300 MIPS Technologies R4300-series processors.
-
- R4x00 MIPS Technologies R4000-series processors other than 4300,
- including the 4640, 4650, and 4700.
-
- R5000 MIPS Technologies R5000-series processors other than the
- Nevada.
-
- R52xx MIPS Technologies R52xx-series ("Nevada") processors.
-
- R10000 MIPS Technologies R10000-series processors.
-
- SB1 Broadcom SiByte SB1 processor.
-
-R6000
-CONFIG_CPU_R6000
- MIPS Technologies R6000-series processors, including the 64474,
- 64475, 64574 and 64575.
-
-R4300
-CONFIG_CPU_R4300
- MIPS Technologies R4300-series processors.
-
-R4x00
-CONFIG_CPU_R4X00
- MIPS Technologies R4000-series processors other than 4300, including
- the 4640, 4650, and 4700.
-
-R5000
-CONFIG_CPU_R5000
- MIPS Technologies R5000-series processors other than the Nevada.
-
-R52x0
-CONFIG_CPU_NEVADA
- MIPS Technologies R52x0-series ("Nevada") processors.
-
-R8000
-CONFIG_CPU_R8000
- MIPS Technologies R8000-series processors.
-
-R10000
-CONFIG_CPU_R10000
- MIPS Technologies R10000-series processors.
-
-SB1
-CONFIG_CPU_SB1
- Broadcom SiByte SB1 processor.
-
-Discontiguous Memory Support
-CONFIG_DISCONTIGMEM
- Say Y to support efficient handling of discontiguous physical memory,
- for architectures which are either NUMA (Non-Uniform Memory Access)
- or have huge holes in the physical address space for other reasons.
- See <file:Documentation/vm/numa> for more.
-
-Mapped kernel support
-CONFIG_MAPPED_KERNEL
- Change the way a Linux kernel is loaded unto memory on a MIPS64
- machine. This is required in order to support text replication and
- NUMA. If you need to understand it, read the source code.
-
-Kernel text replication support
-CONFIG_REPLICATE_KTEXT
- Say Y here to enable replicating the kernel text across multiple
- nodes in a NUMA cluster. This trades memory for speed.
-
-Exception handler replication support
-CONFIG_REPLICATE_EXHANDLERS
- Say Y here to enable replicating the kernel exception handlers
- across multiple nodes in a NUMA cluster. This trades memory for
- speed.
-
-NUMA support?
-CONFIG_NUMA
- Say Y to compile the kernel to support NUMA (Non-Uniform Memory
- Access). This option is for configuring high-end multiprocessor
- server machines. If in doubt, say N.
-
-R41xx
-CONFIG_CPU_VR41XX
- The options selects support for the NEC VR41xx series of processors.
- Only choose this option if you have one of these processors as a
- kernel built with this option will not run on any other type of
- processor or vice versa.
-
-CPU feature configuration
-CONFIG_CPU_ADVANCED
- Saying yes here allows you to select support for various features
- your CPU may or may not have. Most people should say N here.
-
-ll and sc instructions available
-CONFIG_CPU_HAS_LLSC
- MIPS R4000 series and later provide the Load Linked (ll)
- and Store Conditional (sc) instructions. More information is
- available at <http://www.go-ecs.com/mips/miptek1.htm>.
-
- Say Y here if your CPU has the ll and sc instructions. Say Y here
- for better performance, N if you don't know. You must say Y here
- for multiprocessor machines.
-
-lld and scd instructions available
-CONFIG_CPU_HAS_LLDSCD
- Say Y here if your CPU has the lld and scd instructions, the 64-bit
- equivalents of ll and sc. Say Y here for better performance, N if
- you don't know. You must say Y here for multiprocessor machines.
-
-Writeback Buffer available
-CONFIG_CPU_HAS_WB
- Say N here for slightly better performance. You must say Y here for
- machines which require flushing of write buffers in software. Saying
- Y is the safe option; N may result in kernel malfunction and crashes.
-
-Support for large 64-bit configurations
-CONFIG_MIPS_INSANE_LARGE
- MIPS R10000 does support a 44 bit / 16TB address space as opposed to
- previous 64-bit processors which only supported 40 bit / 1TB. If you
- need processes of more than 1TB virtual address space, say Y here.
- This will result in additional memory usage, so it is not
- recommended for normal users.
-
-Generate little endian code
-CONFIG_CPU_LITTLE_ENDIAN
- Some MIPS machines can be configured for either little or big endian
- byte order. These modes require different kernels. Say Y if your
- machine is little endian, N if it's a big endian machine.
-
-Use power LED as a heartbeat
-CONFIG_HEARTBEAT
- Use the power-on LED on your machine as a load meter. The exact
- behaviour is platform-dependent, but normally the flash frequency is
- a hyperbolic function of the 5-minute load average.
-
-Networking support
-CONFIG_NET
- Unless you really know what you are doing, you should say Y here.
- The reason is that some programs need kernel networking support even
- when running on a stand-alone machine that isn't connected to any
- other computer. If you are upgrading from an older kernel, you
- should consider updating your networking tools too because changes
- in the kernel and the tools often go hand in hand. The tools are
- contained in the package net-tools, the location and version number
- of which are given in <file:Documentation/Changes>.
-
- For a general introduction to Linux networking, it is highly
- recommended to read the NET-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Socket filtering
-CONFIG_FILTER
- The Linux Socket Filter is derived from the Berkeley Packet Filter.
- If you say Y here, user-space programs can attach a filter to any
- socket and thereby tell the kernel that it should allow or disallow
- certain types of data to get through the socket. Linux Socket
- Filtering works on all socket types except TCP for now. See the
- text file <file:Documentation/networking/filter.txt> for more
- information.
-
- You need to say Y here if you want to use PPP packet filtering
- (see the CONFIG_PPP_FILTER option below).
-
- If unsure, say N.
-
-Network packet filtering (replaces ipchains)
-CONFIG_NETFILTER
- Netfilter is a framework for filtering and mangling network packets
- that pass through your Linux box.
-
- The most common use of packet filtering is to run your Linux box as
- a firewall protecting a local network from the Internet. The type of
- firewall provided by this kernel support is called a "packet
- filter", which means that it can reject individual network packets
- based on type, source, destination etc. The other kind of firewall,
- a "proxy-based" one, is more secure but more intrusive and more
- bothersome to set up; it inspects the network traffic much more
- closely, modifies it and has knowledge about the higher level
- protocols, which a packet filter lacks. Moreover, proxy-based
- firewalls often require changes to the programs running on the local
- clients. Proxy-based firewalls don't need support by the kernel, but
- they are often combined with a packet filter, which only works if
- you say Y here.
-
- You should also say Y here if you intend to use your Linux box as
- the gateway to the Internet for a local network of machines without
- globally valid IP addresses. This is called "masquerading": if one
- of the computers on your local network wants to send something to
- the outside, your box can "masquerade" as that computer, i.e. it
- forwards the traffic to the intended outside destination, but
- modifies the packets to make it look like they came from the
- firewall box itself. It works both ways: if the outside host
- replies, the Linux box will silently forward the traffic to the
- correct local computer. This way, the computers on your local net
- are completely invisible to the outside world, even though they can
- reach the outside and can receive replies. It is even possible to
- run globally visible servers from within a masqueraded local network
- using a mechanism called portforwarding. Masquerading is also often
- called NAT (Network Address Translation).
-
- Another use of Netfilter is in transparent proxying: if a machine on
- the local network tries to connect to an outside host, your Linux
- box can transparently forward the traffic to a local server,
- typically a caching proxy server.
-
- Various modules exist for netfilter which replace the previous
- masquerading (ipmasqadm), packet filtering (ipchains), transparent
- proxying, and portforwarding mechanisms. Please see
- <file:Documentation/Changes> under "iptables" for the location of
- these packages.
-
- Make sure to say N to "Fast switching" below if you intend to say Y
- here, as Fast switching currently bypasses netfilter.
-
- Chances are that you should say Y here if you compile a kernel which
- will run as a router and N for regular hosts. If unsure, say N.
-
-Network packet filtering debugging
-CONFIG_NETFILTER_DEBUG
- You can say Y here if you want to get additional messages useful in
- debugging the netfilter code.
-
-Connection tracking (required for masq/NAT)
-CONFIG_IP_NF_CONNTRACK
- Connection tracking keeps a record of what packets have passed
- through your machine, in order to figure out how they are related
- into connections.
-
- This is required to do Masquerading or other kinds of Network
- Address Translation (except for Fast NAT). It can also be used to
- enhance packet filtering (see `Connection state match support'
- below).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Amanda protocol support
-CONFIG_IP_NF_AMANDA
- If you are running the Amanda backup package (http://www.amanda.org/)
- on this machine or machines that will be MASQUERADED through this
- machine, then you may want to enable this feature. This allows the
- connection tracking and natting code to allow the sub-channels that
- Amanda requires for communication of the backup data, messages and
- index.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-IRC Send/Chat protocol support
-CONFIG_IP_NF_IRC
- There is a commonly-used extension to IRC called
- Direct Client-to-Client Protocol (DCC). This enables users to send
- files to each other, and also chat to each other without the need
- of a server. DCC Sending is used anywhere you send files over IRC,
- and DCC Chat is most commonly used by Eggdrop bots. If you are
- using NAT, this extension will enable you to send files and initiate
- chats. Note that you do NOT need this extension to get files or
- have others initiate chats, or everything else in IRC.
-
- If you want to compile it as a module, say 'M' here and read
- Documentation/modules.txt. If unsure, say 'N'.
-
-TFTP protocol support
-CONFIG_IP_NF_TFTP
- TFTP connection tracking helper, this is required depending
- on how restrictive your ruleset is.
- If you are using a tftp client behind -j SNAT or -j MASQUERADING
- you will need this.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `Y'.
-
-FTP protocol support
-CONFIG_IP_NF_FTP
- Tracking FTP connections is problematic: special helpers are
- required for tracking them, and doing masquerading and other forms
- of Network Address Translation on them.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `Y'.
-
-User space queueing via NETLINK
-CONFIG_IP_NF_QUEUE
- Netfilter has the ability to queue packets to user space: the
- netlink device can be used to access them using this driver.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-IP tables support (required for filtering/masq/NAT)
-CONFIG_IP_NF_IPTABLES
- iptables is a general, extensible packet identification framework.
- The packet filtering and full NAT (masquerading, port forwarding,
- etc) subsystems now use this: say `Y' or `M' here if you want to use
- either of those.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-recent match support
-CONFIG_IP_NF_MATCH_RECENT
- This match is used for creating one or many lists of recently
- used addresses and then matching against that/those list(s).
-
- Short options are available by using 'iptables -m recent -h'
- Official Website: <http://snowman.net/projects/ipt_recent/>
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-limit match support
-CONFIG_IP_NF_MATCH_LIMIT
- limit matching allows you to control the rate at which a rule can be
- matched: mainly useful in combination with the LOG target ("LOG
- target support", below) and to avoid some Denial of Service attacks.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-skb->pkt_type packet match support
-CONFIG_IP_NF_MATCH_PKTTYPE
- This patch allows you to match packet in accrodance
- to its "class", eg. BROADCAST, MULTICAST, ...
-
- Typical usage:
- iptables -A INPUT -m pkttype --pkt-type broadcast -j LOG
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-MAC address match support
-CONFIG_IP_NF_MATCH_MAC
- MAC matching allows you to match packets based on the source
- Ethernet address of the packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Netfilter MARK match support
-CONFIG_IP_NF_MATCH_MARK
- Netfilter mark matching allows you to match packets based on the
- `nfmark' value in the packet. This can be set by the MARK target
- (see below).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Multiple port match support
-CONFIG_IP_NF_MATCH_MULTIPORT
- Multiport matching allows you to match TCP or UDP packets based on
- a series of source or destination ports: normally a rule can only
- match a single range of ports.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-TTL match support
-CONFIG_IP_NF_MATCH_TTL
- This adds CONFIG_IP_NF_MATCH_TTL option, which enabled the user
- to match packets by their TTL value.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-LENGTH match support
-CONFIG_IP_NF_MATCH_LENGTH
- This option allows you to match the length of a packet against a
- specific value or range of values.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-AH/ESP match support
-CONFIG_IP_NF_MATCH_AH_ESP
- These two match extensions (`ah' and `esp') allow you to match a
- range of SPIs inside AH or ESP headers of IPSec packets.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-DSCP match support
-CONFIG_IP_NF_MATCH_DSCP
- This option adds a `DSCP' match, which allows you to match against
- the IPv4 header DSCP field (DSCP codepoint).
-
- The DSCP codepoint can have any value between 0x0 and 0x4f.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-
-ECN match support
-CONFIG_IP_NF_MATCH_ECN
- This option adds a `ECN' match, which allows you to match against
- the IPv4 and TCP header ECN fields.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-
-TOS match support
-CONFIG_IP_NF_MATCH_TOS
- TOS matching allows you to match packets based on the Type Of
- Service fields of the IP packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-conntrack match support
-CONFIG_IP_NF_MATCH_CONNTRACK
- This is a general conntrack match module, a superset of the state match.
-
- It allows matching on additional conntrack information, which is
- useful in complex configurations, such as NAT gateways with multiple
- internet links or tunnels.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-Connection state match support
-CONFIG_IP_NF_MATCH_STATE
- Connection state matching allows you to match packets based on their
- relationship to a tracked connection (ie. previous packets). This
- is a powerful tool for packet classification.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Unclean match support
-CONFIG_IP_NF_MATCH_UNCLEAN
- Unclean packet matching matches any strange or invalid packets, by
- looking at a series of fields in the IP, TCP, UDP and ICMP headers.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Owner match support
-CONFIG_IP_NF_MATCH_OWNER
- Packet owner matching allows you to match locally-generated packets
- based on who created them: the user, group, process or session.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Packet filtering
-CONFIG_IP_NF_FILTER
- Packet filtering defines a table `filter', which has a series of
- rules for simple packet filtering at local input, forwarding and
- local output. See the man page for iptables(8).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-REJECT target support
-CONFIG_IP_NF_TARGET_REJECT
- The REJECT target allows a filtering rule to specify that an ICMP
- error should be issued in response to an incoming packet, rather
- than silently being dropped.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-MIRROR target support
-CONFIG_IP_NF_TARGET_MIRROR
- The MIRROR target allows a filtering rule to specify that an
- incoming packet should be bounced back to the sender.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Local NAT support
-CONFIG_IP_NF_NAT_LOCAL
- This option enables support for NAT of locally originated connections.
- Enable this if you need to use destination NAT on connections
- originating from local processes on the nat box itself.
-
- Please note that you will need a recent version (>= 1.2.6a)
- of the iptables userspace program in order to use this feature.
- See <http://www.iptables.org/> for download instructions.
-
- If unsure, say 'N'.
-
-
-Full NAT (Network Address Translation)
-CONFIG_IP_NF_NAT
- The Full NAT option allows masquerading, port forwarding and other
- forms of full Network Address Port Translation. It is controlled by
- the `nat' table in iptables: see the man page for iptables(8).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-MASQUERADE target support
-CONFIG_IP_NF_TARGET_MASQUERADE
- Masquerading is a special case of NAT: all outgoing connections are
- changed to seem to come from a particular interface's address, and
- if the interface goes down, those connections are lost. This is
- only useful for dialup accounts with dynamic IP address (ie. your IP
- address will be different on next dialup).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Basic SNMP-ALG support
-CONFIG_IP_NF_NAT_SNMP_BASIC
-
- This module implements an Application Layer Gateway (ALG) for
- SNMP payloads. In conjunction with NAT, it allows a network
- management system to access multiple private networks with
- conflicting addresses. It works by modifying IP addresses
- inside SNMP payloads to match IP-layer NAT mapping.
-
- This is the "basic" form of SNMP-ALG, as described in RFC 2962
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-REDIRECT target support
-CONFIG_IP_NF_TARGET_REDIRECT
- REDIRECT is a special case of NAT: all incoming connections are
- mapped onto the incoming interface's address, causing the packets to
- come to the local machine instead of passing through. This is
- useful for transparent proxies.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Packet mangling
-CONFIG_IP_NF_MANGLE
- This option adds a `mangle' table to iptables: see the man page for
- iptables(8). This table is used for various packet alterations
- which can effect how the packet is routed.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-DSCP target support
-CONFIG_IP_NF_TARGET_DSCP
- This option adds a `DSCP' target, which allows you to create rules in
- the iptables mangle table. The selected packet has the DSCP field set
- to the hex value provided on the command line; unlike the TOS target
- which will only set the legal values within ip.h.
-
- The DSCP field can be set to any value between 0x0 and 0x4f. It does
- take into account that bits 6 and 7 are used by ECN.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-
-ECN target support
-CONFIG_IP_NF_TARGET_ECN
- This option adds a `ECN' target, which can be used in the iptables mangle
- table.
-
- You can use this target to remove the ECN bits from the IPv4 header of
- an IP packet. This is particularly useful, if you need to work around
- existing ECN blackholes on the internet, but don't want to disable
- ECN support in general.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-
-
-TOS target support
-CONFIG_IP_NF_TARGET_TOS
- This option adds a `TOS' target, which allows you to create rules in
- the `mangle' table which alter the Type Of Service field of an IP
- packet prior to routing.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-MARK target support
-CONFIG_IP_NF_TARGET_MARK
- This option adds a `MARK' target, which allows you to create rules
- in the `mangle' table which alter the netfilter mark (nfmark) field
- associated with the packet prior to routing. This can change
- the routing method (see `Use netfilter MARK value as routing
- key') and can also be used by other subsystems to change their
- behaviour.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-TCPMSS target support
-CONFIG_IP_NF_TARGET_TCPMSS
- This option adds a `TCPMSS' target, which allows you to alter the
- MSS value of TCP SYN packets, to control the maximum size for that
- connection (usually limiting it to your outgoing interface's MTU
- minus 40).
-
- This is used to overcome criminally braindead ISPs or servers which
- block ICMP Fragmentation Needed packets. The symptoms of this
- problem are that everything works fine from your Linux
- firewall/router, but machines behind it can never exchange large
- packets:
- 1) Web browsers connect, then hang with no data received.
- 2) Small mail works fine, but large emails hang.
- 3) ssh works fine, but scp hangs after initial handshaking.
-
- Workaround: activate this option and add a rule to your firewall
- configuration like:
-
- iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
- -j TCPMSS --clamp-mss-to-pmtu
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Helper match support
-CONFIG_IP_NF_MATCH_HELPER
- Helper matching allows you to match packets in dynamic connections
- tracked by a conntrack-helper, ie. ip_conntrack_ftp
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `Y'.
-
-TCPMSS match support
-CONFIG_IP_NF_MATCH_TCPMSS
- This option adds a `tcpmss' match, which allows you to examine the
- MSS value of TCP SYN packets, which control the maximum packet size
- for that connection.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ULOG target support
-CONFIG_IP_NF_TARGET_ULOG
- This option adds a `ULOG' target, which allows you to create rules in
- any iptables table. The packet is passed to a userspace logging
- daemon using netlink multicast sockets; unlike the LOG target
- which can only be viewed through syslog.
-
- The appropriate userspace logging daemon (ulogd) may be obtained from
- <http://www.gnumonks.org/projects/ulogd>
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-LOG target support
-CONFIG_IP_NF_TARGET_LOG
- This option adds a `LOG' target, which allows you to create rules in
- any iptables table which records the packet header to the syslog.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ipchains (2.2-style) support
-CONFIG_IP_NF_COMPAT_IPCHAINS
- This option places ipchains (with masquerading and redirection
- support) back into the kernel, using the new netfilter
- infrastructure. It is not recommended for new installations (see
- `Packet filtering'). With this enabled, you should be able to use
- the ipchains tool exactly as in 2.2 kernels.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ipfwadm (2.0-style) support
-CONFIG_IP_NF_COMPAT_IPFWADM
- This option places ipfwadm (with masquerading and redirection
- support) back into the kernel, using the new netfilter
- infrastructure. It is not recommended for new installations (see
- `Packet filtering'). With this enabled, you should be able to use
- the ipfwadm tool exactly as in 2.0 kernels.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-EUI64 address check (EXPERIMENTAL)
-CONFIG_IP6_NF_MATCH_EUI64
- This module performs checking on the IPv6 source address
- Compares the last 64 bits with the EUI64 (delivered
- from the MAC address) address
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-MAC address match support
-CONFIG_IP6_NF_MATCH_MAC
- mac matching allows you to match packets based on the source
- Ethernet address of the packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-length match support
-CONFIG_IP6_NF_MATCH_LENGTH
- This option allows you to match the length of a packet against a
- specific value or range of values.
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-Netfilter MARK match support
-CONFIG_IP6_NF_MATCH_MARK
- Netfilter mark matching allows you to match packets based on the
- `nfmark' value in the packet. This can be set by the MARK target
- (see below).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Multiple port match support
-CONFIG_IP6_NF_MATCH_MULTIPORT
- Multiport matching allows you to match TCP or UDP packets based on
- a series of source or destination ports: normally a rule can only
- match a single range of ports.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-IPV6 queue handler (EXPERIMENTAL)
-CONFIG_IP6_NF_QUEUE
-
- This option adds a queue handler to the kernel for IPv6
- packets which lets us to receive the filtered packets
- with QUEUE target using libiptc as we can do with
- the IPv4 now.
-
- (C) Fernando Anton 2001
- IPv64 Project - Work based in IPv64 draft by Arturo Azcorra.
- Universidad Carlos III de Madrid
- Universidad Politecnica de Alcala de Henares
- email: fanton@it.uc3m.es
-
- If you want to compile it as a module, say M here and read
- Documentation/modules.txt. If unsure, say `N'.
-
-Owner match support
-CONFIG_IP6_NF_MATCH_OWNER
- Packet owner matching allows you to match locally-generated packets
- based on who created them: the user, group, process or session.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Packet filtering
-CONFIG_IP6_NF_FILTER
- Packet filtering defines a table `filter', which has a series of
- rules for simple packet filtering at local input, forwarding and
- local output. See the man page for iptables(8).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-Packet mangling
-CONFIG_IP6_NF_MANGLE
- This option adds a `mangle' table to iptables: see the man page for
- iptables(8). This table is used for various packet alterations
- which can effect how the packet is routed.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-MARK target support
-CONFIG_IP6_NF_TARGET_MARK
- This option adds a `MARK' target, which allows you to create rules
- in the `mangle' table which alter the netfilter mark (nfmark) field
- associated with the packet packet prior to routing. This can change
- the routing method (see `Use netfilter MARK value as routing
- key') and can also be used by other subsystems to change their
- behaviour.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ARP tables support
-CONFIG_IP_NF_ARPTABLES
- arptables is a general, extensible packet identification framework.
- The ARP packet filtering and mangling (manipulation)subsystems
- use this: say Y or M here if you want to use either of those.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ARP packet filtering
-CONFIG_IP_NF_ARPFILTER
- ARP packet filtering defines a table `filter', which has a series of
- rules for simple ARP packet filtering at local input and
- local output. See the man page for arptables(8).
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-ARP payload mangling
-CONFIG_IP_NF_ARP_MANGLE
- Allows altering the ARP packet payload: source and destination
- hardware and network addresses.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-TCP Explicit Congestion Notification support
-CONFIG_INET_ECN
- Explicit Congestion Notification (ECN) allows routers to notify
- clients about network congestion, resulting in fewer dropped packets
- and increased network performance. This option adds ECN support to
- the Linux kernel, as well as a sysctl (/proc/sys/net/ipv4/tcp_ecn)
- which allows ECN support to be disabled at runtime.
-
- Note that, on the Internet, there are many broken firewalls which
- refuse connections from ECN-enabled machines, and it may be a while
- before these firewalls are fixed. Until then, to access a site
- behind such a firewall (some of which are major sites, at the time
- of this writing) you will have to disable this option, either by
- saying N now or by using the sysctl.
-
- If in doubt, say N.
-
-IPv6 tables support (required for filtering/masq/NAT)
-CONFIG_IP6_NF_IPTABLES
- ip6tables is a general, extensible packet identification framework.
- Currently only the packet filtering and packet mangling subsystem
- for IPv6 use this, but connection tracking is going to follow.
- Say 'Y' or 'M' here if you want to use either of those.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-IPv6 limit match support
-CONFIG_IP6_NF_MATCH_LIMIT
- limit matching allows you to control the rate at which a rule can be
- matched: mainly useful in combination with the LOG target ("LOG
- target support", below) and to avoid some Denial of Service attacks.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-LOG target support
-CONFIG_IP6_NF_TARGET_LOG
- This option adds a `LOG' target, which allows you to create rules in
- any iptables table which records the packet header to the syslog.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say `N'.
-
-IP: virtual server support
-CONFIG_IP_VS
- IP Virtual Server support will let you build a high-performance
- virtual server based on cluster of two or more real servers. This
- option must be enabled for at least one of the clustered computers
- that will take care of intercepting incomming connections to a
- single IP address and scheduling them to real servers.
-
- Three request dispatching techniques are implemented, they are
- virtual server via NAT, virtual server via tunneling and virtual
- server via direct routing. The several scheduling algorithms can
- be used to choose which server the connection is directed to,
- thus load balancing can be achieved among the servers. For more
- information and its administration program, please visit the
- following URL:
- http://www.linuxvirtualserver.org/
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IP virtual server debugging
-CONFIG_IP_VS_DEBUG
- Say Y here if you want to get additional messages useful in
- debugging the IP virtual server code. You can change the debug
- level in /proc/sys/net/ipv4/vs/debug_level
-
-IPVS connection hash table size (the Nth power of 2)
-CONFIG_IP_VS_TAB_BITS
- The IPVS connection hash table uses the chaining scheme to handle
- hash collisions. Using a big IPVS connection hash table will greatly
- reduce conflicts when there are hundreds of thousands of connections
- in the hash table.
-
- Note the table size must be power of 2. The table size will be the
- value of 2 to the your input number power. The number to choose is
- from 8 to 20, the default number is 12, which means the table size
- is 4096. Don't input the number too small, otherwise you will lose
- performance on it. You can adapt the table size yourself, according
- to your virtual server application. It is good to set the table size
- not far less than the number of connections per second multiplying
- average lasting time of connection in the table. For example, your
- virtual server gets 200 connections per second, the connection lasts
- for 200 seconds in average in the connection table, the table size
- should be not far less than 200x200, it is good to set the table
- size 32768 (2**15).
-
- Another note that each connection occupies 128 bytes effectively and
- each hash entry uses 8 bytes, so you can estimate how much memory is
- needed for your box.
-
-IPVS: round-robin scheduling
-CONFIG_IP_VS_RR
- The robin-robin scheduling algorithm simply directs network
- connections to different real servers in a round-robin manner.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: weighted round-robin scheduling
-CONFIG_IP_VS_WRR
- The weighted robin-robin scheduling algorithm directs network
- connections to different real servers based on server weights
- in a round-robin manner. Servers with higher weights receive
- new connections first than those with less weights, and servers
- with higher weights get more connections than those with less
- weights and servers with equal weights get equal connections.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: least-connection scheduling
-CONFIG_IP_VS_LC
- The least-connection scheduling algorithm directs network
- connections to the server with the least number of active
- connections.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: weighted least-connection scheduling
-CONFIG_IP_VS_WLC
- The weighted least-connection scheduling algorithm directs network
- connections to the server with the least active connections
- normalized by the server weight.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: locality-based least-connection scheduling
-CONFIG_IP_VS_LBLC
- The locality-based least-connection scheduling algorithm is for
- destination IP load balancing. It is usually used in cache cluster.
- This algorithm usually directs packet destined for an IP address to
- its server if the server is alive and under load. If the server is
- overloaded (its active connection numbers is larger than its weight)
- and there is a server in its half load, then allocate the weighted
- least-connection server to this IP address.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: locality-based least-connection with replication scheduling
-CONFIG_IP_VS_LBLCR
- The locality-based least-connection with replication scheduling
- algorithm is also for destination IP load balancing. It is
- usually used in cache cluster. It differs from the LBLC scheduling
- as follows: the load balancer maintains mappings from a target
- to a set of server nodes that can serve the target. Requests for
- a target are assigned to the least-connection node in the target's
- server set. If all the node in the server set are over loaded,
- it picks up a least-connection node in the cluster and adds it
- in the sever set for the target. If the server set has not been
- modified for the specified time, the most loaded node is removed
- from the server set, in order to avoid high degree of replication.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: destination hashing scheduling
-CONFIG_IP_VS_DH
- The destination hashing scheduling algorithm assigns network
- connections to the servers through looking up a statically assigned
- hash table by their destination IP addresses.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: source hashing scheduling
-CONFIG_IP_VS_SH
- The source hashing scheduling algorithm assigns network
- connections to the servers through looking up a statically assigned
- hash table by their source IP addresses.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: shortest expected delay scheduling
-CONFIG_IP_VS_SED
- The shortest expected delay scheduling algorithm assigns network
- connections to the server with the shortest expected delay. The
- expected delay that the job will experience is (Ci + 1) / Ui if
- sent to the ith server, in which Ci is the number of connections
- on the the ith server and Ui is the fixed service rate (weight)
- of the ith server.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: never queue scheduling
-CONFIG_IP_VS_NQ
- The never queue scheduling algorithm adopts a two-speed model.
- When there is an idle server available, the job will be sent to
- the idle server, instead of waiting for a fast one. When there
- is no idle server available, the job will be sent to the server
- that minimize its expected delay (The Shortest Expected Delay
- scheduling algorithm).
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-IPVS: FTP protocol helper
-CONFIG_IP_VS_FTP
- FTP is a protocol that transfers IP address and/or port number in
- the payload. In the virtual server via Network Address Translation,
- the IP address and port number of real servers cannot be sent to
- clients in ftp connections directly, so FTP protocol helper is
- required for tracking the connection and mangling it back to that of
- virtual service.
-
- If you want to compile it in kernel, say Y. If you want to compile
- it as a module, say M here and read Documentation/modules.txt. If
- unsure, say N.
-
-AH/ESP match support (EXPERIMENTAL)
-CONFIG_IP6_NF_MATCH_AHESP
- This module allows one to match AH and ESP packets.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The modules will be called
- ip6t_ah.o and ip6t_esp.o.
-
- If unsure, say 'N'.
-
-Routing header match support
-CONFIG_IP6_NF_MATCH_RT
- rt matching allows you to match packets based on the routing
- header of the packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ip6t_rt.o.
-
- If unsure, say 'N'.
-
-Hop-by-hop and Dst opts header match support
-CONFIG_IP6_NF_MATCH_OPTS
- This allows one to match packets based on the hop-by-hop
- and destination options headers of a packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The modules will be called
- ip6t_hbh.o and ip6t_dst.o.
-
- If unsure, say 'N'.
-
-Fragmentation header match support
-CONFIG_IP6_NF_MATCH_FRAG
- frag matching allows you to match packets based on the fragmentation
- header of the packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ip6t_frag.o.
-
- If unsure, say 'N'.
-
-HL match support
-CONFIG_IP6_NF_MATCH_HL
- HL matching allows you to match packets based on the hop
- limit of the packet.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ip6t_hl.o.
-
- If unsure, say 'N'.
-
-IPv6 Extension Headers Match (EXPERIMENTAL)
-CONFIG_IP6_NF_MATCH_IPV6HEADER
- This module allows one to match packets based upon
- the ipv6 extension headers.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ip6t_ipv6header.o.
-
- If unsure, say 'N'.
-
-SYN flood protection
-CONFIG_SYN_COOKIES
- Normal TCP/IP networking is open to an attack known as "SYN
- flooding". This denial-of-service attack prevents legitimate remote
- users from being able to connect to your computer during an ongoing
- attack and requires very little work from the attacker, who can
- operate from anywhere on the Internet.
-
- SYN cookies provide protection against this type of attack. If you
- say Y here, the TCP/IP stack will use a cryptographic challenge
- protocol known as "SYN cookies" to enable legitimate users to
- continue to connect, even when your machine is under attack. There
- is no need for the legitimate users to change their TCP/IP software;
- SYN cookies work transparently to them. For technical information
- about SYN cookies, check out <http://cr.yp.to/syncookies.html>.
-
- If you are SYN flooded, the source address reported by the kernel is
- likely to have been forged by the attacker; it is only reported as
- an aid in tracing the packets to their actual source and should not
- be taken as absolute truth.
-
- SYN cookies may prevent correct error reporting on clients when the
- server is really overloaded. If this happens frequently better turn
- them off.
-
- If you say Y here, note that SYN cookies aren't enabled by default;
- you can enable them by saying Y to "/proc file system support" and
- "Sysctl support" below and executing the command
-
- echo 1 >/proc/sys/net/ipv4/tcp_syncookies
-
- at boot time after the /proc file system has been mounted.
-
- If unsure, say N.
-
-# Choice: alphatype
-Alpha system type
-CONFIG_ALPHA_GENERIC
- This is the system type of your hardware. A "generic" kernel will
- run on any supported Alpha system. However, if you configure a
- kernel for your specific system, it will be faster and smaller.
-
- To find out what type of Alpha system you have, you may want to
- check out the Linux/Alpha FAQ, accessible on the WWW from
- <http://www.alphalinux.org/>. In summary:
-
- Alcor/Alpha-XLT AS 600
- Alpha-XL XL-233, XL-266
- AlphaBook1 Alpha laptop
- Avanti AS 200, AS 205, AS 250, AS 255, AS 300, AS 400
- Cabriolet AlphaPC64, AlphaPCI64
- DP264 DP264
- EB164 EB164 21164 evaluation board
- EB64+ EB64+ 21064 evaluation board
- EB66 EB66 21066 evaluation board
- EB66+ EB66+ 21066 evaluation board
- Jensen DECpc 150, DEC 2000 model 300,
- DEC 2000 model 500
- LX164 AlphaPC164-LX
- Miata Personal Workstation 433a, 433au, 500a,
- 500au, 600a, or 600au
- Mikasa AS 1000
- Noname AXPpci33, UDB (Multia)
- Noritake AS 1000A, AS 600A, AS 800
- PC164 AlphaPC164
- Rawhide AS 1200, AS 4000, AS 4100
- Ruffian RPX164-2, AlphaPC164-UX, AlphaPC164-BX
- SX164 AlphaPC164-SX
- Sable AS 2000, AS 2100
- Shark DS 20L
- Takara Takara
- Titan Privateer
- Wildfire AlphaServer GS 40/80/160/320
-
- If you don't know what to do, choose "generic".
-
-# Most of the information on these variants is from
-# <http://www.alphalinux.org/docs/alpha-howto.html>
-Alcor/Alpha-XLT
-CONFIG_ALPHA_ALCOR
- For systems using the Digital ALCOR chipset: 5 chips (4, 64-bit data
- slices (Data Switch, DSW) - 208-pin PQFP and 1 control (Control, I/O
- Address, CIA) - a 383 pin plastic PGA). It provides a DRAM
- controller (256-bit memory bus) and a PCI interface. It also does
- all the work required to support an external Bcache and to maintain
- memory coherence when a PCI device DMAs into (or out of) memory.
-
-Alpha-XL
-CONFIG_ALPHA_XL
- XL-233 and XL-266-based Alpha systems.
-
-AlphaBook1
-CONFIG_ALPHA_BOOK1
- Dec AlphaBook1/Burns Alpha-based laptops.
-
-Avanti
-CONFIG_ALPHA_AVANTI
- Avanti AS 200, AS 205, AS 250, AS 255, AS 300, and AS 400-based
- Alphas. Info at
- <http://www.unix-ag.org/Linux-Alpha/Architectures/Avanti.html>.
-
-Cabriolet
-CONFIG_ALPHA_CABRIOLET
- Cabriolet AlphaPC64, AlphaPCI64 systems. Derived from EB64+ but now
- baby-AT with Flash boot ROM, no on-board SCSI or Ethernet. 3 ISA
- slots, 4 PCI slots (one pair are on a shared slot), uses plug-in
- Bcache SIMMs. Requires power supply with 3.3V output.
-
-DP264
-CONFIG_ALPHA_DP264
- Various 21264 systems with the tsunami core logic chipset.
- API Networks: 264DP, UP2000(+), CS20;
- Compaq: DS10(E,L), XP900, XP1000, DS20(E), ES40.
-
-EB164
-CONFIG_ALPHA_EB164
- EB164 21164 evaluation board from DEC. Uses 21164 and ALCOR. Has
- ISA and PCI expansion (3 ISA slots, 2 64-bit PCI slots (one is
- shared with an ISA slot) and 2 32-bit PCI slots. Uses plus-in
- Bcache SIMMs. I/O sub-system provides SuperI/O (2S, 1P, FD), KBD,
- MOUSE (PS2 style), RTC/NVRAM. Boot ROM is Flash. PC-AT-sized
- motherboard. Requires power supply with 3.3V output.
-
-EB64+
-CONFIG_ALPHA_EB64P
- Uses 21064 or 21064A and APECs. Has ISA and PCI expansion (3 ISA,
- 2 PCI, one pair are on a shared slot). Supports 36-bit DRAM SIMs.
- ISA bus generated by Intel SaturnI/O PCI-ISA bridge. On-board SCSI
- (NCR 810 on PCI) Ethernet (Digital 21040), KBD, MOUSE (PS2 style),
- SuperI/O (2S, 1P, FD), RTC/NVRAM. Boot ROM is EPROM. PC-AT size.
- Runs from standard PC power supply.
-
-EB66
-CONFIG_ALPHA_EB66
- A Digital DS group board. Uses 21066 or 21066A. I/O sub-system is
- identical to EB64+. Baby PC-AT size. Runs from standard PC power
- supply. The EB66 schematic was published as a marketing poster
- advertising the 21066 as "the first microprocessor in the world with
- embedded PCI".
-
-EB66+
-CONFIG_ALPHA_EB66P
- Later variant of the EB66 board.
-
-Eiger
-CONFIG_ALPHA_EIGER
- Apparently an obscure OEM single-board computer based on the
- Typhoon/Tsunami chipset family. Information on it is scanty.
-
-Jensen
-CONFIG_ALPHA_JENSEN
- DEC PC 150 AXP (aka Jensen): This is a very old Digital system - one
- of the first-generation Alpha systems. A number of these systems
- seem to be available on the second- hand market. The Jensen is a
- floor-standing tower system which originally used a 150MHz 21064 It
- used programmable logic to interface a 486 EISA I/O bridge to the
- CPU.
-
-LX164
-CONFIG_ALPHA_LX164
- A technical overview of this board is available at
- <http://www.unix-ag.org/Linux-Alpha/Architectures/LX164.html>.
-
-Miata
-CONFIG_ALPHA_MIATA
- The Digital PersonalWorkStation (PWS 433a, 433au, 500a, 500au, 600a,
- or 600au). There is an Installation HOWTO for this hardware at
- <http://members.brabant.chello.nl/~s.vandereijk/miata.html>.
-
-Mikasa
-CONFIG_ALPHA_MIKASA
- AlphaServer 1000-based Alpha systems.
-
-Nautilus
-CONFIG_ALPHA_NAUTILUS
- Alpha systems based on the AMD 751 & ALI 1543C chipsets.
-
-Noname
-CONFIG_ALPHA_NONAME
- The AXPpci33 (aka NoName), is based on the EB66 (includes the Multia
- UDB). This design was produced by Digital's Technical OEM (TOEM)
- group. It uses the 21066 processor running at 166MHz or 233MHz. It
- is a baby-AT size, and runs from a standard PC power supply. It has
- 5 ISA slots and 3 PCI slots (one pair are a shared slot). There are
- 2 versions, with either PS/2 or large DIN connectors for the
- keyboard.
-
-Noritake
-CONFIG_ALPHA_NORITAKE
- AlphaServer 1000A, AlphaServer 600A, and AlphaServer 800-based
- systems.
-
-Rawhide
-CONFIG_ALPHA_RAWHIDE
- AlphaServer 1200, AlphaServer 4000 and AlphaServer 4100 machines.
- See HOWTO at
- <http://www.alphalinux.org/docs/rawhide/4100_install.shtml>.
-
-Ruffian
-CONFIG_ALPHA_RUFFIAN
- Samsung APC164UX. There is a page on known problems and workarounds
- at <http://www.alphalinux.org/faq/FAQ-11.html>.
-
-Sable
-CONFIG_ALPHA_SABLE
- Digital AlphaServer 2000 and 2100-based systems.
-
-Takara
-CONFIG_ALPHA_TAKARA
- Alpha 11164-based OEM single-board computer.
-
-Wildfire
-CONFIG_ALPHA_WILDFIRE
- AlphaServer GS 40/80/160/320 SMP based on the EV67 core.
-
-EV5 CPU daughtercard (model 5/xxx)
-CONFIG_ALPHA_PRIMO
- Say Y if you have an AS 1000 5/xxx or an AS 1000A 5/xxx.
-
-EV5 CPU(s) (model 5/xxx)
-CONFIG_ALPHA_GAMMA
- Say Y if you have an AS 2000 5/xxx or an AS 2100 5/xxx.
-
-EV67 (or later) CPU (speed > 600MHz)?
-CONFIG_ALPHA_EV67
- Is this a machine based on the EV67 core? If in doubt, select N here
- and the machine will be treated as an EV6.
-
-Use SRM as bootloader
-CONFIG_ALPHA_SRM
- There are two different types of booting firmware on Alphas: SRM,
- which is command line driven, and ARC, which uses menus and arrow
- keys. Details about the Linux/Alpha booting process are contained in
- the Linux/Alpha FAQ, accessible on the WWW from
- <http://www.alphalinux.org/>.
-
- The usual way to load Linux on an Alpha machine is to use MILO
- (a bootloader that lets you pass command line parameters to the
- kernel just like lilo does for the x86 architecture) which can be
- loaded either from ARC or can be installed directly as a permanent
- firmware replacement from floppy (which requires changing a certain
- jumper on the motherboard). If you want to do either of these, say N
- here. If MILO doesn't work on your system (true for Jensen
- motherboards), you can bypass it altogether and boot Linux directly
- from an SRM console; say Y here in order to do that. Note that you
- won't be able to boot from an IDE disk using old versions of SRM.
-
- If unsure, say N.
-
-Legacy kernel start address
-CONFIG_ALPHA_LEGACY_START_ADDRESS
- The 2.4 kernel changed the kernel start address from 0x310000
- to 0x810000 to make room for the Wildfire's larger SRM console.
-
- If you're using aboot 0.7 or later, the bootloader will examine the
- ELF headers to determine where to transfer control. Unfortunately,
- most older bootloaders -- APB or MILO -- hardcoded the kernel start
- address rather than examining the ELF headers, and the result is a
- hard lockup.
-
- Say Y if you have a broken bootloader. Say N if you do not, or if
- you wish to run on Wildfire.
-
-Large VMALLOC support
-CONFIG_ALPHA_LARGE_VMALLOC
- Process creation and other aspects of virtual memory management can
- be streamlined if we restrict the kernel to one PGD for all vmalloc
- allocations. This equates to about 8GB.
-
- Under normal circumstances, this is so far and above what is needed
- as to be laughable. However, there are certain applications (such
- as benchmark-grade in-kernel web serving) that can make use of as
- much vmalloc space as is available.
-
- Say N unless you know you need gobs and gobs of vmalloc space.
-
-Non-standard serial port support
-CONFIG_SERIAL_NONSTANDARD
- Say Y here if you have any non-standard serial boards -- boards
- which aren't supported using the standard "dumb" serial driver.
- This includes intelligent serial boards such as Cyclades,
- Digiboards, etc. These are usually used for systems that need many
- serial ports because they serve many terminals or dial-in
- connections.
-
- 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 non-standard serial boards.
-
- Most people can say N here.
-
-Extended dumb serial driver options
-CONFIG_SERIAL_EXTENDED
- If you wish to use any non-standard features of the standard "dumb"
- driver, say Y here. This includes HUB6 support, shared serial
- interrupts, special multiport support, support for more than the
- four COM 1/2/3/4 boards, etc.
-
- 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 serial driver options. If unsure, say N.
-
-Support more than 4 serial ports
-CONFIG_SERIAL_MANY_PORTS
- Say Y here if you have dumb serial boards other than the four
- standard COM 1/2/3/4 ports. This may happen if you have an AST
- FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available
- from <http://www.tldp.org/docs.html#howto>), or other custom
- serial port hardware which acts similar to standard serial port
- hardware. If you only use the standard COM 1/2/3/4 ports, you can
- say N here to save some memory. You can also say Y if you have an
- "intelligent" multiport card such as Cyclades, Digiboards, etc.
-
-Support for sharing serial interrupts
-CONFIG_SERIAL_SHARE_IRQ
- Some serial boards have hardware support which allows multiple dumb
- serial ports on the same board to share a single IRQ. To enable
- support for this in the serial driver, say Y here.
-
-Auto-detect IRQ on standard ports (unsafe)
-CONFIG_SERIAL_DETECT_IRQ
- Say Y here if you want the kernel to try to guess which IRQ
- to use for your serial port.
-
- This is considered unsafe; it is far better to configure the IRQ in
- a boot script using the setserial command.
-
- If unsure, say N.
-
-Support special multiport boards
-CONFIG_SERIAL_MULTIPORT
- Some multiport serial ports have special ports which are used to
- signal when there are any serial ports on the board which need
- servicing. Say Y here to enable the serial driver to take advantage
- of those special I/O ports.
-
-SGI IP22 Zilog85C30 serial support
-CONFIG_IP22_SERIAL
- If you want to use your IP22's built-in serial ports under Linux,
- answer Y.
-
-SGI Newport Console support
-CONFIG_SGI_NEWPORT_CONSOLE
- Say Y here if you want the console on the Newport aka XL graphics
- card of your Indy. Most people say Y here.
-
-SGI DS1286 RTC support
-CONFIG_SGI_DS1286
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
- will get access to the real time clock built into your computer.
- Every SGI has such a clock built in. It reports status information
- via the file /proc/rtc and its behaviour is set by various ioctls on
- /dev/rtc.
-
-Dallas DS1742 RTC Support
-CONFIG_DS1742
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
- will get access to the real time clock present on various Toshiba
- MIPS-based boards. It reports status information via the file
- /proc/driver/rtc and its behaviour is set by various ioctls on
- /dev/rtc or /dev/misc/rtc if using devfs.
-
- For technical information and application notes, please see the
- Dallas Semiconductor website:
- <http://www.dalsemi.com/quick_view2.cfm?qv_pk=2768>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called ds1742.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
-Indy/I2 Hardware Watchdog
-CONFIG_INDYDOG
- Hardwaredriver for the Indy's/I2's watchdog. This is a
- watchdog timer that will reboot the machine after a 60 second
- timer expired and no process has written to /dev/watchdog during
- that time.
-
-Support the Bell Technologies HUB6 card
-CONFIG_HUB6
- Say Y here to enable support in the dumb serial driver to support
- the HUB6 card.
-
-PCMCIA serial device support
-CONFIG_PCMCIA_SERIAL_CS
- Say Y here to enable support for 16-bit PCMCIA serial devices,
- including serial port cards, modems, and the modem functions of
- multi-function Ethernet/modem cards. (PCMCIA- or PC-cards are
- credit-card size devices often used with laptops.)
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called serial_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-CONFIG_SYNCLINK_CS
- Enable support for the SyncLink PC Card serial adapter, running
- asynchronous and HDLC communications up to 512Kbps. The port is
- selectable for RS-232, V.35, RS-449, RS-530, and X.21
-
- This driver may be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called synclinkmp.o. If you want to do that, say M
- here.
-
-ACP Modem (Mwave) support
-CONFIG_MWAVE
- The ACP modem (Mwave) for Linux is a WinModem. It is composed of a
- kernel driver and a user level application. Together these components
- support direct attachment to public switched telephone networks (PSTNs)
- and support selected world wide countries.
-
- This version of the ACP Modem driver supports the IBM Thinkpad 600E,
- 600, and 770 that include on board ACP modem hardware.
-
- The modem also supports the standard communications port interface
- (ttySx) and is compatible with the Hayes AT Command Set.
-
- The user level application needed to use this driver can be found at
- the IBM Linux Technology Center (LTC) web site:
- <http://www.ibm.com/linux/ltc/>.
-
- If you own one of the above IBM Thinkpads which has the Mwave chipset
- in it, say Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mwave.o. If you want to compile it as
- a module, say M here and read Documentation/modules.txt.
-
-/dev/agpgart (AGP Support)
-CONFIG_AGP
- AGP (Accelerated Graphics Port) is a bus system mainly used to
- connect graphics cards to the rest of the system.
-
- If you have an AGP system and you say Y here, it will be possible to
- use the AGP features of your 3D rendering video card. This code acts
- as a sort of "AGP driver" for the motherboard's chipset.
-
- If you need more texture memory than you can get with the AGP GART
- (theoretically up to 256 MB, but in practice usually 64 or 128 MB
- due to kernel allocation issues), you could use PCI accesses
- and have up to a couple gigs of texture space.
-
- Note that this is the only means to have XFree4/GLX use
- write-combining with MTRR support on the AGP bus. Without it, OpenGL
- direct rendering will be a lot slower but still faster than PIO.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
- This driver is available as a module. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. The
- module will be called agpgart.o.
-
-Intel 440LX/BX/GX/815/820/830/840/845/850/860 support
-CONFIG_AGP_INTEL
- This option gives you AGP support for the GLX component of the
- XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850 and 860 chipsets.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-Intel 460GX support
-CONFIG_AGP_I460
- This option gives you AGP support for the Intel 460GX chipset. This
- chipset, the first to support Intel Itanium processors, is new and
- this option is correspondingly a little experimental.
-
- If you don't have a 460GX based machine (such as BigSur) with an AGP
- slot then this option isn't going to do you much good. If you're
- dying to do Direct Rendering on IA-64, this is what you're looking for.
-
-Intel I810/I815 DC100/I810e support
-CONFIG_AGP_I810
- This option gives you AGP support for the Xserver on the Intel 810
- 815 and 830m chipset boards for their on-board integrated graphics. This
- is required to do any useful video modes with these boards.
-
-VIA chipset support
-CONFIG_AGP_VIA
- This option gives you AGP support for the GLX component of the
- XFree86 4.x on VIA MPV3/Apollo Pro chipsets.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-AMD Irongate, 761, and 762 support
-CONFIG_AGP_AMD
- This option gives you AGP support for the GLX component of the
- XFree86 4.x on AMD Irongate, 761, and 762 chipsets.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-CONFIG_AGP_AMD_K8
- This option gives you AGP support for the GLX component of
- XFree86 on an AMD Opteron/Athlon64 using the on-CPU GART.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-Generic SiS support
-CONFIG_AGP_SIS
- This option gives you AGP support for the GLX component of
- XFree86 4.x on Silicon Integrated Systems [SiS] chipsets.
-
- Note that 5591/5592 AGP chipsets are NOT specifically supported;
- However, the driver works well on these, too.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-Serverworks LE/HE support
-CONFIG_AGP_SWORKS
- Say Y here to support the Serverworks AGP card. See
- <http://www.serverworks.com/> for product descriptions and images.
-
-NVIDIA chipset support
-CONFIG_AGP_NVIDIA
- This option gives you AGP support for the GLX component of the
- XFree86 4.x on NVIDIA nForce/nForce2 chipsets.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-ALI chipset support
-CONFIG_AGP_ALI
- This option gives you AGP support for the GLX component of the
- XFree86 4.x on the following ALi chipsets. The supported chipsets
- include M1541, M1621, M1631, M1632, M1641,M1647,and M1651.
- For the ALi-chipset question, ALi suggests you refer to
- <http://www.ali.com.tw/eng/support/index.shtml>.
-
- The M1541 chipset can do AGP 1x and 2x, but note that there is an
- acknowledged incompatibility with Matrox G200 cards. Due to
- timing issues, this chipset cannot do AGP 2x with the G200.
- This is a hardware limitation. AGP 1x seems to be fine, though.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-CONFIG_AGP_HP_ZX1
- This option gives you AGP GART support for the HP ZX1 chipset
- for IA64 processors.
-
-CONFIG_AGP_ATI
- This option gives you AGP support for the GLX component of
- XFree86 4.x on the ATI RadeonIGP family of chipsets.
-
- You should say Y here if you use XFree86 3.3.6 or 4.x and want to
- use GLX or DRI. If unsure, say N.
-
-Support for ISA-bus hardware
-CONFIG_ISA
- Find out whether you have ISA slots on your motherboard. ISA is the
- name of a bus system, i.e. the way the CPU talks to the other stuff
- inside your box. Other bus systems are PCI, EISA, MicroChannel
- (MCA) or VESA. ISA is an older system, now being displaced by PCI;
- newer boards don't support it. If you have ISA, say Y, otherwise N.
-
-Support for PCI bus hardware
-CONFIG_PCI
- Find out whether you have a PCI motherboard. PCI is the name of a
- bus system, i.e. the way the CPU talks to the other stuff inside
- your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
- VESA. If you have PCI, say Y, otherwise N.
-
- The PCI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, contains valuable
- information about which PCI hardware does work under Linux and which
- doesn't.
-
-PCI support
-CONFIG_PCI_INTEGRATOR
- Find out whether you have a PCI motherboard. PCI is the name of a
- bus system, i.e. the way the CPU talks to the other stuff inside
- your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
- VESA. If you have PCI, say Y, otherwise N.
-
- The PCI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, contains valuable
- information about which PCI hardware does work under Linux and which
- doesn't.
-
-QSpan PCI
-CONFIG_PCI_QSPAN
- Find out whether you have a PCI motherboard. PCI is the name of a
- bus system, i.e. the way the CPU talks to the other stuff inside
- your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
- VESA. If you have PCI, say Y, otherwise N.
-
- The PCI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, contains valuable
- information about which PCI hardware does work under Linux and which
- doesn't.
-
-# Choice: pci_access
-PCI access mode
-CONFIG_PCI_GOBIOS
- On PCI systems, the BIOS can be used to detect the PCI devices and
- determine their configuration. However, some old PCI motherboards
- have BIOS bugs and may crash if this is done. Also, some embedded
- PCI-based systems don't have any BIOS at all. Linux can also try to
- detect the PCI hardware directly without using the BIOS.
-
- With this option, you can specify how Linux should detect the PCI
- devices. If you choose "BIOS", the BIOS will be used, if you choose
- "Direct", the BIOS won't be used, and if you choose "Any", the
- kernel will try the direct access method and falls back to the BIOS
- if that doesn't work. If unsure, go with the default, which is
- "Any".
-
-PCI device name database
-CONFIG_PCI_NAMES
- By default, the kernel contains a database of all known PCI device
- names to make the information in /proc/pci, /proc/ioports and
- similar files comprehensible to the user. This database increases
- size of the kernel image by about 80KB, but it gets freed after the
- system boots up, so it doesn't take up kernel memory. Anyway, if you
- are building an installation floppy or kernel for an embedded system
- where kernel image size really matters, you can disable this feature
- and you'll get device ID numbers instead of names.
-
- When in doubt, say Y.
-
-Generic PCI hotplug support
-CONFIG_HOTPLUG_PCI
- Say Y here if you have a motherboard with a PCI Hotplug controller.
- This allows you to add and remove PCI cards while the machine is
- powered up and running. The file system pcihpfs must be mounted
- in order to interact with any PCI Hotplug controllers.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pci_hotplug.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- When in doubt, say N.
-
-Compaq PCI Hotplug driver
-CONFIG_HOTPLUG_PCI_COMPAQ
- Say Y here if you have a motherboard with a Compaq PCI Hotplug
- controller.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cpqphp.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- When in doubt, say N.
-
-PCI Compaq Hotplug controller NVRAM support
-CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM
- Say Y here if you have a Compaq server that has a PCI Hotplug
- controller. This will allow the PCI Hotplug driver to store the PCI
- system configuration options in NVRAM.
-
- When in doubt, say N.
-
-ACPI PCI Hotplug driver
-CONFIG_HOTPLUG_PCI_ACPI
- Say Y here if you have a system that supports PCI Hotplug using
- ACPI.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called acpiphp.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-MCA support
-CONFIG_MCA
- MicroChannel Architecture is found in some IBM PS/2 machines and
- laptops. It is a bus system similar to PCI or ISA. See
- <file:Documentation/mca.txt> (and especially the web page given
- there) before attempting to build an MCA bus kernel.
-
-Support for EISA-bus hardware
-CONFIG_EISA
- The Extended Industry Standard Architecture (EISA) bus was
- developed as an open alternative to the IBM MicroChannel bus.
-
- The EISA bus provided some of the features of the IBM MicroChannel
- bus while maintaining backward compatibility with cards made for
- the older ISA bus. The EISA bus saw limited use between 1988 and
- 1995 when it was made obsolete by the PCI bus.
-
- Say Y here if you are building a kernel for an EISA-based machine.
-
- Otherwise, say N.
-
-SGI Visual Workstation support
-CONFIG_VISWS
- The SGI Visual Workstation series is an IA32-based workstation
- based on SGI systems chips with some legacy PC hardware attached.
- Say Y here to create a kernel to run on the SGI 320 or 540.
- A kernel compiled for the Visual Workstation will not run on other
- PC boards and vice versa.
- See <file:Documentation/sgi-visws.txt> for more.
-
-SGI Visual Workstation framebuffer support
-CONFIG_FB_SGIVW
- SGI Visual Workstation support for framebuffer graphics.
-
-I2O support
-CONFIG_I2O
- The Intelligent Input/Output (I2O) architecture allows hardware
- drivers to be split into two parts: an operating system specific
- module called the OSM and an hardware specific module called the
- HDM. The OSM can talk to a whole range of HDM's, and ideally the
- HDM's are not OS dependent. This allows for the same HDM driver to
- be used under different operating systems if the relevant OSM is in
- place. In order for this to work, you need to have an I2O interface
- adapter card in your computer. This card contains a special I/O
- processor (IOP), thus allowing high speeds since the CPU does not
- have to deal with I/O.
-
- If you say Y here, you will get a choice of interface adapter
- drivers and OSM's with the following questions.
-
- This support is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. You will get modules called
- i2o_core.o and i2o_config.o.
-
- If unsure, say N.
-
-I2O PCI support
-CONFIG_I2O_PCI
- Say Y for support of PCI bus I2O interface adapters. Currently this
- is the only variety supported, so you should say Y.
-
- This support is also available as a module called i2o_pci.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-I2O Block OSM
-CONFIG_I2O_BLOCK
- Include support for the I2O Block OSM. The Block OSM presents disk
- and other structured block devices to the operating system.
-
- This support is also available as a module called i2o_block.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-I2O LAN OSM
-CONFIG_I2O_LAN
- Include support for the LAN OSM. You will also need to include
- support for token ring or FDDI if you wish to use token ring or FDDI
- I2O cards with this driver.
-
- This support is also available as a module called i2o_lan.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-I2O SCSI OSM
-CONFIG_I2O_SCSI
- Allows direct SCSI access to SCSI devices on a SCSI or FibreChannel
- I2O controller. You can use both the SCSI and Block OSM together if
- you wish.
-
- This support is also available as a module called i2o_scsi.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-I2O /proc support
-CONFIG_I2O_PROC
- If you say Y here and to "/proc file system support", you will be
- able to read I2O related information from the virtual directory
- /proc/i2o.
-
- This support is also available as a module called i2o_proc.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Plug and Play support
-CONFIG_PNP
- Plug and Play (PnP) is a standard for peripherals which allows those
- peripherals to be configured by software, e.g. assign IRQ's or other
- parameters. No jumpers on the cards are needed, instead the values
- are provided to the cards from the BIOS, from the operating system,
- or using a user-space utility.
-
- Say Y here if you would like Linux to configure your Plug and Play
- devices. You should then also say Y to "ISA Plug and Play support",
- below. Alternatively, you can say N here and configure your PnP
- devices using the user space utilities contained in the isapnptools
- package.
-
- This support is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-ISA Plug and Play support
-CONFIG_ISAPNP
- Say Y here if you would like support for ISA Plug and Play devices.
- Some information is in <file:Documentation/isapnp.txt>.
-
- This support is also available as a module called isapnp.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
- If unsure, say Y.
-
-PNPBIOS support
-CONFIG_PNPBIOS
- Linux uses the PNPBIOS as defined in "Plug and Play BIOS
- Specification Version 1.0A May 5, 1994" to autodetect built-in
- mainboard resources (e.g. parallel port resources).
-
- Other features (e.g. change resources, ESCD, event notification,
- Docking station information, ISAPNP services) are not used.
-
- Note: ACPI is expected to supersede PNPBIOS some day, currently it
- co-exists nicely.
-
- See latest pcmcia-cs (stand-alone package) for a nice "lspnp" tools,
- or have a look at /proc/bus/pnp.
-
- If unsure, say Y.
-
-Support for hot-pluggable devices
-CONFIG_HOTPLUG
- Say Y here if you want to plug devices into your computer while
- the system is running, and be able to use them quickly. In many
- cases, the devices can likewise be unplugged at any time too.
-
- One well known example of this is PCMCIA- or PC-cards, credit-card
- size devices such as network cards, modems or hard drives which are
- plugged into slots found on all modern laptop computers. Another
- example, used on modern desktops as well as laptops, is USB.
-
- Enable HOTPLUG and KMOD, and build a modular kernel. Get agent
- software (at <http://linux-hotplug.sourceforge.net/>) and install it.
- Then your kernel will automatically call out to a user mode "policy
- agent" (/sbin/hotplug) to load modules and set up software needed
- to use devices as you hotplug them.
-
-PCMCIA/CardBus support
-CONFIG_PCMCIA
- Say Y here if you want to attach PCMCIA- or PC-cards to your Linux
- computer. These are credit-card size devices such as network cards,
- modems or hard drives often used with laptops computers. There are
- actually two varieties of these cards: the older 16 bit PCMCIA cards
- and the newer 32 bit CardBus cards. If you want to use CardBus
- cards, you need to say Y here and also to "CardBus support" below.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). Please also read the PCMCIA-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- When compiled this way, there will be modules called pcmcia_core.o
- and ds.o. If you want to compile it as a module, say M here and
- read <file:Documentation/modules.txt>.
-
-CardBus card and (Yenta) bridge support
-CONFIG_CARDBUS
- CardBus is a bus mastering architecture for PC-cards, which allows
- for 32 bit PC-cards (the original PCMCIA standard specifies only
- a 16 bit wide bus). Many newer PC-cards are actually CardBus cards.
-
- This option enables support for CardBus PC Cards, as well as support
- for CardBus host bridges. Virtually all modern PCMCIA bridges are
- CardBus compatible. A "bridge" is the hardware inside your computer
- that PCMCIA cards are plugged into.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location).
-
- If unsure, say Y.
-
-i82092 compatible bridge support
-CONFIG_I82092
- This provides support for the Intel I82092AA PCI-to-PCMCIA bridge device,
- found in some older laptops and more commonly in evaluation boards for the
- chip.
-
-i82365 compatible host bridge support
-CONFIG_I82365
- Say Y here to include support for ISA-bus PCMCIA host bridges that
- are register compatible with the Intel i82365. These are found on
- older laptops and ISA-bus card readers for desktop systems. A
- "bridge" is the hardware inside your computer that PCMCIA cards are
- plugged into. If unsure, say N.
-
-Databook TCIC host bridge support
-CONFIG_TCIC
- Say Y here to include support for the Databook TCIC family of PCMCIA
- host bridges. These are only found on a handful of old systems.
- "Bridge" is the name used for the hardware inside your computer that
- PCMCIA cards are plugged into. If unsure, say N.
-
-CONFIG_PCMCIA_SIBYTE
- Say Y here to include support for the SiByte SOC's built-in PCMCIA
- interface. Only ATA cards and CompactFlash are currently
- supported.
-
-System V IPC
-CONFIG_SYSVIPC
- Inter Process Communication is a suite of library functions and
- system calls which let processes (running programs) synchronize and
- exchange information. It is generally considered to be a good thing,
- and some programs won't run unless you say Y here. In particular, if
- you want to run the DOS emulator dosemu under Linux (read the
- DOSEMU-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>), you'll need to say Y
- here.
-
- You can find documentation about IPC with "info ipc" and also in
- section 6.4 of the Linux Programmer's Guide, available from
- <http://www.tldp.org/docs.html#guide>.
-
-BSD Process Accounting
-CONFIG_BSD_PROCESS_ACCT
- If you say Y here, a user level program will be able to instruct the
- kernel (via a special system call) to write process accounting
- information to a file: whenever a process exits, information about
- that process will be appended to the file by the kernel. The
- information includes things such as creation time, owning user,
- command name, memory usage, controlling terminal etc. (the complete
- list is in the struct acct in <file:include/linux/acct.h>). It is
- up to the user level program to do useful things with this
- information. This is generally a good idea, so say Y.
-
-Sysctl support
-CONFIG_SYSCTL
- The sysctl interface provides a means of dynamically changing
- certain kernel parameters and variables on the fly without requiring
- a recompile of the kernel or reboot of the system. The primary
- interface consists of a system call, but if you say Y to "/proc
- file system support", a tree of modifiable sysctl entries will be
- generated beneath the /proc/sys directory. They are explained in the
- files in <file:Documentation/sysctl/>. Note that enabling this
- option will enlarge the kernel by at least 8 KB.
-
- As it is generally a good thing, you should say Y here unless
- building a kernel for install/rescue disks or your system is very
- limited in memory.
-
-# Choice: kcore
-Kernel core (/proc/kcore) format
-CONFIG_KCORE_ELF
- If you enabled support for /proc file system then the file
- /proc/kcore will contain the kernel core image. This can be used
- in gdb:
-
- $ cd /usr/src/linux ; gdb vmlinux /proc/kcore
-
- You have two choices here: ELF and A.OUT. Selecting ELF will make
- /proc/kcore appear in ELF core format as defined by the Executable
- and Linking Format specification. Selecting A.OUT will choose the
- old "a.out" format which may be necessary for some old versions
- of binutils or on some architectures.
-
- This is especially useful if you have compiled the kernel with the
- "-g" option to preserve debugging information. It is mainly used
- for examining kernel data structures on the live kernel so if you
- don't understand what this means or are not a kernel hacker, just
- leave it at its default value ELF.
-
-Select a.out format for /proc/kcore
-CONFIG_KCORE_AOUT
- Not necessary unless you're using a very out-of-date binutils
- version. You probably want KCORE_ELF.
-
-Kernel support for ELF binaries
-CONFIG_BINFMT_ELF
- ELF (Executable and Linkable Format) is a format for libraries and
- executables used across different architectures and operating
- systems. Saying Y here will enable your kernel to run ELF binaries
- and enlarge it by about 13 KB. ELF support under Linux has now all
- but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC)
- because it is portable (this does *not* mean that you will be able
- to run executables from different architectures or operating systems
- however) and makes building run-time libraries very easy. Many new
- executables are distributed solely in ELF format. You definitely
- want to say Y here.
-
- Information about ELF is contained in the ELF HOWTO available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you find that after upgrading from Linux kernel 1.2 and saying Y
- here, you still can't run any ELF binaries (they just crash), then
- you'll have to install the newest ELF runtime libraries, including
- ld.so (check the file <file:Documentation/Changes> for location and
- latest version).
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called binfmt_elf.o. Saying M or N here is dangerous because
- some crucial programs on your system might be in ELF format.
-
-Kernel support for a.out binaries
-CONFIG_BINFMT_AOUT
- A.out (Assembler.OUTput) is a set of formats for libraries and
- executables used in the earliest versions of UNIX. Linux used the
- a.out formats QMAGIC and ZMAGIC until they were replaced with the
- ELF format.
-
- As more and more programs are converted to ELF, the use for a.out
- will gradually diminish. If you disable this option it will reduce
- your kernel by one page. This is not much and by itself does not
- warrant removing support. However its removal is a good idea if you
- wish to ensure that absolutely none of your programs will use this
- older executable format. If you don't know what to answer at this
- point then answer Y. If someone told you "You need a kernel with
- QMAGIC support" then you'll have to say Y here. You may answer M to
- compile a.out support as a module and later load the module when you
- want to use a program or library in a.out format. The module will be
- called binfmt_aout.o. Saying M or N here is dangerous though,
- because some crucial programs on your system might still be in A.OUT
- format.
-
-OSF/1 v4 readv/writev compatibility
-CONFIG_OSF4_COMPAT
- Say Y if you are using OSF/1 binaries (like Netscape and Acrobat)
- with v4 shared libraries freely available from Compaq. If you're
- going to use shared libraries from Tru64 version 5.0 or later, say N.
-
-Kernel support for Linux/Intel ELF binaries
-CONFIG_BINFMT_EM86
- Say Y here if you want to be able to execute Linux/Intel ELF
- binaries just like native Alpha binaries on your Alpha machine. For
- this to work, you need to have the emulator /usr/bin/em86 in place.
-
- You can get the same functionality by saying N here and saying Y to
- "Kernel support for MISC binaries".
-
- You may answer M to compile the emulation support as a module and
- later load the module when you want to use a Linux/Intel binary. The
- module will be called binfmt_em86.o. If unsure, say Y.
-
-Kernel support for SOM binaries
-CONFIG_BINFMT_SOM
- SOM is a binary executable format inherited from HP/UX. Say Y here
- to be able to load and execute SOM binaries directly.
-
-Kernel support for MISC binaries
-CONFIG_BINFMT_MISC
- If you say Y here, it will be possible to plug wrapper-driven binary
- formats into the kernel. You will like this especially when you use
- programs that need an interpreter to run like Java, Python or
- Emacs-Lisp. It's also useful if you often run DOS executables under
- the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>). Once you have
- registered such a binary class with the kernel, you can start one of
- those programs simply by typing in its name at a shell prompt; Linux
- will automatically feed it to the correct interpreter.
-
- You can do other nice things, too. Read the file
- <file:Documentation/binfmt_misc.txt> to learn how to use this
- feature, and <file:Documentation/java.txt> for information about how
- to include Java support.
-
- You must say Y to "/proc file system support" (CONFIG_PROC_FS) to
- use this part of the kernel.
-
- You may say M here for module support and later load the module when
- you have use for it; the module is called binfmt_misc.o. If you
- don't know what to answer at this point, say Y.
-
-Kernel support for JAVA binaries
-CONFIG_BINFMT_JAVA
- If you say Y here, the kernel will load and execute Java J-code
- binaries directly. Note: this option is obsolete and scheduled for
- removal, use CONFIG_BINFMT_MISC instead.
-
-Solaris binary emulation
-CONFIG_SOLARIS_EMUL
- This is experimental code which will enable you to run (many)
- Solaris binaries on your SPARC Linux machine.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called solaris.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-SUN SME environment monitoring
-CONFIG_ENVCTRL
- Kernel support for temperature and fan monitoring on Sun SME
- machines.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called envctrl.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-# Choice: x86type
-Processor family
-CONFIG_M386
- This is the processor type of your CPU. This information is used for
- optimizing purposes. In order to compile a kernel that can run on
- all x86 CPU types (albeit not optimally fast), you can specify
- "386" here.
-
- The kernel will not necessarily run on earlier architectures than
- the one you have chosen, e.g. a Pentium optimized kernel will run on
- a PPro, but not necessarily on a i486.
-
- Here are the settings recommended for greatest speed:
- - "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
- 486DLC/DLC2, UMC 486SX-S and NexGen Nx586. Only "386" kernels
- will run on a 386 class machine.
- - "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
- SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
- - "586" for generic Pentium CPUs, possibly lacking the TSC
- (time stamp counter) register.
- - "Pentium-Classic" for the Intel Pentium.
- - "Pentium-MMX" for the Intel Pentium MMX.
- - "Pentium-Pro" for the Intel Pentium Pro/Celeron/Pentium II.
- - "Pentium-III" for the Intel Pentium III
- and Celerons based on the Coppermine core.
- - "Pentium-4" for the Intel Pentium 4.
- - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
- - "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
- - "Elan" for the AMD Elan family (Elan SC400/SC410).
- - "Crusoe" for the Transmeta Crusoe series.
- - "Winchip-C6" for original IDT Winchip.
- - "Winchip-2" for IDT Winchip 2.
- - "Winchip-2A" for IDT Winchips with 3dNow! capabilities.
- - "CyrixIII" for VIA Cyrix III or VIA C3.
- - "VIA C3-2 for VIA C3-2 "Nehemiah" (model 9 and above).
-
- If you don't know what to do, choose "386".
-
-486
-CONFIG_M486
- Select this for a x486 processor, ether Intel or one of the
- compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX,
- DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or
- U5S.
-
-586/K5/5x86/6x86/6x86MX
-CONFIG_M586
- Select this for an x586 or x686 processor such as the AMD K5, the
- Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not
- assume the RDTSC instruction.
-
-Pentium Classic
-CONFIG_M586TSC
- Select this for a Pentium Classic processor with the RDTSC (Read
- Time Stamp Counter) instruction for benchmarking.
-
-VIA C3-2 (Nehemiah)
-CONFIG_MVIAC3_2
- Select this for a VIA C3 "Nehemiah". Selecting this enables usage of SSE
- and tells gcc to treat the CPU as a 686.
-
- Note, this kernel will not boot on older (pre model 9) C3s.
-
-32-bit PDC
-CONFIG_PDC_NARROW
- Saying Y here will allow developers with a C180, C200, C240, C360,
- J200, J210, and/or a J2240 to test 64-bit kernels by providing a
- wrapper for the 32-bit PDC calls. Since the machines which require
- this option do not support over 4G of RAM, this option is targeted
- for developers of these machines wishing to test changes on both
- 32-bit and 64-bit configurations.
-
- If unsure, say N.
-
-VGA text console
-CONFIG_VGA_CONSOLE
- Saying Y here will allow you to use Linux in text mode through a
- display that complies with the generic VGA standard. Virtually
- everyone wants that.
-
- The program SVGATextMode can be used to utilize SVGA video cards to
- their full potential in text mode. Download it from
- <ftp://ibiblio.org/pub/Linux/utils/console/>.
-
- Say Y.
-
-Distribute interrupts on all CPUs by default
-CONFIG_IRQ_ALL_CPUS
- This option gives the kernel permission to distribute IRQs across
- multiple CPUs. Saying N here will route all IRQs to the first
- CPU. Generally SMP PowerMacs can answer Y. SMP IBM CHRP boxes or
- Power3 boxes should say N for now.
-
-Video mode selection support
-CONFIG_VIDEO_SELECT
- This enables support for text mode selection on kernel startup. If
- you want to take advantage of some high-resolution text mode your
- card's BIOS offers, but the traditional Linux utilities like
- SVGATextMode don't, you can say Y here and set the mode using the
- "vga=" option from your boot loader (lilo or loadlin) or set
- "vga=ask" which brings up a video mode menu on kernel startup. (Try
- "man bootparam" or see the documentation of your boot loader about
- how to pass options to the kernel.)
-
- Read the file <file:Documentation/svga.txt> for more information
- about the Video mode selection support. If unsure, say N.
-
-Support for frame buffer devices
-CONFIG_FB
- The frame buffer device provides an abstraction for the graphics
- hardware. It represents the frame buffer of some video hardware and
- allows application software to access the graphics hardware through
- a well-defined interface, so the software doesn't need to know
- anything about the low-level (hardware register) stuff.
-
- Frame buffer devices work identically across the different
- architectures supported by Linux and make the implementation of
- application programs easier and more portable; at this point, an X
- server exists which uses the frame buffer device exclusively.
- On several non-X86 architectures, the frame buffer device is the
- only way to use the graphics hardware.
-
- The device is accessed through special device nodes, usually located
- in the /dev directory, i.e. /dev/fb*.
-
- You need an utility program called fbset to make full use of frame
- buffer devices. Please read <file:Documentation/fb/framebuffer.txt>
- and the Framebuffer-HOWTO at
- <http://www.tahallah.demon.co.uk/programming/prog.html> for more
- information.
-
- Say Y here and to the driver for your graphics board below if you
- are compiling a kernel for a non-x86 architecture.
-
- If you are compiling for the x86 architecture, you can say Y if you
- want to play with it, but it is not essential. Please note that
- running graphical applications that directly touch the hardware
- (e.g. an accelerated X server) and that are not frame buffer
- device-aware may cause unexpected results. If unsure, say N.
-
-Acorn VIDC support
-CONFIG_FB_ACORN
- This is the frame buffer device driver for the Acorn VIDC graphics
- hardware found in Acorn RISC PCs and other ARM-based machines. If
- unsure, say N.
-
-Permedia2 support
-CONFIG_FB_PM2
- This is the frame buffer device driver for the Permedia2 AGP frame
- buffer card from ASK, aka `Graphic Blaster Exxtreme'. There is a
- product page at
- <http://www.ask.com.hk/product/Permedia%202/permedia2.htm>.
-
-Enable FIFO disconnect feature
-CONFIG_FB_PM2_FIFO_DISCONNECT
- Support the Permedia2 FIFOI disconnect feature (see CONFIG_FB_PM2).
-
-Generic Permedia2 PCI board support
-CONFIG_FB_PM2_PCI
- Say Y to enable support for Permedia2 AGP frame buffer card from
- 3Dlabs (aka `Graphic Blaster Exxtreme') on the PCI bus.
-
-Phase5 CVisionPPC/BVisionPPC support
-CONFIG_FB_PM2_CVPPC
- Say Y to enable support for the Amiga Phase 5 CVisionPPC BVisionPPC
- framebuffer cards. Phase 5 is no longer with us, alas.
-
-Amiga native chipset support
-CONFIG_FB_AMIGA
- This is the frame buffer device driver for the builtin graphics
- chipset found in Amigas.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called amifb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Amiga OCS chipset support
-CONFIG_FB_AMIGA_OCS
- This enables support for the original Agnus and Denise video chips,
- found in the Amiga 1000 and most A500's and A2000's. If you intend
- to run Linux on any of these systems, say Y; otherwise say N.
-
-Amiga ECS chipset support
-CONFIG_FB_AMIGA_ECS
- This enables support for the Enhanced Chip Set, found in later
- A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If
- you intend to run Linux on any of these systems, say Y; otherwise
- say N.
-
-Amiga AGA chipset support
-CONFIG_FB_AMIGA_AGA
- This enables support for the Advanced Graphics Architecture (also
- known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T
- and CD32. If you intend to run Linux on any of these systems, say Y;
- otherwise say N.
-
-Amiga CyberVision support
-CONFIG_FB_CYBER
- This enables support for the Cybervision 64 graphics card from
- Phase5. Please note that its use is not all that intuitive (i.e. if
- you have any questions, be sure to ask!). Say N unless you have a
- Cybervision 64 or plan to get one before you next recompile the
- kernel. Please note that this driver DOES NOT support the
- Cybervision 64 3D card, as they use incompatible video chips.
-
-CyberPro 20x0 support
-CONFIG_FB_CYBER2000
- This enables support for the Integraphics CyberPro 20x0 and 5000
- VGA chips used in the Rebel.com Netwinder and other machines.
- Say Y if you have a NetWinder or a graphics card containing this
- device, otherwise say N.
-
-Amiga CyberVision3D support
-CONFIG_FB_VIRGE
- This enables support for the Cybervision 64/3D graphics card from
- Phase5. Please note that its use is not all that intuitive (i.e. if
- you have any questions, be sure to ask!). Say N unless you have a
- Cybervision 64/3D or plan to get one before you next recompile the
- kernel. Please note that this driver DOES NOT support the older
- Cybervision 64 card, as they use incompatible video chips.
-
-Amiga RetinaZ3 support
-CONFIG_FB_RETINAZ3
- This enables support for the Retina Z3 graphics card. Say N unless
- you have a Retina Z3 or plan to get one before you next recompile
- the kernel.
-
-Cirrus Logic generic driver
-CONFIG_FB_CLGEN
- This enables support for Cirrus Logic GD542x/543x based boards on
- Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
-
- If you have a PCI-based system, this enables support for these
- chips: GD-543x, GD-544x, GD-5480.
-
- Please read the file <file:Documentation/fb/clgenfb.txt>.
-
- Say N unless you have such a graphics board or plan to get one
- before you next recompile the kernel.
-
-Apollo support
-CONFIG_APOLLO
- Say Y here if you want to run Linux on an MC680x0-based Apollo
- Domain workstation such as the DN3500.
-
-Apollo 3c505 "EtherLink Plus" support
-CONFIG_APOLLO_ELPLUS
- Say Y or M here if your Apollo has a 3Com 3c505 ISA Ethernet card.
- If you don't have one made for Apollos, you can use one from a PC,
- except that your Apollo won't be able to boot from it (because the
- code in the ROM will be for a PC).
-
-Atari native chipset support
-CONFIG_FB_ATARI
- This is the frame buffer device driver for the builtin graphics
- chipset found in Ataris.
-
-Amiga FrameMaster II/Rainbow II support
-CONFIG_FB_FM2
- This is the frame buffer device driver for the Amiga FrameMaster
- card from BSC (exhibited 1992 but not shipped as a CBM product).
-
-Open Firmware frame buffer device support
-CONFIG_FB_OF
- Say Y if you want support with Open Firmware for your graphics
- board.
-
-S3 Trio frame buffer device support
-CONFIG_FB_S3TRIO
- If you have a S3 Trio say Y. Say N for S3 Virge.
-
-3Dfx Banshee/Voodoo3 display support
-CONFIG_FB_3DFX
- This driver supports graphics boards with the 3Dfx Banshee/Voodoo3
- chips. Say Y if you have such a graphics board.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called tdfxfb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-nVidia Riva support
-CONFIG_FB_RIVA
- This driver supports graphics boards with the nVidia Riva/Geforce
- chips.
- Say Y if you have such a graphics board.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called rivafb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Trident Blade/Image support
-CONFIG_FB_TRIDENT
- This driver is supposed to support graphics boards with the
- Trident CyberXXXX/Image/CyberBlade chips mostly found in laptops
- but also on some motherboards.Read <file:Documentation/fb/tridentfb.txt>
-
- Say Y if you have such a graphics board.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called tridentfb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-ATI Mach64 display support
-CONFIG_FB_ATY
- This driver supports graphics boards with the ATI Mach64 chips.
- Say Y if you have such a graphics board.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called atyfb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-ATI Rage128 display support
-CONFIG_FB_ATY128
- This driver supports graphics boards with the ATI Rage128 chips.
- Say Y if you have such a graphics board and read
- <file:Documentation/fb/aty128fb.txt>.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called aty128fb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Maxine (Personal DECstation) onboard framebuffer support
-CONFIG_FB_MAXINE
- Support for the onboard framebuffer (1024x768x8) in the Personal
- DECstation series (Personal DECstation 5000/20, /25, /33, /50,
- Codename "Maxine").
-
-PMAG-AA TURBOchannel framebuffer support
-CONFIG_FB_PMAG_AA
- Support for the PMAG-AA TURBOchannel framebuffer card (1280x1024x1)
- used mainly in the MIPS-based DECstation series.
-
-PMAG-BA TURBOchannel framebuffer support
-CONFIG_FB_PMAG_BA
- Support for the PMAG-BA TURBOchannel framebuffer card (1024x864x8)
- used mainly in the MIPS-based DECstation series.
-
-PMAGB-B TURBOchannel framebuffer support
-CONFIG_FB_PMAGB_B
- Support for the PMAGB-B TURBOchannel framebuffer card used mainly
- in the MIPS-based DECstation series. The card is currently only
- supported in 1280x1024x8 mode.
-
-FutureTV PCI card
-CONFIG_ARCH_FTVPCI
- Say Y here if you intend to run this kernel on a FutureTV (nee Nexus
- Electronics) StrongARM PCI card.
-
-ANAKIN Vehicle Telematics Platform
-CONFIG_ARCH_ANAKIN
- The Anakin is a StrongArm based SA110 - 2 DIN Vehicle Telematics Platform.
- 64MB SDRAM - 4 Mb Flash - Compact Flash Interface - 1 MB VRAM
-
- On board peripherals:
- * Front display: 400x234 16 bit TFT touchscreen
- * External independent second screen interface
- * CAN controller SJA1000
- * USB host controller
- * 6 channel video codec with hardware overlay
- * Smartcard reader
- * IrDa
-
- Modules interfaced over the Multi Media Extension slots:
- * A communication card
- Wavecom GPRS modem
- uBlock GPS
- Bosch DAB module
- * An audio card ( 4 * 40W, AC97 Codec, I2S)
-
-Altera Excalibur XA10 Dev Board
-ARCH_CAMELOT
- This enables support for Altera's Excalibur XA10 development board.
- If you would like to build your kernel to run on one of these boards
- then you must say 'Y' here. Otherwise say 'N'
-
-Link-Up Systems LCD support
-CONFIG_FB_L7200
- This driver supports the L7200 Color LCD.
- Say Y if you want graphics support.
-
-NeoMagic display support (EXPERIMENTAL)
-CONFIG_FB_NEOMAGIC
- This driver supports notebooks with NeoMagic PCI chips.
- Say Y if you have such a graphics card.
-
- The driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called neofb.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt.
-
-PowerMac "control" frame buffer device support
-CONFIG_FB_CONTROL
- This driver supports a frame buffer for the graphics adapter in the
- Power Macintosh 7300 and others.
-
-PowerMac "platinum" frame buffer device support
-CONFIG_FB_PLATINUM
- This driver supports a frame buffer for the "platinum" graphics
- adapter in some Power Macintoshes.
-
-PowerMac "valkyrie" frame buffer device support
-CONFIG_FB_VALKYRIE
- This driver supports a frame buffer for the "valkyrie" graphics
- adapter in some Power Macintoshes.
-
-Chips 65550 display support
-CONFIG_FB_CT65550
- This is the frame buffer device driver for the Chips & Technologies
- 65550 graphics chip in PowerBooks.
-
-TGA frame buffer support
-CONFIG_FB_TGA
- This is the frame buffer device driver for generic TGA graphic
- cards. Say Y if you have one of those.
-
-VESA VGA graphics console
-CONFIG_FB_VESA
- This is the frame buffer device driver for generic VESA 2.0
- compliant graphic cards. The older VESA 1.2 cards are not supported.
- You will get a boot time penguin logo at no additional cost. Please
- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-
-VGA 16-color planar support
-CONFIG_FBCON_VGA_PLANES
- This low level frame buffer console driver enable the kernel to use
- the 16-color planar modes of the old VGA cards where the bits of
- each pixel are separated into 4 planes.
-
- Only answer Y here if you have a (very old) VGA card that isn't VESA
- 2 compatible.
-
-VGA 16-color graphics console
-CONFIG_FB_VGA16
- This is the frame buffer device driver for VGA 16 color graphic
- cards. Say Y if you have such a card.
-
- This code is also available as a module. If you want to compile it
- as a module ( = code which can be inserted in and removed from the
- running kernel whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called
- vga16fb.o.
-
-Generic STI frame buffer device support
-CONFIG_FB_STI
- STI refers to the HP "Standard Text Interface" which is a set of
- BIOS routines contained in a ROM chip in HP PA-RISC based machines.
- Enabling this option will implement the linux framebuffer device and
- an fbcon color text console using calls to the STI BIOS routines.
- The HP framebuffer device is sometimes planar, using a strange memory
- layout, and changing the plane mask to create colored pixels
- can require a call to the STI routines, so /dev/fb may not actually
- be useful. However, on some systems packed pixel formats are supported.
- It is sufficient for basic text console functions, including fonts.
-
- You should probably enable this option, unless you are having
- trouble getting video when booting the kernel (make sure it isn't
- just that you are running the console on the serial port, though).
- Really old HP boxes may not have STI, and must use the PDC BIOS
- console or the IODC BIOS.
-
-Select other compiled-in fonts
-CONFIG_FBCON_FONTS
- Say Y here if you would like to use fonts other than the default
- your frame buffer console usually use.
-
- 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 foreign fonts.
-
- If unsure, say N (the default choices are safe).
-
-VGA 8x16 font
-CONFIG_FONT_8x16
- This is the "high resolution" font for the VGA frame buffer (the one
- provided by the VGA text console 80x25 mode.
-
- If unsure, say Y.
-
-Support only 8 pixels wide fonts
-CONFIG_FBCON_FONTWIDTH8_ONLY
- Answer Y here will make the kernel provide only the 8x8 fonts (these
- are the less readable).
-
- If unsure, say N.
-
-Sparc console 8x16 font
-CONFIG_FONT_SUN8x16
- This is the high resolution console font for Sun machines. Say Y.
-
-Sparc console 12x22 font (not supported by all drivers)
-CONFIG_FONT_SUN12x22
- This is the high resolution console font for Sun machines with very
- big letters (like the letters used in the SPARC PROM). If the
- standard font is unreadable for you, say Y, otherwise say N.
-
-VGA 8x8 font
-CONFIG_FONT_8x8
- This is the "high resolution" font for the VGA frame buffer (the one
- provided by the text console 80x50 (and higher) modes).
-
- Note that this is a poor quality font. The VGA 8x16 font is quite a
- lot more readable.
-
- Given the resolution provided by the frame buffer device, answer N
- here is safe.
-
-Mac console 6x11 font (not supported by all drivers)
-CONFIG_FONT_6x11
- Small console font with Macintosh-style high-half glyphs. Some Mac
- framebuffer drivers don't support this one at all.
-
-Pearl (old m68k) console 8x8 font
-CONFIG_FONT_PEARL_8x8
- Small console font with PC-style control-character and high-half
- glyphs.
-
-Acorn console 8x8 font
-CONFIG_FONT_ACORN_8x8
- Small console font with PC-style control characters and high-half
- glyphs.
-
-Backward compatibility mode for Xpmac
-CONFIG_FB_COMPAT_XPMAC
- If you use the Xpmac X server (common with mklinux), you'll need to
- say Y here to use X. You should consider changing to XFree86 which
- includes a server that supports the frame buffer device directly
- (XF68_FBDev).
-
-Hercules (HGA) mono graphics support
-CONFIG_FB_HGA
- Say Y here if you have a Hercules mono graphics card.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want).
- The module will be called hgafb.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- As this card technology is 15 years old, most people will answer N
- here.
-
-Epson 1355 framebuffer support
-CONFIG_FB_E1355
- Build in support for the SED1355 Epson Research Embedded RAMDAC
- LCD/CRT Controller (since redesignated as the S1D13505) as a
- framebuffer. Product specs at
- <http://www.erd.epson.com/vdc/html/products.htm>.
-
-Dreamcast Frame Buffer support
-CONFIG_FB_DC
- Say Y here to enable support for the framebuffer on the Sega
- Dreamcast. This driver is also available as a module, dcfb.o.
-
-Register Base Address
-CONFIG_E1355_REG_BASE
- Epson SED1355/S1D13505 LCD/CRT controller register base address.
- See the manuals at
- <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
- discussion.
-
-Framebuffer Base Address
-CONFIG_E1355_FB_BASE
- Epson SED1355/S1D13505 LCD/CRT controller memory base address. See
- the manuals at
- <http://www.erd.epson.com/vdc/html/contents/S1D13505.htm> for
- discussion.
-
-NEC PowerVR 2 display support
-CONFIG_FB_PVR2
- Say Y here if you have a PowerVR 2 card in your box. If you plan to
- run linux on your Dreamcast, you will have to say Y here.
- This driver may or may not work on other PowerVR 2 cards, but is
- totally untested. Use at your own risk. If unsure, say N.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want).
- The module will be called pvr2fb.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- You can pass several parameters to the driver at boot time or at
- module load time. The parameters look like "video=pvr2:XXX", where
- the meaning of XXX can be found at the end of the main source file
- (<file:drivers/video/pvr2fb.c>). Please see the file
- <file:Documentation/fb/pvr2fb.txt>.
-
-Debug pvr2fb
-CONFIG_FB_PVR2_DEBUG
- Say Y here if you wish for the pvr2fb driver to print out debugging
- messages. Most people will want to say N here. If unsure, you will
- also want to say N.
-
-Matrox unified accelerated driver
-CONFIG_FB_MATROX
- Say Y here if you have a Matrox Millennium, Millennium II, Mystique,
- Mystique 220, Productiva G100, Mystique G200, Millennium G200,
- Matrox G400, G450 or G550 card in your box. At this time, support for
- the G-series digital output is almost non-existant.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want).
- The module will be called matroxfb.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- You can pass several parameters to the driver at boot time or at
- module load time. The parameters look like "video=matrox:XXX", and
- are described in <file:Documentation/fb/matroxfb.txt>.
-
-Matrox Millennium I/II support
-CONFIG_FB_MATROX_MILLENIUM
- Say Y here if you have a Matrox Millennium or Matrox Millennium II
- video card. If you select "Advanced lowlevel driver options" below,
- you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp
- packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can
- also use font widths different from 8.
-
-Matrox Mystique support
-CONFIG_FB_MATROX_MYSTIQUE
- Say Y here if you have a Matrox Mystique or Matrox Mystique 220
- video card. If you select "Advanced lowlevel driver options" below,
- you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp
- packed pixel and 32 bpp packed pixel. You can also use font widths
- different from 8.
-
-CONFIG_FB_MATROX_G450
- Say Y here if you have a Matrox G100, G200, G400, G450 or G550 based
- video card. If you select "Advanced lowlevel driver options", you
- should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed
- pixel and 32 bpp packed pixel. You can also use font widths
- different from 8.
-
- If you need support for G400 secondary head, you must first say Y to
- "I2C support" and "I2C bit-banging support" in the character devices
- section, and then to "Matrox I2C support" and "G400 second head
- support" here in the framebuffer section. G450/G550 secondary head
- and digital output are supported without additional modules.
-
- The driver starts in monitor mode. You must use the matroxset tool
- (available at <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to
- swap primary and secondary head outputs, or to change output mode.
- Secondary head driver always start in 640x480 resolution and you
- must use fbset to change it.
-
- Do not forget that second head supports only 16 and 32 bpp
- packed pixels, so it is a good idea to compile them into the kernel
- too. You can use only some font widths, as the driver uses generic
- painting procedures (the secondary head does not use acceleration
- engine).
-
- G450/G550 hardware can display TV picture only from secondary CRTC,
- and it performs no scaling, so picture must have 525 or 625 lines.
-
-CONFIG_FB_MATROX_G100A
- Say Y here if you have a Matrox G100, G200 or G400 based
- video card. If you select "Advanced lowlevel driver options", you
- should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed
- pixel and 32 bpp packed pixel. You can also use font widths
- different from 8.
-
- If you need support for G400 secondary head, you must first say Y to
- "I2C support" and "I2C bit-banging support" in the character devices
- section, and then to "Matrox I2C support" and "G400 second head
- support" here in the framebuffer section.
-
-CONFIG_FB_MATROX_I2C
- This drivers creates I2C buses which are needed for accessing the
- DDC (I2C) bus present on all Matroxes, an I2C bus which
- interconnects Matrox optional devices, like MGA-TVO on G200 and
- G400, and the secondary head DDC bus, present on G400 only.
-
- You can say Y or M here if you want to experiment with monitor
- detection code. You must say Y or M here if you want to use either
- second head of G400 or MGA-TVO on G200 or G400.
-
- If you compile it as module, it will create a module named
- i2c-matroxfb.o.
-
-Matrox G400 second head support
-CONFIG_FB_MATROX_MAVEN
- WARNING !!! This support does not work with G450 !!!
-
- Say Y or M here if you want to use a secondary head (meaning two
- monitors in parallel) on G400 or MGA-TVO add-on on G200. Secondary
- head is not compatible with accelerated XFree 3.3.x SVGA servers -
- secondary head output is blanked while you are in X. With XFree
- 3.9.17 preview you can use both heads if you use SVGA over fbdev or
- the fbdev driver on first head and the fbdev driver on second head.
-
- If you compile it as module, two modules are created,
- matroxfb_crtc2.o and matroxfb_maven.o. Matroxfb_maven is needed for
- both G200 and G400, matroxfb_crtc2 is needed only by G400. You must
- also load i2c-matroxfb to get it to run.
-
- The driver starts in monitor mode and you must use the matroxset
- tool (available at
- <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to switch it to
- PAL or NTSC or to swap primary and secondary head outputs.
- Secondary head driver also always start in 640x480 resolution, you
- must use fbset to change it.
-
- Also do not forget that second head supports only 16 and 32 bpp
- packed pixels, so it is a good idea to compile them into the kernel
- too. You can use only some font widths, as the driver uses generic
- painting procedures (the secondary head does not use acceleration
- engine).
-
-CONFIG_FB_MATROX_PROC
- Say Y or M here if you want to access some informations about driver
- state through /proc interface.
-
- You should download matrox_pins tool (available at
- <ftp://platan.vc.cvut.cz/pub/linux/matrox-latest/>) to get human
- readable output.
-
-CONFIG_FB_MATROX_MULTIHEAD
- Say Y here if you have more than one (supported) Matrox device in
- your computer and you want to use all of them for different monitors
- ("multihead"). If you have only one device, you should say N because
- the driver compiled with Y is larger and a bit slower, especially on
- ia32 (ix86).
-
- If you said M to "Matrox unified accelerated driver" and N here, you
- will still be able to use several Matrox devices simultaneously:
- insert several instances of the module matroxfb.o into the kernel
- with insmod, supplying the parameter "dev=N" where N is 0, 1, etc.
- for the different Matrox devices. This method is slightly faster but
- uses 40 KB of kernel memory per Matrox card.
-
- There is no need for enabling 'Matrox multihead support' if you have
- only one Matrox card in the box.
-
-3Dfx Voodoo Graphics / Voodoo2 frame buffer support
-CONFIG_FB_VOODOO1
- Say Y here if you have a 3Dfx Voodoo Graphics (Voodoo1/sst1) or
- Voodoo2 (cvg) based graphics card.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want).
- The module will be called sstfb.o. If you want to compile it as
- a module, say M here and read Documentation/modules.txt.
-
- WARNING: Do not use any application that uses the 3D engine
- (namely glide) while using this driver.
- Please read the file Documentation/fb/README-sstfb.txt for supported
- options and other important info support.
-
-MDA text console (dual-headed)
-CONFIG_MDA_CONSOLE
- Say Y here if you have an old MDA or monochrome Hercules graphics
- adapter in your system acting as a second head ( = video card). You
- will then be able to use two monitors with your Linux system. Do not
- say Y here if your MDA card is the primary card in your system; the
- normal VGA driver will handle it.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want).
- The module will be called mdacon.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-SBUS and UPA framebuffers
-CONFIG_FB_SBUS
- Say Y if you want support for SBUS or UPA based frame buffer device.
-
-Creator/Creator3D support
-CONFIG_FB_CREATOR
- This is the frame buffer device driver for the Creator and Creator3D
- graphics boards.
-
-CGsix (GX,TurboGX) support
-CONFIG_FB_CGSIX
- This is the frame buffer device driver for the CGsix (GX, TurboGX)
- frame buffer.
-
-BWtwo support
-CONFIG_FB_BWTWO
- This is the frame buffer device driver for the BWtwo frame buffer.
-
-CGthree support
-CONFIG_FB_CGTHREE
- This is the frame buffer device driver for the CGthree frame buffer.
-
-CGfourteen (SX) support
-CONFIG_FB_CGFOURTEEN
- This is the frame buffer device driver for the CGfourteen frame
- buffer on Desktop SPARCsystems with the SX graphics option.
-
-P9100 (Sparcbook 3 only) support
-CONFIG_FB_P9100
- This is the frame buffer device driver for the P9100 card
- supported on Sparcbook 3 machines.
-
-Leo (ZX) support
-CONFIG_FB_LEO
- This is the frame buffer device driver for the SBUS-based Sun ZX
- (leo) frame buffer cards.
-
-IGA 168x display support
-CONFIG_FB_IGA
- This is the framebuffer device for the INTERGRAPHICS 1680 and
- successor frame buffer cards.
-
-TCX (SS4/SS5 only) support
-CONFIG_FB_TCX
- This is the frame buffer device driver for the TCX 24/8bit frame
- buffer.
-
-HD64461 Frame Buffer support
-CONFIG_FB_HIT
- This is the frame buffer device driver for the Hitachi HD64461 LCD
- frame buffer card.
-
-SIS display support
-CONFIG_FB_SIS
- This is the frame buffer device driver for the SiS 300, 315 and 330
- series chipsets. Documentation available at the maintainer's site
- at <http://www.winischhofer.net/linuxsisvga.shtml>.
-
-SIS 300 series support
-CONFIG_FB_SIS_300
- This enables support for SiS 300 series chipsets (300/305, 540, 630,
- 730). Documentation available at the maintainer's website at
- <http://www.winischhofer.net/linuxsisvga.shtml>.
-
-SIS 315/330 series support
-CONFIG_FB_SIS_315
- This enables support for SiS 315/330 series chipsets (315, 550, 650,
- M650, 651, 661FX, M661FX, 740, 741, 330). Documentation available at
- the maintainer's site <http://www.winischhofer.net/linuxsisvga.shtml>.
-
-IMS Twin Turbo display support
-CONFIG_FB_IMSTT
- The IMS Twin Turbo is a PCI-based frame buffer card bundled with
- many Macintosh and compatible computers.
-
-CONFIG_FB_TX3912
- The TX3912 is a Toshiba RISC processor based on the MIPS 3900 core;
- see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>.
-
- Say Y here to enable kernel support for the on-board framebuffer.
-
-Virtual Frame Buffer support (ONLY FOR TESTING!)
-CONFIG_FB_VIRTUAL
- This is a `virtual' frame buffer device. It operates on a chunk of
- unswappable kernel memory instead of on the memory of a graphics
- board. This means you cannot see any output sent to this frame
- buffer device, while it does consume precious memory. The main use
- of this frame buffer device is testing and debugging the frame
- buffer subsystem. Do NOT enable it for normal systems! To protect
- the innocent, it has to be enabled explicitly at boot time using the
- kernel option `video=vfb:'.
-
- This driver is also available as a module ( = code which can be
- inserted and removed from the running kernel whenever you want). The
- module will be called vfb.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-Mach64 CT/VT/GT/LT (incl. 3D RAGE) support
-CONFIG_FB_ATY_CT
- Say Y here to support use of ATI's 64-bit Rage boards (or other
- boards based on the Mach64 CT, VT, GT, and LT chipsets) as a
- framebuffer device. The ATI product support page for these boards
- is at <http://support.ati.com/products/pc/mach64/>.
-
-Sony Vaio Picturebook laptop LCD panel support
-CONFIG_FB_ATY_CT_VAIO_LCD
- Say Y here if you want to use the full width of the Sony Vaio
- Picturebook laptops LCD panels (you will get a 128x30 console).
-
- Note that you need to activate this mode using the 'vga=0x301'
- option from your boot loader (lilo or loadlin). See the
- documentation of your boot loader about how to pass options to the
- kernel.
-
-Mach64 GX support
-CONFIG_FB_ATY_GX
- Say Y here to support use of the ATI Mach64 Graphics Expression
- board (or other boards based on the Mach64 GX chipset) as a
- framebuffer device. The ATI product support page for these boards
- is at
- <http://support.ati.com/products/pc/mach64/graphics_xpression.html>.
-
-Mach64 Generic LCD support
-CONFIG_FB_ATY_GENERIC_LCD
- Enabling this option enables the Atyfb driver to drive LCD panels. It
- will autodetect the resulution and format of your display and emulate
- other resolutions using the hardware stretcher on the chip.
- Say Y here if you have computer with a Rage LT Pro, Rage Mobility M1,
- Rage XC or Rage XL chip and a laptop LCD display or any other LCD display
- that needs to be digitally driven. It is not necessary to enable this
- option if you are using an LCD display with a normal VGA connector,
- but it won't hurt if you do.
-
-ATI Radeon display support
-CONFIG_FB_RADEON
- Choose this option if you want to use an ATI Radeon graphics card as
- a framebuffer device. There are both PCI and AGP versions. You
- don't need to choose this to run the Radeon in plain VGA mode.
- There is a product page at
- <http://www.ati.com/na/pages/products/pc/radeon32/index.html>.
-
-SA-1100 LCD support
-CONFIG_FB_SA1100
- This is a framebuffer device for the SA-1100 LCD Controller.
- See <http://www.linux-fbdev.org/> for information on framebuffer
- devices.
-
- If you plan to use the LCD display with your SA-1100 system, say
- Y here.
-
-Advanced low level driver options
-CONFIG_FBCON_ADVANCED
- The frame buffer console uses character drawing routines that are
- tailored to the specific organization of pixels in the memory of
- your graphics hardware. These are called the low level frame buffer
- console drivers. Note that they are used for text console output
- only; they are NOT needed for graphical applications.
-
- If you say N here, the needed low level drivers are automatically
- enabled, depending on what frame buffer devices you selected above.
- This is recommended for most users.
-
- If you say Y here, you have more fine-grained control over which low
- level drivers are enabled. You can e.g. leave out low level drivers
- for color depths you do not intend to use for text consoles.
-
- Low level frame buffer console drivers can be modules ( = code which
- can be inserted and removed from the running kernel whenever you
- want). The modules will be called fbcon-*.o. If you want to compile
- (some of) them as modules, read <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-Monochrome support
-CONFIG_FBCON_MFB
- This is the low level frame buffer console driver for monochrome
- (2 colors) packed pixels.
-
-2 bpp packed pixels support
-CONFIG_FBCON_CFB2
- This is the low level frame buffer console driver for 2 bits per
- pixel (4 colors) packed pixels.
-
-4 bpp packed pixels support
-CONFIG_FBCON_CFB4
- This is the low level frame buffer console driver for 4 bits per
- pixel (16 colors) packed pixels.
-
-8 bpp packed pixels support
-CONFIG_FBCON_CFB8
- This is the low level frame buffer console driver for 8 bits per
- pixel (256 colors) packed pixels.
-
-16 bpp packed pixels support
-CONFIG_FBCON_CFB16
- This is the low level frame buffer console driver for 15 or 16 bits
- per pixel (32K or 64K colors, also known as `hicolor') packed
- pixels.
-
-24 bpp packed pixels support
-CONFIG_FBCON_CFB24
- This is the low level frame buffer console driver for 24 bits per
- pixel (16M colors, also known as `truecolor') packed pixels. It is
- NOT for `sparse' 32 bits per pixel mode.
-
-32 bpp packed pixels support
-CONFIG_FBCON_CFB32
- This is the low level frame buffer console driver for 32 bits per
- pixel (16M colors, also known as `truecolor') sparse packed pixels.
-
-Amiga bitplanes support
-CONFIG_FBCON_AFB
- This is the low level frame buffer console driver for 1 to 8
- bitplanes (2 to 256 colors) on Amiga.
-
-Amiga interleaved bitplanes support
-CONFIG_FBCON_ILBM
- This is the low level frame buffer console driver for 1 to 8
- interleaved bitplanes (2 to 256 colors) on Amiga.
-
-Atari interleaved bitplanes (2 planes) support
-CONFIG_FBCON_IPLAN2P2
- This is the low level frame buffer console driver for 2 interleaved
- bitplanes (4 colors) on Atari.
-
-Atari interleaved bitplanes (4 planes) support
-CONFIG_FBCON_IPLAN2P4
- This is the low level frame buffer console driver for 4 interleaved
- bitplanes (16 colors) on Atari.
-
-Atari interleaved bitplanes (8 planes) support
-CONFIG_FBCON_IPLAN2P8
- This is the low level frame buffer console driver for 8 interleaved
- bitplanes (256 colors) on Atari.
-
-Mac variable bpp packed pixels support
-CONFIG_FBCON_MAC
- This is the low level frame buffer console driver for 1/2/4/8/16/32
- bits per pixel packed pixels on Mac. It supports variable font
- widths for low resolution screens.
-
-Permedia3 support (EXPERIMENTAL)
-CONFIG_FB_PM3
- This is the frame buffer device driver for the 3DLabs Permedia3
- chipset, used in Formac ProFormance III, 3DLabs Oxygen VX1 &
- similar boards, 3DLabs Permedia3 Create!, Appian Jeronimo 2000
- and maybe other boards.
-
-HGA monochrome support
-CONFIG_FBCON_HGA
- This is the low level frame buffer console driver for Hercules mono
- graphics cards.
-
-VGA characters/attributes support
-CONFIG_FBCON_VGA
- This is the low level frame buffer console driver for VGA text mode;
- it is used by frame buffer device drivers that support VGA text
- mode.
-
-Parallel-port support
-CONFIG_PARPORT
- If you want to use devices connected to your machine's parallel port
- (the connector at the computer with 25 holes), e.g. printer, ZIP
- drive, PLIP link (Parallel Line Internet Protocol is mainly used to
- create a mini network by connecting the parallel ports of two local
- machines) etc., then you need to say Y here; please read
- <file:Documentation/parport.txt> and
- <file:drivers/parport/BUGS-parport>.
-
- For extensive information about drivers for many devices attaching
- to the parallel port see <http://www.torque.net/linux-pp.html> on
- the WWW.
-
- It is possible to share a single parallel port among several devices
- and it is safe to compile all the corresponding drivers into the
- kernel. If you want to compile parallel port support as a module
- ( = code which can be inserted in and removed from the running
- kernel whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called
- parport.o. If you have more than one parallel port and want to
- specify which port and IRQ to be used by this driver at module load
- time, take a look at <file:Documentation/parport.txt>.
-
- If unsure, say Y.
-
-PC-style hardware
-CONFIG_PARPORT_PC
- You should say Y here if you have a PC-style parallel port. All IBM
- PC compatible computers and some Alphas have PC-style parallel
- ports.
-
- This code is also available as a module. If you want to compile it
- as a module ( = code which can be inserted in and removed from the
- running kernel whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called
- parport_pc.o.
-
- If unsure, say Y.
-
-Parallel+serial PCI multi-IO card support
-CONFIG_PARPORT_SERIAL
- This adds support for multi-IO PCI cards that have parallel and
- serial ports. You should say Y or M here. If you say M, the module
- will be called parport_serial.o.
-
-Use FIFO/DMA if available
-CONFIG_PARPORT_PC_FIFO
- Many parallel port chipsets provide hardware that can speed up
- printing. Say Y here if you want to take advantage of that.
-
- As well as actually having a FIFO, or DMA capability, the kernel
- will need to know which IRQ the parallel port has. By default,
- parallel port interrupts will not be used, and so neither will the
- FIFO. See <file:Documentation/parport.txt> to find out how to
- specify which IRQ/DMA to use.
-
-SuperIO chipset support
-CONFIG_PARPORT_PC_SUPERIO
- Saying Y here enables some probes for Super-IO chipsets in order to
- find out things like base addresses, IRQ lines and DMA channels. It
- is safe to say N.
-
-Support for PCMCIA management for PC-style ports
-CONFIG_PARPORT_PC_PCMCIA
- Say Y here if you need PCMCIA support for your PC-style parallel
- ports. If unsure, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- parport_cs.o
-
-Support foreign hardware
-CONFIG_PARPORT_OTHER
- Say Y here if you want to be able to load driver modules to support
- other non-standard types of parallel ports. This causes a
- performance loss, so most people say N.
-
-Amiga built-in parallel port support
-CONFIG_PARPORT_AMIGA
- Say Y here if you need support for the parallel port hardware on
- Amiga machines. This code is also available as a module (say M),
- called parport_amiga.o. If in doubt, saying N is the safe plan.
-
-Atari built-in parallel port support
-CONFIG_PARPORT_ATARI
- Say Y here if you need support for the parallel port hardware on
- Atari machines. This code is also available as a module (say M),
- called parport_atari.o. If in doubt, saying N is the safe plan.
-
-Multiface III parallel port support
-CONFIG_PARPORT_MFC3
- Say Y here if you need parallel port support for the MFC3 card.
- This code is also available as a module (say M), called
- parport_mfc3.o. If in doubt, saying N is the safe plan.
-
-Support IEEE 1284 status readback
-CONFIG_PRINTER_READBACK
- If you have a device on your parallel port that support this
- protocol, this option will allow the device to report its status. It
- is safe to say Y.
-
-IEEE 1284 transfer modes
-CONFIG_PARPORT_1284
- If you have a printer that supports status readback or device ID, or
- want to use a device that uses enhanced parallel port transfer modes
- such as EPP and ECP, say Y here to enable advanced IEEE 1284
- transfer modes. Also say Y if you want device ID information to
- appear in /proc/sys/dev/parport/*/autoprobe*. It is safe to say N.
-
-Enable loadable module support
-CONFIG_MODULES
- Kernel modules are small pieces of compiled code which can be
- inserted in or removed from the running kernel, using the programs
- insmod and rmmod. This is described in the file
- <file:Documentation/modules.txt>, including the fact that you have
- to say "make modules" in order to compile the modules that you chose
- during kernel configuration. Modules can be device drivers, file
- systems, binary executable formats, and so on. If you think that you
- may want to make use of modules with this kernel in the future, then
- say Y here. If unsure, say Y.
-
-Set version information on all symbols for modules
-CONFIG_MODVERSIONS
- Usually, modules have to be recompiled whenever you switch to a new
- kernel. Saying Y here makes it possible, and safe, to use the
- same modules even after compiling a new kernel; this requires the
- program modprobe. All the software needed for module support is in
- the modutils package (check the file <file:Documentation/Changes>
- for location and latest version). NOTE: if you say Y here but don't
- have the program genksyms (which is also contained in the above
- mentioned modutils package), then the building of your kernel will
- fail. If you are going to use modules that are generated from
- non-kernel sources, you would benefit from this option. Otherwise
- it's not that important. So, N ought to be a safe bet.
-
-Kernel module loader support
-CONFIG_KMOD
- Normally when you have selected some drivers and/or file systems to
- be created as loadable modules, you also have the responsibility to
- load the corresponding modules (using the programs insmod or
- modprobe) before you can use them. If you say Y here however, the
- kernel will be able to load modules for itself: when a part of the
- kernel needs a module, it runs modprobe with the appropriate
- arguments, thereby loading the module if it is available. (This is a
- replacement for kerneld.) Say Y here and read about configuring it
- in <file:Documentation/kmod.txt>.
-
-ARP daemon support
-CONFIG_ARPD
- Normally, the kernel maintains an internal cache which maps IP
- addresses to hardware addresses on the local network, so that
- Ethernet/Token Ring/ etc. frames are sent to the proper address on
- the physical networking layer. For small networks having a few
- hundred directly connected hosts or less, keeping this address
- resolution (ARP) cache inside the kernel works well. However,
- maintaining an internal ARP cache does not work well for very large
- switched networks, and will use a lot of kernel memory if TCP/IP
- connections are made to many machines on the network.
-
- If you say Y here, the kernel's internal ARP cache will never grow
- to more than 256 entries (the oldest entries are expired in a LIFO
- manner) and communication will be attempted with the user space ARP
- daemon arpd. Arpd then answers the address resolution request either
- from its own cache or by asking the net.
-
- This code is experimental and also obsolete. If you want to use it,
- you need to find a version of the daemon arpd on the net somewhere,
- and you should also say Y to "Kernel/User network link driver",
- below. If unsure, say N.
-
-TCP/IP networking
-CONFIG_INET
- These are the protocols used on the Internet and on most local
- Ethernets. It is highly recommended to say Y here (this will enlarge
- your kernel by about 144 KB), since some programs (e.g. the X window
- system) use TCP/IP even if your machine is not connected to any
- other computer. You will get the so-called loopback device which
- allows you to ping yourself (great fun, that!).
-
- For an excellent introduction to Linux networking, please read the
- NET-3-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This option is also necessary if you want to use the full power of
- term (term is a program which gives you almost full Internet
- connectivity if you have a regular dial up shell account on some
- Internet connected Unix computer; for more information, read
- <http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html>).
-
- If you say Y here and also to "/proc file system support" and
- "Sysctl support" below, you can change various aspects of the
- behaviour of the TCP/IP code by writing to the (virtual) files in
- /proc/sys/net/ipv4/*; the options are explained in the file
- <file:Documentation/networking/ip-sysctl.txt>.
-
- Short answer: say Y.
-
-IP multicasting
-CONFIG_IP_MULTICAST
- This is code for addressing several networked computers at once,
- enlarging your kernel by about 2 KB. You need multicasting if you
- intend to participate in the MBONE, a high bandwidth network on top
- of the Internet which carries audio and video broadcasts. More
- information about the MBONE is on the WWW at
- <http://www-itg.lbl.gov/mbone/>. Information about the multicast
- capabilities of the various network cards is contained in
- <file:Documentation/networking/multicast.txt>. For most people, it's
- safe to say N.
-
-Advanced router
-CONFIG_IP_ADVANCED_ROUTER
- If you intend to run your Linux box mostly as a router, i.e. as a
- computer that forwards and redistributes network packets, say Y; you
- will then be presented with several options that allow more precise
- control about the routing process.
-
- The answer to this question won't directly affect the kernel:
- answering N will just cause the configurator to skip all the
- questions about advanced routing.
-
- Note that your box can only act as a router if you enable IP
- forwarding in your kernel; you can do that by saying Y to "/proc
- file system support" and "Sysctl support" below and executing the
- line
-
- echo "1" > /proc/sys/net/ipv4/ip_forward
-
- at boot time after the /proc file system has been mounted.
-
- If you turn on IP forwarding, you will also get the rp_filter, which
- automatically rejects incoming packets if the routing table entry
- for their source address doesn't match the network interface they're
- arriving on. This has security advantages because it prevents the
- so-called IP spoofing, however it can pose problems if you use
- asymmetric routing (packets from you to a host take a different path
- than packets from that host to you) or if you operate a non-routing
- host which has several IP addresses on different interfaces. To turn
- rp_filter off use:
-
- echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter
- or
- echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
-
- If unsure, say N here.
-
-Policy routing
-CONFIG_IP_MULTIPLE_TABLES
- Normally, a router decides what to do with a received packet based
- solely on the packet's final destination address. If you say Y here,
- the Linux router will also be able to take the packet's source
- address into account. Furthermore, if you also say Y to "Use TOS
- value as routing key" below, the TOS (Type-Of-Service) field of the
- packet can be used for routing decisions as well. In addition, if
- you say Y here and to "Fast network address translation" below,
- the router will also be able to modify source and destination
- addresses of forwarded packets.
-
- If you are interested in this, please see the preliminary
- documentation at <http://www.compendium.com.ar/policy-routing.txt>
- and <ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex>.
- You will need supporting software from
- <ftp://ftp.inr.ac.ru/ip-routing/>.
-
- If unsure, say N.
-
-Equal cost multipath
-CONFIG_IP_ROUTE_MULTIPATH
- Normally, the routing tables specify a single action to be taken in
- a deterministic manner for a given packet. If you say Y here
- however, it becomes possible to attach several actions to a packet
- pattern, in effect specifying several alternative paths to travel
- for those packets. The router considers all these paths to be of
- equal "cost" and chooses one of them in a non-deterministic fashion
- if a matching packet arrives.
-
-Use TOS value as routing key
-CONFIG_IP_ROUTE_TOS
- The header of every IP packet carries a TOS (Type Of Service) value
- with which the packet requests a certain treatment, e.g. low
- latency (for interactive traffic), high throughput, or high
- reliability. If you say Y here, you will be able to specify
- different routes for packets with different TOS values.
-
-Use netfilter MARK value as routing key
-CONFIG_IP_ROUTE_FWMARK
- If you say Y here, you will be able to specify different routes for
- packets with different mark values (see iptables(8), MARK target).
-
-Verbose route monitoring
-CONFIG_IP_ROUTE_VERBOSE
- If you say Y here, which is recommended, then the kernel will print
- verbose messages regarding the routing, for example warnings about
- received packets which look strange and could be evidence of an
- attack or a misconfigured system somewhere. The information is
- handled by the klogd daemon which is responsible for kernel messages
- ("man klogd").
-
-Fast network address translation
-CONFIG_IP_ROUTE_NAT
- If you say Y here, your router will be able to modify source and
- destination addresses of packets that pass through it, in a manner
- you specify. General information about Network Address Translation
- can be gotten from the document
- <http://www.csn.tu-chemnitz.de/~mha/linux-ip-nat/diplom/nat.html>.
-
-Kernel level IP autoconfiguration
-CONFIG_IP_PNP
- This enables automatic configuration of IP addresses of devices and
- of the routing table during kernel boot, based on either information
- supplied on the kernel command line or by BOOTP or RARP protocols.
- You need to say Y only for diskless machines requiring network
- access to boot (in which case you want to say Y to "Root file system
- on NFS" as well), because all other machines configure the network
- in their startup scripts.
-
-BOOTP support
-CONFIG_IP_PNP_BOOTP
- If you want your Linux box to mount its whole root file system (the
- one containing the directory /) from some other computer over the
- net via NFS and you want the IP address of your computer to be
- discovered automatically at boot time using the BOOTP protocol (a
- special protocol designed for doing this job), say Y here. In case
- the boot ROM of your network card was designed for booting Linux and
- does BOOTP itself, providing all necessary information on the kernel
- command line, you can say N here. If unsure, say Y. Note that if you
- want to use BOOTP, a BOOTP server must be operating on your network.
- Read <file:Documentation/nfsroot.txt> for details.
-
-DHCP support
-CONFIG_IP_PNP_DHCP
- If you want your Linux box to mount its whole root file system (the
- one containing the directory /) from some other computer over the
- net via NFS and you want the IP address of your computer to be
- discovered automatically at boot time using the DHCP protocol (a
- special protocol designed for doing this job), say Y here. In case
- the boot ROM of your network card was designed for booting Linux and
- does DHCP itself, providing all necessary information on the kernel
- command line, you can say N here.
-
- If unsure, say Y. Note that if you want to use DHCP, a DHCP server
- must be operating on your network. Read
- <file:Documentation/nfsroot.txt> for details.
-
-RARP support
-CONFIG_IP_PNP_RARP
- If you want your Linux box to mount its whole root file system (the
- one containing the directory /) from some other computer over the
- net via NFS and you want the IP address of your computer to be
- discovered automatically at boot time using the RARP protocol (an
- older protocol which is being obsoleted by BOOTP and DHCP), say Y
- here. Note that if you want to use RARP, a RARP server must be
- operating on your network. Read <file:Documentation/nfsroot.txt> for
- details.
-
-IP tunneling
-CONFIG_NET_IPIP
- Tunneling means encapsulating data of one protocol type within
- another protocol and sending it over a channel that understands the
- encapsulating protocol. This particular tunneling driver implements
- encapsulation of IP within IP, which sounds kind of pointless, but
- can be useful if you want to make your (or some other) machine
- appear on a different network than it physically is, or to use
- mobile-IP facilities (allowing laptops to seamlessly move between
- networks without changing their IP addresses; check out
- <http://anchor.cs.binghamton.edu/~mobileip/LJ/index.html>).
-
- Saying Y to this option will produce two modules ( = code which can
- be inserted in and removed from the running kernel whenever you
- want). Most people won't need this and can say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ipip.o
-
-GRE tunnels over IP
-CONFIG_NET_IPGRE
- Tunneling means encapsulating data of one protocol type within
- another protocol and sending it over a channel that understands the
- encapsulating protocol. This particular tunneling driver implements
- GRE (Generic Routing Encapsulation) and at this time allows
- encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure.
- This driver is useful if the other endpoint is a Cisco router: Cisco
- likes GRE much better than the other Linux tunneling driver ("IP
- tunneling" above). In addition, GRE allows multicast redistribution
- through the tunnel.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ip_gre.o
-
-Broadcast GRE over IP
-CONFIG_NET_IPGRE_BROADCAST
- One application of GRE/IP is to construct a broadcast WAN (Wide Area
- Network), which looks like a normal Ethernet LAN (Local Area
- Network), but can be distributed all over the Internet. If you want
- to do that, say Y here and to "IP multicast routing" below.
-
-IP multicast routing
-CONFIG_IP_MROUTE
- This is used if you want your machine to act as a router for IP
- packets that have several destination addresses. It is needed on the
- MBONE, a high bandwidth network on top of the Internet which carries
- audio and video broadcasts. In order to do that, you would most
- likely run the program mrouted. Information about the multicast
- capabilities of the various network cards is contained in
- <file:Documentation/networking/multicast.txt>. If you haven't heard
- about it, you don't need it.
-
-PIM-SM version 1 support
-CONFIG_IP_PIMSM_V1
- Kernel side support for Sparse Mode PIM (Protocol Independent
- Multicast) version 1. This multicast routing protocol is used widely
- because Cisco supports it. You need special software to use it
- (pimd-v1). Please see <http://netweb.usc.edu/pim/> for more
- information about PIM.
-
- Say Y if you want to use PIM-SM v1. Note that you can say N here if
- you just want to use Dense Mode PIM.
-
-PIM-SM version 2 support
-CONFIG_IP_PIMSM_V2
- Kernel side support for Sparse Mode PIM version 2. In order to use
- this, you need an experimental routing daemon supporting it (pimd or
- gated-5). This routing protocol is not used widely, so say N unless
- you want to play with it.
-
-Unix domain sockets
-CONFIG_UNIX
- If you say Y here, you will include support for Unix domain sockets;
- sockets are the standard Unix mechanism for establishing and
- accessing network connections. Many commonly used programs such as
- the X Window system and syslog use these sockets even if your
- machine is not connected to any network. Unless you are working on
- an embedded system or something similar, you therefore definitely
- want to say Y here.
-
- However, the socket support is also available as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>. The module will be
- called unix.o. If you try building this as a module and you have
- said Y to "Kernel module loader support" above, be sure to add
- 'alias net-pf-1 unix' to your /etc/modules.conf file. Note that
- several important services won't work correctly if you say M here
- and then neglect to load the module.
-
- Say Y unless you know what you are doing.
-
-The IPv6 protocol
-CONFIG_IPV6
- This is experimental support for the next version of the Internet
- Protocol: IP version 6 (also called IPng "IP next generation").
- Features of this new protocol include: expanded address space,
- authentication and privacy, and seamless interoperability with the
- current version of IP (IP version 4). For general information about
- IPv6, see <http://playground.sun.com/pub/ipng/html/ipng-main.html>;
- for specific information about IPv6 under Linux read the HOWTO at
- <http://www.bieringer.de/linux/IPv6/> and the file net/ipv6/README
- in the kernel source.
-
- If you want to use IPv6, please upgrade to the newest net-tools as
- given in <file:Documentation/Changes>. You will still be able to do
- regular IPv4 networking as well.
-
- This protocol support is also available as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want). The module will be called ipv6.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- It is safe to say N here for now.
-
-The SCTP Protocol (EXPERIMENTAL)
-CONFIG_IP_SCTP
- Stream Control Transmission Protocol
-
- From RFC 2960 (http://www.ietf.org/rfc/rfc2960.txt)
-
- "SCTP is a reliable transport protocol operating on top of a
- connectionless packet network such as IP. It offers the following
- services to its users:
-
- -- acknowledged error-free non-duplicated transfer of user data,
- -- data fragmentation to conform to discovered path MTU size,
- -- sequenced delivery of user messages within multiple streams,
- with an option for order-of-arrival delivery of individual user
- messages,
- -- optional bundling of multiple user messages into a single SCTP
- packet, and
- -- network-level fault tolerance through supporting of multi-
- homing at either or both ends of an association."
-
- This protocol support is also available as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want). The module will be called sctp. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- If in doubt, say N.
-
-SCTP: Use old checksum (Adler-32)
-CONFIG_SCTP_ADLER32
- RCF2960 currently specifies the Adler-32 checksum algorithm for SCTP.
- This has been deprecated and replaced by an algorithm now referred
- to as crc32c.
-
- If you say Y, this will use the Adler-32 algorithm, this might be
- useful for interoperation with downlevel peers.
-
- If unsure, say N.
-
-SCTP: Debug messages
-CONFIG_SCTP_DBG_MSG
- If you say Y, this will enable verbose debugging messages.
-
- If unsure, say N. However, if you are running into problems, use
- this option to gather detailed trace information
-
-SCTP: Debug object counts
-CONFIG_SCTP_DBG_OBJCNT
- If you say Y, this will enable debugging support for counting the
- type of objects that are currently allocated. This is useful for
- identifying memory leaks. If the /proc filesystem is enabled this
- debug information can be viewed by
- 'cat /proc/net/sctp/sctp_dbg_objcnt'
-
- If unsure, say N
-
-Kernel httpd acceleration
-CONFIG_KHTTPD
- The kernel httpd acceleration daemon (kHTTPd) is a (limited) web
- server built into the kernel. It is limited since it can only serve
- files from the file system and cannot deal with executable content
- such as CGI scripts. Serving files is sped up if you use kHTTPd.
- If kHTTPd is not able to fulfill a request, it can transparently
- pass it through to a user space web server such as apache.
-
- Saying "M" here builds the kHTTPd module; this is NOT enough to have
- a working kHTTPd. For safety reasons, the module has to be activated
- by doing a "echo 1 > /proc/sys/net/khttpd/start" after inserting the
- module.
-
- Before using this, read the README in net/khttpd !
-
- The kHTTPd is experimental. Be careful when using it on a production
- machine. Also note that kHTTPd doesn't support virtual servers yet.
-
-The IPX protocol
-CONFIG_IPX
- This is support for the Novell networking protocol, IPX, commonly
- used for local networks of Windows machines. You need it if you
- want to access Novell NetWare file or print servers using the Linux
- Novell client ncpfs (available from
- <ftp://platan.vc.cvut.cz/pub/linux/ncpfs/>) or from
- within the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>). In order
- to do the former, you'll also have to say Y to "NCP file system
- support", below.
-
- IPX is similar in scope to IP, while SPX, which runs on top of IPX,
- is similar to TCP. There is also experimental support for SPX in
- Linux (see "SPX networking", below).
-
- To turn your Linux box into a fully featured NetWare file server and
- IPX router, say Y here and fetch either lwared from
- <ftp://ibiblio.org/pub/Linux/system/network/daemons/> or
- mars_nwe from <ftp://www.compu-art.de/mars_nwe/>. For more
- information, read the IPX-HOWTO available from
- <http://www.tldp.org/docs.html#howto>.
-
- General information about how to connect Linux, Windows machines and
- Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
-
- The IPX driver would enlarge your kernel by about 16 KB. This driver
- is also available as a module ( = code which can be inserted in and
- removed from the running kernel whenever you want). The module will
- be called ipx.o. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>. Unless you want to
- integrate your Linux box with a local Novell network, say N.
-
-Full internal IPX network
-CONFIG_IPX_INTERN
- Every IPX network has an address that identifies it. Sometimes it is
- useful to give an IPX "network" address to your Linux box as well
- (for example if your box is acting as a file server for different
- IPX networks: it will then be accessible from everywhere using the
- same address). The way this is done is to create a virtual internal
- "network" inside your box and to assign an IPX address to this
- network. Say Y here if you want to do this; read the IPX-HOWTO at
- <http://www.tldp.org/docs.html#howto> for details.
-
- The full internal IPX network enables you to allocate sockets on
- different virtual nodes of the internal network. This is done by
- evaluating the field sipx_node of the socket address given to the
- bind call. So applications should always initialize the node field
- to 0 when binding a socket on the primary network. In this case the
- socket is assigned the default node that has been given to the
- kernel when the internal network was created. By enabling the full
- internal IPX network the cross-forwarding of packets targeted at
- 'special' sockets to sockets listening on the primary network is
- disabled. This might break existing applications, especially RIP/SAP
- daemons. A RIP/SAP daemon that works well with the full internal net
- can be found on <ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/>.
-
- If you don't know what you are doing, say N.
-
-#(We're told this will come back someday)
-
-SPX networking
-CONFIG_SPX
- * Orphaned entry retained 20 April 2001 by Petr Vandrovec *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- The Sequenced Packet eXchange protocol is a transport layer protocol
- built on top of IPX. It is used in Novell NetWare systems for
- client-server applications and is similar to TCP (which runs on top
- of IP).
-
- Note that Novell NetWare file sharing does not use SPX; it uses a
- protocol called NCP, for which separate Linux support is available
- ("NCP file system support" below for the client side, and the user
- space programs lwared or mars_nwe for the server side).
-
- Say Y here if you have use for SPX; read the IPX-HOWTO at
- <http://www.tldp.org/docs.html#howto> for details.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called af_spx.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-DECnet networking
-CONFIG_DECNET
- The DECnet networking protocol was used in many products made by
- Digital (now Compaq). It provides reliable stream and sequenced
- packet communications over which run a variety of services similar
- to those which run over TCP/IP.
-
- To find some tools to use with the kernel layer support, please
- look at Patrick Caulfield's web site:
- <http://linux.dreamtime.org/decnet/>.
-
- More detailed documentation is available in
- <file:Documentation/networking/decnet.txt>.
-
- Be sure to say Y to "/proc file system support" and "Sysctl support"
- below when using DECnet, since you will need sysctl support to aid
- in configuration at run time.
-
- The DECnet code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called decnet.o.
-
-DECnet SIOCFIGCONF support
-CONFIG_DECNET_SIOCGIFCONF
- This option should only be turned on if you are really sure that
- you know what you are doing. It can break other applications which
- use this system call and the proper way to get the information
- provided by this call is to use rtnetlink.
-
- If unsure, say N.
-
-DECnet router support
-CONFIG_DECNET_ROUTER
- Add support for turning your DECnet Endnode into a level 1 or 2
- router. This is an unfinished option for developers only. If you
- do say Y here, then make sure that you also say Y to "Kernel/User
- network link driver", "Routing messages" and "Network packet
- filtering". The first two are required to allow configuration via
- rtnetlink (currently you need Alexey Kuznetsov's iproute2 package
- from <ftp://ftp.inr.ac.ru/>). The "Network packet filtering" option
- will be required for the forthcoming routing daemon to work.
-
- See <file:Documentation/networking/decnet.txt> for more information.
-
-Use FWMARK value as DECnet routing key
-CONFIG_DECNET_ROUTE_FWMARK
- If you say Y here, you will be able to specify different routes for
- packets with different FWMARK ("firewalling mark") values
- (see ipchains(8), "-m" argument).
-
-AppleTalk interfaces support
-CONFIG_DEV_APPLETALK
- AppleTalk is the protocol that Apple computers can use to communicate
- on a network. If your Linux box is connected to such a network, and wish
- to do IP over it, or you have a LocalTalk card and wish to use it to
- connect to the AppleTalk network, say Y.
-
-AppleTalk protocol support
-CONFIG_ATALK
- AppleTalk is the protocol that Apple computers can use to communicate
- on a network. If your Linux box is connected to such a network and you
- wish to connect to it, say Y. You will need to use the netatalk package
- so that your Linux box can act as a print and file server for Macs as
- well as access AppleTalk printers. Check out
- <http://www.zettabyte.net/netatalk/> on the WWW for details.
- EtherTalk is the name used for AppleTalk over Ethernet and the
- cheaper and slower LocalTalk is AppleTalk over a proprietary Apple
- network using serial links. EtherTalk and LocalTalk are fully
- supported by Linux.
-
- General information about how to connect Linux, Windows machines and
- Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>. The
- NET-3-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, contains valuable
- information as well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called appletalk.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. You
- almost certainly want to compile it as a module so you can restart
- your AppleTalk stack without rebooting your machine. I hear that
- the GNU boycott of Apple is over, so even politically correct people
- are allowed to say Y here.
-
-AppleTalk-IP driver support
-CONFIG_IPDDP
- This allows IP networking for users who only have AppleTalk
- networking available. This feature is experimental. With this
- driver, you can encapsulate IP inside AppleTalk (e.g. if your Linux
- box is stuck on an AppleTalk only network) or decapsulate (e.g. if
- you want your Linux box to act as an Internet gateway for a zoo of
- AppleTalk connected Macs). Please see the file
- <file:Documentation/networking/ipddp.txt> for more information.
-
- If you say Y here, the AppleTalk-IP support will be compiled into
- the kernel. In this case, you can either use encapsulation or
- decapsulation, but not both. With the following two questions, you
- decide which one you want.
-
- If you say M here, the AppleTalk-IP support will be compiled as a
- module ( = code which can be inserted in and removed from the
- running kernel whenever you want, read
- <file:Documentation/modules.txt>). The module is called ipddp.o.
- In this case, you will be able to use both encapsulation and
- decapsulation simultaneously, by loading two copies of the module
- and specifying different values for the module option ipddp_mode.
-
-IP to AppleTalk-IP Encapsulation support
-CONFIG_IPDDP_ENCAP
- If you say Y here, the AppleTalk-IP code will be able to encapsulate
- IP packets inside AppleTalk frames; this is useful if your Linux box
- is stuck on an AppleTalk network (which hopefully contains a
- decapsulator somewhere). Please see
- <file:Documentation/networking/ipddp.txt> for more information. If
- you said Y to "AppleTalk-IP driver support" above and you say Y
- here, then you cannot say Y to "AppleTalk-IP to IP Decapsulation
- support", below.
-
-AppleTalk-IP to IP Decapsulation support
-CONFIG_IPDDP_DECAP
- If you say Y here, the AppleTalk-IP code will be able to decapsulate
- AppleTalk-IP frames to IP packets; this is useful if you want your
- Linux box to act as an Internet gateway for an AppleTalk network.
- Please see <file:Documentation/networking/ipddp.txt> for more
- information. If you said Y to "AppleTalk-IP driver support" above
- and you say Y here, then you cannot say Y to "IP to AppleTalk-IP
- Encapsulation support", above.
-
-Apple/Farallon LocalTalk PC card support
-CONFIG_LTPC
- This allows you to use the AppleTalk PC card to connect to LocalTalk
- networks. The card is also known as the Farallon PhoneNet PC card.
- If you are in doubt, this card is the one with the 65C02 chip on it.
- You also need version 1.3.3 or later of the netatalk package.
- This driver is experimental, which means that it may not work.
- See the file <file:Documentation/networking/ltpc.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ltpc.o
-
-COPS LocalTalk PC card support
-CONFIG_COPS
- This allows you to use COPS AppleTalk cards to connect to LocalTalk
- networks. You also need version 1.3.3 or later of the netatalk
- package. This driver is experimental, which means that it may not
- work. This driver will only work if you choose "AppleTalk DDP"
- networking support, above.
- Please read the file <file:Documentation/networking/cops.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- cops.o
-
-Dayna firmware support
-CONFIG_COPS_DAYNA
- Support COPS compatible cards with Dayna style firmware (Dayna
- DL2000/ Daynatalk/PC (half length), COPS LT-95, Farallon PhoneNET PC
- III, Farallon PhoneNET PC II).
-
-Tangent firmware support
-CONFIG_COPS_TANGENT
- Support COPS compatible cards with Tangent style firmware (Tangent
- ATB_II, Novell NL-1000, Daystar Digital LT-200.
-
-Amateur Radio support
-CONFIG_HAMRADIO
- If you want to connect your Linux box to an amateur radio, answer Y
- here. You want to read <http://www.tapr.org/tapr/html/pkthome.html> and
- the AX25-HOWTO, available from <http://www.tldp.org/docs.html#howto>.
-
- 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 amateur radio.
-
-Amateur Radio AX.25 Level 2 protocol
-CONFIG_AX25
- This is the protocol used for computer communication over amateur
- radio. It is either used by itself for point-to-point links, or to
- carry other protocols such as tcp/ip. To use it, you need a device
- that connects your Linux box to your amateur radio. You can either
- use a low speed TNC (a Terminal Node Controller acts as a kind of
- modem connecting your computer's serial port to your radio's
- microphone input and speaker output) supporting the KISS protocol or
- one of the various SCC cards that are supported by the generic Z8530
- or the DMA SCC driver. Another option are the Baycom modem serial
- and parallel port hacks or the sound card modem (supported by their
- own drivers). If you say Y here, you also have to say Y to one of
- those drivers.
-
- Information about where to get supporting software for Linux amateur
- radio as well as information about how to configure an AX.25 port is
- contained in the AX25-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. You might also want to
- check out the file <file:Documentation/networking/ax25.txt> in the
- kernel source. More information about digital amateur radio in
- general is on the WWW at
- <http://www.tapr.org/tapr/html/pkthome.html>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ax25.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-AX.25 DAMA Slave support
-CONFIG_AX25_DAMA_SLAVE
- DAMA is a mechanism to prevent collisions when doing AX.25
- networking. A DAMA server (called "master") accepts incoming traffic
- from clients (called "slaves") and redistributes it to other slaves.
- If you say Y here, your Linux box will act as a DAMA slave; this is
- transparent in that you don't have to do any special DAMA
- configuration. (Linux cannot yet act as a DAMA server.) If unsure,
- say N.
-
-AX.25 DAMA Master support
-CONFIG_AX25_DAMA_MASTER
- DAMA is a mechanism to prevent collisions when doing AX.25
- networking. A DAMA server (called "master") accepts incoming traffic
- from clients (called "slaves") and redistributes it to other
- slaves. If you say Y here, your Linux box will act as a DAMA server.
- If unsure, say N.
-
-Amateur Radio NET/ROM support
-CONFIG_NETROM
- NET/ROM is a network layer protocol on top of AX.25 useful for
- routing.
-
- A comprehensive listing of all the software for Linux amateur radio
- users as well as information about how to configure an AX.25 port is
- contained in the AX25-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. You also might want to
- check out the file <file:Documentation/networking/ax25.txt>. More
- information about digital amateur radio in general is on the WWW at
- <http://www.tapr.org/tapr/html/pkthome.html>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called netrom.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Amateur Radio X.25 PLP (Rose)
-CONFIG_ROSE
- The Packet Layer Protocol (PLP) is a way to route packets over X.25
- connections in general and amateur radio AX.25 connections in
- particular, essentially an alternative to NET/ROM.
-
- A comprehensive listing of all the software for Linux amateur radio
- users as well as information about how to configure an AX.25 port is
- contained in the AX25-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. You also might want to
- check out the file <file:Documentation/networking/ax25.txt>. More
- information about digital amateur radio in general is on the WWW at
- <http://www.tapr.org/tapr/html/pkthome.html>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called rose.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Serial port KISS driver for AX.25
-CONFIG_MKISS
- KISS is a protocol used for the exchange of data between a computer
- and a Terminal Node Controller (a small embedded system commonly
- used for networking over AX.25 amateur radio connections; it
- connects the computer's serial port with the radio's microphone
- input and speaker output).
-
- Although KISS is less advanced than the 6pack protocol, it has
- the advantage that it is already supported by most modern TNCs
- without the need for a firmware upgrade.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called mkiss.o.
-
-Serial port 6PACK driver for AX.25
-CONFIG_6PACK
- 6pack is a transmission protocol for the data exchange between your
- PC and your TNC (the Terminal Node Controller acts as a kind of
- modem connecting your computer's serial port to your radio's
- microphone input and speaker output). This protocol can be used as
- an alternative to KISS for networking over AX.25 amateur radio
- connections, but it has some extended functionality.
-
- Note that this driver is still experimental and might cause
- problems. For details about the features and the usage of the
- driver, read <file:Documentation/networking/6pack.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called 6pack.o.
-
-BPQ Ethernet driver
-CONFIG_BPQETHER
- AX.25 is the protocol used for computer communication over amateur
- radio. If you say Y here, you will be able to send and receive AX.25
- traffic over Ethernet (also called "BPQ AX.25"), which could be
- useful if some other computer on your local network has a direct
- amateur radio connection.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called bpqether.o.
-
-High-speed (DMA) SCC driver for AX.25
-CONFIG_DMASCC
- This is a driver for high-speed SCC boards, i.e. those supporting
- DMA on one port. You usually use those boards to connect your
- computer to an amateur radio modem (such as the WA4DSY 56kbps
- modem), in order to send and receive AX.25 packet radio network
- traffic.
-
- Currently, this driver supports Ottawa PI/PI2, Paccomm/Gracilis
- PackeTwin, and S5SCC/DMA boards. They are detected automatically.
- If you have one of these cards, say Y here and read the AX25-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- This driver can operate multiple boards simultaneously. If you
- compile it as a module (by saying M instead of Y), it will be called
- dmascc.o. If you don't pass any parameter to the driver, all
- possible I/O addresses are probed. This could irritate other devices
- that are currently not in use. You may specify the list of addresses
- to be probed by "dmascc=addr1,addr2,..." (when compiled into the
- kernel image) or "io=addr1,addr2,..." (when loaded as a module). The
- network interfaces will be called dmascc0 and dmascc1 for the board
- detected first, dmascc2 and dmascc3 for the second one, and so on.
-
- Before you configure each interface with ifconfig, you MUST set
- certain parameters, such as channel access timing, clock mode, and
- DMA channel. This is accomplished with a small utility program,
- dmascc_cfg, available at
- <http://www.nt.tuwien.ac.at/~kkudielk/Linux/>. Please be sure to get
- at least version 1.27 of dmascc_cfg, as older versions will not
- work with the current driver.
-
-Z8530 SCC driver for AX.25
-CONFIG_SCC
- These cards are used to connect your Linux box to an amateur radio
- in order to communicate with other computers. If you want to use
- this, read <file:Documentation/networking/z8530drv.txt> and the
- AX25-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Also make sure to say Y
- to "Amateur Radio AX.25 Level 2" support.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called scc.o.
-
-Support for TRX that feedback the tx signal to rx
-CONFIG_SCC_TRXECHO
- Some transmitters feed the transmitted signal back to the receive
- line. Say Y here to foil this by explicitly disabling the receiver
- during data transmission. If in doubt, say Y.
-
-Additional delay for PA0HZP OptoSCC compatible boards
-CONFIG_SCC_DELAY
- Say Y here if you experience problems with the SCC driver not
- working properly; please read
- <file:Documentation/networking/z8530drv.txt> for details. If unsure,
- say N.
-
-YAM driver for AX.25
-CONFIG_YAM
- The YAM is a modem for packet radio which connects to the serial
- port and includes some of the functions of a Terminal Node
- Controller. If you have one of those, say Y here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called yam.o.
-
-BAYCOM picpar and par96 driver for AX.25
-CONFIG_BAYCOM_PAR
- This is a driver for Baycom style simple amateur radio modems that
- connect to a parallel interface. The driver supports the picpar and
- par96 designs. To configure the driver, use the sethdlc utility
- available in the standard ax25 utilities package. For information on
- the modems, see <http://www.baycom.de/> and the file
- <file:Documentation/networking/baycom.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called baycom_par.o.
-
-BAYCOM EPP driver for AX.25
-CONFIG_BAYCOM_EPP
- This is a driver for Baycom style simple amateur radio modems that
- connect to a parallel interface. The driver supports the EPP
- designs. To configure the driver, use the sethdlc utility available
- in the standard ax25 utilities package. For information on the
- modems, see <http://www.baycom.de/> and the file
- <file:Documentation/networking/baycom.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called baycom_par.o.
-
-BAYCOM ser12 full-duplex driver for AX.25
-CONFIG_BAYCOM_SER_FDX
- This is one of two drivers for Baycom style simple amateur radio
- modems that connect to a serial interface. The driver supports the
- ser12 design in full-duplex mode. In addition, it allows the
- baudrate to be set between 300 and 4800 baud (however not all modems
- support all baudrates). This is the preferred driver. The next
- driver, "BAYCOM ser12 half-duplex driver for AX.25" is the old
- driver and still provided in case this driver does not work with
- your serial interface chip. To configure the driver, use the sethdlc
- utility available in the standard ax25 utilities package. For
- information on the modems, see <http://www.baycom.de/> and
- <file:Documentation/networking/baycom.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called baycom_ser_fdx.o.
-
-BAYCOM ser12 half-duplex driver for AX.25
-CONFIG_BAYCOM_SER_HDX
- This is one of two drivers for Baycom style simple amateur radio
- modems that connect to a serial interface. The driver supports the
- ser12 design in full-duplex mode. This is the old driver. It is
- still provided in case your serial interface chip does not work with
- the full-duplex driver. This driver is depreciated. To configure
- the driver, use the sethdlc utility available in the standard ax25
- utilities package. For information on the modems, see
- <http://www.baycom.de/> and
- <file:Documentation/networking/baycom.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called baycom_ser_hdx.o.
-
-Sound card modem driver for AX.25
-CONFIG_SOUNDMODEM
- This experimental driver allows a standard Sound Blaster or
- WindowsSoundSystem compatible sound card to be used as a packet
- radio modem (NOT as a telephone modem!), to send digital traffic
- over amateur radio.
-
- To configure the driver, use the sethdlc, smdiag and smmixer
- utilities available in the standard ax25 utilities package. For
- information on how to key the transmitter, see
- <http://www.ife.ee.ethz.ch/~sailer/pcf/ptt_circ/ptt.html> and
- <file:Documentation/networking/soundmodem.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called soundmodem.o.
-
-Sound card modem support for Sound Blaster and compatible cards
-CONFIG_SOUNDMODEM_SBC
- This option enables the soundmodem driver to use Sound Blaster and
- compatible cards. If you have a dual mode card (i.e. a WSS cards
- with a Sound Blaster emulation) you should say N here and Y to
- "Sound card modem support for WSS and Crystal cards", below, because
- this usually results in better performance. This option also
- supports SB16/32/64 in full-duplex mode.
-
-Sound card modem support for WSS and Crystal cards
-CONFIG_SOUNDMODEM_WSS
- This option enables the soundmodem driver to use WindowsSoundSystem
- compatible cards. These cards feature a codec chip from either
- Analog Devices (such as AD1848, AD1845, AD1812) or Crystal
- Semiconductors (such as CS4248, CS423x). This option also supports
- the WSS full-duplex operation which currently works with Crystal
- CS423x chips. If you don't need full-duplex operation, do not enable
- it to save performance.
-
-Sound card modem support for 1200 baud AFSK modulation
-CONFIG_SOUNDMODEM_AFSK1200
- This option enables the soundmodem driver 1200 baud AFSK modem,
- compatible to popular modems using TCM3105 or AM7911. The
- demodulator requires about 12% of the CPU power of a Pentium 75 CPU
- per channel.
-
-Sound card modem support for 2400 baud AFSK modulation (7.3728MHz crystal)
-CONFIG_SOUNDMODEM_AFSK2400_7
- This option enables the soundmodem driver 2400 baud AFSK modem,
- compatible to TCM3105 modems (over-)clocked with a 7.3728MHz
- crystal. Note that the availability of this driver does _not_ imply
- that I recommend building such links. It is only here since users
- especially in eastern Europe have asked me to do so. In fact this
- modulation scheme has many disadvantages, mainly its incompatibility
- with many transceiver designs and the fact that the TCM3105 (if
- used) is operated widely outside its specifications.
-
-Sound card modem support for 2400 baud AFSK modulation (8MHz crystal)
-CONFIG_SOUNDMODEM_AFSK2400_8
- This option enables the soundmodem driver 2400 baud AFSK modem,
- compatible to TCM3105 modems (over-)clocked with an 8MHz crystal.
- Note that the availability of this driver does _not_ imply that I
- recommend building such links. It is only here since users
- especially in eastern Europe have asked me to do so. In fact this
- modulation scheme has many disadvantages, mainly its incompatibility
- with many transceiver designs and the fact that the TCM3105 (if
- used) is operated widely outside its specifications.
-
-Sound card modem support for 2666 baud AFSK modulation
-CONFIG_SOUNDMODEM_AFSK2666
- This option enables the soundmodem driver 2666 baud AFSK modem.
- This modem is experimental, and not compatible to anything
- else I know of.
-
-Sound card modem support for 4800 baud 8PSK modulation
-CONFIG_SOUNDMODEM_PSK4800
- This option enables the soundmodem driver 4800 baud 8PSK modem.
- This modem is experimental, and not compatible to anything
- else I know of.
-
-Sound card modem support for 4800 baud HAPN-1 modulation
-CONFIG_SOUNDMODEM_HAPN4800
- This option enables the soundmodem driver 4800 baud HAPN-1
- compatible modem. This modulation seems to be widely used 'down
- under' and in the Netherlands. Here, nobody uses it, so I could not
- test if it works. It is compatible to itself, however :-)
-
-Sound card modem support for 9600 baud FSK G3RUH modulation
-CONFIG_SOUNDMODEM_FSK9600
- This option enables the soundmodem driver 9600 baud FSK modem,
- compatible to the G3RUH standard. The demodulator requires about 4%
- of the CPU power of a Pentium 75 CPU per channel. You can say Y to
- both 1200 baud AFSK and 9600 baud FSK if you want (but obviously you
- can only use one protocol at a time, depending on what the other end
- can understand).
-
-CCITT X.25 Packet Layer
-CONFIG_X25
- X.25 is a set of standardized network protocols, similar in scope to
- frame relay; the one physical line from your box to the X.25 network
- entry point can carry several logical point-to-point connections
- (called "virtual circuits") to other computers connected to the X.25
- network. Governments, banks, and other organizations tend to use it
- to connect to each other or to form Wide Area Networks (WANs). Many
- countries have public X.25 networks. X.25 consists of two
- protocols: the higher level Packet Layer Protocol (PLP) (say Y here
- if you want that) and the lower level data link layer protocol LAPB
- (say Y to "LAPB Data Link Driver" below if you want that).
-
- You can read more about X.25 at <http://www.sangoma.com/x25.htm> and
- <http://www.cisco.com/univercd/data/doc/software/11_0/rpcg/cx25.htm>.
- Information about X.25 for Linux is contained in the files
- <file:Documentation/networking/x25.txt> and
- <file:Documentation/networking/x25-iface.txt>.
-
- One connects to an X.25 network either with a dedicated network card
- using the X.21 protocol (not yet supported by Linux) or one can do
- X.25 over a standard telephone line using an ordinary modem (say Y
- to "X.25 async driver" below) or over Ethernet using an ordinary
- Ethernet card and either the 802.2 LLC protocol (say Y to "802.2
- LLC" below) or LAPB over Ethernet (say Y to "LAPB Data Link Driver"
- and "LAPB over Ethernet driver" below).
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called x25.o. If unsure, say N.
-
-LAPB Data Link Driver
-CONFIG_LAPB
- Link Access Procedure, Balanced (LAPB) is the data link layer (i.e.
- the lower) part of the X.25 protocol. It offers a reliable
- connection service to exchange data frames with one other host, and
- it is used to transport higher level protocols (mostly X.25 Packet
- Layer, the higher part of X.25, but others are possible as well).
- Usually, LAPB is used with specialized X.21 network cards, but Linux
- currently supports LAPB only over Ethernet connections. If you want
- to use LAPB connections over Ethernet, say Y here and to "LAPB over
- Ethernet driver" below. Read
- <file:Documentation/networking/lapb-module.txt> for technical
- details.
-
- If you want to compile this driver as a module though ( = code which
- can be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called lapb.o. If unsure, say N.
-
-802.2 LLC
-CONFIG_LLC
- This is a Logical Link Layer protocol used for X.25 connections over
- Ethernet, using ordinary Ethernet cards.
-
-Frame Diverter
-CONFIG_NET_DIVERT
- The Frame Diverter allows you to divert packets from the
- network, that are not aimed at the interface receiving it (in
- promisc. mode). Typically, a Linux box setup as an Ethernet bridge
- with the Frames Diverter on, can do some *really* transparent www
- caching using a Squid proxy for example.
-
- This is very useful when you don't want to change your router's
- config (or if you simply don't have access to it).
-
- The other possible usages of diverting Ethernet Frames are
- numberous:
- - reroute smtp traffic to another interface
- - traffic-shape certain network streams
- - transparently proxy smtp connections
- - etc...
-
- For more informations, please refer to:
- <http://diverter.sourceforge.net/>
- <http://perso.wanadoo.fr/magpie/EtherDivert.html>
-
- If unsure, say N.
-
-802.1d Ethernet Bridging
-CONFIG_BRIDGE
- If you say Y here, then your Linux box will be able to act as an
- Ethernet bridge, which means that the different Ethernet segments it
- is connected to will appear as one Ethernet to the participants.
- Several such bridges can work together to create even larger
- networks of Ethernets using the IEEE 802.1 spanning tree algorithm.
- As this is a standard, Linux bridges will cooperate properly with
- other third party bridge products.
-
- In order to use the Ethernet bridge, you'll need the bridge
- configuration tools; see <file:Documentation/networking/bridge.txt>
- for location. Please read the Bridge mini-HOWTO for more
- information.
-
- Note that if your box acts as a bridge, it probably contains several
- Ethernet devices, but the kernel is not able to recognize more than
- one at boot time without help; for details read the Ethernet-HOWTO,
- available from in <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this code as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called bridge.o.
-
- If unsure, say N.
-
-Packet socket
-CONFIG_PACKET
- The Packet protocol is used by applications which communicate
- directly with network devices without an intermediate network
- protocol implemented in the kernel, e.g. tcpdump. If you want them
- to work, choose Y.
-
- This driver is also available as a module called af_packet.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>; if you use modprobe
- or kmod, you may also want to add "alias net-pf-17 af_packet" to
- /etc/modules.conf.
-
- If unsure, say Y.
-
-Packet socket: mmapped IO
-CONFIG_PACKET_MMAP
- If you say Y here, the Packet protocol driver will use an IO
- mechanism that results in faster communication.
-
- If unsure, say N.
-
-Netlink device emulation
-CONFIG_NETLINK_DEV
- This option will be removed soon. Any programs that want to use
- character special nodes like /dev/tap0 or /dev/route (all with major
- number 36) need this option, and need to be rewritten soon to use
- the real netlink socket.
- This is a backward compatibility option, choose Y for now.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- netlink_dev.o
-
-Asynchronous Transfer Mode (ATM)
-CONFIG_ATM
- ATM is a high-speed networking technology for Local Area Networks
- and Wide Area Networks. It uses a fixed packet size and is
- connection oriented, allowing for the negotiation of minimum
- bandwidth requirements.
-
- In order to participate in an ATM network, your Linux box needs an
- ATM networking card. If you have that, say Y here and to the driver
- of your ATM card below.
-
- Note that you need a set of user-space programs to actually make use
- of ATM. See the file <file:Documentation/networking/atm.txt> for
- further details.
-
-Classical IP over ATM
-CONFIG_ATM_CLIP
- Classical IP over ATM for PVCs and SVCs, supporting InARP and
- ATMARP. If you want to communication with other IP hosts on your ATM
- network, you will typically either say Y here or to "LAN Emulation
- (LANE)" below.
-
-Do NOT send ICMP if no neighbour
-CONFIG_ATM_CLIP_NO_ICMP
- Normally, an "ICMP host unreachable" message is sent if a neighbour
- cannot be reached because there is no VC to it in the kernel's
- ATMARP table. This may cause problems when ATMARP table entries are
- briefly removed during revalidation. If you say Y here, packets to
- such neighbours are silently discarded instead.
-
-RFC1483/2684 Bridged protocols
-CONFIG_ATM_BR2684
- ATM PVCs can carry ethernet PDUs according to rfc2684 (formerly 1483)
- This device will act like an ethernet from the kernels point of view,
- with the traffic being carried by ATM PVCs (currently 1 PVC/device).
- This is sometimes used over DSL lines. If in doubt, say N.
-
-Per-VC IP filter kludge
-CONFIG_ATM_BR2684_IPFILTER
- This is an experimental mechanism for users who need to terminating a
- large number of IP-only vcc's. Do not enable this unless you are sure
- you know what you are doing.
-
-LAN Emulation (LANE) support
-CONFIG_ATM_LANE
- LAN Emulation emulates services of existing LANs across an ATM
- network. Besides operating as a normal ATM end station client, Linux
- LANE client can also act as an proxy client bridging packets between
- ELAN and Ethernet segments. You need LANE if you want to try MPOA.
-
-Multi-Protocol Over ATM (MPOA) support
-CONFIG_ATM_MPOA
- Multi-Protocol Over ATM allows ATM edge devices such as routers,
- bridges and ATM attached hosts establish direct ATM VCs across
- subnetwork boundaries. These shortcut connections bypass routers
- enhancing overall network performance.
-
-ATM over TCP
-CONFIG_ATM_TCP
- ATM over TCP driver. Useful mainly for development and for
- experiments. If unsure, say N.
-
-Efficient Networks ENI155P
-CONFIG_ATM_ENI
- Driver for the Efficient Networks ENI155p series and SMC ATM
- Power155 155 Mbps ATM adapters. Both, the versions with 512KB and
- 2MB on-board RAM (Efficient calls them "C" and "S", respectively),
- and the FPGA and the ASIC Tonga versions of the board are supported.
- The driver works with MMF (-MF or ...F) and UTP-5 (-U5 or ...D)
- adapters.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called eni.o.
-
-Enable extended debugging
-CONFIG_ATM_ENI_DEBUG
- Extended debugging records various events and displays that list
- when an inconsistency is detected. This mechanism is faster than
- generally using printks, but still has some impact on performance.
- Note that extended debugging may create certain race conditions
- itself. Enable this ONLY if you suspect problems with the driver.
-
-Fine-tune burst settings
-CONFIG_ATM_ENI_TUNE_BURST
- In order to obtain good throughput, the ENI NIC can transfer
- multiple words of data per PCI bus access cycle. Such a multi-word
- transfer is called a burst.
-
- The default settings for the burst sizes are suitable for most PCI
- chipsets. However, in some cases, large bursts may overrun buffers
- in the PCI chipset and cause data corruption. In such cases, large
- bursts must be disabled and only (slower) small bursts can be used.
- The burst sizes can be set independently in the send (TX) and
- receive (RX) direction.
-
- Note that enabling many different burst sizes in the same direction
- may increase the cost of setting up a transfer such that the
- resulting throughput is lower than when using only the largest
- available burst size.
-
- Also, sometimes larger bursts lead to lower throughput, e.g. on an
- Intel 440FX board, a drop from 135 Mbps to 103 Mbps was observed
- when going from 8W to 16W bursts.
-
-Enable 16W TX bursts (discouraged)
-CONFIG_ATM_ENI_BURST_TX_16W
- Burst sixteen words at once in the send direction. This may work
- with recent PCI chipsets, but is known to fail with older chipsets.
-
-Enable 8W TX bursts (recommended)
-CONFIG_ATM_ENI_BURST_TX_8W
- Burst eight words at once in the send direction. This is the default
- setting.
-
-Enable 4W TX bursts (optional)
-CONFIG_ATM_ENI_BURST_TX_4W
- Burst four words at once in the send direction. You may want to try
- this if you have disabled 8W bursts. Enabling 4W if 8W is also set
- may or may not improve throughput.
-
-Enable 2W TX bursts (optional)
-CONFIG_ATM_ENI_BURST_TX_2W
- Burst two words at once in the send direction. You may want to try
- this if you have disabled 4W and 8W bursts. Enabling 2W if 4W or 8W
- are also set may or may not improve throughput.
-
-Enable 16W RX bursts (discouraged)
-CONFIG_ATM_ENI_BURST_RX_16W
- Burst sixteen words at once in the receive direction. This may work
- with recent PCI chipsets, but is known to fail with older chipsets.
-
-Enable 8W RX bursts (discouraged)
-CONFIG_ATM_ENI_BURST_RX_8W
- Burst eight words at once in the receive direction. This may work
- with recent PCI chipsets, but is known to fail with older chipsets,
- such as the Intel Neptune series.
-
-Enable 4W RX bursts (recommended)
-CONFIG_ATM_ENI_BURST_RX_4W
- Burst four words at once in the receive direction. This is the
- default setting. Enabling 4W if 8W is also set may or may not
- improve throughput.
-
-Enable 2W RX bursts (optional)
-CONFIG_ATM_ENI_BURST_RX_2W
- Burst two words at once in the receive direction. You may want to
- try this if you have disabled 4W and 8W bursts. Enabling 2W if 4W or
- 8W are also set may or may not improve throughput.
-
-ZeitNet ZN1221/ZN1225
-CONFIG_ATM_ZATM
- Driver for the ZeitNet ZN1221 (MMF) and ZN1225 (UTP-5) 155 Mbps ATM
- adapters.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called zatm.o.
-
-Enable extended debugging
-CONFIG_ATM_ZATM_DEBUG
- Extended debugging records various events and displays that list
- when an inconsistency is detected. This mechanism is faster than
- generally using printks, but still has some impact on performance.
- Note that extended debugging may create certain race conditions
- itself. Enable this ONLY if you suspect problems with the driver.
-
-Fujitsu FireStream (FS50/FS155)
-CONFIG_ATM_FIRESTREAM
- Driver for the Fujitsu FireStream 155 (MB86697) and
- FireStream 50 (MB86695) ATM PCI chips.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- firestream.o.
-
-Enable usec resolution timestamps
-CONFIG_ATM_ZATM_EXACT_TS
- The uPD98401 SAR chip supports a high-resolution timer (approx. 30
- MHz) that is used for very accurate reception timestamps. Because
- that timer overflows after 140 seconds, and also to avoid timer
- drift, time measurements need to be periodically synchronized with
- the normal system time. Enabling this feature will add some general
- overhead for timer synchronization and also per-packet overhead for
- time conversion.
-
-IDT 77201/11 (NICStAR) (ForeRunnerLE)
-CONFIG_ATM_NICSTAR
- The NICStAR chipset family is used in a large number of ATM NICs for
- 25 and for 155 Mbps, including IDT cards and the Fore ForeRunnerLE
- series. Say Y if you have one of those.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- nicstar.o.
-
-Use suni PHY driver (155Mbps)
-CONFIG_ATM_NICSTAR_USE_SUNI
- Support for the S-UNI and compatible PHYsical layer chips. These are
- found in most 155Mbps NICStAR based ATM cards, namely in the
- ForeRunner LE155 cards. This driver provides detection of cable~
- removal and reinsertion and provides some statistics. This driver
- doesn't have removal capability when compiled as a module, so if you
- need that capability don't include S-UNI support (it's not needed to
- make the card work).
-
-Use IDT77015 PHY driver (25Mbps)
-CONFIG_ATM_NICSTAR_USE_IDT77105
- Support for the PHYsical layer chip in ForeRunner LE25 cards. In
- addition to cable removal/reinsertion detection, this driver allows
- you to control the loopback mode of the chip via a dedicated IOCTL.
- This driver is required for proper handling of temporary carrier
- loss, so if you have a 25Mbps NICStAR based ATM card you must say Y.
-
-IDT 77252 (NICStAR II)
-CONFIG_ATM_IDT77252
- Driver for the IDT 77252 ATM PCI chips.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called idt77252.o
-
-Enable debugging messages
-CONFIG_ATM_IDT77252_DEBUG
- Somewhat useful debugging messages are available. The choice of
- messages is controlled by a bitmap. This may be specified as a
- module argument. See the file <file:drivers/atm/idt77252.h> for
- the meanings of the bits in the mask.
-
- When active, these messages can have a significant impact on the
- speed of the driver, and the size of your syslog files! When
- inactive, they will have only a modest impact on performance.
-
-Receive ALL cells in raw queue
-CONFIG_ATM_IDT77252_RCV_ALL
- Enable receiving of all cells on the ATM link, that do not match
- an open connection in the raw cell queue of the driver. Useful
- for debugging or special applications only, so the safe answer is N.
-
-Madge Ambassador (Collage PCI 155 Server)
-CONFIG_ATM_AMBASSADOR
- This is a driver for ATMizer based ATM card produced by Madge
- Networks Ltd. Say Y (or M to compile as a module named ambassador.o)
- here if you have one of these cards.
-
-Enable debugging messages
-CONFIG_ATM_AMBASSADOR_DEBUG
- Somewhat useful debugging messages are available. The choice of
- messages is controlled by a bitmap. This may be specified as a
- module argument (kernel command line argument as well?), changed
- dynamically using an ioctl (not yet) or changed by sending the
- string "Dxxxx" to VCI 1023 (where x is a hex digit). See the file
- <file:drivers/atm/ambassador.h> for the meanings of the bits in the
- mask.
-
- When active, these messages can have a significant impact on the
- speed of the driver, and the size of your syslog files! When
- inactive, they will have only a modest impact on performance.
-
-Madge Horizon [Ultra] (Collage PCI 25 and Collage PCI 155 Client)
-CONFIG_ATM_HORIZON
- This is a driver for the Horizon chipset ATM adapter cards once
- produced by Madge Networks Ltd. Say Y (or M to compile as a module
- named horizon.o) here if you have one of these cards.
-
-Enable debugging messages
-CONFIG_ATM_HORIZON_DEBUG
- Somewhat useful debugging messages are available. The choice of
- messages is controlled by a bitmap. This may be specified as a
- module argument (kernel command line argument as well?), changed
- dynamically using an ioctl (not yet) or changed by sending the
- string "Dxxxx" to VCI 1023 (where x is a hex digit). See the file
- <file:drivers/atm/horizon.h> for the meanings of the bits in the
- mask.
-
- When active, these messages can have a significant impact on the
- speed of the driver, and the size of your syslog files! When
- inactive, they will have only a modest impact on performance.
-
-Interphase ATM PCI x575/x525/x531
-CONFIG_ATM_IA
- This is a driver for the Interphase (i)ChipSAR adapter cards
- which include a variety of variants in term of the size of the
- control memory (128K-1KVC, 512K-4KVC), the size of the packet
- memory (128K, 512K, 1M), and the PHY type (Single/Multi mode OC3,
- UTP155, UTP25, DS3 and E3). Go to:
- <http://www.iphase.com/products/ClassSheet.cfm?ClassID=ATM>
- for more info about the cards. Say Y (or M to compile as a module
- named iphase.o) here if you have one of these cards.
-
- See the file <file:Documentation/networking/iphase.txt> for further
- details.
-
-Enable debugging messages
-CONFIG_ATM_IA_DEBUG
- Somewhat useful debugging messages are available. The choice of
- messages is controlled by a bitmap. This may be specified as a
- module argument (kernel command line argument as well?), changed
- dynamically using an ioctl (Get the debug utility, iadbg, from
- <ftp://ftp.iphase.com/pub/atm/pci/>).
-
- See the file <file:drivers/atm/iphase.h> for the meanings of the
- bits in the mask.
-
- When active, these messages can have a significant impact on the
- speed of the driver, and the size of your syslog files! When
- inactive, they will have only a modest impact on performance.
-
-Efficient Networks Speedstream 3010
-CONFIG_ATM_LANAI
- Supports ATM cards based on the Efficient Networks "Lanai"
- chipset such as the Speedstream 3010 and the ENI-25p. The
- Speedstream 3060 is currently not supported since we don't
- have the code to drive the on-board Alcatel DSL chipset (yet).
-
-Linux telephony support
-CONFIG_PHONE
- Say Y here if you have a telephony card, which for example allows
- you to use a regular phone for voice-over-IP applications.
-
- Note: this has nothing to do with modems. You do not need to say Y
- here in order to be able to use a modem under Linux.
-
- This support is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- phonedev.o.
-
-Compaq Smart Array support
-CONFIG_BLK_CPQ_CISS_DA
- This is the driver for Compaq Smart Array 5xxx controllers.
- Everyone using these boards should say Y here.
- See <file:Documentation/cciss.txt> for the current list of
- boards supported by this driver, and for further information
- on the use of this driver.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- cciss.o
-
-SCSI tape drive support for Smart Array 5xxx
-CONFIG_CISS_SCSI_TAPE
- When enabled (Y), this option allows SCSI tape drives and SCSI medium
- changers (tape robots) to be accessed via a Compaq 5xxx array
- controller. (See <file:Documentation/cciss.txt> for more details.)
-
- "SCSI support" and "SCSI tape support" must also be enabled for this
- option to work.
-
- When this option is disabled (N), the SCSI portion of the driver
- is not compiled.
-
-Enable monitor thread
-CONFIG_CISS_MONITOR_THREAD
- Intended for use with multipath configurations (see the md driver).
- This option allows a per-adapter monitoring thread to periodically
- poll the adapter to detect failure modes in which the processor
- is unable to receive interrupts from the adapter, thus enabling
- fail-over to an alternate adapter in such situations. See
- <file:Documentation/cciss.txt> for more details.
-
-QuickNet Internet LineJack/PhoneJack support
-CONFIG_PHONE_IXJ
- Say M if you have a telephony card manufactured by Quicknet
- Technologies, Inc. These include the Internet PhoneJACK and
- Internet LineJACK Telephony Cards. You will get a module called
- ixj.o.
-
- For the ISA versions of these products, you can configure the
- cards using the isapnp tools (pnpdump/isapnp) or you can use the
- isapnp support. Please read <file:Documentation/telephony/ixj.txt>.
-
- For more information on these cards, see Quicknet's web site at:
- <http://www.quicknet.net/>.
-
- If you do not have any Quicknet telephony cards, you can safely
- say N here.
-
-QuickNet Internet LineJack/PhoneJack PCMCIA support
-CONFIG_PHONE_IXJ_PCMCIA
- Say Y here to configure in PCMCIA service support for the Quicknet
- cards manufactured by Quicknet Technologies, Inc. This builds an
- additional support module for the PCMCIA version of the card.
-
-FORE Systems 200E-series
-CONFIG_ATM_FORE200E_MAYBE
- This is a driver for the FORE Systems 200E-series ATM adapter
- cards. It simultaneously supports PCA-200E and SBA-200E models
- on PCI and SBUS hosts. Say Y (or M to compile as a module
- named fore_200e.o) here if you have one of these ATM adapters.
-
- Note that the driver will actually be compiled only if you
- additionally enable the support for PCA-200E and/or SBA-200E
- cards.
-
- See the file <file:Documentation/networking/fore200e.txt> for
- further details.
-
-Enable PCA-200E card support on PCI-based hosts
-CONFIG_ATM_FORE200E_PCA
- Say Y here if you want your PCA-200E cards to be probed.
-
-Use default PCA-200E firmware
-CONFIG_ATM_FORE200E_PCA_DEFAULT_FW
- Use the default PCA-200E firmware data shipped with the driver.
-
- Normal users do not have to deal with the firmware stuff, so
- they should say Y here.
-
-Pathname of user-supplied binary firmware
-CONFIG_ATM_FORE200E_PCA_FW
- This defines the pathname of an alternative PCA-200E binary
- firmware image supplied by the user. This pathname may be
- absolute or relative to the drivers/atm directory.
-
- The driver comes with an adequate firmware image, so normal users do
- not have to supply an alternative one. They just say Y to "Use
- default PCA-200E firmware" instead.
-
-Enable SBA-200E card support on SBUS-based hosts
-CONFIG_ATM_FORE200E_SBA
- Say Y here if you want your SBA-200E cards to be probed.
-
-Use default SBA-200E firmware
-CONFIG_ATM_FORE200E_SBA_DEFAULT_FW
- Use the default SBA-200E firmware data shipped with the driver.
-
- Normal users do not have to deal with the firmware stuff, so
- they should say Y here.
-
-Pathname of user-supplied binary firmware
-CONFIG_ATM_FORE200E_SBA_FW
- This defines the pathname of an alternative SBA-200E binary
- firmware image supplied by the user. This pathname may be
- absolute or relative to the drivers/atm directory.
-
- The driver comes with an adequate firmware image, so normal users do
- not have to supply an alternative one. They just say Y to "Use
- default SBA-200E firmware", above.
-
-Maximum number of tx retries
-CONFIG_ATM_FORE200E_TX_RETRY
- Specifies the number of times the driver attempts to transmit
- a message before giving up, if the transmit queue of the ATM card
- is transiently saturated.
-
- Saturation of the transmit queue may occur only under extreme
- conditions, e.g. when a fast host continuously submits very small
- frames (<64 bytes) or raw AAL0 cells (48 bytes) to the ATM adapter.
-
- Note that under common conditions, it is unlikely that you encounter
- a saturation of the transmit queue, so the retry mechanism never
- comes into play.
-
-Debugging level (0-3)
-CONFIG_ATM_FORE200E_DEBUG
- Specifies the level of debugging messages issued by the driver.
- The verbosity of the driver increases with the value of this
- parameter.
-
- When active, these messages can have a significant impact on
- the performances of the driver, and the size of your syslog files!
- Keep the debugging level to 0 during normal operations.
-
-ForeRunner HE Series
-CONFIG_ATM_HE
- This is a driver for the Marconi ForeRunner HE-series ATM adapter
- cards. It simultaneously supports the 155 and 622 versions.
-
-Use S/UNI PHY driver
- Support for the S/UNI-Ultra and S/UNI-622 found in the ForeRunner
- HE cards. This driver provides carrier detection some statistics.
-
-PPP over ATM
-CONFIG_PPPOATM
- Support PPP (Point to Point Protocol) encapsulated in ATM frames.
- This implementation does not yet comply with section 8 of RFC2364,
- which can lead to bad results idf the ATM peer loses state and
- changes its encapsulation unilaterally.
-
-Fusion MPT device support
-CONFIG_FUSION
- LSI Logic Fusion(TM) Message Passing Technology (MPT) device support
- provides high performance SCSI host initiator, and LAN [1] interface
- services to a host system. The Fusion architecture is capable of
- duplexing these protocols on high-speed Fibre Channel
- (up to 2 GHz x 2 ports = 4 GHz) and parallel SCSI (up to Ultra-320)
- physical medium.
-
- [1] LAN is not supported on parallel SCSI medium.
-
- These drivers require a Fusion MPT compatible PCI adapter installed
- in the host system. MPT adapters contain specialized I/O processors
- to handle I/O workload, and more importantly to offload this work
- from the host CPU(s).
-
- If you have Fusion MPT hardware and want to use it, you can say
- Y or M here to add MPT (base + ScsiHost) drivers.
- <Y> = build lib (fusion.o), and link [static] into the kernel [2]
- proper
- <M> = compiled as [dynamic] modules [3] named: (mptbase.o,
- mptscsih.o)
-
- [2] In order enable capability to boot the linux kernel
- natively from a Fusion MPT target device, you MUST
- answer Y here! (currently requires CONFIG_BLK_DEV_SD)
- [3] This support is also available as a module ( = code
- which can be inserted in and removed from the running
- kernel whenever you want). If you want to compile as
- modules, say M here and read
- <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
- If you say Y or M here you will get a choice of these
- additional protocol and support module options: Module Name:
- <M> Enhanced SCSI error reporting (isense.o)
- <M> Fusion MPT misc device (ioctl) driver (mptctl.o)
- <M> Fusion MPT LAN driver (mptlan.o)
-
- ---
- Fusion MPT is trademark of LSI Logic Corporation, and its
- architecture is based on LSI Logic's Message Passing Interface (MPI)
- specification.
-
-Maximum number of scatter gather entries
-CONFIG_FUSION_MAX_SGE
- This option allows you to specify the maximum number of scatter-
- gather entries per I/O. The driver defaults to 40, a reasonable number
- for most systems. However, the user may increase this up to 128.
- Increasing this parameter will require significantly more memory
- on a per controller instance. Increasing the parameter is not
- necessary (or recommended) unless the user will be running
- large I/O's via the raw interface.
-
-Fusion MPT enhanced SCSI error reporting [optional] module
-CONFIG_FUSION_ISENSE
- The isense module (roughly stands for Interpret SENSE data) is
- completely optional. It simply provides extra English readable
- strings in SCSI Error Report(s) that might be generated from the
- Fusion MPT SCSI Host driver, for example when a target device
- returns a SCSI check condition on a I/O. Without this module
- loaded you might see:
-
- SCSI Error Report =-=-= (ioc0,scsi5:0)
- SCSI_Status=02h (CHECK_CONDITION)
- Original_CDB[]: 2A 00 00 00 00 41 00 00 02 00
- SenseData[12h]: 70 00 02 00 00 00 00 0A 00 00 00 00 04 02 02 00 00 00
- SenseKey=2h (NOT READY); FRU=02h
- ASC/ASCQ=29h/00h
-
- Where otherwise, if this module had been loaded, you would see:
-
- SCSI Error Report =-=-= (ioc0,scsi5:0)
- SCSI_Status=02h (CHECK_CONDITION)
- Original_CDB[]: 2A 00 00 00 00 41 00 00 02 00 - "WRITE(10)"
- SenseData[12h]: 70 00 02 00 00 00 00 0A 00 00 00 00 04 02 02 00 00 00
- SenseKey=2h (NOT READY); FRU=02h
- ASC/ASCQ=29h/00h "LOGICAL UNIT NOT READY, INITIALIZING CMD. REQUIRED"
-
- Say M for "Enhanced SCSI error reporting" to compile this optional module,
- creating a driver named: isense.o.
-
- NOTE: Support for building this feature into the kernel is not
- available, due to kernel size considerations.
-
-Fusion MPT misc device (ioctl) driver [optional] module
-CONFIG_FUSION_CTL
- The Fusion MPT misc device driver provides specialized control
- of MPT adapters via system ioctl calls. Use of ioctl calls to
- the MPT driver requires that you create and use a misc device
- node ala:
- mknod /dev/mptctl c 10 240
-
- One use of this ioctl interface is to perform an upgrade (reflash)
- of the MPT adapter firmware. Refer to readme file(s) distributed
- with the Fusion MPT linux driver for additional details.
-
- If enabled by saying M to this, a driver named: mptctl.o
- will be compiled.
-
- If unsure whether you really want or need this, say N.
-
-Fusion MPT LAN driver [optional]
-CONFIG_FUSION_LAN
- This module supports LAN IP traffic over Fibre Channel port(s)
- on Fusion MPT compatible hardware (LSIFC9xx chips).
- The physical interface used is defined in RFC 2625.
- Please refer to that document for details.
-
- Installing this driver requires the knowledge to configure and
- activate a new network interface, "fc0", using standard Linux tools.
-
- If enabled by saying M to this, a driver named: mptlan.o
- will be compiled.
-
- If unsure whether you really want or need this, say N.
-
- NOTES: This feature is NOT available nor supported for linux-2.2.x
- kernels. You must be building a linux-2.3.x or linux-2.4.x kernel
- in order to configure this option.
- Support for building this feature into the linux kernel is not
- yet available.
-
-SCSI support
-CONFIG_SCSI
- If you want to use a SCSI hard disk, SCSI tape drive, SCSI CD-ROM or
- any other SCSI device under Linux, say Y and make sure that you know
- the name of your SCSI host adapter (the card inside your computer
- that "speaks" the SCSI protocol, also called SCSI controller),
- because you will be asked for it.
-
- You also need to say Y here if you want support for the parallel
- port version of the 100 MB IOMEGA ZIP drive.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called scsi_mod.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>. However, do not compile this as a
- module if your root file system (the one containing the directory /)
- is located on a SCSI device.
-
-SCSI disk support
-CONFIG_BLK_DEV_SD
- If you want to use a SCSI hard disk or the SCSI or parallel port
- version of the IOMEGA ZIP drive under Linux, say Y and read the
- SCSI-HOWTO, the Disk-HOWTO and the Multi-Disk-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. This is NOT for SCSI
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sd_mod.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>. Do not compile this driver as a
- module if your root file system (the one containing the directory /)
- is located on a SCSI disk. In this case, do not compile the driver
- for your SCSI host adapter (below) as a module either.
-
-Maximum number of SCSI disks that can be loaded as modules
-CONFIG_SD_EXTRA_DEVS
- This controls the amount of additional space allocated in tables for
- drivers that are loaded as modules after the kernel is booted. In
- the event that the SCSI core itself was loaded as a module, this
- value is the number of additional disks that can be loaded after the
- first host driver is loaded.
-
- Admittedly this isn't pretty, but there are tons of race conditions
- involved with resizing the internal arrays on the fly. Someday this
- flag will go away, and everything will work automatically.
-
- If you don't understand what's going on, go with the default.
-
-Maximum number of SCSI tapes that can be loaded as modules
-CONFIG_ST_EXTRA_DEVS
- This controls the amount of additional space allocated in tables for
- drivers that are loaded as modules after the kernel is booted. In
- the event that the SCSI core itself was loaded as a module, this
- value is the number of additional tapes that can be loaded after the
- first host driver is loaded.
-
- Admittedly this isn't pretty, but there are tons of race conditions
- involved with resizing the internal arrays on the fly. Someday this
- flag will go away, and everything will work automatically.
-
- If you don't understand what's going on, go with the default.
-
-SCSI tape support
-CONFIG_CHR_DEV_ST
- If you want to use a SCSI tape drive under Linux, say Y and read the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, and
- <file:drivers/scsi/README.st> in the kernel source. This is NOT for
- SCSI CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called st.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>.
-
-OnStream SC-x0 SCSI tape support
-CONFIG_CHR_DEV_OSST
- The OnStream SC-x0 SCSI tape drives can not be driven by the
- standard st driver, but instead need this special osst driver and
- use the /dev/osstX char device nodes (major 206). Via usb-storage
- and ide-scsi, you may be able to drive the USB-x0 and DI-x0 drives
- as well. Note that there is also a second generation of OnStream
- tape drives (ADR-x0) that supports the standard SCSI-2 commands for
- tapes (QIC-157) and can be driven by the standard driver st.
- For more information, you may have a look at the SCSI-HOWTO
- <http://www.tldp.org/docs.html#howto> and
- <file:drivers/scsi/README.osst> in the kernel source.
- More info on the OnStream driver may be found on
- <http://linux1.onstream.nl/test/>
- Please also have a look at the standard st docu, as most of it
- applies to osst as well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called osst.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>.
-
-SCSI CD-ROM support
-CONFIG_BLK_DEV_SR
- If you want to use a SCSI CD-ROM under Linux, say Y and read the
- SCSI-HOWTO and the CD-ROM-HOWTO at
- <http://www.tldp.org/docs.html#howto>. Also make sure to say Y
- or M to "ISO 9660 CD-ROM file system support" later.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sr_mod.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>.
-
-Maximum number of CD-ROM devices that can be loaded as modules
-CONFIG_SR_EXTRA_DEVS
- This controls the amount of additional space allocated in tables for
- drivers that are loaded as modules after the kernel is booted. In
- the event that the SCSI core itself was loaded as a module, this
- value is the number of additional CD-ROMs that can be loaded after
- the first host driver is loaded.
-
- Admittedly this isn't pretty, but there are tons of race conditions
- involved with resizing the internal arrays on the fly. Someday this
- flag will go away, and everything will work automatically.
-
- If you don't understand what's going on, go with the default.
-
-Enable vendor-specific extensions (for SCSI CD-ROM)
-CONFIG_BLK_DEV_SR_VENDOR
- This enables the usage of vendor specific SCSI commands. This is
- required to support multisession CDs with old NEC/TOSHIBA cdrom
- drives (and HP Writers). If you have such a drive and get the first
- session only, try saying Y here; everybody else says N.
-
-SCSI generic support
-CONFIG_CHR_DEV_SG
- If you want to use SCSI scanners, synthesizers or CD-writers or just
- about anything having "SCSI" in its name other than hard disks,
- CD-ROMs or tapes, say Y here. These won't be supported by the kernel
- directly, so you need some additional software which knows how to
- talk to these devices using the SCSI protocol:
-
- For scanners, look at SANE (<http://www.mostang.com/sane/>). For CD
- writer software look at Cdrtools
- (<http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html>)
- and for burning a "disk at once": CDRDAO
- (<http://cdrdao.sourceforge.net/>). Cdparanoia is a high
- quality digital reader of audio CDs (<http://www.xiph.org/paranoia/>).
- For other devices, it's possible that you'll have to write the
- driver software yourself. Please read the file
- <file:Documentation/scsi-generic.txt> for more information.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> and
- <file:Documentation/scsi.txt>. The module will be called sg.o. If unsure,
- say N.
-
-Probe all LUNs on each SCSI device
-CONFIG_SCSI_MULTI_LUN
- If you have a SCSI device that supports more than one LUN (Logical
- Unit Number), e.g. a CD jukebox, and only one LUN is detected, you
- can say Y here to force the SCSI driver to probe for multiple LUNs.
- A SCSI device with multiple LUNs acts logically like multiple SCSI
- devices. The vast majority of SCSI devices have only one LUN, and
- so most people can say N here and should in fact do so, because it
- is safer.
-
-Verbose SCSI error reporting (kernel size +=12K)
-CONFIG_SCSI_CONSTANTS
- The error messages regarding your SCSI hardware will be easier to
- understand if you say Y here; it will enlarge your kernel by about
- 12 KB. If in doubt, say Y.
-
-SCSI logging facility
-CONFIG_SCSI_LOGGING
- This turns on a logging facility that can be used to debug a number
- of SCSI related problems.
-
- If you say Y here, no logging output will appear by default, but you
- can enable logging by saying Y to "/proc file system support" and
- "Sysctl support" below and executing the command
-
- echo "scsi log token [level]" > /proc/scsi/scsi
-
- at boot time after the /proc file system has been mounted.
-
- There are a number of things that can be used for 'token' (you can
- find them in the source: <file:drivers/scsi/scsi.c>), and this
- allows you to select the types of information you want, and the
- level allows you to select the level of verbosity.
-
- If you say N here, it may be harder to track down some types of SCSI
- problems. If you say Y here your kernel will be somewhat larger, but
- there should be no noticeable performance impact as long as you have
- logging turned off.
-
-QDIO base support for IBM S/390 and zSeries
-CONFIG_QDIO
- This driver provides the Queued Direct I/O base support for the
- IBM S/390 (G5 and G6) and eServer zSeries (z800 and z900).
-
- For details please refer to the documentation provided by IBM at
- <http://www10.software.ibm.com/developerworks/opensource/linux390>
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called qdio.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If unsure, say Y.
-
-Performance statistics for QDIO base support
-CONFIG_QDIO_PERF_STATS
- Say Y here to get performance statistics in /proc/qdio_perf
-
- If unsure, say N.
-
-SGI WD93C93 SCSI Driver
-CONFIG_SCSI_SGIWD93
- Say Y here to support the on-board WD93C93 SCSI controller found (a)
- on the Indigo2 and other MIPS-based SGI machines, and (b) on ARCS
- ARM-based machines.
-
-DEC NCR53C94 SCSI Driver
-CONFIG_SCSI_DECNCR
- Say Y here to support the NCR53C94 SCSI controller chips on IOASIC
- based TURBOchannel DECstations and TURBOchannel PMAZ-A cards.
-
-AdvanSys SCSI support
-CONFIG_SCSI_ADVANSYS
- This is a driver for all SCSI host adapters manufactured by
- AdvanSys. It is documented in the kernel source in
- <file:drivers/scsi/advansys.c>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- advansys.o.
-
-Adaptec AHA152X/2825 support
-CONFIG_SCSI_AHA152X
- This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825
- SCSI host adapters. It also works for the AVA-1505, but the IRQ etc.
- must be manually specified in this case.
-
- It is explained in section 3.3 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. You might also want to
- read the file <file:drivers/scsi/README.aha152x>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aha152x.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Adaptec AHA1542 support
-CONFIG_SCSI_AHA1542
- This is support for a SCSI host adapter. It is explained in section
- 3.4 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Note that Trantor was
- purchased by Adaptec, and some former Trantor products are being
- sold under the Adaptec name. If it doesn't work out of the box, you
- may have to change some settings in <file:drivers/scsi/aha1542.h>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called aha1542.o.
-
-Adaptec AHA1740 support
-CONFIG_SCSI_AHA1740
- This is support for a SCSI host adapter. It is explained in section
- 3.5 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/aha1740.h>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aha1740.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Adaptec AIC7xxx support
-CONFIG_SCSI_AIC7XXX
- This driver supports all of Adaptec's Fast through Ultra 160 PCI
- based SCSI controllers as well as the aic7770 based EISA and VLB
- SCSI controllers (the 274x and 284x series). For AAA and ARO based
- configurations, only SCSI functionality is provided.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called aic7xxx.o.
-
-Maximum number of TCQ commands per device
-CONFIG_AIC7XXX_CMDS_PER_DEVICE
- Specify the number of commands you would like to allocate per SCSI
- device when Tagged Command Queueing (TCQ) is enabled on that device.
-
- This is an upper bound value for the number of tagged transactions
- to be used for any device. The aic7xxx driver will automatically
- vary this number based on device behavior. For devices with a
- fixed maximum, the driver will eventually lock to this maximum
- and display a console message indicating this value.
-
- Due to resource allocation issues in the Linux SCSI mid-layer, using
- a high number of commands per device may result in memory allocation
- failures when many devices are attached to the system. For this reason,
- the default is set to 32. Higher values may result in higer performance
- on some devices. The upper bound is 253. 0 disables tagged queueing.
-
- Per device tag depth can be controlled via the kernel command line
- "tag_info" option. See drivers/scsi/aic7xxx/README.aic7xxx
- for details.
-
- Default: 32
-
-Initial bus reset delay in milli-seconds
-CONFIG_AIC7XXX_RESET_DELAY_MS
- The number of milliseconds to delay after an initial bus reset.
- The bus settle delay following all error recovery actions is
- dictated by the SCSI layer and is not affected by this value.
-
- Default: 15000 (15 seconds)
-
-Probe for EISA and VL AIC7XXX Adapters
-CONFIG_AIC7XXX_PROBE_EISA_VL
- Probe for EISA and VLB Aic7xxx controllers. In many newer systems,
- the invasive probes necessary to detect these controllers can cause
- other devices to fail. For this reason, the non-PCI probe code is
- disabled by default. The current value of this option can be "toggled"
- via the no_probe kernel command line option.
-
-CONFIG_AIC7XXX_BUILD_FIRMWARE
- This option should only be enabled if you are modifying the firmware
- source to the aic7xxx driver and wish to have the generated firmware
- include files updated during a normal kernel build. The assembler
- for the firmware requires lex and yacc or their equivalents, as well
- as the db v1 library. You may have to install additional packages
- or modify the assembler Makefile or the files it includes if your
- build environment is different than that of the author.
-
-Compile in Debugging Code
-CONFIG_AIC7XXX_DEBUG_ENABLE
- Compile in aic7xxx debugging code that can be useful in diagnosing
- driver errors.
-
-Debug code enable mask (2048 for all debugging)
-CONFIG_AIC7XXX_DEBUG_MASK
- Bit mask of debug options that is only valid if the
- CONFIG_AIC7XXX_DEBUG_ENBLE option is enabled. The bits in this mask
- are defined in the drivers/scsi/aic7xxx/aic7xxx.h - search for the
- variable ahc_debug in that file to find them.
-
- Default: 0
-
-Decode registers during diagnostics
-CONFIG_AIC7XXX_REG_PRETTY_PRINT
- Compile in register value tables for the output of expanded register
- contents in diagnostics. This make it much easier to understand debug
- output without having to refer to a data book and/or the aic7xxx.reg file.
-
-Old Adaptec AIC7xxx support
-CONFIG_SCSI_AIC7XXX_OLD
- WARNING This driver is an older aic7xxx driver and is no longer
- under active development. Adaptec, Inc. is writing a new driver to
- take the place of this one, and it is recommended that whenever
- possible, people should use the new Adaptec written driver instead
- of this one. This driver will eventually be phased out entirely.
-
- This is support for the various aic7xxx based Adaptec SCSI
- controllers. These include the 274x EISA cards; 284x VLB cards;
- 2902, 2910, 293x, 294x, 394x, 3985 and several other PCI and
- motherboard based SCSI controllers from Adaptec. It does not support
- the AAA-13x RAID controllers from Adaptec, nor will it likely ever
- support them. It does not support the 2920 cards from Adaptec that
- use the Future Domain SCSI controller chip. For those cards, you
- need the "Future Domain 16xx SCSI support" driver.
-
- In general, if the controller is based on an Adaptec SCSI controller
- chip from the aic777x series or the aic78xx series, this driver
- should work. The only exception is the 7810 which is specifically
- not supported (that's the RAID controller chip on the AAA-13x
- cards).
-
- Note that the AHA2920 SCSI host adapter is *not* supported by this
- driver; choose "Future Domain 16xx SCSI support" instead if you have
- one of those.
-
- Information on the configuration options for this controller can be
- found by checking the help file for each of the available
- configuration options. You should read
- <file:drivers/scsi/aic7xxx_old/README.aic7xxx> at a minimum before
- contacting the maintainer with any questions. The SCSI-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>, can also
- be of great help.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called aic7xxx_old.o.
-
-Enable tagged command queueing (TCQ) by default
-CONFIG_AIC7XXX_OLD_TCQ_ON_BY_DEFAULT
- This option causes the aic7xxx driver to attempt to use Tagged
- Command Queueing (TCQ) on all devices that claim to support it.
-
- TCQ is a feature of SCSI-2 which improves performance: the host
- adapter can send several SCSI commands to a device's queue even if
- previous commands haven't finished yet. Because the device is
- intelligent, it can optimize its operations (like head positioning)
- based on its own request queue. Not all devices implement this
- correctly.
-
- If you say Y here, you can still turn off TCQ on troublesome devices
- with the use of the tag_info boot parameter. See the file
- <file:drivers/scsi/README.aic7xxx> for more information on that and
- other aic7xxx setup commands. If this option is turned off, you may
- still enable TCQ on known good devices by use of the tag_info boot
- parameter.
-
- If you are unsure about your devices then it is safest to say N
- here.
-
- However, TCQ can increase performance on some hard drives by as much
- as 50% or more, so it is recommended that if you say N here, you
- should at least read the <file:drivers/scsi/README.aic7xxx> file so
- you will know how to enable this option manually should your drives
- prove to be safe in regards to TCQ.
-
- Conversely, certain drives are known to lock up or cause bus resets
- when TCQ is enabled on them. If you have a Western Digital
- Enterprise SCSI drive for instance, then don't even bother to enable
- TCQ on it as the drive will become unreliable, and it will actually
- reduce performance.
-
-Default number of TCQ commands per device
-CONFIG_AIC7XXX_OLD_CMDS_PER_DEVICE
- Specify the number of commands you would like to allocate per SCSI
- device when Tagged Command Queueing (TCQ) is enabled on that device.
-
- Reasonable figures are in the range of 8 to 24 commands per device,
- but depending on hardware could be increased or decreased from that
- figure. If the number is too high for any particular device, the
- driver will automatically compensate usually after only 10 minutes
- of uptime. It will not hinder performance if some of your devices
- eventually have their command depth reduced, but is a waste of
- memory if all of your devices end up reducing this number down to a
- more reasonable figure.
-
- NOTE: Certain very broken drives are known to lock up when given
- more commands than they like to deal with. Quantum Fireball drives
- are the most common in this category. For the Quantum Fireball
- drives it is suggested to use no more than 8 commands per device.
-
- Default: 8
-
-Collect statistics to report in /proc
-CONFIG_AIC7XXX_OLD_PROC_STATS
- This option tells the driver to keep track of how many commands have
- been sent to each particular device and report that information to
- the user via the /proc/scsi/aic7xxx/n file, where n is the number of
- the aic7xxx controller you want the information on. This adds a
- small amount of overhead to each and every SCSI command the aic7xxx
- driver handles, so if you aren't really interested in this
- information, it is best to leave it disabled. This will only work if
- you also say Y to "/proc file system support", below.
-
- If unsure, say N.
-
-CONFIG_SCSI_AIC79XX
- This driver supports all of Adaptec's Ultra 320 PCI-X based SCSI controllers.
-
-CONFIG_AIC79XX_CMDS_PER_DEVICE 32
- Specify the number of commands you would like to allocate per SCSI
- device when Tagged Command Queueing (TCQ) is enabled on that device.
-
- This is an upper bound value for the number of tagged transactions
- to be used for any device. The aic7xxx driver will automatically
- vary this number based on device behavior. For devices with a
- fixed maximum, the driver will eventually lock to this maximum
- and display a console message indicating this value.
-
- Due to resource allocation issues in the Linux SCSI mid-layer, using
- a high number of commands per device may result in memory allocation
- failures when many devices are attached to the system. For this reason,
- the default is set to 32. Higher values may result in higer performance
- on some devices. The upper bound is 253.
-
- Per device tag depth can be controlled via the kernel command line
- "tag_info" option. See drivers/scsi/aic7xxx/README.aic79xx
- for details.
-
- Default: 32
-
-CONFIG_AIC79XX_RESET_DELAY_MS 15000
- The number of milliseconds to delay after an initial bus reset.
- The bus settle delay following all error recovery actions is
- dictated by the SCSI layer and is not affected by this value.
-
- Default: 15000 (15 seconds)
-
-CONFIG_AIC79XX_BUILD_FIRMWARE
- This option should only be enabled if you are modifying the firmware
- source to the aic7xxx driver and wish to have the generated firmware
- include files updated during a normal kernel build. The assembler
- for the firmware requires lex and yacc or their equivalents, as well
- as the db v1 library. You may have to install additional packages
- or modify the assembler Makefile or the files it includes if your
- build environment is different than that of the author.
-
-CONFIG_AIC79XX_ENABLE_RD_STRM
- Read Streaming is a U320 protocol option that should enhance performance.
- Early U320 drive firmware actually performs slower with read streaming
- enabled so it is disabled by default. Read Streaming can be configured
- in much the same way as tagged queueing using the "rd_strm" command line
- option. See drivers/scsi/aic7xxx/README.aic79xx for details.
-
-CONFIG_AIC79XX_DEBUG_ENABLE
- Compile in aic79xx debugging code that can be useful in diagnosing
- driver errors.
-
-CONFIG_AIC79XX_DEBUG_MASK
- Bit mask of debug options that is only valid if the
- CONFIG_AIC79XX_DEBUG_ENBLE option is enabled. The bits in this mask
- are defined in the drivers/scsi/aic7xxx/aic79xx.h - search for the
- variable ahd_debug in that file to find them.
-
- Default: 0
-
-CONFIG_AIC79XX_REG_PRETTY_PRINT
- Compile in register value tables for the output of expanded register
- contents in diagnostics. This make it much easier to understand debug
- output without having to refer to a data book and/or the aic7xxx.reg file.
-
-Adaptec I2O RAID support
-CONFIG_SCSI_DPT_I2O
- This driver supports all of Adaptec's I2O based RAID controllers as
- well as the DPT SmartRaid V cards. This is an Adaptec maintained
- driver by Deanna Bonds. See <file:drivers/scsi/README.dpti>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- dpt_i2o.o.
-
-IBM ServeRAID support
-CONFIG_SCSI_IPS
- This is support for the IBM ServeRAID hardware RAID controllers.
- See <http://www.developer.ibm.com/welcome/netfinity/serveraid.html>
- for more information. If this driver does not work correctly
- without modification please contact the author by email at
- ipslinux@us.ibm.com.
-
- You can build this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- but only a single instance may be loaded. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- The module will be called ips.o.
-
-BusLogic SCSI support
-CONFIG_SCSI_BUSLOGIC
- This is support for BusLogic MultiMaster and FlashPoint SCSI Host
- Adapters. Consult the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, and the files
- <file:drivers/scsi/README.BusLogic> and
- <file:drivers/scsi/README.FlashPoint> for more information. If this
- driver does not work correctly without modification, please contact
- the author, Leonard N. Zubkoff, by email to lnz@dandelion.com.
-
- You can also build this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- but only a single instance may be loaded. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- The module will be called BusLogic.o.
-
-Omit BusLogic SCSI FlashPoint support
-CONFIG_SCSI_OMIT_FLASHPOINT
- This option allows you to omit the FlashPoint support from the
- BusLogic SCSI driver. The FlashPoint SCCB Manager code is
- substantial, so users of MultiMaster Host Adapters may wish to omit
- it.
-
-Compaq Fibre Channel 64-bit/66Mhz HBA support
-CONFIG_SCSI_CPQFCTS
- Say Y here to compile in support for the Compaq StorageWorks Fibre
- Channel 64-bit/66Mhz Host Bus Adapter.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called cpqfc.o.
-
-DMX3191D SCSI support
-CONFIG_SCSI_DMX3191D
- This is support for Domex DMX3191D SCSI Host Adapters.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dmx3191d.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-DTC3180/3280 SCSI support
-CONFIG_SCSI_DTC3280
- This is support for DTC 3180/3280 SCSI Host Adapters. Please read
- the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, and the file
- <file:drivers/scsi/README.dtc3x80>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dtc.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support
-CONFIG_SCSI_EATA_DMA
- This is support for the EATA-DMA protocol compliant SCSI Host
- Adapters like the SmartCache III/IV, SmartRAID controller families
- and the DPT PM2011B and PM2012B controllers.
-
- Note that this driver is obsolete; if you have one of the above
- SCSI Host Adapters, you should normally say N here and Y to "EATA
- ISA/EISA/PCI support", below. Please read the SCSI-HOWTO, available
- from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called eata_dma.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-EATA-PIO (old DPT PM2001, PM2012A) support
-CONFIG_SCSI_EATA_PIO
- This driver supports all EATA-PIO protocol compliant SCSI Host
- Adapters like the DPT PM2001 and the PM2012A. EATA-DMA compliant
- host adapters could also use this driver but are discouraged from
- doing so, since this driver only supports hard disks and lacks
- numerous features. You might want to have a look at the SCSI-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called eata_pio.o.
-
-UltraStor 14F/34F support
-CONFIG_SCSI_U14_34F
- This is support for the UltraStor 14F and 34F SCSI-2 host adapters.
- The source at <file:drivers/scsi/u14-34f.c> contains some
- information about this hardware. If the driver doesn't work out of
- the box, you may have to change some settings in
- <file: drivers/scsi/u14-34f.c>. Read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Note that there is also
- another driver for the same hardware: "UltraStor SCSI support",
- below. You should say Y to both only if you want 24F support as
- well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called u14-34f.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-enable elevator sorting
-CONFIG_SCSI_U14_34F_LINKED_COMMANDS
- This option enables elevator sorting for all probed SCSI disks and
- CD-ROMs. It definitely reduces the average seek distance when doing
- random seeks, but this does not necessarily result in a noticeable
- performance improvement: your mileage may vary...
-
- The safe answer is N.
-
-maximum number of queued commands
-CONFIG_SCSI_U14_34F_MAX_TAGS
- This specifies how many SCSI commands can be maximally queued for
- each probed SCSI device. You should reduce the default value of 8
- only if you have disks with buggy or limited tagged command support.
- Minimum is 2 and maximum is 14. This value is also the window size
- used by the elevator sorting option above. The effective value used
- by the driver for each probed SCSI device is reported at boot time.
-
-Future Domain 16xx SCSI/AHA-2920A support
-CONFIG_SCSI_FUTURE_DOMAIN
- This is support for Future Domain's 16-bit SCSI host adapters
- (TMC-1660/1680, TMC-1650/1670, TMC-3260, TMC-1610M/MER/MEX) and
- other adapters based on the Future Domain chipsets (Quantum
- ISA-200S, ISA-250MG; Adaptec AHA-2920A; and at least one IBM board).
- It is explained in section 3.7 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip
- and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI
- controller support"). This Future Domain driver works with the older
- Adaptec AHA-2920A boards with a Future Domain chip on them.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called fdomain.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Future Domain MCS-600/700 SCSI support
-CONFIG_SCSI_FD_MCS
- This is support for Future Domain MCS 600/700 MCA SCSI adapters.
- Some PS/2 computers are equipped with IBM Fast SCSI Adapter/A which
- is identical to the MCS 700 and hence also supported by this driver.
- This driver also supports the Reply SB16/SCSI card (the SCSI part).
- It supports multiple adapters in the same system.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called fd_mcs.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Generic NCR5380/53c400 SCSI support
-CONFIG_SCSI_GENERIC_NCR5380
- This is the generic NCR family of SCSI controllers, not to be
- confused with the NCR 53c7 or 8xx controllers. It is explained in
- section 3.8 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/g_NCR5380.h>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called g_NCR5380.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Enable NCR53c400 extensions
-CONFIG_SCSI_GENERIC_NCR53C400
- This enables certain optimizations for the NCR53c400 SCSI cards.
- You might as well try it out. Note that this driver will only probe
- for the Trantor T130B in its default configuration; you might have
- to pass a command line option to the kernel at boot time if it does
- not detect your card. See the file
- <file:drivers/scsi/README.g_NCR5380> for details.
-
-# Choice: ncr5380
-NCR5380/53c400 mapping method (use Port for T130B)
-CONFIG_SCSI_G_NCR5380_PORT
- The NCR5380 and NCR53c400 SCSI controllers come in two varieties:
- port or memory mapped. You should know what you have. The most
- common card, Trantor T130B, uses port mapped mode.
-
-NCR Dual 700 MCA SCSI support
-CONFIG_SCSI_NCR_D700
- This is a driver for the MicroChannel Dual 700 card produced by
- NCR and commonly used in 345x/35xx/4100 class machines. It always
- tries to negotiate sync and uses tag command queueing.
-
- Unless you have an NCR manufactured machine, the chances are that
- you do not have this SCSI card, so say N.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called NCR_D700.o.
-
-HP LASI SCSI support for 53c700/710
-CONFIG_SCSI_LASI700
- This is a driver for the lasi baseboard in some parisc machines
- which is based on the 53c700 chip. Will also support LASI subsystems
- based on the 710 chip using 700 emulation mode.
-
- Unless you know you have a 53c700 or 53c710 based lasi, say N here
-
-NCR53c7,8xx SCSI support
-CONFIG_SCSI_NCR53C7xx
- This is a driver for the 53c7 and 8xx NCR family of SCSI
- controllers, not to be confused with the NCR 5380 controllers. It
- is explained in section 3.8 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/53c7,8xx.h>. Please read
- <file:drivers/scsi/README.ncr53c7xx> for the available boot time
- command line options.
-
- Note: there is another driver for the 53c8xx family of controllers
- ("NCR53C8XX SCSI support" below). If you want to use them both, you
- need to say M to both and build them as modules, but only one may be
- active at a time. If you have a 53c8xx board, it's better to use the
- other driver.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 53c7,8xx.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Always negotiate synchronous transfers
-CONFIG_SCSI_NCR53C7xx_sync
- In general, this is good; however, it is a bit dangerous since there
- are some broken SCSI devices out there. Take your chances. Safe bet
- is N.
-
-Allow FAST-SCSI [10MHz]
-CONFIG_SCSI_NCR53C7xx_FAST
- This will enable 10MHz FAST-SCSI transfers with your host
- adapter. Some systems have problems with that speed, so it's safest
- to say N here.
-
-Allow DISCONNECT
-CONFIG_SCSI_NCR53C7xx_DISCONNECT
- This enables the disconnect/reconnect feature of the NCR SCSI
- controller. When you say Y here, a slow SCSI device will not lock
- the SCSI bus while processing a request, allowing simultaneous use
- of e.g. a SCSI hard disk and SCSI tape or CD-ROM drive, and
- providing much better performance when using slow and fast SCSI
- devices at the same time. Some devices, however, do not operate
- properly with this option enabled, and will cause your SCSI system
- to hang, which might cause a system crash. The safe answer
- therefore is to say N.
-
-SYM53C8XX Version 2 SCSI support
-CONFIG_SCSI_SYM53C8XX_2
- This driver supports the whole NCR53C8XX/SYM53C8XX family of
- PCI-SCSI controllers. It also supports the subset of LSI53C10XX
- Ultra-160 controllers that are based on the SYM53C8XX SCRIPTS
- language. It does not support LSI53C10XX Ultra-320 PCI-X SCSI
- controllers.
-
- If your system has problems using this new major version of the
- SYM53C8XX driver, you may switch back to driver version 1.
-
- Please read <file:drivers/scsi/sym53c8xx_2/Documentation.txt> for more
- information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sym53c8xx_2.o.
-
-PCI DMA addressing mode
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE
- This option only applies to PCI-SCSI chip that are PCI DAC capable
- (875A, 895A, 896, 1010-33, 1010-66, 1000).
-
- When set to 0, only PCI 32 bit DMA addressing (SAC) will be performed.
- When set to 1, 40 bit DMA addressing (with upper 24 bits of address
- set to zero) is supported. The addressable range is here 1 TB.
- When set to 2, full 64 bits of address for DMA are supported, but only
- 16 segments of 4 GB can be addressed. The addressable range is so
- limited to 64 GB.
-
- The safest value is 0 (32 bit DMA addressing) that is guessed to still
- fit most of real machines.
-
- The preferred value 1 (40 bit DMA addressing) should make happy
- properly engineered PCI DAC capable host bridges. You may configure
- this option for Intel platforms with more than 4 GB of memory.
-
- The still experimental value 2 (64 bit DMA addressing with 16 x 4GB
- segments limitation) can be used on systems that require PCI address
- bits past bit 39 to be set for the addressing of memory using PCI
- DAC cycles.
-
-use normal IO
-CONFIG_SCSI_SYM53C8XX_IOMAPPED
- If you say Y here, the driver will preferently use normal IO rather than
- memory mapped IO.
-
-maximum number of queued commands
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS
- This option allows you to specify the maximum number of commands
- that can be queued to any device, when tagged command queuing is
- possible. The driver supports up to 256 queued commands per device.
- This value is used as a compiled-in hard limit.
-
-default tagged command queue depth
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS
- This is the default value of the command queue depth the driver will
- announce to the generic SCSI layer for devices that support tagged
- command queueing. This value can be changed from the boot command line.
- This is a soft limit that cannot exceed CONFIG_SCSI_SYM53C8XX_MAX_TAGS.
-
-NCR53C8XX SCSI support
-CONFIG_SCSI_NCR53C8XX
- This is the BSD ncr driver adapted to Linux for the NCR53C8XX family
- of PCI-SCSI controllers. This driver supports parity checking,
- tagged command queuing and fast synchronous data transfers up to 80
- MB/s with wide FAST-40 LVD devices and controllers.
-
- Recent versions of the 53C8XX chips are better supported by the
- option "SYM53C8XX SCSI support", below.
-
- Note: there is yet another driver for the 53c8xx family of
- controllers ("NCR53c7,8xx SCSI support" above). If you want to use
- them both, you need to say M to both and build them as modules, but
- only one may be active at a time. If you have a 53c8xx board, you
- probably do not want to use the "NCR53c7,8xx SCSI support".
-
- Please read <file:drivers/scsi/README.ncr53c8xx> for more
- information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ncr53c8xx.o.
-
-SYM53C8XX Version 1 SCSI support
-CONFIG_SCSI_SYM53C8XX
- This driver supports all the features of recent 53C8XX chips (used
- in PCI SCSI controllers), notably the hardware phase mismatch
- feature of the SYM53C896.
-
- Older versions of the 53C8XX chips are not supported by this
- driver. If your system uses either a 810 rev. < 16, a 815, or a 825
- rev. < 16 PCI SCSI processor, you must use the generic NCR53C8XX
- driver ("NCR53C8XX SCSI support" above) or configure both the
- NCR53C8XX and this SYM53C8XX drivers either as module or linked to
- the kernel image.
-
- When both drivers are linked into the kernel, the SYM53C8XX driver
- is called first at initialization and you can use the 'excl=ioaddr'
- driver boot option to exclude attachment of adapters by the
- SYM53C8XX driver. For example, entering
- 'sym53c8xx=excl:0xb400,excl=0xc000' at the lilo prompt prevents
- adapters at io address 0xb400 and 0xc000 from being attached by the
- SYM53C8XX driver, thus allowing the NCR53C8XX driver to attach them.
- The 'excl' option is also supported by the NCR53C8XX driver.
-
- Please read <file:drivers/scsi/README.ncr53c8xx> for more
- information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sym53c8xx.o.
-
-Synchronous transfer frequency in MHz
-CONFIG_SCSI_NCR53C8XX_SYNC
- The SCSI Parallel Interface-2 Standard defines 5 classes of transfer
- rates: FAST-5, FAST-10, FAST-20, FAST-40 and FAST-80. The numbers
- are respectively the maximum data transfer rates in mega-transfers
- per second for each class. For example, a FAST-20 Wide 16 device is
- able to transfer data at 20 million 16 bit packets per second for a
- total rate of 40 MB/s.
-
- You may specify 0 if you want to only use asynchronous data
- transfers. This is the safest and slowest option. Otherwise, specify
- a value between 5 and 80, depending on the capability of your SCSI
- controller. The higher the number, the faster the data transfer.
- Note that 80 should normally be ok since the driver decreases the
- value automatically according to the controller's capabilities.
-
- Your answer to this question is ignored for controllers with NVRAM,
- since the driver will get this information from the user set-up. It
- also can be overridden using a boot setup option, as follows
- (example): 'ncr53c8xx=sync:12' will allow the driver to negotiate
- for FAST-20 synchronous data transfer (20 mega-transfers per
- second).
-
- The normal answer therefore is not to go with the default but to
- select the maximum value 80 allowing the driver to use the maximum
- value supported by each controller. If this causes problems with
- your SCSI devices, you should come back and decrease the value.
-
- There is no safe option other than using good cabling, right
- terminations and SCSI conformant devices.
-
-Use normal IO
-CONFIG_SCSI_NCR53C8XX_IOMAPPED
- If you say Y here, the driver will use normal IO, as opposed to
- memory mapped IO. Memory mapped IO has less latency than normal IO
- and works for most Intel-based hardware. Under Linux/Alpha only
- normal IO is currently supported by the driver and so, this option
- has no effect on those systems.
-
- The normal answer therefore is N; try Y only if you encounter SCSI
- related problems.
-
-Not allow targets to disconnect
-CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
- This option is only provided for safety if you suspect some SCSI
- device of yours to not support properly the target-disconnect
- feature. In that case, you would say Y here. In general however, to
- not allow targets to disconnect is not reasonable if there is more
- than 1 device on a SCSI bus. The normal answer therefore is N.
-
-Default tagged command queue depth
-CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS
- "Tagged command queuing" is a feature of SCSI-2 which improves
- performance: the host adapter can send several SCSI commands to a
- device's queue even if previous commands haven't finished yet.
- Because the device is intelligent, it can optimize its operations
- (like head positioning) based on its own request queue. Some SCSI
- devices don't implement this properly; if you want to disable this
- feature, enter 0 or 1 here (it doesn't matter which).
-
- The default value is 8 and should be supported by most hard disks.
- This value can be overridden from the boot command line using the
- 'tags' option as follows (example):
- 'ncr53c8xx=tags:4/t2t3q16/t0u2q10' will set default queue depth to
- 4, set queue depth to 16 for target 2 and target 3 on controller 0
- and set queue depth to 10 for target 0 / lun 2 on controller 1.
-
- The normal answer therefore is to go with the default 8 and to use
- a boot command line option for devices that need to use a different
- command queue depth.
-
- There is no safe option other than using good SCSI devices.
-
-Maximum number of queued commands
-CONFIG_SCSI_NCR53C8XX_MAX_TAGS
- This option allows you to specify the maximum number of commands
- that can be queued to any device, when tagged command queuing is
- possible. The default value is 32. Minimum is 2, maximum is 64.
- Modern hard disks are able to support 64 tags and even more, but
- do not seem to be faster when more than 32 tags are being used.
-
- So, the normal answer here is to go with the default value 32 unless
- you are using very large hard disks with large cache (>= 1 MB) that
- are able to take advantage of more than 32 tagged commands.
-
- There is no safe option and the default answer is recommended.
-
-Assume boards are SYMBIOS compatible
-CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
- This option allows you to enable some features depending on GPIO
- wiring. These General Purpose Input/Output pins can be used for
- vendor specific features or implementation of the standard SYMBIOS
- features. Genuine SYMBIOS controllers use GPIO0 in output for
- controller LED and GPIO3 bit as a flag indicating
- singled-ended/differential interface. The Tekram DC-390U/F boards
- uses a different GPIO wiring.
-
- Your answer to this question is ignored if all your controllers have
- NVRAM, since the driver is able to detect the board type from the
- NVRAM format.
-
- If all the controllers in your system are genuine SYMBIOS boards or
- use BIOS and drivers from SYMBIOS, you would want to say Y here,
- otherwise N. N is the safe answer.
-
-Enable traffic profiling
-CONFIG_SCSI_NCR53C8XX_PROFILE
- This option allows you to enable profiling information gathering.
- These statistics are not very accurate due to the low frequency
- of the kernel clock (100 Hz on i386) and have performance impact
- on systems that use very fast devices.
-
- The normal answer therefore is N.
-
-Include support for the NCR PQS/PDS SCSI card
-CONFIG_SCSI_NCR53C8XX_PQS_PDS
- Say Y here if you have a special SCSI adapter produced by NCR
- corporation called a PCI Quad SCSI or PCI Dual SCSI. You do not need
- this if you do not have one of these adapters. However, since this
- device is detected as a specific PCI device, this option is quite
- safe.
-
- The common answer here is N, but answering Y is safe.
-
-Workbit NinjaSCSI-32Bi/UDE support
-CONFIG_SCSI_NSP32
- This is support for the Workbit NinjaSCSI-32Bi/UDE PCI/Cardbus
- SCSI host adapter. Please read the SCSI-HOWTO, available from
- <http://www.linuxdoc.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called nsp32.o.
-
-IBMMCA SCSI support
-CONFIG_SCSI_IBMMCA
- This is support for the IBM SCSI adapter found in many of the PS/2
- series computers. These machines have an MCA bus, so you need to
- answer Y to "MCA support" as well and read
- <file:Documentation/mca.txt>.
-
- If the adapter isn't found during boot (a common problem for models
- 56, 57, 76, and 77) you'll need to use the 'ibmmcascsi=<pun>' kernel
- option, where <pun> is the id of the SCSI subsystem (usually 7, but
- if that doesn't work check your reference diskette). Owners of
- model 95 with a LED-matrix-display can in addition activate some
- activity info like under OS/2, but more informative, by setting
- 'ibmmcascsi=display' as an additional kernel parameter. Try "man
- bootparam" or see the documentation of your boot loader about how to
- pass options to the kernel.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ibmmca.o.
-
-Standard SCSI-order
-CONFIG_IBMMCA_SCSI_ORDER_STANDARD
- In the PC-world and in most modern SCSI-BIOS-setups, SCSI-hard disks
- are assigned to the drive letters, starting with the lowest SCSI-id
- (physical number -- pun) to be drive C:, as seen from DOS and
- similar operating systems. When looking into papers describing the
- ANSI-SCSI-standard, this assignment of drives appears to be wrong.
- The SCSI-standard follows a hardware-hierarchy which says that id 7
- has the highest priority and id 0 the lowest. Therefore, the host
- adapters are still today everywhere placed as SCSI-id 7 by default.
- In the SCSI-standard, the drive letters express the priority of the
- disk. C: should be the hard disk, or a partition on it, with the
- highest priority. This must therefore be the disk with the highest
- SCSI-id (e.g. 6) and not the one with the lowest! IBM-BIOS kept the
- original definition of the SCSI-standard as also industrial- and
- process-control-machines, like VME-CPUs running under realtime-OSes
- (e.g. LynxOS, OS9) do.
-
- If you like to run Linux on your MCA-machine with the same
- assignment of hard disks as seen from e.g. DOS or OS/2 on your
- machine, which is in addition conformant to the SCSI-standard, you
- must say Y here. This is also necessary for MCA-Linux users who want
- to keep downward compatibility to older releases of the
- IBM-MCA-SCSI-driver (older than driver-release 2.00 and older than
- June 1997).
-
- If you like to have the lowest SCSI-id assigned as drive C:, as
- modern SCSI-BIOSes do, which does not conform to the standard, but
- is widespread and common in the PC-world of today, you must say N
- here. If unsure, say Y.
-
-Reset SCSI-devices at boot time
-CONFIG_IBMMCA_SCSI_DEV_RESET
- By default, SCSI-devices are reset when the machine is powered on.
- However, some devices exist, like special-control-devices,
- SCSI-CNC-machines, SCSI-printer or scanners of older type, that do
- not reset when switched on. If you say Y here, each device connected
- to your SCSI-bus will be issued a reset-command after it has been
- probed, while the kernel is booting. This may cause problems with
- more modern devices, like hard disks, which do not appreciate these
- reset commands, and can cause your system to hang. So say Y only if
- you know that one of your older devices needs it; N is the safe
- answer.
-
-NCR MCA 53C9x SCSI support
-CONFIG_SCSI_MCA_53C9X
- Some MicroChannel machines, notably the NCR 35xx line, use a SCSI
- controller based on the NCR 53C94. This driver will allow use of
- the controller on the 3550, and very possibly others.
-
- If you want to compile this as a module (= code which can be
- inserted and removed from the running kernel whenever you want), say
- M here and read <file:Documentation/modules.txt>. The module will
- be called mca_53c9x.o.
-
-Always IN2000 SCSI support
-CONFIG_SCSI_IN2000
- This is support for an ISA bus SCSI host adapter. You'll find more
- information in <file:drivers/scsi/README.in2000>. If it doesn't work
- out of the box, you may have to change the jumpers for IRQ or
- address selection.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called in2000.o.
-
-Initio 91XXU(W) SCSI support
-CONFIG_SCSI_INITIO
- This is support for the Initio 91XXU(W) SCSI host adapter. Please
- read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called initio.o.
-
-PAS16 SCSI support
-CONFIG_SCSI_PAS16
- This is support for a SCSI host adapter. It is explained in section
- 3.10 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/pas16.h>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pas16.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Initio INI-A100U2W SCSI support
-CONFIG_SCSI_INIA100
- This is support for the Initio INI-A100U2W SCSI host adapter.
- Please read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called a100u2w.o.
-
-PCI2000 support
-CONFIG_SCSI_PCI2000
- This is support for the PCI2000I EIDE interface card which acts as a
- SCSI host adapter. Please read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module called pci2000.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-PCI2220i support
-CONFIG_SCSI_PCI2220I
- This is support for the PCI2220i EIDE interface card which acts as a
- SCSI host adapter. Please read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module called pci2220i.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-PSI240i support
-CONFIG_SCSI_PSI240I
- This is support for the PSI240i EIDE interface card which acts as a
- SCSI host adapter. Please read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module called psi240i.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Qlogic FAS SCSI support
-CONFIG_SCSI_QLOGIC_FAS
- This is a driver for the ISA, VLB, and PCMCIA versions of the Qlogic
- FastSCSI! cards as well as any other card based on the FASXX chip
- (including the Control Concepts SCSI/IDE/SIO/PIO/FDC cards).
-
- This driver does NOT support the PCI versions of these cards. The
- PCI versions are supported by the Qlogic ISP driver ("Qlogic ISP
- SCSI support"), below.
-
- Information about this driver is contained in
- <file:drivers/scsi/README.qlogicfas>. You should also read the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called qlogicfas.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Qlogic ISP SCSI support
-CONFIG_SCSI_QLOGIC_ISP
- This driver works for all QLogic PCI SCSI host adapters (IQ-PCI,
- IQ-PCI-10, IQ_PCI-D) except for the PCI-basic card. (This latter
- card is supported by the "AM53/79C974 PCI SCSI" driver.)
-
- If you say Y here, make sure to choose "BIOS" at the question "PCI
- access mode".
-
- Please read the file <file:drivers/scsi/README.qlogicisp>. You
- should also read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called qlogicisp.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Qlogic ISP FC SCSI support
-CONFIG_SCSI_QLOGIC_FC
- This is a driver for the QLogic ISP2100 SCSI-FCP host adapter.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called qlogicfc.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Include loadable firmware in driver
-CONFIG_SCSI_QLOGIC_FC_FIRMWARE
- Say Y to include ISP2100 Fabric Initiator/Target Firmware, with
- expanded LUN addressing and FcTape (FCP-2) support, in the
- Qlogic QLA 1280 driver. This is required on some platforms.
-
-Qlogic QLA 1280 SCSI support
-CONFIG_SCSI_QLOGIC_1280
- Say Y if you have a QLogic ISP1x80/1x160 SCSI host adapter.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called qla1280.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Seagate ST-02 and Future Domain TMC-8xx SCSI support
-CONFIG_SCSI_SEAGATE
- These are 8-bit SCSI controllers; the ST-01 is also supported by
- this driver. It is explained in section 3.9 of the SCSI-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>. If it
- doesn't work out of the box, you may have to change some settings in
- <file:drivers/scsi/seagate.h>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called seagate.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Trantor T128/T128F/T228 SCSI support
-CONFIG_SCSI_T128
- This is support for a SCSI host adapter. It is explained in section
- 3.11 of the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/t128.h>. Note that Trantor was purchased by
- Adaptec, and some former Trantor products are being sold under the
- Adaptec name.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called t128.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-UltraStor SCSI support
-CONFIG_SCSI_ULTRASTOR
- This is support for the UltraStor 14F, 24F and 34F SCSI-2 host
- adapter family. This driver is explained in section 3.12 of the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. If it doesn't work out
- of the box, you may have to change some settings in
- <file:drivers/scsi/ultrastor.h>.
-
- Note that there is also another driver for the same hardware:
- "UltraStor 14F/34F support", above.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ultrastor.o.
-
-7000FASST SCSI support
-CONFIG_SCSI_7000FASST
- This driver supports the Western Digital 7000 SCSI host adapter
- family. Some information is in the source:
- <file:drivers/scsi/wd7000.c>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wd7000.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-ACARD SCSI support
-CONFIG_SCSI_ACARD
- This driver supports the ACARD 870U/W SCSI host adapter.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called atp870u.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support
-CONFIG_SCSI_EATA
- This driver supports all EATA/DMA-compliant SCSI host adapters. DPT
- ISA and all EISA I/O addresses are probed looking for the "EATA"
- signature. If you chose "BIOS" at the question "PCI access mode",
- the addresses of all the PCI SCSI controllers reported by the PCI
- subsystem are probed as well.
-
- You want to read the start of <file:drivers/scsi/eata.c> and the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- Note that there is also another driver for the same hardware
- available: "EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti,
- Alphatronix) support". You should say Y to only one of them.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called eata.o.
-
-enable tagged command queueing
-CONFIG_SCSI_EATA_TAGGED_QUEUE
- This is a feature of SCSI-2 which improves performance: the host
- adapter can send several SCSI commands to a device's queue even if
- previous commands haven't finished yet. Most EATA adapters negotiate
- this feature automatically with the device, even if your answer is
- N. The safe answer is N.
-
-enable elevator sorting
-CONFIG_SCSI_EATA_LINKED_COMMANDS
- This option enables elevator sorting for all probed SCSI disks and
- CD-ROMs. It definitely reduces the average seek distance when doing
- random seeks, but this does not necessarily result in a noticeable
- performance improvement: your mileage may vary...
- The safe answer is N.
-
-maximum number of queued commands
-CONFIG_SCSI_EATA_MAX_TAGS
- This specifies how many SCSI commands can be maximally queued for
- each probed SCSI device. You should reduce the default value of 16
- only if you have disks with buggy or limited tagged command support.
- Minimum is 2 and maximum is 62. This value is also the window size
- used by the elevator sorting option above. The effective value used
- by the driver for each probed SCSI device is reported at boot time.
-
-NCR53c406a SCSI support
-CONFIG_SCSI_NCR53C406A
- This is support for the NCR53c406a SCSI host adapter. For user
- configurable parameters, check out <file:drivers/scsi/NCR53c406a.c>
- in the kernel source. Also read the SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called NCR53c406.o.
-
-Symbios 53c416 SCSI support
-CONFIG_SCSI_SYM53C416
- This is support for the sym53c416 SCSI host adapter, the SCSI
- adapter that comes with some HP scanners. This driver requires that
- the sym53c416 is configured first using some sort of PnP
- configuration program (e.g. isapnp) or by a PnP aware BIOS. If you
- are using isapnp then you need to compile this driver as a module
- and then load it using insmod after isapnp has run. The parameters
- of the configured card(s) should be passed to the driver. The format
- is:
-
- insmod sym53c416 sym53c416=<base>,<irq> [sym53c416_1=<base>,<irq>]
-
- There is support for up to four adapters. If you want to compile
- this driver as a module ( = code which can be inserted in and
- removed from the running kernel whenever you want), say M here and
- read <file:Documentation/modules.txt>. The module will be called
- sym53c416.o.
-
-Simple 53c710 SCSI support (Compaq, NCR machines)
-CONFIG_SCSI_SIM710
- This is a simple driver for NCR53c710 based SCSI host adapters.
-
- More complex drivers for this chip are available ("NCR53c7,8xx SCSI
- support", above), but they require that the scsi chip be able to do
- DMA block moves between memory and on-chip registers, which can
- cause problems under certain conditions. This driver is designed to
- avoid these problems and is intended to work with any Intel machines
- using 53c710 chips, including various Compaq and NCR machines.
-
- Please read the comments at the top of the file
- <file:drivers/scsi/sim710.c> for more information.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sim710.o.
-
-Tekram DC390(T) and Am53/79C974 SCSI support
-CONFIG_SCSI_DC390T
- This driver supports PCI SCSI host adapters based on the Am53C974A
- chip, e.g. Tekram DC390(T), DawiControl 2974 and some onboard
- PCscsi/PCnet (Am53/79C974) solutions.
-
- Documentation can be found in <file:drivers/scsi/README.tmscsim>.
-
- Note that this driver does NOT support Tekram DC390W/U/F, which are
- based on NCR/Symbios chips. Use "NCR53C8XX SCSI support" for those.
- Also note that there is another generic Am53C974 driver,
- "AM53/79C974 PCI SCSI support" below. You can pick either one.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called tmscsim.o.
-
-Omit support for other Am53/79C974 based SCSI adapters
-CONFIG_SCSI_DC390T_NOGENSUPP
- If you say N here, the DC390(T) SCSI driver relies on the DC390
- EEPROM to get initial values for its settings, such as speed,
- termination, etc. If it can't find this EEPROM, it will use
- defaults or the user supplied boot/module parameters. For details
- on driver configuration see <file:drivers/scsi/README.tmscsim>.
-
- If you say Y here and if no EEPROM is found, the driver gives up and
- thus only supports Tekram DC390(T) adapters. This can be useful if
- you have a DC390(T) and another Am53C974 based adapter, which, for
- some reason, you want to drive with the other AM53C974 driver.
-
- If unsure, say N.
-
-AM53/79C974 PCI SCSI support
-CONFIG_SCSI_AM53C974
- This is support for the AM53/79C974 SCSI host adapters. Please read
- <file:drivers/scsi/README.AM53C974> for details. Also, the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, is for you.
-
- Note that there is another driver for AM53C974 based adapters:
- "Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support", above. You
- can pick either one.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called AM53C974.o.
-
-AMI MegaRAID support (old driver)
-CONFIG_SCSI_MEGARAID
- This driver supports the AMI MegaRAID 418, 428, 438, 466, 762, 490,
- 467, 471 and 493 SCSI host adapters.
-
- This is the old and very heavily tested driver but lacks features
- like clustering.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called megaraid.o.
-
-AMI MegaRAID support (new driver)
-CONFIG_SCSI_MEGARAID2
- This driver supports the AMI MegaRAID 418, 428, 438, 466, 762, 490,
- 467, 471, 493 and new Ultra320(518, 520, 531, 532) SCSI host adapters.
-
- This is the newer less tested but more featureful driver.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called megaraid2.o.
-
-Intel/ICP (former GDT SCSI Disk Array) RAID Controller support
-CONFIG_SCSI_GDTH
- Formerly called GDT SCSI Disk Array Controller Support.
-
- This is a driver for RAID/SCSI Disk Array Controllers (EISA/ISA/PCI)
- manufactured by Intel/ICP vortex (an Intel Company). It is documented
- in the kernel source in <file:drivers/scsi/gdth.c> and
- <file:drivers/scsi/gdth.h.>
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called gdth.o.
-
-IOMEGA parallel port (ppa - older drives)
-CONFIG_SCSI_PPA
- This driver supports older versions of IOMEGA's parallel port ZIP
- drive (a 100 MB removable media device).
-
- Note that you can say N here if you have the SCSI version of the ZIP
- drive: it will be supported automatically if you said Y to the
- generic "SCSI disk support", above.
-
- If you have the ZIP Plus drive or a more recent parallel port ZIP
- drive (if the supplied cable with the drive is labeled "AutoDetect")
- then you should say N here and Y to "IOMEGA parallel port (imm -
- newer drives)", below.
-
- For more information about this driver and how to use it you should
- read the file <file:drivers/scsi/README.ppa>. You should also read
- the SCSI-HOWTO, which is available from
- <http://www.tldp.org/docs.html#howto>. If you use this driver,
- you will still be able to use the parallel port for other tasks,
- such as a printer; it is safe to compile both drivers into the
- kernel.
-
- This driver is also available as a module which can be inserted in
- and removed from the running kernel whenever you want. To compile
- this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called ppa.o.
-
-IOMEGA parallel port (imm - newer drives)
-CONFIG_SCSI_IMM
- This driver supports newer versions of IOMEGA's parallel port ZIP
- drive (a 100 MB removable media device).
-
- Note that you can say N here if you have the SCSI version of the ZIP
- drive: it will be supported automatically if you said Y to the
- generic "SCSI disk support", above.
-
- If you have the ZIP Plus drive or a more recent parallel port ZIP
- drive (if the supplied cable with the drive is labeled "AutoDetect")
- then you should say Y here; if you have an older ZIP drive, say N
- here and Y to "IOMEGA Parallel Port (ppa - older drives)", above.
-
- For more information about this driver and how to use it you should
- read the file <file:drivers/scsi/README.ppa>. You should also read
- the SCSI-HOWTO, which is available from
- <http://www.tldp.org/docs.html#howto>. If you use this driver,
- you will still be able to use the parallel port for other tasks,
- such as a printer; it is safe to compile both drivers into the
- kernel.
-
- This driver is also available as a module which can be inserted in
- and removed from the running kernel whenever you want. To compile
- this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called imm.o.
-
-Force the Iomega ZIP drivers to use EPP-16
-CONFIG_SCSI_IZIP_EPP16
- EPP (Enhanced Parallel Port) is a standard for parallel ports which
- allows them to act as expansion buses that can handle up to 64
- peripheral devices.
-
- Some parallel port chipsets are slower than their motherboard, and
- so we have to control the state of the chipset's FIFO queue every
- now and then to avoid data loss. This will be done if you say Y
- here.
-
- Generally, saying Y is the safe option and slows things down a bit.
-
-Assume slow parallel port control register
-CONFIG_SCSI_IZIP_SLOW_CTR
- Some parallel ports are known to have excessive delays between
- changing the parallel port control register and good data being
- available on the parallel port data/status register. This option
- forces a small delay (1.0 usec to be exact) after changing the
- control register to let things settle out. Enabling this option may
- result in a big drop in performance but some very old parallel ports
- (found in 386 vintage machines) will not work properly.
-
- Generally, saying N is fine.
-
-SCSI debugging host simulator
-CONFIG_SCSI_DEBUG
- This is a host adapter simulator that can be programmed to simulate
- a large number of conditions that could occur on a real bus. The
- advantage is that many hard to reproduce problems can be tested in a
- controlled environment where there is reduced risk of losing
- important data. This is primarily of use to people trying to debug
- the middle and upper layers of the SCSI subsystem. If unsure, say N.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called scsi_debug.o.
-
-Fibre Channel and FC4 SCSI support
-CONFIG_FC4
- Fibre Channel is a high speed serial protocol mainly used to
- connect large storage devices to the computer; it is compatible with
- and intended to replace SCSI.
-
- This is an experimental support for storage arrays connected to your
- computer using optical fibre cables and the "X3.269-199X Fibre
- Channel Protocol for SCSI" specification. If you want to use this,
- you need to say Y here and to "SCSI support" as well as to the
- drivers for the storage array itself and for the interface adapter
- such as SOC or SOC+. This subsystem could even serve for IP
- networking, with some code extensions.
-
- If unsure, say N.
-
-Sun SOC/Sbus
-CONFIG_FC4_SOC
- Serial Optical Channel is an interface card with one or two Fibre
- Optic ports, each of which can be connected to a disk array. Note
- that if you have older firmware in the card, you'll need the
- microcode from the Solaris driver to make it work.
-
- This support is also available as a module called soc.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun SOC+ (aka SOCAL)
-CONFIG_FC4_SOCAL
- Serial Optical Channel Plus is an interface card with up to two
- Fibre Optic ports. This card supports FC Arbitrated Loop (usually
- A5000 or internal FC disks in E[3-6]000 machines through the
- Interface Board). You'll probably need the microcode from the
- Solaris driver to make it work.
-
- This support is also available as a module called socal.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-SparcSTORAGE Array 100 and 200 series
-CONFIG_SCSI_PLUTO
- If you never bought a disk array made by Sun, go with N.
-
- This support is also available as a module called pluto.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun Enterprise Network Array (A5000 and EX500)
-CONFIG_SCSI_FCAL
- This driver drives FC-AL disks connected through a Fibre Channel
- card using the drivers/fc4 layer (currently only SOCAL). The most
- common is either A5000 array or internal disks in E[3-6]000
- machines.
-
- This support is also available as a module called fcal.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>. If unsure, say N.
-
-Acorn SCSI card (aka30) support
-CONFIG_SCSI_ACORNSCSI_3
- This enables support for the Acorn SCSI card (aka30). If you have an
- Acorn system with one of these, say Y. If unsure, say N.
-
-Support SCSI 2 Tagged queueing
-CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE
- Say Y here to enable tagged queuing support on the Acorn SCSI card.
-
- This is a feature of SCSI-2 which improves performance: the host
- adapter can send several SCSI commands to a device's queue even if
- previous commands haven't finished yet. Some SCSI devices don't
- implement this properly, so the safe answer is N.
-
-Support SCSI 2 Synchronous Transfers
-CONFIG_SCSI_ACORNSCSI_SYNC
- Say Y here to enable synchronous transfer negotiation with all
- targets on the Acorn SCSI card.
-
- In general, this improves performance; however some SCSI devices
- don't implement it properly, so the safe answer is N.
-
-ARXE SCSI support
-CONFIG_SCSI_ARXESCSI
- Around 1991, Arxe Systems Limited released a high density floppy
- disc interface for the Acorn Archimedes range, to allow the use of
- HD discs from the then new A5000 on earlier models. This interface
- was either sold on its own or with an integral SCSI controller.
- Technical details on this NCR53c94-based device are available at
- <http://www.cryton.demon.co.uk/acornbits/scsi_arxe.html>
- Say Y here to compile in support for the SCSI controller.
-
-Oak SCSI support
-CONFIG_SCSI_OAK1
- This enables support for the Oak SCSI card. If you have an Acorn
- system with one of these, say Y. If unsure, say N.
-
-Cumana SCSI I support
-CONFIG_SCSI_CUMANA_1
- This enables support for the Cumana SCSI I card. If you have an
- Acorn system with one of these, say Y. If unsure, say N.
-
-Cumana SCSI II support
-CONFIG_SCSI_CUMANA_2
- This enables support for the Cumana SCSI II card. If you have an
- Acorn system with one of these, say Y. If unsure, say N.
-
-EcoSCSI support
-CONFIG_SCSI_ECOSCSI
- This enables support for the EcoSCSI card -- a small card that sits
- in the Econet socket. If you have an Acorn system with one of these,
- say Y. If unsure, say N.
-
-EESOX SCSI support
-CONFIG_SCSI_EESOXSCSI
- This enables support for the EESOX SCSI card. If you have an Acorn
- system with one of these, say Y, otherwise say N.
-
-PowerTec SCSI support
-CONFIG_SCSI_POWERTECSCSI
- This enables support for the Powertec SCSI card on Acorn systems. If
- you have one of these, say Y. If unsure, say N.
-
-IEEE 1394 (FireWire) support
-CONFIG_IEEE1394
- IEEE 1394 describes a high performance serial bus, which is also
- known as FireWire(tm) or i.Link(tm) and is used for connecting all
- sorts of devices (most notably digital video cameras) to your
- computer.
-
- If you have FireWire hardware and want to use it, say Y here. This
- is the core support only, you will also need to select a driver for
- your IEEE 1394 adapter.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ieee1394.o.
-
-Texas Instruments PCILynx support
-CONFIG_IEEE1394_PCILYNX
- Say Y here if you have an IEEE-1394 controller with the Texas
- Instruments PCILynx chip. Note: this driver is written for revision
- 2 of this chip and may not work with revision 0.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called pcilynx.o.
-
-Use local RAM on PCILynx board
-CONFIG_IEEE1394_PCILYNX_LOCALRAM
- This option makes the PCILynx driver use local RAM available on some
- PCILynx setups for Packet Control Lists. Local RAM is random access
- memory which resides on the PCILynx board as opposed to on your
- computer's motherboard. Local RAM may speed up command processing
- because no PCI transfers are necessary during use of the Packet
- Control Lists.
-
- Note that there are no known PCILynx systems providing local RAM
- except for the evaluation boards by Texas Instruments and that the
- PCILynx does not reliably report missing RAM. This means that it is
- dangerous to say Y here if you are not absolutely sure that your
- board provides 64KB of local RAM.
-
- If unsure, say N.
-
-Support for non-IEEE1394 local ports
-CONFIG_IEEE1394_PCILYNX_PORTS
- This option enables driver code to access the RAM, ROM and AUX ports
- of the PCILynx through character devices in /dev. If you don't know
- what this is about then you won't need it.
-
- If unsure, say N.
-
-#Adaptec AIC-5800 IEEE 1394 support
-#CONFIG_IEEE1394_AIC5800
-# Say Y here if you have a IEEE 1394 controller using the Adaptec
-# AIC-5800 chip. All Adaptec host adapters (89xx series) use this
-# chip, as well as miro's DV boards.
-#
-# If you want to compile this as a module ( = code which can be
-# inserted in and removed from the running kernel whenever you want),
-# say M here and read <file:Documentation/modules.txt>. The module
-# will be called aic5800.o.
-#
-OHCI-1394 (Open Host Controller Interface) support
-CONFIG_IEEE1394_OHCI1394
- Enable this driver if you have an IEEE 1394 controller based on the
- OHCI-1394 specification. The current driver is only tested with OHCI
- chipsets made by Texas Instruments and NEC. Most third-party vendors
- use one of these chipsets. It should work with any OHCI-1394
- compliant card, however.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ohci1394.o.
-
-OHCI-1394 Video support
-CONFIG_IEEE1394_VIDEO1394
- This option enables video device usage for OHCI-1394 cards. Enable
- this option only if you have an IEEE 1394 video device connected to
- an OHCI-1394 card.
-
-SBP-2 support (Harddisks etc.)
-CONFIG_IEEE1394_SBP2
- This option enables you to use SBP-2 devices connected to your IEEE
- 1394 bus. SBP-2 devices include harddrives and DVD devices.
-
-Raw IEEE 1394 I/O support
-CONFIG_IEEE1394_RAWIO
- Say Y here if you want support for the raw device. This is generally
- a good idea, so you should say Y here. The raw device enables
- direct communication of user programs with the IEEE 1394 bus and
- thus with the attached peripherals.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called raw1394.o.
-
-Excessive debugging output
-CONFIG_IEEE1394_VERBOSEDEBUG
- If you say Y here, you will get very verbose debugging logs from the
- subsystem which includes a dump of the header of every sent and
- received packet. This can amount to a high amount of data collected
- in a very short time which is usually also saved to disk by the
- system logging daemons.
-
- Say Y if you really want or need the debugging output, everyone else
- says N.
-
-CONFIG_IEEE1394_OUI_DB
- If you say Y here, then an OUI list (vendor unique ID's) will be
- compiled into the ieee1394 module. This doesn't really do much
- except being able to display the vendor of a hardware node. The
- downside is that it adds about 300k to the size of the module,
- or kernel (depending on whether you compile ieee1394 as a
- module, or static in the kernel).
-
- This option is not needed for userspace programs like gscanbus
- to show this information.
-
-Network device support
-CONFIG_NETDEVICES
- You can say N here if you don't intend to connect your Linux box to
- any other computer at all or if all your connections will be over a
- telephone line with a modem either via UUCP (UUCP is a protocol to
- forward mail and news between unix hosts over telephone lines; read
- the UUCP-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>) or dialing up a shell
- account or a BBS, even using term (term is a program which gives you
- almost full Internet connectivity if you have a regular dial up
- shell account on some Internet connected Unix computer. Read
- <http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html>).
-
- You'll have to say Y if your computer contains a network card that
- you want to use under Linux (make sure you know its name because you
- will be asked for it and read the Ethernet-HOWTO (especially if you
- plan to use more than one network card under Linux)) or if you want
- to use SLIP (Serial Line Internet Protocol is the protocol used to
- send Internet traffic over telephone lines or null modem cables) or
- CSLIP (compressed SLIP) or PPP (Point to Point Protocol, a better
- and newer replacement for SLIP) or PLIP (Parallel Line Internet
- Protocol is mainly used to create a mini network by connecting the
- parallel ports of two local machines) or AX.25/KISS (protocol for
- sending Internet traffic over amateur radio links).
-
- Make sure to read the NET-3-HOWTO. Eventually, you will have to read
- Olaf Kirch's excellent and free book "Network Administrator's
- Guide", to be found in <http://www.tldp.org/docs.html#guide>. If
- unsure, say Y.
-
-Dummy net driver support
-CONFIG_DUMMY
- This is essentially a bit-bucket device (i.e. traffic you send to
- this device is consigned into oblivion) with a configurable IP
- address. It is most commonly used in order to make your currently
- inactive SLIP address seem like a real address for local programs.
- If you use SLIP or PPP, you might want to say Y here. Since this
- thing often comes in handy, the default is Y. It won't enlarge your
- kernel either. What a deal. Read about it in the Network
- Administrator's Guide, available from
- <http://www.tldp.org/docs.html#guide>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called dummy.o. If you want to use more than one dummy
- device at a time, you need to compile this driver as a module.
- Instead of 'dummy', the devices will then be called 'dummy0',
- 'dummy1' etc.
-
-Bonding driver support
-CONFIG_BONDING
- Say 'Y' or 'M' if you wish to be able to 'bond' multiple Ethernet
- Channels together. This is called 'Etherchannel' by Cisco,
- 'Trunking' by Sun, and 'Bonding' in Linux.
-
- If you have two Ethernet connections to some other computer, you can
- make them behave like one double speed connection using this driver.
- Naturally, this has to be supported at the other end as well, either
- with a similar Bonding Linux driver, a Cisco 5500 switch or a
- SunTrunking SunSoft driver.
-
- This is similar to the EQL driver, but it merges Ethernet segments
- instead of serial lines.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called bonding.o.
-
-SLIP (serial line) support
-CONFIG_SLIP
- Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to
- connect to your Internet service provider or to connect to some
- other local Unix box or if you want to configure your Linux box as a
- Slip/CSlip server for other people to dial in. SLIP (Serial Line
- Internet Protocol) is a protocol used to send Internet traffic over
- serial connections such as telephone lines or null modem cables;
- nowadays, the protocol PPP is more commonly used for this same
- purpose.
-
- Normally, your access provider has to support SLIP in order for you
- to be able to use it, but there is now a SLIP emulator called SLiRP
- around (available from
- <ftp://ibiblio.org/pub/Linux/system/network/serial/>) which
- allows you to use SLIP over a regular dial up shell connection. If
- you plan to use SLiRP, make sure to say Y to CSLIP, below. The
- NET-3-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, explains how to
- configure SLIP. Note that you don't need this option if you just
- want to run term (term is a program which gives you almost full
- Internet connectivity if you have a regular dial up shell account on
- some Internet connected Unix computer. Read
- <http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html>). SLIP
- support will enlarge your kernel by about 4 KB. If unsure, say N.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called slip.o.
-
-CSLIP compressed headers
-CONFIG_SLIP_COMPRESSED
- This protocol is faster than SLIP because it uses compression on the
- TCP/IP headers (not on the data itself), but it has to be supported
- on both ends. Ask your access provider if you are not sure and
- answer Y, just in case. You will still be able to use plain SLIP. If
- you plan to use SLiRP, the SLIP emulator (available from
- <ftp://ibiblio.org/pub/Linux/system/network/serial/>) which
- allows you to use SLIP over a regular dial up shell connection, you
- definitely want to say Y here. The NET-3-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, explains how to configure
- CSLIP. This won't enlarge your kernel.
-
-Keepalive and linefill
-CONFIG_SLIP_SMART
- Adds additional capabilities to the SLIP driver to support the
- RELCOM line fill and keepalive monitoring. Ideal on poor quality
- analogue lines.
-
-Six bit SLIP encapsulation
-CONFIG_SLIP_MODE_SLIP6
- Just occasionally you may need to run IP over hostile serial
- networks that don't pass all control characters or are only seven
- bit. Saying Y here adds an extra mode you can use with SLIP:
- "slip6". In this mode, SLIP will only send normal ASCII symbols over
- the serial device. Naturally, this has to be supported at the other
- end of the link as well. It's good enough, for example, to run IP
- over the async ports of a Camtec JNT Pad. If unsure, say N.
-
-PPP (point-to-point protocol) support
-CONFIG_PPP
- PPP (Point to Point Protocol) is a newer and better SLIP. It serves
- the same purpose: sending Internet traffic over telephone (and other
- serial) lines. Ask your access provider if they support it, because
- otherwise you can't use it; most Internet access providers these
- days support PPP rather than SLIP.
-
- To use PPP, you need an additional program called pppd as described
- in the PPP-HOWTO, available at
- <http://www.tldp.org/docs.html#howto>. Make sure that you have
- the version of pppd recommended in <file:Documentation/Changes>.
- The PPP option enlarges your kernel by about 16 KB.
-
- There are actually two versions of PPP: the traditional PPP for
- asynchronous lines, such as regular analog phone lines, and
- synchronous PPP which can be used over digital ISDN lines for
- example. If you want to use PPP over phone lines or other
- asynchronous serial lines, you need to say Y (or M) here and also to
- the next option, "PPP support for async serial ports". For PPP over
- synchronous lines, you should say Y (or M) here and to "Support
- synchronous PPP", below.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you said Y to "Version information on all symbols" above, then
- you cannot compile the PPP driver into the kernel; you can then only
- compile it as a module. The module will be called ppp_generic.o.
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>.
-
-PPP multilink support
-CONFIG_PPP_MULTILINK
- PPP multilink is a protocol (defined in RFC 1990) which allows you
- to combine several (logical or physical) lines into one logical PPP
- connection, so that you can utilize your full bandwidth.
-
- This has to be supported at the other end as well and you need a
- version of the pppd daemon which understands the multilink protocol.
-
- If unsure, say N.
-
-PPP filtering
-CONFIG_PPP_FILTER
- Say Y here if you want to be able to filter the packets passing over
- PPP interfaces. This allows you to control which packets count as
- activity (i.e. which packets will reset the idle timer or bring up
- a demand-dialled link) and which packets are to be dropped entirely.
- You need to say Y here if you wish to use the pass-filter and
- active-filter options to pppd.
-
- If unsure, say N.
-
-PPP support for async serial ports
-CONFIG_PPP_ASYNC
- Say Y (or M) here if you want to be able to use PPP over standard
- asynchronous serial ports, such as COM1 or COM2 on a PC. If you use
- a modem (not a synchronous or ISDN modem) to contact your ISP, you
- need this option.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ppp_async.o.
-
- If unsure, say Y.
-
-PPP support for sync tty ports
-CONFIG_PPP_SYNC_TTY
- Say Y (or M) here if you want to be able to use PPP over synchronous
- (HDLC) tty devices, such as the SyncLink adapter. These devices
- are often used for high-speed leased lines like T1/E1.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ppp_synctty.o.
-
-PPP Deflate compression
-CONFIG_PPP_DEFLATE
- Support for the Deflate compression method for PPP, which uses the
- Deflate algorithm (the same algorithm that gzip uses) to compress
- each PPP packet before it is sent over the wire. The machine at the
- other end of the PPP link (usually your ISP) has to support the
- Deflate compression method as well for this to be useful. Even if
- they don't support it, it is safe to say Y here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ppp_deflate.o.
-
-PPP BSD-Compress compression
-CONFIG_PPP_BSDCOMP
- Support for the BSD-Compress compression method for PPP, which uses
- the LZW compression method to compress each PPP packet before it is
- sent over the wire. The machine at the other end of the PPP link
- (usually your ISP) has to support the BSD-Compress compression
- method as well for this to be useful. Even if they don't support it,
- it is safe to say Y here.
-
- The PPP Deflate compression method ("PPP Deflate compression",
- above) is preferable to BSD-Compress, because it compresses better
- and is patent-free.
-
- Note that the BSD compression code will always be compiled as a
- module; it is called bsd_comp.o and will show up in the directory
- modules once you have said "make modules". If unsure, say N.
-
-PPP over Ethernet
-CONFIG_PPPOE
- Support for PPP over Ethernet.
-
- This driver requires the current pppd from the "ppp" CVS repository
- on cvs.samba.org. The required support will be present in the next
- ppp release (2.4.2).
-
-Wireless LAN (non-hamradio)
-CONFIG_NET_RADIO
- Support for wireless LANs and everything having to do with radio,
- but not with amateur radio or FM broadcasting.
-
- Saying Y here also enables the Wireless Extensions (creates
- /proc/net/wireless and enables ifconfig access). The Wireless
- Extension is a generic API allowing a driver to expose to the user
- space configuration and statistics specific to common Wireless LANs.
- The beauty of it is that a single set of tool can support all the
- variations of Wireless LANs, regardless of their type (as long as
- the driver supports Wireless Extension). Another advantage is that
- these parameters may be changed on the fly without restarting the
- driver (or Linux). If you wish to use Wireless Extensions with
- wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch
- the tools from
- <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
-
- Some user-level drivers for scarab devices which don't require
- special kernel support are available from
- <ftp://shadow.cabi.net/pub/Linux/>.
-
-STRIP (Metricom Starmode radio IP)
-CONFIG_STRIP
- Say Y if you have a Metricom radio and intend to use Starmode Radio
- IP. STRIP is a radio protocol developed for the MosquitoNet project
- (on the WWW at <http://mosquitonet.stanford.edu/>) to send Internet
- traffic using Metricom radios. Metricom radios are small, battery
- powered, 100kbit/sec packet radio transceivers, about the size and
- weight of a cellular telephone. (You may also have heard them called
- "Metricom modems" but we avoid the term "modem" because it misleads
- many people into thinking that you can plug a Metricom modem into a
- phone line and use it as a modem.)
-
- You can use STRIP on any Linux machine with a serial port, although
- it is obviously most useful for people with laptop computers. If you
- think you might get a Metricom radio in the future, there is no harm
- in saying Y to STRIP now, except that it makes the kernel a bit
- bigger.
-
- You can also compile this as a module ( = code which can be inserted
- in and removed from the running kernel whenever you want), say M
- here and read <file:Documentation/modules.txt>. The module will be
- called strip.o.
-
-AT&T WaveLAN & DEC RoamAbout DS support
-CONFIG_WAVELAN
- The Lucent WaveLAN (formerly NCR and AT&T; or DEC RoamAbout DS) is
- a Radio LAN (wireless Ethernet-like Local Area Network) using the
- radio frequencies 900 MHz and 2.4 GHz.
-
- This driver support the ISA version of the WaveLAN card. A separate
- driver for the PCMCIA (PC-card) hardware is available in David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location).
-
- If you want to use an ISA WaveLAN card under Linux, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Some more specific
- information is contained in
- <file:Documentation/networking/wavelan.txt> and in the source code
- <file:drivers/net/wavelan.p.h>.
-
- You will also need the wireless tools package available from
- <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
- Please read the man pages contained therein.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wavelan.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Aironet Arlan 655 & IC2200 DS support
-CONFIG_ARLAN
- Aironet makes Arlan, a class of wireless LAN adapters. These use the
- www.Telxon.com chip, which is also used on several similar cards.
- This driver is tested on the 655 and IC2200 series cards. Look at
- <http://www.ylenurme.ee/~elmer/655/> for the latest information.
-
- The driver is built as two modules, arlan and arlan-proc. The latter
- is the /proc interface and is not needed most of time.
-
- On some computers the card ends up in non-valid state after some
- time. Use a ping-reset script to clear it.
-
-Aironet 4500/4800 series adapters
-CONFIG_AIRONET4500
- www.aironet.com (recently bought by Cisco) makes these 802.11 DS
- adapters. Driver by Elmer Joandi (elmer@ylenurme.ee).
-
- Say Y here if you have such an adapter, and then say Y below to
- the option that applies to your particular type of card (PCI, ISA,
- or PCMCIA).
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aironet4500_core.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>.
-
- quick config parameters:
- SSID=tsunami - "The Password"
- adhoc=1 there are no Access Points around
- master=1 Adhoc master (the one who creates network
- sync)
- slave=1 Adhoc slave (btw, it is still forming own net
- sometimes, and has problems with firmware...
- change IbssJoinNetTimeout from /proc...)
- channel=1..? meaningful in adhoc mode
-
- If you have problems with screwing up card, both_bap_lock=1 is a
- conservative value (performance hit 15%).
-
- All other parameters can be set via the proc interface.
-
-Aironet 4500/4800 ISA/PCI/PNP/365 support
-CONFIG_AIRONET4500_NONCS
- If you have an ISA, PCI or PCMCIA Aironet 4500/4800 wireless LAN
- card, say Y here, and then also to the options below that apply
- to you.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aironet4500_card.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Aironet 4500/4800 PNP support
-CONFIG_AIRONET4500_PNP
- If you have an ISA Aironet 4500/4800 card which you want to use in
- PnP (Plug and Play) mode, say Y here. This is the recommended mode
- for ISA cards. Remember however to enable the PnP jumper on the
- board if you say Y here.
-
-Aironet 4500/4800 PCI support
-CONFIG_AIRONET4500_PCI
- If you have an PCI Aironet 4500/4800 card, say Y here.
-
-Aironet 4500/4800 ISA broken support
-CONFIG_AIRONET4500_ISA
- If you have an ISA Aironet 4500/4800 card which you want to run in
- non-PnP mode, say Y here. This is not recommended and does not work
- correctly at this point. Say N.
-
-Aironet 4500/4800 I365 broken support
-CONFIG_AIRONET4500_I365
- If you have a PCMCIA Aironet 4500/4800 card which you want to use
- without the standard PCMCIA cardservices provided by the pcmcia-cs
- package, say Y here. This is not recommended, so say N.
-
-Aironet 4500/4800 PCMCIA support
-CONFIG_AIRONET4500_CS
- Say Y here if you have a PCMCIA Aironet 4500/4800 card which you
- want to use with the standard PCMCIA cardservices provided by the
- pcmcia-cs package.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aironet4500_cs.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Aironet 4500/4800 PROC interface
-CONFIG_AIRONET4500_PROC
- If you say Y here (and to the "/proc file system" below), you will
- be able to configure your Aironet card via the
- /proc/sys/aironet4500 interface.
-
- Additional info: look in <file:drivers/net/aironet4500_rid.c>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aironet4500_proc.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- NOTE: the proc interface uses a lot of memory, so it is recommended
- to compile it as a module and remove the module after
- configuration.
-
-LAPB over Ethernet driver
-CONFIG_LAPBETHER
- This is a driver for a pseudo device (typically called /dev/lapb0)
- which allows you to open an LAPB point-to-point connection to some
- other computer on your Ethernet network. In order to do this, you
- need to say Y or M to the driver for your Ethernet card as well as
- to "LAPB Data Link Driver".
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called lapbether.o. If unsure, say N.
-
-X.25 async driver
-CONFIG_X25_ASY
- This is a driver for sending and receiving X.25 frames over regular
- asynchronous serial lines such as telephone lines equipped with
- ordinary modems. Experts should note that this driver doesn't
- currently comply with the asynchronous HDLS framing protocols in
- CCITT recommendation X.25.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called x25_asy.o. If unsure, say N.
-
-PCMCIA network device support
-CONFIG_NET_PCMCIA
- Say Y if you would like to include support for any PCMCIA or CardBus
- network adapters, then say Y to the driver for your particular card
- below. PCMCIA- or PC-cards are credit-card size devices often used
- with laptops computers; CardBus is the newer and faster version of
- PCMCIA.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If unsure, say N.
-
-3Com 3c589 PCMCIA support
-CONFIG_PCMCIA_3C589
- Say Y here if you intend to attach a 3Com 3c589 or compatible PCMCIA
- (PC-card) Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c589_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-3Com 3c574 PCMCIA support
-CONFIG_PCMCIA_3C574
- Say Y here if you intend to attach a 3Com 3c574 or compatible PCMCIA
- (PC-card) Fast Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c574_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-Fujitsu FMV-J18x PCMCIA support
-CONFIG_PCMCIA_FMVJ18X
- Say Y here if you intend to attach a Fujitsu FMV-J18x or compatible
- PCMCIA (PC-card) Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called fmvj18x_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-NE2000 compatible PCMCIA support
-CONFIG_PCMCIA_PCNET
- Say Y here if you intend to attach an NE2000 compatible PCMCIA
- (PC-card) Ethernet or Fast Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pcnet_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-Asix AX88190 PCMCIA support
-CONFIG_PCMCIA_AXNET
- Say Y here if you intend to attach an Asix AX88190-based PCMCIA
- (PC-card) Fast Ethernet card to your computer. These cards are
- nearly NE2000 compatible but need a separate driver due to a few
- misfeatures.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called axnet_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-New Media PCMCIA support
-CONFIG_PCMCIA_NMCLAN
- Say Y here if you intend to attach a New Media Ethernet or LiveWire
- PCMCIA (PC-card) Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called nmclan_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-SMC 91Cxx PCMCIA support
-CONFIG_PCMCIA_SMC91C92
- Say Y here if you intend to attach an SMC 91Cxx compatible PCMCIA
- (PC-card) Ethernet or Fast Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smc91c92_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-Xircom 16-bit PCMCIA support
-CONFIG_PCMCIA_XIRC2PS
- Say Y here if you intend to attach a Xircom 16-bit PCMCIA (PC-card)
- Ethernet or Fast Ethernet card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called xirc2ps_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-COM20020 ARCnet PCMCIA support
-CONFIG_ARCNET_COM20020_CS
- Say Y here if you intend to attach this type of ARCnet PCMCIA card
- to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called com20020_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-IBM PCMCIA Token Ring adapter support
-CONFIG_PCMCIA_IBMTR
- Say Y here if you intend to attach this type of Token Ring PCMCIA
- card to your computer. You then also need to say Y to "Token Ring
- driver support".
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ibmtr_cs.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Xircom Tulip-like CardBus support (old driver)
-CONFIG_PCMCIA_XIRTULIP
- This driver is for the Digital "Tulip" Ethernet CardBus adapters.
- It should work with most DEC 21*4*-based chips/ethercards, as well
- as with work-alike chips from Lite-On (PNIC) and Macronix (MXIC) and
- ASIX.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called xircom_tulip_cb.o. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say N.
-
-Xircom CardBus support (new driver)
-CONFIG_PCMCIA_XIRCOM
- This driver is for the Digital "Tulip" Ethernet CardBus adapters.
- It should work with most DEC 21*4*-based chips/ethercards, as well
- as with work-alike chips from Lite-On (PNIC) and Macronix (MXIC) and
- ASIX.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called xircom_cb.o. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. If unsure, say N.
-
-PCMCIA Wireless LAN
-CONFIG_NET_PCMCIA_RADIO
- Say Y here if you would like to use a PCMCIA (PC-card) device to
- connect to a wireless local area network. Then say Y to the driver
- for your particular card below.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
-Hermes chipset 802.11b support (Orinoco/Prism2/Symbol cards)
-CONFIG_HERMES
- A driver for 802.11b wireless cards based based on the "Hermes" or
- Intersil HFA384x (Prism 2) MAC controller. This includes the vast
- majority of the PCMCIA 802.11b cards (which are nearly all rebadges)
- - except for the Cisco/Aironet cards. Cards supported include the
- Apple Airport (not a PCMCIA card), WavelanIEEE/Orinoco,
- Cabletron/EnteraSys Roamabout, ELSA AirLancer, MELCO Buffalo, Avaya,
- IBM High Rate Wireless, Farralon Syyline, Samsung MagicLAN, Netgear
- MA401, LinkSys WPC-11, D-Link DWL-650, 3Com AirConnect, Intel
- PRO/Wireless, and Symbol Spectrum24 High Rate amongst others.
-
- This option includes the guts of the driver, but in order to
- actually use a card you will also need to enable support for PCMCIA
- Hermes cards, PLX9052 based PCI adaptors or the Apple Airport below.
-
- You will also very likely also need the Wireless Tools in order to
- configure your card and that /etc/pcmcia/wireless.opts works :
- <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called hermes.o.
-
-Hermes 802.11b in PLX9052 based PCI adaptor support
-CONFIG_PLX_HERMES
- Enable support for PCMCIA cards supported by the "Hermes" (aka
- orinoco_cs) driver when used in PLX9052 based PCI adaptors. These
- adaptors are not a full PCMCIA controller but act as a more limited
- PCI <-> PCMCIA bridge. Several vendors sell such adaptors so that
- 802.11b PCMCIA cards can be used in desktop machines. The Netgear
- MA301 is such an adaptor.
-
- Support for these adaptors is so far still incomplete and buggy.
- You have been warned.
-
-Hermes 802.11b in TMD7160/NCP130 based PCI adaptor support
-CONFIG_TMD_HERMES
- Enable support for PCMCIA cards supported by the "Hermes" (aka
- orinoco) driver when used in TMD7160 based PCI adaptors. These
- adaptors are not a full PCMCIA controller but act as a more limited
- PCI <-> PCMCIA bridge. Several vendors sell such adaptors so that
- 802.11b PCMCIA cards can be used in desktop machines.
-
- Support for these adaptors is so far still incomplete and buggy.
- You have been warned.
-
-Prism 2.5 PCI 802.11b adaptor support
-CONFIG_PCI_HERMES
- Enable support for PCI and mini-PCI 802.11b wireless NICs based on
- the Prism 2.5 chipset. These are true PCI cards, not the 802.11b
- PCMCIA cards bundled with PCI<->PCMCIA adaptors which are also
- common. Some of the built-in wireless adaptors in laptops are of
- this variety.
-
-Hermes support (Orinoco/WavelanIEEE/PrismII/Symbol 802.11b cards)
-CONFIG_PCMCIA_HERMES
- A driver for "Hermes" chipset based PCMCIA wireless adaptors, such
- as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/
- EnteraSys RoamAbout 802.11, ELSA Airlancer, Melco Buffalo and
- others). It should also be usable on various Prism II based cards
- such as the Linksys, D-Link and Farallon Skyline. It should also
- work on Symbol cards such as the 3Com AirConnect and Ericsson WLAN.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- You will also very likely also need the Wireless Tools in order to
- configure your card and that /etc/pcmcia/wireless.opts works:
- <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called orinoco_cs.o.
-
-Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards
-CONFIG_AIRO
- This is the standard Linux driver to support Cisco/Aironet ISA and
- PCI 802.11 wireless cards.
- It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
- - with or without encryption) as well as card before the Cisco
- acquisition (Aironet 4500, Aironet 4800, Aironet 4800B).
-
- This driver support both the standard Linux Wireless Extensions
- and Cisco proprietary API, so both the Linux Wireless Tools and the
- Cisco Linux utilities can be used to configure the card.
-
- The driver can be compiled as a module and will be named "airo.o".
-
-Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards
-CONFIG_AIRO_CS
- This is the standard Linux driver to support Cisco/Aironet PCMCIA
- 802.11 wireless cards. This driver is the same as the Aironet
- driver part of the Linux Pcmcia package.
- It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
- - with or without encryption) as well as card before the Cisco
- acquisition (Aironet 4500, Aironet 4800, Aironet 4800B). It also
- supports OEM of Cisco such as the DELL TrueMobile 4800 and Xircom
- 802.11b cards.
-
- This driver support both the standard Linux Wireless Extensions
- and Cisco proprietary API, so both the Linux Wireless Tools and the
- Cisco Linux utilities can be used to configure the card.
-
- To use your PC-cards, you will need supporting software from David
- Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
- for location). You also want to check out the PCMCIA-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called airo_cs.o.
-
-Aviator/Raytheon 2.4MHz wireless support
-CONFIG_PCMCIA_RAYCS
- Say Y here if you intend to attach an Aviator/Raytheon PCMCIA
- (PC-card) wireless Ethernet networking card to your computer.
- Please read the file <file:Documentation/networking/ray_cs.txt> for
- details.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ray_cs.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-Apple Airport support (built-in)
-CONFIG_APPLE_AIRPORT
- Say Y here to support the Airport 802.11b wireless Ethernet hardware
- built into the Macintosh iBook and other recent PowerPC-based
- Macintosh machines. This is essentially a Lucent Orinoco card with
- a non-standard interface
-
-Xircom Netwave AirSurfer wireless support
-CONFIG_PCMCIA_NETWAVE
- Say Y here if you intend to attach this type of PCMCIA (PC-card)
- wireless Ethernet networking card to your computer.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called netwave_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-AT&T/Lucent Wavelan wireless support
-CONFIG_PCMCIA_WAVELAN
- Say Y here if you intend to attach an AT&T/Lucent Wavelan PCMCIA
- (PC-card) wireless Ethernet networking card to your computer. This
- driver is for the non-IEEE-802.11 Wavelan cards.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wavelan_cs.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
- If unsure, say N.
-
-PLIP (parallel port) support
-CONFIG_PLIP
- PLIP (Parallel Line Internet Protocol) is used to create a
- reasonably fast mini network consisting of two (or, rarely, more)
- local machines. A PLIP link from a Linux box is a popular means to
- install a Linux distribution on a machine which doesn't have a
- CD-ROM drive (a minimal system has to be transferred with floppies
- first). The kernels on both machines need to have this PLIP option
- enabled for this to work.
-
- The PLIP driver has two modes, mode 0 and mode 1. The parallel
- ports (the connectors at the computers with 25 holes) are connected
- with "null printer" or "Turbo Laplink" cables which can transmit 4
- bits at a time (mode 0) or with special PLIP cables, to be used on
- bidirectional parallel ports only, which can transmit 8 bits at a
- time (mode 1); you can find the wiring of these cables in
- <file:Documentation/networking/PLIP.txt>. The cables can be up to
- 15m long. Mode 0 works also if one of the machines runs DOS/Windows
- and has some PLIP software installed, e.g. the Crynwr PLIP packet
- driver (<http://oak.oakland.edu/simtel.net/msdos/pktdrvr-pre.html>)
- and winsock or NCSA's telnet.
-
- If you want to use PLIP, say Y and read the PLIP mini-HOWTO as well
- as the NET-3-HOWTO, both available from
- <http://www.tldp.org/docs.html#howto>. Note that the PLIP
- protocol has been changed and this PLIP driver won't work together
- with the PLIP support in Linux versions 1.0.x. This option enlarges
- your kernel by about 8 KB.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called plip.o. If unsure, say Y or M, in case you buy a laptop
- later.
-
-EQL (serial line load balancing) support
-CONFIG_EQUALIZER
- If you have two serial connections to some other computer (this
- usually requires two modems and two telephone lines) and you use
- SLIP (the protocol for sending Internet traffic over telephone
- lines) or PPP (a better SLIP) on them, you can make them behave like
- one double speed connection using this driver. Naturally, this has
- to be supported at the other end as well, either with a similar EQL
- Linux driver or with a Livingston Portmaster 2e.
-
- Say Y if you want this and read
- <file:Documentation/networking/eql.txt>. You may also want to read
- section 6.2 of the NET-3-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called eql.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-Universal TUN/TAP device driver support
-CONFIG_TUN
- TUN/TAP provides packet reception and transmission for user space
- programs. It can be viewed as a simple Point-to-Point or Ethernet
- device, which instead of receiving packets from a physical media,
- receives them from user space program and instead of sending packets
- via physical media writes them to the user space program.
-
- When a program opens /dev/net/tun, driver creates and registers
- corresponding net device tunX or tapX. After a program closed above
- devices, driver will automatically delete tunXX or tapXX device and
- all routes corresponding to it.
-
- Please read <file:Documentation/networking/tuntap.txt> for more
- information.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tun.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If you don't know what to use this for, you don't need it.
-
-Ethertap network tap (OBSOLETE)
-CONFIG_ETHERTAP
- If you say Y here (and have said Y to "Kernel/User network link
- driver", above) and create a character special file /dev/tap0 with
- major number 36 and minor number 16 using mknod ("man mknod"), you
- will be able to have a user space program read and write raw
- Ethernet frames from/to that special file. tap0 can be configured
- with ifconfig and route like any other Ethernet device but it is not
- connected to any physical LAN; everything written by the user to
- /dev/tap0 is treated by the kernel as if it had come in from a LAN
- to the device tap0; everything the kernel wants to send out over the
- device tap0 can instead be read by the user from /dev/tap0: the user
- mode program replaces the LAN that would be attached to an ordinary
- Ethernet device. Please read the file
- <file:Documentation/networking/ethertap.txt> for more information.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ethertap.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If you don't know what to use this for, you don't need it.
-
-Sealevel Systems 4021 support
-CONFIG_SEALEVEL_4021
- This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.
-
- This driver can only be compiled as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to do that, say M here. The module will be called
- sealevel.o.
-
-TMPTX3912/PR31700 serial port support
-CONFIG_SERIAL_TX3912
- The TX3912 is a Toshiba RISC processor based o the MIPS 3900 core;
- see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>.
- Say Y here to enable kernel support for the on-board serial port.
-
-Console on TMPTX3912/PR31700 serial port
-CONFIG_SERIAL_TX3912_CONSOLE
- The TX3912 is a Toshiba RISC processor based o the MIPS 3900 core;
- see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>.
- Say Y here to direct console I/O to the on-board serial port.
-
-Enable Au1000 serial console
-CONFIG_AU1000_SERIAL_CONSOLE
- If you have an Alchemy AU1000 processor (MIPS based) and you want
- to use a console on a serial port, say Y. Otherwise, say N.
-
-Enable Au1000 UART Support
-CONFIG_AU1000_UART
- If you have an Alchemy AU1000 processor (MIPS based) and you want
- to use serial ports, say Y. Otherwise, say N.
-
-SyncLink HDLC/SYNCPPP support
-CONFIG_SYNCLINK_SYNCPPP
- Enables HDLC/SYNCPPP support for the SyncLink WAN driver.
- Normally the SyncLink WAN driver works with the main PPP
- driver (ppp.c) and pppd program. HDLC/SYNCPPP support allows use
- of the Cisco HDLC/PPP driver (syncppp.c).
- The SyncLink WAN driver (in character devices) must also be enabled.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called syncppp.o.
-
-FarSync T-Series X.21 (and V.35/V.24) cards
-CONFIG_FARSYNC
- This driver supports the FarSync T-Series X.21 (and V.35/V.24) cards
- from FarSite Communications Ltd.
- Synchronous communication is supported on all ports at speeds up to
- 8Mb/s (128K on V.24) using synchronous PPP, Cisco HDLC, raw HDLC,
- Frame Relay or X.25/LAPB.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want)
- say M here and read <file:Documentation/modules.txt>.
- The module will be called farsync.o and if you want the module to be
- automatically loaded when the interface is referenced then you
- should add "alias hdlcX farsync" to /etc/modules.conf for each
- interface, where X is 0, 1, 2, ...
-
-Frame Relay (DLCI) support
-CONFIG_DLCI
- This is support for the frame relay protocol; frame relay is a fast
- low-cost way to connect to a remote Internet access provider or to
- form a private wide area network. The one physical line from your
- box to the local "switch" (i.e. the entry point to the frame relay
- network, usually at the phone company) can carry several logical
- point-to-point connections to other computers connected to the frame
- relay network. For a general explanation of the protocol, check out
- <http://www.frforum.com/> on the WWW. To use frame relay, you need
- supporting hardware (called FRAD) and certain programs from the
- net-tools package as explained in
- <file:Documentation/networking/framerelay.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dlci.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Max open DLCI
-CONFIG_DLCI_COUNT
- This is the maximal number of logical point-to-point frame relay
- connections (the identifiers of which are called DCLIs) that
- the driver can handle. The default is probably fine.
-
-Max DLCI per device
-CONFIG_DLCI_MAX
- You can specify here how many logical point-to-point frame relay
- connections (the identifiers of which are called DCLIs) should be
- handled by each of your hardware frame relay access devices. Go with
- the default.
-
-SDLA (Sangoma S502/S508) support
-CONFIG_SDLA
- Say Y here if you need a driver for the Sangoma S502A, S502E, and
- S508 Frame Relay Access Devices. These are multi-protocol cards, but
- only frame relay is supported by the driver at this time. Please
- read <file:Documentation/framerelay.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sdla.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Acorn Econet/AUN protocols
-CONFIG_ECONET
- Econet is a fairly old and slow networking protocol mainly used by
- Acorn computers to access file and print servers. It uses native
- Econet network cards. AUN is an implementation of the higher level
- parts of Econet that runs over ordinary Ethernet connections, on
- top of the UDP packet protocol, which in turn runs on top of the
- Internet protocol IP.
-
- If you say Y here, you can choose with the next two options whether
- to send Econet/AUN traffic over a UDP Ethernet connection or over
- a native Econet network card.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called econet.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-AUN over UDP
-CONFIG_ECONET_AUNUDP
- Say Y here if you want to send Econet/AUN traffic over a UDP
- connection (UDP is a packet based protocol that runs on top of the
- Internet protocol IP) using an ordinary Ethernet network card.
-
-Native Econet
-CONFIG_ECONET_NATIVE
- Say Y here if you have a native Econet network card installed in
- your computer.
-
-WAN router
-CONFIG_WAN_ROUTER
- Wide Area Networks (WANs), such as X.25, frame relay and leased
- lines, are used to interconnect Local Area Networks (LANs) over vast
- distances with data transfer rates significantly higher than those
- achievable with commonly used asynchronous modem connections.
- Usually, a quite expensive external device called a `WAN router' is
- needed to connect to a WAN.
-
- As an alternative, WAN routing can be built into the Linux kernel.
- With relatively inexpensive WAN interface cards available on the
- market, a perfectly usable router can be built for less than half
- the price of an external router. If you have one of those cards and
- wish to use your Linux box as a WAN router, say Y here and also to
- the WAN driver for your card, below. You will then need the
- wan-tools package which is available from <ftp://ftp.sangoma.com/>.
- Read <file:Documentation/networking/wan-router.txt> for more
- information.
-
- The WAN routing support is also available as a module called
- wanrouter.o ( = code which can be inserted in and removed from the
- running kernel whenever you want). If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-Fast switching (read help!)
-CONFIG_NET_FASTROUTE
- Saying Y here enables direct NIC-to-NIC (NIC = Network Interface
- Card) data transfers on the local network, which is fast.
-
- IMPORTANT NOTE: This option is NOT COMPATIBLE with "Network packet
- filtering" (CONFIG_NETFILTER). Say N here if you say Y there.
-
- However, it will work with all options in the "Advanced router"
- section (except for "Use TOS value as routing key" and
- "Use FWMARK value as routing key").
-
- At the moment, few devices support fast switching (tulip is one of
- them, a modified 8390 driver can be found at
- <ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz>).
-
- If unsure, say N.
-
-Forwarding between high speed interfaces
-CONFIG_NET_HW_FLOWCONTROL
- This option enables NIC (Network Interface Card) hardware throttling
- during periods of extremal congestion. At the moment only a couple
- of device drivers support it (really only one -- tulip, a modified
- 8390 driver can be found at
- <ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz>).
-
- Really, this option is applicable to any machine attached to a fast
- enough network, and even a 10 Mb NIC is able to kill a not very slow
- box, such as a 120MHz Pentium.
-
- However, do not say Y here if you did not experience any serious
- problems.
-
-QoS and/or fair queueing
-CONFIG_NET_SCHED
- When the kernel has several packets to send out over a network
- device, it has to decide which ones to send first, which ones to
- delay, and which ones to drop. This is the job of the packet
- scheduler, and several different algorithms for how to do this
- "fairly" have been proposed.
-
- If you say N here, you will get the standard packet scheduler, which
- is a FIFO (first come, first served). If you say Y here, you will be
- able to choose from among several alternative algorithms which can
- then be attached to different network devices. This is useful for
- example if some of your network devices are real time devices that
- need a certain minimum data flow rate, or if you need to limit the
- maximum data flow rate for traffic which matches specified criteria.
- This code is considered to be experimental.
-
- To administer these schedulers, you'll need the user-level utilities
- from the package iproute2+tc at <ftp://ftp.inr.ac.ru/ip-routing/>.
- That package also contains some documentation; for more, check out
- <http://snafu.freedom.org/linux2.2/iproute-notes.html>.
-
- This Quality of Service (QoS) support will enable you to use
- Differentiated Services (diffserv) and Resource Reservation Protocol
- (RSVP) on your Linux router if you also say Y to "QoS support",
- "Packet classifier API" and to some classifiers below. Documentation
- and software is at <http://icawww1.epfl.ch/linux-diffserv/>.
-
- If you say Y here and to "/proc file system" below, you will be able
- to read status information about packet schedulers from the file
- /proc/net/psched.
-
- The available schedulers are listed in the following questions; you
- can say Y to as many as you like. If unsure, say N now.
-
-CBQ packet scheduler
-CONFIG_NET_SCH_CBQ
- Say Y here if you want to use the Class-Based Queueing (CBQ) packet
- scheduling algorithm for some of your network devices. This
- algorithm classifies the waiting packets into a tree-like hierarchy
- of classes; the leaves of this tree are in turn scheduled by
- separate algorithms (called "disciplines" in this context).
-
- See the top of <file:net/sched/sch_cbq.c> for references about the
- CBQ algorithm.
-
- CBQ is a commonly used scheduler, so if you're unsure, you should
- say Y here. Then say Y to all the queueing algorithms below that you
- want to use as CBQ disciplines. Then say Y to "Packet classifier
- API" and say Y to all the classifiers you want to use; a classifier
- is a routine that allows you to sort your outgoing traffic into
- classes based on a certain criterion.
-
- This code is also available as a module called sch_cbq.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-CONFIG_NET_SCH_HTB
- Say Y here if you want to use the Hierarchical Token Buckets (HTB)
- packet scheduling algorithm for some of your network devices. See
- URL <http://luxik.cdi.cz/~devik/qos/htb/> for complete manual and
- in-depth articles.
-
- HTB is very similar to the CBQ regarding its goals however is has
- different properties and different algorithm.
-
- This code is also available as a module called sch_htb.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-CONFIG_NET_SCH_HFSC
- Say Y here if you want to use the Hierarchical Fair Service Curve
- (HFSC) packet scheduling algorithm for some of your network devices.
-
- This code is also available as a module called sch_hfsc.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-CSZ packet scheduler
-CONFIG_NET_SCH_CSZ
- Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet
- scheduling algorithm for some of your network devices. At the
- moment, this is the only algorithm that can guarantee service for
- real-time applications (see the top of <file:net/sched/sch_csz.c>
- for details and references about the algorithm).
-
- Note: this scheduler is currently broken.
-
- This code is also available as a module called sch_csz.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-ATM pseudo-scheduler
-CONFIG_NET_SCH_ATM
- Say Y here if you want to use the ATM pseudo-scheduler. This
- provides a framework for invoking classifiers (aka "filters"), which
- in turn select classes of this queuing discipline. Each class maps
- the flow(s) it is handling to a given virtual circuit (see the top of
- <file:net/sched/sch_atm.c>).
-
- This code is also available as a module called sch_atm.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-The simplest PRIO pseudo-scheduler
-CONFIG_NET_SCH_PRIO
- Say Y here if you want to use an n-band priority queue packet
- "scheduler" for some of your network devices or as a leaf discipline
- for the CBQ scheduling algorithm. If unsure, say Y.
-
- This code is also available as a module called sch_prio.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Diffserv field marker
-CONFIG_NET_SCH_DSMARK
- Say Y if you want to schedule packets according to the
- Differentiated Services architecture proposed in RFC 2475.
- Technical information on this method, with pointers to associated
- RFCs, is available at <http://www.gta.ufrj.br/diffserv/>.
-
- This code is also available as a module called sch_dsmark.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-GRED queue
-CONFIG_NET_SCH_GRED
- Say Y here if you want to use the Generic Random Early Detection
- (RED) packet scheduling algorithm for some of your network devices
- (see the top of <file:net/sched/sch_red.c> for details and
- references about the algorithm).
-
- This code is also available as a module called sch_gred.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-RED queue
-CONFIG_NET_SCH_RED
- Say Y here if you want to use the Random Early Detection (RED)
- packet scheduling algorithm for some of your network devices (see
- the top of <file:net/sched/sch_red.c> for details and references
- about the algorithm).
-
- This code is also available as a module called sch_red.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-SFQ queue
-CONFIG_NET_SCH_SFQ
- Say Y here if you want to use the Stochastic Fairness Queueing (SFQ)
- packet scheduling algorithm for some of your network devices or as a
- leaf discipline for the CBQ scheduling algorithm (see the top of
- <file:net/sched/sch_sfq.c> for details and references about the SFQ
- algorithm).
-
- This code is also available as a module called sch_sfq.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-TEQL queue
-CONFIG_NET_SCH_TEQL
- Say Y here if you want to use the True Link Equalizer (TLE) packet
- scheduling algorithm for some of your network devices or as a leaf
- discipline for the CBQ scheduling algorithm. This queueing
- discipline allows the combination of several physical devices into
- one virtual device. (see the top of <file:net/sched/sch_teql.c> for
- details).
-
- This code is also available as a module called sch_teql.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-TBF queue
-CONFIG_NET_SCH_TBF
- Say Y here if you want to use the Simple Token Bucket Filter (TBF)
- packet scheduling algorithm for some of your network devices or as a
- leaf discipline for the CBQ scheduling algorithm (see the top of
- <file:net/sched/sch_tbf.c> for a description of the TBF algorithm).
-
- This code is also available as a module called sch_tbf.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Ingress Qdisc
-CONFIG_NET_SCH_INGRESS
- If you say Y here, you will be able to police incoming bandwidth
- and drop packets when this bandwidth exceeds your desired rate.
- If unsure, say Y.
-
- This code is also available as a module called cls_ingress.o
- ( = code which can be inserted in and removed from the running
- kernel whenever you want). If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
-QoS support
-CONFIG_NET_QOS
- Say Y here if you want to include Quality Of Service scheduling
- features, which means that you will be able to request certain
- rate-of-flow limits for your network devices.
-
- This Quality of Service (QoS) support will enable you to use
- Differentiated Services (diffserv) and Resource Reservation Protocol
- (RSVP) on your Linux router if you also say Y to "Packet classifier
- API" and to some classifiers below. Documentation and software is at
- <http://icawww1.epfl.ch/linux-diffserv/>.
-
- 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 QoS support.
-
-Rate estimator
-CONFIG_NET_ESTIMATOR
- In order for Quality of Service scheduling to work, the current
- rate-of-flow for a network device has to be estimated; if you say Y
- here, the kernel will do just that.
-
-Packet classifier API
-CONFIG_NET_CLS
- The CBQ scheduling algorithm requires that network packets which are
- scheduled to be sent out over a network device be classified
- according to some criterion. If you say Y here, you will get a
- choice of several different packet classifiers with the following
- questions.
-
- This will enable you to use Differentiated Services (diffserv) and
- Resource Reservation Protocol (RSVP) on your Linux router.
- Documentation and software is at
- <http://icawww1.epfl.ch/linux-diffserv/>.
-
-Traffic policing (needed for in/egress)
-CONFIG_NET_CLS_POLICE
- Say Y to support traffic policing (bandwidth limits). Needed for
- ingress and egress rate limiting.
-
-TC index classifier
-CONFIG_NET_CLS_TCINDEX
- If you say Y here, you will be able to classify outgoing packets
- according to the tc_index field of the skb. You will want this
- feature if you want to implement Differentiated Services using
- sch_dsmark. If unsure, say Y.
-
- This code is also available as a module called cls_tcindex.o
- ( = code which can be inserted in and removed from the running
- kernel whenever you want). If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
-Routing tables based classifier
-CONFIG_NET_CLS_ROUTE4
- If you say Y here, you will be able to classify outgoing packets
- according to the route table entry they matched. If unsure, say Y.
-
- This code is also available as a module called cls_route.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Firewall based classifier
-CONFIG_NET_CLS_FW
- If you say Y here, you will be able to classify outgoing packets
- according to firewall criteria you specified.
-
- This code is also available as a module called cls_fw.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-U32 classifier
-CONFIG_NET_CLS_U32
- If you say Y here, you will be able to classify outgoing packets
- according to their destination address. If unsure, say Y.
-
- This code is also available as a module called cls_u32.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Special RSVP classifier
-CONFIG_NET_CLS_RSVP
- The Resource Reservation Protocol (RSVP) permits end systems to
- request a minimum and maximum data flow rate for a connection; this
- is important for real time data such as streaming sound or video.
-
- Say Y here if you want to be able to classify outgoing packets based
- on their RSVP requests.
-
- This code is also available as a module called cls_rsvp.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Special RSVP classifier for IPv6
-CONFIG_NET_CLS_RSVP6
- The Resource Reservation Protocol (RSVP) permits end systems to
- request a minimum and maximum data flow rate for a connection; this
- is important for real time data such as streaming sound or video.
-
- Say Y here if you want to be able to classify outgoing packets based
- on their RSVP requests and you are using the new Internet Protocol
- IPv6 as opposed to the older and more common IPv4.
-
- This code is also available as a module called cls_rsvp6.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Network code profiler
-CONFIG_NET_PROFILE
- If you say Y here and to "/proc file system support" below, some
- obscure and undocumented information about the network code's
- performance will be written to /proc/net/profile. If you don't know
- what it is about, you don't need it: say N.
-
-Network packet generator
-CONFIG_NET_PKTGEN
- This module will inject preconfigured packets, at a configurable
- rate, out of a given interface. It is used for network interface
- stress testing and performance analysis. If you don't understand
- what was just said, you don't need it: say N.
-
- Documentation on how to use the packet generator can be found
- at <file:Documentation/networking/pktgen.txt>.
-
- This code is also available as a module called pktgen.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Wan interfaces support
-CONFIG_WAN
- Wide Area Networks (WANs), such as X.25, frame relay and leased
- lines, are used to interconnect Local Area Networks (LANs) over vast
- distances with data transfer rates significantly higher than those
- achievable with commonly used asynchronous modem connections.
- Usually, a quite expensive external device called a `WAN router' is
- needed to connect to a WAN.
-
- As an alternative, a relatively inexpensive WAN interface card can
- allow your Linux box to directly connect to a WAN. If you have one
- of those cards and wish to use it under Linux, say Y here and also
- to the WAN driver for your card, below.
-
- If unsure, say N.
-
-Comtrol Hostess SV-11 support
-CONFIG_HOSTESS_SV11
- This is a network card for low speed synchronous serial links, at
- up to 256Kbps. It supports both PPP and Cisco HDLC.
-
- At this point, the driver can only be compiled as a module.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called hostess_sv11.o.
-
-COSA/SRP sync serial board support
-CONFIG_COSA
- This is a driver for COSA and SRP synchronous serial boards. These
- boards allow to connect synchronous serial devices (for example
- base-band modems, or any other device with the X.21, V.24, V.35 or
- V.36 interface) to your Linux box. The cards can work as the
- character device, synchronous PPP network device, or the Cisco HDLC
- network device.
-
- To actually use the COSA or SRP board, you will need user-space
- utilities for downloading the firmware to the cards and to set them
- up. Look at the <http://www.fi.muni.cz/~kas/cosa/> for more
- information about the cards (including the pointer to the user-space
- utilities). You can also read the comment at the top of the
- <file:drivers/net/wan/cosa.c> for details about the cards and the driver
- itself.
-
- The driver will be compiled as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cosa.o. For general information about
- modules read <file:Documentation/modules.txt>.
-
-Etinc PCISYNC serial board support
-CONFIG_DSCC4
- This is a driver for Etinc PCISYNC boards based on the Infineon
- (ex. Siemens) DSCC4 chipset. It is supposed to work with the four
- ports card. Take a look at <http://www.cogenit.fr/dscc4/>
- for further informations about the driver and his configuration.
-
- The driver will be compiled as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dscc4.o. For general information about
- modules read <file:Documentation/modules.txt>.
-
-PCISYNC feature
-CONFIG_DSCC4_PCISYNC
- Due to Etinc's design choice for its PCISYNC cards, some operations
- are only allowed on specific ports of the DSCC4. This option is the
- only way for the driver to know that it shouldn't return a success
- code for these operations.
-
- Please say Y if your card is an Etinc's PCISYNC.
-
-Hard reset support
-CONFIG_DSCC4_PCI_RST
- Various DSCC4 bug forbid any reliable software reset of the asic.
- As a replacement, some vendors provide a way to assert the PCI #RST
- pin of DSCC4 through the GPIO port of the card. If you choose Y, the
- driver will make use of this feature before module removal (i.e. rmmod).
- This feature is known to exist on Commtech's cards.
- Contact your manufacturer for details.
-
- Say Y if yout card supports this feature.
-
-LanMedia Corp. serial boards (SSI/V.35, T1/E1, HSSI, T3)
-CONFIG_LANMEDIA
- This is a driver for the following Lan Media family of serial
- boards.
-
- LMC 1000 board allows you to connect synchronous serial devices (for
- example base-band modems, or any other device with the X.21, V.24,
- V.35 or V.36 interface) to your Linux box.
-
- LMC 1200 with on board DSU board allows you to connect your Linux
- box directly to a T1 or E1 circuit.
-
- LMC 5200 board provides a HSSI interface capable of running up to
- 52 mbits per second.
-
- LMC 5245 board connects directly to a T3 circuit saving the
- additional external hardware.
-
- To change setting such as syncPPP vs cisco HDLC or clock source you
- will need lmcctl. It is available at <ftp://ftp.lanmedia.com/>.
-
- This code is also available as a module called lmc.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Fibre Channel driver support
-CONFIG_NET_FC
- Fibre Channel is a high speed serial protocol mainly used to connect
- large storage devices to the computer; it is compatible with and
- intended to replace SCSI.
-
- If you intend to use Fibre Channel, you need to have a Fibre channel
- adaptor card in your computer; say Y here and to the driver for your
- adaptor below. You also should have said Y to "SCSI support" and
- "SCSI generic support".
-
-Interphase 5526 Tachyon chipset based adaptor support
-CONFIG_IPHASE5526
- Say Y here if you have a Fibre Channel adaptor of this kind.
-
- The driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called iph5526.o. For general information about
- modules read <file:Documentation/modules.txt>.
-
-Red Creek Hardware VPN
-CONFIG_RCPCI
- This is a driver for hardware which provides a Virtual Private
- Network (VPN). Say Y if you have it.
-
- This code is also available as a module called rcpci.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Granch SBNI12 Leased Line adapter driver
-CONFIG_SBNI
- This is a driver for ISA SBNI12-xx cards which are low cost
- alternatives to leased line modems. Say Y if you want to insert
- the driver into the kernel or say M to compile it as a module (the
- module will be called sbni.o).
-
- You can find more information and last versions of drivers and
- utilities at <http://www.granch.ru/>. If you have any question you
- can send email to sbni@granch.ru.
-
- Say N if unsure.
-
-SBNI multiple-line feature support
-CONFIG_SBNI_MULTILINE
- Schedule traffic for some parallel lines, via SBNI12 adapters.
- If you have two computers connected with two parallel lines it's
- possible to increase transfer rate nearly twice. You should have
- a program named 'sbniconfig' to configure adapters.
-
- Say N if unsure.
-
-WAN router drivers
-CONFIG_WAN_ROUTER_DRIVERS
- If you have a WAN interface card and you want your Linux box to act
- as a WAN router, thereby connecting you Local Area Network to the
- outside world over the WAN connection, say Y here and then to the
- driver for your card below. In addition, you need to say Y to "Wan
- Router".
-
- You will need the wan-tools package which is available from
- <ftp://ftp.sangoma.com/>. Read
- <file:Documentation/networking/wan-router.txt> for more information.
-
- 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 WAN router drivers. If unsure, say N.
-
-Sangoma WANPIPE(tm) multiprotocol cards
-CONFIG_VENDOR_SANGOMA
- WANPIPE from Sangoma Technologies Inc. (<http://www.sangoma.com/>)
- is a family of intelligent multiprotocol WAN adapters with data
- transfer rates up to 4Mbps. They are also known as Synchronous
- Data Link Adapters (SDLA) and are designated as S514-PCI or
- S508-ISA. These cards support
-
- - X.25, Frame Relay, PPP, Cisco HDLC protocols.
-
- - API support for protocols like HDLC (LAPB),
- HDLC Streaming, X.25, Frame Relay and BiSync.
-
- - Ethernet Bridging over Frame Relay protocol.
-
- - MULTILINK PPP
-
- - Async PPP (Modem Dialup)
-
- If you have one or more of these cards, say M to this option; you
- may then also want to read the file
- <file:Documentation/networking/wanpipe.txt>. The next questions
- will ask you about the protocols you want the driver to support.
-
- The driver will be compiled as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wanpipe.o. For general information about
- modules read <file:Documentation/modules.txt>.
-
-WANPIPE X.25 support
-CONFIG_WANPIPE_X25
- Say Y to this option if you are planning to connect a WANPIPE card
- to an X.25 network. Note, this feature also includes the X.25 API
- support used to develop custom applications over the X.25 protocol.
- If you say N, the X.25 support will not be included in the driver.
- The X.25 option is supported on S514-PCI and S508-ISA cards.
-
-WANPIPE Frame Relay support
-CONFIG_WANPIPE_FR
- Say Y to this option if you are planning to connect a WANPIPE card
- to a frame relay network, or use frame relay API to develop
- custom applications over the Frame Relay protocol.
- This feature also contains the Ethernet Bridging over Frame Relay,
- where a WANPIPE frame relay link can be directly connected to the
- Linux kernel bridge. If you say N, the frame relay support will
- not be included in the driver. The Frame Relay option is
- supported on S514-PCI and S508-ISA cards.
-
-WANPIPE PPP support
-CONFIG_WANPIPE_PPP
- Say Y to this option if you are planning to connect a WANPIPE card
- to a leased line using Point-to-Point protocol (PPP). If you say N,
- the PPP support will not be included in the driver. The PPP option
- is supported on S514-PCI/S508-ISA cards.
-
-WANPIPE Multi-Port PPP support
-CONFIG_WANPIPE_MULTPPP
- Say Y to this option if you are planning to connect a WANPIPE card
- to a leased line using Point-to-Point protocol (PPP). Note, the
- MultiPort PPP uses the Linux Kernel SyncPPP protocol over the
- Sangoma HDLC Streaming adapter. In this case each Sangoma adapter
- port can support an independent PPP connection. For example, a
- single Quad-Port PCI adapter can support up to four independent
- PPP links. If you say N,the PPP support will not be included in the
- driver. The PPP option is supported on S514-PCI/S508-ISA cards.
-
-WANPIPE Cisco HDLC support
-CONFIG_WANPIPE_CHDLC
- Say Y to this option if you are planning to connect a WANPIPE card
- to a leased line using the Cisco HDLC protocol. This now supports
- Dual Port Cisco HDLC on the S514-PCI/S508-ISA cards.
- This support also allows user to build applications using the
- HDLC streaming API.
-
- CHDLC Streaming driver also supports MULTILINK PPP
- support that can bind multiple WANPIPE T1 cards into
- a single logical channel.
-
- If you say N, the Cisco HDLC support and
- HDLC streaming API and MULTILINK PPP will not be
- included in the driver.
-
-MultiGate (COMX) synchronous serial board support
-CONFIG_COMX
- Say Y if you want to use any board from the MultiGate (COMX) family.
- These boards are synchronous serial adapters for the PC,
- manufactured by ITConsult-Pro Co, Hungary.
-
- Read <file:Documentation/networking/comx.txt> for help on
- configuring and using COMX interfaces. Further info on these cards
- can be found at <http://www.itc.hu/> or <info@itc.hu>.
-
- You must say Y to "/proc file system support" (CONFIG_PROC_FS) to
- use this driver.
-
-Support for COMX/CMX/HiCOMX boards
-CONFIG_COMX_HW_COMX
- Hardware driver for the 'CMX', 'COMX' and 'HiCOMX' boards from the
- MultiGate family. Say Y if you have one of these.
-
- You will need additional firmware to use these cards, which are
- downloadable from <ftp://ftp.itc.hu/>.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-hw-comx.o.
-
-Support for LoCOMX board
-CONFIG_COMX_HW_LOCOMX
- Hardware driver for the 'LoCOMX' board from the MultiGate family.
- Say Y if you have a board like this.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-hw-locomx.o.
-
-Support for MixCOM board
-CONFIG_COMX_HW_MIXCOM
- Hardware driver for the 'MixCOM' board from the MultiGate family.
- Say Y if you have a board like this.
-
- If you want to use the watchdog device on this card, you should
- select it in the Watchdog Cards section of the Character Devices
- configuration. The ISDN interface of this card is Teles 16.3
- compatible, you should enable it in the ISDN configuration menu. The
- driver for the flash ROM of this card is available separately on
- <ftp://ftp.itc.hu/>.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-hw-mixcom.o.
-
-i810 TCO timer/watchdog support
-CONFIG_I810_TCO
- Hardware driver for the TCO timer built into the Intel i810 and i815
- chipset family. The TCO (Total Cost of Ownership) timer is a
- watchdog timer that will reboot the machine after its second
- expiration. The expiration time can be configured by command
- argument "i810_margin=<n>" where <n> is the counter initial value.
- It is decremented every 0.6 secs, the default is 50 which gives a
- timeout of 30 seconds and one minute until reset.
-
- On some motherboards the driver may fail to reset the chipset's
- NO_REBOOT flag which prevents the watchdog from rebooting the
- machine. If this is the case you will get a kernel message like
- "i810tco init: failed to reset NO_REBOOT flag".
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- i810-tco.o.
-
-SliceCOM/PciCOM board support
-CONFIG_COMX_HW_MUNICH
- Hardware driver for the 'SliceCOM' (channelized E1) and 'PciCOM'
- boards (X21) from the MultiGate family.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called comx-hw-munich.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- Read linux/Documentation/networking/slicecom.txt for help on
- configuring and using SliceCOM interfaces. Further info on these cards
- can be found at <http://www.itc.hu> or <info@itc.hu>.
-
-Support for HDLC and syncPPP protocols on MultiGate boards
-CONFIG_COMX_PROTO_PPP
- Cisco-HDLC and synchronous PPP protocol driver for all MultiGate
- boards. Say Y if you want to use either protocol on your MultiGate
- boards.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-proto-ppp.o.
-
-Support for LAPB protocol on MultiGate boards
-CONFIG_COMX_PROTO_LAPB
- LAPB protocol driver for all MultiGate boards. Say Y if you
- want to use this protocol on your MultiGate boards.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-proto-lapb.o.
-
-Support for Frame Relay on MultiGate boards
-CONFIG_COMX_PROTO_FR
- Frame Relay protocol driver for all MultiGate boards. Say Y if you
- want to use this protocol on your MultiGate boards.
-
- If you want to compile this as a module, say M and read
- <file:Documentation/modules.txt>. The module will be called
- comx-proto-fr.o.
-
-Cyclom 2X(tm) multiprotocol cards
-CONFIG_CYCLADES_SYNC
- Cyclom 2X from Cyclades Corporation (<http://www.cyclades.com/> and
- <http://www.cyclades.com.br/>) is an intelligent multiprotocol WAN
- adapter with data transfer rates up to 512 Kbps. These cards support
- the X.25 and SNA related protocols. If you have one or more of these
- cards, say Y to this option. The next questions will ask you about
- the protocols you want the driver to support (for now only X.25 is
- supported).
-
- While no documentation is available at this time please grab the
- wanconfig tarball in
- <http://www.conectiva.com.br/~acme/cycsyn-devel/> (with minor changes
- to make it compile with the current wanrouter include files; efforts
- are being made to use the original package available at
- <ftp://ftp.sangoma.com/>).
-
- Feel free to contact me or the cycsyn-devel mailing list at
- acme@conectiva.com.br and cycsyn-devel@bazar.conectiva.com.br for
- additional details, I hope to have documentation available as soon
- as possible. (Cyclades Brazil is writing the Documentation).
-
- The driver will be compiled as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cyclomx.o. For general information about
- modules read <file:Documentation/modules.txt>.
-
-Cyclom 2X X.25 support
-CONFIG_CYCLOMX_X25
- Say Y to this option if you are planning to connect a Cyclom 2X card
- to an X.25 network.
-
- If you say N, the X.25 support will not be included in the driver
- (saves about 11 KB of kernel memory).
-
-Generic HDLC driver
-CONFIG_HDLC
- Say Y to this option if your Linux box contains a WAN card supported
- by this driver and you are planning to connect the box to a WAN
- ( = Wide Area Network). You will need supporting software from
- <http://hq.pm.waw.pl/hdlc/>.
- Generic HDLC driver currently supports raw HDLC, Cisco HDLC, Frame
- Relay, synchronous Point-to-Point Protocol (PPP) and X.25.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called hdlc.o.
-
- If unsure, say N here.
-
-Raw HDLC support
-CONFIG_HDLC_RAW
- Say Y to this option if you want generic HDLC driver to support
- raw HDLC over WAN (Wide Area Network) connections.
-
- If unsure, say N here.
-
-Raw HDLC Ethernet device support
-CONFIG_HDLC_RAW_ETH
- Say Y to this option if you want generic HDLC driver to support
- raw HDLC Ethernet device emulation over WAN (Wide Area Network)
- connections.
- You will need it for Ethernet over HDLC bridges.
-
- If unsure, say N here.
-
-Cisco HDLC support
-CONFIG_HDLC_CISCO
- Say Y to this option if you want generic HDLC driver to support
- Cisco HDLC over WAN (Wide Area Network) connections.
-
- If unsure, say N here.
-
-Frame-Relay HDLC support
-CONFIG_HDLC_FR
- Say Y to this option if you want generic HDLC driver to support
- Frame-Relay protocol over WAN (Wide Area Network) connections.
-
- If unsure, say N here.
-
-Synchronous Point-to-Point Protocol (PPP) support
-CONFIG_HDLC_PPP
- Say Y to this option if you want generic HDLC driver to support
- PPP over WAN (Wide Area Network) connections.
-
- If unsure, say N here.
-
-CCITT X.25 over HDLC support
-CONFIG_HDLC_X25
- Say Y to this option if you want generic HDLC driver to support
- X.25 protocol over WAN (Wide Area Network) connections.
-
- If unsure, say N here.
-
-Cyclades-PC300 support
-CONFIG_PC300
- This is a driver for the Cyclades-PC300 synchronous communication
- boards. These boards provide synchronous serial interfaces to your
- Linux box (interfaces currently available are RS-232/V.35, X.21 and
- T1/E1). If you wish to support Multilink PPP, please select the
- option below this one and read the file README.mlppp provided by PC300
- package.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module will be
- called pc300.o.
-
- If you haven't heard about it, it's safe to say N.
-
-Cyclades-PC300 Sync TTY (to MLPPP) support
-CONFIG_PC300_MLPPP
- Say 'Y' to this option if you are planning to use Multilink PPP over the
- PC300 synchronous communication boards.
-
-CONFIG_PCI200SYN
- This driver is for PCI200SYN cards made by Goramo sp. j.
- If you have such a card, say Y or M here and see
- <http://hq.pm.waw.pl/pub/hdlc/>
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called pci200syn.o.
-
- If unsure, say N here.
-
-SDL RISCom/N2 support
-CONFIG_N2
- This driver is for RISCom/N2 single or dual channel ISA cards
- made by SDL Communications Inc. If you have such a card,
- say Y here and see <http://hq.pm.waw.pl/pub/hdlc/>.
-
- Note that N2csu and N2dds cards are not supported by this driver.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called n2.o.
-
- If unsure, say N here.
-
-Moxa C101 support
-CONFIG_C101
- This driver is for C101 SuperSync ISA cards made by Moxa
- Technologies Co., Ltd. If you have such a card,
- say Y here and see <http://hq.pm.waw.pl/pub/hdlc/>
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called c101.o.
-
- If unsure, say N here.
-
-Ethernet (10 or 100Mbit)
-CONFIG_NET_ETHERNET
- 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.
-
-Western Digital/SMC cards
-CONFIG_NET_VENDOR_SMC
- If you have a network (Ethernet) card belonging to this class, say Y
- and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- 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 Western Digital cards. If you say Y, you will be
- asked for your specific card in the following questions.
-
-WD80*3 support
-CONFIG_WD80x3
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-SMC Ultra MCA support
-CONFIG_ULTRAMCA
- If you have a network (Ethernet) card of this type and are running
- an MCA based system (PS/2), say Y and read the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smc-mca.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-SMC Ultra support
-CONFIG_ULTRA
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- Important: There have been many reports that, with some motherboards
- mixing an SMC Ultra and an Adaptec AHA154x SCSI card (or compatible,
- such as some BusLogic models) causes corruption problems with many
- operating systems. The Linux smc-ultra driver has a work-around for
- this but keep it in mind if you have such a SCSI card and have
- problems.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smc-ultra.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-SMC Ultra32 EISA support
-CONFIG_ULTRA32
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smc-ultra32.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-SMC 9194 support
-CONFIG_SMC9194
- This is support for the SMC9xxx based Ethernet cards. Choose this
- option if you have a DELL laptop with the docking station, or
- another SMC9192/9194 based chipset. Say Y if you want it compiled
- into the kernel, and read the file
- <file:Documentation/networking/smc9.txt> and the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smc9194.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-PCI NE2000 and clones support
-CONFIG_NE2K_PCI
- This driver is for NE2000 compatible PCI cards. It will not work
- with ISA NE2000 cards (they have their own driver, "NE2000/NE1000
- support" below). If you have a PCI NE2000 network (Ethernet) card,
- say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver also works for the following NE2000 clone cards:
- RealTek RTL-8029 Winbond 89C940 Compex RL2000 KTI ET32P2
- NetVin NV5000SC Via 86C926 SureCom NE34 Winbond
- Holtek HT80232 Holtek HT80229
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ne2k-pci.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-Racal-Interlan (Micom) NI cards
-CONFIG_NET_VENDOR_RACAL
- If you have a network (Ethernet) card belonging to this class, such
- as the NI5010, NI5210 or NI6210, say Y and read the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- 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 NI cards. If you say Y, you will be asked for
- your specific card in the following questions.
-
-NI5010 support
-CONFIG_NI5010
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Note that this is still
- experimental code.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ni5010.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-NI5210 support
-CONFIG_NI52
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ni52.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-NI6510 support
-CONFIG_NI65
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ni65.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-RealTek RTL-8139C+ 10/100 PCI Fast Ethernet Adapter support
-CONFIG_8139CP
- This is a driver for the Fast Ethernet PCI network cards based on
- the RTL8139C+ chips. If you have one of those, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. This is recommended.
- The module will be called 8139cp.o.
-
-RealTek RTL-8139 PCI Fast Ethernet Adapter support
-CONFIG_8139TOO
- This is a driver for the Fast Ethernet PCI network cards based on
- the RTL8139 chips. If you have one of those, say Y and read
- <file:Documentation/networking/8139too.txt> as well as the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called 8139too.o.
-
-Use PIO instead of MMIO
-CONFIG_8139TOO_PIO
- This instructs the driver to use programmed I/O ports (PIO) instead
- of PCI shared memory (MMIO). This can possibly solve some problems
- in case your mainboard has memory consistency issues. If unsure,
- say N.
-
-Support for uncommon RTL-8139 rev. K (automatic channel equalization)
-CONFIG_8139TOO_TUNE_TWISTER
- This implements a function which might come in handy in case you
- are using low quality on long cabling. It is required for RealTek
- RTL-8139 revision K boards, and totally unused otherwise. It tries
- to match the transceiver to the cable characteristics. This is
- experimental since hardly documented by the manufacturer.
- If unsure, say Y.
-
-Support for older RTL-8129/8130 boards
-CONFIG_8139TOO_8129
- This enables support for the older and uncommon RTL-8129 and
- RTL-8130 chips, which support MII via an external transceiver,
- instead of an internal one. Disabling this option will save some
- memory by making the code size smaller. If unsure, say Y.
-
-Use older RX-reset method
-CONFIG_8139_OLD_RX_RESET
- The 8139too driver was recently updated to contain a more rapid
- reset sequence, in the face of severe receive errors. This "new"
- RX-reset method should be adequate for all boards. But if you
- experience problems, you can enable this option to restore the
- old RX-reset behavior. If unsure, say N.
-
-SiS 900/7016 PCI Fast Ethernet Adapter support
-CONFIG_SIS900
- This is a driver for the Fast Ethernet PCI network cards based on
- the SiS 900 and SiS 7016 chips. The SiS 900 core is also embedded in
- SiS 630 and SiS 540 chipsets. If you have one of those, say Y and
- read the Ethernet-HOWTO, available at
- <http://www.tldp.org/docs.html#howto>. Please read
- <file:Documentation/networking/sis900.txt> and comments at the
- beginning of <file:drivers/net/sis900.c> for more information.
-
- This driver also supports AMD 79C901 HomePNA so that you can use
- your phone line as a network cable.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called sis900.o.
-
-Packet Engines Yellowfin Gigabit-NIC / Symbios 53c885 support
-CONFIG_YELLOWFIN
- Say Y here if you have a Packet Engines G-NIC PCI Gigabit Ethernet
- adapter or the SYM53C885 Ethernet controller. The Gigabit adapter is
- used by the Beowulf Linux cluster project. See
- <http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html> for more
- information about this driver in particular and Beowulf in general.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called yellowfin.o.
-
-Realtek 8169 Gigabit Ethernet support
-CONFIG_R8169
- Say Y here if you have a Realtek 8169 PCI Gigabit Ethernet adapter.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called r8169.o.
-
-General Instruments Surfboard 1000
-CONFIG_NET_SB1000
- This is a driver for the General Instrument (also known as
- NextLevel) SURFboard 1000 internal
- cable modem. This is an ISA card which is used by a number of cable
- TV companies to provide cable modem access. It's a one-way
- downstream-only cable modem, meaning that your upstream net link is
- provided by your regular phone modem.
-
- At present this driver only compiles as a module, so say M here if
- you have this card. The module will be called sb1000.o. Then read
- <file:Documentation/networking/README.sb1000> for information on how
- to use this module, as it needs special ppp scripts for establishing
- a connection. Further documentation and the necessary scripts can be
- found at:
-
- <http://www.jacksonville.net/~fventuri/>
- <http://home.adelphia.net/~siglercm/sb1000.html>
- <http://linuxpower.cx/~cable/>
-
- If you don't have this card, of course say N.
-
-Adaptec Starfire support
-CONFIG_ADAPTEC_STARFIRE
- Say Y here if you have an Adaptec Starfire (or DuraLAN) PCI network
- adapter. The DuraLAN chip is used on the 64 bit PCI boards from
- Adaptec e.g. the ANA-6922A. The older 32 bit boards use the tulip
- driver.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called starfire.o.
-
-Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support
-CONFIG_ACENIC
- Say Y here if you have an Alteon AceNIC, 3Com 3C985(B), NetGear
- GA620, SGI Gigabit or Farallon PN9000-SX PCI Gigabit Ethernet
- adapter. The driver allows for using the Jumbo Frame option (9000
- bytes/frame) however it requires that your switches can handle this
- as well. To enable Jumbo Frames, add `mtu 9000' to your ifconfig
- line.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called acenic.o.
-
-Omit support for old Tigon I based AceNICs
-CONFIG_ACENIC_OMIT_TIGON_I
- Say Y here if you only have Tigon II based AceNICs and want to leave
- out support for the older Tigon I based cards which are no longer
- being sold (ie. the original Alteon AceNIC and 3Com 3C985 (non B
- version)). This will reduce the size of the driver object by
- app. 100KB. If you are not sure whether your card is a Tigon I or a
- Tigon II, say N here.
-
- The safe and default value for this is N.
-
-Marvell Yukon / SysKonnect SK-98xx and SK-95xx Gigabit Ethernet Adapter family support
-CONFIG_SK98LIN
- Say Y here if you have a Marvell Yukon or SysKonnect SK-98xx/SK-95xx
- compliant Gigabit Ethernet Adapter. The following adapters are supported
- by this driver:
- - 3Com 3C940 Gigabit LOM Ethernet Adapter
- - 3Com 3C941 Gigabit LOM Ethernet Adapter
- - Allied Telesyn AT-2970LX Gigabit Ethernet Adapter
- - Allied Telesyn AT-2970LX/2SC Gigabit Ethernet Adapter
- - Allied Telesyn AT-2970SX Gigabit Ethernet Adapter
- - Allied Telesyn AT-2970SX/2SC Gigabit Ethernet Adapter
- - Allied Telesyn AT-2970TX Gigabit Ethernet Adapter
- - Allied Telesyn AT-2970TX/2TX Gigabit Ethernet Adapter
- - Allied Telesyn AT-2971SX Gigabit Ethernet Adapter
- - Allied Telesyn AT-2971T Gigabit Ethernet Adapter
- - DGE-530T Gigabit Ethernet Adapter
- - EG1032 v2 Instant Gigabit Network Adapter
- - EG1064 v2 Instant Gigabit Network Adapter
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Abit)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Albatron)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Asus)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (ECS)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Epox)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Foxconn)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Gigabyte)
- - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Iwill)
- - Marvell RDK-8001 Adapter
- - Marvell RDK-8002 Adapter
- - Marvell RDK-8003 Adapter
- - Marvell RDK-8004 Adapter
- - Marvell RDK-8006 Adapter
- - Marvell RDK-8007 Adapter
- - Marvell RDK-8008 Adapter
- - Marvell RDK-8009 Adapter
- - Marvell RDK-8010 Adapter
- - Marvell RDK-8011 Adapter
- - Marvell RDK-8012 Adapter
- - Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (32 bit)
- - Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Adapter (64 bit)
- - N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L)
- - SK-9521 10/100/1000Base-T Adapter
- - SK-9521 V2.0 10/100/1000Base-T Adapter
- - SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T)
- - SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter
- - SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link)
- - SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX)
- - SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter
- - SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link)
- - SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX)
- - SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter
- - SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link)
- - SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter
- - SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition)
- - SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter
- - SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link)
- - SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX)
- - SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter
- - SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)
- - SMC EZ Card 1000 (SMC9452TXV.2)
-
- The adapters support Jumbo Frames.
- The dual link adapters support link-failover and dual port features.
- Both Marvell Yukon and SysKonnect SK-98xx/SK-95xx adapters support
- the scatter-gather functionality with sendfile(). Please refer to
- Documentation/networking/sk98lin.txt for more information about
- optional driver parameters.
- Questions concerning this driver may be addressed to:
- linux@syskonnect.de
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. This is recommended.
- The module will be called sk98lin.o.
-
-
-Sun GEM support
-CONFIG_SUNGEM
- Support for the Sun GEM chip, aka Sun GigabitEthernet/P 2.0. See also
- <http://www.sun.com/products-n-solutions/hardware/docs/pdf/806-3985-10.pdf>.
-
- This chip is also used by Apple under the name GMAC in all their recent
- machines starting with the first iBook. This includes all AGP capable
- Apple machines except some early G4s and iMacs that still used a
- Tulip chip. This driver obsoletes the GMAC driver for these machines.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sungem.o.
-
-Broadcom Tigon3 support
-CONFIG_TIGON3
- This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called tg3.o.
-
-MV-64340 Ethernet support
-CONFIG_MV64340_ETH
- This driver supports the Marvell Discovery II MV64340 device
- as an Ethernet controller. Say Y here and select Port 0,1,2
- as needed. Otherwise, say N.
-
-MV-64340 Port 0
-CONFIG_MV64340_ETH_0
- Enable port 0 on the MV64340 Ethernet controller.
-
-MV-64340 Port 1
-CONFIG_MV64340_ETH_1
- Enable port 1 on the MV64340 Ethernet controller.
-
-MV-64340 Port 2
-CONFIG_MV64340_ETH_2
- Enable port 2 on the MV64340 Ethernet controller.
-
-MyriCOM Gigabit Ethernet support
-CONFIG_MYRI_SBUS
- This driver supports MyriCOM Sbus gigabit Ethernet cards.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called myri_sbus.o.
-
-D-Link 2000-based Gigabit Ethernet support
-CONFIG_DL2K
- This driver supports D-Link 2000-based gigabit ethernet cards, which
- includes
- D-Link DGE-550T Gigabit Ethernet Adapter.
- D-Link DL2000-based Gigabit Ethernet Adapter.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called dl2k.o.
-
-EtherExpress Pro/100 support (e100, Alternate Intel driver)
-CONFIG_E100
- This driver supports Intel(R) PRO/100 family of adapters, which
- includes:
-
- Controller Adapter Name Board IDs
- ---------- ------------ ---------
-
- 82558 PRO/100+ PCI Adapter 668081-xxx,
- 689661-xxx
- 82558 PRO/100+ Management Adapter 691334-xxx,
- 701738-xxx,
- 721383-xxx
- 82558 PRO/100+ Dual Port Server Adapter 714303-xxx,
- 711269-xxx,
- A28276-xxx
- 82558 PRO/100+ PCI Server Adapter 710550-xxx
- 82550 PRO/100 S Server Adapter 752438-xxx
- 82559 A56831-xxx,
- A10563-xxx,
- A12171-xxx,
- A12321-xxx,
- A12320-xxx,
- A12170-xxx
- 748568-xxx
- 748565-xxx
- 82550 PRO/100 S Desktop Adapter 751767-xxx
- 82559 748592-xxx,
- A12167-xxx,
- A12318-xxx,
- A12317-xxx,
- A12165-xxx,
- 748569-xxx
- 82559 PRO/100+ Server Adapter 729757-xxx
- 82559 PRO/100 S Management Adapter 748566-xxx,
- 748564-xxx
- 82550 PRO/100 S Dual Port Server Adapter A56831-xxx
- 82551 PRO/100 M Desktop Adapter A80897-xxx
- PRO/100 S Advanced Management Adapter
- 747842-xxx,
- 745171-xxx
- CNR PRO/100 VE Desktop Adapter A10386-xxx,
- A10725-xxx,
- A23801-xxx,
- A19716-xxx
- PRO/100 VM Desktop Adapter A14323-xxx,
- A19725-xxx,
- A23801-xxx,
- A22220-xxx,
- A23796-xxx
-
-
- To verify that your adapter is supported, find the board ID number
- on the adapter. Look for a label that has a barcode and a number
- in the format 123456-001 (six digits hyphen three digits). Match
- this to the list of numbers above.
-
- For more information on how to identify your adapter, go to the
- Adapter & Driver ID Guide at:
-
- http://support.intel.com/support/network/adapter/pro100/21397.htm
-
- For the latest Intel PRO/100 network driver for Linux, see:
-
- http://appsr.intel.com/scripts-df/support_intel.asp
-
- More specific information on configuring the driver is in
- <file:Documentation/networking/e100.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called e100.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Intel(R) PRO/1000 Gigabit Ethernet support
-CONFIG_E1000
- This driver supports Intel(R) PRO/1000 gigabit ethernet family of
- adapters, which includes:
-
- Controller Adapter Name Board IDs
- ---------- ------------ ---------
- 82542 PRO/1000 Gigabit Server Adapter 700262-xxx,
- 717037-xxx
- 82543 PRO/1000 F Server Adapter 738640-xxx,
- A38888-xxx
- 82543 PRO/1000 T Server Adapter A19845-xxx,
- A33948-xxx
- 82544 PRO/1000 XT Server Adapter A51580-xxx
- 82544 PRO/1000 XF Server Adapter A50484-xxx
- 82544 PRO/1000 T Desktop Adapter A62947-xxx
- 82540 PRO/1000 MT Desktop Adapter A78408-xxx
- 82541 PRO/1000 MT Desktop Adapter C91016-xxx
- 82545 PRO/1000 MT Server Adapter A92165-xxx
- 82546 PRO/1000 MT Dual Port Server Adapter A92111-xxx
- 82545 PRO/1000 MF Server Adapter A91622-xxx
- 82545 PRO/1000 MF Server Adapter(LX) A91624-xxx
- 82546 PRO/1000 MF Dual Port Server Adapter A91620-xxx
-
- For more information on how to identify your adapter, go to the
- Adapter & Driver ID Guide at:
-
- <http://support.intel.com/support/network/adapter/pro100/21397.htm>
-
- For general information and support, go to the Intel support
- website at:
-
- <http://support.intel.com>
-
- More specific information on configuring the driver is in
- <file:Documentation/networking/e1000.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called e1000.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-AMD LANCE and PCnet (AT1500 and NE2100) support
-CONFIG_LANCE
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Some LinkSys cards are
- of this type.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called lance.o.
-
-SGI IOC3 Ethernet
-CONFIG_SGI_IOC3_ETH
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-National Semiconductor DP83902AV support
-CONFIG_STNIC
- Support for cards based on the National Semiconductor DP83902AV
- ST-NIC Serial Network Interface Controller for Twisted Pair. This
- is a 10Mbit/sec Ethernet controller. Product overview and specs at
- <http://www.national.com/pf/DP/DP83902A.html>.
-
- If unsure, say N.
-
-3COM cards
-CONFIG_NET_VENDOR_3COM
- If you have a network (Ethernet) card belonging to this class, say Y
- and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- 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 3COM cards. If you say Y, you will be asked for
- your specific card in the following questions.
-
-3c501 "EtherLink" support
-CONFIG_EL1
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Also, consider buying a
- new card, since the 3c501 is slow, broken, and obsolete: you will
- have problems. Some people suggest to ping ("man ping") a nearby
- machine every minute ("man cron") when using this card.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c501.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-3c503 "EtherLink II" support
-CONFIG_EL2
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c503.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-3c505 "EtherLink Plus" support
-CONFIG_ELPLUS
- Information about this network (Ethernet) card can be found in
- <file:Documentation/networking/3c505.txt>. If you have a card of
- this type, say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called 3c505.o.
-
-3c507 (EtherLink 16) support
-CONFIG_EL16
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c507.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-3c523 "EtherlinkMC" support
-CONFIG_ELMC
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c523.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-3c527 "EtherLink/MC 32" support
-CONFIG_ELMC_II
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called 3c527.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-3c509/3c529 (MCA)/3c579 "EtherLink III" support
-CONFIG_EL3
- If you have a network (Ethernet) card belonging to the 3Com
- EtherLinkIII series, say Y and read the Ethernet-HOWTO, available
- from <http://www.tldp.org/docs.html#howto>.
-
- If your card is not working you may need to use the DOS
- setup disk to disable Plug & Play mode, and to select the default
- media type.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called 3c509.o.
-
-3c515 ISA Fast EtherLink
-CONFIG_3C515
- If you have a 3Com ISA EtherLink XL "Corkscrew" 3c515 Fast Ethernet
- network card, say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called 3c515.o.
-
-3c590/3c900 series (592/595/597) "Vortex/Boomerang/Cyclone" support
-CONFIG_VORTEX
- This option enables driver support for a large number of 10mbps and
- 10/100mbps EISA, PCI and PCMCIA 3Com network cards:
-
- "Vortex" (Fast EtherLink 3c590/3c592/3c595/3c597) EISA and PCI
- "Boomerang" (EtherLink XL 3c900 or 3c905) PCI
- "Cyclone" (3c540/3c900/3c905/3c980/3c575/3c656) PCI and Cardbus
- "Tornado" (3c905) PCI
- "Hurricane" (3c555/3cSOHO) PCI
-
- If you have such a card, say Y and read the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>. More
- specific information is in
- <file:Documentation/networking/vortex.txt> and in the comments at
- the beginning of <file:drivers/net/3c59x.c>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called 3c59x.o.
-
-3cr990 series "Typhoon" support
-CONFIG_TYPHOON
- This option enables driver support for the 3cr990 series of cards:
-
- 3C990-TX, 3CR990-TX-95, 3CR990-TX-97, 3CR990-FX-95, 3CR990-FX-97,
- 3CR990SVR, 3CR990SVR95, 3CR990SVR97, 3CR990-FX-95 Server,
- 3CR990-FX-97 Server, 3C990B-TX-M, 3C990BSVR
-
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.linuxdoc.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called typhoon.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Other ISA cards
-CONFIG_NET_ISA
- If your network (Ethernet) card hasn't been mentioned yet and its
- bus system (that's the way the cards talks to the other components
- of your computer) is ISA (as opposed to EISA, VLB or PCI), say Y.
- Make sure you know the name of your card. Read the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If unsure, say Y.
-
- Note that the answer to this question doesn't directly affect the
- kernel: saying N will just cause the configurator to skip all
- the remaining ISA network card questions. If you say Y, you will be
- asked for your specific card in the following questions.
-
-Generic ARCnet support
-CONFIG_ARCNET
- If you have a network card of this type, say Y and check out the
- (arguably) beautiful poetry in
- <file:Documentation/networking/arcnet.txt>.
-
- You need both this driver, and the driver for the particular ARCnet
- chipset of your card. If you don't know, then it's probably a
- COM90xx type card, so say Y (or M) to "ARCnet COM90xx chipset
- support" below.
-
- You might also want to have a look at the Ethernet-HOWTO, available
- from <http://www.tldp.org/docs.html#howto>(even though ARCnet
- is not really Ethernet).
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called arcnet.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Enable old ARCNet packet format (RFC 1051)
-CONFIG_ARCNET_1051
- This allows you to use RFC1051 with your ARCnet card via the virtual
- arc0s device. You only need arc0s if you want to talk to ARCnet
- software complying with the "old" standard, specifically, the DOS
- arcnet.com packet driver, Amigas running AmiTCP, and some variants
- of NetBSD. You do not need to say Y here to communicate with
- industry-standard RFC1201 implementations, like the arcether.com
- packet driver or most DOS/Windows ODI drivers. RFC1201 is included
- automatically as the arc0 device. Please read the ARCnet
- documentation in <file:Documentation/networking/arcnet.txt> for more
- information about using arc0e and arc0s.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called rfc1051.o.
-
-Enable standard ARCNet packet format (RFC 1201)
-CONFIG_ARCNET_1201
- This allows you to use RFC1201 with your ARCnet card via the virtual
- arc0 device. You need to say Y here to communicate with
- industry-standard RFC1201 implementations, like the arcether.com
- packet driver or most DOS/Windows ODI drivers. Please read the
- ARCnet documentation in <file:Documentation/networking/arcnet.txt>
- for more information about using arc0.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called rfc1201.o.
-
-Enable raw mode packet interface
-CONFIG_ARCNET_RAW
- ARCnet "raw mode" packet encapsulation, no soft headers. Unlikely
- to work unless talking to a copy of the same Linux arcnet driver,
- but perhaps marginally faster in that case.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called arc-rawmode.o.
-
-ARCnet COM90xx (normal) chipset driver
-CONFIG_ARCNET_COM90xx
- This is the chipset driver for the standard COM90xx cards. If you
- have always used the old ARCnet driver without knowing what type of
- card you had, this is probably the one for you.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called com90xx.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-ARCnet COM90xx (IO mapped) chipset driver
-CONFIG_ARCNET_COM90xxIO
- This is the chipset driver for the COM90xx cards, using them in
- IO-mapped mode instead of memory-mapped mode. This is slower than
- the normal driver. Only use it if your card doesn't support shared
- memory.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called com90io.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-ARCnet COM90xx (RIM I) chipset driver
-CONFIG_ARCNET_RIM_I
- This is yet another chipset driver for the COM90xx cards, but this
- time only using memory-mapped mode, and no IO ports at all. This
- driver is completely untested, so if you have one of these cards,
- please mail dwmw2@infradead.org, especially if it works!
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module will be called arc-rimi.o. If you want to compile
- it as a module, say M here and read <file:Documentation/modules.txt>
- as well as <file:Documentation/networking/net-modules.txt>.
-
-ARCnet COM20020 chipset driver
-CONFIG_ARCNET_COM20020
- This is the driver for the new COM20020 chipset. It supports such
- things as promiscuous mode, so packet sniffing is possible, and
- extra diagnostic information.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called com20020.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-Cabletron E21xx support
-CONFIG_E2100
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called e2100.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Broadcom 4400 ethernet support (EXPERIMENTAL)
-CONFIG_B44
- If you have a network (Ethernet) controller of this type, say Y and
- read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called b44.
-
-CS89x0 support (Daynaport CS and LC cards)
-CONFIG_CS89x0
- Support for CS89x0 chipset based Ethernet cards. If you have a
- network (Ethernet) card of this type, say Y and read the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto> as well as
- <file:Documentation/networking/cs89x0.txt>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called cs89x.o.
-
-DEPCA, DE10x, DE200, DE201, DE202, DE422 support
-CONFIG_DEPCA
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto> as well as
- <file:drivers/net/depca.c>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called
- depca.o.
-
-EtherWORKS 3 (DE203, DE204, DE205) support
-CONFIG_EWRK3
- This driver supports the DE203, DE204 and DE205 network (Ethernet)
- cards. If this is for you, say Y and read
- <file:Documentation/networking/ewrk3.txt> in the kernel source as
- well as the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called ewrk3.o.
-
-SEEQ8005 support
-CONFIG_SEEQ8005
- This is a driver for the SEEQ 8005 network (Ethernet) card. If this
- is for you, read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called ewrk3.o.
-
-AT1700/1720 support
-CONFIG_AT1700
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called at1700.o.
-
-FMV-181/182/183/184 support
-CONFIG_FMV18X
- If you have a Fujitsu FMV-181/182/183/184 network (Ethernet) card,
- say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you use an FMV-183 or FMV-184 and it is not working, you may need
- to disable Plug & Play mode of the card.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called fmv18x.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-EtherExpressPro and EtherExpress 10 (i82595) support
-CONFIG_EEXPRESS_PRO
- If you have a network (Ethernet) card of this type, say Y. This
- driver supports intel i82595{FX,TX} based boards. Note however
- that the EtherExpress PRO/100 Ethernet card has its own separate
- driver. Please read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called eepro.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-EtherExpress 16 support
-CONFIG_EEXPRESS
- If you have an EtherExpress16 network (Ethernet) card, say Y and
- read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Note that the Intel
- EtherExpress16 card used to be regarded as a very poor choice
- because the driver was very unreliable. We now have a new driver
- that should do better.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called eexpress.o.
-
-Packet Engines Hamachi GNIC-II support
-CONFIG_HAMACHI
- If you have a Gigabit Ethernet card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called hamachi.o.
-
-HP PCLAN+ (27247B and 27252A) support
-CONFIG_HPLAN_PLUS
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called hp-plus.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-HP PCLAN (27245 and other 27xxx series) support
-CONFIG_HPLAN
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called hp.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-HP 10/100VG PCLAN (ISA, EISA, PCI) support
-CONFIG_HP100
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called hp100.o.
-
-NE2000/NE1000 support
-CONFIG_NE2000
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Many Ethernet cards
- without a specific driver are compatible with NE2000.
-
- If you have a PCI NE2000 card however, say N here and Y to "PCI
- NE2000 support", above. If you have a NE2000 card and are running on
- an MCA system (a bus system used on some IBM PS/2 computers and
- laptops), say N here and Y to "NE/2 (ne2000 MCA version) support",
- below.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ne.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-National Semiconductor DP8381x series PCI Ethernet support
-CONFIG_NATSEMI
- This driver is for the National Semiconductor DP83810 series,
- which is used in cards from PureData, NetGear, Linksys
- and others, including the 83815 chip.
- More specific information and updates are available from
- <http://www.scyld.com/network/natsemi.html>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called natsemi.o.
-
-NatSemi workaround for high errors
-CONFIG_NATSEMI_CABLE_MAGIC
- Some systems see lots of errors with NatSemi ethernet controllers
- on certain cables. If you are seeing lots of errors, try turning
- this option on. Some boards have incorrect values for supporting
- resistors that can cause this change to break. If you turn this
- option on and your network suddenly stops working, turn this
- option off.
-
-SK_G16 support
-CONFIG_SK_G16
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-NE/2 (ne2000 MCA version) support
-CONFIG_NE2_MCA
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ne2.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-SKnet MCA support
-CONFIG_SKMC
- These are Micro Channel Ethernet adapters. You need to say Y to "MCA
- support" in order to use this driver. Supported cards are the SKnet
- Junior MC2 and the SKnet MC2(+). The driver automatically
- distinguishes between the two cards. Note that using multiple boards
- of different type hasn't been tested with this driver. Say Y if you
- have one of these Ethernet adapters.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called sk_mca.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-IBM LAN Adapter/A support
-CONFIG_IBMLANA
- This is a Micro Channel Ethernet adapter. You need to set
- CONFIG_MCA to use this driver. It is both available as an in-kernel
- driver and as a module ( = code which can be inserted in and removed
- from the running kernel whenever you want). If you want to compile
- it as a module, say M here and read <file:Documentation/modules.txt>
- as well as <file:Documentation/networking/net-modules.txt>. The only
- currently supported card is the IBM LAN Adapter/A for Ethernet. It
- will both support 16K and 32K memory windows, however a 32K window
- gives a better security against packet losses. Usage of multiple
- boards with this driver should be possible, but has not been tested
- up to now due to lack of hardware.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ibmlana.o.
-
-EISA, VLB, PCI and on board controllers
-CONFIG_NET_PCI
- This is another class of network cards which attach directly to the
- bus. If you have one of those, say Y and read the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- 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.
-
-AMD PCnet32 (VLB and PCI) support
-CONFIG_PCNET32
- If you have a PCnet32 or PCnetPCI based network (Ethernet) card,
- answer Y here and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pcnet32.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-AMD 8111 (new PCI lance) support
-CONFIG_AMD8111_ETH
- If you have an AMD 8111-based PCI lance ethernet card,
- answer Y here and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called amd8111e.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Ansel Communications EISA 3200 support
-CONFIG_AC3200
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ac3200.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Mylex EISA LNE390A/LNE390B support
-CONFIG_LNE390
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called lne390.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Novell/Eagle/Microdyne NE3210 EISA support
-CONFIG_NE3210
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Note that this driver
- will NOT WORK for NE3200 cards as they are completely different.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ne3210.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Apricot Xen-II on board Ethernet
-CONFIG_APRICOT
- If you have a network (Ethernet) controller of this type, say Y and
- read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. The module will be
- called apricot.o.
-
-Generic DECchip & DIGITAL EtherWORKS PCI/EISA
-CONFIG_DE4X5
- This is support for the DIGITAL series of PCI/EISA Ethernet cards.
- These include the DE425, DE434, DE435, DE450 and DE500 models. If
- you have a network card of this type, say Y and read the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. More specific
- information is contained in
- <file:Documentation/networking/de4x5.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called de4x5.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-DECchip Tulip (dc21x4x) PCI support
-CONFIG_TULIP
- This driver is developed for the SMC EtherPower series Ethernet
- cards and also works with cards based on the DECchip
- 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are
- of this type. (If your card is NOT SMC EtherPower 10/100 PCI
- (smc9332dst), you can also try the driver for "Generic DECchip"
- cards, above. However, most people with a network card of this type
- will say Y here.) Do read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. More specific
- information is contained in
- <file:Documentation/networking/tulip.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tulip.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Use PCI shared memory for NIC registers
-CONFIG_TULIP_MMIO
- Use PCI shared memory for the NIC registers, rather than going through
- the Tulip's PIO (programmed I/O ports). Faster, but could produce
- obscure bugs if your mainboard has memory controller timing issues.
- If in doubt, say N.
-
-Digi Intl. RightSwitch SE-X support
-CONFIG_DGRS
- This is support for the Digi International RightSwitch series of
- PCI/EISA Ethernet switch cards. These include the SE-4 and the SE-6
- models. If you have a network card of this type, say Y and read the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. More specific
- information is contained in <file:Documentation/networking/dgrs.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dgrs.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-EtherExpress Pro/100 support
-CONFIG_EEPRO100
- If you have an Intel EtherExpress PRO/100 PCI network (Ethernet)
- card, say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called eepro100.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-Use PIO instead of MMIO
-CONFIG_EEPRO100_PIO
- This instructs the driver to use programmed I/O ports (PIO) instead
- of PCI shared memory (MMIO). This can possibly solve some problems
- in case your mainboard has memory consistency issues. If unsure,
- say N.
-
-Enable Power Management
-CONFIG_EEPRO100_PM
- Many Intel EtherExpress PRO/100 PCI network cards are capable
- of providing power management capabilities. To make use of these
- capabilities, say Y.
-
- WARNING: This option is intended for kernel developers and testers.
- It is still very experimental, with some people reporting complete
- lockups.
-
- It is recommended to say N here.
-
-Myson MTD-8xx PCI Ethernet support
-CONFIG_FEALNX
- Say Y here to support the Mysom MTD-800 family of PCI-based Ethernet
- cards. Specifications and data at
- <http://www.myson.com.hk/mtd/datasheet/>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called fealnx.o.
-
-LP486E on board Ethernet
-CONFIG_LP486E
- Say Y here to support the 82596-based on-board Ethernet controller
- for the Panther motherboard, which is one of the two shipped in the
- Intel Professional Workstation.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called lp486e.o.
-
-ICL EtherTeam 16i/32 support
-CONFIG_ETH16I
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called eth16i.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-TI ThunderLAN support
-CONFIG_TLAN
- If you have a PCI Ethernet network card based on the ThunderLAN chip
- which is supported by this driver, say Y and read the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- Devices currently supported by this driver are Compaq Netelligent,
- Compaq NetFlex and Olicom cards. Please read the file
- <file:Documentation/networking/tlan.txt> for more details.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tlan.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
- Please email feedback to torben.mathiasen@compaq.com.
-
-VIA Rhine support
-CONFIG_VIA_RHINE
- If you have a VIA "rhine" based network card (Rhine-I (3043) or
- Rhine-2 (VT86c100A)), say Y here.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called via-rhine.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt> as
- well as <file:Documentation/networking/net-modules.txt>.
-
-VIA Rhine MMIO support (EXPERIMENTAL)
-CONFIG_VIA_RHINE_MMIO
- This instructs the driver to use PCI shared memory (MMIO) instead of
- programmed I/O ports (PIO). Enabling this gives an improvement in
- processing time in parts of the driver.
-
- It is not known if this works reliably on all "rhine" based cards,
- but it has been tested successfully on some DFE-530TX adapters.
-
- If unsure, say N.
-
-Davicom DM910x/DM980x support
-CONFIG_DM9102
- This driver is for DM9102(A)/DM9132/DM9801 compatible PCI cards from
- Davicom (<http://www.davicom.com.tw/>). If you have such a network
- (Ethernet) card, say Y. Some information is contained in the file
- <file:Documentation/networking/dmfe.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dmfe.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-Racal-Interlan EISA ES3210 support
-CONFIG_ES3210
- If you have a network (Ethernet) card of this type, say Y and read
- the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called es3210.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/networking/net-modules.txt>.
-
-SMC EtherPower II
-CONFIG_EPIC100
- This driver is for the SMC EtherPower II 9432 PCI Ethernet NIC,
- which is based on the SMC83c17x (EPIC/100).
- More specific information and updates are available from
- <http://www.scyld.com/network/epic100.html>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called epic100.o.
-
-DEC LANCE Ethernet controller support
-CONFIG_DECLANCE
- This driver is for the series of Ethernet controllers produced by
- DEC (now Compaq) based on the AMD Lance chipset, including the
- DEPCA series. (This chipset is better known via the NE2100 cards.)
-
-SGI Seeq Ethernet controller support
-CONFIG_SGISEEQ
- Say Y here if you have an Seeq based Ethernet network card. This is
- used in many Silicon Graphics machines.
-
-Sundance Alta PCI Ethernet support
-CONFIG_SUNDANCE
- This driver is for the Sundance "Alta" chip.
- More specific information and updates are available from
- <http://www.scyld.com/network/sundance.html>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sundance.o.
-
-Sundance Alta memory-mapped I/O support
-CONFIG_SUNDANCE_MMIO
- Enable memory-mapped I/O for interaction with Sundance NIC registers.
- Do NOT enable this by default, PIO (enabled when MMIO is disabled)
- is known to solve bugs on certain chips.
-
- If unsure, say N.
-
-Sun3/Sun3x on-board LANCE support
-CONFIG_SUN3LANCE
- Most Sun3 and Sun3x motherboards (including the 3/50, 3/60 and 3/80)
- featured an AMD Lance 10Mbit Ethernet controller on board; say Y
- here to compile in the Linux driver for this and enable Ethernet.
- General Linux information on the Sun 3 and 3x series (now
- discontinued) is at
- <http://www.angelfire.com/ca2/tech68k/sun3.html>.
-
- If you're not building a kernel for a Sun 3, say N.
-
-Sun3 on-board Intel 82586 support
-CONFIG_SUN3_82586
- This driver enables support for the on-board Intel 82586 based
- Ethernet adapter found on Sun 3/1xx and 3/2xx motherboards. Note
- that this driver does not support 82586-based adapters on additional
- VME boards.
-
-Winbond W89c840 PCI Ethernet support
-CONFIG_WINBOND_840
- This driver is for the Winbond W89c840 chip. It also works with
- the TX9882 chip on the Compex RL100-ATX board.
- More specific information and updates are available from
- <http://www.scyld.com/network/drivers.html>.
-
-Zenith Z-Note support
-CONFIG_ZNET
- The Zenith Z-Note notebook computer has a built-in network
- (Ethernet) card, and this is the Linux driver for it. Note that the
- IBM Thinkpad 300 is compatible with the Z-Note and is also supported
- by this driver. Read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Philips SAA9730 Ethernet support
-CONFIG_LAN_SAA9730
- The SAA9730 is a combined multimedia and peripheral controller used
- in thin clients, Internet access terminals, and diskless
- workstations.
- See <http://www.semiconductors.philips.com/pip/SAA9730_flyer_1>.
-
-Pocket and portable adapters
-CONFIG_NET_POCKET
- Cute little network (Ethernet) devices which attach to the parallel
- port ("pocket adapters"), commonly used with laptops. If you have
- one of those, say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to plug a network (or some other) card into the PCMCIA
- (or PC-card) slot of your laptop instead (PCMCIA is the standard for
- credit card size extension cards used by all modern laptops), you
- need the pcmcia-cs package (location contained in the file
- <file:Documentation/Changes>) and you can say N here.
-
- Laptop users should read the Linux Laptop home page at
- <http://www.cs.utexas.edu/users/kharker/linux-laptop/>.
-
- 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 devices. If you say Y, you
- will be asked for your specific device in the following questions.
-
-AT-LAN-TEC/RealTek pocket adapter support
-CONFIG_ATP
- This is a network (Ethernet) device which attaches to your parallel
- port. Read <file:drivers/net/atp.c> as well as the Ethernet-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>, if you
- want to use this. If you intend to use this driver, you should have
- said N to the "Parallel printer support", because the two drivers
- don't like each other.
-
- If you want to compile this driver as a module however ( = code
- which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called atp.o.
-
-D-Link DE600 pocket adapter support
-CONFIG_DE600
- This is a network (Ethernet) device which attaches to your parallel
- port. Read <file:Documentation/networking/DLINK.txt> as well as the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, if you want to use
- this. It is possible to have several devices share a single parallel
- port and it is safe to compile the corresponding drivers into the
- kernel.
-
- If you want to compile this driver as a module however ( = code
- which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>.
- The module will be called de600.o.
-
-D-Link DE620 pocket adapter support
-CONFIG_DE620
- This is a network (Ethernet) device which attaches to your parallel
- port. Read <file:Documentation/networking/DLINK.txt> as well as the
- Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, if you want to use
- this. It is possible to have several devices share a single parallel
- port and it is safe to compile the corresponding drivers into the
- kernel.
-
- If you want to compile this driver as a module however ( = code
- which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>.
- The module will be called de620.o.
-
-Token Ring driver support
-CONFIG_TR
- Token Ring is IBM's way of communication on a local network; the
- rest of the world uses Ethernet. To participate on a Token Ring
- network, you need a special Token ring network card. If you are
- connected to such a Token Ring network and want to use your Token
- Ring card under Linux, say Y here and to the driver for your
- particular card below and read the Token-Ring mini-HOWTO, available
- from <http://www.tldp.org/docs.html#howto>. Most people can
- say N here.
-
-IBM Tropic chipset based adapter support
-CONFIG_IBMTR
- This is support for all IBM Token Ring cards that don't use DMA. If
- you have such a beast, say Y and read the Token-Ring mini-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- Warning: this driver will almost definitely fail if more than one
- active Token Ring card is present.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ibmtr.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-IBM Olympic chipset PCI adapter support
-CONFIG_IBMOL
- This is support for all non-Lanstreamer IBM PCI Token Ring Cards.
- Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II
- Wake On Lan, and PCI 100/16/4 adapters.
-
- If you have such an adapter, say Y and read the Token-Ring
- mini-HOWTO, available from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called olympic.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- Also read <file:Documentation/networking/olympic.txt> or check the
- Linux Token Ring Project site for the latest information at
- <http://www.linuxtr.net/>.
-
-IBM Lanstreamer chipset PCI adapter support
-CONFIG_IBMLS
- This is support for IBM Lanstreamer PCI Token Ring Cards.
-
- If you have such an adapter, say Y and read the Token-Ring
- mini-HOWTO, available from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a modules ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The modules will be called lanstreamer.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Generic TMS380 Token Ring ISA/PCI/MCA/EISA adapter support
-CONFIG_TMS380TR
- This driver provides generic support for token ring adapters
- based on the Texas Instruments TMS380 series chipsets. This
- includes the SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect
- TR4/16(+) PCI (SK-4590), SysKonnect TR4/16 PCI (SK-4591),
- Compaq 4/16 PCI, Thomas-Conrad TC4048 4/16 PCI, and several
- Madge adapters. If you say Y here, you will be asked to select
- which cards to support below. If you're using modules, each
- class of card will be supported by a separate module.
-
- If you have such an adapter and would like to use it, say Y and
- read the Token-Ring mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- Also read the file <file:Documentation/networking/tms380tr.txt> or
- check <http://www.auk.cx/tms380tr/>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tms380tr.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Generic TMS380 PCI support
-CONFIG_TMSPCI
- This tms380 module supports generic TMS380-based PCI cards.
-
- These cards are known to work:
- - Compaq 4/16 TR PCI
- - SysKonnect TR4/16 PCI (SK-4590/SK-4591)
- - Thomas-Conrad TC4048 PCI 4/16
- - 3Com Token Link Velocity
-
- This driver is available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tmspci.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Generic TMS380 ISA support
-CONFIG_TMSISA
- This tms380 module supports generic TMS380-based ISA cards.
-
- These cards are known to work:
- - SysKonnect TR4/16 ISA (SK-4190)
-
- This driver is available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tmsisa.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Madge Smart 16/4 PCI Mk2 support
-CONFIG_ABYSS
- This tms380 module supports the Madge Smart 16/4 PCI Mk2
- cards (51-02).
-
- This driver is available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called abyss.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Madge Smart 16/4 Ringnode MicroChannel
-CONFIG_MADGEMC
- This tms380 module supports the Madge Smart 16/4 MC16 and MC32
- MicroChannel adapters.
-
- This driver is available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called madgemc.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-SMC ISA/MCA Token Ring adapter support
-CONFIG_SMCTR
- This is support for the ISA and MCA SMC Token Ring cards,
- specifically SMC TokenCard Elite (8115T) and SMC TokenCard Elite/A
- (8115T/A) adapters.
-
- If you have such an adapter and would like to use it, say Y or M and
- read the Token-Ring mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto> and the file
- <file:Documentation/networking/smctr.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called smctr.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-3COM 3C359 Token Link Velocity XL PCI adapter support
-CONFIG_3C359
- This is support for the 3Com PCI Velocity XL cards, specifically
- the 3Com 3C359, please note this is not for the 3C339 cards, you
- should use the tms380 driver instead.
-
- If you have such an adapter, say Y and read the Token-Ring
- mini-HOWTO, available from <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will will be called 3c359.o. If you want to compile it
- as a module, say M here and read Documentation/modules.txt.
-
- Also read the file <file:Documentation/networking/3c359.txt> or check the
- Linux Token Ring Project site for the latest information at
- <http://www.linuxtr.net>
-
-Sun Happy Meal 10/100baseT support
-CONFIG_HAPPYMEAL
- This driver supports the "hme" interface present on most Ultra
- systems and as an option on older Sbus systems. This driver supports
- both PCI and Sbus devices. This driver also supports the "qfe" quad
- 100baseT device available in both PCI and Sbus configurations.
-
- This support is also available as a module called sunhme.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun Lance support
-CONFIG_SUNLANCE
- This driver supports the "le" interface present on all 32-bit Sparc
- systems, on some older Ultra systems and as an Sbus option. These
- cards are based on the AMD Lance chipset, which is better known
- via the NE2100 cards.
-
- This support is also available as a module called sunlance.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun BigMAC 10/100baseT support
-CONFIG_SUNBMAC
- This driver supports the "be" interface available as an Sbus option.
- This is Sun's older 100baseT Ethernet device.
-
- This support is also available as a module called sunbmac.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun QuadEthernet support
-CONFIG_SUNQE
- This driver supports the "qe" 10baseT Ethernet device, available as
- an Sbus option. Note that this is not the same as Quad FastEthernet
- "qfe" which is supported by the Happy Meal driver instead.
-
- This support is also available as a module called sunqe.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Traffic Shaper
-CONFIG_SHAPER
- The traffic shaper is a virtual network device that allows you to
- limit the rate of outgoing data flow over some other network device.
- The traffic that you want to slow down can then be routed through
- these virtual devices. See
- <file:Documentation/networking/shaper.txt> for more information.
-
- An alternative to this traffic shaper is the experimental
- Class-Based Queueing (CBQ) scheduling support which you get if you
- say Y to "QoS and/or fair queueing" above.
-
- To set up and configure shaper devices, you need the shapecfg
- program, available from <ftp://shadow.cabi.net/pub/Linux/> in the
- shaper package.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called shaper.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-FDDI driver support
-CONFIG_FDDI
- Fiber Distributed Data Interface is a high speed local area network
- design; essentially a replacement for high speed Ethernet. FDDI can
- run over copper or fiber. If you are connected to such a network and
- want a driver for the FDDI card in your computer, say Y here (and
- then also Y to the driver for your FDDI card, below). Most people
- will say N.
-
-Digital DEFEA and DEFPA adapter support
-CONFIG_DEFXX
- This is support for the DIGITAL series of EISA (DEFEA) and PCI
- (DEFPA) controllers which can connect you to a local FDDI network.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called defxx.o.
-
-SysKonnect FDDI PCI support
-CONFIG_SKFP
- Say Y here if you have a SysKonnect FDDI PCI adapter.
- The following adapters are supported by this driver:
- - SK-5521 (SK-NET FDDI-UP)
- - SK-5522 (SK-NET FDDI-UP DAS)
- - SK-5541 (SK-NET FDDI-FP)
- - SK-5543 (SK-NET FDDI-LP)
- - SK-5544 (SK-NET FDDI-LP DAS)
- - SK-5821 (SK-NET FDDI-UP64)
- - SK-5822 (SK-NET FDDI-UP64 DAS)
- - SK-5841 (SK-NET FDDI-FP64)
- - SK-5843 (SK-NET FDDI-LP64)
- - SK-5844 (SK-NET FDDI-LP64 DAS)
- - Netelligent 100 FDDI DAS Fibre SC
- - Netelligent 100 FDDI SAS Fibre SC
- - Netelligent 100 FDDI DAS UTP
- - Netelligent 100 FDDI SAS UTP
- - Netelligent 100 FDDI SAS Fibre MIC
-
- Read <file:Documentation/networking/skfp.txt> for information about
- the driver.
-
- Questions concerning this driver can be addressed to:
- linux@syskonnect.de
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. This is
- recommended. The module will be called skfp.o.
-
-HIgh Performance Parallel Interface (HIPPI) support
-CONFIG_HIPPI
- HIgh Performance Parallel Interface (HIPPI) is a 800Mbit/sec and
- 1600Mbit/sec dual-simplex switched or point-to-point network. HIPPI
- can run over copper (25m) or fiber (300m on multi-mode or 10km on
- single-mode). HIPPI networks are commonly used for clusters and to
- connect to super computers. If you are connected to a HIPPI network
- and have a HIPPI network card in your computer that you want to use
- under Linux, say Y here (you must also remember to enable the driver
- for your HIPPI card below). Most people will say N here.
-
-Essential RoadRunner HIPPI PCI adapter support
-CONFIG_ROADRUNNER
- Say Y here if this is your PCI HIPPI network card.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called rrunner.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-Use large TX/RX rings
-CONFIG_ROADRUNNER_LARGE_RINGS
- If you say Y here, the RoadRunner driver will preallocate up to 2 MB
- of additional memory to allow for fastest operation, both for
- transmitting and receiving. This memory cannot be used by any other
- kernel code or by user space programs. Say Y here only if you have
- the memory.
-
-Acorn Ether1 support
-CONFIG_ARM_ETHER1
- If you have an Acorn system with one of these (AKA25) network cards,
- you should say Y to this option if you wish to use it with Linux.
-
-Acorn/ANT Ether3 support
-CONFIG_ARM_ETHER3
- If you have an Acorn system with one of these network cards, you
- should say Y to this option if you wish to use it with Linux.
-
-I-Cubed EtherH support
-CONFIG_ARM_ETHERH
- If you have an Acorn system with one of these network cards, you
- should say Y to this option if you wish to use it with Linux.
-
-EBSA-110 Ethernet interface (AM79C961A)
-CONFIG_ARM_AM79C961A
- If you wish to compile a kernel for the EBSA-110, then you should
- always answer Y to this.
-
-Support Thumb instructions
-CONFIG_ARM_THUMB
- Say Y if you want to have kernel support for ARM Thumb instructions,
- fault handlers, and system calls.
-
- The Thumb instruction set is a compressed form of the standard ARM
- instruction set resulting in smaller binaries at the expense of
- slightly less efficient code.
-
- If you don't know what this all is, saying Y is a safe choice.
-
-Support CD-ROM drives that are not SCSI or IDE/ATAPI
-CONFIG_CD_NO_IDESCSI
- If you have a CD-ROM drive that is neither SCSI nor IDE/ATAPI, say Y
- here, otherwise N. Read the CD-ROM-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- 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 these CD-ROM drives. If you are unsure what you
- have, say Y and find out whether you have one of the following
- drives.
-
- For each of these drivers, a file Documentation/cdrom/{driver_name}
- exists. Especially in cases where you do not know exactly which kind
- of drive you have you should read there. Most of these drivers use a
- file drivers/cdrom/{driver_name}.h where you can define your
- interface parameters and switch some internal goodies.
-
- All these CD-ROM drivers are also usable as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want). If you want to compile them as module, say M instead of Y and
- read <file:Documentation/modules.txt>.
-
- If you want to use any of these CD-ROM drivers, you also have to
- answer Y or M to "ISO 9660 CD-ROM file system support" below (this
- answer will get "defaulted" for you if you enable any of the Linux
- CD-ROM drivers).
-
-Sony CDU31A/CDU33A CD-ROM support
-CONFIG_CDU31A
- These CD-ROM drives have a spring-pop-out caddyless drawer, and a
- rectangular green LED centered beneath it. NOTE: these CD-ROM
- drives will not be auto detected by the kernel at boot time; you
- have to provide the interface address as an option to the kernel at
- boot time as described in <file:Documentation/cdrom/cdu31a> or fill
- in your parameters into <file:drivers/cdrom/cdu31a.c>. Try "man
- bootparam" or see the documentation of your boot loader (lilo or
- loadlin) about how to pass options to the kernel.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cdu31a.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Standard Mitsumi [no XA/Multisession] CD-ROM support
-CONFIG_MCD
- This is the older of the two drivers for the older Mitsumi models
- LU-005, FX-001 and FX-001D. This is not the right driver for the
- FX-001DE and the triple or quad speed models (all these are
- IDE/ATAPI models). Please also the file
- <file:Documentation/cdrom/mcd>.
-
- With the old LU-005 model, the whole drive chassis slides out for cd
- insertion. The FX-xxx models use a motorized tray type mechanism.
- Note that this driver does not support XA or MultiSession CDs
- (PhotoCDs). There is a new driver (next question) which can do
- this. If you want that one, say N here.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-IRQ channel for Mitsumi CD-ROM
-CONFIG_MCD_IRQ
- This allows you to specify the default value of the IRQ used by the
- driver. This setting can be overridden by passing the "mcd="
- parameter to the kernel at boot time (or at module load time if you
- said M to "Standard Mitsumi CD-ROM support").
-
-I/O base address for Mitsumi CD-ROM
-CONFIG_MCD_BASE
- This allows you to specify the default value of the I/O base address
- used by the driver. This setting can be overridden by passing the
- "mcd=" parameter to the kernel at boot time (or at module load time
- if you said M to "Standard Mitsumi CD-ROM support").
-
-Mitsumi [XA/MultiSession] CD-ROM support
-CONFIG_MCDX
- Use this driver if you want to be able to read XA or MultiSession
- CDs (PhotoCDs) as well as ordinary CDs with your Mitsumi LU-005,
- FX-001 or FX-001D CD-ROM drive. In addition, this driver uses much
- less kernel memory than the old one, if that is a concern. This
- driver is able to support more than one drive, but each drive needs
- a separate interface card. Please read the file
- <file:Documentation/cdrom/mcdx>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mcdx.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Matsushita/Panasonic/Creative, Longshine, TEAC CD-ROM support
-CONFIG_SBPCD
- This driver supports most of the drives which use the Panasonic or
- Sound Blaster interface. Please read the file
- <file:Documentation/cdrom/sbpcd>.
-
- The Matsushita CR-521, CR-522, CR-523, CR-562, CR-563 drives
- (sometimes labeled "Creative"), the Creative Labs CD200, the
- Longshine LCS-7260, the "IBM External ISA CD-ROM" (in fact a CR-56x
- model), the TEAC CD-55A fall under this category. Some other
- "electrically compatible" drives (Vertos, Genoa, some Funai models)
- are currently not supported; for the Sanyo H94A drive currently a
- separate driver (asked later) is responsible. Most drives have a
- uniquely shaped faceplate, with a caddyless motorized drawer, but
- without external brand markings. The older CR-52x drives have a
- caddy and manual loading/eject, but still no external markings. The
- driver is able to do an extended auto-probing for interface
- addresses and drive types; this can help to find facts in cases you
- are not sure, but can consume some time during the boot process if
- none of the supported drives gets found. Once your drive got found,
- you should enter the reported parameters into
- <file:drivers/cdrom/sbpcd.h> and set "DISTRIBUTION 0" there.
-
- This driver can support up to four CD-ROM controller cards, and each
- card can support up to four CD-ROM drives; if you say Y here, you
- will be asked how many controller cards you have. If compiled as a
- module, only one controller card (but with up to four drives) is
- usable.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sbpcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Matsushita/Panasonic, ... second CD-ROM controller support
-CONFIG_SBPCD2
- Say Y here only if you have two CD-ROM controller cards of this type
- (usually only if you have more than four drives). You should enter
- the parameters for the second, third and fourth interface card into
- <file:drivers/cdrom/sbpcd.h> before compiling the new kernel. Read
- the file <file:Documentation/cdrom/sbpcd>.
-
-Matsushita/Panasonic, ... third CD-ROM controller support
-CONFIG_SBPCD3
- Say Y here only if you have three CD-ROM controller cards of this
- type (usually only if you have more than six drives). You should
- enter the parameters for the second, third and fourth interface card
- into <file:include/linux/sbpcd.h> before compiling the new kernel.
- Read the file <file:Documentation/cdrom/sbpcd>.
-
-Matsushita/Panasonic, ... fourth CD-ROM controller support
-CONFIG_SBPCD4
- Say Y here only if you have four CD-ROM controller cards of this
- type (usually only if you have more than eight drives). You should
- enter the parameters for the second, third and fourth interface card
- into <file:include/linux/sbpcd.h> before compiling the new kernel.
- Read the file <file:Documentation/cdrom/sbpcd>.
-
-Aztech/Orchid/Okano/Wearnes/TXC/CyDROM CD-ROM support
-CONFIG_AZTCD
- This is your driver if you have an Aztech CDA268-01A, Orchid
- CD-3110, Okano or Wearnes CDD110, Conrad TXC, or CyCD-ROM CR520 or
- CR540 CD-ROM drive. This driver -- just like all these CD-ROM
- drivers -- is NOT for CD-ROM drives with IDE/ATAPI interfaces, such
- as Aztech CDA269-031SE. Please read the file
- <file:Documentation/cdrom/aztcd>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aztcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Sony CDU535 CD-ROM support
-CONFIG_CDU535
- This is the driver for the older Sony CDU-535 and CDU-531 CD-ROM
- drives. Please read the file <file:Documentation/cdrom/sonycd535>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sonycd535.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Goldstar R420 CD-ROM support
-CONFIG_GSCD
- If this is your CD-ROM drive, say Y here. As described in the file
- <file:Documentation/cdrom/gscd>, you might have to change a setting
- in the file <file:drivers/cdrom/gscd.h> before compiling the
- kernel. Please read the file <file:Documentation/cdrom/gscd>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called gscd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Philips/LMS CM206 CD-ROM support
-CONFIG_CM206
- If you have a Philips/LMS CD-ROM drive cm206 in combination with a
- cm260 host adapter card, say Y here. Please also read the file
- <file:Documentation/cdrom/cm206>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cm206.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Optics Storage DOLPHIN 8000AT CD-ROM support
-CONFIG_OPTCD
- This is the driver for the 'DOLPHIN' drive with a 34-pin Sony
- compatible interface. It also works with the Lasermate CR328A. If
- you have one of those, say Y. This driver does not work for the
- Optics Storage 8001 drive; use the IDE-ATAPI CD-ROM driver for that
- one. Please read the file <file:Documentation/cdrom/optcd>.
-
- If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
- file system support" below, because that's the file system used on
- CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called optcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Sanyo CDR-H94A CD-ROM support
-CONFIG_SJCD
- If this is your CD-ROM drive, say Y here and read the file
- <file:Documentation/cdrom/sjcd>. You should then also say Y or M to
- "ISO 9660 CD-ROM file system support" below, because that's the
- file system used on CD-ROMs.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sjcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-ISP16/MAD16/Mozart soft configurable cdrom interface support
-CONFIG_ISP16_CDI
- These are sound cards with built-in cdrom interfaces using the OPTi
- 82C928 or 82C929 chips. Say Y here to have them detected and
- possibly configured at boot time. In addition, You'll have to say Y
- to a driver for the particular cdrom drive you have attached to the
- card. Read <file:Documentation/cdrom/isp16> for details.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called isp16.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-iSeries Virtual I/O CD Support
-CONFIG_VIOCD
- If you are running Linux on an IBM iSeries system and you want to
- read a CD drive owned by OS/400, say Y here.
-
-Quota support
-CONFIG_QUOTA
- If you say Y here, you will be able to set per user limits for disk
- usage (also called disk quotas). Currently, it works only for the
- ext2 file system. You need additional software in order to use quota
- support (you can download sources from
- <http://www.sf.net/projects/linuxquota/>). For further details, read
- the Quota mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. Probably the quota
- support is only useful for multi user systems. If unsure, say N.
-
-VFS v0 quota format support
-CONFIG_QFMT_V2
- This quota format allows using quotas with 32-bit UIDs/GIDs. If you
- need this functionality say Y here. Note that you will need latest
- quota utilities for new quota format with this kernel.
-
-Memory Technology Device (MTD) support
-CONFIG_MTD
- Memory Technology Devices are flash, RAM and similar chips, often
- used for solid state file systems on embedded devices. This option
- will provide the generic support for MTD drivers to register
- themselves with the kernel and for potential users of MTD devices
- to enumerate the devices which are present and obtain a handle on
- them. It will also allow you to select individual drivers for
- particular hardware and users of MTD devices. If unsure, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdcore.o
-
-MTD debugging support
-CONFIG_MTD_DEBUG
- This turns on low-level debugging for the entire MTD sub-system.
- Normally, you should say 'N'.
-
-MTD partitioning support
-CONFIG_MTD_PARTITIONS
- If you have a device which needs to divide its flash chip(s) up
- into multiple 'partitions', each of which appears to the user as
- a separate MTD device, you require this option to be enabled. If
- unsure, say 'Y'.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdpart.o
-
- Note, however, that you don't need this option for the DiskOnChip
- devices. Partitioning on NFTL 'devices' is a different - that's the
- 'normal' form of partitioning used on a block device.
-
-RedBoot partition table parsing
-CONFIG_MTD_REDBOOT_PARTS
- RedBoot is a ROM monitor and bootloader which deals with multiple
- 'images' in flash devices by putting a table in the last erase block
- of the device, similar to a partition table, which gives the
- offsets, lengths and names of all the images stored in the flash.
-
- If you need code which can detect and parse this table, and register
- MTD 'partitions' corresponding to each image in the table, enable
- this option.
-
- You will still need the parsing functions to be called by the driver
- for your particular device. It won't happen automatically. The
- SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
- example.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- redboot.o
-
-CONFIG_MTD_CMDLINE_PARTS
- Allow generic configuration of the MTD paritition tables via the kernel
- command line. Multiple flash resources are supported for hardware where
- different kinds of flash memory are available.
-
- You will still need the parsing functions to be called by the driver
- for your particular device. It won't happen automatically. The
- SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
- example.
-
- The format for the command line is as follows:
-
- mtdparts=<mtddef>[;<mtddef]
- <mtddef> := <mtd-id>:<partdef>[,<partdef>]
- <partdef> := <size>[@offset][<name>][ro]
- <mtd-id> := unique id used in mapping driver/device
- <size> := standard linux memsize OR "-" to denote all
- remaining space
- <name> := (NAME)
-
- Due to the way Linux handles the command line, no spaces are
- allowed in the partition definition, including mtd id's and partition
- names.
-
- Examples:
-
- 1 flash resource (mtd-id "sa1100"), with 1 single writable partition:
- mtdparts=sa1100:-
-
- Same flash, but 2 named partitions, the first one being read-only:
- mtdparts=sa1100:256k(ARMboot)ro,-(root)
-
- If unsure, say 'N'.
-
-MTD concatenating support
-CONFIG_MTD_CONCAT
- Support for concatenating several MTD devices into a single
- (virtual) one. This allows you to have -for example- a JFFS(2)
- file system spanning multiple physical flash chips. If unsure,
- say 'Y'.
-
- If compiled as a module, it will be called mtdconcat.o.
-
-ARM Firmware Suite flash layout / partition parsing
-CONFIG_MTD_AFS_PARTS
- The ARM Firmware Suite allows the user to divide flash devices into
- multiple 'images'. Each such image has a header containing its name
- and offset/size etc.
-
- If you need code which can detect and parse these tables, and
- register MTD 'partitions' corresponding to each image detected,
- enable this option.
-
- You will still need the parsing functions to be called by the driver
- for your particular device. It won't happen automatically. The
- 'armflash' map driver (CONFIG_MTD_ARMFLASH) does this, for example.
-
-MTD debugging verbosity (0 = quiet, 3 = noisy)
-CONFIG_MTD_DEBUG_VERBOSE
- Determines the verbosity level of the MTD debugging messages.
-
-Direct chardevice access to MTD devices
-CONFIG_MTD_CHAR
- This provides a character device for each MTD device present in
- the system, allowing the user to read and write directly to the
- memory chips, and also use ioctl() to obtain information about
- the device, or to erase parts of it.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdchar.o
-
-Caching block device access to MTD devices
-CONFIG_MTD_BLOCK
- Although most flash chips have an erase size too large to be useful
- as block devices, it is possible to use MTD devices which are based
- on RAM chips in this manner. This block device is a user of MTD
- devices performing that function.
-
- At the moment, it is also required for the Journalling Flash File
- System(s) to obtain a handle on the MTD device when it's mounted
- (although JFFS and JFFS2 don't actually use any of the functionality
- of the mtdblock device).
-
- Later, it may be extended to perform read/erase/modify/write cycles
- on flash chips to emulate a smaller block size. Needless to say,
- this is very unsafe, but could be useful for file systems which are
- almost never written to.
-
- You do not need this option for use with the DiskOnChip devices. For
- those, enable NFTL support (CONFIG_NFTL) instead.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdblock.o
-
-Readonly block device access to MTD devices
-CONFIG_MTD_BLOCK_RO
- This allows you to mount read-only file systems (such as cramfs)
- from an MTD device, without the overhead (and danger) of the caching
- driver.
-
- You do not need this option for use with the DiskOnChip devices. For
- those, enable NFTL support (CONFIG_NFTL) instead.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdblock_ro.o
-
-FTL (Flash Translation Layer) support
-CONFIG_FTL
- This provides support for the original Flash Translation Layer which
- is part of the PCMCIA specification. It uses a kind of pseudo-
- file system on a flash device to emulate a block device with
- 512-byte sectors, on top of which you put a 'normal' file system.
-
- You may find that the algorithms used in this code are patented
- unless you live in the Free World where software patents aren't
- legal - in the USA you are only permitted to use this on PCMCIA
- hardware, although under the terms of the GPL you're obviously
- permitted to copy, modify and distribute the code as you wish. Just
- not use it.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ftl.o
-
-NFTL (NAND Flash Translation Layer) support
-CONFIG_NFTL
- This provides support for the NAND Flash Translation Layer which is
- used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
- file system on a flash device to emulate a block device with
- 512-byte sectors, on top of which you put a 'normal' file system.
-
- You may find that the algorithms used in this code are patented
- unless you live in the Free World where software patents aren't
- legal - in the USA you are only permitted to use this on DiskOnChip
- hardware, although under the terms of the GPL you're obviously
- permitted to copy, modify and distribute the code as you wish. Just
- not use it.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- nftl.o
-
-Write support for NFTL (EXPERIMENTAL)
-CONFIG_NFTL_RW
- If you're lucky, this will actually work. Don't whinge if it
- doesn't. Send mail to the MTD mailing list
- <linux-mtd@lists.infradead.org> if you want to help to make it more
- reliable.
-
-Detect flash chips by Common Flash Interface (CFI) probe
-CONFIG_MTD_CFI
- The Common Flash Interface specification was developed by Intel,
- AMD and other flash manufactures that provides a universal method
- for probing the capabilities of flash devices. If you wish to
- support any device that is CFI-compliant, you need to enable this
- option. Visit <http://www.amd.com/products/nvd/overview/cfi.html>
- for more information on CFI.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- cfi_probe.o
-
-CFI Advanced configuration options
-CONFIG_MTD_CFI_ADV_OPTIONS
- If you need to specify a specific endianness for access to flash
- chips, or if you wish to reduce the size of the kernel by including
- support for only specific arrangements of flash chips, say 'Y'. This
- option does not directly affect the code, but will enable other
- configuration options which allow you to do so.
-
- If unsure, say 'N'.
-
-Specific CFI Flash geometry selection
-CONFIG_MTD_CFI_GEOMETRY
- This option does not affect the code directly, but will enable
- some other configuration options which would allow you to reduce
- the size of the kernel by including support for only certain
- arrangements of CFI chips. If unsure, say 'N' and all options
- which are supported by the current code will be enabled.
-
-Support 8-bit buswidth
-CONFIG_MTD_CFI_B1
- If you wish to support CFI devices on a physical bus which is
- 8 bits wide, say 'Y'.
-
-Support 16-bit buswidth
-CONFIG_MTD_CFI_B2
- If you wish to support CFI devices on a physical bus which is
- 16 bits wide, say 'Y'.
-
-Support 32-bit buswidth
-CONFIG_MTD_CFI_B4
- If you wish to support CFI devices on a physical bus which is
- 32 bits wide, say 'Y'.
-
-CONFIG_MTD_CFI_B8
- If you wish to support CFI devices on a physical bus which is
- 64 bits wide, say 'Y'.
-
-Support 1-chip flash interleave
-CONFIG_MTD_CFI_I1
- If your flash chips are not interleaved - i.e. you only have one
- flash chip addressed by each bus cycle, then say 'Y'.
-
-Support 2-chip flash interleave
-CONFIG_MTD_CFI_I2
- If your flash chips are interleaved in pairs - i.e. you have two
- flash chips addressed by each bus cycle, then say 'Y'.
-
-Support 4-chip flash interleave
-CONFIG_MTD_CFI_I4
- If your flash chips are interleaved in fours - i.e. you have four
- flash chips addressed by each bus cycle, then say 'Y'.
-
-CONFIG_MTD_CFI_I8
- If your flash chips are interleaved in eights - i.e. you have eight
- flash chips addressed by each bus cycle, then say 'Y'.
-
-# Choice: mtd_data_swap
-Flash cmd/query data swapping
-CONFIG_MTD_CFI_NOSWAP
- This option defines the way in which the CPU attempts to arrange
- data bits when writing the 'magic' commands to the chips. Saying
- 'NO', which is the default when CONFIG_MTD_CFI_ADV_OPTIONS isn't
- enabled, means that the CPU will not do any swapping; the chips
- are expected to be wired to the CPU in 'host-endian' form.
- Specific arrangements are possible with the BIG_ENDIAN_BYTE and
- LITTLE_ENDIAN_BYTE, if the bytes are reversed.
-
- If you have a LART, on which the data (and address) lines were
- connected in a fashion which ensured that the nets were as short
- as possible, resulting in a bit-shuffling which seems utterly
- random to the untrained eye, you need the LART_ENDIAN_BYTE option.
-
- Yes, there really exists something sicker than PDP-endian :)
-
-CFI support for Intel/Sharp Extended Command Set chips
-CONFIG_MTD_CFI_INTELEXT
- The Common Flash Interface defines a number of different command
- sets which a CFI-compliant chip may claim to implement. This code
- provides support for one of those command sets, used on Intel
- StrataFlash and other parts.
-
-CFI support for AMD/Fujitsu Standard Command Set chips
-CONFIG_MTD_CFI_AMDSTD
- The Common Flash Interface defines a number of different command
- sets which a CFI-compliant chip may claim to implement. This code
- provides support for one of those command sets, used on chips
- chips including the AMD Am29LV320.
-
-CFI support for Intel/Sharp Standard Commands
-CONFIG_MTD_CFI_INTELSTD
- The Common Flash Interface defines a number of different command
- sets which a CFI-compliant chip may claim to implement. This code
- provides support for one of those command sets.
-
-pre-CFI Sharp chip support
-CONFIG_MTD_SHARP
- This option enables support for flash chips using Sharp-compatible
- commands, including some which are not CFI-compatible and hence
- cannot be used with the CONFIG_MTD_CFI_INTELxxx options.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- sharp.o
-
-AMD compatible flash chip support (non-CFI)
-CONFIG_MTD_AMDSTD
- This option enables support for flash chips using AMD-compatible
- commands, including some which are not CFI-compatible and hence
- cannot be used with the CONFIG_MTD_CFI_AMDSTD option.
-
- It also works on AMD compatible chips that do conform to CFI.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- amd_flash.o
-
-CONFIG_MTD_CFI_STAA
- The Common Flash Interface defines a number of different command
- sets which a CFI-compliant chip may claim to implement. This code
- provides support for one of those command sets.
-
-Support for RAM chips in bus mapping
-CONFIG_MTD_RAM
- This option enables basic support for RAM chips accessed through
- a bus mapping driver.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- map_ram.o
-
-Support for ROM chips in bus mapping
-CONFIG_MTD_ROM
- This option enables basic support for ROM chips accessed through
- a bus mapping driver.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- map_rom.o
-
-JEDEC device support
-CONFIG_MTD_JEDEC
- Enable older older JEDEC flash interface devices for self
- programming flash. It is commonly used in older AMD chips. It is
- only called JEDEC because the JEDEC association
- <http://www.jedec.org/> distributes the identification codes for the
- chips. WARNING!!!! This code does not compile and is incomplete as
- are the specific JEDEC devices drivers.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- jedec.o
-
-CFI Flash device mapped on StrongARM SA11x0
-CONFIG_MTD_SA1100
- This enables access to the flash chips on most platforms based on
- the SA1100 and SA1110, including the Assabet and the Compaq iPAQ.
- If you have such a board, say 'Y'.
-
-Support for Compaq bootldr partition tables on SA11x0
-CONFIG_MTD_SA1100_REDBOOT_PARTITIONS
- Enabling this option will cause the kernel to look for a RedBoot
- FIS (Flash Image System) table in the last erase block of the flash
- chips detected. If you are using RedBoot on your SA11x0-based board
- and want Linux to present 'partitions' matching the images which
- RedBoot has listed, say 'Y'.
-
-Support for Compaq bootldr partition tables on SA11x0
-CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS
- Enabling this option will cause the kernel to look for a Compaq
- bootldr partition table on the flash chips detected. If you are
- using the Compaq bootldr on your SA11x0-based board and want Linux
- to present 'partitions' matching the images which the bootldr has
- listed, say 'Y'.
-
-Flash chip mapping in physical memory
-CONFIG_MTD_PHYSMAP
- This provides a 'mapping' driver which allows the CFI probe and
- command set driver code to communicate with flash chips which
- are mapped physically into the CPU's memory. You will need to
- configure the physical address and size of the flash chips on
- your particular board as well as the bus width.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- physmap.o
-
-Physical start location of flash chip mapping
-CONFIG_MTD_PHYSMAP_START
- This is the physical memory location at which the flash chips
- are mapped on your particular target board. Refer to the
- memory map which should hopefully be in the documentation for
- your board.
-
-Physical length of flash chip mapping
-CONFIG_MTD_PHYSMAP_LEN
- This is the total length of the mapping of the flash chips on
- your particular board. If there is space, or aliases, in the
- physical memory map between the chips, this could be larger
- than the total amount of flash present. Refer to the memory
- map which should hopefully be in the documentation for your
- board.
-
-Buswidth of flash in bytes
-CONFIG_MTD_PHYSMAP_BUSWIDTH
- This is the total width of the data bus of the flash devices
- in octets. For example, if you have a data bus width of 32
- bits, you would set the bus width octet value to 4. This is
- used internally by the CFI drivers.
-
-Flash chip mapping on Sun Microsystems boardsets
-CONFIG_MTD_SUN_UFLASH
- This provides a 'mapping' driver which supports the way in
- which user-programmable flash chips are connected on various
- Sun Microsystems boardsets. This driver will require CFI support
- in the kernel, so if you did not enable CFI previously, do that now.
-
-Flash chip mapping on Nora
-CONFIG_MTD_NORA
- If you had to ask, you don't have one. Say 'N'.
-
-Flash chip mapping on Photron PNC-2000
-CONFIG_MTD_PNC2000
- PNC-2000 is the name of Network Camera product from PHOTRON
- Ltd. in Japan. It uses CFI-compliant flash.
-
-Flash chip mapping on RPXlite or CLLF PPC board
-CONFIG_MTD_RPXLITE
- The RPXLite PowerPC board has CFI-compliant chips mapped in
- a strange sparse mapping. This 'mapping' driver supports that
- arrangement, allowing the CFI probe and command set driver code
- to communicate with the chips on the RPXLite board. More at
- <http://www.embeddedplanet.com/rpx_lite_specification_sheet.htm>.
-
-Flash chip mapping on AMD SC520 CDP board
-CONFIG_MTD_SC520CDP
- The SC520 CDP board has two banks of CFI-compliant chips and one
- Dual-in-line JEDEC chip. This 'mapping' driver supports that
- arrangement, implementing three MTD devices.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- sc520cdp.o
-
-Flash chip mapping on Arcom Control Systems SBC-MediaGX
-CONFIG_MTD_SBC_GXX
- This provides a driver for the on-board flash of Arcom Control
- Systems' SBC-GXn family of boards, formerly known as SBC-MediaGX.
- By default the flash is split into 3 partitions which are accessed
- as separate MTD devices. This board utilizes Intel StrataFlash.
- More info at
- <http://www.arcomcontrols.com/products/icp/pc104/processors/>.
-
-CFI Flash device mapped on D-Box2
-CONFIG_MTD_DBOX2
- This enables access routines for the flash chips on the Nokia/Sagem
- D-Box 2 board. If you have one of these boards and would like to use
- the flash chips on it, say 'Y'.
-
-CFI Flash devices mapped on IBM Redwood
-CONFIG_MTD_REDWOOD
- This enables access routines for the flash chips on the IBM
- Redwood board. If you have one of these boards and would like to
- use the flash chips on it, say 'Y'.
-
- If compiled as a module, it will be called redwood.o.
-
-CFI Flash device mapped on the XScale IQ80310 board
-CONFIG_MTD_IQ80310
- This enables access routines for the flash chips on the Intel XScale
- IQ80310 evaluation board. If you have one of these boards and would
- like to use the flash chips on it, say 'Y'.
-
-CFI Flash device mapped on AMD NetSc520
-CONFIG_MTD_NETSC520
- This enables access routines for the flash chips on the AMD NetSc520
- demonstration board. If you have one of these boards and would like
- to use the flash chips on it, say 'Y'.
-
-Flash chip mapping on Arcom Control Systems ELAN-104NC
-CONFIG_MTD_ELAN_104NC
- This provides a driver for the on-board flash of the Arcom Control
- System's ELAN-104NC development board. By default the flash
- is split into 3 partitions which are accessed as separate MTD
- devices. This board utilizes Intel StrataFlash. More info at
- <http://www.arcomcontrols.com/products/icp/pc104/processors/>.
-
-Flash chip mapping on Compaq iPAQ/Bitsy
-CONFIG_MTD_BITSY
- This provides a driver for the on-board flash found in Compaq's
- iPAQ Palm PC and their research prototype the Itsy. iPAQ info at
- <http://www5.compaq.com/products/handhelds/pocketpc/> and the
- Itsy <http://www.research.digital.com/wrl/projects/Itsy/index.html>.
-
-Flash chip mapping on Compaq iPAQ/Bitsy
-CONFIG_MTD_DC21285
- This provides a driver for the flash accessed using Intel's
- 21285 bridge used with Intel's StrongARM processors. More info at
- <http://developer.intel.com/design/bridge/quicklist/dsc-21285.htm>.
-
-Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board
-CONFIG_MTD_CSTM_MIPS_IXX
- This provides a mapping driver for the Integrated Tecnology Express,
- Inc (ITE) QED-4N-S01B eval board and the Globespan IVR Reference
- Board. It provides the necessary addressing, length, buswidth, vpp
- code and addition setup of the flash device for these boards. In
- addition, this mapping driver can be used for other boards via
- setting of the CONFIG_MTD_CSTM_MIPS_IXX_START/LEN/BUSWIDTH
- parameters. This mapping will provide one mtd device using one
- partition. The start address can be offset from the beginning of
- flash and the len can be less than the total flash device size to
- allow a window into the flash. Both CFI and JEDEC probes are
- called.
-
-Physical start location of flash chip mapping
-CONFIG_MTD_CSTM_MIPS_IXX_START
- This is the physical memory location that the MTD driver will
- use for the flash chips on your particular target board.
- Refer to the memory map which should hopefully be in the
- documentation for your board.
-
-Physical length of flash chip mapping
-CONFIG_MTD_CSTM_MIPS_IXX_LEN
- This is the total length that the MTD driver will use for the
- flash chips on your particular board. Refer to the memory
- map which should hopefully be in the documentation for your
- board.
-
-Physical bus width of flash mapping in bytes
-CONFIG_MTD_CSTM_MIPS_IXX_BUSWIDTH
- This is the total bus width of the mapping of the flash chips
- on your particular board.
-
-JEDEC Flash device mapped on Mixcom piggyback card
-CONFIG_MTD_MIXMEM
- This supports the paging arrangement for access to flash chips
- on the MixCOM piggyback card, allowing the flash chip drivers
- to get on with their job of driving the flash chips without
- having to know about the paging. If you have one of these boards,
- you probably want to enable this mapping driver. More info is at
- <http://www.itc.hu/>.
-
-JEDEC Flash device mapped on Octagon 5066 SBC
-CONFIG_MTD_OCTAGON
- This provides a 'mapping' driver which supports the way in which
- the flash chips are connected in the Octagon-5066 Single Board
- Computer. More information on the board is available at
- <http://www.octagonsystems.com/Products/5066/5066.html>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- octagon-5066.o
-
-JEDEC Flash device mapped on Tempustech VMAX SBC301
-CONFIG_MTD_VMAX
- This provides a 'mapping' driver which supports the way in which
- the flash chips are connected in the Tempustech VMAX SBC301 Single
- Board Computer. More information on the board is available at
- <http://www.tempustech.com/tt301.htm>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- vmax301.o
-
-Support for NAND flash devices
-CONFIG_MTD_NAND
- This enables support for accessing all type of NAND flash
- devices.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- nand.o
-
-Support for software ECC algorithm
-CONFIG_MTD_NAND_ECC
- This enables software-based ECC for use with NAND flash chips. It
- can detect and correct 1 bit errors per 256 byte blocks. This
- should be used to increase the reliability of the data stored and
- read on the device.
-
-Support for verify read after write
-CONFIG_MTD_NAND_VERIFY_WRITE
- This adds an extra check when data is written to the flash. The
- NAND flash device internally checks only bits transitioning
- from 1 to 0. There is a rare possibility that even though the
- device thinks the write was successful, a bit could have been
- flipped accidentally due to device wear, gamma rays, whatever.
- Enable this if you are really paranoid.
-
-Support for the SPIA board
-CONFIG_MTD_NAND_SPIA
- If you had to ask, you don't have one. Say 'N'.
-
-SmartMediaCard on autronix autcpu12 board
-CONFIG_MTD_NAND_AUTCPU12
- This enables the driver for the autronix autcpu12 board to
- access the SmartMediaCard.
-
- If compiled as a module, it will be called autcpu12.o.
-
-Support for Cirrus Logic EBD7312 evaluation board
-CONFIG_MTD_NAND_EDB7312
- This enables the driver for the Cirrus Logic EBD7312 evaluation
- board to access the onboard NAND Flash.
-
- If compiled as a module, it will be called edb7312.o.
-
-M-Systems Disk-On-Chip 1000 support
-CONFIG_MTD_DOC1000
- This provides an MTD device driver for the M-Systems DiskOnChip
- 1000 devices, which are obsolete so you probably want to say 'N'.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- doc1000.o
-
-M-Systems Disk-On-Chip 2000 and Millennium support
-CONFIG_MTD_DOC2000
- This provides an MTD device driver for the M-Systems DiskOnChip
- 2000 and Millennium devices. Originally designed for the DiskOnChip
- 2000, it also now includes support for the DiskOnChip Millennium.
- If you have problems with this driver and the DiskOnChip Millennium,
- you may wish to try the alternative Millennium driver below. To use
- the alternative driver, you will need to undefine DOC_SINGLE_DRIVER
- in the <file:drivers/mtd/devices/docprobe.c> source code.
-
- If you use this device, you probably also want to enable the NFTL
- 'NAND Flash Translation Layer' option below, which is used to
- emulate a block device by using a kind of file system on the flash
- chips.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- doc2000.o
-
-Alternative Disk-On-Chip Millennium support
-CONFIG_MTD_DOC2001
- This provides an alternative MTD device driver for the M-Systems
- DiskOnChip Millennium devices. Use this if you have problems with
- the combined DiskOnChip 2000 and Millennium driver above. To get
- the DiskOnChip probe code to load and use this driver instead of
- the other one, you will need to undefine DOC_SINGLE_DRIVER near
- the beginning of <file:drivers/mtd/devices/docprobe.c>.
-
- If you use this device, you probably also want to enable the NFTL
- 'NAND Flash Translation Layer' option below, which is used to
- emulate a block device by using a kind of file system on the flash
- chips.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- doc2001.o
-
-Probe for DiskOnChip devices
-CONFIG_MTD_DOCPROBE
- This isn't a real config option, it's derived.
-
-Advanced detection options for DiskOnChip
-CONFIG_MTD_DOCPROBE_ADVANCED
- This option allows you to specify nonstandard address at which to
- probe for a DiskOnChip, or to change the detection options. You
- are unlikely to need any of this unless you are using LinuxBIOS.
- Say 'N'.
-
-Probe for 0x55 0xAA BIOS Extension Signature
-CONFIG_MTD_DOCPROBE_55AA
- Check for the 0x55 0xAA signature of a DiskOnChip, and do not
- continue with probing if it is absent. The signature will always be
- present for a DiskOnChip 2000 or a normal DiskOnChip Millennium.
- Only if you have overwritten the first block of a DiskOnChip
- Millennium will it be absent. Enable this option if you are using
- LinuxBIOS or if you need to recover a DiskOnChip Millennium on which
- you have managed to wipe the first block.
-
-Physical address of DiskOnChip
-CONFIG_MTD_DOCPROBE_ADDRESS
- By default, the probe for DiskOnChip devices will look for a
- DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
- This option allows you to specify a single address at which to probe
- for the device, which is useful if you have other devices in that
- range which get upset when they are probed.
-
- (Note that on PowerPC, the normal probe will only check at
- 0xE4000000.)
-
- Normally, you should leave this set to zero, to allow the probe at
- the normal addresses.
-
-Probe high addresses
-CONFIG_MTD_DOCPROBE_HIGH
- By default, the probe for DiskOnChip devices will look for a
- DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
- This option changes to make it probe between 0xFFFC8000 and
- 0xFFFEE000. Unless you are using LinuxBIOS, this is unlikely to be
- useful to you. Say 'N'.
-
-Ramix PMC551 PCI Mezzanine ram card support
-CONFIG_MTD_PMC551
- This provides a MTD device driver for the Ramix PMC551 RAM PCI card
- from Ramix Inc. <http://www.ramix.com/products/memory/pmc551.html>.
- These devices come in memory configurations from 32M - 1G. If you
- have one, you probably want to enable this.
-
- If this driver is compiled as a module you get the ability to select
- the size of the aperture window pointing into the devices memory.
- What this means is that if you have a 1G card, normally the kernel
- will use a 1G memory map as its view of the device. As a module,
- you can select a 1M window into the memory and the driver will
- "slide" the window around the PMC551's memory. This was
- particularly useful on the 2.2 kernels on PPC architectures as there
- was limited kernel space to deal with.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- pmc551.o
-
-PMC551 256M DRAM Bugfix
-CONFIG_MTD_PMC551_BUGFIX
- Some of Ramix's PMC551 boards with 256M configurations have invalid
- column and row mux values. This option will fix them, but will
- break other memory configurations. If unsure say N.
-
-PMC551 Debugging
-CONFIG_MTD_PMC551_DEBUG
- This option makes the PMC551 more verbose during its operation and
- is only really useful if you are developing on this driver or
- suspect a possible hardware or driver bug. If unsure say N.
-
-Use extra onboard system memory as MTD device
-CONFIG_MTD_SLRAM
- If your CPU cannot cache all of the physical memory in your machine,
- you can still use it for storage or swap by using this driver to
- present it to the system as a Memory Technology Device.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- slram.o
-
-DEC MS02-NV NVRAM module support
-CONFIG_MTD_MS02NV
- This is an MTD driver for the DEC's MS02-NV (54-20948-01) battery
- backed-up NVRAM module. The module was originally meant as an NFS
- accelerator. Say Y here if you have a DECstation 5000/2x0 or a
- DECsystem 5900 equipped with such a module.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module will
- be called ms02-nv.o.
-
-Debugging RAM test driver
-CONFIG_MTD_MTDRAM
- This enables a test MTD device driver which uses vmalloc() to
- provide storage. You probably want to say 'N' unless you're
- testing stuff.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- mtdram.o
-
-MTDRAM erase block size in KB
-CONFIG_MTDRAM_ERASE_SIZE
- This allows you to configure the size of the erase blocks in the
- device emulated by the MTDRAM driver. If the MTDRAM driver is built
- as a module, it is also possible to specify this as a parameter when
- loading the module.
-
-MTDRAM device size in KB
-CONFIG_MTDRAM_TOTAL_SIZE
- This allows you to configure the total size of the MTD device
- emulated by the MTDRAM driver. If the MTDRAM driver is built
- as a module, it is also possible to specify this as a parameter when
- loading the module.
-
-SRAM Hexadecimal Absolute position or 0
-CONFIG_MTDRAM_ABS_POS
- If you have system RAM accessible by the CPU but not used by Linux
- in normal operation, you can give the physical address at which the
- available RAM starts, and the MTDRAM driver will use it instead of
- allocating space from Linux's available memory. Otherwise, leave
- this set to zero. Most people will want to leave this as zero.
-
-CFI Flash device mapping on the Flaga Digital Module
-CONFIG_MTD_CFI_FLAGADM
- Mapping for the Flaga digital module. If you don´t have one, ignore
- this setting.
-
-Momenco Ocelot boot flash device
-CONFIG_MTD_OCELOT
- This enables access routines for the boot flash device and for the
- NVRAM on the Momenco Ocelot board. If you have one of these boards
- and would like access to either of these, say 'Y'.
-
-Support for absent chips in bus mapping
-CONFIG_MTD_ABSENT
- This option enables support for a dummy probing driver used to
- allocated placeholder MTD devices on systems that have socketed
- or removable media. Use of this driver as a fallback chip probe
- preserves the expected registration order of MTD device nodes on
- the system regardless of media presence. Device nodes created
- with this driver will return -ENODEV upon access.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- map_absent.o
-
-MTD emulation using block device
-CONFIG_MTD_BLKMTD
- This driver allows a block device to appear as an MTD. It would
- generally be used in the following cases:
-
- Using Compact Flash as an MTD, these usually present themselves to
- the system as an ATA drive.
- Testing MTD users (eg JFFS2) on large media and media that might
- be removed during a write (using the floppy drive).
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- blkmtd.o
-
-Cirrus CDB89712 evaluation board mappings
-CONFIG_MTD_CDB89712
- This enables access to the flash or ROM chips on the CDB89712 board.
- (This board has 8 MB of Intel Strataflash, a 128 byte boot ROM, and 48 KB of
- internal SRAM. This driver provides MTD devices for all three components.)
- If you have such a board, say 'Y'.
-
-Detect non-CFI AMD/JEDEC-compatible flash chips
-CONFIG_MTD_JEDECPROBE
- This option enables JEDEC-style probing of flash chips which are not
- compatible with the Common Flash Interface, but will use the common
- CFI-targetted flash drivers for any chips which are identified which
- are in fact compatible in all but the probe method. This actually
- covers most AMD/Fujitsu-compatible chips, and will shortly cover also
- non-CFI Intel chips (that code is in MTD CVS and should shortly be sent
- for inclusion in Linus' tree)
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- jedec_probe.o
-
-BIOS flash chip on Intel L440GX boards
-CONFIG_MTD_L440GX
- Support for treating the BIOS flash chip on Intel L440GX motherboards
- as an MTD device - with this you can reprogram your BIOS.
-
- BE VERY CAREFUL.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- l440gx.o
-
-28F160xx flash driver for LART
-CONFIG_MTD_LART
- This enables the flash driver for LART. Please note that you do
- not need any mapping/chip driver for LART. This one does it all
- for you, so go disable all of those if you enabled some of them (:
-
-Older (theoretically obsoleted now) drivers for non-CFI chips
-CONFIG_MTD_OBSOLETE_CHIPS
- This option does not enable any code directly, but will allow you to
- select some other chip drivers which are now considered obsolete,
- because the generic CONFIG_JEDEC_PROBE code above should now detect
- the chips which are supported by these drivers, and allow the generic
- CFI-compatible drivers to drive the chips. Say 'N' here unless you have
- already tried the CONFIG_JEDEC_PROBE method and reported its failure
- to the MTD mailing list at <linux-mtd@lists.infradead.org>
-
-CFI Flash device mapped on Hitachi SolutionEngine
-CONFIG_MTD_SOLUTIONENGINE
- This enables access to the flash chips on the Hitachi SolutionEngine and
- similar boards. Say 'Y' if you are building a kernel for such a board.
-
-CFI Flash device mapped on TQM8XXL PPC board
-CONFIG_MTD_TQM8XXL
- The TQM8xxL PowerPC board has up to two banks of CFI-compliant
- chips, currently uses AMD one. This 'mapping' driver supports
- that arrangement, allowing the CFI probe and command set driver
- code to communicate with the chips on the TQM8xxL board. More at
- <http://www.denx.de/embedded-ppc-en.html>.
-
-Darkness
-CONFIG_MEMORY_SET
- This is an option about which you will never be asked a question.
- Therefore, I conclude that you do not exist - go away.
-
- There is a grue here.
-
-Physical memory size
-CONFIG_MEMORY_SIZE
- This sets the default memory size assumed by your SH kernel. It can
- be overridden as normal by the 'mem=' argument on the kernel command
- line. If unsure, consult your board specifications or just leave it
- as 0x00400000 which was the default value before this became
- configurable.
-
-Cache and PCI noncoherent
-CONFIG_SH_PCIDMA_NONCOHERENT
- Enable this option if your platform does not have a CPU cache which
- remains coherent with PCI DMA. It is safest to say 'Y', although you
- will see better performance if you can say 'N', because the PCI DMA
- code will not have to flush the CPU's caches. If you have a PCI host
- bridge integrated with your SH CPU, refer carefully to the chip specs
- to see if you can say 'N' here. Otherwise, leave it as 'Y'.
-
-USB (Universal Serial Bus) support
-CONFIG_USB
- Universal Serial Bus (USB) is a specification for a serial bus
- subsystem which offers higher speeds and more features than the
- traditional PC serial port. The bus supplies power to peripherals
- and allows for hot swapping. Up to 127 USB peripherals can be
- connected to a single USB port in a tree structure. The USB port is
- the root of the tree, the peripherals are the leaves and the inner
- nodes are special USB devices called hubs. Many newer PC's have USB
- ports and newer peripherals such as scanners, keyboards, mice,
- modems, and printers support the USB protocol and can be connected
- to the PC via those ports.
-
- Say Y here if your computer has a USB port and you want to use USB
- devices. You then need to say Y to at least one of "UHCI support"
- or "OHCI support" below (the type of interface that the USB hardware
- in your computer provides to the operating system) and then choose
- from among the drivers for USB peripherals. You may want to check
- out the information provided in <file:Documentation/usb/> and
- especially the links given in <file:Documentation/usb/usb-help.txt>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usbcore.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB verbose debug messages
-CONFIG_USB_DEBUG
- Say Y here if you want the USB core & hub drivers to produce a bunch
- of debug messages to the system log. Select this if you are having a
- problem with USB support and want to see more of what is going on.
-
-USB long timeout for slow-responding devices (some MGE Ellipse UPSes)
-CONFIG_USB_LONG_TIMEOUT
- This option makes the standard time out a bit longer. Basically,
- some devices are just slow to respond, so this makes usb more
- patient. There should be no harm in selecting this, but it is
- needed for some MGE Ellipse UPSes.
-
- If you have an MGE Ellipse UPS, or you see timeouts in HID
- transactions, say Y; otherwise say N.
-
-EHCI (USB 2.0) support
-CONFIG_USB_EHCI_HCD
- The Enhanced Host Controller Interface (EHCI) is standard for USB 2.0
- "high speed" (480 Mbit/sec, 60 Mbyte/sec) host controller hardware.
- If your USB host controller supports USB 2.0, you will likely want to
- configure this Host Controller Driver. At this writing, the primary
- implementation of EHCI is a chip from NEC, widely available in add-on
- PCI cards, but implementations are in the works from other vendors
- including Intel and Philips. Motherboard support is appearing.
-
- EHCI controllers are packaged with "companion" host controllers (OHCI
- or UHCI) to handle USB 1.1 devices connected to root hub ports. Ports
- will connect to EHCI if it the device is high speed, otherwise they
- connect to a companion controller. If you configure EHCI, you should
- probably configure the OHCI (for NEC and some other vendors) USB Host
- Controller Driver too.
-
- You may want to read <file:Documentation/usb/ehci.txt>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ehci-hcd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-UHCI (Intel PIIX4, VIA, ...) support
-CONFIG_USB_UHCI
- The Universal Host Controller Interface is a standard by Intel for
- accessing the USB hardware in the PC (which is also called the USB
- host controller). If your USB host controller conforms to this
- standard, you may want to say Y, but see below. All recent boards
- with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
- i810, i820) conform to this standard. Also all VIA PCI chipsets
- (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
- 133).
-
- Currently there exist two drivers for UHCI host controllers: this
- one and the so-called JE driver, which you can get from
- "UHCI alternate (JE) support", below. You need only one.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usb-uhci.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-UHCI (Intel PIIX4, VIA, ...) alternate (JE) support
-CONFIG_USB_UHCI_ALT
- The Universal Host Controller Interface is a standard by Intel for
- accessing the USB hardware in the PC (which is also called the USB
- host controller). If your USB host controller conforms to this
- standard, you may want to say Y, but see below. All recent boards
- with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
- i810, i820) conform to this standard. Also all VIA PCI chipsets
- (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
- 133). If unsure, say Y.
-
- Currently there exist two drivers for UHCI host controllers: this
- so-called JE driver, and the one you get from "UHCI support", above.
- You need only one.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called uhci.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
-CONFIG_USB_OHCI
- The Open Host Controller Interface is a standard by
- Compaq/Microsoft/National for accessing the USB PC hardware (also
- called USB host controller). If your USB host controller conforms to
- this standard, say Y. The USB host controllers on most non-Intel
- architectures and on several x86 compatibles with non-Intel chipsets
- -- like SiS (aktual 610, 610 and so on) or ALi (ALi IV, ALi V,
- Aladdin Pro..) -- conform to this standard.
-
- You may want to read <file:Documentation/usb/ohci.txt>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usb-ohci.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-SL811HS (x86, StrongARM) support
-CONFIG_USB_SL811HS
- Embedded Open Host Controller SL811HS from CYPRESS SEMICONDUCTOR INC.
- <pbl@cypress.com>
-
- Board USB1104 in i386 architecture with PC/104-bus.
- <http://www.ssv-embedded.de>
- <file:Documentation/usb/hc_sl811.txt>
-
- StrongARM is currently not testet and not for PC/104-bus!
- StrongARM need a special hardware with Chip Select directly from CPU.
- See also SL811HS_ALT.
-
-SL811HS_ALT (x86, StrongARM) support
-CONFIG_USB_SL811HS_ALT
- Embedded Open Host Controller SL811HS from CYPRESS SEMICONDUCTOR INC.
- Alternate with isochornous mode and better interrupt handling.
- See also SL811HS.
-
-USB Human Interface Device (full HID) support
-CONFIG_USB_HID
- Say Y here if you want full HID support to connect keyboards,
- mice, joysticks, graphic tablets, or any other HID based devices
- to your computer via USB. You also need to select HID Input layer
- support (below) if you want to use keyboards, mice, joysticks and
- the like.
-
- You can't use this driver and the HIDBP (Boot Protocol) keyboard
- and mouse drivers at the same time. More information is available:
- <file:Documentation/input/input.txt>.
-
- If unsure, say Y.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called hid.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB HID Input layer support
-CONFIG_USB_HIDINPUT
- Say Y here if you want to use a USB keyboard, mouse or joystick,
- or any other HID input device. You also need Input layer support,
- (CONFIG_INPUT) which you select under "Input core support".
-
- If unsure, say Y.
-
-/dev/usb/hiddev raw HID device support
-CONFIG_USB_HIDDEV
- Say Y here if you want to support HID devices (from the USB
- specification standpoint) that aren't strictly user interface
- devices, like monitor controls and Uninterruptable Power Supplies.
-
- This module supports these devices separately using a separate
- event interface on /dev/usb/hiddevX (char 180:96 to 180:111).
- This driver requires CONFIG_USB_HID.
-
- If unsure, say Y.
-
-USB HIDBP Keyboard (basic) support
-CONFIG_USB_KBD
- Say Y here only if you are absolutely sure that you don't want
- to use the generic HID driver for your USB keyboard and prefer
- to use the keyboard in its limited Boot Protocol mode instead.
-
- This is almost certainly not what you want.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usbkbd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If even remotely unsure, say N.
-
-USB HIDBP Mouse (basic) support
-CONFIG_USB_MOUSE
- Say Y here only if you are absolutely sure that you don't want
- to use the generic HID driver for your USB mouse and prefer
- to use the mouse in its limited Boot Protocol mode instead.
-
- This is almost certainly not what you want.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usbmouse.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- If even remotely unsure, say N.
-
-Wacom Intuos/Graphire tablet support
-CONFIG_USB_WACOM
- Say Y here if you want to use the USB version of the Wacom Intuos
- or Graphire tablet. Make sure to say Y to "Mouse support"
- (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
- (CONFIG_INPUT_EVDEV) as well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called wacom.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Griffin Technology PowerMate support
-CONFIG_USB_POWERMATE
- Say Y here if you want to use the Griffin Technology, Inc. USB
- PowerMate device. This device is an aluminum dial which can
- measure clockwise and anticlockwise rotation. The dial also
- acts as a pushbutton. The base contains an LED which can be
- instructed to pulse or to switch to a particular intensity.
-
- You can download userspace tools from http://sowerbutts.com/powermate/
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called powermate.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Aiptek HyperPen tablet support
-CONFIG_USB_AIPTEK
- Say Y here if you want to use the USB version of the Aiptek HyperPen
- Digital Tablet (models 4000U, 5000U, 6000U, 8000U, and 12000U.)
- Make sure to say Y to "Mouse support" (CONFIG_INPUT_MOUSEDEV) and/or
- "Event interface support" (CONFIG_INPUT_EVDEV) as well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called aiptek.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Use input layer for ADB devices
-CONFIG_INPUT_ADBHID
- Say Y here if you want to have ADB (Apple Desktop Bus) HID devices
- such as keyboards, mice, joysticks, or graphic tablets handled by
- the input layer. If you say Y here, make sure to say Y to the
- corresponding drivers "Keyboard support" (CONFIG_INPUT_KEYBDEV),
- "Mouse Support" (CONFIG_INPUT_MOUSEDEV) and "Event interface
- support" (CONFIG_INPUT_EVDEV) as well.
-
- If you say N here, you still have the option of using the old ADB
- keyboard and mouse drivers.
-
- If unsure, say Y.
-
-HP OB600 C/CT Pop-Up Mouse
-CONFIG_OBMOUSE
- Only add this driver if you have an Omnibook 600C or 600CT laptop.
- This driver has no probe routine and must assume ports 0x238-23b
- belong to the Pop-Up mouse. Depends on CONFIG_INPUT_MOUSEDEV.
-
- Best is to use a module and load the obmouse driver at runtime.
- Say M here and read <file:Documentation/modules.txt>.
-
-
-Input core support
-CONFIG_INPUT
- Say Y here if you want to enable any of the following options for
- USB Human Interface Device (HID) support.
-
- Say Y here if you want to enable any of the USB HID options in the
- USB support section which require Input core support.
-
- Otherwise, say N.
-
-Keyboard support
-CONFIG_INPUT_KEYBDEV
- Say Y here if you want your USB HID keyboard (or an ADB keyboard
- handled by the input layer) to be able to serve as a system
- keyboard.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called keybdev.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Mouse support
-CONFIG_INPUT_MOUSEDEV
- Say Y here if you want your USB HID mouse (or ADB mouse handled by
- the input layer) to be accessible as char devices 13:32+ -
- /dev/input/mouseX and 13:63 - /dev/input/mice as an emulated ImPS/2
- mouse. That way, all user space programs will be able to use your
- mouse.
-
- If unsure, say Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mousedev.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Horizontal screen resolution
-CONFIG_INPUT_MOUSEDEV_SCREEN_X
- If you're using a digitizer, or a graphic tablet, and want to use
- it as a mouse then the mousedev driver needs to know the X window
- screen resolution you are using to correctly scale the data. If
- you're not using a digitizer, this value is ignored.
-
-Vertical screen resolution
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y
- If you're using a digitizer, or a graphic tablet, and want to use
- it as a mouse then the mousedev driver needs to know the X window
- screen resolution you are using to correctly scale the data. If
- you're not using a digitizer, this value is ignored.
-
-Joystick support
-CONFIG_INPUT_JOYDEV
- Say Y here if you want your USB HID joystick or gamepad to be
- accessible as char device 13:0+ - /dev/input/jsX device.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called joydev.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Event interface support
-CONFIG_INPUT_EVDEV
- Say Y here if you want your USB or ADB HID device events be
- accessible under char device 13:64+ - /dev/input/eventX in a generic
- way. This is the future ...
-
-CONFIG_INPUT_UINPUT
- Say Y here if you want to support user level drivers for input
- subsystem accessible under char device 10:223 - /dev/input/uinput.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called uinput.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Scanner support
-CONFIG_USB_SCANNER
- Say Y here if you want to connect a USB scanner to your computer's
- USB port. Please read <file:Documentation/usb/scanner.txt> for more
- information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called scanner.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-HP 5300C scanner support
-CONFIG_USB_HP5300
- Say Y here if you want to connect a HP5300C scanner to your
- computer's USB port.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called hp5300.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Audio support
-CONFIG_USB_AUDIO
- Say Y here if you want to connect USB audio equipment such as
- speakers to your computer's USB port.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called audio.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-EMI 2|6 USB Audio interface support
-CONFIG_USB_EMI26
- This driver loads firmware to Emagic EMI 2|6 low latency USB
- Audio interface.
-
- After firmware load the device is handled with standard linux
- USB Audio driver.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called audio.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Modem (CDC ACM) support
-CONFIG_USB_ACM
- This driver supports USB modems and ISDN adapters which support the
- Communication Device Class Abstract Control Model interface.
- Please read <file:Documentation/usb/acm.txt> for details.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called acm.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB serial converter support
-CONFIG_USB_SERIAL
- Say Y here if you have a USB device that provides normal serial
- ports, or acts like a serial device, and you want to connect it to
- your USB bus.
-
- Please read <file:Documentation/usb/usb-serial.txt> for more
- information on the specifics of the different devices that are
- supported, and on how to use them.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usbserial.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Generic Serial Driver
-CONFIG_USB_SERIAL_GENERIC
- Say Y here if you want to use the generic USB serial driver. Please
- read <file:Documentation/usb/usb-serial.txt> for more information on
- using this driver. It is recommended that the "USB Serial converter
- support" be compiled as a module for this driver to be used
- properly.
-
-USB ConnectTech WhiteHEAT Serial Driver
-CONFIG_USB_SERIAL_WHITEHEAT
- Say Y here if you want to use a ConnectTech WhiteHEAT 4 port
- USB to serial converter device.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called whiteheat.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Handspring Visor Driver
-CONFIG_USB_SERIAL_VISOR
- Say Y here if you want to connect to your HandSpring Visor, Palm
- m500 or m505 through its USB docking station. See
- <http://usbvisor.sourceforge.net/> for more information on using this
- driver.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called visor.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB PocketPC PDA Driver
-CONFIG_USB_SERIAL_IPAQ
- Say Y here if you want to connect to your Compaq iPAQ, HP Jornada,
- or any other PDA running Windows CE 3.0 or PocketPC 2002 using a USB
- cradle/cable. For information on using the driver,
- read <file:Documentation/usb/usb-serial.txt>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ipaq.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB IR Dongle Serial Driver
-CONFIG_USB_SERIAL_IR
- Say Y here if you want to enable simple serial support for USB IrDA
- devices. This is useful if you do not want to use the full IrDA
- stack.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ir-usb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Belkin and Paracom Single Port Serial Driver
-CONFIG_USB_SERIAL_BELKIN
- Say Y here if you want to use a Belkin USB Serial single port
- adaptor (F5U103 is one of the model numbers) or the Peracom single
- port USB to serial adapter.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called belkin_sa.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB FTDI Single Port Serial Driver
-CONFIG_USB_SERIAL_FTDI_SIO
- Say Y here if you want to use a FTDI SIO single port USB to serial
- converter device. The implementation I have is called the USC-1000.
- This driver has also be tested with the 245 and 232 devices.
-
- See <http://ftdi-usb-sio.sourceforge.net/> for more
- information on this driver and the device.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ftdi_sio.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Keyspan PDA Single Port Serial Driver
-CONFIG_USB_SERIAL_KEYSPAN_PDA
- Say Y here if you want to use a Keyspan PDA single port USB to
- serial converter device. This driver makes use of firmware
- developed from scratch by Brian Warner.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called keyspan_pda.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Xircom / Entregra Single Port Serial Driver
-CONFIG_USB_SERIAL_XIRCOM
- Say Y here if you want to use a Xircom or Entregra single port USB to
- serial converter device. This driver makes use of firmware
- developed from scratch by Brian Warner.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called keyspan_pda.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Keyspan USA-xxx Serial Driver
-CONFIG_USB_SERIAL_KEYSPAN
- Say Y here if you want to use Keyspan USB to serial converter
- devices. This driver makes use of Keyspan's official firmware
- and was developed with their support. You must also include
- firmware to support your particular device(s).
-
- See <http://misc.nu/hugh/keyspan.html> for more information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called keyspan.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Keyspan USA-28 Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA28
- Say Y here to include firmware for the USA-28 converter.
-
-USB Keyspan USA-28X Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA28X
- Say Y here to include firmware for the USA-28X converter.
- Be sure you have a USA-28X, there are also 28XA and 28XB
- models, the label underneath has the actual part number.
-
-USB Keyspan USA-28XA Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA
- Say Y here to include firmware for the USA-28XA converter.
- Be sure you have a USA-28XA, there are also 28X and 28XB
- models, the label underneath has the actual part number.
-
-USB Keyspan USA-28XB Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB
- Say Y here to include firmware for the USA-28XB converter.
- Be sure you have a USA-28XB, there are also 28X and 28XA
- models, the label underneath has the actual part number.
-
-USB Keyspan USA-19 Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA19
- Say Y here to include firmware for the USA-19 converter.
-
-USB Keyspan USA-18X Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA18X
- Say Y here to include firmware for the USA-18X converter.
-
-USB Keyspan USA-19W Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA19W
- Say Y here to include firmware for the USA-19W converter.
-
-USB Keyspan USA-19QW Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW
- Say Y here to include firmware for the USA-19QW converter.
-
-USB Keyspan USA-19QI Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI
- Say Y here to include firmware for the USA-19QI converter.
-
-USB Keyspan USA-49W Firmware
-CONFIG_USB_SERIAL_KEYSPAN_USA49W
- Say Y here to include firmware for the USA-49W converter.
-
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC
- Say Y here to include firmware for the USA-49WLC converter.
-
-USB ZyXEL omni.net LCD Plus Driver
-CONFIG_USB_SERIAL_OMNINET
- Say Y here if you want to use a ZyXEL omni.net LCD ISDN TA.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called omninet.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Digi International AccelePort USB Serial Driver
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT
- Say Y here if you want to use Digi AccelePort USB 2 or 4 devices,
- 2 port (plus parallel port) and 4 port USB serial converters. The
- parallel port on the USB 2 appears as a third serial port on Linux.
- The Digi Acceleport USB 8 is not yet supported by this driver.
-
- This driver works under SMP with the usb-uhci driver. It does not
- work under SMP with the uhci driver.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called digi_acceleport.o. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-USB Empeg empeg-car Mark I/II Driver
-CONFIG_USB_SERIAL_EMPEG
- Say Y here if you want to connect to your Empeg empeg-car Mark I/II
- mp3 player via USB. The driver uses a single ttyUSB{0,1,2,...}
- device node. See <file:Documentation/usb/usb-serial.txt> for more
- tidbits of information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called empeg.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB MCT Single Port Serial Driver
-CONFIG_USB_SERIAL_MCT_U232
- Say Y here if you want to use a USB Serial single port adapter from
- Magic Control Technology Corp. (U232 is one of the model numbers).
-
- This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB
- BAY devices.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mct_u232.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Prolific 2303 Single Port Serial Driver
-CONFIG_USB_SERIAL_PL2303
- Say Y here if you want to use the PL2303 USB Serial single port
- adapter from Prolific.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pl2303.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB KOBIL chipcard reader
-CONFIG_USB_SERIAL_KOBIL_SCT
- Say Y here if you want to use one of the following KOBIL USB chipcard
- readers: TWIN, KAAN Standard Plus, SecOVID Reader Plus, B1 PRO, KAAN PRO
-
- Note that you need a current CT-API.
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called kobil_sct.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB REINER SCT cyberJack pinpad/e-com chipcard reader
-CONFIG_USB_SERIAL_CYBERJACK
- Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard
- reader. This is an interface to ISO 7816 compatible contactbased
- chipcards, e.g. GSM SIMs.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cyberjack.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-USB Edgeport Serial Driver
-CONFIG_USB_SERIAL_EDGEPORT
- Say Y here if you want to use any of the following devices from
- Inside Out Networks (Digi):
- Edgeport/4
- Rapidport/4
- Edgeport/4t
- Edgeport/2
- Edgeport/4i
- Edgeport/2i
- Edgeport/421
- Edgeport/21
- Edgeport/8
- Edgeport/8 Dual
- Edgeport/2D8
- Edgeport/4D8
- Edgeport/8i
- Edgeport/2 DIN
- Edgeport/4 DIN
- Edgeport/16 Dual
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called io_edgeport.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB PalmConnect (and other KL5KUSB105-based) Single Port Serial Driver
-CONFIG_USB_SERIAL_KLSI
- Say Y here if you want to use a KL5KUSB105 - based single port
- serial adapter. The most widely known -- and currently the only
- tested -- device in this category is the PalmConnect USB Serial
- adapter sold by Palm Inc. for use with their Palm III and Palm V
- series PDAs.
-
- Please read <file:Documentation/usb/usb-serial.txt> for more
- information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called kl5kusb105.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Serial Converter verbose debug
-CONFIG_USB_SERIAL_DEBUG
- Say Y here if you want verbose debug messages from the USB Serial
- Drivers sent to the kernel debug log.
-
-USB Printer support
-CONFIG_USB_PRINTER
- Say Y here if you want to connect a USB printer to your computer's
- USB port.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called printer.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB IBM (Xirlink) C-It Camera support
-CONFIG_USB_IBMCAM
- Say Y here if you want to connect a IBM "C-It" camera, also known as
- "Xirlink PC Camera" to your computer's USB port. For more
- information, read <file:Documentation/usb/ibmcam.txt>.
-
- This driver uses the Video For Linux API. You must enable
- (Y or M in config) Video For Linux (under Character Devices)
- to use this driver. Information on this API and pointers to
- "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ibmcam.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. This
- camera has several configuration options which can be specified when
- you load the module. Read <file:Documentation/usb/ibmcam.txt> to
- learn more.
-
-CONFIG_USB_KONICAWC
- Say Y here if you want support for webcams based on a Konica
- chipset. This is known to work with the Intel YC76 webcam.
-
- This driver uses the Video For Linux API. You must enable
- (Y or M in config) Video For Linux (under Character Devices)
- to use this driver. Information on this API and pointers to
- "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called konicawc.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB OV511 Camera support
-CONFIG_USB_OV511
- Say Y here if you want to connect this type of camera to your
- computer's USB port. See <file:Documentation/usb/ov511.txt> for more
- information and for a list of supported cameras.
-
- This driver uses the Video For Linux API. You must say Y or M to
- "Video For Linux" (under Character Devices) to use this driver.
- Information on this API and pointers to "v4l" programs may be found
- on the WWW at <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ov511.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB W996[87]CF Camera support
-CONFIG_USB_W9968CF
- Say Y here if you want support for cameras based on
- Winbond W9967CF/W9968CF JPEG USB Dual Mode Camera Chips.
-
- This driver has an optional plugin, which is distributed as a
- separate module only (released under GPL). It contains code that
- allows you to use higher resolutions and framerates, and cannot
- be included in the official Linux kernel for performance purposes.
- At the moment the driver needs a third-party module for the CMOS
- sensors, which is available on internet: it is recommended to read
- <file:Documentation/usb/w9968cf.txt> for more informations and for
- a list of supported cameras.
-
- This driver uses the Video For Linux and the I2C APIs.
- You must say Y or M to both "Video For Linux" and "I2C Support"
- to use this driver. Information on this API and pointers to "v4l"
- programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called w9968cf.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Communication Class Ethernet device support
-CONFIG_USB_CDCETHER
- This driver supports devices conforming to the Communication Device
- Class Ethernet Control Model. This is used in some cable modems.
- For more details on the specification, get the Communication Device
- Class specification from <http://www.usb.org/>.
-
- This driver should work with the following devices:
- * Ericsson PipeRider (all variants)
- * Motorola (DM100 and SB4100)
- * Broadcom Cable Modem (reference design)
- * Toshiba PCX1100U and possibly other cable modems
- * Sharp Zaurus SL-5000D
-
- The device creates a network device (ethX, where X depends on what
- other networking devices you have in use), as for a normal PCI
- or ISA based ethernet network card.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called CDCEther.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-NetChip 1080-based USB Host-to-Host Link
-CONFIG_USB_NET1080
- The NetChip 1080 is a USB 1.1 host controller. NetChip has a web
- site with technical information at <http://www.netchip.com/>.
-
-Philips webcam support
-CONFIG_USB_PWC
- Say Y or M here if you want to use one of these Philips USB webcams:
- PCA645, PCA646, PCVC675, PCVC680, PCVC690, PCVC730, PCVC740, or
- the Askey VC010. The PCA635, PCVC665 and PCVC720 are not supported
- by this driver and never will be.
-
- This driver has an optional plugin, which is distributed as a binary
- module only. It contains code that allow you to use higher
- resolutions and framerates but may not be distributed as source.
- But even without this plugin you can these cams for most
- applications.
-
- See <file:Documentation/usb/philips.txt> for more information and
- installation instructions.
-
- The built-in microphone is enabled by selecting USB Audio support.
-
- This driver uses the Video For Linux API. You must say Y or M to
- "Video For Linux" (under Character Devices) to use this driver.
- Information on this API and pointers to "v4l" programs may be found
- on the WWW at <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pwc.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB SE401 Camera support
-CONFIG_USB_SE401
- Say Y here if you want to connect this type of camera to your
- computer's USB port. See <file:Documentation/usb/se401.txt> for more
- information and for a list of supported cameras.
-
- This driver uses the Video For Linux API. You must say Y or M to
- "Video For Linux" (under Multimedia Devices) to use this driver.
- Information on this API and pointers to "v4l" programs may be found
- on the WWW at <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called se401.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB STV680 (Pencam) Camera support
-CONFIG_USB_STV680
- Say Y here if you want to connect this type of camera to your
- computer's USB port. This includes the Pencam line of cameras.
- See <file:Documentation/usb/stv680.txt> for more information and for
- a list of supported cameras.
-
- This driver uses the Video For Linux API. You must say Y or M to
- "Video For Linux" (under Multimedia Devices) to use this driver.
- Information on this API and pointers to "v4l" programs may be found
- on the WWW at <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called stv680.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Vicam
-CONFIG_USB_VICAM
- Say Y here if you have 3com homeconnect camera (vicam).
-
- This driver uses the Video For Linux API. You must say Y or M to
- "Video For Linux" (under Multimedia Devices) to use this driver.
- Information on this API and pointers to "v4l" programs may be found
- on the WWW at <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called vicam.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-
-Pegasus/Pegasus II based USB-Ethernet device support
-CONFIG_USB_PEGASUS
- Say Y here if you know you have Pegasus or Pegasus-II based adapter.
- If in doubt then look at linux/drivers/usb/pegasus.h for the complete
- list of supported devices.
- If your particular adapter is not in the list and you are _sure_ it
- is Pegasus or Pegasus-II based then send me (petkan@users.sourceforge.net)
- vendor and device IDs.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pegasus.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Realtek RTL8150 based USB-Ethernet device support
-CONFIG_USB_RTL8150
- Say Y here if you have RTL8150 based usb-ethernet adapter.
- Send me (petkan@users.sourceforge.net) any comments you may have.
- You can also check for updates at <http://pegasus2.sourceforge.net/>
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called rtl8150.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB KLSI KL5USB101-based Ethernet device support
-CONFIG_USB_KAWETH
- Say Y here if you want to use one of the following 10Mbps only
- USB Ethernet adapters based on the KLSI KL5KUSB101B chipset:
- 3Com 3C19250
- ADS USB-10BT
- ATEN USB Ethernet
- ASANTE USB To Ethernet Adapter
- AOX Endpoints USB Ethernet
- Correga K.K.
- D-Link DSB-650C and DU-E10
- Entrega / Portgear E45
- I-O DATA USB-ET/T
- Jaton USB Ethernet Device Adapter
- Kingston Technology USB Ethernet Adapter
- Linksys USB10T
- Mobility USB-Ethernet Adapter
- NetGear EA-101
- Peracom Enet and Enet2
- Portsmith Express Ethernet Adapter
- Shark Pocket Adapter
- SMC 2202USB
- Sony Vaio port extender
-
- This driver is likely to work with most 10Mbps only USB Ethernet
- adapters, including some "no brand" devices. It does NOT work on
- SmartBridges smartNIC or on Belkin F5U111 devices - you should use
- the CATC NetMate driver for those. If you are not sure which one
- you need, select both, and the correct one should be selected for
- you.
-
- This driver makes the adapter appear as a normal Ethernet interface,
- typically on eth0, if it is the only ethernet device, or perhaps on
- eth1, if you have a PCI or ISA ethernet card installed.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called kaweth.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB CATC NetMate-based Ethernet device support
-CONFIG_USB_CATC
- Say Y if you want to use one of the following 10Mbps USB Ethernet
- device based on the EL1210A chip. Supported devices are:
- Belkin F5U011
- Belkin F5U111
- CATC NetMate
- CATC NetMate II
- smartBridges smartNIC
-
- This driver makes the adapter appear as a normal Ethernet interface,
- typically on eth0, if it is the only ethernet device, or perhaps on
- eth1, if you have a PCI or ISA ethernet card installed.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called catc.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Kodak DC-2xx Camera support
-CONFIG_USB_DC2XX
- Say Y here if you want to connect this type of still camera to your
- computer's USB port. See <file:Documentation/usb/dc2xx.txt> for
- more information; some non-Kodak cameras may also work with this
- driver, given application support (such as <http://www.gphoto.org/>).
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dc2xx.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Mustek MDC800 Digital Camera support
-CONFIG_USB_MDC800
- Say Y here if you want to connect this type of still camera to
- your computer's USB port. This driver can be used with gphoto 0.4.3
- and higher (look at <http://www.gphoto.org/>).
- To use it create a device node with "mknod /dev/mustek c 180 32" and
- configure it in your software.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mdc800.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Mass Storage support
-CONFIG_USB_STORAGE
- Say Y here if you want to connect USB mass storage devices to your
- computer's USB port.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usb-storage.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Mass Storage verbose debug
-CONFIG_USB_STORAGE_DEBUG
- Say Y here in order to have the USB Mass Storage code generate
- verbose debugging messages.
-
-ISD-200 USB/ATA Bridge support
-CONFIG_USB_STORAGE_ISD200
- Say Y here if you want to use USB Mass Store devices based
- on the In-Systems Design ISD-200 USB/ATA bridge.
-
- Some of the products that use this chip are:
-
- - Archos Jukebox 6000
- - ISD SmartCable for Storage
- - Taiwan Skymaster CD530U/DEL-0241 IDE bridge
- - Sony CRX10U CD-R/RW drive
- - CyQ've CQ8060A CDRW drive
- - Planex eXtreme Drive RX-25HU USB-IDE cable (not model RX-25U)
-
-USS720 parport driver
-CONFIG_USB_USS720
- This driver is for USB parallel port adapters that use the Lucent
- Technologies USS-720 chip. These cables are plugged into your USB
- port and provide USB compatibility to peripherals designed with
- parallel port interfaces.
-
- The chip has two modes: automatic mode and manual mode. In automatic
- mode, it looks to the computer like a standard USB printer. Only
- printers may be connected to the USS-720 in this mode. The generic
- USB printer driver ("USB Printer support", above) may be used in
- that mode, and you can say N here if you want to use the chip only
- in this mode.
-
- Manual mode is not limited to printers, any parallel port
- device should work. This driver utilizes manual mode.
- Note however that some operations are three orders of magnitude
- slower than on a PCI/ISA Parallel Port, so timing critical
- applications might not work.
-
- Say Y here if you own an USS-720 USB->Parport cable and intend to
- connect anything other than a printer to it.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called uss720.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB device file system
-CONFIG_USB_DEVICEFS
- If you say Y here (and to "/proc file system support" in the "File
- systems section, above), you will get a file /proc/bus/usb/devices
- which lists the devices currently connected to your USB bus or
- busses, a file /proc/bus/usb/drivers which lists the USB kernel
- client drivers currently loaded, and for every connected device a
- file named "/proc/bus/usb/xxx/yyy", where xxx is the bus number and
- yyy the device number; the latter files can be used by user space
- programs to talk directly to the device. These files are "virtual",
- meaning they are generated on the fly and not stored on the hard
- drive.
-
- You may need to mount the usbdevfs file system to see the files, use
- mount -t usbdevfs none /proc/bus/usb
-
- For the format of the various /proc/bus/usb/ files, please read
- <file:Documentation/usb/proc_usb_info.txt>.
-
- Please note that this code is completely unrelated to devfs, the
- "/dev file system support".
-
- Most users want to say Y here.
-
-Enforce USB bandwidth allocation
-CONFIG_USB_BANDWIDTH
- If you say Y here, the USB subsystem enforces USB bandwidth
- allocation and will prevent some device opens from succeeding
- if they would cause USB bandwidth usage to go above 90% of
- the bus bandwidth.
-
- If you say N here, these conditions will cause warning messages
- about USB bandwidth usage to be logged and some devices or
- drivers may not work correctly.
-
-DABUSB driver
-CONFIG_USB_DABUSB
- A Digital Audio Broadcasting (DAB) Receiver for USB and Linux
- brought to you by the DAB-Team (<http://dab.in.tum.de/>). This
- driver can be taken as an example for URB-based bulk, control, and
- isochronous transactions. URB's are explained in
- <file:Documentation/usb/URB.txt>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dabusb.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Host-to-Host USB networking
-CONFIG_USB_USBNET
- This driver supports network links over USB with USB "Network"
- or "data transfer" cables, often used to network laptops to PCs.
- Such cables have chips from suppliers such as Belkin/eTEK, GeneSys
- (GeneLink), NetChip and Prolific. Intelligent USB devices could also
- use this approach to provide Internet access, using standard USB
- cabling. You can find these chips also on some motherboards with
- USB PC2PC support.
-
- These links will have names like "usb0", "usb1", etc. They act
- like two-node Ethernets, so you can use 802.1d Ethernet Bridging
- (CONFIG_BRIDGE) to simplify your network routing.
-
- This code is also available as a kernel module (code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usbnet.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Freecom USB/ATAPI Bridge support
-CONFIG_USB_STORAGE_FREECOM
- Support for the Freecom USB to IDE/ATAPI adaptor.
- Freecom has a web page at <http://www.freecom.de/>.
-
-Microtech CompactFlash/SmartMedia reader
-CONFIG_USB_STORAGE_DPCM
- Say Y here to support the Microtech ZiO! CompactFlash/SmartMedia
- reader, details at <http://www.microtechint.com/zio/index.html>.
- This driver treats the flash card as a removable storage device.
-
-SanDisk SDDR-09 (and other SmartMedia) support
-CONFIG_USB_STORAGE_SDDR09
- Say Y here to include additional code to support the Sandisk SDDR-09
- SmartMedia reader in the USB Mass Storage driver.
-
-SanDisk SDDR-55 SmartMedia support
-CONFIG_USB_STORAGE_SDDR55
- Say Y here to include additional code to support the Sandisk SDDR-55
- SmartMedia reader in the USB Mass Storage driver.
-
-USB Diamond Rio500 support
-CONFIG_USB_RIO500
- Say Y here if you want to connect a USB Rio500 mp3 player to your
- computer's USB port. Please read <file:Documentation/usb/rio.txt>
- for more information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called rio500.o. If you want to compile it as
- a module, say M here and read <file:Documenatation/modules.txt>.
-
-Auerswald device support
-CONFIG_USB_AUERSWALD
- Say Y here if you want to connect an Auerswald USB ISDN Device
- to your computer's USB port.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called auerswald.o. If you want to compile it as
- a module, say M here and read <file:Documenatation/modules.txt>
-
-USB Auerswald ISDN modem support
-CONFIG_USB_AUERISDN
- Say Y here if you want to enable the ISDN modem option
- of your Auerswald ISDN devices.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called auerswald.o. If you want to compile it as
- a module, say M here and read <file:Documenatation/modules.txt>
-
-CONFIG_USB_TIGL
- If you own a Texas Instruments graphing calculator and use a
- TI-GRAPH LINK USB cable (aka SilverLink), then you might be
- interested in this driver.
-
- If you enable this driver, you will be able to communicate with
- your calculator through a set of device nodes under /dev.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tiglusb.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt.
-
- If you don't know what the SilverLink cable is or what a Texas
- Instruments graphing calculator is, then you probably don't need this
- driver.
-
- If unsure, say N.
-
-Texas Instruments parallel link cable support
-CONFIG_TIPAR
- If you own a Texas Instruments graphing calculator and use a
- parallel link cable, then you might be interested in this driver.
-
- If you enable this driver, you will be able to communicate with
- your calculator through a set of device nodes under /dev. The
- main advantage of this driver is that you don't have to be root
- to use this precise link cable (depending on the permissions on
- the device nodes, though).
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tipar.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>
-
- If you don't know what a parallel link cable is or what a Texas
- Instruments graphing calculator is, then you probably don't need this
- driver.
-
- If unsure, say N.
-
-Tieman Voyager USB Braille display support
-CONFIG_USB_BRLVOYAGER
- Say Y here if you want to use the Voyager USB Braille display from
- Tieman. See <file:Documentation/usb/brlvger.txt> for more
- information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called brlvger.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USBLCD support
-CONFIG_USB_LCD
- Say Y here if you want to connect an USBLCD to your computer's
- USB port. The USBLCD is a small USB interface board for
- alphanumeric LCD modules. See <http://www.usblcd.de> for more
- information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usblcd.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-D-Link DSB-R100 FM radio support
-CONFIG_USB_DSBR
- Say Y here if you want to connect this type of radio to your
- computer's USB port. Note that the audio is not digital, and
- you must connect the line out connector to a sound card or a
- set of speakers.
-
- This driver uses the Video For Linux API. You must enable
- (Y or M in config) Video For Linux (under Character Devices)
- to use this driver. Information on this API and pointers to
- "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called dsbr100.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Alcatel Speedtouch USB support
-CONFIG_USB_SPEEDTOUCH
- Say Y here if you have an Alcatel SpeedTouch USB or SpeedTouch 330
- modem. In order to use your modem you will need to install some user
- space tools, see <http://www.linux-usb.org/SpeedTouch/> for details.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called speedtch.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-CONFIG_USB_GADGET
- USB is a master/slave protocol, organized with one master
- host (such as a PC) controlling up to 127 peripheral devices.
- The USB hardware is asymmetric, which makes it easier to set up:
- you can't connect two "to-the-host" connectors to each other.
-
- Linux can run in the host, or in the peripheral. In both cases
- you need a low level bus controller driver, and some software
- talking to it. Peripheral controllers are often discrete silicon,
- or are integrated with the CPU in a microcontroller. The more
- familiar host side controllers have names like like "EHCI", "OHCI",
- or "UHCI", and are usually integrated into southbridges on PC
- motherboards.
-
- Enable this configuration option if you want to run Linux inside
- a USB peripheral device. Configure one hardware driver for your
- peripheral/device side bus controller, and a "gadget driver" for
- your peripheral protocol. (If you use modular gadget drivers,
- you may configure more than one.)
-
- If in doubt, say "N" and don't enable these drivers; most people
- don't have this kind of hardware (except maybe inside Linux PDAs).
-
-CONFIG_USB_NET2280
- NetChip 2280 is a PCI based USB peripheral controller which
- supports both full and high speed USB 2.0 data transfers.
-
- It has six configurable endpoints, as well as endpoint zero
- (for control transfers) and several endpoints with dedicated
- functions.
-
- Say "y" to link the driver statically, or "m" to build a
- dynamically linked module called "net2280" and force all
- gadget drivers to also be dynamically linked.
-
-CONFIG_USB_ZERO
- Gadget Zero is a two-configuration device. It either sinks and
- sources bulk data; or it loops back a configurable number of
- transfers. It also implements control requests, for "chapter 9"
- conformance. The driver needs only two bulk-capable endpoints, so
- it can work on top of most device-side usb controllers. It's
- useful for testing, and is also a working example showing how
- USB "gadget drivers" can be written.
-
- Make this be the first driver you try using on top of any new
- USB peripheral controller driver. Then you can use host-side
- test software, like the "usbtest" driver, to put your hardware
- and its driver through a basic set of functional tests.
-
- Gadget Zero also works with the host-side "usb-skeleton" driver,
- and with many kinds of host-side test software. You may need
- to tweak product and vendor IDs before host software knows about
- this device, and arrange to select an appropriate configuration.
-
- Say "y" to link the driver statically, or "m" to build a
- dynamically linked module called "g_zero".
-
-CONFIG_USB_ETH
- This driver implements Ethernet style communication, in either
- of two ways:
-
- - The "Communication Device Class" (CDC) Ethernet Control Model.
- That protocol is often avoided with pure Ethernet adapters, in
- favor of simpler vendor-specific hardware, but is widely
- supported by firmware for smart network devices.
-
- - On hardware can't implement that protocol, a simpler approach
- is used, placing fewer demands on USB.
-
- Within the USB device, this gadget driver exposes a network device
- "usbX", where X depends on what other networking devices you have.
- Treat it like a two-node Ethernet link: host, and gadget.
-
- The Linux-USB host-side "usbnet" driver interoperates with this
- driver, so that deep I/O queues can be supported. On 2.4 kernels,
- use "CDCEther" instead, if you're using the CDC option. That CDC
- mode should also interoperate with standard CDC Ethernet class
- drivers on other host operating systems.
-
- Say "y" to link the driver statically, or "m" to build a
- dynamically linked module called "g_ether".
-
-Always do synchronous disk IO for UBD
-CONFIG_BLK_DEV_UBD_SYNC
- The User-Mode Linux port includes a driver called UBD which will let
- you access arbitrary files on the host computer as block devices.
- Writes to such a block device are not immediately written to the
- host's disk; this may cause problems if, for example, the User-Mode
- Linux 'Virtual Machine' uses a journalling file system and the host
- computer crashes.
-
- Synchronous operation (i.e. always writing data to the host's disk
- immediately) is configurable on a per-UBD basis by using a special
- kernel command line option. Alternatively, you can say Y here to
- turn on synchronous operation by default for all block.
-
- If you're running a journalling file system (like reiserfs, for
- example) in your virtual machine, you will want to say Y here. If
- you care for the safety of the data in your virtual machine, Y is a
- wise choice too. In all other cases (for example, if you're just
- playing around with User-Mode Linux) you can choose N.
-
-Enable ptrace proxy
-CONFIG_PT_PROXY
- This option enables a debugging interface which allows gdb to debug
- the kernel without needing to actually attach to kernel threads.
- If you want to do kernel debugging, say Y here; otherwise say N.
-
-Management console
-CONFIG_MCONSOLE
- The user mode linux management console is a low-level interface to
- the kernel, somewhat like the i386 SysRq interface. Since there is
- a full-blown operating system running under every user mode linux
- instance, there is much greater flexibility possible than with the
- SysRq mechanism.
-
- If you answer 'Y' to this option, to use this feature, you need the
- mconsole client (called uml_mconsole) which is present in CVS in
- 2.4.5-9um and later (path /tools/mconsole), and is also in the
- distribution RPM package in 2.4.6 and later.
-
- It is safe to say 'Y' here.
-
-Enable kernel debugging symbols
-CONFIG_DEBUGSYM
- When this is enabled, the User-Mode Linux binary will include
- debugging symbols. This enlarges the binary by a few megabytes,
- but aids in tracking down kernel problems in UML. It is required
- if you intend to do any kernel development.
-
- If you're truly short on disk space or don't expect to report any
- bugs back to the UML developers, say N, otherwise say Y.
-
-Enable gcov support
-CONFIG_GCOV
- This option allows developers to retrieve coverage data from a UML
- session.
-
- See <http://user-mode-linux.sourceforge.net/gcov.html> for more
- details.
-
- If you're involved in UML kernel development and want to use gcov,
- say Y. If you're unsure, say N.
-
-Enable gprof support
-CONFIG_GPROF
- This allows profiling of a User-Mode Linux kernel with the gprof
- utility.
-
- See <http://user-mode-linux.sourceforge.net/gprof.html> for more
- details.
-
- If you're involved in UML kernel development and want to use gprof,
- say Y. If you're unsure, say N.
-
-Host filesystem
-CONFIG_HOSTFS
- While the User-Mode Linux port uses its own root file system for
- booting and normal file access, this module lets the UML user
- access files stored on the host. It does not require any
- network connection between the Host and UML. An example use of
- this might be:
-
- mount none /tmp/fromhost -t hostfs -o /tmp/umlshare
-
- where /tmp/fromhost is an empty directory inside UML and
- /tmp/umlshare is a directory on the host with files the UML user
- wishes to access.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/hostfs.html>.
-
- If you'd like to be able to work with files stored on the host,
- say Y or M here; otherwise say N.
-
-Example IO Memory driver
-CONFIG_MMAPPER
- The User-Mode Linux port can provide support for IO Memory
- emulation with this option. This allows a host file to be
- specified as an I/O region on the kernel command line. That file
- will be mapped into UML's kernel address space where a driver can
- locate it and do whatever it wants with the memory, including
- providing an interface to it for UML processes to use.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/iomem.html>.
-
- If you'd like to be able to provide a simulated IO port space for
- User-Mode Linux processes, say Y. If unsure, say N.
-
-Virtual Serial Line
-CONFIG_SSL
- The User-Mode Linux environment allows you to create virtual serial
- lines on the UML that are usually made to show up on the host as
- ttys or ptys.
-
- See <http://user-mode-linux.sourceforge.net/input.html> for more
- information and command line examples of how to use this facility.
-
- Unless you have a specific reason for disabling this, say Y.
-
-Virtual network device
-CONFIG_UML_NET
- While the User-Mode port cannot directly talk to any physical
- hardware devices, this choice and the following transport options
- provide one or more virtual network devices through which the UML
- kernels can talk to each other, the host, and with the host's help,
- machines on the outside world.
-
- For more information, including explanations of the networking and
- sample configurations, see
- <http://user-mode-linux.sourceforge.net/networking.html>.
-
- If you'd like to be able to enable networking in the User-Mode
- linux environment, say Y; otherwise say N. Note that you must
- enable at least one of the following transport options to actually
- make use of UML networking.
-
-Daemon transport
-CONFIG_UML_NET_DAEMON
- This User-Mode Linux network transport allows one or more running
- UMLs on a single host to communicate with each other, but not to
- the host.
-
- To use this form of networking, you'll need to run the UML
- networking daemon on the host.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/networking.html> That site
- has examples of the UML command line to use to enable Daemon
- networking.
-
- If you'd like to set up a network with other UMLs on a single host,
- say Y. If you need a network between UMLs on multiple physical
- hosts, choose the Multicast Transport. To set up a network with
- the host and/or other IP machines, say Y to the Ethertap or Slip
- transports. You'll need at least one of them, but may choose
- more than one without conflict. If you don't need UML networking,
- say N.
-
-Ethertap transport
-CONFIG_UML_NET_ETHERTAP
- The Ethertap User-Mode Linux network transport allows a single
- running UML to exchange packets with its host over one of the
- host's Ethertap devices, such as /dev/tap0. Additional running
- UMLs can use additional Ethertap devices, one per running UML.
- While the UML believes it's on a (multi-device, broadcast) virtual
- Ethernet network, it's in fact communicating over a point-to-point
- link with the host.
-
- To use this, your host kernel must have support for Ethertap
- devices. Also, if your host kernel is 2.4.x, it must have
- CONFIG_NETLINK_DEV configured as Y or M.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/networking.html> That site
- has examples of the UML command line to use to enable Ethertap
- networking.
-
- If you'd like to set up an IP network with the host and/or the
- outside world, say Y to this, the Daemon Transport and/or the
- Slip Transport. You'll need at least one of them, but may choose
- more than one without conflict. If you don't need UML networking,
- say N.
-
-TUN/TAP transport
-CONFIG_UML_NET_TUNTAP
- The UML TUN/TAP network transport allows a UML instance to exchange
- packets with the host over a TUN/TAP device. This option will only
- work with a 2.4 host, unless you've applied the TUN/TAP patch to
- your 2.2 host kernel.
-
- To use this transport, your host kernel must have support for TUN/TAP
- devices, either built-in or as a module.
-
-Multicast transport
-CONFIG_UML_NET_MCAST
- This Multicast User-Mode Linux network transport allows multiple
- UMLs (even ones running on different host machines!) to talk to
- each other over a virtual ethernet network. However, it requires
- at least one UML with one of the other transports to act as a
- bridge if any of them need to be able to talk to their hosts or any
- other IP machines.
-
- To use this, your host kernel(s) must support IP Multicasting.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/networking.html> That site
- has examples of the UML command line to use to enable Multicast
- networking, and notes about the security of this approach.
-
- If you need UMLs on multiple physical hosts to communicate as if
- they shared an Ethernet network, say Y. If you need to communicate
- with other IP machines, make sure you select one of the other
- transports (possibly in addition to Multicast; they're not
- exclusive). If you don't need to network UMLs say N to each of
- the transports.
-
-SLIP transport
-CONFIG_UML_NET_SLIP
- The Slip User-Mode Linux network transport allows a running UML to
- network with its host over a point-to-point link. Unlike Ethertap,
- which can carry any Ethernet frame (and hence even non-IP packets),
- the Slip transport can only carry IP packets.
-
- To use this, your host must support Slip devices.
-
- For more information, see
- <http://user-mode-linux.sourceforge.net/networking.html>. That site
- has examples of the UML command line to use to enable Slip
- networking, and details of a few quirks with it.
-
- The Ethertap Transport is preferred over Slip because of its
- limitation. If you prefer Slip, however, say Y here. Otherwise
- choose the Multicast transport (to network multiple UMLs on
- multiple hosts), Ethertap (to network with the host and the
- outside world), and/or the Daemon transport (to network multiple
- UMLs on a single host). You may choose more than one without
- conflict. If you don't need UML networking, say N.
-
-Microtek USB scanner support
-CONFIG_USB_MICROTEK
- Say Y here if you want support for the Microtek X6USB and
- possibly the Phantom 336CX, Phantom C6 and ScanMaker V6U(S)L.
- Support for anything but the X6 is experimental.
- Please report failures and successes.
- The scanner will appear as a scsi generic device to the rest
- of the system. Scsi support is required for this driver to compile
- and work. SANE 1.0.4 or newer is needed to make use of your scanner.
- This driver can be compiled as a module.
-
-HP53xx and Minolta Dual Scanner support
-CONFIG_USB_HPUSBSCSI
- Say Y here if you want support for the HP 53xx series of scanners
- and the Minolta Scan Dual. This driver is experimental.
- The scanner will be accessible as a SCSI device.
-
-USB Bluetooth support
-CONFIG_USB_BLUETOOTH
- Say Y here if you want to connect a USB Bluetooth device to your
- computer's USB port. You will need the Bluetooth stack (available
- at <http://developer.axis.com/software>) to fully use the device.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called bluetooth.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-USB MIDI support
-CONFIG_USB_MIDI
- Say Y here if you want to connect a USB MIDI device to your
- computer's USB port. This driver is for devices that comply with
- 'Universal Serial Bus Device Class Definition for MIDI Device'.
-
- The following devices are known to work:
- * Steinberg USB2MIDI
- * Roland MPU64
- * Roland PC-300
- * Roland SC8850
- * Roland UM-1
- * Roland UM-2
- * Roland UA-100
- * Yamaha MU1000
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called usb-midi.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Minix fs support
-CONFIG_MINIX_FS
- Minix is a simple operating system used in many classes about OS's.
- The minix file system (method to organize files on a hard disk
- partition or a floppy disk) was the original file system for Linux,
- but has been superseded by the second extended file system ext2fs.
- You don't want to use the minix file system on your hard disk
- because of certain built-in restrictions, but it is sometimes found
- on older Linux floppy disks. This option will enlarge your kernel
- by about 28 KB. If unsure, say N.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called minix.o. Note that the file system of your root
- partition (the one containing the directory /) cannot be compiled as
- a module.
-
-Reiserfs support
-CONFIG_REISERFS_FS
- Stores not just filenames but the files themselves in a balanced
- tree. Uses journalling.
-
- Balanced trees are more efficient than traditional file system
- architectural foundations.
-
- In general, ReiserFS is as fast as ext2, but is very efficient with
- large directories and small files. It is much faster for writes,
- and slightly slower for reads than ext2. It is much faster than
- ext3. It will be obsoleted by Reiser4 in not too long, so keep
- an eye on our website for when Reiser4 ships.
-
- Mount with the notail option if performance matters more to you than
- saving space (the design flaw underlying this is fixed in reiser4).
-
- Read <http://www.namesys.com> to learn more about reiserfs.
-
-Enable extra Reiserfs consistency checks
-CONFIG_REISERFS_CHECK
- If you set this to Y, then ReiserFS will perform every check it can
- possibly imagine of its internal consistency throughout its
- operation. It will also go substantially slower. More than once we
- have forgotten that this was on, and then gone despondent over the
- latest benchmarks.:-) Use of this option allows our team to go all
- out in checking for consistency when debugging without fear of its
- effect on end users. If you are on the verge of sending in a bug
- report, say Y and you might get a useful error message. Almost
- everyone should say N.
-
-Publish some reiserfs-specific info under /proc/fs/reiserfs
-CONFIG_REISERFS_PROC_INFO
- Create under /proc/fs/reiserfs a hierarchy of files, displaying
- various ReiserFS statistics and internal data at the expense of making
- your kernel or module slightly larger (+8 KB). This also increases the
- amount of kernel memory required for each mount by 440 bytes.
- It isn't useful to average persons, and you probably can't measure the
- performance cost of it. If you are fine-tuning reiserfs, say Y,
- otherwise say N.
-
-Second extended fs support
-CONFIG_EXT2_FS
- This is the de facto standard Linux file system (method to organize
- files on a storage device) for hard disks.
-
- You want to say Y here, unless you intend to use Linux exclusively
- from inside a DOS partition using the UMSDOS file system. The
- advantage of the latter is that you can get away without
- repartitioning your hard drive (which often implies backing
- everything up and restoring afterwards); the disadvantage is that
- Linux becomes susceptible to DOS viruses and that UMSDOS is somewhat
- slower than ext2fs. Even if you want to run Linux in this fashion,
- it might be a good idea to have ext2fs around: it enables you to
- read more floppy disks and facilitates the transition to a *real*
- Linux partition later. Another (rare) case which doesn't require
- ext2fs is a diskless Linux box which mounts all files over the
- network using NFS (in this case it's sufficient to say Y to "NFS
- file system support" below). Saying Y here will enlarge your kernel
- by about 44 KB.
-
- The Ext2fs-Undeletion mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, gives information about
- how to retrieve deleted files on ext2fs file systems.
-
- To change the behaviour of ext2 file systems, you can use the tune2fs
- utility ("man tune2fs"). To modify attributes of files and
- directories on ext2 file systems, use chattr ("man chattr").
-
- Ext2fs partitions can be read from within DOS using the ext2tool
- command line tool package (available from
- <ftp://ibiblio.org/pub/Linux/system/filesystems/ext2/>) and from
- within Windows NT using the ext2nt command line tool package from
- <ftp://ibiblio.org/pub/Linux/utils/dos/>. Explore2fs is a
- graphical explorer for ext2fs partitions which runs on Windows 95
- and Windows NT and includes experimental write support; it is
- available from
- <http://jnewbigin-pc.it.swin.edu.au/Linux/Explore2fs.htm>.
-
- If you want to compile this file system as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called ext2.o. Be aware however that the file system
- of your root partition (the one containing the directory /) cannot
- be compiled as a module, and so this could be dangerous. Most
- everyone wants to say Y here.
-
-Ext3 journalling file system support (EXPERIMENTAL)
-CONFIG_EXT3_FS
- This is the journalling version of the Second extended file system
- (often called ext3), the de facto standard Linux file system
- (method to organize files on a storage device) for hard disks.
-
- The journalling code included in this driver means you do not have
- to run e2fsck (file system checker) on your file systems after a
- crash. The journal keeps track of any changes that were being made
- at the time the system crashed, and can ensure that your file system
- is consistent without the need for a lengthy check.
-
- Other than adding the journal to the file system, the on-disk format
- of ext3 is identical to ext2. It is possible to freely switch
- between using the ext3 driver and the ext2 driver, as long as the
- file system has been cleanly unmounted, or e2fsck is run on the file
- system.
-
- To add a journal on an existing ext2 file system or change the
- behaviour of ext3 file systems, you can use the tune2fs utility ("man
- tune2fs"). To modify attributes of files and directories on ext3
- file systems, use chattr ("man chattr"). You need to be using
- e2fsprogs version 1.20 or later in order to create ext3 journals
- (available at <http://sourceforge.net/projects/e2fsprogs/>).
-
- If you want to compile this file system as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called ext3.o. Be aware however that the file system
- of your root partition (the one containing the directory /) cannot
- be compiled as a module, and so this may be dangerous.
-
-Journal Block Device support (JBD for ext3) (EXPERIMENTAL)
-CONFIG_JBD
- This is a generic journalling layer for block devices. It is
- currently used by the ext3 file system, but it could also be used to
- add journal support to other file systems or block devices such as
- RAID or LVM.
-
- If you are using the ext3 file system, you need to say Y here. If
- you are not using ext3 then you will probably want to say N.
-
- If you want to compile this device as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called jbd.o. If you are compiling ext3 into the kernel,
- you cannot compile this code as a module.
-
-JBD (ext3) debugging support
-CONFIG_JBD_DEBUG
- If you are using the ext3 journalling file system (or potentially any
- other file system/device using JBD), this option allows you to
- enable debugging output while the system is running, in order to
- help track down any problems you are having. By default the
- debugging output will be turned off.
-
- If you select Y here, then you will be able to turn on debugging
- with "echo N > /proc/sys/fs/jbd-debug", where N is a number between
- 1 and 5, the higher the number, the more debugging output is
- generated. To turn debugging off again, do
- "echo 0 > /proc/sys/fs/jbd-debug".
-
-Buffer Head tracing (DEBUG)
-CONFIG_BUFFER_DEBUG
- If you are a kernel developer working with file systems or in the
- block device layer, this buffer head tracing may help you to track
- down bugs in your code. This enables some debugging macros
- (BUFFER_TRACE, etc.) which allow you to track the state of a buffer
- through various layers of code. The debugging code is used
- primarily by ext3 and JBD code.
-
- Because this option adds considerably to the size of each buffer,
- most people will want to say N here.
-
-BeOS filesystem support (BeFS) (read only)
-CONFIG_BEFS_FS
- The BeOS File System (BeFS) is the native file system of Be, Inc's
- BeOS. Notable features include support for arbitrary attributes
- on files and directories, and database-like indices on selected
- attributes. (Also note that this driver doesn't make those features
- available at this time). It is a 64 bit filesystem, so it supports
- extremely large volumes and files.
-
- If you use this filesystem, you should also say Y to at least one
- of the NLS (native language support) options below.
-
- If you don't know what this is about, say N.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module will be
- called befs.o.
-
-Debug BeFS
-CONFIG_BEFS_DEBUG
- If you say Y here, you can use the 'debug' mount option to enable
- debugging output from the driver. This is unlike previous versions
- of the driver, where enabling this option would turn on debugging
- output automatically.
-
- Example:
- mount -t befs /dev/hda2 /mnt -o debug
-
-BFS file system support
-CONFIG_BFS_FS
- Boot File System (BFS) is a file system used under SCO UnixWare to
- allow the bootloader access to the kernel image and other important
- files during the boot process. It is usually mounted under /stand
- and corresponds to the slice marked as "STAND" in the UnixWare
- partition. You should say Y if you want to read or write the files
- on your /stand slice from within Linux. You then also need to say Y
- to "UnixWare slices support", below. More information about the BFS
- file system is contained in the file
- <file:Documentation/filesystems/bfs.txt>.
-
- If you don't know what this is about, say N.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called bfs.o. Note that the file system of your root
- partition (the one containing the directory /) cannot be compiled as
- a module.
-
-Compressed ROM file system support
-CONFIG_CRAMFS
- Saying Y here includes support for CramFs (Compressed ROM File
- System). CramFs is designed to be a simple, small, and compressed
- file system for ROM based embedded systems. CramFs is read-only,
- limited to 256MB file systems (with 16MB files), and doesn't support
- 16/32 bits uid/gid, hard links and timestamps.
-
- See <file:Documentation/filesystems/cramfs.txt> and
- <file:fs/cramfs/README> for further information.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called cramfs.o. Note that the root file system (the one
- containing the directory /) cannot be compiled as a module.
-
- If unsure, say N.
-
-CMS file system support
-CONFIG_CMS_FS
- Read only support for CMS minidisk file systems found on IBM
- mainframe systems. Only the basic format is supported so far. If
- you don't know what CMS is you probably don't want to know any more.
-
-# When the 2.5 version of configure.help goes away, the part of this that
-# duplicates Documentation/filesystems/tmpfs.txt can drop out.
-Virtual memory file system support
-CONFIG_TMPFS
- Tmpfs is a file system which keeps all files in virtual memory.
- Everything in tmpfs is temporary in the sense that no files will be
- created on your hard drive. If you reboot, everything in tmpfs will
- be lost.
-
- In contrast to RAM disks, which get allocated a fixed amount of
- physical RAM, tmpfs grows and shrinks to accommodate the files it
- contains and is able to swap unneeded pages out to swap space.
-
- Everything is "virtual" in the sense that no files will be created
- on your hard drive; if you reboot, everything in tmpfs will be
- lost.
-
- You should mount the file system somewhere to be able to use
- POSIX shared memory. Adding the following line to /etc/fstab should
- take care of things:
-
- tmpfs /dev/shm tmpfs defaults 0 0
-
- Remember to create the directory that you intend to mount tmpfs on
- if necessary (/dev/shm is automagically created if you use devfs).
-
- You can set limits for the number of blocks and inodes used by the
- file system with the mount options "size", "nr_blocks" and
- "nr_inodes". These parameters accept a suffix k, m or g for kilo,
- mega and giga and can be changed on remount.
-
- The initial permissions of the root directory can be set with the
- mount option "mode".
-
- See <file:Documentation/filesystems/tmpfs.txt> for details.
-
-Simple RAM-based file system support
-CONFIG_RAMFS
- Ramfs is a file system which keeps all files in RAM. It allows
- read and write access.
-
- It is more of an programming example than a usable file system. If
- you need a file system which lives in RAM with limit checking use
- tmpfs.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ramfs.o.
-
-ISO 9660 CD-ROM file system support
-CONFIG_ISO9660_FS
- This is the standard file system used on CD-ROMs. It was previously
- known as "High Sierra File System" and is called "hsfs" on other
- Unix systems. The so-called Rock-Ridge extensions which allow for
- long Unix filenames and symbolic links are also supported by this
- driver. If you have a CD-ROM drive and want to do more with it than
- just listen to audio CDs and watch its LEDs, say Y (and read
- <file:Documentation/filesystems/isofs.txt> and the CD-ROM-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>), thereby
- enlarging your kernel by about 27 KB; otherwise say N.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called isofs.o.
-
-Microsoft Joliet CD-ROM extensions
-CONFIG_JOLIET
- Joliet is a Microsoft extension for the ISO 9660 CD-ROM file system
- which allows for long filenames in unicode format (unicode is the
- new 16 bit character code, successor to ASCII, which encodes the
- characters of almost all languages of the world; see
- <http://www.unicode.org/> for more information). Say Y here if you
- want to be able to read Joliet CD-ROMs under Linux.
-
-Transparent decompression extension
-CONFIG_ZISOFS
- This is a Linux-specific extension to RockRidge which lets you store
- data in compressed form on a CD-ROM and have it transparently
- decompressed when the CD-ROM is accessed. See
- <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools
- necessary to create such a filesystem. Say Y here if you want to be
- able to read such compressed CD-ROMs.
-
-UDF file system support (read-only)
-CONFIG_UDF_FS
- This is the new file system used on some CD-ROMs and DVDs. Say Y if
- you intend to mount DVD discs or CDRW's written in packet mode, or
- if written to by other UDF utilities, such as DirectCD. This UDF
- file system support is read-only. If you want to write to UDF
- file systems on some media, you need to say Y to "UDF read-write
- support" below in addition. Please read
- <file:Documentation/filesystems/udf.txt>.
-
- This file system support is also available as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). The module is called udf.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-UDF write support (DANGEROUS)
-CONFIG_UDF_RW
- Say Y if you want to test write support for UDF file systems.
- Due to lack of support for writing to CDR/CDRW's, this option
- is only supported for hard discs, DVD-RAM, and loopback files.
-
-DOS FAT fs support
-CONFIG_FAT_FS
- If you want to use one of the FAT-based file systems (the MS-DOS,
- VFAT (Windows 95) and UMSDOS (used to run Linux on top of an
- ordinary DOS partition) file systems), then you must say Y or M here
- to include FAT support. You will then be able to mount partitions or
- diskettes with FAT-based file systems and transparently access the
- files on them, i.e. MSDOS files will look and behave just like all
- other Unix files.
-
- This FAT support is not a file system in itself, it only provides
- the foundation for the other file systems. You will have to say Y or
- M to at least one of "MSDOS fs support" or "VFAT fs support" in
- order to make use of it.
-
- Another way to read and write MSDOS floppies and hard drive
- partitions from within Linux (but not transparently) is with the
- mtools ("man mtools") program suite. You don't need to say Y here in
- order to do that.
-
- If you need to move large files on floppies between a DOS and a
- Linux box, say Y here, mount the floppy under Linux with an MSDOS
- file system and use GNU tar's M option. GNU tar is a program
- available for Unix and DOS ("man tar" or "info tar").
-
- It is now also becoming possible to read and write compressed FAT
- file systems; read <file:Documentation/filesystems/fat_cvf.txt> for
- details.
-
- The FAT support will enlarge your kernel by about 37 KB. If unsure,
- say Y.
-
- If you want to compile this as a module however ( = code which can
- be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called fat.o. Note that if you compile the FAT
- support as a module, you cannot compile any of the FAT-based file
- systems into the kernel -- they will have to be modules as well.
- The file system of your root partition (the one containing the
- directory /) cannot be a module, so don't say M here if you intend
- to use UMSDOS as your root file system.
-
-MSDOS fs support
-CONFIG_MSDOS_FS
- This allows you to mount MSDOS partitions of your hard drive (unless
- they are compressed; to access compressed MSDOS partitions under
- Linux, you can either use the DOS emulator DOSEMU, described in the
- DOSEMU-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>, or try dmsdosfs in
- <ftp://ibiblio.org/pub/Linux/system/filesystems/dosfs/>. If you
- intend to use dosemu with a non-compressed MSDOS partition, say Y
- here) and MSDOS floppies. This means that file access becomes
- transparent, i.e. the MSDOS files look and behave just like all
- other Unix files.
-
- If you want to use UMSDOS, the Unix-like file system on top of a
- DOS file system, which allows you to run Linux from within a DOS
- partition without repartitioning, you'll have to say Y or M here.
-
- If you have Windows 95 or Windows NT installed on your MSDOS
- partitions, you should use the VFAT file system (say Y to "VFAT fs
- support" below), or you will not be able to see the long filenames
- generated by Windows 95 / Windows NT.
-
- This option will enlarge your kernel by about 7 KB. If unsure,
- answer Y. This will only work if you said Y to "DOS FAT fs support"
- as well. If you want to compile this as a module however ( = code
- which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>.
- The module will be called msdos.o.
-
-VFAT (Windows-95) fs support
-CONFIG_VFAT_FS
- This option provides support for normal Windows file systems with
- long filenames. That includes non-compressed FAT-based file systems
- used by Windows 95, Windows 98, Windows NT 4.0, and the Unix
- programs from the mtools package.
-
- You cannot use the VFAT file system for your Linux root partition
- (the one containing the directory /); use UMSDOS instead if you
- want to run Linux from within a DOS partition (i.e. say Y to
- "Unix like fs on top of std MSDOS fs", below).
-
- The VFAT support enlarges your kernel by about 10 KB and it only
- works if you said Y to the "DOS FAT fs support" above. Please read
- the file <file:Documentation/filesystems/vfat.txt> for details. If
- unsure, say Y.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called vfat.o.
-
-Unix-like file system on top of standard MSDOS fs
-CONFIG_UMSDOS_FS
- Say Y here if you want to run Linux from within an existing DOS
- partition of your hard drive. The advantage of this is that you can
- get away without repartitioning your hard drive (which often implies
- backing everything up and restoring afterwards) and hence you're
- able to quickly try out Linux or show it to your friends; the
- disadvantage is that Linux becomes susceptible to DOS viruses and
- that UMSDOS is somewhat slower than ext2fs. Another use of UMSDOS
- is to write files with long unix filenames to MSDOS floppies; it
- also allows Unix-style soft-links and owner/permissions of files on
- MSDOS floppies. You will need a program called umssync in order to
- make use of UMSDOS; read
- <file:Documentation/filesystems/umsdos.txt>.
-
- To get utilities for initializing/checking UMSDOS file system, or
- latest patches and/or information, visit the UMSDOS home page at
- <http://www.voyager.hr/~mnalis/umsdos/>.
-
- This option enlarges your kernel by about 28 KB and it only works if
- you said Y to both "DOS FAT fs support" and "MSDOS fs support"
- above. If you want to compile this as a module ( = code which can
- be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called umsdos.o. Note that the file system of your
- root partition (the one containing the directory /) cannot be a
- module, so saying M could be dangerous. If unsure, say N.
-
-/proc file system support
-CONFIG_PROC_FS
- This is a virtual file system providing information about the status
- of the system. "Virtual" means that it doesn't take up any space on
- your hard disk: the files are created on the fly by the kernel when
- you try to access them. Also, you cannot read the files with older
- version of the program less: you need to use more or cat.
-
- It's totally cool; for example, "cat /proc/interrupts" gives
- information about what the different IRQs are used for at the moment
- (there is a small number of Interrupt ReQuest lines in your computer
- that are used by the attached devices to gain the CPU's attention --
- often a source of trouble if two devices are mistakenly configured
- to use the same IRQ). The program procinfo to display some
- information about your system gathered from the /proc file system.
-
- Before you can use the /proc file system, it has to be mounted,
- meaning it has to be given a location in the directory hierarchy.
- That location should be /proc. A command such as "mount -t proc proc
- /proc" or the equivalent line in /etc/fstab does the job.
-
- The /proc file system is explained in the file
- <file:Documentation/filesystems/proc.txt> and on the proc(5) manpage
- ("man 5 proc").
-
- This option will enlarge your kernel by about 67 KB. Several
- programs depend on this, so everyone should say Y here.
-
-Support for PReP Residual Data
-CONFIG_PREP_RESIDUAL
- Some PReP systems have residual data passed to the kernel by the
- firmware. This allows detection of memory size, devices present and
- other useful pieces of information. Sometimes this information is
- not present or incorrect.
-
- Unless you expect to boot on a PReP system, there is no need to
- select Y.
-
-PReP residual data available in /proc/residual
-CONFIG_PROC_PREPRESIDUAL
- Enabling this option will create a /proc/residual file which allows
- you to get at the residual data on PReP systems. You will need a tool
- (lsresidual) to parse it. If you aren't on a PReP system, you don't
- want this.
-
-/dev file system support
-CONFIG_DEVFS_FS
- This is support for devfs, a virtual file system (like /proc) which
- provides the file system interface to device drivers, normally found
- in /dev. Devfs does not depend on major and minor number
- allocations. Device drivers register entries in /dev which then
- appear automatically, which means that the system administrator does
- not have to create character and block special device files in the
- /dev directory using the mknod command (or MAKEDEV script) anymore.
-
- This is work in progress. If you want to use this, you *must* read
- the material in <file:Documentation/filesystems/devfs/>, especially
- the file README there.
-
- If unsure, say N.
-
-Automatically mount devfs at boot time
-CONFIG_DEVFS_MOUNT
- This option appears if you have CONFIG_DEVFS_FS enabled. Setting
- this to 'Y' will make the kernel automatically mount devfs onto /dev
- when the system is booted, before the init thread is started.
- You can override this with the "devfs=nomount" boot option.
-
- If unsure, say N.
-
-Debug devfs
-CONFIG_DEVFS_DEBUG
- If you say Y here, then the /dev file system code will generate
- debugging messages. See the file
- <file:Documentation/filesystems/devfs/boot-options> for more
- details.
-
- If unsure, say N.
-
-NFS file system support
-CONFIG_NFS_FS
- If you are connected to some other (usually local) Unix computer
- (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing
- on that computer (the NFS server) using the Network File Sharing
- protocol, say Y. "Mounting files" means that the client can access
- the files with usual UNIX commands as if they were sitting on the
- client's hard disk. For this to work, the server must run the
- programs nfsd and mountd (but does not need to have NFS file system
- support enabled in its kernel). NFS is explained in the Network
- Administrator's Guide, available from
- <http://www.tldp.org/docs.html#guide>, on its man page: "man
- nfs", and in the NFS-HOWTO.
-
- A superior but less widely used alternative to NFS is provided by
- the Coda file system; see "Coda file system support" below.
-
- If you say Y here, you should have said Y to TCP/IP networking also.
- This option would enlarge your kernel by about 27 KB.
-
- This file system is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called nfs.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
- If you are configuring a diskless machine which will mount its root
- file system over NFS at boot time, say Y here and to "Kernel
- level IP autoconfiguration" above and to "Root file system on NFS"
- below. You cannot compile this driver as a module in this case.
- There are two packages designed for booting diskless machines over
- the net: netboot, available from
- <http://ftp1.sourceforge.net/netboot/>, and Etherboot,
- available from <http://ftp1.sourceforge.net/etherboot/>.
-
- If you don't know what all this is about, say N.
-
-Provide NFSv3 client support
-CONFIG_NFS_V3
- Say Y here if you want your NFS client to be able to speak the newer
- version 3 of the NFS protocol.
-
- If unsure, say N.
-
-Allow direct I/O on files in NFS
-CONFIG_NFS_DIRECTIO
- There are important applications whose performance or correctness
- depends on uncached access to file data. Database clusters (multiple
- copies of the same instance running on separate hosts) implement their
- own cache coherency protocol that subsumes the NFS cache protocols.
- Applications that process datasets considerably larger than the client's
- memory do not always benefit from a local cache. A streaming video
- server, for instance, has no need to cache the contents of a file.
-
- This option enables applications to perform direct I/O on files in NFS
- file systems using the O_DIRECT open() flag. When O_DIRECT is set for
- files, their data is not cached in the system's page cache. Direct
- read and write operations are aligned to block boundaries. Data is
- moved to and from user-level application buffers directly.
-
- Unless your program is designed to use O_DIRECT properly, you are much
- better off allowing the NFS client to manage caching for you. Misusing
- O_DIRECT can cause poor server performance or network storms. This
- kernel build option defaults OFF to avoid exposing system administrators
- unwittingly to a potentially hazardous feature.
-
- If unsure, say N.
-
-Root file system on NFS
-CONFIG_ROOT_NFS
- If you want your Linux box to mount its whole root file system (the
- one containing the directory /) from some other computer over the
- net via NFS (presumably because your box doesn't have a hard disk),
- say Y. Read <file:Documentation/nfsroot.txt> for details. It is
- likely that in this case, you also want to say Y to "Kernel level IP
- autoconfiguration" so that your box can discover its network address
- at boot time.
-
- Most people say N here.
-
-NFS server support
-CONFIG_NFSD
- If you want your Linux box to act as an NFS *server*, so that other
- computers on your local network which support NFS can access certain
- directories on your box transparently, you have two options: you can
- use the self-contained user space program nfsd, in which case you
- should say N here, or you can say Y and use the kernel based NFS
- server. The advantage of the kernel based solution is that it is
- faster.
-
- In either case, you will need support software; the respective
- locations are given in the file <file:Documentation/Changes> in the
- NFS section.
-
- If you say Y here, you will get support for version 2 of the NFS
- protocol (NFSv2). If you also want NFSv3, say Y to the next question
- as well.
-
- Please read the NFS-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- The NFS server is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called nfsd.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>. If unsure,
- say N.
-
-Provide NFSv3 server support
-CONFIG_NFSD_V3
- If you would like to include the NFSv3 server as well as the NFSv2
- server, say Y here. If unsure, say Y.
-
-Provide NFS over TCP server support EXPERIMENTAL
-CONFIG_NFSD_TCP
- Enable NFS service over TCP connections. This the officially
- still experimental, but seems to work well.
-
-OS/2 HPFS file system support
-CONFIG_HPFS_FS
- OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
- is the file system used for organizing files on OS/2 hard disk
- partitions. Say Y if you want to be able to read files from and
- write files to an OS/2 HPFS partition on your hard drive. OS/2
- floppies however are in regular MSDOS format, so you don't need this
- option in order to be able to read them. Read
- <file:Documentation/filesystems/hpfs.txt>.
-
- This file system is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called hpfs.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>. If unsure,
- say N.
-
-NTFS file system support (read-only)
-CONFIG_NTFS_FS
- NTFS is the file system of Microsoft Windows NT. Say Y if you want
- to get read access to files on NTFS partitions of your hard drive.
- The Linux NTFS driver supports most of the mount options of the VFAT
- driver, see <file:Documentation/filesystems/ntfs.txt>. Saying Y here
- will give you read-only access to NTFS partitions.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ntfs.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-NTFS write support (DANGEROUS)
-CONFIG_NTFS_RW
- If you say Y here, you will (maybe) be able to write to NTFS file
- systems as well as read from them. The read-write support in NTFS
- is far from being complete and is not well tested. If you say Y
- here, back up your NTFS volume first, since it will probably get
- damaged. Also, download the Linux-NTFS project distribution from
- Sourceforge at <http://linux-ntfs.sf.net/> and always run the
- included ntfsfix utility after writing to an NTFS partition from
- Linux to fix some of the damage done by the driver. You should run
- ntfsfix _after_ unmounting the partition in Linux but _before_
- rebooting into Windows. When Windows next boots, chkdsk will be
- run automatically to fix the remaining damage.
- Please note that write support is limited to Windows NT4 and
- earlier versions.
-
- If unsure, say N.
-
-System V/Xenix/V7/Coherent file system support
-CONFIG_SYSV_FS
- SCO, Xenix and Coherent are commercial Unix systems for Intel
- machines, and Version 7 was used on the DEC PDP-11. Saying Y
- here would allow you to read from their floppies and hard disk
- partitions.
-
- If you have floppies or hard disk partitions like that, it is likely
- that they contain binaries from those other Unix systems; in order
- to run these binaries, you will want to install linux-abi which is a
- a set of kernel modules that lets you run SCO, Xenix, Wyse,
- UnixWare, Dell Unix and System V programs under Linux. It is
- available via FTP (user: ftp) from
- <ftp://ftp.openlinux.org/pub/people/hch/linux-abi/>).
- NOTE: that will work only for binaries from Intel-based systems;
- PDP ones will have to wait until somebody ports Linux to -11 ;-)
-
- If you only intend to mount files from some other Unix over the
- network using NFS, you don't need the System V file system support
- (but you need NFS file system support obviously).
-
- Note that this option is generally not needed for floppies, since a
- good portable way to transport files and directories between unixes
- (and even other operating systems) is given by the tar program ("man
- tar" or preferably "info tar"). Note also that this option has
- nothing whatsoever to do with the option "System V IPC". Read about
- the System V file system in
- <file:Documentation/filesystems/sysv-fs.txt>.
- Saying Y here will enlarge your kernel by about 27 KB.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sysv.o.
-
- If you haven't heard about all of this before, it's safe to say N.
-
-Amiga FFS file system support
-CONFIG_AFFS_FS
- The Fast File System (FFS) is the common file system used on hard
- disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y
- if you want to be able to read and write files from and to an Amiga
- FFS partition on your hard drive. Amiga floppies however cannot be
- read with this driver due to an incompatibility of the floppy
- controller used in an Amiga and the standard floppy controller in
- PCs and workstations. Read <file:Documentation/filesystems/affs.txt>
- and <file:fs/affs/Changes>.
-
- With this driver you can also mount disk files used by Bernd
- Schmidt's Un*X Amiga Emulator
- (<http://www.freiburg.linux.de/~uae/>).
- If you want to do this, you will also need to say Y or M to "Loop
- device support", above.
-
- This file system is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called affs.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>. If unsure,
- say N.
-
-Apple HFS file system support
-CONFIG_HFS_FS
- If you say Y here, you will be able to mount Macintosh-formatted
- floppy disks and hard drive partitions with full read-write access.
- Please read <file:fs/hfs/HFS.txt> to learn about the available mount
- options.
-
- This file system support is also available as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). The module is called hfs.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Apple HFS+ (Extended HFS) file system support
-CONFIG_HFSPLUS_FS
- If you say Y here, you will be able to mount extended format
- Macintosh-formatted hard drive partitions with full read-write access.
-
- This file system is often called HFS+ and was introduced with
- MacOS 8. It includes all Mac specific filesystem data such as
- data forks and creator codes, but it also has several UNIX
- style features such as file ownership and permissions.
-
- This file system is also available as a module ( = code which can
- be inserted in and removed from the running kernel whenever you
- want). The module is called hfsplus.o. If you want to compile it
- as a module, say M here and read Documentation/modules.txt.
-
-ROM file system support
-CONFIG_ROMFS_FS
- This is a very small read-only file system mainly intended for
- initial ram disks of installation disks, but it could be used for
- other read-only media as well. Read
- <file:Documentation/filesystems/romfs.txt> for details.
-
- This file system support is also available as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). The module is called romfs.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>. Note that the file system of your
- root partition (the one containing the directory /) cannot be a
- module.
-
- If you don't know whether you need it, then you don't need it:
- answer N.
-
-QNX4 file system support (read only)
-CONFIG_QNX4FS_FS
- This is the file system used by the real-time operating systems
- QNX 4 and QNX 6 (the latter is also called QNX RTP).
- Further information is available at <http://www.qnx.com/>.
- Say Y if you intend to mount QNX hard disks or floppies.
- Unless you say Y to "QNX4FS read-write support" below, you will
- only be able to read these file systems.
-
- This file system support is also available as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). The module is called qnx4.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- If you don't know whether you need it, then you don't need it:
- answer N.
-
-QNX4FS write support (DANGEROUS)
-CONFIG_QNX4FS_RW
- Say Y if you want to test write support for QNX4 file systems.
-
- It's currently broken, so for now:
- answer N.
-
-Kernel automounter support
-CONFIG_AUTOFS_FS
- The automounter is a tool to automatically mount remote file systems
- on demand. This implementation is partially kernel-based to reduce
- overhead in the already-mounted case; this is unlike the BSD
- automounter (amd), which is a pure user space daemon.
-
- To use the automounter you need the user-space tools from the autofs
- package; you can find the location in <file:Documentation/Changes>.
- You also want to answer Y to "NFS file system support", below.
-
- If you want to use the newer version of the automounter with more
- features, say N here and say Y to "Kernel automounter v4 support",
- below.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called autofs.o.
-
- If you are not a part of a fairly large, distributed network, you
- probably do not need an automounter, and can say N here.
-
-Kernel automounter version 4 support (also supports v3)
-CONFIG_AUTOFS4_FS
- The automounter is a tool to automatically mount remote file systems
- on demand. This implementation is partially kernel-based to reduce
- overhead in the already-mounted case; this is unlike the BSD
- automounter (amd), which is a pure user space daemon.
-
- To use the automounter you need the user-space tools from
- <ftp://ftp.kernel.org/pub/linux/daemons/autofs/testing-v4/>; you also
- want to answer Y to "NFS file system support", below.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called autofs4.o. You will need to add "alias autofs
- autofs4" to your modules configuration file.
-
- If you are not a part of a fairly large, distributed network or
- don't have a laptop which needs to dynamically reconfigure to the
- local network, you probably do not need an automounter, and can say
- N here.
-
-EFS file system support (read-only)
-CONFIG_EFS_FS
- EFS is an older file system used for non-ISO9660 CD-ROMs and hard
- disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer
- uses the XFS file system for hard disk partitions however).
-
- This implementation only offers read-only access. If you don't know
- what all this is about, it's safe to say N. For more information
- about EFS see its home page at <http://aeschi.ch.eu.org/efs/>.
-
- If you want to compile the EFS file system support as a module ( =
- code which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called efs.o.
-
-Journalling Flash File System (JFFS) support
-CONFIG_JFFS_FS
- JFFS is the Journalling Flash File System developed by Axis
- Communications in Sweden, aimed at providing a crash/powerdown-safe
- file system for disk-less embedded devices. Further information is
- available at (<http://developer.axis.com/software/jffs/>).
-
-JFFS debugging verbosity (0 = quiet, 3 = noisy)
-CONFIG_JFFS_FS_VERBOSE
- Determines the verbosity level of the JFFS debugging messages.
-
-Journalling Flash File System v2 (JFFS2) support
-CONFIG_JFFS2_FS
- JFFS2 is the second generation of the Journalling Flash File System
- for use on diskless embedded devices. It provides improved wear
- levelling, compression and support for hard links. You cannot use
- this on normal block devices, only on 'MTD' devices.
-
- Further information should be made available soon at
- <http://sources.redhat.com/jffs2/>.
-
-JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
-CONFIG_JFFS2_FS_DEBUG
- This controls the amount of debugging messages produced by the JFFS2
- code. Set it to zero for use in production systems. For evaluation,
- testing and debugging, it's advisable to set it to one. This will
- enable a few assertions and will print debugging messages at the
- KERN_DEBUG loglevel, where they won't normally be visible. Level 2
- is unlikely to be useful - it enables extra debugging in certain
- areas which at one point needed debugging, but when the bugs were
- located and fixed, the detailed messages were relegated to level 2.
-
- If reporting bugs, please try to have available a full dump of the
- messages at debug level 1 while the misbehaviour was occurring.
-
-JFFS stats available in /proc filesystem
-CONFIG_JFFS_PROC_FS
- Enabling this option will cause statistics from mounted JFFS file systems
- to be made available to the user in the /proc/fs/jffs/ directory.
-
-UFS file system support (read-only)
-CONFIG_UFS_FS
- BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
- OpenBSD and NeXTstep) use a file system called UFS. Some System V
- Unixes can create and mount hard disk partitions and diskettes using
- this file system as well. Saying Y here will allow you to read from
- these partitions; if you also want to write to them, say Y to the
- experimental "UFS file system write support", below. Please read the
- file <file:Documentation/filesystems/ufs.txt> for more information.
-
- If you only intend to mount files from some other Unix over the
- network using NFS, you don't need the UFS file system support (but
- you need NFS file system support obviously).
-
- Note that this option is generally not needed for floppies, since a
- good portable way to transport files and directories between unixes
- (and even other operating systems) is given by the tar program ("man
- tar" or preferably "info tar").
-
- When accessing NeXTstep files, you may need to convert them from the
- NeXT character set to the Latin1 character set; use the program
- recode ("info recode") for this purpose.
-
- If you want to compile the UFS file system support as a module ( =
- code which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called ufs.o.
-
- If you haven't heard about all of this before, it's safe to say N.
-
-UFS file system write support (DANGEROUS)
-CONFIG_UFS_FS_WRITE
- Say Y here if you want to try writing to UFS partitions. This is
- experimental, so you should back up your UFS partitions beforehand.
-
-XFS filesystem support
-CONFIG_XFS_FS
- XFS is a high performance journaling filesystem which originated
- on the SGI IRIX platform. It is completely multi-threaded, can
- support large files and large filesystems, extended attributes,
- variable block sizes, is extent based, and makes extensive use of
- Btrees (directories, extents, free space) to aid both performance
- and scalability.
-
- Refer to the documentation at <http://oss.sgi.com/projects/xfs/>
- for complete details. This implementation is on-disk compatible
- with the IRIX version of XFS.
-
- If you want to compile this file system as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called xfs.o. Be aware, however, that if the file
- system of your root partition is compiled as a module, you'll need
- to use an initial ramdisk (initrd) to boot.
-
-Quota support
-CONFIG_XFS_QUOTA
- If you say Y here, you will be able to set limits for disk usage on
- a per user and/or per group basis under XFS. XFS considers quota
- information as filesystem metadata and uses journaling to provide a
- higher level guarantee of consistency. The on-disk data format for
- quota is also compatible with the IRIX version of XFS, allowing a
- filesystem to be migrated between Linux and IRIX without any need
- for conversion.
-
- If unsure, say N. More comprehensive documentation can be found in
- README.quota in the xfsprogs package. XFS quota can be used either
- with or without the generic quota support enabled (CONFIG_QUOTA) -
- they are completely independent subsystems.
-
-Realtime support (EXPERIMENTAL)
-CONFIG_XFS_RT
- If you say Y here you will be able to mount and use XFS filesystems
- which contain a realtime subvolume. The realtime subvolume is a
- separate area of disk space where only file data is stored. The
- realtime subvolume is designed to provide very deterministic
- data rates suitable for media streaming applications.
-
- See the xfs man page in section 5 for a bit more information.
-
- This feature is unsupported at this time, is not yet fully
- functional, and may cause serious problems.
-
- If unsure, say N.
-
-Tracing support (EXPERIMENTAL)
-CONFIG_XFS_TRACE
- Say Y here to get an XFS build with activity tracing enabled.
- Enabling this option will attach historical information to XFS
- inodes, pagebufs, certain locks, the log, the IO path, and a
- few other key areas within XFS. These traces can be examined
- using a kernel debugger.
-
- Note that for the pagebuf traces, you will also have to enable
- the sysctl in /proc/sys/vm/pagebuf/debug for this to work.
-
- Say N unless you are an XFS developer.
-
-Debugging support (EXPERIMENTAL)
-CONFIG_XFS_DEBUG
- Say Y here to get an XFS build with many debugging features,
- including ASSERT checks, function wrappers around macros,
- and extra sanity-checking functions in various code paths.
-
- Note that the resulting code will be HUGE and SLOW, and probably
- not useful unless you are debugging a particular problem.
-
- Say N unless you are an XFS developer, or play one on TV.
-
-Advanced partition selection
-CONFIG_PARTITION_ADVANCED
- Say Y here if you would like to use hard disks under Linux which
- were partitioned under an operating system running on a different
- architecture than your Linux system.
-
- 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 foreign partitioning schemes.
-
- If unsure, say N.
-
-Acorn partition support
-CONFIG_ACORN_PARTITION
- Support hard disks partitioned under Acorn operating systems.
-
-Xen virtual-partition support
-CONFIG_XEN_VBD_PARTITION
- Support partition-level virtual block devices. The Xen
- hypervisor can export partitions on a physical disk to clients,
- but access to the partition table requires special trickery.
- This will be used if this option is enabled; otherwise,
- it will be possible to access exported partitions by sector
- number but not with useful names e.g. /dev/hda4.
-
- If unsure, say Y.
-
-Native filecore partition support
-CONFIG_ACORN_PARTITION_ADFS
- The Acorn Disc Filing System is the standard file system of the
- RiscOS operating system which runs on Acorn's ARM-based Risc PC
- systems and the Acorn Archimedes range of machines. If you say
- `Y' here, Linux will support disk partitions created under ADFS.
-
-PowerTec partition support
-CONFIG_ACORN_PARTITION_POWERTEC
- Support reading partition tables created on Acorn machines using
- the PowerTec SCSI drive.
-
-RISCiX partition support
-CONFIG_ACORN_PARTITION_RISCIX
- Once upon a time, there was a native Unix port for the Acorn series
- of machines called RISCiX. If you say 'Y' here, Linux will be able
- to read disks partitioned under RISCiX.
-
-ICS partition support
-CONFIG_ACORN_PARTITION_ICS
- Say Y here if you would like to use hard disks under Linux which
- were partitioned using the ICS interface on Acorn machines.
-
-Alpha OSF partition support
-CONFIG_OSF_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned on an Alpha machine.
-
-Macintosh partition map support
-CONFIG_MAC_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned on a Macintosh.
-
-Windows Logical Disk Manager (Dynamic Disk) support (EXPERIMENTAL)
-CONFIG_LDM_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned using Windows 2000's or XP's Logical Disk Manager.
- They are also known as "Dynamic Disks".
-
- Windows 2000 introduced the concept of Dynamic Disks to get around
- the limitations of the PC's partitioning scheme. The Logical Disk
- Manager allows the user to repartition a disk and create spanned,
- mirrored, striped or RAID volumes, all without the need for
- rebooting.
-
- Normal partitions are now called Basic Disks under Windows 2000 and
- XP.
-
- Technical documentation to accompany this driver is available from:
- <http://linux-ntfs.sf.net/ldm/>.
-
- If unsure, say N.
-
-Windows LDM extra logging
-CONFIG_LDM_DEBUG
- Say Y here if you would like LDM to log verbosely. This could be
- helpful if the driver doesn't work as expected and you'd like to
- report a bug.
-
- If unsure, say N.
-
-PC BIOS (MSDOS partition tables) support
-CONFIG_MSDOS_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned on an x86 PC (not necessarily by DOS).
-
-Amiga partition table support
-CONFIG_AMIGA_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned under AmigaOS.
-
-Atari partition table support
-CONFIG_ATARI_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned under the Atari OS.
-
-BSD disklabel (FreeBSD partition tables) support
-CONFIG_BSD_DISKLABEL
- FreeBSD uses its own hard disk partition scheme on your PC. It
- requires only one entry in the primary partition table of your disk
- and manages it similarly to DOS extended partitions, putting in its
- first sector a new partition table in BSD disklabel format. Saying Y
- here allows you to read these disklabels and further mount FreeBSD
- partitions from within Linux if you have also said Y to "UFS
- file system support", above. If you don't know what all this is
- about, say N.
-
-Minix subpartition support
-CONFIG_MINIX_SUBPARTITION
- Minix 2.0.0/2.0.2 subpartition table support for Linux.
- Say Y here if you want to mount and use Minix 2.0.0/2.0.2
- subpartitions.
-
-Sun partition table support
-CONFIG_SUN_PARTITION
- Like most systems, SunOS uses its own hard disk partition table
- format, incompatible with all others. Saying Y here allows you to
- read these partition tables and further mount SunOS partitions from
- within Linux if you have also said Y to "UFS file system support",
- above. This is mainly used to carry data from a SPARC under SunOS to
- your Linux box via a removable medium like magneto-optical or ZIP
- drives; note however that a good portable way to transport files and
- directories between unixes (and even other operating systems) is
- given by the tar program ("man tar" or preferably "info tar"). If
- you don't know what all this is about, say N.
-
-Solaris (x86) partition table support
-CONFIG_SOLARIS_X86_PARTITION
- Like most systems, Solaris x86 uses its own hard disk partition
- table format, incompatible with all others. Saying Y here allows you
- to read these partition tables and further mount Solaris x86
- partitions from within Linux if you have also said Y to "UFS
- file system support", above.
-
-SGI partition support
-CONFIG_SGI_PARTITION
- Say Y here if you would like to be able to read the hard disk
- partition table format used by SGI machines.
-
-Intel EFI GUID partition support
-CONFIG_EFI_PARTITION
- Say Y here if you would like to use hard disks under Linux which
- were partitioned using EFI GPT. Presently only useful on the
- IA-64 platform.
-
-Ultrix partition table support
-CONFIG_ULTRIX_PARTITION
- Say Y here if you would like to be able to read the hard disk
- partition table format used by DEC (now Compaq) Ultrix machines.
- Otherwise, say N.
-
-IBM disk label and partition support
-CONFIG_IBM_PARTITION
- You have to say Y here if you would like to be able to read volume
- labels of IBM DASD disks. These can be ECKD DASD disks with
- compatible disk layout (cdl) and standard Linux disk layout (ldl),
- FBA DASD disks and CMS reserved minidisks.
- Otherwise, say N and you will not be able to access these disks.
-
-ADFS file system support
-CONFIG_ADFS_FS
- The Acorn Disc Filing System is the standard file system of the
- RiscOS operating system which runs on Acorn's ARM-based Risc PC
- systems and the Acorn Archimedes range of machines. If you say Y
- here, Linux will be able to read from ADFS partitions on hard drives
- and from ADFS-formatted floppy discs. If you also want to be able to
- write to those devices, say Y to "ADFS write support" below.
-
- The ADFS partition should be the first partition (i.e.,
- /dev/[hs]d?1) on each of your drives. Please read the file
- <file:Documentation/filesystems/adfs.txt> for further details.
-
- This code is also available as a module called adfs.o ( = code which
- can be inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- If unsure, say N.
-
-ADFS write support (DANGEROUS)
-CONFIG_ADFS_FS_RW
- If you say Y here, you will be able to write to ADFS partitions on
- hard drives and ADFS-formatted floppy disks. This is experimental
- codes, so if you're unsure, say N.
-
-JFS filesystem support
-CONFIG_JFS_FS
- This is a port of IBM's Journalling Filesystem . More information is
- available in the file Documentation/filesystems/jfs.txt.
-
- If you do not intend to use the JFS filesystem, say N.
-
-JFS Debugging
-CONFIG_JFS_DEBUG
- If you are experiencing any problems with the JFS filesystem, say
- Y here. This will result in additional debugging messages to be
- written to the system log. Under normal circumstances, this
- results in very little overhead.
-
-JFS Statistics
-CONFIG_JFS_STATISTICS
- Enabling this option will cause statistics from the JFS file system
- to be made available to the user in the /proc/fs/jfs/ directory.
-
-/dev/pts file system for Unix98 PTYs
-CONFIG_DEVPTS_FS
- You should say Y here if you said Y to "Unix98 PTY support" above.
- You'll then get a virtual file system which can be mounted on
- /dev/pts with "mount -t devpts". This, together with the pseudo
- terminal master multiplexer /dev/ptmx, is used for pseudo terminal
- support as described in The Open Group's Unix98 standard: in order
- to acquire a pseudo terminal, a process opens /dev/ptmx; the number
- of the pseudo terminal is then made available to the process and the
- pseudo terminal slave can be accessed as /dev/pts/<number>. What was
- traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
-
- The GNU C library glibc 2.1 contains the requisite support for this
- mode of operation; you also need client programs that use the Unix98
- API. Please read <file:Documentation/Changes> for more information
- about the Unix98 pty devices.
-
- Note that the experimental "/dev file system support"
- (CONFIG_DEVFS_FS) is a more general facility.
-
-FreeVxFS file system support (VERITAS VxFS(TM) compatible)
-CONFIG_VXFS_FS
- FreeVxFS is a file system driver that support the VERITAS VxFS(TM)
- file system format. VERITAS VxFS(TM) is the standard file system
- of SCO UnixWare (and possibly others) and optionally available
- for Sunsoft Solaris, HP-UX and many other operating systems.
- Currently only readonly access is supported.
-
- NOTE: the file system type as used by mount(1), mount(2) and
- fstab(5) is 'vxfs' as it describes the file system format, not
- the actual driver.
-
- This file system is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called freevxfs.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. If
- unsure, say N.
-
-UnixWare slices support
-CONFIG_UNIXWARE_DISKLABEL
- Like some systems, UnixWare uses its own slice table inside a
- partition (VTOC - Virtual Table of Contents). Its format is
- incompatible with all other OSes. Saying Y here allows you to read
- VTOC and further mount UnixWare partitions read-only from within
- Linux if you have also said Y to "UFS file system support" or
- "System V and Coherent file system support", above.
-
- This is mainly used to carry data from a UnixWare box to your
- Linux box via a removable medium like magneto-optical, ZIP or
- removable IDE drives. Note, however, that a good portable way to
- transport files and directories between unixes (and even other
- operating systems) is given by the tar program ("man tar" or
- preferably "info tar").
-
- If you don't know what all this is about, say N.
-
-SMB file system support (to mount Windows shares etc.)
-CONFIG_SMB_FS
- SMB (Server Message Block) is the protocol Windows for Workgroups
- (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share
- files and printers over local networks. Saying Y here allows you to
- mount their file systems (often called "shares" in this context) and
- access them just like any other Unix directory. Currently, this
- works only if the Windows machines use TCP/IP as the underlying
- transport protocol, and not NetBEUI. For details, read
- <file:Documentation/filesystems/smbfs.txt> and the SMB-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- Note: if you just want your box to act as an SMB *server* and make
- files and printing services available to Windows clients (which need
- to have a TCP/IP stack), you don't need to say Y here; you can use
- the program SAMBA (available from <ftp://ftp.samba.org/pub/samba/>)
- for that.
-
- General information about how to connect Linux, Windows machines and
- Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
-
- If you want to compile the SMB support as a module ( = code which
- can be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called smbfs.o. Most people say N, however.
-
-Use a default NLS
-CONFIG_SMB_NLS_DEFAULT
- Enabling this will make smbfs use nls translations by default. You
- need to specify the local charset (CONFIG_NLS_DEFAULT) in the nls
- settings and you need to give the default nls for the SMB server as
- CONFIG_SMB_NLS_REMOTE.
-
- The nls settings can be changed at mount time, if your smbmount
- supports that, using the codepage and iocharset parameters.
-
- smbmount from samba 2.2.0 or later supports this.
-
-Default Remote NLS Option
-CONFIG_SMB_NLS_REMOTE
- This setting allows you to specify a default value for which
- codepage the server uses. If this field is left blank no
- translations will be done by default. The local codepage/charset
- default to CONFIG_NLS_DEFAULT.
-
- The nls settings can be changed at mount time, if your smbmount
- supports that, using the codepage and iocharset parameters.
-
- smbmount from samba 2.2.0 or later supports this.
-
-Enable Unix Extensions
-CONFIG_SMB_UNIX
- Enabling this will make smbfs use the CIFS Unix Extensions if
- supported by the server. These extensions allows use of unix user
- ids, permissions, file modes, symlinks, etc that normally do not
- work on smbfs.
-
- Samba 3.0 servers supports these extensions.
-
- If you don't know what all this is about, it is safe to say Y.
-
-Coda file system support (advanced network fs)
-CONFIG_CODA_FS
- Coda is an advanced network file system, similar to NFS in that it
- enables you to mount file systems of a remote server and access them
- with regular Unix commands as if they were sitting on your hard
- disk. Coda has several advantages over NFS: support for
- disconnected operation (e.g. for laptops), read/write server
- replication, security model for authentication and encryption,
- persistent client caches and write back caching.
-
- If you say Y here, your Linux box will be able to act as a Coda
- *client*. You will need user level code as well, both for the
- client and server. Servers are currently user level, i.e. they need
- no kernel support. Please read
- <file:Documentation/filesystems/coda.txt> and check out the Coda
- home page <http://www.coda.cs.cmu.edu/>.
-
- If you want to compile the coda client support as a module ( = code
- which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called coda.o.
-
-InterMezzo file system support (replicating fs)
-CONFIG_INTERMEZZO_FS
- InterMezzo is a networked file system with disconnected operation
- and kernel level write back caching. It is most often used for
- replicating potentially large trees or keeping laptop/desktop copies
- in sync.
-
- If you say Y or M your kernel or module will provide InterMezzo
- support. You will also need a file server daemon, which you can get
- from <http://www.inter-mezzo.org/>.
-
-NCP file system support (to mount NetWare volumes)
-CONFIG_NCP_FS
- NCP (NetWare Core Protocol) is a protocol that runs over IPX and is
- used by Novell NetWare clients to talk to file servers. It is to
- IPX what NFS is to TCP/IP, if that helps. Saying Y here allows you
- to mount NetWare file server volumes and to access them just like
- any other Unix directory. For details, please read the file
- <file:Documentation/filesystems/ncpfs.txt> in the kernel source and
- the IPX-HOWTO from <http://www.tldp.org/docs.html#howto>.
-
- You do not have to say Y here if you want your Linux box to act as a
- file *server* for Novell NetWare clients.
-
- General information about how to connect Linux, Windows machines and
- Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ncpfs.o. Say N unless you are connected to a Novell
- network.
-
-Packet signatures
-CONFIG_NCPFS_PACKET_SIGNING
- NCP allows packets to be signed for stronger security. If you want
- security, say Y. Normal users can leave it off. To be able to use
- packet signing you must use ncpfs > 2.0.12.
-
-Proprietary file locking
-CONFIG_NCPFS_IOCTL_LOCKING
- Allows locking of records on remote volumes. Say N unless you have
- special applications which are able to utilize this locking scheme.
-
-Clear remove/delete inhibit when needed
-CONFIG_NCPFS_STRONG
- Allows manipulation of files flagged as Delete or Rename Inhibit.
- To use this feature you must mount volumes with the ncpmount
- parameter "-s" (ncpfs-2.0.12 and newer). Say Y unless you are not
- mounting volumes with -f 444.
-
-Use NFS namespace if available
-CONFIG_NCPFS_NFS_NS
- Allows you to utilize NFS namespace on NetWare servers. It brings
- you case sensitive filenames. Say Y. You can disable it at
- mount-time with the `-N nfs' parameter of ncpmount.
-
-Use LONG (OS/2) namespace if available
-CONFIG_NCPFS_OS2_NS
- Allows you to utilize OS2/LONG namespace on NetWare servers.
- Filenames in this namespace are limited to 255 characters, they are
- case insensitive, and case in names is preserved. Say Y. You can
- disable it at mount time with the -N os2 parameter of ncpmount.
-
-Lowercase DOS filenames on LONG namespace volume
-CONFIG_NCPFS_SMALLDOS
- If you say Y here, every filename on a NetWare server volume using
- the OS2/LONG namespace and created under DOS or on a volume using
- DOS namespace will be converted to lowercase characters.
- Saying N here will give you these filenames in uppercase.
-
- This is only a cosmetic option since the OS2/LONG namespace is case
- insensitive. The only major reason for this option is backward
- compatibility when moving from DOS to OS2/LONG namespace support.
- Long filenames (created by Win95) will not be affected.
-
- This option does not solve the problem that filenames appear
- differently under Linux and under Windows, since Windows does an
- additional conversions on the client side. You can achieve similar
- effects by saying Y to "Allow using of Native Language Support"
- below.
-
-Use Native Language Support
-CONFIG_NCPFS_NLS
- Allows you to use codepages and I/O charsets for file name
- translation between the server file system and input/output. This
- may be useful, if you want to access the server with other operating
- systems, e.g. Windows 95. See also NLS for more Information.
-
- To select codepages and I/O charsets use ncpfs-2.2.0.13 or newer.
-
-Symbolic links and mode permission bits
-CONFIG_NCPFS_EXTRAS
- This enables the use of symbolic links and an execute permission
- bit on NCPFS. The file server need not have long name space or NFS
- name space loaded for these to work.
-
- To use the new attributes, it is recommended to use the flags
- '-f 600 -d 755' on the ncpmount command line.
-
-Default NLS Option
-CONFIG_NLS_DEFAULT
- The default NLS used when mounting file system. Note, that this is
- the NLS used by your console, not the NLS used by a specific file
- system (if different) to store data (filenames) on a disk.
- Currently, the valid values are:
- big5, cp437, cp737, cp775, cp850, cp852, cp855, cp857, cp860, cp861,
- cp862, cp863, cp864, cp865, cp866, cp869, cp874, cp932, cp936,
- cp949, cp950, cp1250, cp1251, cp1255, euc-jp, euc-kr, gb2312, iso8859-1,
- iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7,
- iso8859-8, iso8859-9, iso8859-13, iso8859-14, iso8859-15,
- koi8-r, koi8-ru, koi8-u, sjis, tis-620, utf8.
- If you specify a wrong value, it will use the built-in NLS;
- compatible with iso8859-1.
-
- If unsure, specify it as "iso8859-1".
-
-Codepage 437 (United States, Canada)
-CONFIG_NLS_CODEPAGE_437
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored
- in so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage that is used in
- the United States and parts of Canada. This is recommended.
-
-Codepage 737 (Greek)
-CONFIG_NLS_CODEPAGE_737
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored
- in so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage that is used for
- Greek. If unsure, say N.
-
-Codepage 775 (Baltic Rim)
-CONFIG_NLS_CODEPAGE_775
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored
- in so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage that is used
- for the Baltic Rim Languages (Latvian and Lithuanian). If unsure,
- say N.
-
-Codepage 850 (Europe)
-CONFIG_NLS_CODEPAGE_850
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage that is used for
- much of Europe -- United Kingdom, Germany, Spain, Italy, and [add
- more countries here]. It has some characters useful to many European
- languages that are not part of the US codepage 437.
-
- If unsure, say Y.
-
-Codepage 852 (Central/Eastern Europe)
-CONFIG_NLS_CODEPAGE_852
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the Latin 2 codepage used by DOS
- for much of Central and Eastern Europe. It has all the required
- characters for these languages: Albanian, Croatian, Czech, English,
- Finnish, Hungarian, Irish, German, Polish, Rumanian, Serbian (Latin
- transcription), Slovak, Slovenian, and Serbian.
-
-Codepage 855 (Cyrillic)
-CONFIG_NLS_CODEPAGE_855
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Cyrillic.
-
-Codepage 857 (Turkish)
-CONFIG_NLS_CODEPAGE_857
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Turkish.
-
-Codepage 860 (Portuguese)
-CONFIG_NLS_CODEPAGE_860
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Portuguese.
-
-Codepage 861 (Icelandic)
-CONFIG_NLS_CODEPAGE_861
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Icelandic.
-
-Codepage 862 (Hebrew)
-CONFIG_NLS_CODEPAGE_862
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Hebrew.
-
-Codepage 863 (Canadian French)
-CONFIG_NLS_CODEPAGE_863
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Canadian
- French.
-
-Codepage 864 (Arabic)
-CONFIG_NLS_CODEPAGE_864
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Arabic.
-
-Codepage 865 (Norwegian, Danish)
-CONFIG_NLS_CODEPAGE_865
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for the Nordic
- European countries.
-
-Codepage 866 (Cyrillic/Russian)
-CONFIG_NLS_CODEPAGE_866
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for
- Cyrillic/Russian.
-
-Codepage 869 (Greek)
-CONFIG_NLS_CODEPAGE_869
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Greek.
-
-Thai charset (CP874, TIS-620)
-CONFIG_NLS_CODEPAGE_874
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Thai.
-
-Windows CP1251 (Bulgarian, Belarusian)
-CONFIG_NLS_CODEPAGE_1251
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Russian and
- Bulgarian and Belarusian.
-
-Japanese charsets (Shift-JIS, EUC-JP)
-CONFIG_NLS_CODEPAGE_932
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Shift-JIS
- or EUC-JP. To use EUC-JP, you can use 'euc-jp' as mount option or
- NLS Default value during kernel configuration, instead of 'cp932'.
-
-Simplified Chinese charset (CP936, GB2312)
-CONFIG_NLS_CODEPAGE_936
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Simplified
- Chinese(GBK).
-
-Korean charset (CP949, EUC-KR)
-CONFIG_NLS_CODEPAGE_949
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for UHC.
-
-Traditional Chinese charset (Big5)
-CONFIG_NLS_CODEPAGE_950
- The Microsoft FAT file system family can deal with filenames in
- native language character sets. These character sets are stored in
- so-called DOS codepages. You need to include the appropriate
- codepage if you want to be able to read/write these filenames on
- DOS/Windows partitions correctly. This does apply to the filenames
- only, not to the file contents. You can include several codepages;
- say Y here if you want to include the DOS codepage for Traditional
- Chinese(Big5).
-
-Central European (Codepage 1250)
-CONFIG_NLS_CODEPAGE_1250
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CDROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Windows CP-1250
- character set, which works for most Latin-written Slavic and Central
- European languages: Czech, German, Hungarian, Polish, Rumanian, Croatian,
- Slovak, Slovene.
-
-NLS ISO 8859-1 (Latin 1; Western European Languages)
-CONFIG_NLS_ISO8859_1
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 1 character
- set, which covers most West European languages such as Albanian,
- Catalan, Danish, Dutch, English, Faeroese, Finnish, French, German,
- Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish,
- and Swedish. It is also the default for the US. If unsure, say Y.
-
-NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages)
-CONFIG_NLS_ISO8859_2
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 2 character
- set, which works for most Latin-written Slavic and Central European
- languages: Czech, German, Hungarian, Polish, Rumanian, Croatian,
- Slovak, Slovene.
-
-NLS ISO 8859-3 (Latin 3; Esperanto, Galician, Maltese, Turkish)
-CONFIG_NLS_ISO8859_3
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 3 character
- set, which is popular with authors of Esperanto, Galician, Maltese,
- and Turkish.
-
-NLS ISO 8859-4 (Latin 4; old Baltic charset)
-CONFIG_NLS_ISO8859_4
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 4 character
- set which introduces letters for Estonian, Latvian, and
- Lithuanian. It is an incomplete predecessor of Latin 7.
-
-NLS ISO 8859-5 (Cyrillic)
-CONFIG_NLS_ISO8859_5
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for ISO8859-5, a Cyrillic
- character set with which you can type Bulgarian, Belarusian,
- Macedonian, Russian, Serbian, and Ukrainian. Note that the charset
- KOI8-R is preferred in Russia.
-
-NLS ISO 8859-6 (Arabic)
-CONFIG_NLS_ISO8859_6
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for ISO8859-6, the Arabic
- character set.
-
-NLS ISO 8859-7 (Modern Greek)
-CONFIG_NLS_ISO8859_7
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for ISO8859-7, the Modern
- Greek character set.
-
-Hebrew charsets (ISO-8859-8, CP1255)
-CONFIG_NLS_ISO8859_8
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for ISO8859-8, the Hebrew
- character set.
-
-NLS ISO 8859-9 (Latin 5; Turkish)
-CONFIG_NLS_ISO8859_9
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 5 character
- set, and it replaces the rarely needed Icelandic letters in Latin 1
- with the Turkish ones. Useful in Turkey.
-
-NLS ISO 8859-10 (Latin 6; Nordic)
-CONFIG_NLS_ISO8859_10
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 6 character
- set, which adds the last Inuit (Greenlandic) and Sami (Lappish)
- letters that were missing in Latin 4 to cover the entire Nordic
- area.
-
-NLS ISO 8859-13 (Latin 7; Baltic)
-CONFIG_NLS_ISO8859_13
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 7 character
- set, which supports modern Baltic languages including Latvian
- and Lithuanian.
-
-NLS ISO 8859-14 (Latin 8; Celtic)
-CONFIG_NLS_ISO8859_14
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 8 character
- set, which adds the last accented vowels for Welsh (aka Cymraeg)
- (and Manx Gaelic) that were missing in Latin 1.
- <http://linux.speech.cymru.org/> has further information.
-
-NLS ISO 8859-15 (Latin 9; Western European languages with Euro)
-CONFIG_NLS_ISO8859_15
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the Latin 9 character
- set, which covers most West European languages such as Albanian,
- Catalan, Danish, Dutch, English, Estonian, Faeroese, Finnish,
- French, German, Galician, Irish, Icelandic, Italian, Norwegian,
- Portuguese, Spanish, and Swedish. Latin 9 is an update to
- Latin 1 (ISO 8859-1) that removes a handful of rarely used
- characters and instead adds support for Estonian, corrects the
- support for French and Finnish, and adds the new Euro character.
- If unsure, say Y.
-
-NLS KOI8-R (Russian)
-CONFIG_NLS_KOI8_R
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the preferred Russian
- character set.
-
-NLS KOI8-U/RU (Ukrainian, Belarusian)
-CONFIG_NLS_KOI8_U
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the preferred Ukrainian
- (koi8-u) and Belarusian (koi8-ru) character sets.
-
-NLS UTF8
-CONFIG_NLS_UTF8
- If you want to display filenames with native language characters
- from the Microsoft FAT file system family or from JOLIET CD-ROMs
- correctly on the screen, you need to include the appropriate
- input/output character sets. Say Y here for the UTF-8 encoding of
- the Unicode/ISO9646 universal character set.
-
-Virtual terminal
-CONFIG_VT
- If you say Y here, you will get support for terminal devices with
- display and keyboard devices. These are called "virtual" because you
- can run several virtual terminals (also called virtual consoles) on
- one physical terminal. This is rather useful, for example one
- virtual terminal can collect system messages and warnings, another
- one can be used for a text-mode user session, and a third could run
- an X session, all in parallel. Switching between virtual terminals
- is done with certain key combinations, usually Alt-<function key>.
-
- The setterm command ("man setterm") can be used to change the
- properties (such as colors or beeping) of a virtual terminal. The
- man page console_codes(4) ("man console_codes") contains the special
- character sequences that can be used to change those properties
- directly. The fonts used on virtual terminals can be changed with
- the setfont ("man setfont") command and the key bindings are defined
- with the loadkeys ("man loadkeys") command.
-
- You need at least one virtual terminal device in order to make use
- of your keyboard and monitor. Therefore, only people configuring an
- embedded system would want to say N here in order to save some
- memory; the only way to log into such a system is then via a serial
- or network connection.
-
- If unsure, say Y, or else you won't be able to do much with your new
- shiny Linux system :-)
-
-Support for console on virtual terminal
-CONFIG_VT_CONSOLE
- The system console is the device which receives all kernel messages
- and warnings and which allows logins in single user mode. If you
- answer Y here, a virtual terminal (the device used to interact with
- a physical terminal) can be used as system console. This is the most
- common mode of operations, so you should say Y here unless you want
- the kernel messages be output only to a serial port (in which case
- you should say Y to "Console on serial port", below).
-
- If you do say Y here, by default the currently visible virtual
- terminal (/dev/tty0) will be used as system console. You can change
- that with a kernel command line option such as "console=tty3" which
- would use the third virtual terminal as system console. (Try "man
- bootparam" or see the documentation of your boot loader (lilo or
- loadlin) about how to pass options to the kernel at boot time.)
-
- If unsure, say Y.
-
-STI console
-CONFIG_STI_CONSOLE
- The STI console is the builtin display/keyboard on HP-PARISC
- machines. Say Y here to build support for it into your kernel.
- The alternative is to use your primary serial port as a console.
-
-Use MDIO for PHY configuration
-CONFIG_USE_MDIO
- On some boards the hardware configuration of the ethernet PHY can be
- used without any software interaction over the MDIO interface, so
- all MII code can be omitted. Say N here if unsure or if you don't
- need link status reports.
-
-860T FEC Ethernet
-CONFIG_FEC_ENET
- Enable Ethernet support via the Fast Ethernet Controller (FCC) on
- the Motorola MPC8260.
-
-Ethernet on FCC1
-CONFIG_FCC1_ENET
- Use MPC8260 fast Ethernet controller 1 to drive Ethernet (default).
-
-Ethernet on FCC2
-CONFIG_FCC2_ENET
- Use MPC8260 fast Ethernet controller 2 to drive Ethernet.
-
-Ethernet on FCC3
-CONFIG_FCC3_ENET
- Use MPC8260 fast Ethernet controller 3 to drive Ethernet.
-
-CPM SCC Ethernet
-CONFIG_SCC_ENET
- Enable Ethernet support via the Motorola MPC8xx serial
- communications controller.
-
-# Choice: scc_ethernet
-Ethernet on SCC1
-CONFIG_SCC1_ENET
- Use MPC8xx serial communications controller 1 to drive Ethernet
- (default).
-
-Ethernet on SCC2
-CONFIG_SCC2_ENET
- Use MPC8xx serial communications controller 2 to drive Ethernet.
-
-Ethernet on SCC3
-CONFIG_SCC3_ENET
- Use MPC8xx serial communications controller 3 to drive Ethernet.
-
-Use Big CPM Ethernet Buffers
-CONFIG_ENET_BIG_BUFFERS
- Allocate large buffers for MPC8xx Ethernet. Increases throughput
- and decreases the likelihood of dropped packets, but costs memory.
-
-Apple Desktop Bus (ADB) support
-CONFIG_ADB
- Apple Desktop Bus (ADB) support is for support of devices which
- are connected to an ADB port. ADB devices tend to have 4 pins.
- If you have an Apple Macintosh prior to the iMac, or a
- "Blue and White G3", you probably want to say Y here. Otherwise
- say N.
-
-Support for CUDA based PowerMacs
-CONFIG_ADB_CUDA
- This provides support for CUDA based Power Macintosh systems. This
- includes most OldWorld PowerMacs, the first generation iMacs, the
- Blue&White G3 and the Yikes G4 (PCI Graphics). All later models
- should use CONFIG_ADB_PMU instead.
-
- If unsure say Y.
-
-Support for PMU-based PowerMacs
-CONFIG_ADB_PMU
- This provides support for PMU based Power Macintosh systems. This
- includes all PowerBooks and all AGP-based machines.
-
- If unsure say Y.
-
-Include MacIO ADB driver
-CONFIG_ADB_MACIO
- Say Y here to include direct support for the ADB controller in the
- Hydra chip used on PowerPC Macintoshes of the CHRP type. (The Hydra
- also includes a MESH II SCSI controller, DBDMA controller, VIA chip,
- OpenPIC controller and two RS422/Geoports.)
-
-Support for ADB keyboard (old driver)
-CONFIG_ADB_KEYBOARD
- This option allows you to use an ADB keyboard attached to your
- machine. Note that this disables any other (ie. PS/2) keyboard
- support, even if your machine is physically capable of using both at
- the same time.
-
- If you use an ADB keyboard (4 pin connector), say Y here.
- If you use a PS/2 keyboard (6 pin connector), say N here.
-
-HIL keyboard support
-CONFIG_HIL
- The "Human Interface Loop" is a older, 8-channel USB-like controller
- used in Hewlett Packard PA-RISC based machines. There are a few
- cases where it is seen on PC/MAC architectures as well, usually also
- manufactured by HP. This driver is based off MACH and BSD drivers,
- and implements support for a keyboard attached to the HIL port.
- Full support for the USB-like functions and non-keyboard channels of
- the HIL is not provided for in this driver. There are vestiges of
- mouse support in the driver, but it is probably not working. The
- necessary hardware documentation to fully support the HIL controller
- and interface it to the linux-input API is lacking.
-
- Enable this option if you intend to use a HIL keyboard.
-
-HP System Device Controller support
-CONFIG_HP_SDC
- This option enables supports for the the "System Device Controller",
- an i8042 carrying microcode to manage a few miscellanous devices
- on some Hewlett Packard systems. The SDC itself contains a 10ms
- resolution timer/clock capable of delivering interrupts on periodic
- and one-shot basis. The SDC may also be connected to a battery-backed
- real-time clock, a basic audio waveform generator, and an HP-HIL
- Master Link Controller serving up to seven input devices.
-
- By itself this option is rather useless, but enabling it will
- enable selection of drivers for the abovementioned devices.
- It is, however, incompatible with the old, reliable HIL keyboard
- driver, and the new HIL driver is experimental, so if you plan to
- use a HIL keyboard as your primary keyboard, you may wish to
- keep using that driver until the new HIL drivers have had more
- testing.
-
-Include IOP (IIfx/Quadra 9x0) ADB driver
-CONFIG_ADB_IOP
- The I/O Processor (IOP) is an Apple custom IC designed to provide
- intelligent support for I/O controllers. It is described at
- <http://www.angelfire.com/ca2/dev68k/iopdesc.html> to enable direct
- support for it, say 'Y' here.
-
-Mac II style Apple Desktop Bus support
-CONFIG_ADB_MACII
- Say Y here if want your kernel to support Macintosh systems that use
- the Mac II style ADB. This includes the II, IIx, IIcx, SE/30, IIci,
- Quadra 610, Quadra 650, Quadra 700, Quadra 800, Centris 610 and
- Centris 650.
-
-Mac IIsi style Apple Desktop Bus support
-CONFIG_ADB_MACIISI
- Say Y here if want your kernel to support Macintosh systems that use
- the Mac IIsi style ADB. This includes the IIsi, IIvi, IIvx, Classic
- II, LC, LC II, LC III, Performa 460, and the Performa 600.
-
-Apple 68K PowerBook Power Management and Desktop Bus support
-CONFIG_ADB_PMU68K
- Say Y here if want your kernel to support the m68k based Powerbooks.
- This includes the PowerBook 140, PowerBook 145, PowerBook 150,
- PowerBook 160, PowerBook 165, PowerBook 165c, PowerBook 170,
- PowerBook 180, PowerBook, 180c, PowerBook 190cs, PowerBook 520,
- PowerBook Duo 210, PowerBook Duo 230, PowerBook Duo 250,
- PowerBook Duo 270c, PowerBook Duo 280 and PowerBook Duo 280c.
-
-Macintosh IIfx/Quadra 900/Quadra 950 floppy support
-CONFIG_BLK_DEV_SWIM_IOP
- Say Y here to support the SWIM (Super Woz Integrated Machine) IOP
- floppy controller on the Macintosh IIfx and Quadra 900/950.
-
-Macintosh NS8390 based Ethernet support
-CONFIG_MAC8390
- If you want to include a driver to support Nubus or LC-PDS
- Ethernet cards using an NS8390 chipset or its equivalent, say Y
- and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Macintosh CS89x0 based Ethernet support
-CONFIG_MAC89x0
- Support for CS89x0 chipset based Ethernet cards. If you have a
- Nubus or LC-PDS network (Ethernet) card of this type, say Y and
- read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. This module will
- be called mac89x0.o.
-
-Macintosh onboard AMD 79C940 MACE based Ethernet support
-CONFIG_MACMACE
- Support for the onboard AMD 79C940 MACE Ethernet controller used in
- the 660AV and 840AV Macintosh. If you have one of these Macintoshes
- say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Macintosh SONIC based Ethernet support (onboard, NuBus, LC, CS)
-CONFIG_MACSONIC
- Support for NatSemi SONIC based Ethernet devices. This includes
- the onboard Ethernet in many Quadras as well as some LC-PDS,
- a few Nubus and all known Comm Slot Ethernet cards. If you have
- one of these say Y and read the Ethernet-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt> as well as
- <file:Documentation/networking/net-modules.txt>. This module will
- be called macsonic.o.
-
-Macintosh NCR5380 SCSI support
-CONFIG_MAC_SCSI
- This is the NCR 5380 SCSI controller included on most of the 68030
- based Macintoshes. If you have one of these say Y and read the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-Macintosh NCR53c9[46] SCSI support
-CONFIG_SCSI_MAC_ESP
- This is the NCR 53c9x SCSI controller found on most of the 68040
- based Macintoshes. If you have one of these say Y and read the
- SCSI-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mac_esp.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Standard/generic (8250/16550 and compatible UARTs) serial support
-CONFIG_SERIAL
- This selects whether you want to include the driver for the standard
- serial ports. The standard answer is Y. People who might say N
- here are those that are setting up dedicated Ethernet WWW/FTP
- servers, or users that have one of the various bus mice instead of a
- serial mouse and don't intend to use their machine's standard serial
- port for anything. (Note that the Cyclades and Stallion multi
- serial port drivers do not need this driver built in for them to
- work.)
-
- If you want to compile this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- serial.o.
- [WARNING: Do not compile this driver as a module if you are using
- non-standard serial ports, since the configuration information will
- be lost when the driver is unloaded. This limitation may be lifted
- in the future.]
-
- BTW1: If you have a mouseman serial mouse which is not recognized by
- the X window system, try running gpm first.
-
- BTW2: If you intend to use a software modem (also called Winmodem)
- under Linux, forget it. These modems are crippled and require
- proprietary drivers which are only available under Windows.
-
- Most people will say Y or M here, so that they can use serial mice,
- modems and similar devices connecting to the standard serial ports.
-
-Support for console on serial port
-CONFIG_SERIAL_CONSOLE
- If you say Y here, it will be possible to use a serial port as the
- system console (the system console is the device which receives all
- kernel messages and warnings and which allows logins in single user
- mode). This could be useful if some terminal or printer is connected
- to that serial port.
-
- Even if you say Y here, the currently visible virtual console
- (/dev/tty0) will still be used as the system console by default, but
- you can alter that using a kernel command line option such as
- "console=ttyS1". (Try "man bootparam" or see the documentation of
- your boot loader (lilo or loadlin) about how to pass options to the
- kernel at boot time.)
-
- If you don't have a VGA card installed and you say Y here, the
- kernel will automatically use the first serial line, /dev/ttyS0, as
- system console.
-
- If unsure, say N.
-
-Support for serial port described by EFI HCDP table
-CONFIG_SERIAL_HCDP
- If you wish to make the serial console port described by the EFI
- HCDP table available for use as serial console or general
- purpose port, say Y here. See
- <http://www.dig64.org/specifications/DIG64_HCDPv10a_01.pdf>.
-
-Support for PowerMac serial ports
-CONFIG_MAC_SERIAL
- If you have Macintosh style serial ports (8 pin mini-DIN), say Y
- here. If you also have regular serial ports and enable the driver
- for them, you can't currently use the serial console feature.
-
-Comtrol Rocketport support
-CONFIG_ROCKETPORT
- This is a driver for the Comtrol Rocketport cards which provide
- multiple serial ports. You would need something like this to connect
- more than two modems to your Linux box, for instance in order to
- become a dial-in server.
-
- If you want to compile this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- rocket.o.
-
-Digiboard Intelligent async support
-CONFIG_DIGIEPCA
- This is a driver for Digi International's Xx, Xeve, and Xem series
- of cards which provide multiple serial ports. You would need
- something like this to connect more than two modems to your Linux
- box, for instance in order to become a dial-in server. This driver
- supports the original PC (ISA) boards as well as PCI, and EISA. If
- you have a card like this, say Y here and read the file
- <file:Documentation/digiepca.txt>.
-
- NOTE: There is another, separate driver for the Digiboard PC boards:
- "Digiboard PC/Xx Support" below. You should (and can) only select
- one of the two drivers.
-
- If you want to compile this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called epca.o.
-
-Digiboard PC/Xx Support
-CONFIG_DIGI
- This is a driver for the Digiboard PC/Xe, PC/Xi, and PC/Xeve cards
- that give you many serial ports. You would need something like this
- to connect more than two modems to your Linux box, for instance in
- order to become a dial-in server. If you have a card like that, say
- Y here and read the file <file:Documentation/digiboard.txt>.
-
- If you want to compile this driver as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called pcxx.o.
-
-SDL RISCom/8 card support
-CONFIG_RISCOM8
- This is a driver for the SDL Communications RISCom/8 multiport card,
- which gives you many serial ports. You would need something like
- this to connect more than two modems to your Linux box, for instance
- in order to become a dial-in server. If you have a card like that,
- say Y here and read the file <file:Documentation/riscom8.txt>.
-
- Also it's possible to say M here and compile this driver as kernel
- loadable module; the module will be called riscom8.o.
-
-Computone IntelliPort Plus serial support
-CONFIG_COMPUTONE
- This driver supports the entire family of Intelliport II/Plus
- controllers with the exception of the MicroChannel controllers and
- products previous to the Intelliport II. These are multiport cards,
- which give you many serial ports. You would need something like this
- to connect more than two modems to your Linux box, for instance in
- order to become a dial-in server. If you have a card like that, say
- Y here and read <file:Documentation/computone.txt>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. You will get
- two modules called ip2.o and ip2main.o.
-
-Specialix IO8+ card support
-CONFIG_SPECIALIX
- This is a driver for the Specialix IO8+ multiport card (both the
- ISA and the PCI version) which gives you many serial ports. You
- would need something like this to connect more than two modems to
- your Linux box, for instance in order to become a dial-in server.
-
- If you have a card like that, say Y here and read the file
- <file:Documentation/specialix.txt>. Also it's possible to say M here
- and compile this driver as kernel loadable module which will be
- called specialix.o.
-
-Specialix DTR/RTS pin is RTS
-CONFIG_SPECIALIX_RTSCTS
- The Specialix IO8+ card can only support either RTS or DTR. If you
- say N here, the driver will use the pin as "DTR" when the tty is in
- software handshake mode. If you say Y here or hardware handshake is
- on, it will always be RTS. Read the file
- <file:Documentation/specialix.txt> for more information.
-
-Specialix RIO system support
-CONFIG_RIO
- This is a driver for the Specialix RIO, a smart serial card which
- drives an outboard box that can support up to 128 ports. Product
- information is at <http://www.sphinxcst.co.uk/perle/multi.htm>.
- There are both ISA and PCI versions.
-
-Support really old RIO/PCI cards
-CONFIG_RIO_OLDPCI
- Older RIO PCI cards need some initialization-time configuration to
- determine the IRQ and some control addresses. If you have a RIO and
- this doesn't seem to work, try setting this to Y.
-
-Cyclades async mux support
-CONFIG_CYCLADES
- This is a driver for a card that gives you many serial ports. You
- would need something like this to connect more than two modems to
- your Linux box, for instance in order to become a dial-in server.
- For information about the Cyclades-Z card, read
- <file:drivers/char/README.cycladesZ>.
-
- As of 1.3.9x kernels, this driver's minor numbers start at 0 instead
- of 32.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called cyclades.o.
-
- If you haven't heard about it, it's safe to say N.
-
-Cyclades-Z interrupt mode operation
-CONFIG_CYZ_INTR
- The Cyclades-Z family of multiport cards allows 2 (two) driver op
- modes: polling and interrupt. In polling mode, the driver will check
- the status of the Cyclades-Z ports every certain amount of time
- (which is called polling cycle and is configurable). In interrupt
- mode, it will use an interrupt line (IRQ) in order to check the
- status of the Cyclades-Z ports. The default op mode is polling. If
- unsure, say N.
-
-Stallion multiport serial support
-CONFIG_STALDRV
- Stallion cards give you many serial ports. You would need something
- like this to connect more than two modems to your Linux box, for
- instance in order to become a dial-in server. If you say Y here,
- you will be asked for your specific card model in the next
- questions. Make sure to read <file:Documentation/stallion.txt> in
- this case. If you have never heard about all this, it's safe to
- say N.
-
-Stallion EasyIO or EC8/32 support
-CONFIG_STALLION
- If you have an EasyIO or EasyConnection 8/32 multiport Stallion
- card, then this is for you; say Y. Make sure to read
- <file:Documentation/stallion.txt>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called stallion.o.
-
-Stallion EC8/64, ONboard, Brumby support
-CONFIG_ISTALLION
- If you have an EasyConnection 8/64, ONboard, Brumby or Stallion
- serial multiport card, say Y here. Make sure to read
- <file:Documentation/stallion.txt>.
-
- To compile it as a module ( = code which can be inserted in and
- removed from the running kernel whenever you want), say M here and
- read <file:Documentation/modules.txt>. The module will be called
- istallion.o.
-
-PDC software console support
-CONFIG_PDC_CONSOLE
- Saying Y here will enable the software based PDC console to be
- used as the system console. This is useful for machines in
- which the hardware based console has not been written yet. The
- following steps must be competed to use the PDC console:
-
- 1. create the device entry (mknod /dev/ttyB0 c 60 0)
- 2. Edit the /etc/inittab to start a getty listening on /dev/ttyB0
- 3. Add device ttyB0 to /etc/securetty (if you want to log on as
- root on this console.)
- 4. Change the kernel command console parameter to: console=ttyB0
-
-Microgate SyncLink adapter support
-CONFIG_SYNCLINK
- Provides support for the SyncLink ISA and PCI multiprotocol serial
- adapters. These adapters support asynchronous and HDLC bit
- synchronous communication up to 10Mbps (PCI adapter).
-
- This driver can only be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called synclink.o. If you want to do that, say M
- here.
-
-CONFIG_SYNCLINKMP
- Enable support for the SyncLink Multiport (2 or 4 ports)
- serial adapter, running asynchronous and HDLC communications up
- to 2.048Mbps. Each ports is independently selectable for
- RS-232, V.35, RS-449, RS-530, and X.21
-
- This driver may be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called synclinkmp.o. If you want to do that, say M
- here.
-
-Synchronous HDLC line discipline support
-CONFIG_N_HDLC
- Allows synchronous HDLC communications with tty device drivers that
- support synchronous HDLC such as the Microgate SyncLink adapter.
-
- This driver can only be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called n_hdlc.o. If you want to do that, say M
- here.
-
-Specialix SX (and SI) card support
-CONFIG_SX
- This is a driver for the SX and SI multiport serial cards.
- Please read the file <file:Documentation/sx.txt> for details.
-
- This driver can only be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sx.o. If you want to do that, say M here.
-
-Hayes ESP serial port support
-CONFIG_ESPSERIAL
- This is a driver which supports Hayes ESP serial ports. Both single
- port cards and multiport cards are supported. Make sure to read
- <file:Documentation/hayes-esp.txt>.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be
- called esp.o. If unsure, say N.
-
-Moxa Intellio support
-CONFIG_MOXA_INTELLIO
- Say Y here if you have a Moxa Intellio multiport serial card.
-
- This driver can also be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called moxa.o. If you want to do that, say M
- here.
-
-Moxa SmartIO support
-CONFIG_MOXA_SMARTIO
- Say Y here if you have a Moxa SmartIO multiport serial card.
-
- This driver can also be built as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called mxser.o. If you want to do that, say M
- here.
-
-Multi-Tech multiport card support
-CONFIG_ISI
- This is a driver for the Multi-Tech cards which provide several
- serial ports. The driver is experimental and can currently only be
- built as a module ( = code which can be inserted in and removed from
- the running kernel whenever you want). Please read
- <file:Documentation/modules.txt>. The module will be called
- isicom.o.
-
-Unix98 PTY support
-CONFIG_UNIX98_PTYS
- A pseudo terminal (PTY) is a software device consisting of two
- halves: a master and a slave. The slave device behaves identical to
- a physical terminal; the master device is used by a process to
- read data from and write data to the slave, thereby emulating a
- terminal. Typical programs for the master side are telnet servers
- and xterms.
-
- Linux has traditionally used the BSD-like names /dev/ptyxx for
- masters and /dev/ttyxx for slaves of pseudo terminals. This scheme
- has a number of problems. The GNU C library glibc 2.1 and later,
- however, supports the Unix98 naming standard: in order to acquire a
- pseudo terminal, a process opens /dev/ptmx; the number of the pseudo
- terminal is then made available to the process and the pseudo
- terminal slave can be accessed as /dev/pts/<number>. What was
- traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
-
- The entries in /dev/pts/ are created on the fly by a virtual
- file system; therefore, if you say Y here you should say Y to
- "/dev/pts file system for Unix98 PTYs" as well.
-
- If you want to say Y here, you need to have the C library glibc 2.1
- or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*").
- Read the instructions in <file:Documentation/Changes> pertaining to
- pseudo terminals. It's safe to say N.
-
-Maximum number of Unix98 PTYs in use (0-2048)
-CONFIG_UNIX98_PTY_COUNT
- The maximum number of Unix98 PTYs that can be used at any one time.
- The default is 256, and should be enough for desktop systems. Server
- machines which support incoming telnet/rlogin/ssh connections and/or
- serve several X terminals may want to increase this: every incoming
- connection and every xterm uses up one PTY.
-
- When not in use, each additional set of 256 PTYs occupy
- approximately 8 KB of kernel memory on 32-bit architectures.
-
-Parallel printer support
-CONFIG_PRINTER
- If you intend to attach a printer to the parallel port of your Linux
- box (as opposed to using a serial printer; if the connector at the
- printer has 9 or 25 holes ["female"], then it's serial), say Y.
- Also read the Printing-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- It is possible to share one parallel port among several devices
- (e.g. printer and ZIP drive) and it is safe to compile the
- corresponding drivers into the kernel. If you want to compile this
- driver as a module however ( = code which can be inserted in and
- removed from the running kernel whenever you want), say M here and
- read <file:Documentation/modules.txt> and
- <file:Documentation/parport.txt>. The module will be called lp.o.
-
- If you have several parallel ports, you can specify which ports to
- use with the "lp" kernel command line option. (Try "man bootparam"
- or see the documentation of your boot loader (lilo or loadlin) about
- how to pass options to the kernel at boot time.) The syntax of the
- "lp" command line option can be found in <file:drivers/char/lp.c>.
-
- If you have more than 8 printers, you need to increase the LP_NO
- macro in lp.c and the PARPORT_MAX macro in parport.h.
-
-Support for console on line printer
-CONFIG_LP_CONSOLE
- If you want kernel messages to be printed out as they occur, you
- can have a console on the printer. This option adds support for
- doing that; to actually get it to happen you need to pass the
- option "console=lp0" to the kernel at boot time.
-
- If the printer is out of paper (or off, or unplugged, or too
- busy..) the kernel will stall until the printer is ready again.
- By defining CONSOLE_LP_STRICT to 0 (at your own risk) you
- can make the kernel continue when this happens,
- but it'll lose the kernel messages.
-
- If unsure, say N.
-
-Support for user-space parallel port device drivers
-CONFIG_PPDEV
- Saying Y to this adds support for /dev/parport device nodes. This
- is needed for programs that want portable access to the parallel
- port, for instance deviceid (which displays Plug-and-Play device
- IDs).
-
- This is the parallel port equivalent of SCSI generic support (sg).
- It is safe to say N to this -- it is not needed for normal printing
- or parallel port CD-ROM/disk support.
-
- This support is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ppdev.o.
-
- If unsure, say N.
-
-Cobalt Networks support
-CONFIG_COBALT
- Support for Cobalt Networks x86-based servers.
-
-Gen III (3000 series) system support
-CONFIG_COBALT_GEN_III
- This option enables support for the 3000 series of Cobalt Networks
- systems. This includes the RaQ 3, RaQ 4, and Qube 3 product lines.
-
- This platform uses an AMD K6-2 processor, an ALI M1541/1533 chipset,
- an optional NCR 53c875 SCSI controller, and two Intel 82559ER or
- National Semiconductor DP83815 NICs.
-
- Getting this option wrong will likely result in a kernel that does
- not boot. Selecting support for more than 1 system series will add
- bloat to your kernel, but will not cause anything bad to happen.
-
- If you have a Cobalt Networks System, but aren't sure what kind,
- say Y here.
-
-Gen V (5000 series) system support
-CONFIG_COBALT_GEN_V
- This option enables support for the 5000 series of Cobalt Networks
- systems. This includes the RaQ XTR product line.
-
- This platform uses Intel Pentium III Coppermine FCPGA CPUs, the
- ServerWorks LE chipset (with registered ECC DIMMs only!), two
- HighPoint HPT370 IDE controllers, and two National Semiconductor
- DP83815 NICs.
-
- Getting this option wrong will likely result in a kernel that does
- not boot. Selecting support for more than 1 system series will add
- bloat to your kernel, but will not cause anything bad to happen.
-
- If you have a Cobalt Networks System, but aren't sure what kind,
- say Y here.
-
-Create legacy /proc files
-CONFIG_COBALT_OLDPROC
- This option forces some Cobalt Networks drivers to support legacy
- files in /proc. Older versions of these drivers exported files
- directly in /proc, as opposed to the newer /proc/cobalt. If you say
- N to this option, the old filenames will no longer be exported.
- Regardless of your selection here, files in /proc/cobalt will be
- exported. Of course, you have to include support for /proc fs, too.
-
- It is safe to say Y here.
-
-Front panel LCD support
-CONFIG_COBALT_LCD
- This enables support for the Cobalt Networks front panel. This is
- for the LCD panel and buttons. The primary method for connection is
- via the parallel port (IO base 0x370), but newer systems use an
- I2C bus.
-
- If you have a Cobalt Networks system, you should say Y here.
-
-Software controlled LED support
-CONFIG_COBALT_LED
- This enables support for the software-controlled LEDs on Cobalt
- Networks systems. This includes the fault light and front panel
- LEDs on the RaQ XTR, the lightbar on the Qube 3, and others.
-
- If you have a Cobalt Networks system, you should say Y here.
-
-Silicon serial number support
-CONFIG_COBALT_SERNUM
- This enables support for the on-board serial number on Cobalt
- Networks systems. This is a universally-unique 64-bit serial
- number. Some systems use a Dallas DS2401 chip, others have an I2C
- based EEPROM.
-
- If you select Y here, the files /proc/cobalt/hostid and
- /proc/cobalt/serialnumber will be created. The hostid file contains
- a 32 bit integer generated from the serial number, in binary form.
- The serialnumber file contains the hexadecimal representation of the
- serial number, in ASCII.
-
- If you have a Cobalt Networks system, you should say Y here.
-
-Chipset watchdog timer support
-CONFIG_COBALT_WDT
- This enables support for the watchdog timer built into Cobalt
- chipsets. The timer wakes up periodically, to make find out if
- system has hung, or disabled interrupts too long. The result of
- detecting a hang is a hard reboot.
-
- If you have a Cobalt Networks system, you should say Y here.
-
-Thermal sensor support
-CONFIG_COBALT_THERMAL
- This enables support for the thermal sensor(s) built into Cobalt
- Networks systems. This driver exports /proc/cobalt/thermal_sensors.
-
- If you have a Cobalt Networks system, you should say Y here.
-
-Fan tachometer support
-CONFIG_COBALT_FANS
- This enables support for the fan tachometers built into some Cobalt
- Networks systems. This driver exports /proc/cobalt/faninfo. Some
- Cobalt software depends on this feature, and enabling it does not
- cause any risks.
-
- If you have a Cobalt Networks system, you should say Y here, unless
- you are absolutely sure.
-
-Disk drive ruler support
-CONFIG_COBALT_RULER
- This enables support for the cobalt hard drive ruler, found on some
- Cobalt systems, including the RaQ XTR. This is the device that
- enables swapping of drives. It is not needed for basic disk
- operation. Enabling this on a system with no ruler will have no
- adverse effects.
-
- If you have a Cobalt Networks system, you should say Y here,
- unless you are absolutely sure.
-
-IT8172G Sound
-CONFIG_SOUND_IT8172
- Say Y here to support the on-board sound generator on the Integrated
- Technology Express, Inc. ITE8172 SBC. Vendor page at
- <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- board at <http://www.mvista.com/partners/semiconductor/ite.html>.
-
-I2C support
-CONFIG_I2C
- I2C (pronounce: I-square-C) is a slow serial bus protocol used in
- many micro controller applications and developed by Philips. SMBus,
- or System Management Bus is a subset of the I2C protocol. More
- information is contained in the directory <file:Documentation/i2c/>,
- especially in the file called "summary" there.
-
- Both I2C and SMBus are supported here. You will need this for
- hardware sensors support, and also for Video For Linux support.
- Specifically, if you want to use a BT848 based frame grabber/overlay
- boards under Linux, say Y here and also to "I2C bit-banging
- interfaces", below.
-
- If you want I2C support, you should say Y here and also to the
- specific driver for your bus adapter(s) below. If you say Y to
- "/proc file system" below, you will then get a /proc interface which
- is documented in <file:Documentation/i2c/proc-interface>.
-
- This I2C support is also available as a module. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-core.o.
-
-UltraSPARC-III bootbus i2c controller driver
-CONFIG_BBC_I2C
- The BBC devices on the UltraSPARC III have two I2C controllers. The
- first I2C controller connects mainly to configuration PROMs (NVRAM,
- CPU configuration, DIMM types, etc.). The second I2C controller
- connects to environmental control devices such as fans and
- temperature sensors. The second controller also connects to the
- smartcard reader, if present. Say Y to enable support for these.
-
-I2C bit-banging interfaces
-CONFIG_I2C_ALGOBIT
- This allows you to use a range of I2C adapters called bit-banging
- adapters. Say Y if you own an I2C adapter belonging to this class
- and then say Y to the specific driver for you adapter below.
-
- This support is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-algo-bit.o.
-
-Philips style parallel port adapter
-CONFIG_I2C_PHILIPSPAR
- This supports parallel-port I2C adapters made by Philips. Say Y if
- you own such an adapter.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-philips-par.o.
-
- Note that if you want support for different parallel port devices,
- life will be much easier if you compile them all as modules.
-
-ELV adapter
-CONFIG_I2C_ELV
- This supports parallel-port I2C adapters called ELV. Say Y if you
- own such an adapter.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-elv.o.
-
-Velleman K8000 adapter
-CONFIG_I2C_VELLEMAN
- This supports the Velleman K8000 parallel-port I2C adapter. Say Y
- if you own such an adapter.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-velleman.o.
-
-I2C PCF 8584 interfaces
-CONFIG_I2C_ALGOPCF
- This allows you to use a range of I2C adapters called PCF adapters.
- Say Y if you own an I2C adapter belonging to this class and then say
- Y to the specific driver for you adapter below.
-
- This support is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-algo-pcf.o.
-
-Elektor ISA card
-CONFIG_I2C_ELEKTOR
- This supports the PCF8584 ISA bus I2C adapter. Say Y if you own
- such an adapter.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-elektor.o.
-
-ITE I2C Algorithm
-CONFIG_ITE_I2C_ALGO
- This supports the use the ITE8172 I2C interface found on some MIPS
- systems. Say Y if you have one of these. You should also say Y for
- the ITE I2C peripheral driver support below.
-
- This support is also available as a module. If you want to compile
- it as a modules, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-algo-ite.o.
-
-ITE I2C Adapter
-CONFIG_ITE_I2C_ADAP
- This supports the ITE8172 I2C peripheral found on some MIPS
- systems. Say Y if you have one of these. You should also say Y for
- the ITE I2C driver algorithm support above.
-
- This support is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-adap-ite.o.
-
-SiByte I2C Algorithm
-CONFIG_I2C_ALGO_SIBYTE
- Supports the SiByte SOC on-chip I2C interfaces (2 channels).
-
-MAX1617 Temperature Sensor
-CONFIG_I2C_MAX1617
- This builds a simple polling driver for the Maxim 1617 temperature
- sensor. Currently the device is only supported on a SiByte I2C
- adapter, and the driver prints status updates to the system log.
-
-SGI I2C Algorithm
-CONFIG_I2C_ALGO_SGI
- Supports the SGI interfaces like the ones found on SGI Indy VINO
- or SGI O2 MACE.
-
-I2C device interface
-CONFIG_I2C_CHARDEV
- Say Y here to use i2c-* device files, usually found in the /dev
- directory on your system. They make it possible to have user-space
- programs use the I2C bus. Information on how to do this is
- contained in the file <file:Documentation/i2c/dev-interface>.
-
- This code is also available as a module. If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called i2c-dev.o.
-
-I2C /proc interface (required for hardware sensors)
-CONFIG_I2C_PROC
- This provides support for i2c device entries in the /proc filesystem.
- The entries will be found in /proc/sys/dev/sensors.
-
- This code is also available as a module. If you want to compile
- it as a module, say M here and read <file:Documentation/modules.txt>.
- The module will be called i2c-proc.o.
-
-Powermac Keywest I2C interface
-CONFIG_I2C_KEYWEST
- This supports the use of the I2C interface in the combo-I/O
- chip on recent Apple machines. Say Y if you have such a machine.
-
- This driver is also available as a module. If you want to compile
- it as a module, say M here and read Documentation/modules.txt.
- The module will be called i2c-keywest.o.
-
-Bus Mouse Support
-CONFIG_BUSMOUSE
- Say Y here if your machine has a bus mouse as opposed to a serial
- mouse. Most people have a regular serial MouseSystem or
- Microsoft mouse (made by Logitech) that plugs into a COM port
- (rectangular with 9 or 25 pins). These people say N here.
-
- If you have a laptop, you either have to check the documentation or
- experiment a bit to find out whether the trackball is a serial mouse
- or not; it's best to say Y here for you.
-
- This is the generic bus mouse driver code. If you have a bus mouse,
- you will have to say Y here and also to the specific driver for your
- mouse below.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called busmouse.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Mouse Support (not serial and bus mice)
-CONFIG_MOUSE
- This is for machines with a mouse which is neither a serial nor a
- bus mouse. Examples are PS/2 mice (such as the track balls on some
- laptops) and some digitizer pads. Most people have a regular serial
- MouseSystem or Microsoft mouse (made by Logitech) that plugs into a
- COM port (rectangular with 9 or 25 pins). These people say N here.
- If you have something else, read the Busmouse-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. This HOWTO contains
- information about all non-serial mice, not just bus mice.
-
- If you have a laptop, you either have to check the documentation or
- experiment a bit to find out whether the trackball is a serial mouse
- or not; it's best to say Y here for you.
-
- 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 non-serial mice. If unsure, say Y.
-
-Logitech busmouse support
-CONFIG_LOGIBUSMOUSE
- Logitech mouse connected to a proprietary interface card. It's
- generally a round connector with 9 pins. Note that the newer mice
- made by Logitech don't use the Logitech protocol anymore; for those,
- you don't need this option. You want to read the Busmouse-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called busmouse.o. If you are unsure, say N and read the
- HOWTO nevertheless: it will tell you what you have.
-
-PS/2 mouse (aka "auxiliary device") support
-CONFIG_PSMOUSE
- The PS/2 mouse connects to a special mouse port that looks much like
- the keyboard port (small circular connector with 6 pins). This way,
- the mouse does not use any serial ports. This port can also be used
- for other input devices like light pens, tablets, keypads. Compaq,
- AST and IBM all use this as their mouse port on currently shipping
- machines. The trackballs of some laptops are PS/2 mice also. In
- particular, the C&T 82C710 mouse on TI Travelmates is a PS/2 mouse.
-
- Although PS/2 mice are not technically bus mice, they are explained
- in detail in the Busmouse-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- When using a PS/2 mouse, you can get problems if you want to use the
- mouse both on the Linux console and under X. Using the "-R" option
- of the Linux mouse managing program gpm (available from
- <ftp://gnu.systemy.it/pub/gpm/>) solves this problem, or you can get
- the "mconv2" utility from <ftp://ibiblio.org/pub/Linux/system/mouse/>.
-
-C&T 82C710 mouse port support (as on TI Travelmate)
-CONFIG_82C710_MOUSE
- This is a certain kind of PS/2 mouse used on the TI Travelmate. If
- you are unsure, try first to say N here and come back if the mouse
- doesn't work. Read the Busmouse-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
-PC110 digitizer pad support
-CONFIG_PC110_PAD
- This drives the digitizer pad on the IBM PC110 palmtop. It can turn
- the digitizer pad into a PS/2 mouse emulation with tap gestures or
- into an absolute pad.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called pc110pad.o.
-
-Microsoft busmouse support
-CONFIG_MS_BUSMOUSE
- These animals (also called Inport mice) are connected to an
- expansion board using a round connector with 9 pins. If this is what
- you have, say Y and read the Busmouse-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you are unsure, say N and read the HOWTO nevertheless: it will
- tell you what you have. Also be aware that several vendors talk
- about 'Microsoft busmouse' and actually mean PS/2 busmouse -- so
- count the pins on the connector.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called msbusmouse.o.
-
-Apple Desktop Bus mouse support
-CONFIG_ADBMOUSE
- Say Y here if you have this type of bus mouse (4 pin connector) as
- is common on Macintoshes. You may want to read the Busmouse-HOWTO,
- available from <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called adbmouse.o.
-
-ATIXL busmouse support
-CONFIG_ATIXL_BUSMOUSE
- This is a rare type of busmouse that is connected to the back of an
- ATI video card. Say Y if you have one of those. Note however that
- most mice by ATI are actually Microsoft busmice; you should say Y to
- "Microsoft busmouse support" above if you have one of those. Read
- the Busmouse-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called atixlmouse.o.
-
- If you are unsure, say N and read the HOWTO nevertheless: it will
- tell you what you have.
-
-QIC-02 tape support
-CONFIG_QIC02_TAPE
- If you have a non-SCSI tape drive like that, say Y. Or, if you want
- to compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- tpqic02.o.
-
-iSeries Virtual Tape Support
-CONFIG_VIOTAPE
- If you are running Linux on an iSeries system and you want Linux
- to read and/or write a tape drive owned by OS/400, say Y here.
-
-Do you want runtime configuration for QIC-02
-CONFIG_QIC02_DYNCONF
- You can either configure this driver once and for all by editing a
- header file (<file:include/linux/tpqic02.h>), in which case you
- should say N, or you can fetch a program via anonymous FTP which is
- able to configure this driver during runtime. The program to do
- this is called 'qic02conf' and it is part of the
- tpqic02-support-X.Y.tar.gz support package.
-
- If you want to use the qic02conf program, say Y.
-
-Floppy tape drive (QIC-80/40/3010/3020/TR-1/TR-2/TR-3) support
-CONFIG_FTAPE
- If you have a tape drive that is connected to your floppy
- controller, say Y here.
-
- Some tape drives (like the Seagate "Tape Store 3200" or the Iomega
- "Ditto 3200" or the Exabyte "Eagle TR-3") come with a "high speed"
- controller of their own. These drives (and their companion
- controllers) are also supported if you say Y here.
-
- If you have a special controller (such as the CMS FC-10, FC-20,
- Mountain Mach-II, or any controller that is based on the Intel 82078
- FDC like the high speed controllers by Seagate and Exabyte and
- Iomega's "Ditto Dash") you must configure it by selecting the
- appropriate entries from the "Floppy tape controllers" sub-menu
- below and possibly modify the default values for the IRQ and DMA
- channel and the IO base in ftape's configuration menu.
-
- If you want to use your floppy tape drive on a PCI-bus based system,
- please read the file <file:drivers/char/ftape/README.PCI>.
-
- The ftape kernel driver is also available as a runtime loadable
- module ( = code which can be inserted in and removed from the
- running kernel whenever you want). If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. The
- module will be called ftape.o.
-
- Note that the Ftape-HOWTO is out of date (sorry) and documents the
- older version 2.08 of this software but still contains useful
- information. There is a web page with more recent documentation at
- <http://www.instmath.rwth-aachen.de/~heine/ftape/>. This page
- always contains the latest release of the ftape driver and useful
- information (backup software, ftape related patches and
- documentation, FAQ). Note that the file system interface has
- changed quite a bit compared to previous versions of ftape. Please
- read <file:Documentation/ftape.txt>.
-
-VFS interface for ftape
-CONFIG_ZFTAPE
- Normally, you want to say Y or M. DON'T say N here or you
- WON'T BE ABLE TO USE YOUR FLOPPY TAPE DRIVE.
-
- The ftape module itself no longer contains the routines necessary
- to interface with the kernel VFS layer (i.e. to actually write data
- to and read data from the tape drive). Instead the file system
- interface (i.e. the hardware independent part of the driver) has
- been moved to a separate module.
-
- If you say M zftape will be compiled as a runtime loadable
- module ( = code which can be inserted in and removed from the
- running kernel whenever you want). In this case you should read
- <file:Documentation/modules.txt>. The module will be called
- zftape.o.
-
- Regardless of whether you say Y or M here, an additional runtime
- loadable module called `zft-compressor.o' which contains code to
- support user transparent on-the-fly compression based on Ross
- William's lzrw3 algorithm will be produced. If you have enabled the
- kernel module loader (i.e. have said Y to "Kernel module loader
- support", above) then `zft-compressor.o' will be loaded
- automatically by zftape when needed.
-
- Despite its name, zftape does NOT use compression by default. The
- file <file:Documentation/ftape.txt> contains a short description of
- the most important changes in the file system interface compared to
- previous versions of ftape. The ftape home page
- <http://www.instmath.rwth-aachen.de/~heine/ftape/> contains
- further information.
-
- IMPORTANT NOTE: zftape can read archives created by previous
- versions of ftape and provide file mark support (i.e. fast skipping
- between tape archives) but previous version of ftape will lack file
- mark support when reading archives produced by zftape.
-
-Default block size for zftape
-CONFIG_ZFT_DFLT_BLK_SZ
- If unsure leave this at its default value, i.e. 10240. Note that
- you specify only the default block size here. The block size can be
- changed at run time using the MTSETBLK tape operation with the
- MTIOCTOP ioctl (i.e. with "mt -f /dev/qft0 setblk #BLKSZ" from the
- shell command line).
-
- The probably most striking difference between zftape and previous
- versions of ftape is the fact that all data must be written or read
- in multiples of a fixed block size. The block size defaults to
- 10240 which is what GNU tar uses. The values for the block size
- should be either 1 or multiples of 1024 up to a maximum value of
- 63488 (i.e. 62 K). If you specify `1' then zftape's builtin
- compression will be disabled.
-
- Reasonable values are `10240' (GNU tar's default block size),
- `5120' (afio's default block size), `32768' (default block size some
- backup programs assume for SCSI tape drives) or `1' (no restriction
- on block size, but disables builtin compression).
-
-Number of DMA buffers
-CONFIG_FT_NR_BUFFERS
- Please leave this at `3' unless you REALLY know what you are doing.
- It is not necessary to change this value. Values below 3 make the
- proper use of ftape impossible, values greater than 3 are a waste of
- memory. You can change the amount of DMA memory used by ftape at
- runtime with "mt -f /dev/qft0 setdrvbuffer #NUMBUFFERS". Each buffer
- wastes 32 KB of memory. Please note that this memory cannot be
- swapped out.
-
-Enable procfs status report (+2kb)
-CONFIG_FT_PROC_FS
- Optional. Saying Y will result in creation of a directory
- `/proc/ftape' under the /proc file system. The files can be viewed
- with your favorite pager (i.e. use "more /proc/ftape/history" or
- "less /proc/ftape/history" or simply "cat /proc/ftape/history"). The
- file will contain some status information about the inserted
- cartridge, the kernel driver, your tape drive, the floppy disk
- controller and the error history for the most recent use of the
- kernel driver. Saying Y will enlarge the size of the ftape driver
- by approximately 2 KB.
-
- WARNING: When compiling ftape as a module (i.e. saying M to "Floppy
- tape drive") it is dangerous to use ftape's /proc file system
- interface. Accessing `/proc/ftape' while the module is unloaded will
- result in a kernel Oops. This cannot be fixed from inside ftape.
-
-# Choice: ftdebug
-Controlling the amount of debugging output of ftape
-CONFIG_FT_NORMAL_DEBUG
- This option controls the amount of debugging output the ftape driver
- is ABLE to produce; it does not increase or diminish the debugging
- level itself. If unsure, leave this at its default setting,
- i.e. choose "Normal".
-
- Ftape can print lots of debugging messages to the system console
- resp. kernel log files. Reducing the amount of possible debugging
- output reduces the size of the kernel module by some KB, so it might
- be a good idea to use "None" for emergency boot floppies.
-
- If you want to save memory then the following strategy is
- recommended: leave this option at its default setting "Normal" until
- you know that the driver works as expected, afterwards reconfigure
- the kernel, this time specifying "Reduced" or "None" and recompile
- and install the kernel as usual. Note that choosing "Excessive"
- debugging output does not increase the amount of debugging output
- printed to the console but only makes it possible to produce
- "Excessive" debugging output.
-
- Please read <file:Documentation/ftape.txt> for a short description
- how to control the amount of debugging output.
-
-Excessive
-CONFIG_FT_FULL_DEBUG
- Extremely verbose output for driver debugging purposes.
-
-Reduced
-CONFIG_FT_NO_TRACE
- Reduced tape driver debugging output.
-
-None
-CONFIG_FT_NO_TRACE_AT_ALL
- Suppress all debugging output from the tape drive.
-
-# Choice: ftcontroller
-The floppy drive controller for ftape
-CONFIG_FT_STD_FDC
- Only change this setting if you have a special controller. If you
- didn't plug any add-on card into your computer system but just
- plugged the floppy tape cable into the already existing floppy drive
- controller then you don't want to change the default setting,
- i.e. choose "Standard".
-
- Choose "MACH-2" if you have a Mountain Mach-2 controller.
- Choose "FC-10/FC-20" if you have a Colorado FC-10 or FC-20
- controller.
- Choose "Alt/82078" if you have another controller that is located at
- an IO base address different from the standard floppy drive
- controller's base address of `0x3f0', or uses an IRQ (interrupt)
- channel different from `6', or a DMA channel different from
- `2'. This is necessary for any controller card that is based on
- Intel's 82078 FDC such as Seagate's, Exabyte's and Iomega's "high
- speed" controllers.
-
- If you choose something other than "Standard" then please make
- sure that the settings for the IO base address and the IRQ and DMA
- channel in the configuration menus below are correct. Use the manual
- of your tape drive to determine the correct settings!
-
- If you are already successfully using your tape drive with another
- operating system then you definitely should use the same settings
- for the IO base, the IRQ and DMA channel that have proven to work
- with that other OS.
-
- Note that this menu lets you specify only the default setting for
- the hardware setup. The hardware configuration can be changed at
- boot time (when ftape is compiled into the kernel, i.e. if you
- have said Y to "Floppy tape drive") or module load time (i.e. if you
- have said M to "Floppy tape drive").
-
- Please read also the file <file:Documentation/ftape.txt> which
- contains a short description of the parameters that can be set at
- boot or load time. If you want to use your floppy tape drive on a
- PCI-bus based system, please read the file
- <file:drivers/char/ftape/README.PCI>.
-
-IO base for the floppy disk controller used with Ftape
-CONFIG_FT_FDC_BASE
- You don't need to specify a value if the following default
- settings for the base IO address are correct:
- <<< MACH-2 : 0x1E0 >>>
- <<< FC-10/FC-20: 0x180 >>>
- <<< Secondary : 0x370 >>>
- Secondary refers to a secondary FDC controller like the "high speed"
- controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
- Please make sure that the setting for the IO base address
- specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
- CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
- successfully using the tape drive with another operating system then
- you definitely should use the same settings for the IO base that has
- proven to work with that other OS.
-
- Note that this menu lets you specify only the default setting for
- the IO base. The hardware configuration can be changed at boot time
- (when ftape is compiled into the kernel, i.e. if you specified Y to
- "Floppy tape drive") or module load time (i.e. if you have said M to
- "Floppy tape drive").
-
- Please read also the file <file:Documentation/ftape.txt> which
- contains a short description of the parameters that can be set at
- boot or load time.
-
-IRQ channel for the floppy disk controller used with Ftape
-CONFIG_FT_FDC_IRQ
- You don't need to specify a value if the following default
- settings for the interrupt channel are correct:
- <<< MACH-2 : 6 >>>
- <<< FC-10/FC-20: 9 >>>
- <<< Secondary : 6 >>>
- Secondary refers to secondary a FDC controller like the "high speed"
- controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
- Please make sure that the setting for the IO base address
- specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
- CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
- successfully using the tape drive with another operating system then
- you definitely should use the same settings for the IO base that has
- proven to work with that other OS.
-
- Note that this menu lets you specify only the default setting for
- the IRQ channel. The hardware configuration can be changed at boot
- time (when ftape is compiled into the kernel, i.e. if you said Y to
- "Floppy tape drive") or module load time (i.e. if you said M to
- "Floppy tape drive").
-
- Please read also the file <file:Documentation/ftape.txt> which
- contains a short description of the parameters that can be set at
- boot or load time.
-
-DMA channel for the floppy disk controller used with Ftape
-CONFIG_FT_FDC_DMA
- You don't need to specify a value if the following default
- settings for the DMA channel are correct:
- <<< MACH-2 : 2 >>>
- <<< FC-10/FC-20: 3 >>>
- <<< Secondary : 2 >>>
- Secondary refers to a secondary FDC controller like the "high speed"
- controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash.
- Please make sure that the setting for the IO base address
- specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR
- CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already
- successfully using the tape drive with another operating system then
- you definitely should use the same settings for the IO base that has
- proven to work with that other OS.
-
- Note that this menu lets you specify only the default setting for
- the DMA channel. The hardware configuration can be changed at boot
- time (when ftape is compiled into the kernel, i.e. if you said Y to
- "Floppy tape drive") or module load time (i.e. if you said M to
- "Floppy tape drive").
-
- Please read also the file <file:Documentation/ftape.txt> which
- contains a short description of the parameters that can be set at
- boot or load time.
-
-FDC FIFO Threshold before requesting DMA service
-CONFIG_FT_FDC_THR
- Set the FIFO threshold of the FDC. If this is higher the DMA
- controller may serve the FDC after a higher latency time. If this is
- lower, fewer DMA transfers occur leading to less bus contention.
- You may try to tune this if ftape annoys you with "reduced data
- rate because of excessive overrun errors" messages. However, this
- doesn't seem to have too much effect.
-
- If unsure, don't touch the initial value, i.e. leave it at "8".
-
-FDC maximum data rate
-CONFIG_FT_FDC_MAX_RATE
- With some motherboard/FDC combinations ftape will not be able to
- run your FDC/tape drive combination at the highest available
- speed. If this is the case you'll encounter "reduced data rate
- because of excessive overrun errors" messages and lots of retries
- before ftape finally decides to reduce the data rate.
-
- In this case it might be desirable to tell ftape beforehand that
- it need not try to run the tape drive at the highest available
- speed. If unsure, leave this disabled, i.e. leave it at 2000
- bits/sec.
-
-Direct Rendering Manager (XFree86 DRI support)
-CONFIG_DRM
- Kernel-level support for the Direct Rendering Infrastructure (DRI)
- introduced in XFree86 4.0. If you say Y here, you need to select
- the module that's right for your graphics card from the list below.
- These modules provide support for synchronization, security, and
- DMA transfers. Please see <http://dri.sourceforge.net/> for more
- details. You should also select and configure AGP
- (/dev/agpgart) support.
-
-Build drivers for new (XFree 4.1) DRM
-CONFIG_DRM_NEW
- If you set this option, the new DRM version needed by XFree86 4.1
- will be used. Otherwise, the old DRM version will be used,
- appropriate for XFree86 4.0.
-
-3dfx Banshee/Voodoo3+
-CONFIG_DRM_TDFX
- Choose this option if you have a 3dfx Banshee or Voodoo3 (or later),
- graphics card. If M is selected, the module will be called tdfx.o.
-
-3dlabs GMX 2000
-CONFIG_DRM_GAMMA
- Choose this option if you have a 3dlabs GMX 2000 graphics card.
- If M is selected, the module will be called gamma.o.
-
-ATI Rage 128
-CONFIG_DRM_R128
- Choose this option if you have an ATI Rage 128 graphics card. If M
- is selected, the module will be called r128.o. AGP support for
- this card is strongly suggested (unless you have a PCI version).
-
-ATI Radeon
-CONFIG_DRM_RADEON
- Choose this option if you have an ATI Radeon graphics card. There
- are both PCI and AGP versions. You don't need to choose this to
- run the Radeon in plain VGA mode. There is a product page at
- <http://www.ati.com/na/pages/products/pc/radeon32/index.html>.
- If M is selected, the module will be called radeon.o.
-
-Intel I810
-CONFIG_DRM_I810
- Choose this option if you have an Intel I810 graphics card. If M is
- selected, the module will be called i810.o. AGP support is required
- for this driver to work.
-
-Intel 830M, 845G, 852GM, 855GM, 865G
-CONFIG_DRM_I830
- Choose this option if you have a system that has Intel 830M, 845G,
- 852GM, 855GM or 865G integrated graphics. If M is selected, the
- module will be called i830.o. AGP support is required for this driver
- to work.
-
-Matrox G200/G400/G450
-CONFIG_DRM_MGA
- Choose this option if you have a Matrox G200, G400 or G450 graphics
- card. If M is selected, the module will be called mga.o. AGP
- support is required for this driver to work.
-
-3dfx Banshee/Voodoo3+
-CONFIG_DRM40_TDFX
- Choose this option if you have a 3dfx Banshee or Voodoo3 (or later),
- graphics card. If M is selected, the module will be called tdfx.o.
-
-3dlabs GMX 2000
-CONFIG_DRM40_GAMMA
- Choose this option if you have a 3dlabs GMX 2000 graphics card.
- If M is selected, the module will be called gamma.o.
-
-ATI Rage 128
-CONFIG_DRM40_R128
- Choose this option if you have an ATI Rage 128 graphics card. If M
- is selected, the module will be called r128.o. AGP support for
- this card is strongly suggested (unless you have a PCI version).
-
-ATI Radeon
-CONFIG_DRM40_RADEON
- Choose this option if you have an ATI Radeon graphics card. There
- are both PCI and AGP versions. You don't need to choose this to
- run the Radeon in plain VGA mode. There is a product page at
- <http://www.ati.com/na/pages/products/pc/radeon32/index.html>.
- If M is selected, the module will be called radeon.o.
-
-Intel I810
-CONFIG_DRM40_I810
- Choose this option if you have an Intel I810 graphics card. If M is
- selected, the module will be called i810.o. AGP support is required
- for this driver to work.
-
-Matrox G200/G400/G450
-CONFIG_DRM40_MGA
- Choose this option if you have a Matrox G200, G400 or G450 graphics
- card. If M is selected, the module will be called mga.o. AGP
- support is required for this driver to work.
-
-Creator/Creator3D/Elite3D
-CONFIG_DRM_FFB
- Choose this option if you have one of Sun's Creator3D-based graphics
- and frame buffer cards. Product page at
- <http://www.sun.com/desktop/products/Graphics/creator3d.html>.
-
-MTRR (Memory Type Range Register) support
-CONFIG_MTRR
- On Intel P6 family processors (Pentium Pro, Pentium II and later)
- the Memory Type Range Registers (MTRRs) may be used to control
- processor access to memory ranges. This is most useful if you have
- a video (VGA) card on a PCI or AGP bus. Enabling write-combining
- allows bus write transfers to be combined into a larger transfer
- before bursting over the PCI/AGP bus. This can increase performance
- of image write operations 2.5 times or more. Saying Y here creates a
- /proc/mtrr file which may be used to manipulate your processor's
- MTRRs. Typically the X server should use this.
-
- This code has a reasonably generic interface so that similar
- control registers on other processors can be easily supported
- as well:
-
- The Cyrix 6x86, 6x86MX and M II processors have Address Range
- Registers (ARRs) which provide a similar functionality to MTRRs. For
- these, the ARRs are used to emulate the MTRRs.
- The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
- MTRRs. The Centaur C6 (WinChip) has 8 MCRs, allowing
- write-combining. All of these processors are supported by this code
- and it makes sense to say Y here if you have one of them.
-
- Saying Y here also fixes a problem with buggy SMP BIOSes which only
- set the MTRRs for the boot CPU and not for the secondary CPUs. This
- can lead to all sorts of problems, so it's good to say Y here.
-
- You can safely say Y even if your machine doesn't have MTRRs, you'll
- just add about 9 KB to your kernel.
-
- See <file:Documentation/mtrr.txt> for more information.
-
-CPU clock frequency of your DEC Alpha
-CONFIG_FT_ALPHA_CLOCK
- On some DEC Alpha machines the CPU clock frequency cannot be
- determined automatically, so you need to specify it here ONLY if
- running a DEC Alpha, otherwise this setting has no effect.
-
-Double Talk PC internal speech card support
-CONFIG_DTLK
- This driver is for the DoubleTalk PC, a speech synthesizer
- manufactured by RC Systems (<http://www.rcsys.com/>). It is also
- called the `internal DoubleTalk'. If you want to compile this as a
- module ( = code which can be inserted in and removed from the
- running kernel whenever you want), say M here and read
- <file:Documentation/modules.txt>. The module will be called dtlk.o.
-
-Siemens R3964 serial protocol support
-CONFIG_R3964
- This driver allows synchronous communication with devices using the
- Siemens R3964 packet protocol. Unless you are dealing with special
- hardware like PLCs, you are unlikely to need this.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- n_r3964.o.
-
- If unsure, say N.
-
-Applicom intelligent fieldbus card support
-CONFIG_APPLICOM
- This driver provides the kernel-side support for the intelligent
- fieldbus cards made by Applicom International. More information
- about these cards can be found on the WWW at the address
- <http://www.applicom-int.com/>, or by email from David Woodhouse
- <dwmw2@infradead.org>.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- applicom.o.
-
- If unsure, say N.
-
-Sony Vaio Programmable I/O Control Device support
-CONFIG_SONYPI
- This driver enables access to the Sony Programmable I/O Control
- Device which can be found in many (all ?) Sony Vaio laptops.
-
- If you have one of those laptops, read
- <file:Documentation/sonypi.txt>, and say Y or M here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sonypi.o.
-
-Intel Random Number Generator support
-CONFIG_INTEL_RNG
- This driver provides kernel-side support for the Random Number
- Generator hardware found on Intel i8xx-based motherboards.
-
- Both a character driver, used to read() entropy data, and a timer
- function which automatically adds entropy directly into the
- kernel pool, are exported by this driver.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- i810_rng.o.
-
- If unsure, say N.
-
-Intel/AMD/VIA HW Random Number Generator support
-CONFIG_HW_RANDOM
- This driver provides kernel-side support for the
- Random Number Generator hardware found on Intel i8xx-based motherboards,
- AMD 76x-based motherboards, and Via Nehemiah CPUs.
-
- Provides a character driver, used to read() entropy data.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- hw_random.
-
- If unsure, say N.
-
-Power Management support
-CONFIG_PM
- "Power Management" means that parts of your computer are shut
- off or put into a power conserving "sleep" mode if they are not
- being used. There are two competing standards for doing this: APM
- and ACPI. If you want to use either one, say Y here and then also
- to the requisite support below.
-
- Power Management is most important for battery powered laptop
- computers; if you have a laptop, check out the Linux Laptop home
- page on the WWW at
- <http://www.cs.utexas.edu/users/kharker/linux-laptop/> and the
- Battery Powered Linux mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- Note that, even if you say N here, Linux on the x86 architecture
- will issue the hlt instruction if nothing is to be done, thereby
- sending the processor to sleep and saving power.
-
-ACPI support
-CONFIG_ACPI
- ACPI/OSPM support for Linux is currently under development. As such,
- this support is preliminary and EXPERIMENTAL. Configuring ACPI
- support enables kernel interfaces that allow higher level software
- (OSPM) to manipulate ACPI defined hardware and software interfaces,
- including the evaluation of ACPI control methods. If unsure, choose
- N here. Note, this option will enlarge your kernel by about 120K.
-
- This support requires an ACPI compliant platform (hardware/firmware).
- If both ACPI and Advanced Power Management (APM) support are
- configured, whichever is loaded first shall be used.
-
- This code DOES NOT currently provide a complete OSPM implementation
- -- it has not yet reached APM's level of functionality. When fully
- implemented, Linux ACPI/OSPM will provide a more robust functional
- replacement for legacy configuration and power management
- interfaces, including the Plug-and-Play BIOS specification (PnP
- BIOS), the Multi-Processor Specification (MPS), and the Advanced
- Power Management specification (APM).
-
- Linux support for ACPI/OSPM is based on Intel Corporation's ACPI
- Component Architecture (ACPI CA). The latest ACPI CA source code,
- documentation, debug builds, and implementation status information
- can be downloaded from:
- <http://developer.intel.com/technology/iapc/acpi/downloads.htm>.
-
- The ACPI Sourceforge project may also be of interest:
- <http://sf.net/projects/acpi/>
-
- Note that "acpi=off" can be used to disable all ACPI code in the kernel.
-
-ACPI kernel configuration manager
-CONFIG_ACPI_KERNEL_CONFIG
- If you say `Y' here, Linux's ACPI support will use the
- hardware-level system descriptions found on IA64 machines.
-
-ACPI Debug Statements
-CONFIG_ACPI_DEBUG
- The ACPI driver can optionally report errors with a great deal
- of verbosity. Saying Y enables these statements. This will increase
- your kernel size by around 50K.
-
-ACPI Relaxed AML Checking
-CONFIG_ACPI_RELAXED_AML
- If you say `Y' here, the ACPI interpreter will relax its checking
- for valid AML and will ignore some AML mistakes, such as off-by-one
- errors in region sizes. Some laptops may require this option. In
- particular, many Toshiba laptops require this for correct operation
- of the AC module.
-
-ACPI Button
-CONFIG_ACPI_BUTTON
- This driver registers for events based on buttons, such as the
- power, sleep, and lid switch. In the future, a daemon will read
- /proc/acpi/event and perform user-defined actions such as shutting
- down the system. Until then, you can cat it, and see output when
- a button is pressed.
-
-CONFIG_ACPI_BATTERY
- This driver adds support for battery information through
- /proc/acpi/battery. If you have a mobile system with a battery,
- say Y.
-
-CONFIG_ACPI_FAN
- This driver adds support for ACPI fan devices, allowing user-mode
- applications to perform basic fan control (on, off, status).
-
-CONFIG_ACPI_PROCESSOR
- This driver installs ACPI as the idle handler for Linux, and uses
- ACPI C2 and C3 processor states to save power, on systems that
- support it.
-
-ACPI AC Adapter
-CONFIG_ACPI_AC
- This driver adds support for the AC Adapter object, which indicates
- whether a system is on AC, or not. Typically, only laptops have
- this object, since desktops are always on AC.
-
-ACPI Embedded Controller
-CONFIG_ACPI_EC
- This driver is required on some systems for the proper operation of
- the battery and thermal drivers. If you are compiling for a laptop,
- say Y.
-
-ACPI Thermal
-CONFIG_ACPI_THERMAL
- This driver handles overheating conditions on laptops. It is HIGHLY
- recommended, as your laptop CPU may be damaged without it.
-
-ACPI ASUS/Medion Laptop Extras
-CONFIG_ACPI_ASUS
- This driver provides support for extra features of ACPI-compatible
- ASUS laptops. As some of Medion laptops are made by ASUS, it may also
- support some Medion laptops (such as 9675 for example). It makes all
- the extra buttons generate standard ACPI events that go through
- /proc/acpi/events, and (on some models) adds support for changing the
- display brightness and output, switching the LCD backlight on and off,
- and most importantly, allows you to blink those fancy LEDs intended
- for reporting mail and wireless status.
-
- Note: the display switching code is currently considered EXPERIMENTAL,
- toying with these values may even lock your machine.
-
- All settings are changed via /proc/acpi/asus directory entries. Owner
- and group for these entries can be set with asus_uid and asus_gid
- parameters.
-
- More information and a userspace daemon for handling the extra buttons
- at <http://sourceforge.net/projects/acpi4asus/>.
-
- If you have an ACPI-compatible ASUS laptop, say Y or M here. This
- driver is still under development, so if your laptop is unsupported or
- something works not quite as expected, please use the mailing list
- available on the above page (acpi4asus-user@lists.sourceforge.net)
-
-ACPI Toshiba Laptop Extras
-CONFIG_ACPI_TOSHIBA
- This driver adds support for access to certain system settings
- on "legacy free" Toshiba laptops. These laptops can be recognized by
- their lack of a BIOS setup menu and APM support.
-
- On these machines, all system configuration is handled through the
- ACPI. This driver is required for access to controls not covered
- by the general ACPI drivers, such as LCD brightness, video output,
- etc.
-
- This driver differs from the non-ACPI Toshiba laptop driver (located
- under "Processor type and features") in several aspects.
- Configuration is accessed by reading and writing text files in the
- /proc tree instead of by program interface to /dev. Furthermore, no
- power management functions are exposed, as those are handled by the
- general ACPI drivers.
-
- More information about this driver is available at
- <http://memebeam.org/toys/ToshibaAcpiDriver>.
-
- If you have a legacy free Toshiba laptop (such as the Libretto L1
- series), say Y.
-
-Advanced Power Management BIOS support
-CONFIG_APM
- APM is a BIOS specification for saving power using several different
- techniques. This is mostly useful for battery powered laptops with
- APM compliant BIOSes. If you say Y here, the system time will be
- reset after a RESUME operation, the /proc/apm device will provide
- battery status information, and user-space programs will receive
- notification of APM "events" (e.g. battery status change).
-
- If you select "Y" here, you can disable actual use of the APM
- BIOS by passing the "apm=off" option to the kernel at boot time.
-
- Note that the APM support is almost completely disabled for
- machines with more than one CPU.
-
- In order to use APM, you will need supporting software. For location
- and more information, read <file:Documentation/pm.txt> and the
- Battery Powered Linux mini-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>.
-
- This driver does not spin down disk drives (see the hdparm(8)
- manpage ("man 8 hdparm") for that), and it doesn't turn off
- VESA-compliant "green" monitors.
-
- This driver does not support the TI 4000M TravelMate and the ACER
- 486/DX4/75 because they don't have compliant BIOSes. Many "green"
- desktop machines also don't have compliant BIOSes, and this driver
- may cause those machines to panic during the boot phase.
-
- Generally, if you don't have a battery in your machine, there isn't
- much point in using this driver and you should say N. If you get
- random kernel OOPSes or reboots that don't seem to be related to
- anything, try disabling/enabling this option (or disabling/enabling
- APM in your BIOS).
-
- Some other things you should try when experiencing seemingly random,
- "weird" problems:
-
- 1) make sure that you have enough swap space and that it is
- enabled.
- 2) pass the "no-hlt" option to the kernel
- 3) switch on floating point emulation in the kernel and pass
- the "no387" option to the kernel
- 4) pass the "floppy=nodma" option to the kernel
- 5) pass the "mem=4M" option to the kernel (thereby disabling
- all but the first 4 MB of RAM)
- 6) make sure that the CPU is not over clocked.
- 7) read the sig11 FAQ at <http://www.bitwizard.nl/sig11/>
- 8) disable the cache from your BIOS settings
- 9) install a fan for the video card or exchange video RAM
- 10) install a better fan for the CPU
- 11) exchange RAM chips
- 12) exchange the motherboard.
-
- To compile this driver as a module ( = code which can be inserted in
- and removed from the running kernel whenever you want), say M here
- and read <file:Documentation/modules.txt>. The module will be called
- apm.o.
-
-Ignore USER SUSPEND
-CONFIG_APM_IGNORE_USER_SUSPEND
- This option will ignore USER SUSPEND requests. On machines with a
- compliant APM BIOS, you want to say N. However, on the NEC Versa M
- series notebooks, it is necessary to say Y because of a BIOS bug.
-
-Enable APM at boot time
-CONFIG_APM_DO_ENABLE
- Enable APM features at boot time. From page 36 of the APM BIOS
- specification: "When disabled, the APM BIOS does not automatically
- power manage devices, enter the Standby State, enter the Suspend
- State, or take power saving steps in response to CPU Idle calls."
- This driver will make CPU Idle calls when Linux is idle (unless this
- feature is turned off -- see "Do CPU IDLE calls", below). This
- should always save battery power, but more complicated APM features
- will be dependent on your BIOS implementation. You may need to turn
- this option off if your computer hangs at boot time when using APM
- support, or if it beeps continuously instead of suspending. Turn
- this off if you have a NEC UltraLite Versa 33/C or a Toshiba
- T400CDT. This is off by default since most machines do fine without
- this feature.
-
-Make CPU Idle calls when idle
-CONFIG_APM_CPU_IDLE
- Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop.
- On some machines, this can activate improved power savings, such as
- a slowed CPU clock rate, when the machine is idle. These idle calls
- are made after the idle loop has run for some length of time (e.g.,
- 333 mS). On some machines, this will cause a hang at boot time or
- whenever the CPU becomes idle. (On machines with more than one CPU,
- this option does nothing.)
-
-Enable console blanking using APM
-CONFIG_APM_DISPLAY_BLANK
- Enable console blanking using the APM. Some laptops can use this to
- turn off the LCD backlight when the screen blanker of the Linux
- virtual console blanks the screen. Note that this is only used by
- the virtual console screen blanker, and won't turn off the backlight
- when using the X Window system. This also doesn't have anything to
- do with your VESA-compliant power-saving monitor. Further, this
- option doesn't work for all laptops -- it might not turn off your
- backlight at all, or it might print a lot of errors to the console,
- especially if you are using gpm.
-
-RTC stores time in GMT
-CONFIG_APM_RTC_IS_GMT
- Say Y here if your RTC (Real Time Clock a.k.a. hardware clock)
- stores the time in GMT (Greenwich Mean Time). Say N if your RTC
- stores localtime.
-
- It is in fact recommended to store GMT in your RTC, because then you
- don't have to worry about daylight savings time changes. The only
- reason not to use GMT in your RTC is if you also run a broken OS
- that doesn't understand GMT.
-
-Allow interrupts during APM BIOS calls
-CONFIG_APM_ALLOW_INTS
- Normally we disable external interrupts while we are making calls to
- the APM BIOS as a measure to lessen the effects of a badly behaving
- BIOS implementation. The BIOS should reenable interrupts if it
- needs to. Unfortunately, some BIOSes do not -- especially those in
- many of the newer IBM Thinkpads. If you experience hangs when you
- suspend, try setting this to Y. Otherwise, say N.
-
-Use real mode APM BIOS call to power off
-CONFIG_APM_REAL_MODE_POWER_OFF
- Use real mode APM BIOS calls to switch off the computer. This is
- a work-around for a number of buggy BIOSes. Switch this option on if
- your computer crashes instead of powering off properly.
-
-Watchdog Timer Support
-CONFIG_WATCHDOG
- If you say Y here (and to one of the following options) and create a
- character special file /dev/watchdog with major number 10 and minor
- number 130 using mknod ("man mknod"), you will get a watchdog, i.e.:
- subsequently opening the file and then failing to write to it for
- longer than 1 minute will result in rebooting the machine. This
- could be useful for a networked machine that needs to come back
- online as fast as possible after a lock-up. There's both a watchdog
- implementation entirely in software (which can sometimes fail to
- reboot the machine) and a driver for hardware watchdog boards, which
- are more robust and can also keep track of the temperature inside
- your computer. For details, read <file:Documentation/watchdog.txt>
- in the kernel source.
-
- The watchdog is usually used together with the watchdog daemon
- which is available from
- <ftp://ibiblio.org/pub/Linux/system/daemons/watchdog/>. This daemon can
- also monitor NFS connections and can reboot the machine when the process
- table is full.
-
- If unsure, say N.
-
-Disable watchdog shutdown on close
-CONFIG_WATCHDOG_NOWAYOUT
- The default watchdog behaviour (which you get if you say N here) is
- to stop the timer if the process managing it closes the file
- /dev/watchdog. It's always remotely possible that this process might
- get killed. If you say Y here, the watchdog cannot be stopped once
- it has been started.
-
-WDT Watchdog timer
-CONFIG_WDT
- If you have a WDT500P or WDT501P watchdog board, say Y here,
- otherwise N. It is not possible to probe for this board, which means
- that you have to inform the kernel about the IO port and IRQ using
- the "wdt=" kernel option (try "man bootparam" or see the
- documentation of your boot loader (lilo or loadlin) about how to
- pass options to the kernel at boot time).
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called wdt.o.
-
-WDT PCI Watchdog timer
-CONFIG_WDTPCI
- If you have a PCI WDT500/501 watchdog board, say Y here, otherwise
- N. It is not possible to probe for this board, which means that you
- have to inform the kernel about the IO port and IRQ using the "wdt="
- kernel option (try "man bootparam" or see the documentation of your
- boot loader (lilo or loadlin) about how to pass options to the
- kernel at boot time).
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called wdt_pci.o.
-
-WDT501 features
-CONFIG_WDT_501
- Saying Y here and creating a character special file /dev/temperature
- with major number 10 and minor number 131 ("man mknod") will give
- you a thermometer inside your computer: reading from
- /dev/temperature yields one byte, the temperature in degrees
- Fahrenheit. This works only if you have a WDT501P watchdog board
- installed.
-
-Fan Tachometer
-CONFIG_WDT_501_FAN
- Enable the Fan Tachometer on the WDT501. Only do this if you have a
- fan tachometer actually set up.
-
-Software Watchdog
-CONFIG_SOFT_WATCHDOG
- A software monitoring watchdog. This will fail to reboot your system
- from some situations that the hardware watchdog will recover
- from. Equally it's a lot cheaper to install.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- softdog.o.
-
-Berkshire Products PC Watchdog
-CONFIG_PCWATCHDOG
- This is the driver for the Berkshire Products PC Watchdog card.
- This card simply watches your kernel to make sure it doesn't freeze,
- and if it does, it reboots your computer after a certain amount of
- time. This driver is like the WDT501 driver but for different
- hardware. Please read <file:Documentation/pcwd-watchdog.txt>. The PC
- watchdog cards can be ordered from <http://www.berkprod.com/>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called pcwd.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
- Most people will say N.
-
-Acquire SBC Watchdog Timer
-CONFIG_ACQUIRE_WDT
- This is the driver for the hardware watchdog on the PSC-6x86 Single
- Board Computer produced by Acquire Inc (and others). This watchdog
- simply watches your kernel to make sure it doesn't freeze, and if
- it does, it reboots your computer after a certain amount of time.
-
- This driver is like the WDT501 driver but for different hardware.
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called pscwdt.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. Most
- people will say N.
-
-Advantech SBC Watchdog Timer
-CONFIG_ADVANTECH_WDT
- If you are configuring a Linux kernel for the Advantech single-board
- computer, say `Y' here to support its built-in watchdog timer
- feature. See the help for CONFIG_WATCHDOG for discussion.
-
-ALi M7101 Watchdog Timer
-CONFIG_ALIM7101_WDT
- This is the driver for the hardware watchdog on the ALi M7101 PMU
- as used in the x86 Cobalt servers.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called alim7101_wdt.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. Most
- people will say N.
-
-IB700 SBC Watchdog Timer
-CONFIG_IB700_WDT
- This is the driver for the hardware watchdog on the IB700 Single
- Board Computer produced by TMC Technology (www.tmc-uk.com). This watchdog
- simply watches your kernel to make sure it doesn't freeze, and if
- it does, it reboots your computer after a certain amount of time.
-
- This driver is like the WDT501 driver but for slightly different hardware.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called ib700wdt.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt. Most people
- will say N.
-
-Mixcom Watchdog
-CONFIG_MIXCOMWD
- This is a driver for the Mixcom hardware watchdog cards. This
- watchdog simply watches your kernel to make sure it doesn't freeze,
- and if it does, it reboots your computer after a certain amount of
- time.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called mixcomwd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. Most
- people will say N.
-
-ZF MachZ Watchdog
-CONFIG_MACHZ_WDT
- If you are using a ZF Micro MachZ processor, say Y here, otherwise
- N. This is the driver for the watchdog timer builtin on that
- processor using ZF-Logic interface. This watchdog simply watches
- your kernel to make sure it doesn't freeze, and if it does, it
- reboots your computer after a certain amount of time.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called machzwd.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-CONFIG_SC1200_WDT
- This is a driver for National Semiconductor PC87307/PC97307 hardware
- watchdog cards as found on the SC1200. This watchdog is mainly used
- for power management purposes and can be used to power down the device
- during inactivity periods (includes interrupt activity monitoring).
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called sc1200wdt.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>. Most
- people will say N.
-
-SuperH Watchdog
-CONFIG_SH_WDT
- This driver adds watchdog support for the integrated watchdog in the
- SuperH 3, 4 and 5 processors. If you have one of these processors, say
- Y, otherwise say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called shwdt.o. If you want to compile it as a module,
- say M here and read Documentation/modules.txt.
-
-Wafer 5823 Watchdog
-CONFIG_WAFER_WDT
- This is a driver for the hardware watchdog on the ICP Wafer 5823
- Single Board Computer (and probably other similar models).
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- wafer5823wdt.o
-
-Machine Check Exception
-CONFIG_X86_MCE
- Machine Check Exception support allows the processor to notify the
- kernel if it detects a problem (e.g. overheating, component failure).
- The action the kernel takes depends on the severity of the problem,
- ranging from a warning message on the console, to halting the machine.
- You can safely select this on machines that do not support this feature.
-
- For pentium machines the mce support defaults to off as the mainboard
- support is not always present. You must activate it as a boot option.
-
-Toshiba Laptop support
-CONFIG_TOSHIBA
- This adds a driver to safely access the System Management Mode of
- the CPU on Toshiba portables with a genuine Toshiba BIOS. It does
- not work on models with a Phoenix BIOS. The System Management Mode
- is used to set the BIOS and power saving options on Toshiba portables.
-
- For information on utilities to make use of this driver see the
- Toshiba Linux utilities web site at:
- <http://www.buzzard.org.uk/toshiba/>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- toshiba.o
-
- Say Y if you intend to run this kernel on a Toshiba portable.
- Say N otherwise.
-
-Dell laptop support
-CONFIG_I8K
- This adds a driver to safely access the System Management Mode
- of the CPU on the Dell Inspiron and Latitude laptops. The System
- Management Mode is used to read cpu temperature, cooling fan
- status and Fn-keys status on Dell laptops. It can also be used
- to switch the fans on and off.
-
- The driver has been developed and tested on an Inspiron 8000
- but it should work on any Dell Inspiron or Latitude laptop.
- You can force loading on unsupported models by passing the
- parameter `force=1' to the module. Use at your own risk.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- i8k.o
-
- For more information on this driver and for utilities that make
- use of the module see the I8K Linux Utilities web site at:
- <http://www.debian.org/~dz/i8k/>.
-
- Say Y if you intend to run this kernel on a Dell laptop.
- Say N otherwise.
-
-/dev/cpu/microcode - Intel IA32 CPU microcode support
-CONFIG_MICROCODE
- If you say Y here and also to "/dev file system support" in the
- 'File systems' section, you will be able to update the microcode on
- Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II,
- Pentium III, Pentium 4, Xeon etc. You will obviously need the
- actual microcode binary data itself which is not shipped with the
- Linux kernel.
-
- For latest news and information on obtaining all the required
- ingredients for this driver, check:
- <http://www.urbanmyth.org/microcode/>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called microcode.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>. If
- you use modprobe or kmod you may also want to add the line
- 'alias char-major-10-184 microcode' to your /etc/modules.conf file.
-
-/dev/cpu/*/msr - Model-specific register support
-CONFIG_X86_MSR
- This device gives privileged processes access to the x86
- Model-Specific Registers (MSRs). It is a character device with
- major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr.
- MSR accesses are directed to a specific CPU on multi-processor
- systems.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- msr.o
-
-/dev/cpu/*/cpuid - CPU information support
-CONFIG_X86_CPUID
- This device gives processes access to the x86 CPUID instruction to
- be executed on a specific processor. It is a character device
- with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
- /dev/cpu/31/cpuid.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- cpuid.o
-
-x86 BIOS Enhanced Disk Drive support
-CONFIG_EDD
- Say Y or M here if you want to enable BIOS Enhanced Disk Drive
- Services real mode BIOS calls to determine which disk
- BIOS tries boot from. This information is then exported via /proc.
-
- This option is experimental, but believed to be safe,
- and most disk controller BIOS vendors do not yet implement this feature.
-
-SBC-60XX Watchdog Timer
-CONFIG_60XX_WDT
- This driver can be used with the watchdog timer found on some
- single board computers, namely the 6010 PII based computer.
- It may well work with other cards. It reads port 0x443 to enable
- and re-set the watchdog timer, and reads port 0x45 to disable
- the watchdog. If you have a card that behave in similar ways,
- you can probably make this driver work with your card as well.
-
- You can compile this driver directly into the kernel, or use
- it as a module. The module will be called sbc60xxwdt.o.
-
-Eurotech CPU-1220/1410 Watchdog Timer
-CONFIG_EUROTECH_WDT
- Enable support for the watchdog timer on the Eurotech CPU-1220 and
- CPU-1410 cards. These are PC/104 SBCs. Spec sheets and product
- information are at <http://www.eurotech.it/>.
-
-W83877F Watchdog Timer
-CONFIG_W83877F_WDT
- This is the driver for the hardware watchdog on the W83877F chipset
- as used in EMACS PC-104 motherboards (and may work on others). This
- watchdog simply watches your kernel to make sure it doesn't freeze,
- and if it does, it reboots your computer after a certain amount of
- time.
-
- You can compile this driver directly into the kernel, or use
- it as a module. The module will be called w83877f_wdt.o.
-
-SC520 (AMD Elan) Watchdog Timer
-CONFIG_SC520_WDT
- This is the driver for the hardware watchdog built in to the
- AMD "Elan" SC520 microcomputer commonly used in embedded systems.
- This watchdog simply watches your kernel to make sure it doesn't
- freeze, and if it does, it reboots your computer after a certain
- amount of time.
-
- You can compile this driver directly into the kernel, or use
- it as a module. The module will be called sc520_wdt.o.
-
-Enhanced Real Time Clock Support
-CONFIG_RTC
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
- will get access to the real time clock (or hardware clock) built
- into your computer.
-
- Every PC has such a clock built in. It can be used to generate
- signals from as low as 1Hz up to 8192Hz, and can also be used
- as a 24 hour alarm. It reports status information via the file
- /proc/driver/rtc and its behaviour is set by various ioctls on
- /dev/rtc.
-
- If you run Linux on a multiprocessor machine and said Y to
- "Symmetric Multi Processing" above, you should say Y here to read
- and set the RTC in an SMP compatible fashion.
-
- If you think you have a use for such a device (such as periodic data
- sampling), then say Y here, and read <file:Documentation/rtc.txt>
- for details.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called rtc.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
-Generic MIPS RTC Support
-CONFIG_MIPS_RTC
-
- If your machine is a MIPS machine, this option provides a simple,
- generic RTC driver for /dev/rtc device. It only implements two IOCTL
- operations of the standard PC RTC driver: RTC_RD_TIME and RTC_SET_TIME.
- It is sufficient to run hwclock program.
-
- You should say Y here if there is no machine-specific RTC driver for your
- MIPS machine but you do want a simple RTC driver for your RTC device.
-
-Generic Real Time Clock Support
-CONFIG_GEN_RTC
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
- will get access to the real time clock (or hardware clock) built
- into your computer.
-
- In 2.4 and later kernels this is the only way to set and get rtc
- time on m68k systems so it is highly recommended.
-
- It reports status information via the file /proc/driver/rtc and its
- behaviour is set by various ioctls on /dev/rtc. If you enable the
- "extended RTC operation" below it will also provide an emulation
- for RTC_UIE which is required by some programs and may improve
- precision in some cases.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called genrtc.o. If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>. To load the
- module automatically add 'alias char-major-10-135 genrtc' to your
- /etc/modules.conf
-
-Extended RTC operation
-CONFIG_GEN_RTC_X
- Provides an emulation for RTC_UIE which is required by some programs
- and may improve precision of the generic RTC support in some cases.
-
-Tadpole ANA H8 Support
-CONFIG_H8
- The Hitachi H8/337 is a microcontroller used to deal with the power
- and thermal environment. If you say Y here, you will be able to
- communicate with it via a character special device.
-
- If unsure, say N.
-
-/dev/nvram support
-CONFIG_NVRAM
- If you say Y here and create a character special file /dev/nvram
- with major number 10 and minor number 144 using mknod ("man mknod"),
- you get read and write access to the extra bytes of non-volatile
- memory in the real time clock (RTC), which is contained in every PC
- and most Ataris. The actual number of bytes varies, depending on the
- nvram in the system, but is usually 114 (128-14 for the RTC).
-
- This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
- on Ataris. /dev/nvram may be used to view settings there, or to
- change them (with some utility). It could also be used to frequently
- save a few bits of very important data that may not be lost over
- power-off and for which writing to disk is too insecure. Note
- however that most NVRAM space in a PC belongs to the BIOS and you
- should NEVER idly tamper with it. See Ralf Brown's interrupt list
- for a guide to the use of CMOS bytes by your BIOS.
-
- On Atari machines, /dev/nvram is always configured and does not need
- to be selected.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called nvram.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Joystick support
-CONFIG_JOYSTICK
- If you have a joystick, 6dof controller, gamepad, steering wheel,
- weapon control system or something like that you can say Y here to
- enable generic support for these controllers. You will also need to
- say Y or M to at least one of the hardware specific drivers. This
- will make the controllers available as /dev/input/jsX devices.
- Please read the file <file:Documentation/input/joystick.txt> which
- contains more information and the location of the joystick package
- that you'll need.
-
-Game port support
-CONFIG_INPUT_GAMEPORT
- Gameport support is for the standard 15-pin PC gameport. If you
- have a joystick, gamepad, gameport card, a soundcard with a gameport
- or anything else that uses the gameport, say Y or M here and also to
- at least one of the hardware specific drivers.
- Please read the file <file:Documentation/input/joystick.txt> which
- contains more information and the location of the joystick package
- that you'll need if you use the gameport with a joystick.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called gameport.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Classic ISA/PnP gameports
-CONFIG_INPUT_NS558
- Say Y here if you have an ISA or PnP gameport.
- For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called ns558.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-PDPI Lightning 4 gamecard
-CONFIG_INPUT_LIGHTNING
- Say Y here if you have a PDPI Lightning 4 gamecard. For more
- information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called lightning.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Crystal SoundFusion gameports
-CONFIG_INPUT_CS461X
- Say Y here if you have a Cirrus CS461x aka "Crystal SoundFusion"
- PCI audio accelerator. A product page for the CS4614 is at
- <http://www.cirrus.com/design/products/overview/index.cfm?ProductID=40>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cs461x.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Aureal Vortex, Trident 4DWave, and ALi 5451 gameports
-CONFIG_INPUT_PCIGAME
- Say Y here if you have a Trident 4DWave DX/NX or Aureal Vortex 1/2
- card or an ALi 5451 chip on your motherboard. For more information
- on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called pcigame.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-SoundBlaster Live! gameports
-CONFIG_INPUT_EMU10K1
- Say Y here if you have a SoundBlaster Live! card and want to use
- its gameport. For more information on how to use the driver
- please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called emu10k1-gp.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Classic PC analog joysticks and gamepads
-CONFIG_INPUT_ANALOG
- Say Y here if you have a controller that connects to the PC
- gameport. This supports many different types, including joysticks
- with throttle control, with rudders, or with extensions like
- additional hats and buttons compatible with CH Flightstick Pro,
- ThrustMaster FCS, 6 and 8 button gamepads, or Saitek Cyborg
- joysticks. For more information on how to use the driver please
- read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called analog.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Assassin 3D and MadCatz Panther devices
-CONFIG_INPUT_A3D
- Say Y here if you have an FPGaming or MadCatz controller using the
- A3D protocol over the PC gameport. For more information on how to
- use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called a3d.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Logitech ADI digital joysticks and gamepads
-CONFIG_INPUT_ADI
- Say Y here if you have a Logitech controller using the ADI
- protocol over the PC gameport. For more information on how to use
- the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called adi.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Creative Labs Blaster Cobra gamepad
-CONFIG_INPUT_COBRA
- Say Y here if you have a Creative Labs Blaster Cobra gamepad.
- For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cobra.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Genius Flight2000 Digital joysticks and gamepads
-CONFIG_INPUT_GF2K
- Say Y here if you have a Genius Flight2000 or MaxFighter digitally
- communicating joystick or gamepad. For more information on how to
- use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called gf2k.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Gravis GrIP joysticks and gamepads
-CONFIG_INPUT_GRIP
- Say Y here if you have a Gravis controller using the GrIP protocol
- over the PC gameport. For more information on how to use the driver
- please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called grip.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-InterAct digital joysticks and gamepads
-CONFIG_INPUT_INTERACT
- Say Y hereif you have an InterAct gameport or joystick
- communicating digitally over the gameport. For more information on
- how to use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called interact.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-ThrustMaster DirectConnect joysticks and gamepads
-CONFIG_INPUT_TMDC
- Say Y here if you have a ThrustMaster controller using the
- DirectConnect (BSP) protocol over the PC gameport. For more
- information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called tmdc.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Microsoft SideWinder digital joysticks and gamepads
-CONFIG_INPUT_SIDEWINDER
- Say Y here if you have a Microsoft controller using the Digital
- Overdrive protocol over PC gameport. For more information on how to
- use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sidewinder.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Serial port device support
-CONFIG_INPUT_SERIO
- Say Y here and to the Serial port input line discipline option if
- you plan to use a joystick that communicates over the serial (COM)
- port. For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called sidewinder.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Serial port input line discipline
-CONFIG_INPUT_SERPORT
- Say Y here if you plan to use a joystick that communicates over the
- serial (COM) port. For more information on how to use the driver
- please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called serport.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Logitech WingMan Warrior joystick
-CONFIG_INPUT_WARRIOR
- Say Y here if you have a Logitech WingMan Warrior joystick connected
- to your computer's serial port. For more information on how to use
- the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called warrior.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-LogiCad3d Magellan/SpaceMouse 6dof controller
-CONFIG_INPUT_MAGELLAN
- Say Y here if you have a Magellan or Space Mouse 6DOF controller
- connected to your computer's serial port. For more information on
- how to use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called magellan.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-SpaceTec SpaceOrb/Avenger 6dof controller
-CONFIG_INPUT_SPACEORB
- Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF
- controller connected to your computer's serial port. For more
- information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called spaceorb.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-SpaceTec SpaceBall 4000 FLX 6dof controller
-CONFIG_INPUT_SPACEBALL
- Say Y here if you have a SpaceTec SpaceBall 4000 FLX controller
- connected to your computer's serial port. For more information on
- how to use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called spaceball.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Gravis Stinger gamepad
-CONFIG_INPUT_STINGER
- Say Y here if you have a Gravis Stinger connected to one of your
- serial ports. For more information on how to use the driver please
- read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called stinger.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-I-Force joysticks/wheels
-CONFIG_INPUT_IFORCE_232
- Say Y here if you have an I-Force joystick or steering wheel
- connected to your serial (COM) port. For more information on how
- to use the driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called iforce.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-I-Force joysticks/wheels
-CONFIG_INPUT_IFORCE_USB
- Say Y here if you have an I-Force joystick or steering wheel
- connected to your USB port. For more information on how to use the
- driver please read <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called iforce.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Multisystem, Sega Genesis, Saturn joysticks and gamepads
-CONFIG_INPUT_DB9
- Say Y here if you have a Sega Master System gamepad, Sega Genesis
- gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga,
- Commodore, Amstrad CPC joystick connected to your parallel port.
- For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt> and
- <file:Documentation/input/joystick-parport.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called db9.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Multisystem, NES, SNES, N64, PSX joysticks and gamepads
-CONFIG_INPUT_GAMECON
- Say Y here if you have a Nintendo Entertainment System gamepad,
- Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad,
- Sony PlayStation gamepad or a Multisystem -- Atari, Amiga,
- Commodore, Amstrad CPC joystick connected to your parallel port.
- For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt> and
- <file:Documentation/input/joystick-parport.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called gamecon.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Multisystem joysticks via TurboGraFX device
-CONFIG_INPUT_TURBOGRAFX
- Say Y here if you have the TurboGraFX interface by Steffen Schwenke,
- and want to use it with Multisystem -- Atari, Amiga, Commodore,
- Amstrad CPC joystick. For more information on how to use the driver
- please read <file:Documentation/input/joystick.txt> and
- <file:Documentation/input/joystick-parport.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called turbografx.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-Amiga joysticks
-CONFIG_INPUT_AMIJOY
- Say Y here if you have an Amiga with a digital joystick connected
- to it. For more information on how to use the driver please read
- <file:Documentation/input/joystick.txt>.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called joy-amiga.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Atomwide serial port support
-CONFIG_ATOMWIDE_SERIAL
- If you have an Atomwide Serial card for an Acorn system, say Y to
- this option. The driver can handle 1, 2, or 3 port cards.
- If unsure, say N.
-
-Dual serial port support
-CONFIG_DUALSP_SERIAL
- If you have the Serial Port's dual serial card for an Acorn system,
- say Y to this option. If unsure, say N.
-
-NetWinder Button
-CONFIG_NWBUTTON
- If you say Y here and create a character device node /dev/nwbutton
- with major and minor numbers 10 and 158 ("man mknod"), then every
- time the orange button is pressed a number of times, the number of
- times the button was pressed will be written to that device.
-
- This is most useful for applications, as yet unwritten, which
- perform actions based on how many times the button is pressed in a
- row.
-
- Do not hold the button down for too long, as the driver does not
- alter the behaviour of the hardware reset circuitry attached to the
- button; it will still execute a hard reset if the button is held
- down for longer than approximately five seconds.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- nwbutton.o.
-
- Most people will answer Y to this question and "Reboot Using Button"
- below to be able to initiate a system shutdown from the button.
-
-Reboot Using Button
-CONFIG_NWBUTTON_REBOOT
- If you say Y here, then you will be able to initiate a system
- shutdown and reboot by pressing the orange button a number of times.
- The number of presses to initiate the shutdown is two by default,
- but this can be altered by modifying the value of NUM_PRESSES_REBOOT
- in nwbutton.h and recompiling the driver or, if you compile the
- driver as a module, you can specify the number of presses at load
- time with "insmod button reboot_count=<something>".
-
-Sound card support
-CONFIG_SOUND
- If you have a sound card in your computer, i.e. if it can say more
- than an occasional beep, say Y. Be sure to have all the information
- about your sound card and its configuration down (I/O port,
- interrupt and DMA channel), because you will be asked for it.
-
- You want to read the Sound-HOWTO, available from
- <http://www.tldp.org/docs.html#howto>. General information about
- the modular sound system is contained in the files
- <file:Documentation/sound/Introduction>. The file
- <file:Documentation/sound/README.OSS> contains some slightly
- outdated but still useful information as well.
-
- If you have a PnP sound card and you want to configure it at boot
- time using the ISA PnP tools (read
- <http://www.roestock.demon.co.uk/isapnptools/>), then you need to
- compile the sound card support as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want)
- and load that module after the PnP configuration is finished. To do
- this, say M here and read <file:Documentation/modules.txt> as well
- as <file:Documentation/sound/README.modules>; the module will be
- called soundcore.o.
-
- I'm told that even without a sound card, you can make your computer
- say more than an occasional beep, by programming the PC speaker.
- Kernel patches and supporting utilities to do that are in the pcsp
- package, available at <ftp://ftp.infradead.org/pub/pcsp/>.
-
-OSS sound modules
-CONFIG_SOUND_OSS
- OSS is the Open Sound System suite of sound card drivers. They make
- sound programming easier since they provide a common API. Say Y or
- M here (the module will be called sound.o) if you haven't found a
- driver for your sound card above, then pick your driver from the
- list below.
-
-Persistent DMA buffers
-CONFIG_SOUND_DMAP
- Linux can often have problems allocating DMA buffers for ISA sound
- cards on machines with more than 16MB of RAM. This is because ISA
- DMA buffers must exist below the 16MB boundary and it is quite
- possible that a large enough free block in this region cannot be
- found after the machine has been running for a while. If you say Y
- here the DMA buffers (64Kb) will be allocated at boot time and kept
- until the shutdown. This option is only useful if you said Y to
- "OSS sound modules", above. If you said M to "OSS sound modules"
- then you can get the persistent DMA buffer functionality by passing
- the command-line argument "dmabuf=1" to the sound.o module.
-
- Say Y unless you have 16MB or less RAM or a PCI sound card.
-
-Support for Aztech Sound Galaxy (non-PnP) cards
-CONFIG_SOUND_SGALAXY
- This module initializes the older non Plug and Play sound galaxy
- cards from Aztech. It supports the Waverider Pro 32 - 3D and the
- Galaxy Washington 16.
-
- If you compile the driver into the kernel, you have to add
- "sgalaxy=<io>,<irq>,<dma>,<dma2>,<sgbase>" to the kernel command
- line.
-
-Support for AD1816(A) based cards
-CONFIG_SOUND_AD1816
- Say M here if you have a sound card based on the Analog Devices
- AD1816(A) chip.
-
- If you compile the driver into the kernel, you have to add
- "ad1816=<io>,<irq>,<dma>,<dma2>" to the kernel command line.
-
-Yamaha OPL3-SA1 audio controller
-CONFIG_SOUND_OPL3SA1
- Say Y or M if you have a Yamaha OPL3-SA1 sound chip, which is
- usually built into motherboards. Read
- <file:Documentation/sound/OPL3-SA> for details.
-
- If you compile the driver into the kernel, you have to add
- "opl3sa=<io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq>" to the kernel
- command line.
-
-ProAudioSpectrum 16 support
-CONFIG_SOUND_PAS
- Answer Y only if you have a Pro Audio Spectrum 16, ProAudio Studio
- 16 or Logitech SoundMan 16 sound card. Answer N if you have some
- other card made by Media Vision or Logitech since those are not
- PAS16 compatible. Please read <file:Documentation/sound/PAS16>.
- It is not necessary to add Sound Blaster support separately; it
- is included in PAS support.
-
- If you compile the driver into the kernel, you have to add
- "pas2=<io>,<irq>,<dma>,<dma2>,<sbio>,<sbirq>,<sbdma>,<sbdma2>
- to the kernel command line.
-
-Enable PAS16 joystick port
-CONFIG_PAS_JOYSTICK
- Say Y here to enable the Pro Audio Spectrum 16's auxiliary joystick
- port.
-
-100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support
-CONFIG_SOUND_SB
- Answer Y if you have an original Sound Blaster card made by Creative
- Labs or a 100% hardware compatible clone (like the Thunderboard or
- SM Games). For an unknown card you may answer Y if the card claims
- to be Sound Blaster-compatible.
-
- Please read the file <file:Documentation/sound/Soundblaster>.
-
- You should also say Y here for cards based on the Avance Logic
- ALS-007 and ALS-1X0 chips (read <file:Documentation/sound/ALS>) and
- for cards based on ESS chips (read
- <file:Documentation/sound/ESS1868> and
- <file:Documentation/sound/ESS>). If you have an SB AWE 32 or SB AWE
- 64, say Y here and also to "AWE32 synth" below and read
- <file:Documentation/sound/INSTALL.awe>. If you have an IBM Mwave
- card, say Y here and read <file:Documentation/sound/mwave>.
-
- If you compile the driver into the kernel and don't want to use
- isapnp, you have to add "sb=<io>,<irq>,<dma>,<dma2>" to the kernel
- command line.
-
- You can say M here to compile this driver as a module; the module is
- called sb.o.
-
-Gravis Ultrasound support
-CONFIG_SOUND_GUS
- Say Y here for any type of Gravis Ultrasound card, including the GUS
- or GUS MAX. See also <file:Documentation/sound/ultrasound> for more
- information on configuring this card with modules.
-
- If you compile the driver into the kernel, you have to add
- "gus=<io>,<irq>,<dma>,<dma2>" to the kernel command line.
-
-MPU-401 support (NOT for SB16)
-CONFIG_SOUND_MPU401
- Be careful with this question. The MPU401 interface is supported by
- all sound cards. However, some natively supported cards have their
- own driver for MPU401. Enabling this MPU401 option with these cards
- will cause a conflict. Also, enabling MPU401 on a system that
- doesn't really have a MPU401 could cause some trouble. If your card
- was in the list of supported cards, look at the card specific
- instructions in the <file:Documentation/sound/README.OSS> file. It
- is safe to answer Y if you have a true MPU401 MIDI interface card.
-
- If you compile the driver into the kernel, you have to add
- "mpu401=<io>,<irq>" to the kernel command line.
-
-6850 UART support
-CONFIG_SOUND_UART6850
- This option enables support for MIDI interfaces based on the 6850
- UART chip. This interface is rarely found on sound cards. It's safe
- to answer N to this question.
-
- If you compile the driver into the kernel, you have to add
- "uart6850=<io>,<irq>" to the kernel command line.
-
-PSS (AD1848, ADSP-2115, ESC614) support
-CONFIG_SOUND_PSS
- Answer Y or M if you have an Orchid SW32, Cardinal DSP16, Beethoven
- ADSP-16 or some other card based on the PSS chipset (AD1848 codec +
- ADSP-2115 DSP chip + Echo ESC614 ASIC CHIP). For more information on
- how to compile it into the kernel or as a module see the file
- <file:Documentation/sound/PSS>.
-
- If you compile the driver into the kernel, you have to add
- "pss=<io>,<mssio>,<mssirq>,<mssdma>,<mpuio>,<mpuirq>" to the kernel
- command line.
-
-Enable PSS mixer (Beethoven ADSP-16 and other compatible)
-CONFIG_PSS_MIXER
- Answer Y for Beethoven ADSP-16. You may try to say Y also for other
- cards if they have master volume, bass, treble, and you can't
- control it under Linux. If you answer N for Beethoven ADSP-16, you
- can't control master volume, bass, treble and synth volume.
-
- If you said M to "PSS support" above, you may enable or disable this
- PSS mixer with the module parameter pss_mixer. For more information
- see the file <file:Documentation/sound/PSS>.
-
-Have DSPxxx.LD firmware file
-CONFIG_PSS_HAVE_BOOT
- If you have the DSPxxx.LD file or SYNTH.LD file for you card, say Y
- to include this file. Without this file the synth device (OPL) may
- not work.
-
-Full pathname of DSPxxx.LD firmware file
-CONFIG_PSS_BOOT_FILE
- Enter the full pathname of your DSPxxx.LD file or SYNTH.LD file,
- starting from /.
-
-Microsoft Sound System support
-CONFIG_SOUND_MSS
- Again think carefully before answering Y to this question. It's
- safe to answer Y if you have the original Windows Sound System card
- made by Microsoft or Aztech SG 16 Pro (or NX16 Pro). Also you may
- say Y in case your card is NOT among these:
-
- ATI Stereo F/X, AdLib, Audio Excell DSP16, Cardinal DSP16,
- Ensoniq SoundScape (and compatibles made by Reveal and Spea),
- Gravis Ultrasound, Gravis Ultrasound ACE, Gravis Ultrasound Max,
- Gravis Ultrasound with 16 bit option, Logitech Sound Man 16,
- Logitech SoundMan Games, Logitech SoundMan Wave, MAD16 Pro (OPTi
- 82C929), Media Vision Jazz16, MediaTriX AudioTriX Pro, Microsoft
- Windows Sound System (MSS/WSS), Mozart (OAK OTI-601), Orchid
- SW32, Personal Sound System (PSS), Pro Audio Spectrum 16, Pro
- Audio Studio 16, Pro Sonic 16, Roland MPU-401 MIDI interface,
- Sound Blaster 1.0, Sound Blaster 16, Sound Blaster 16ASP, Sound
- Blaster 2.0, Sound Blaster AWE32, Sound Blaster Pro, TI TM4000M
- notebook, ThunderBoard, Turtle Beach Tropez, Yamaha FM
- synthesizers (OPL2, OPL3 and OPL4), 6850 UART MIDI Interface.
-
- For cards having native support in VoxWare, consult the card
- specific instructions in <file:Documentation/sound/README.OSS>.
- Some drivers have their own MSS support and saying Y to this option
- will cause a conflict.
-
- If you compile the driver into the kernel, you have to add
- "ad1848=<io>,<irq>,<dma>,<dma2>[,<type>]" to the kernel command
- line.
-
-SGI Visual Workstation on-board audio
-CONFIG_SOUND_VWSND
- Say Y or M if you have an SGI Visual Workstation and you want to be
- able to use its on-board audio. Read
- <file:Documentation/sound/vwsnd> for more info on this driver's
- capabilities.
-
-NEC Vrc5477 AC97 sound
-CONFIG_SOUND_VRC5477
- Say Y here to enable sound support for the NEC Vrc5477 chip, an
- integrated, multi-function controller chip for MIPS CPUs. Works
- with the AC97 codec.
-
-Ensoniq SoundScape support
-CONFIG_SOUND_SSCAPE
- Answer Y if you have a sound card based on the Ensoniq SoundScape
- chipset. Such cards are being manufactured at least by Ensoniq, Spea
- and Reveal (Reveal makes also other cards).
-
- If you compile the driver into the kernel, you have to add
- "sscape=<io>,<irq>,<dma>,<mpuio>,<mpuirq>" to the kernel command
- line.
-
-MediaTriX AudioTriX Pro support
-CONFIG_SOUND_TRIX
- Answer Y if you have the AudioTriX Pro sound card manufactured
- by MediaTrix.
-
-Have TRXPRO.HEX firmware file
-CONFIG_TRIX_HAVE_BOOT
- The MediaTrix AudioTrix Pro has an on-board microcontroller which
- needs to be initialized by downloading the code from the file
- TRXPRO.HEX in the DOS driver directory. If you don't have the
- TRXPRO.HEX file handy you may skip this step. However, the SB and
- MPU-401 modes of AudioTrix Pro will not work without this file!
-
-Full pathname of TRXPRO.HEX firmware file
-CONFIG_TRIX_BOOT_FILE
- Enter the full pathname of your TRXPRO.HEX file, starting from /.
-
-Support for OPTi MAD16 and/or Mozart based cards
-CONFIG_SOUND_MAD16
- Answer Y if your card has a Mozart (OAK OTI-601) or MAD16 (OPTi
- 82C928 or 82C929 or 82C931) audio interface chip. These chips are
- quite common so it's possible that many no-name cards have one of
- them. In addition the MAD16 chip is used in some cards made by known
- manufacturers such as Turtle Beach (Tropez), Reveal (some models)
- and Diamond (latest ones). Note however that the Tropez sound cards
- have their own driver; if you have one of those, say N here and Y or
- M to "Full support for Turtle Beach WaveFront", below.
-
- If you compile the driver into the kernel, you have to add
- "mad16=<io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq>" to the
- kernel command line.
-
- See also <file:Documentation/sound/Opti> and
- <file:Documentation/sound/MAD16> for more information on setting
- these cards up as modules.
-
-Full support for Turtle Beach WaveFront (Tropez Plus, Tropez, Maui) synth/sound cards
-CONFIG_SOUND_WAVEFRONT
- Answer Y or M if you have a Tropez Plus, Tropez or Maui sound card
- and read the files <file:Documentation/sound/Wavefront> and
- <file:Documentation/sound/Tropez+>.
-
-Support MIDI in older MAD16 based cards (requires SB)
-CONFIG_MAD16_OLDCARD
- Answer Y (or M) if you have an older card based on the C928 or
- Mozart chipset and you want to have MIDI support. If you enable this
- option you also need to enable support for Sound Blaster.
-
-Support for Crystal CS4232 based (PnP) cards
-CONFIG_SOUND_CS4232
- Say Y here if you have a card based on the Crystal CS4232 chip set,
- which uses its own Plug and Play protocol.
-
- If you compile the driver into the kernel, you have to add
- "cs4232=<io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq>" to the kernel
- command line.
-
- See <file:Documentation/sound/CS4232> for more information on
- configuring this card.
-
-Support for Crystal CS4297a on SiByte syncser
-CONFIG_SOUND_BCM_CS4297A
- The BCM91250A has a Crystal CS4297a on synchronous serial port B (in
- addition to the DB-9 serial port). Say Y or M here to enable the
- sound chip instead of the UART. Also note that CONFIG_KGDB should
- not be enabled at the same time, since it also attempts to use this
- UART port.
-
-Support for Yamaha OPL3-SA2 and SA3 based PnP cards
-CONFIG_SOUND_OPL3SA2
- Say Y or M if you have a card based on one of these Yamaha sound
- chipsets or the "SAx", which is actually a SA3. Read
- <file:Documentation/sound/OPL3-SA2> for more information on
- configuring these cards.
-
- If you compile the driver into the kernel and do not also
- configure in the optional ISA PnP support, you will have to add
- "opl3sa2=<io>,<irq>,<dma>,<dma2>,<mssio>,<mpuio>" to the kernel
- command line.
-
-Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers
-CONFIG_SOUND_MAUI
- Say Y here if you have a Turtle Beach Wave Front, Maui, or Tropez
- sound card.
-
- If you compile the driver into the kernel, you have to add
- "maui=<io>,<irq>" to the kernel command line.
-
-Have OSWF.MOT firmware file
-CONFIG_MAUI_HAVE_BOOT
- Turtle Beach Maui and Tropez sound cards have a microcontroller
- which needs to be initialized prior to use. OSWF.MOT is a file
- distributed with the card's DOS/Windows drivers. Answer Y if you
- have this file.
-
-Full pathname of OSWF.MOT firmware file
-CONFIG_MAUI_BOOT_FILE
- Enter the full pathname of your OSWF.MOT file, starting from /.
-
-Support for Turtle Beach MultiSound Classic, Tahiti, Monterey
-CONFIG_SOUND_MSNDCLAS
- Say M here if you have a Turtle Beach MultiSound Classic, Tahiti or
- Monterey (not for the Pinnacle or Fiji).
-
- See <file:Documentation/sound/MultiSound> for important information
- about this driver. Note that it has been discontinued, but the
- Voyetra Turtle Beach knowledge base entry for it is still available
- at <http://www.voyetra-turtle-beach.com/site/kb_ftp/790.asp>.
-
-MSND Classic I/O
-CONFIG_MSNDCLAS_IO
- I/O port address for the MultiSound Classic and related cards.
-
-MSND Classic IRQ
-CONFIG_MSNDCLAS_IRQ
- Interrupt Request line for the MultiSound Classic and related cards.
-
-MSND Classic memory address
-CONFIG_MSNDCLAS_MEM
- Memory-mapped I/O base address for the MultiSound Classic and
- related cards.
-
-Full pathname of MSNDINIT.BIN firmware file
-CONFIG_MSNDCLAS_INIT_FILE
- The MultiSound cards have two firmware files which are required for
- operation, and are not currently included. These files can be
- obtained from Turtle Beach. See
- <file:Documentation/sound/MultiSound> for information on how to
- obtain this.
-
-Full pathname of MSNDPERM.BIN firmware file
-CONFIG_MSNDCLAS_PERM_FILE
- The MultiSound cards have two firmware files which are required for
- operation, and are not currently included. These files can be
- obtained from Turtle Beach. See
- <file:Documentation/sound/MultiSound> for information on how to
- obtain this.
-
-Support for Turtle Beach MultiSound Pinnacle, Fiji
-CONFIG_SOUND_MSNDPIN
- Say M here if you have a Turtle Beach MultiSound Pinnacle or Fiji.
- See <file:Documentation/sound/MultiSound> for important information
- about this driver. Note that it has been discontinued, but the
- Voyetra Turtle Beach knowledge base entry for it is still available
- at <http://www.voyetra-turtle-beach.com/site/kb_ftp/600.asp>.
-
-MSND Pinnacle IDE I/O 0
-CONFIG_MSNDPIN_IDE_IO0
- CD-ROM drive 0 memory-mapped I/O base address for the MultiSound
- Pinnacle and Fiji sound cards.
-
-MSND Pinnacle IDE I/O 1
-CONFIG_MSNDPIN_IDE_IO1
- CD-ROM drive 1 memory-mapped I/O base address for the MultiSound
- Pinnacle and Fiji sound cards.
-
-MSND Pinnacle IDE IRQ
-CONFIG_MSNDPIN_IDE_IRQ
- Interrupt request number for the IDE CD-ROM interface on the
- MultiSound Pinnacle and Fiji sound cards.
-
-MSND Pinnacle I/O
-CONFIG_MSNDPIN_IO
- Memory-mapped I/O base address for the primary synthesizer on
- MultiSound Pinnacle and Fiji sound cards.
-
-MSND Pinnacle MPU I/O
-CONFIG_MSNDPIN_MPU_IO
- Memory-mapped I/O base address for the Kurzweil daughterboard
- synthesizer on MultiSound Pinnacle and Fiji sound cards.
-
-MSND Pinnacle MPU IRQ
-CONFIG_MSNDPIN_MPU_IRQ
- Iinterrupt request number for the Kurzweil daughterboard
- synthesizer on MultiSound Pinnacle and Fiji sound cards.
-
-MSND Pinnacle IRQ
-CONFIG_MSNDPIN_IRQ
- Interrupt request line for the primary synthesizer on MultiSound
- Pinnacle and Fiji sound cards.
-
-MSND Pinnacle joystick I/O
-CONFIG_MSNDPIN_JOYSTICK_IO
- Memory-mapped I/O base address for the joystick port on MultiSound
- Pinnacle and Fiji sound cards.
-
-MSND Pinnacle memory
-CONFIG_MSNDPIN_MEM
- Memory-mapped I/O base address for the primary synthesizer on
- MultiSound Pinnacle and Fiji sound cards.
-
-Full pathname of PNDSPINI.BIN firmware file
-CONFIG_MSNDPIN_INIT_FILE
- The MultiSound cards have two firmware files which are required
- for operation, and are not currently included. These files can be
- obtained from Turtle Beach. See
- <file:Documentation/sound/MultiSound> for information on how to
- obtain this.
-
-Full pathname of PNDSPERM.BIN firmware file
-CONFIG_MSNDPIN_PERM_FILE
- The MultiSound cards have two firmware files which are required for
- operation, and are not currently included. These files can be
- obtained from Turtle Beach. See
- <file:Documentation/sound/MultiSound> for information on how to
- obtain this.
-
-MSND Pinnacle has S/PDIF I/O
-CONFIG_MSNDPIN_DIGITAL
- If you have the S/PDIF daughter board for the Pinnacle or Fiji,
- answer Y here; otherwise, say N. If you have this, you will be able
- to play and record from the S/PDIF port (digital signal). See
- <file:Documentation/sound/MultiSound> for information on how to make
- use of this capability.
-
-MSND Pinnacle non-PnP Mode
-CONFIG_MSNDPIN_NONPNP
- The Pinnacle and Fiji card resources can be configured either with
- PnP, or through a configuration port. Say Y here if your card is NOT
- in PnP mode. For the Pinnacle, configuration in non-PnP mode allows
- use of the IDE and joystick peripherals on the card as well; these
- do not show up when the card is in PnP mode. Specifying zero for any
- resource of a device will disable the device. If you are running the
- card in PnP mode, you must say N here and use isapnptools to
- configure the card's resources.
-
-MSND Pinnacle config port
-CONFIG_MSNDPIN_CFG
- This is the port which the Pinnacle and Fiji uses to configure the
- card's resources when not in PnP mode. If your card is in PnP mode,
- then be sure to say N to the previous option, "MSND Pinnacle Non-PnP
- Mode".
-
-MSND buffer size (kB)
-CONFIG_MSND_FIFOSIZE
- Configures the size of each audio buffer, in kilobytes, for
- recording and playing in the MultiSound drivers (both the Classic
- and Pinnacle). Larger values reduce the chance of data overruns at
- the expense of overall latency. If unsure, use the default.
-
-Yamaha FM synthesizer (YM3812/OPL-3) support
-CONFIG_SOUND_YM3812
- Answer Y if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4).
- Answering Y is usually a safe and recommended choice, however some
- cards may have software (TSR) FM emulation. Enabling FM support with
- these cards may cause trouble (I don't currently know of any such
- cards, however). Please read the file
- <file:Documentation/sound/OPL3> if your card has an OPL3 chip.
-
- If you compile the driver into the kernel, you have to add
- "opl3=<io>" to the kernel command line.
-
- If unsure, say Y.
-
-ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)
-CONFIG_SOUND_ACI_MIXER
- ACI (Audio Command Interface) is a protocol used to communicate with
- the microcontroller on some sound cards produced by miro and
- Cardinal Technologies. The main function of the ACI is to control
- the mixer and to get a product identification.
-
- This VoxWare ACI driver currently supports the ACI functions on the
- miroSOUND PCM1-pro, PCM12 and PCM20 radio. On the PCM20 radio, ACI
- also controls the radio tuner. This is supported in the video4linux
- miropcm20 driver (say M or Y here and go back to "Multimedia
- devices" -> "Radio Adapters").
-
- This driver is also available as a module and will be called aci.o.
-
-SB32/AWE support
-CONFIG_SOUND_AWE32_SYNTH
- Say Y here if you have a Sound Blaster SB32, AWE32-PnP, SB AWE64 or
- similar sound card. See <file:Documentation/sound/README.awe>,
- <file:Documentation/sound/AWE32> and the Soundblaster-AWE
- mini-HOWTO, available from <http://www.tldp.org/docs.html#howto>
- for more info.
-
-Gallant Audio Cards (SC-6000 and SC-6600 based)
-CONFIG_SOUND_AEDSP16
- Answer Y if you have a Gallant's Audio Excel DSP 16 card. This
- driver supports Audio Excel DSP 16 but not the III nor PnP versions
- of this card.
-
- The Gallant's Audio Excel DSP 16 card can emulate either an SBPro or
- a Microsoft Sound System card, so you should have said Y to either
- "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
- or "Microsoft Sound System support", above, and you need to answer
- the "MSS emulation" and "SBPro emulation" questions below
- accordingly. You should say Y to one and only one of these two
- questions.
-
- Read the <file:Documentation/sound/README.OSS> file and the head of
- <file:drivers/sound/aedsp16.c> as well as
- <file:Documentation/sound/AudioExcelDSP16> to get more information
- about this driver and its configuration.
-
-Audio Excel DSP 16 (SBPro emulation)
-CONFIG_AEDSP16_SBPRO
- Answer Y if you want your audio card to emulate Sound Blaster Pro.
- You should then say Y to "100% Sound Blaster compatibles
- (SB16/32/64, ESS, Jazz16) support" and N to "Audio Excel DSP 16 (MSS
- emulation)".
-
- If you compile the driver into the kernel, you have to add
- "aedsp16=<io>,<irq>,<dma>,<mssio>,<mpuio>,<mouirq>" to the kernel
- command line.
-
-Audio Excel DSP 16 (MSS emulation)
-CONFIG_AEDSP16_MSS
- Answer Y if you want your audio card to emulate Microsoft Sound
- System. You should then say Y to "Microsoft Sound System support"
- and say N to "Audio Excel DSP 16 (SBPro emulation)".
-
-SC-6600 based audio cards (new Audio Excel DSP 16)
-CONFIG_SC6600
- The SC6600 is the new version of DSP mounted on the Audio Excel DSP
- 16 cards. Find in the manual the FCC ID of your audio card and
- answer Y if you have an SC6600 DSP.
-
-SC-6600 Joystick Interface
-CONFIG_SC6600_JOY
- Say Y here in order to use the joystick interface of the Audio Excel
- DSP 16 card.
-
-SC-6600 CD-ROM Interface
-CONFIG_SC6600_CDROM (4=None, 3=IDE, 1=Panasonic, 0=Sony)
- This is used to activate the CD-ROM interface of the Audio Excel
- DSP 16 card. Enter: 0 for Sony, 1 for Panasonic, 2 for IDE, 4 for no
- CD-ROM present.
-
-SC-6600 CD-ROM Interface I/O Address
-CONFIG_SC6600_CDROMBASE
- Base I/O port address for the CD-ROM interface of the Audio Excel
- DSP 16 card.
-
-Audio Excel DSP 16 (MPU401 emulation)
-CONFIG_AEDSP16_MPU401
- Answer Y if you want your audio card to emulate the MPU-401 midi
- interface. You should then also say Y to "MPU-401 support".
-
- Note that the I/O base for MPU-401 support of aedsp16 is the same
- you have selected for "MPU-401 support". If you are using this
- driver as a module you have to specify the MPU I/O base address with
- the parameter 'mpu_base=0xNNN'.
-
-SC-6600 CDROM Interface (4=None, 3=IDE, 1=Panasonic, 0=?Sony?)
-CONFIG_SC6600_CDROM
- This is used to activate the CD-ROM interface of the Audio Excel
- DSP 16 card. Enter: 0 for Sony, 1 for Panasonic, 2 for IDE, 4 for no
- CD-ROM present.
-
-C-Media PCI (CMI8338/8738)
-CONFIG_SOUND_CMPCI
- Say Y or M if you have a PCI sound card using the CMI8338
- or the CMI8738 chipset. Data on these chips are available at
- <http://www.cmedia.com.tw/>.
-
- A userspace utility to control some internal registers of these
- chips is available at
- <http://member.nifty.ne.jp/Breeze/softwares/unix/cmictl-e.html>.
-
-Support CMI8738 based audio cards
-CONFIG_SOUND_CMPCI_CM8738
- Say Y or M if you have a PCI sound card using the CMI8338
- or the CMI8378 chipset. Data on this chip is available at
- <http://www.cmedia.com.tw/doc8738.htm>.
-
- A userspace utility to control some internal registers of these
- chips is available at
- <http://member.nifty.ne.jp/Breeze/softwares/unix/cmictl-e.html>.
-
-Enable joystick
-CONFIG_SOUND_CMPCI_JOYSTICK
- Say here in order to enable the joystick port on a sound crd using
- the CMI8338 or the CMI8738 chipset. Data on these chips are
- available at <http://www.cmedia.com.tw/>.
-
-Number of speakers (2, 4, 5, 6)
-CONFIG_SOUND_CMPCI_SPEAKERS
- Specify the number of speaker channels you want the card to drive,
- as an integer.
-
-Enable S/PDIF loop for CMI8738
-CONFIG_SOUND_CMPCI_SPDIFLOOP
- Enable loopback from SPDIF in to SPDIF out. For discussion, see
- "The 8738 Audio SPDIF In/Out Technical Data" on the technical
- support page at <http://www.cmedia.com.tw/>.
-
- A userspace utility to control even more internal registers of these
- chips is available at
- <http://member.nifty.ne.jp/Breeze/softwares/unix/cmictl-e.html>.
- This package will among other things help you enable SPDIF
- out/in/loop/monitor.
-
-Enable legacy FM
-CONFIG_SOUND_CMPCI_FM
- Say Y here to enable the legacy FM (frequency-modulation) synthesis
- support on a card using the CMI8338 or CMI8378 chipset.
-
-FM I/O 388, 3C8, 3E0, 3E8
-CONFIG_SOUND_CMPCI_FMIO
- Set the base I/O address for FM synthesis control on a card using
- the CMI8338 or CMI8378 chipset.
-
-Enable legacy MPU-401
-CONFIG_SOUND_CMPCI_MIDI
- Say Y here to enable the legacy MP401 MIDI synthesis support on a
- card using the CMI8338 or CMI8378 chipset.
-
-MPU-401 I/O 330, 320, 310, 300
-CONFIG_SOUND_CMPCI_MPUIO
- Set the base I/O address for MP401 MIDI synthesis control on a card
- using the CMI8338 or CMI8378 chipset.
-
-Inverse S/PDIF in for CMI8738
-CONFIG_SOUND_CMPCI_SPDIFINVERSE
- Say Y here to have the driver invert the signal presented on SPDIF IN
- of a card using the CMI8338 or CMI8378 chipset.
-
-Use Line-in as Read-out
-CONFIG_SOUND_CMPCI_LINE_REAR
- Say Y here to enable using line-in jack as an output jack for a rear
- speaker.
-
-Use Line-in as Bass
-CONFIG_SOUND_CMPCI_LINE_BASS
- Say Y here to enable using line-in jack as an output jack for a bass
- speaker.
-
-Creative SBLive! (EMU10K1) based PCI sound cards
-CONFIG_SOUND_EMU10K1
- Say Y or M if you have a PCI sound card using the EMU10K1 chipset,
- such as the Creative SBLive!, SB PCI512 or Emu-APS.
-
- For more information on this driver and the degree of support for
- the different card models please check:
-
- <http://sourceforge.net/projects/emu10k1/>
-
- It is now possible to load dsp microcode patches into the EMU10K1
- chip. These patches are used to implement real time sound
- processing effects which include for example: signal routing,
- bass/treble control, AC3 passthrough, ...
- Userspace tools to create new patches and load/unload them can be
- found in the emu-tools package at the above URL.
-
-Creative SBLive! (EMU10K1) MIDI
-CONFIG_MIDI_EMU10K1
- Say Y if you want to be able to use the OSS /dev/sequencer
- interface. This code is still experimental.
-
-Crystal SoundFusion (CS4280/461x)
-CONFIG_SOUND_FUSION
- This module drives the Crystal SoundFusion devices (CS4280/46xx
- series) when wired as native sound drivers with AC97 codecs. If
- this driver does not work try the CS4232 driver.
-
-Ensoniq AudioPCI (ES1370) based PCI sound cards
-CONFIG_SOUND_ES1370
- Say Y or M if you have a PCI sound card utilizing the Ensoniq
- ES1370 chipset, such as Ensoniq's AudioPCI (non-97). To find
- out if your sound card uses an ES1370 without removing your
- computer's cover, use lspci -n and look for the PCI ID
- 1274:5000. Since Ensoniq was bought by Creative Labs,
- Sound Blaster 64/PCI models are either ES1370 or ES1371 based.
- This driver differs slightly from OSS/Free, so PLEASE READ
- <file:Documentation/sound/es1370>.
-
-Ensoniq AudioPCI 97 (ES1371) based sound cards
-CONFIG_SOUND_ES1371
- Say Y or M if you have a PCI sound card utilizing the Ensoniq
- ES1371 chipset, such as Ensoniq's AudioPCI97. To find out if
- your sound card uses an ES1371 without removing your computer's
- cover, use lspci -n and look for the PCI ID 1274:1371. Since
- Ensoniq was bought by Creative Labs, Sound Blaster 64/PCI
- models are either ES1370 or ES1371 based. This driver differs
- slightly from OSS/Free, so PLEASE READ
- <file:Documentation/sound/es1371>.
-
-ESS Solo1 based PCI sound cards (eg. SC1938)
-CONFIG_SOUND_ESSSOLO1
- Say Y or M if you have a PCI sound card utilizing the ESS Technology
- Solo1 chip. To find out if your sound card uses a
- Solo1 chip without removing your computer's cover, use
- lspci -n and look for the PCI ID 125D:1969. This driver
- differs slightly from OSS/Free, so PLEASE READ
- <file:Documentation/sound/solo1>.
-
-S3 SonicVibes based PCI sound cards
-CONFIG_SOUND_SONICVIBES
- Say Y or M if you have a PCI sound card utilizing the S3
- SonicVibes chipset. To find out if your sound card uses a
- SonicVibes chip without removing your computer's cover, use
- lspci -n and look for the PCI ID 5333:CA00. This driver
- differs slightly from OSS/Free, so PLEASE READ
- <file:Documentation/sound/sonicvibes>.
-
-Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core
-CONFIG_SOUND_TRIDENT
- Say Y or M if you have a PCI sound card utilizing the Trident
- 4DWave-DX/NX chipset or your mother board chipset has SiS 7018
- or ALi 5451 built-in. The SiS 7018 PCI Audio Core is embedded
- in SiS960 Super South Bridge and SiS540/630 Single Chipset.
- The ALi 5451 PCI Audio Core is embedded in ALi M1535, M1535D,
- M1535+ or M1535D+ South Bridge.
-
- Use lspci -n to find out if your sound card or chipset uses
- Trident 4DWave or SiS 7018. PCI ID 1023:2000 or 1023:2001 stands
- for Trident 4Dwave. PCI ID 1039:7018 stands for SiS7018. PCI ID
- 10B9:5451 stands for ALi5451.
-
- This driver supports S/PDIF in/out (record/playback) for ALi 5451
- embedded in ALi M1535+ and M1535D+. Note that they aren't all
- enabled by default; you can enable them by saying Y to "/proc file
- system support" and "Sysctl support", and after the /proc file
- system has been mounted, executing the command
-
- command what is enabled
-
- echo 0>/proc/ALi5451 pcm out is also set to S/PDIF out. (Default).
-
- echo 1>/proc/ALi5451 use S/PDIF out to output pcm data.
-
- echo 2>/proc/ALi5451 use S/PDIF out to output non-pcm data.
- (AC3...).
-
- echo 3>/proc/ALi5451 record from Ac97 in(MIC, Line in...).
- (Default).
-
- echo 4>/proc/ALi5451 no matter Ac97 settings, record from S/PDIF
- in.
-
-
- This driver differs slightly from OSS/Free, so PLEASE READ the
- comments at the top of <file:drivers/sound/trident.c>.
-
-Rockwell WaveArtist
-CONFIG_SOUND_WAVEARTIST
- Say Y here to include support for the Rockwell WaveArtist sound
- system. This driver is mainly for the NetWinder.
-
-VIA 82Cxxx Audio Codec
-CONFIG_SOUND_VIA82CXXX
- Say Y here to include support for the audio codec found on VIA
- 82Cxxx-based chips. Typically these are built into a motherboard.
-
- DO NOT select Sound Blaster or Adlib with this driver, unless
- you have a Sound Blaster or Adlib card in addition to your VIA
- audio chip.
-
-VIA 82C686 MIDI
-CONFIG_MIDI_VIA82CXXX
- Answer Y to use the MIDI interface of the Via686. You may need to
- enable this in the BIOS before it will work. This is for connection
- to external MIDI hardware, and is not required for software playback
- of MIDI files.
-
-NeoMagic 256AV/256ZX sound chipsets
-CONFIG_SOUND_NM256
- Say M here to include audio support for the NeoMagic 256AV/256ZX
- chipsets. These are the audio chipsets found in the Sony
- Z505S/SX/DX, some Sony F-series, and the Dell Latitude CPi and CPt
- laptops. It includes support for an AC97-compatible mixer and an
- apparently proprietary sound engine.
-
- See <file:Documentation/sound/NM256> for further information.
-
-ESS Maestro, Maestro2, Maestro2E driver
-CONFIG_SOUND_MAESTRO
- Say Y or M if you have a sound system driven by ESS's Maestro line
- of PCI sound chips. These include the Maestro 1, Maestro 2, and
- Maestro 2E. See <file:Documentation/sound/Maestro> for more
- details.
-
-ESS Maestro3/Allegro driver
-CONFIG_SOUND_MAESTRO3
- Say Y or M if you have a sound system driven by ESS's Maestro 3
- PCI sound chip.
-
-ForteMedia FM801 driver
-CONFIG_SOUND_FORTE
- Say Y or M if you want driver support for the ForteMedia FM801 PCI
- audio controller (Abit AU10, Genius Sound Maker, HP Workstation
- zx2000, and others).
-
-Adlib Cards
-CONFIG_SOUND_ADLIB
- Includes ASB 64 4D. Information on programming AdLib cards is
- available at <http://www.itsnet.com/home/ldragon/Specs/adlib.html>.
-
-Crystal Sound CS4281
-CONFIG_SOUND_CS4281
- Picture and feature list at
- <http://www.pcbroker.com/crystal4281.html>.
-
-16 bit sampling option of GUS (_NOT_ GUS MAX)
-CONFIG_SOUND_GUS16
- Support for Gravis Ulstrasound (GUS) cards (other than the GUS),
- sampling at 16-bit width.
-
-GUS MAX support
-CONFIG_SOUND_GUSMAX
- Support for Gravis Ulstrasound MAX.
-
-Intel ICH audio support
-CONFIG_SOUND_ICH
- Supports the following chipsets:
-
- Intel ICH 82801AA
- Intel ICH 82901AB
- Intel 440 MX
- Intel ICH2
- Intel ICH3
- SiS 7012
- NVidia nForce
- AMD 768
-
- These are audio drivers for integral audio in chipsets of motherboards.
-
- Intel's I/O Controller Hub (ICH) is used on 810/815/820/840/845/845D/850 motherboards.
- SiS 7012 is used on 645/735/745 motherboards.
-
-Verbose initialization
-CONFIG_SOUND_TRACEINIT
- Verbose soundcard initialization -- affects the format of autoprobe
- and initialization messages at boot time.
-
-TV card (bt848) mixer support
-CONFIG_SOUND_TVMIXER
- Support for audio mixer facilities on the BT848 TV frame-grabber
- card.
-
-VIDC 16-bit sound
-CONFIG_SOUND_VIDC
- 16-bit support for the VIDC onboard sound hardware found on Acorn
- machines.
-
-Loopback MIDI device support
-CONFIG_SOUND_VMIDI
- Support for MIDI loopback on port 1 or 2.
-
-Yamaha YMF7xx PCI audio (native mode)
-CONFIG_SOUND_YMFPCI
- Support for Yamaha cards with the following chipsets: YMF724,
- YMF724F, YMF740, YMF740C, YMF744, and YMF754.
-
- Two common cards that use this type of chip are Waveforce 192XG,
- and Waveforce 192 Digital.
-
-Yamaha PCI legacy ports support
-CONFIG_SOUND_YMFPCI_LEGACY
- Support for YMF7xx PCI cards emulating an MP401.
-
-RME Hammerfall (RME96XX) support
-CONFIG_SOUND_RME96XX
- Say Y or M if you have a Hammerfall or Hammerfall light multichannel card
- from RME. If you want to acess advanced features of the card, read
- Documentation/sound/rme96xx.
-
-Are you using a crosscompiler
-CONFIG_CROSSCOMPILE
- Say Y here if you are compiling the kernel on a different
- architecture than the one it is intended to run on.
-
-Kernel support for Linux/MIPS 32-bit binary compatibility
-CONFIG_MIPS32_COMPAT
- Select this option if you want Linux/MIPS 32-bit binary
- compatibility. Since all software available for Linux/MIPS is
- currently 32-bit you should say Y here.
-
-Kernel support for o32 binaries
-CONFIG_MIPS32_O32
- Select this option if you want to run o32 binaries. These are pure
- 32-bit binaries as used by the 32-bit Linux/MIPS port. Most of
- existing binaries are in this format.
-
- If unsure, say Y.
-
-Kernel support for n32 binaries
-CONFIG_MIPS32_N32
- Select this option if you want to run n32 binaries. These are
- 64-bit binaries using 32-bit quantities for addressing and certain
- data that would normally be 64-bit. They are used in special
- cases.
-
- If unsure, say N.
-
-Build fp exception handler module
-CONFIG_MIPS_FPE_MODULE
- Build the floating point exception handler module. This option is
- only useful for people working on the floating point exception
- handler. If you don't, say N.
-
-Galileo EV64120 Evaluation board
-CONFIG_MIPS_EV64120
- This is an evaluation board based on the Galileo GT-64120
- single-chip system controller that contains a MIPS R5000 compatible
- core running at 75/100MHz. Their website is located at
- <http://www.marvell.com/>. Say Y here if you wish to build a
- kernel for this platform.
-
-Galileo EV96100 Evaluation board
-CONFIG_MIPS_EV96100
- This is an evaluation board based on the Galielo GT-96100 LAN/WAN
- communications controllers containing a MIPS R5000 compatible core
- running at 83MHz. Their website is <http://www.marvell.com/>. Say Y
- here if you wish to build a kernel for this platform.
-
-Support for ITE 8172G board
-CONFIG_MIPS_ITE8172
- Ths is an evaluation board made by ITE <http://www.ite.com.tw/>
- with ATX form factor that utilizes a MIPS R5000 to work with its
- ITE8172G companion internet appliance chip. The MIPS core can be
- either a NEC Vr5432 or QED RM5231. Say Y here if you wish to build
- a kernel for this platform.
-
-Support for Globespan IVR board
-CONFIG_MIPS_IVR
- This is an evaluation board built by Globespan to showcase their
- iVR (Internet Video Recorder) design. It utilizes a QED RM5231
- R5000 MIPS core. More information can be found out their website
- located at <http://www.globespan.net/>. Say Y here if you wish to
- build a kernel for this platform.
-
-Support for Alchemy Semi PB1000 board
-CONFIG_MIPS_PB1000
- This is an evaluation board built by Alchemy Semiconductor to
- showcase their Au1000 Internet Edge Processor. It is SOC design
- containing a MIPS32 core running at 266/400/500MHz with many
- integrated peripherals. Further information can be found at their
- website, <http://www.alchemysemi.com/>. Say Y here if you wish to
- build a kernel for this platform.
-
-Support for Philips Nino
-CONFIG_NINO
- Say Y here to select a kernel for the Philips Nino Palm PC. The
- website at <http://www.realitydiluted.com/projects/nino/index.html>
- will have more information.
-
-# Choice: nino_model
-CONFIG_NINO_4MB
- Say Y here to build a kernel specifically for Nino Palm PCs with
- 4MB of memory. These include models 300/301/302/319.
-
-Model-200/210/312/320/325/350/390
-CONFIG_NINO_8MB
- Say Y here to build a kernel specifically for Nino Palm PCs with
- 8MB of memory. These include models 200/210/312/320/325/350/390.
-
-Model-500/510
-CONFIG_NINO_16MB
- Say Y here to build a kernel specifically for Nino 500/501 color
- Palm PCs from Philips (INCOMPLETE).
-Model-300/301/302/319
-
-Enable run-time debugging
-CONFIG_RUNTIME_DEBUG
- If you say Y here, some debugging macros will do run-time checking.
- If you say N here, those macros will mostly turn to no-ops. Currently
- supported by MIPS arch. See include/asm-mips/debug.h for debuging macros.
- If unsure, say N.
-
-Run uncached
-CONFIG_MIPS_UNCACHED
- If you say Y here there kernel will disable all CPU caches. This will
- reduce the system's performance dramatically but can help finding
- otherwise hard to track bugs. It can also useful if you're doing
- hardware debugging with a logic analyzer and need to see all traffic
- on the bus.
-
-AU1000 ethernet controller on SGI MIPS system
-CONFIG_MIPS_AU1000_ENET
- If you have an Alchemy Semi AU1000 ethernet controller
- on an SGI MIPS system, say Y. Otherwise, say N.
-
-WD93 SCSI Controller on SGI MIPS system
-CONFIG_SGIWD93_SCSI
- If you have a Western Digital WD93 SCSI controller on
- an SGI MIPS system, say Y. Otherwise, say N.
-
-Magic System Request Key support
-CONFIG_MAGIC_SYSRQ
- If you say Y here, you will have some control over the system even
- if the system crashes for example during kernel debugging (e.g., you
- will be able to flush the buffer cache to disk, reboot the system
- immediately or dump some status information). This is accomplished
- by pressing various keys while holding SysRq (Alt+PrintScreen). It
- also works on a serial console (on PC hardware at least), if you
- send a BREAK and then within 5 seconds a command keypress. The
- keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
- unless you really know what this hack does.
-
-ISDN support
-CONFIG_ISDN
- ISDN ("Integrated Services Digital Networks", called RNIS in France)
- is a special type of fully digital telephone service; it's mostly
- used to connect to your Internet service provider (with SLIP or
- PPP). The main advantage is that the speed is higher than ordinary
- modem/telephone connections, and that you can have voice
- conversations while downloading stuff. It only works if your
- computer is equipped with an ISDN card and both you and your service
- provider purchased an ISDN line from the phone company. For
- details, read <http://alumni.caltech.edu/~dank/isdn/> on the WWW.
-
- This driver allows you to use an ISDN-card for networking
- connections and as dialin/out device. The isdn-tty's have a built
- in AT-compatible modem emulator. Network devices support autodial,
- channel-bundling, callback and caller-authentication without having
- a daemon running. A reduced T.70 protocol is supported with tty's
- suitable for German BTX. On D-Channel, the protocols EDSS1
- (Euro-ISDN) and 1TR6 (German style) are supported. See
- <file:Documentation/isdn/README> for more information.
-
- If you want to compile the ISDN code as a module ( = code which can
- be inserted in and removed from the running kernel whenever you
- want), say M here and read <file:Documentation/modules.txt>. The
- module will be called isdn.o. If unsure, say N.
-
-Support synchronous PPP
-CONFIG_ISDN_PPP
- Over digital connections such as ISDN, there is no need to
- synchronize sender and recipient's clocks with start and stop bits
- as is done over analog telephone lines. Instead, one can use
- "synchronous PPP". Saying Y here will include this protocol. This
- protocol is used by Cisco and Sun for example. So you want to say Y
- here if the other end of your ISDN connection supports it. You will
- need a special version of pppd (called ipppd) for using this
- feature. See <file:Documentation/isdn/README.syncppp> and
- <file:Documentation/isdn/syncPPP.FAQ> for more information.
-
-PPP filtering for ISDN
-CONFIG_IPPP_FILTER
- Say Y here if you want to be able to filter the packets passing over
- IPPP interfaces. This allows you to control which packets count as
- activity (i.e. which packets will reset the idle timer or bring up
- a demand-dialled link) and which packets are to be dropped entirely.
- You need to say Y here if you wish to use the pass-filter and
- active-filter options to ipppd.
-
- If unsure, say N.
-
-Support generic MP (RFC 1717)
-CONFIG_ISDN_MPP
- With synchronous PPP enabled, it is possible to increase throughput
- by bundling several ISDN-connections, using this protocol. See
- <file:Documentation/isdn/README.syncppp> for more information.
-
-Use VJ-compression with synchronous PPP
-CONFIG_ISDN_PPP_VJ
- This enables Van Jacobson header compression for synchronous PPP.
- Say Y if the other end of the connection supports it.
-
-Support BSD compression
-CONFIG_ISDN_PPP_BSDCOMP
- Support for the BSD-Compress compression method for PPP, which uses
- the LZW compression method to compress each PPP packet before it is
- sent over the wire. The machine at the other end of the PPP link
- (usually your ISP) has to support the BSD-Compress compression
- method as well for this to be useful. Even if they don't support it,
- it is safe to say Y here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called isdn_bsdcomp.o.
-
-Support audio via ISDN
-CONFIG_ISDN_AUDIO
- If you say Y here, the modem-emulator will support a subset of the
- EIA Class 8 Voice commands. Using a getty with voice-support
- (mgetty+sendfax by gert@greenie.muc.de with an extension, available
- with the ISDN utility package for example), you will be able to use
- your Linux box as an ISDN-answering machine. Of course, this must be
- supported by the lowlevel driver also. Currently, the HiSax driver
- is the only voice-supporting driver. See
- <file:Documentation/isdn/README.audio> for more information.
-
-X.25 PLP on top of ISDN
-CONFIG_ISDN_X25
- This feature provides the X.25 protocol over ISDN connections.
- See <file:Documentation/isdn/README.x25> for more information
- if you are thinking about using this.
-
-ISDN diversion services support
-CONFIG_ISDN_DIVERSION
- This option allows you to use some supplementary diversion
- services in conjunction with the HiSax driver on an EURO/DSS1
- line.
-
- Supported options are CD (call deflection), CFU (Call forward
- unconditional), CFB (Call forward when busy) and CFNR (call forward
- not reachable). Additionally the actual CFU, CFB and CFNR state may
- be interrogated.
-
- The use of CFU, CFB, CFNR and interrogation may be limited to some
- countries. The keypad protocol is still not implemented. CD should
- work in all countries if the service has been subscribed to.
-
- Please read the file <file:Documentation/isdn/README.diversion>.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called dss1_divert.o.
-
-ICN 2B and 4B support
-CONFIG_ISDN_DRV_ICN
- This enables support for two kinds of ISDN-cards made by a German
- company called ICN. 2B is the standard version for a single ISDN
- line with two B-channels, 4B supports two ISDN lines. For running
- this card, additional firmware is necessary, which has to be
- downloaded into the card using a utility which is distributed
- separately. See <file:Documentation/isdn/README> and
- <file:Documentation/isdn/README.icn> for more
- information.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called icn.o.
-
-isdnloop support
-CONFIG_ISDN_DRV_LOOP
- This driver provides a virtual ISDN card. Its primary purpose is
- testing of linklevel features or configuration without getting
- charged by your service-provider for lots of phone calls.
- You need will need the loopctrl utility from the latest isdn4k-utils
- package to set up this driver.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called isdnloop.o.
-
-HiSax SiemensChipSet driver support
-CONFIG_ISDN_DRV_HISAX
- This is a driver supporting the Siemens chipset on various
- ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles
- S0-16.3, Teles S0-8, Teles/Creatix PnP, ITK micro ix1 and many
- compatibles).
-
- HiSax is just the name of this driver, not the name of any hardware.
-
- If you have a card with such a chipset, you should say Y here and
- also to the configuration option of the driver for your particular
- card, below.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called hisax.o. See <file:Documentation/isdn/README.HiSax>
- for more information on using this driver.
-
-HiSax Support for EURO/DSS1
-CONFIG_HISAX_EURO
- Say Y or N according to the D-channel protocol which your local
- telephone service company provides.
-
- The call control protocol E-DSS1 is used in most European countries.
- If unsure, say Y.
-
-Support for German chargeinfo
-CONFIG_DE_AOC
- If you want that the HiSax hardware driver sends messages to the
- upper level of the isdn code on each AOCD (Advice Of Charge, During
- the call -- transmission of the fee information during a call) and
- on each AOCE (Advice Of Charge, at the End of the call --
- transmission of fee information at the end of the call), say Y here.
- This works only in Germany.
-
-Disable sending complete
-CONFIG_HISAX_NO_SENDCOMPLETE
- If you have trouble with some ugly exchanges or you live in
- Australia select this option.
-
-Disable sending low layer compatibility
-CONFIG_HISAX_NO_LLC
- If you have trouble with some ugly exchanges try to select this
- option.
-
-Disable keypad protocol option
-CONFIG_HISAX_NO_KEYPAD
- If you like to send special dial strings including * or # without
- using the keypad protocol, select this option.
-
-HiSax Support for German 1TR6
-CONFIG_HISAX_1TR6
- Say Y or N according to the D-channel protocol which your local
- telephone service company provides.
-
- 1TR6 is an old call control protocol which was used in Germany
- before E-DSS1 was established. Nowadays, all new lines in Germany
- use E-DSS1.
-
-HiSax Support for US NI1
-CONFIG_HISAX_NI1
- Enable this if you like to use ISDN in US on a NI1 basic rate
- interface.
-
-Maximum number of cards supported by HiSax
-CONFIG_HISAX_MAX_CARDS
- This is used to allocate a driver-internal structure array with one
- entry for each HiSax card on your system.
-
-Teles 16.0/8.0
-CONFIG_HISAX_16_0
- This enables HiSax support for the Teles ISDN-cards S0-16.0, S0-8
- and many compatibles.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port/shmem settings.
-
-Teles 16.3 or PNP or PCMCIA
-CONFIG_HISAX_16_3
- This enables HiSax support for the Teles ISDN-cards S0-16.3 the
- Teles/Creatix PnP and the Teles PCMCIA.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-Teles PCI
-CONFIG_HISAX_TELESPCI
- This enables HiSax support for the Teles PCI.
- See <file:Documentation/isdn/README.HiSax> on how to configure it.
-
-Teles S0Box
-CONFIG_HISAX_S0BOX
- This enables HiSax support for the Teles/Creatix parallel port
- S0BOX. See <file:Documentation/isdn/README.HiSax> on how to
- configure it.
-
-AVM A1 (Fritz)
-CONFIG_HISAX_AVM_A1
- This enables HiSax support for the AVM A1 (aka "Fritz").
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-AVM PnP/PCI (Fritz!PnP/PCI)
-CONFIG_HISAX_FRITZPCI
- This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI".
- See <file:Documentation/isdn/README.HiSax> on how to configure it.
-
-AVM A1 PCMCIA (Fritz)
-CONFIG_HISAX_AVM_A1_PCMCIA
- This enables HiSax support for the AVM A1 "Fritz!PCMCIA").
- See <file:Documentation/isdn/README.HiSax> on how to configure it.
-
-Elsa cards
-CONFIG_HISAX_ELSA
- This enables HiSax support for the Elsa Mircolink ISA cards, for the
- Elsa Quickstep series cards and Elsa PCMCIA.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-ITK ix1-micro Revision 2
-CONFIG_HISAX_IX1MICROR2
- This enables HiSax support for the ITK ix1-micro Revision 2 card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-Eicon.Diehl Diva cards
-CONFIG_HISAX_DIEHLDIVA
- This enables HiSax support for the Eicon.Diehl Diva none PRO
- versions passive ISDN cards.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-ASUSCOM ISA cards
-CONFIG_HISAX_ASUSCOM
- This enables HiSax support for the AsusCom and their OEM versions
- passive ISDN ISA cards.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-TELEINT cards
-CONFIG_HISAX_TELEINT
- This enables HiSax support for the TELEINT SA1 semiactiv ISDN card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-HFC-S based cards
-CONFIG_HISAX_HFCS
- This enables HiSax support for the HFC-S 2BDS0 based cards, like
- teles 16.3c.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-Sedlbauer cards
-CONFIG_HISAX_SEDLBAUER
- This enables HiSax support for the Sedlbauer passive ISDN cards.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using the different cards, a different D-channel protocol, or
- non-standard IRQ/port settings.
-
-USR Sportster internal TA
-CONFIG_HISAX_SPORTSTER
- This enables HiSax support for the USR Sportster internal TA card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-MIC card
-CONFIG_HISAX_MIC
- This enables HiSax support for the ITH MIC card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-NETjet card
-CONFIG_HISAX_NETJET
- This enables HiSax support for the NetJet from Traverse
- Technologies.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-NETspider U card
-CONFIG_HISAX_NETJET_U
- This enables HiSax support for the Netspider U interface ISDN card
- from Traverse Technologies.
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-Niccy PnP/PCI card
-CONFIG_HISAX_NICCY
- This enables HiSax support for the Dr. Neuhaus Niccy PnP or PCI.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-Siemens I-Surf card
-CONFIG_HISAX_ISURF
- This enables HiSax support for the Siemens I-Talk/I-Surf card with
- ISAR chip.
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-HST Saphir card
-CONFIG_HISAX_HSTSAPHIR
- This enables HiSax support for the HST Saphir card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-Telekom A4T card
-CONFIG_HISAX_BKM_A4T
- This enables HiSax support for the Telekom A4T card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-Scitel Quadro card
-CONFIG_HISAX_SCT_QUADRO
- This enables HiSax support for the Scitel Quadro card.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-Gazel cards
-CONFIG_HISAX_GAZEL
- This enables HiSax support for the Gazel cards.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-HFC PCI-Bus cards
-CONFIG_HISAX_HFC_PCI
- This enables HiSax support for the HFC-S PCI 2BDS0 based cards.
-
- For more informations see under
- <file:Documentation/isdn/README.hfc-pci>.
-
-Winbond W6692 based cards
-CONFIG_HISAX_W6692
- This enables HiSax support for Winbond W6692 based PCI ISDN cards.
-
- See <file:Documentation/isdn/README.HiSax> on how to configure it
- using a different D-channel protocol, or non-standard IRQ/port
- settings.
-
-HFC-S+, HFC-SP, HFC-PCMCIA cards
-CONFIG_HISAX_HFC_SX
- This enables HiSax support for the HFC-S+, HFC-SP and HFC-PCMCIA
- cards. This code is not finished yet.
-
-Formula-n enter:now PCI card (EXPERIMENTAL)
-CONFIG_HISAX_ENTERNOW_PCI
- This enables HiSax support for the Formula-n enter:now PCI
- ISDN card.
-
-Am7930
-CONFIG_HISAX_AMD7930
- This enables HiSax support for the AMD7930 chips on some SPARCs.
- This code is not finished yet.
-
-HiSax debugging
-CONFIG_HISAX_DEBUG
- This enables debugging code in the new-style HiSax drivers, i.e.
- the ST5481 USB driver currently.
- If in doubt, say yes.
-
-ELSA PCMCIA MicroLink cards
-CONFIG_HISAX_ELSA_CS
- This enables the PCMCIA client driver for the Elsa PCMCIA MicroLink
- card.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called elsa_cs.o.
-
-Sedlbauer PCMCIA cards
-CONFIG_HISAX_SEDLBAUER_CS
- This enables the PCMCIA client driver for the Sedlbauer Speed Star
- and Speed Star II cards.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called sedlbauer_cs.o.
-
-CONFIG_HISAX_AVM_A1_CS
- This enables the PCMCIA client driver for the AVM A1 / Fritz!Card
- PCMCIA cards.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called avma1_cs.o.
-
-ST5481 USB ISDN modem
-CONFIG_HISAX_ST5481
- This enables the driver for ST5481 based USB ISDN adapters,
- e.g. the BeWan Gazel 128 USB
-
-PCBIT-D support
-CONFIG_ISDN_DRV_PCBIT
- This enables support for the PCBIT ISDN-card. This card is
- manufactured in Portugal by Octal. For running this card,
- additional firmware is necessary, which has to be downloaded into
- the card using a utility which is distributed separately. See
- <file:Documentation/isdn/README> and
- <file:Documentation/isdn/README.pcbit> for more information.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called pcbit.o.
-
-Spellcaster support
-CONFIG_ISDN_DRV_SC
- This enables support for the Spellcaster BRI ISDN boards. This
- driver currently builds only in a modularized version ( = code which
- can be inserted in and removed from the running kernel whenever you
- want, details in <file:Documentation/modules.txt>); the module will
- be called sc.o. See <file:Documentation/isdn/README.sc> and
- <http://www.spellcast.com/> for more information.
-
-Eicon active card support
-CONFIG_ISDN_DRV_EICON
- Say Y here if you have an Eicon active ISDN card. In order to use
- this card, additional firmware is necessary, which has to be loaded
- into the card using the eiconctrl utility which is part of the
- latest isdn4k-utils package. Please read the file
- <file:Documentation/isdn/README.eicon> for more information.
-
-Legacy Eicon driver
-CONFIG_ISDN_DRV_EICON_OLD
- Say Y here to use your Eicon active ISDN card with ISDN4Linux
- isdn module.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called eicon.o.
-
-Eicon PCI DIVA Server BRI/PRI/4BRI support
-CONFIG_ISDN_DRV_EICON_PCI
- Say Y here if you have an Eicon Diva Server (BRI/PRI/4BRI) ISDN
- card. Please read <file:Documentation/isdn/README.eicon> for more
- information.
-
-Eicon old-type (S,SX,SCOM,Quadro,S2M) card support
-CONFIG_ISDN_DRV_EICON_ISA
- Say Y here if you have an old-type Eicon active ISDN card. In order
- to use this card, additional firmware is necessary, which has to be
- loaded into the card using the eiconctrl utility which is part of
- the latest isdn4k-utils package. Please read the file
- <file:Documentation/isdn/README.eicon> for more information.
-
-Eicon driver type standalone
-CONFIG_ISDN_DRV_EICON_DIVAS
- Enable this option if you want the eicon driver as standalone
- version with no interface to the ISDN4Linux isdn module. If you
- say Y here, the eicon module only supports the Diva Server PCI
- cards and will provide its own IDI interface. You should say N
- here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called divas.o.
-
-Support AT-Fax Class 1 and 2 commands
-CONFIG_ISDN_TTY_FAX
- If you say Y here, the modem-emulator will support a subset of the
- Fax Class 1 and 2 commands. Using a getty with fax-support
- (mgetty+sendfax, hylafax), you will be able to use your Linux box as
- an ISDN-fax-machine. This must be supported by the lowlevel driver
- also. See <file:Documentation/isdn/README.fax> for more information.
-
-CAPI2.0 support
-CONFIG_ISDN_CAPI
- This provides the CAPI (Common ISDN Application Programming
- Interface, a standard making it easy for programs to access ISDN
- hardware, see <http://www.capi.org/>. This is needed for AVM's set
- of active ISDN controllers like B1, T1, M1.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The modules will be called capi.o and kernelcapi.o. If you want to
- compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-CAPI2.0 /dev/capi20 support
-CONFIG_ISDN_CAPI_CAPI20
- This option will provide the CAPI 2.0 interface to userspace
- applications via /dev/capi20. Applications should use the
- standardized libcapi20 to access this functionality. You should say
- Y/M here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called capi.o.
-
-CAPI2.0 Middleware support
-CONFIG_ISDN_CAPI_MIDDLEWARE
- This option will enhance the capabilities of the /dev/capi20
- interface. It will provide a means of moving a data connection,
- established via the usual /dev/capi20 interface to a special tty
- device. If you want to use pppd with pppdcapiplugin to dial up to
- your ISP, say Y here.
-
-CAPI2.0 filesystem support
-CONFIG_ISDN_CAPI_CAPIFS
- This option provides a special file system, similar to /dev/pts with
- device nodes for the special ttys established by using the
- middleware extension above. If you want to use pppd with
- pppdcapiplugin to dial up to your ISP, say Y here.
-
-CAPI2.0 capidrv interface support
-CONFIG_ISDN_CAPI_CAPIDRV
- This option provides the glue code to hook up CAPI driven cards to
- the legacy isdn4linux link layer. If you have a card which is
- supported by a CAPI driver, but still want to use old features like
- ippp interfaces or ttyI emulation, say Y/M here.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called capidrv.o.
-
-AVM B1 ISA support
-CONFIG_ISDN_DRV_AVMB1_B1ISA
- Enable support for the ISA version of the AVM B1 card.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called b1isa.o.
-
-AVM B1 PCI support
-CONFIG_ISDN_DRV_AVMB1_B1CICI
- Enable support for the PCI version of the AVM B1 card.
-
-AVM B1 PCI V4 support
-CONFIG_ISDN_DRV_AVMB1_B1PCIV4
- Enable support for the V4 version of AVM B1 PCI card.
-
-AVM T1/T1-B ISA support
-CONFIG_ISDN_DRV_AVMB1_T1ISA
- Enable support for the AVM T1 T1B card.
- Note: This is a PRI card and handle 30 B-channels.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called t1isa.o.
-
-AVM B1/M1/M2 PCMCIA support
-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
- Enable support for the PCMCIA version of the AVM B1 card.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called b1pcmcia.o.
-
-AVM B1/M1/M2 PCMCIA cs module
-CONFIG_ISDN_DRV_AVMB1_AVM_CS
- Enable the PCMCIA client driver for the AVM B1/M1/M2
- PCMCIA cards.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called avm_cs.o.
-
-AVM T1/T1-B PCI support
-CONFIG_ISDN_DRV_AVMB1_T1PCI
- Enable support for the AVM T1 T1B card.
- Note: This is a PRI card and handle 30 B-channels.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called t1pci.o.
-
-AVM C4/C2 support
-CONFIG_ISDN_DRV_AVMB1_C4
- Enable support for the AVM C4/C2 PCI cards.
- These cards handle 4/2 BRI ISDN lines (8/4 channels).
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called c4.o.
-
-Verbose reason code reporting (kernel size +=7K)
-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON
- If you say Y here, the AVM B1 driver will give verbose reasons for
- disconnecting. This will increase the size of the kernel by 7 KB. If
- unsure, say Y.
-
-IBM Active 2000 support
-CONFIG_ISDN_DRV_ACT2000
- Say Y here if you have an IBM Active 2000 ISDN card. In order to use
- this card, additional firmware is necessary, which has to be loaded
- into the card using a utility which is part of the latest
- isdn4k-utils package. Please read the file
- <file:Documentation/isdn/README.act2000> for more information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called act2000.o.
-
-Auvertech TurboPAM support
-CONFIG_ISDN_DRV_TPAM
- This enables support for the Auvertech TurboPAM ISDN-card.
- For running this card, additional firmware is necessary, which has
- to be downloaded into the card using a utility which is distributed
- separately from the Auvertech's web site: <http://www.auvertech.fr/>.
-
- Please redirect all support questions to support@auvertech.fr.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called tpam.o.
-
-Hypercope HYSDN cards (Champ, Ergo, Metro) support (module)
-CONFIG_HYSDN
- Say Y here if you have one of Hypercope's active PCI ISDN cards
- Champ, Ergo and Metro. You will then get a module called hysdn.o.
- Please read the file <file:Documentation/isdn/README.hysdn> for more
- information.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called hysdn.o.
-
-HYSDN CAPI 2.0 support
-CONFIG_HYSDN_CAPI
- Say Y here if you like to use Hypercope's CAPI 2.0 interface.
-
-Support for SUN4 machines (disables SUN4[CDM] support)
-CONFIG_SUN4
- Say Y here if, and only if, your machine is a Sun4. Note that
- a kernel compiled with this option will run only on Sun4.
- (And the current version will probably work only on sun4/330.)
-
-SPARC ESP SCSI support
-CONFIG_SCSI_SUNESP
- This is the driver for the Sun ESP SCSI host adapter. The ESP
- chipset is present in most SPARC SBUS-based computers.
-
- This support is also available as a module called esp.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-PTI Qlogic, ISP Driver
-CONFIG_SCSI_QLOGICPTI
- This driver supports SBUS SCSI controllers from PTI or QLogic. These
- controllers are known under Solaris as qpti and in the openprom as
- PTI,ptisp or QLGC,isp. Note that PCI QLogic SCSI controllers are
- driven by a different driver.
-
- This support is also available as a module called qlogicpti.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Sun PROM console
-CONFIG_PROM_CONSOLE
- Say Y to build a console driver for Sun machines that uses the
- terminal emulation built into their console PROMS.
-
-/dev/openprom device support
-CONFIG_SUN_OPENPROMIO
- This driver provides user programs with an interface to the SPARC
- PROM device tree. The driver implements a SunOS-compatible
- interface and a NetBSD-compatible interface.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M and read <file:Documentation/modules.txt>. If unsure, say Y.
-
-Openprom tree appears in /proc/openprom
-CONFIG_SUN_OPENPROMFS
- If you say Y, the OpenPROM device tree will be available as a
- virtual file system, which you can mount to /proc/openprom by "mount
- -t openpromfs none /proc/openprom".
-
- If you want to compile the /proc/openprom support as a module ( =
- code which can be inserted in and removed from the running kernel
- whenever you want), say M here and read
- <file:Documentation/modules.txt>.
- The module will be called openpromfs.o. If unsure, say M.
-
-Kernel support for Linux/Sparc 32bit binary compatibility
-CONFIG_SPARC32_COMPAT
- This allows you to run 32-bit binaries on your Ultra.
- Everybody wants this; say Y.
-
-Kernel support for 32-bit ELF binaries
-CONFIG_BINFMT_ELF32
- This allows you to run 32-bit Linux/ELF binaries on your machine.
- Everybody wants this; say Y.
-
-Kernel support for 32-bit (ie. SunOS) a.out binaries
-CONFIG_BINFMT_AOUT32
- This allows you to run 32-bit a.out format binaries on your Ultra.
- If you want to run SunOS binaries (see SunOS binary emulation below)
- or other a.out binaries, say Y. If unsure, say N.
-
-SunOS binary emulation
-CONFIG_SUNOS_EMUL
- This allows you to run most SunOS binaries. If you want to do this,
- say Y here and place appropriate files in /usr/gnemul/sunos. See
- <http://www.ultralinux.org/faq.html> for more information. If you
- want to run SunOS binaries on an Ultra you must also say Y to
- "Kernel support for 32-bit a.out binaries" above.
-
-Mostek real time clock support
-CONFIG_SUN_MOSTEK_RTC
- The Mostek RTC chip is used on all known Sun computers except
- some JavaStations. For a JavaStation you need to say Y both here
- and to "Enhanced Real Time Clock Support".
-
- Say Y here unless you are building a special purpose kernel.
-
-OBP Flash Device support
-CONFIG_OBP_FLASH
- The OpenBoot PROM on Ultra systems is flashable. If you want to be
- able to upgrade the OBP firmware, say Y here.
-
-JavaStation OS Flash SIMM
-CONFIG_SUN_JSFLASH
- If you say Y here, you will be able to boot from your JavaStation's
- Flash memory.
-
-Siemens SAB82532 serial support
-CONFIG_SAB82532
- This driver supports the serial ports on newer (PCI) Ultra systems.
- Say Y if you want to be able to use your serial ports.
-
-Videopix Frame Grabber
-CONFIG_SUN_VIDEOPIX
- Say Y here to support the Videopix Frame Grabber from Sun
- Microsystems, commonly found on SPARCstations. This card, which is
- based on the Phillips SAA9051, can handle NTSC and PAL/SECAM and
- SVIDEO signals.
-
-Sun bidirectional parallel port support
-CONFIG_SUN_BPP
- Say Y here to support Sun's obsolete variant of IEEE1284
- bidirectional parallel port protocol as /dev/bppX. Can be built on
- x86 machines.
-
-Aurora Multiboard 1600se
-CONFIG_SUN_AURORA
- The Aurora Multiboard is a multi-port high-speed serial controller.
- If you have one of these, say Y.
-
-Tadpole TS102 Microcontroller support
-CONFIG_TADPOLE_TS102_UCTRL
- Say Y here to directly support the TS102 Microcontroller interface
- on the Tadpole Sparcbook 3. This device handles power-management
- events, and can also notice the attachment/detachment of external
- monitors and mice.
-
-Audio support
-CONFIG_SPARCAUDIO
- This driver provides support for the build-in sound devices on most
- Sun machines. If you want to be able to use this, select this option
- and one or more of the lowlevel drivers below. See
- <http://www.dementia.org/~shadow/sparcaudio.html> for more
- information.
-
-AMD7930 Lowlevel Driver
-CONFIG_SPARCAUDIO_AMD7930
- This driver supports the AMD 7930 chip found on sun4c, 4/6xx, and
- SparcClassic systems.
-
-CS4231 Lowlevel Driver
-CONFIG_SPARCAUDIO_CS4231
- This driver supports the Crystal Semiconductor CS4231 chip found on
- the SS4, SS5, and Ultras.
-
-DBRI Lowlevel Driver
-CONFIG_SPARCAUDIO_DBRI
- This driver supports the DBRI audio interface found on the SS10,
- SS20, LX, Sparcbook 3, and Voyager systems.
-
-Dummy Lowlevel Driver
-CONFIG_SPARCAUDIO_DUMMY
- This is a pseudo-driver used for debugging and testing the
- sparcaudio subsystem. Say N unless you want to work on this
- subsystem.
-
-Sparc hardware
-CONFIG_PARPORT_SUNBPP
- This driver provides support for the bidirectional parallel port
- found on many Sun machines. Note that many of the newer Ultras
- actually have pc style hardware instead.
-
-SPARC power management support
-CONFIG_SUN_PM
- Enable power management and CPU standby features on supported
- SPARC platforms.
-
-/proc/hardware support
-CONFIG_PROC_HARDWARE
- Say Y here to support the /proc/hardware file, which gives you
- access to information about the machine you're running on,
- including the model, CPU, MMU, clock speed, BogoMIPS rating,
- and memory size.
-
-Bluetooth subsystem support
-CONFIG_BLUEZ
- Bluetooth is low-cost, low-power, short-range wireless technology.
- It was designed as a replacement for cables and other short-range
- technologies like IrDA. Bluetooth operates in personal area range
- that typically extends up to 10 meters. More information about
- Bluetooth can be found at <http://www.bluetooth.com/>.
-
- Linux Bluetooth subsystem consist of several layers:
- BlueZ Core (HCI device and connection manager, scheduler)
- HCI Device drivers (interface to the hardware)
- L2CAP Module (L2CAP protocol)
- SCO Module (SCO links)
- RFCOMM Module (RFCOMM protocol)
- BNEP Module (BNEP protocol)
- CMTP Module (CMTP protocol)
-
- Say Y here to enable Linux Bluetooth support and to build BlueZ Core
- layer.
-
- To use Linux Bluetooth subsystem, you will need several user-space
- utilities like hciconfig and hcid. These utilities and updates to
- Bluetooth kernel modules are provided in the BlueZ package.
- For more information, see <http://bluez.sourceforge.net/>.
-
- If you want to compile BlueZ Core as module (bluez.o) say M here.
-
-L2CAP protocol support
-CONFIG_BLUEZ_L2CAP
- L2CAP (Logical Link Control and Adaptation Protocol) provides
- connection oriented and connection-less data transport. L2CAP
- support is required for most Bluetooth applications.
-
- Say Y here to compile L2CAP support into the kernel or say M to
- compile it as module (l2cap.o).
-
-SCO links support
-CONFIG_BLUEZ_SCO
- SCO link provides voice transport over Bluetooth. SCO support is
- required for voice applications like Headset and Audio.
-
- Say Y here to compile SCO support into the kernel or say M to
- compile it as module (sco.o).
-
-RFCOMM protocol support
-CONFIG_BLUEZ_RFCOMM
- RFCOMM provides connection oriented stream transport. RFCOMM
- support is required for Dialup Networking, OBEX and other Bluetooth
- applications.
-
- Say Y here to compile RFCOMM support into the kernel or say M to
- compile it as module (rfcomm.o).
-
-RFCOMM TTY emulation support
-CONFIG_BLUEZ_RFCOMM_TTY
- This option enables TTY emulation support for RFCOMM channels.
-
-BNEP protocol support
-CONFIG_BLUEZ_BNEP
- BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
- emulation layer on top of Bluetooth. BNEP is required for Bluetooth
- PAN (Personal Area Network).
-
- To use BNEP, you will need user-space utilities provided in the
- BlueZ-PAN package.
- For more information, see <http://bluez.sourceforge.net>.
-
- Say Y here to compile BNEP support into the kernel or say M to
- compile it as module (bnep.o).
-
-CMTP protocol support
-CONFIG_BLUEZ_CMTP
- CMTP (CAPI Message Transport Protocol) is a transport layer
- for CAPI messages. CMTP is required for the Bluetooth Common
- ISDN Access Profile.
-
- Say Y here to compile CMTP support into the kernel or say M to
- compile it as module (cmtp.o).
-
-BNEP multicast filter support
-CONFIG_BLUEZ_BNEP_MC_FILTER
- This option enables the multicast filter support for BNEP.
-
-BNEP protocol filter support
-CONFIG_BLUEZ_BNEP_PROTO_FILTER
- This option enables the protocol filter support for BNEP.
-
-HCI UART driver
-CONFIG_BLUEZ_HCIUART
- Bluetooth HCI UART driver.
- This driver is required if you want to use Bluetooth devices with
- serial port interface. You will also need this driver if you have
- UART based Bluetooth PCMCIA and CF devices like Xircom Credit Card
- adapter and BrainBoxes Bluetooth PC Card.
-
- Say Y here to compile support for Bluetooth UART devices into the
- kernel or say M to compile it as module (hci_uart.o).
-
-HCI UART (H4) protocol support
-CONFIG_BLUEZ_HCIUART_H4
- UART (H4) is serial protocol for communication between Bluetooth
- device and host. This protocol is required for most Bluetooth devices
- with UART interface, including PCMCIA and CF cards.
-
- Say Y here to compile support for HCI UART (H4) protocol.
-
-HCI BCSP protocol support
-CONFIG_BLUEZ_HCIUART_BCSP
- BCSP (BlueCore Serial Protocol) is serial protocol for communication
- between Bluetooth device and host. This protocol is required for non
- USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
- CF cards.
-
- Say Y here to compile support for HCI BCSP protocol.
-
-HCI BCSP transmit CRC with every BCSP packet
-CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
- If you say Y here, a 16-bit CRC checksum will be transmitted along with
- every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
- This increases reliability, but slightly reduces efficiency.
-
-HCI USB driver
-CONFIG_BLUEZ_HCIUSB
- Bluetooth HCI USB driver.
- This driver is required if you want to use Bluetooth devices with
- USB interface.
-
- Say Y here to compile support for Bluetooth USB devices into the
- kernel or say M to compile it as module (hci_usb.o).
-
-HCI USB SCO (voice) support
-CONFIG_BLUEZ_HCIUSB_SCO
- This option enables the SCO support in the HCI USB driver. You need this
- to transmit voice data with your Bluetooth USB device. And your device
- must also support sending SCO data over the HCI layer, because some of
- them sends the SCO data to an internal PCM adapter.
-
- Say Y here to compile support for HCI SCO data.
-
-HCI VHCI Virtual HCI device driver
-CONFIG_BLUEZ_HCIVHCI
- Bluetooth Virtual HCI device driver.
- This driver is required if you want to use HCI Emulation software.
-
- Say Y here to compile support for virtual HCI devices into the
- kernel or say M to compile it as module (hci_vhci.o).
-
-HCI BFUSB device driver
-CONFIG_BLUEZ_HCIBFUSB
- Bluetooth HCI BlueFRITZ! USB driver.
- This driver provides support for Bluetooth USB devices with AVM
- interface:
- AVM BlueFRITZ! USB
-
- Say Y here to compile support for HCI BFUSB devices into the
- kernel or say M to compile it as module (bfusb.o).
-
-HCI DTL1 (PC Card) device driver
-CONFIG_BLUEZ_HCIDTL1
- Bluetooth HCI DTL1 (PC Card) driver.
- This driver provides support for Bluetooth PCMCIA devices with
- Nokia DTL1 interface:
- Nokia Bluetooth Card
- Socket Bluetooth CF Card
-
- Say Y here to compile support for HCI DTL1 devices into the
- kernel or say M to compile it as module (dtl1_cs.o).
-
-HCI BT3C (PC Card) device driver
-CONFIG_BLUEZ_HCIBT3C
- Bluetooth HCI BT3C (PC Card) driver.
- This driver provides support for Bluetooth PCMCIA devices with
- 3Com BT3C interface:
- 3Com Bluetooth Card (3CRWB6096)
- HP Bluetooth Card
-
- The HCI BT3C driver uses external firmware loader program provided in
- the BlueFW package. For more information, see <http://bluez.sf.net>.
-
- Say Y here to compile support for HCI BT3C devices into the
- kernel or say M to compile it as module (bt3c_cs.o).
-
-HCI BlueCard (PC Card) device driver
-CONFIG_BLUEZ_HCIBLUECARD
- Bluetooth HCI BlueCard (PC Card) driver.
- This driver provides support for Bluetooth PCMCIA devices with
- Anycom BlueCard interface:
- Anycom Bluetooth PC Card
- Anycom Bluetooth CF Card
-
- Say Y here to compile support for HCI BlueCard devices into the
- kernel or say M to compile it as module (bluecard_cs.o).
-
-HCI UART (PC Card) device driver
-CONFIG_BLUEZ_HCIBTUART
- Bluetooth HCI UART (PC Card) driver.
- This driver provides support for Bluetooth PCMCIA devices with
- an UART interface:
- Xircom CreditCard Bluetooth Adapter
- Xircom RealPort2 Bluetooth Adapter
- Sphinx PICO Card
- H-Soft blue+Card
- Cyber-blue Compact Flash Card
-
- Say Y here to compile support for HCI UART devices into the
- kernel or say M to compile it as module (btuart_cs.o).
-
-# The following options are for Linux when running on the Hitachi
-# SuperH family of RISC microprocessors.
-
-SuperH RTC support
-CONFIG_SH_RTC
- Selecting this option will allow the Linux kernel to emulate
- PC's RTC.
-
- If unsure, say N.
-
-SuperH peripheral clock frequency
-CONFIG_SH_PCLK_FREQ
- Set this value or add "sh_pclk=" command line option to tell
- peripheral clock frequency to kernel, if your system has no RTC.
- Otherwise leave it 0, and kernel measures peripheral clock frequency
- using TMU and RTC while system startup.
-
- If unsure, set 0.
-
-Wakeup UBC on startup
-CONFIG_UBC_WAKEUP
- Selecting this option will wakeup the User Break Controller (UBC) on
- startup. Although the UBC is left in an awake state when the processor
- comes up, some boot loaders misbehave by putting the UBC to sleep in a
- power saving state, which causes issues with things like ptrace().
-
- If unsure, say N.
-
-SuperH DMAC support
-CONFIG_SH_DMA
- Selecting this option will provide same API as PC's Direct Memory
- Access Controller(8237A) for SuperH DMAC.
-
- If unsure, say N.
-
-# Choice: cf_area
-CompactFlash Connection Area
-CONFIG_CF_AREA5
- If your board has "Directly Connected" CompactFlash, You should
- select the area where your CF is connected to.
-
- - "Area5" if CompactFlash is connected to Area 5 (0x14000000)
- - "Area6" if it is connected to Area 6 (0x18000000)
-
- "Area6" will work for most boards. For ADX, select "Area5".
-
-Disable data cache
-CONFIG_DCACHE_DISABLE
- This option allows you to run the kernel with data cache disabled.
- Say Y if you experience CPM lock-ups.
-
-#
-# m68k-specific kernel options
-# Documented by Chris Lawrence <mailto:quango@themall.net> et al.
-#
-Amiga support
-CONFIG_AMIGA
- This option enables support for the Amiga series of computers. If
- you plan to use this kernel on an Amiga, say Y here and browse the
- material available in <file:Documentation/m68k>; otherwise say N.
-
-Commodore A2232 serial support
-CONFIG_A2232
- This option supports the 2232 7-port serial card shipped with the
- Amiga 2000 and other Zorro-bus machines, dating from 1989. At
- a max of 19,200 bps, the ports are served by a 6551 ACIA UART chip
- each, plus a 8520 CIA, and a master 6502 CPU and buffer as well. The
- ports were connected with 8 pin DIN connectors on the card bracket,
- for which 8 pin to DB25 adapters were supplied. The card also had
- jumpers internally to toggle various pinning configurations.
-
- This driver can be built as a module; but then "generic_serial.o"
- will also be built as a module. This has to be loaded before
- "ser_a2232.o". If you want to do this, answer M here and read
- "<file:Documentation/modules.txt>".
-
-Amiga NCR53c710 SCSI support
-CONFIG_SCSI_AMIGA7XX
- Support for various NCR53c710-based SCSI controllers on the Amiga.
- This includes:
- - the builtin SCSI controller on the Amiga 4000T,
- - the Amiga 4091 Zorro III SCSI-2 controller,
- - the MacroSystem Development's WarpEngine Amiga SCSI-2 controller
- (info at
- <http://www.lysator.liu.se/amiga/ar/guide/ar310.guide?FEATURE5>),
- - the SCSI controller on the Phase5 Blizzard PowerUP 603e+
- accelerator card for the Amiga 1200,
- - the SCSI controller on the GVP Turbo 040/060 accelerator.
- Note that all of the above SCSI controllers, except for the builtin
- SCSI controller on the Amiga 4000T, reside on the Zorro expansion
- bus, so you also have to enable Zorro bus support if you want to use
- them.
-
-Atari support
-CONFIG_ATARI
- This option enables support for the 68000-based Atari series of
- computers (including the TT, Falcon and Medusa). If you plan to use
- this kernel on an Atari, say Y here and browse the material
- available in <file:Documentation/m68k>; otherwise say N.
-
-Hades support
-CONFIG_HADES
- This option enables support for the Hades Atari clone. If you plan
- to use this kernel on a Hades, say Y here; otherwise say N.
-
-Macintosh support
-CONFIG_MAC
- This option enables support for the Apple Macintosh series of
- computers (yes, there is experimental support now, at least for part
- of the series).
-
- Say N unless you're willing to code the remaining necessary support.
- ;)
-
-HP9000/300 support
-CONFIG_HP300
- This option enables support for the HP9000/300 series of
- workstations. Support for these machines is still very experimental.
- If you plan to try to use the kernel on such a machine say Y here.
- Everybody else says N.
-
-Q40/Q60 support
-CONFIG_Q40
- The Q40 is a Motorola 68040-based successor to the Sinclair QL
- manufactured in Germany. There is an official Q40 home page at
- <http://www.q40.de/>. This option enables support for the Q40 and
- Q60. Select your CPU below. For 68LC060 don't forget to enable FPU
- emulation.
-
-Q40/Q60 IDE interface support
-CONFIG_BLK_DEV_Q40IDE
- Enable the on-board IDE controller in the Q40/Q60. This should
- normally be on; disable it only if you are running a custom hard
- drive subsystem through an expansion card.
-
-Sun 3 support
-CONFIG_SUN3
- This option enables support for the Sun 3 series of workstations.
- Note that if this option is enabled, support for all other m68k
- platforms above must be disabled in order to produce a working
- kernel.
-
- Also, you will want to enable 68020 support below, and disable
- all other CPU types. General Linux information on the Sun 3x series
- (now discontinued) is at
- <http://www.angelfire.com/ca2/tech68k/sun3.html>.
-
- If you don't want to compile a kernel for a Sun 3, say N.
-
-Sun 3X support
-CONFIG_SUN3X
- This option enables support for the Sun 3x series of workstations.
- Currently, only the Sun 3/80 is supported within the Sun 3x family.
- You will also want to enable 68030 support below
- General Linux information on the Sun 3x series (now discontinued)
- is at <http://www.angelfire.com/ca2/tech68k/sun3.html>.
-
- If you don't want to compile a kernel for a Sun 3x, say N.
-
-Sun3x builtin serial support
-CONFIG_SUN3X_ZS
- ZS refers to a type of asynchronous serial port built in to the Sun3
- and Sun3x workstations; if you have a Sun 3, you probably have
- these. Say 'Y' to support ZS ports directly. This option must be
- enabled in order to support the keyboard and mouse ports.
-
-Sun keyboard support
-CONFIG_SUN_KEYBOARD
- Say Y here to support the keyboard found on Sun 3 and 3x
- workstations. It can also be used support Sun Type-5 keyboards
- through an adaptor. See
- <http://www.suse.cz/development/input/adapters.html> and
- <http://sourceforge.net/projects/linuxconsole/> for details on the
- latter.
-
-68020 support
-CONFIG_M68020
- If you anticipate running this kernel on a computer with a MC68020
- processor, say Y. Otherwise, say N. Note that the 68020 requires a
- 68851 MMU (Memory Management Unit) to run Linux/m68k, except on the
- Sun 3, which provides its own version.
-
-68030 support
-CONFIG_M68030
- If you anticipate running this kernel on a computer with a MC68030
- processor, say Y. Otherwise, say N. Note that a MC68EC030 will not
- work, as it does not include an MMU (Memory Management Unit).
-
-68040 support
-CONFIG_M68040
- If you anticipate running this kernel on a computer with a MC68LC040
- or MC68040 processor, say Y. Otherwise, say N. Note that an
- MC68EC040 will not work, as it does not include an MMU (Memory
- Management Unit).
-
-68060 support
-CONFIG_M68060
- If you anticipate running this kernel on a computer with a MC68060
- processor, say Y. Otherwise, say N.
-
-Math emulation support
-CONFIG_M68KFPU_EMU
- At some point in the future, this will cause floating-point math
- instructions to be emulated by the kernel on machines that lack a
- floating-point math coprocessor. Thrill-seekers and chronically
- sleep-deprived psychotic hacker types can say Y now, everyone else
- should probably wait a while.
-
-Math emulation only kernel
-CONFIG_M68KFPU_EMU_ONLY
- This option prevents any floating-point instructions from being
- compiled into the kernel, thereby the kernel doesn't save any
- floating point context anymore during task switches, so this
- kernel will only be usable on machines without a floating-point
- math coprocessor. This makes the kernel a bit faster as no tests
- needs to be executed whether a floating-point instruction in the
- kernel should be executed or not.
-
-Math emulation extra precision
-CONFIG_M68KFPU_EMU_EXTRAPREC
- The fpu uses normally a few bit more during calculations for
- correct rounding, the emulator can (often) do the same but this
- extra calculation can cost quite some time, so you can disable
- it here. The emulator will then "only" calculate with a 64 bit
- mantissa and round slightly incorrect, what is more then enough
- for normal usage.
-
-Advanced configuration options
-CONFIG_ADVANCED
- This gives you access to some advanced options for the CPU. The
- defaults should be fine for most users, but these options may make
- it possible for you to improve performance somewhat if you know what
- you are doing.
-
- 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 these options.
-
- Most users should say N to this question.
-
-Use one physical chunk of memory only
-CONFIG_SINGLE_MEMORY_CHUNK
- Ignore all but the first contiguous chunk of physical memory for VM
- purposes. This will save a few bytes kernel size and may speed up
- some operations. Say N if not sure.
-
-Use read-modify-write instructions
-CONFIG_RMW_INSNS
- This allows to use certain instructions that work with indivisible
- read-modify-write bus cycles. While this is faster than the
- workaround of disabling interrupts, it can conflict with DMA
- ( = direct memory access) on many Amiga systems, and it is also said
- to destabilize other machines. It is very likely that this will
- cause serious problems on any Amiga or Atari Medusa if set. The only
- configuration where it should work are 68030-based Ataris, where it
- apparently improves performance. But you've been warned! Unless you
- really know what you are doing, say N. Try Y only if you're quite
- adventurous.
-
-Amiga Zorro (AutoConfig) bus support
-CONFIG_ZORRO
- This enables support for the Zorro bus in the Amiga. If you have
- expansion cards in your Amiga that conform to the Amiga
- AutoConfig(tm) specification, say Y, otherwise N. Note that even
- expansion cards that do not fit in the Zorro slots but fit in e.g.
- the CPU slot may fall in this category, so you have to say Y to let
- Linux use these.
-
-Zorro device name database
-CONFIG_ZORRO_NAMES
- By default, the kernel contains a database of all known Zorro device
- names to make the information in /proc/iomem comprehensible to the
- user. This database increases the size of the kernel image by about
- 15KB, but it gets freed after the system boots up, so it doesn't
- take up kernel memory. Anyway, if you are building an installation
- floppy or kernel for an embedded system where kernel image size
- really matters, you can disable this feature and you'll get device
- ID numbers instead of names.
-
- When in doubt, say Y.
-
-Amiga 1200/600 PCMCIA support
-CONFIG_AMIGA_PCMCIA
- Include support in the kernel for pcmcia on Amiga 1200 and Amiga
- 600. If you intend to use pcmcia cards say Y; otherwise say N.
-
-Hisoft Whippet PCMCIA serial support
-CONFIG_WHIPPET_SERIAL
- HiSoft has a web page at <http://www.hisoft.co.uk/>, but there
- is no listing for the Whippet in their Amiga section.
-
-Amiga Zorro II ramdisk support
-CONFIG_AMIGA_Z2RAM
- This enables support for using Chip RAM and Zorro II RAM as a
- ramdisk or as a swap partition. Say Y if you want to include this
- driver in the kernel. This driver is also available as a module
- ( = code which can be inserted in and removed from the running
- kernel whenever you want). The module is called z2ram.o. If you want
- to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Support for ST-RAM as swap space
-CONFIG_STRAM_SWAP
- Some Atari 68k machines (including the 520STF and 1020STE) divide
- their addressable memory into ST and TT sections. The TT section
- (up to 512MB) is the main memory; the ST section (up to 4MB) is
- accessible to the built-in graphics board, runs slower, and is
- present mainly for backward compatibility with older machines.
-
- This enables support for using (parts of) ST-RAM as swap space,
- instead of as normal system memory. This can first enhance system
- performance if you have lots of alternate RAM (compared to the size
- of ST-RAM), because executable code always will reside in faster
- memory. ST-RAM will remain as ultra-fast swap space. On the other
- hand, it allows much improved dynamic allocations of ST-RAM buffers
- for device driver modules (e.g. floppy, ACSI, SLM printer, DMA
- sound). The probability that such allocations at module load time
- fail is drastically reduced.
-
-ST-RAM statistics in /proc
-CONFIG_STRAM_PROC
- Say Y here to report ST-RAM usage statistics in /proc/stram. See
- the help for CONFIG_STRAM_SWAP for discussion of ST-RAM and its
- uses.
-
-Atari ACSI support
-CONFIG_ATARI_ACSI
- This enables support for the Atari ACSI interface. The driver
- supports hard disks and CD-ROMs, which have 512-byte sectors, or can
- be switched to that mode. Due to the ACSI command format, only disks
- up to 1 GB are supported. Special support for certain ACSI to SCSI
- adapters, which could relax that, isn't included yet. The ACSI
- driver is also the basis for certain other drivers for devices
- attached to the ACSI bus: Atari SLM laser printer, BioNet-100
- Ethernet, and PAMsNet Ethernet. If you want to use one of these
- devices, you need ACSI support, too.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called acsi.o.
-
-Probe all LUNs on each ACSI device
-CONFIG_ACSI_MULTI_LUN
- If you have a ACSI device that supports more than one LUN (Logical
- Unit Number), e.g. a CD jukebox, you should say Y here so that all
- will be found by the ACSI driver. An ACSI device with multiple LUNs
- acts logically like multiple ACSI devices. The vast majority of ACSI
- devices have only one LUN, and so most people can say N here and
- should in fact do so, because it is safer.
-
-Atari SLM laser printer support
-CONFIG_ATARI_SLM
- If you have an Atari SLM laser printer, say Y to include support for
- it in the kernel. Otherwise, say N. This driver is also available as
- a module ( = code which can be inserted in and removed from the
- running kernel whenever you want). The module will be called
- acsi_slm.o. Be warned: the driver needs much ST-RAM and can cause
- problems due to that fact!
-
-A3000 WD33C93A support
-CONFIG_A3000_SCSI
- If you have an Amiga 3000 and have SCSI devices connected to the
- built-in SCSI controller, say Y. Otherwise, say N. This driver is
- also available as a module ( = code which can be inserted in and
- removed from the running kernel whenever you want). The module is
- called wd33c93.o. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>.
-
-A2091 WD33C93A support
-CONFIG_A2091_SCSI
- If you have a Commodore A2091 SCSI controller, say Y. Otherwise,
- say N. This driver is also available as a module ( = code which can
- be inserted in and removed from the running kernel whenever you
- want). The module is called wd33c93.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-GVP Series II WD33C93A support
-CONFIG_GVP11_SCSI
- If you have a Great Valley Products Series II SCSI controller,
- answer Y. Also say Y if you have a later model of GVP SCSI
- controller (such as the GVP A4008 or a Combo board). Otherwise,
- answer N. This driver does NOT work for the T-Rex series of
- accelerators from TekMagic and GVP-M.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module will be called gvp11.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-CyberStorm SCSI support
-CONFIG_CYBERSTORM_SCSI
- If you have an Amiga with an original (MkI) Phase5 Cyberstorm
- accelerator board and the optional Cyberstorm SCSI controller,
- answer Y. Otherwise, say N.
-
-CyberStorm II SCSI support
-CONFIG_CYBERSTORMII_SCSI
- If you have an Amiga with a Phase5 Cyberstorm MkII accelerator board
- and the optional Cyberstorm SCSI controller, say Y. Otherwise,
- answer N.
-
-Blizzard 2060 SCSI support
-CONFIG_BLZ2060_SCSI
- If you have an Amiga with a Phase5 Blizzard 2060 accelerator board
- and want to use the onboard SCSI controller, say Y. Otherwise,
- answer N.
-
-Blizzard 1230IV/1260 SCSI support
-CONFIG_BLZ1230_SCSI
- If you have an Amiga 1200 with a Phase5 Blizzard 1230IV or Blizzard
- 1260 accelerator, and the optional SCSI module, say Y. Otherwise,
- say N.
-
-Fastlane SCSI support
-CONFIG_FASTLANE_SCSI
- If you have the Phase5 Fastlane Z3 SCSI controller, or plan to use
- one in the near future, say Y to this question. Otherwise, say N.
-
-BSC Oktagon SCSI support
-CONFIG_OKTAGON_SCSI
- If you have the BSC Oktagon SCSI disk controller for the Amiga, say
- Y to this question. If you're in doubt about whether you have one,
- see the picture at
- <http://amiga.multigraph.com/photos/oktagon.html>.
-
-Atari native SCSI support
-CONFIG_ATARI_SCSI
- If you have an Atari with built-in NCR5380 SCSI controller (TT,
- Falcon, ...) say Y to get it supported. Of course also, if you have
- a compatible SCSI controller (e.g. for Medusa). This driver is also
- available as a module ( = code which can be inserted in and removed
- from the running kernel whenever you want). The module is called
- atari_scsi.o. If you want to compile it as a module, say M here and
- read <file:Documentation/modules.txt>. This driver supports both
- styles of NCR integration into the system: the TT style (separate
- DMA), and the Falcon style (via ST-DMA, replacing ACSI). It does
- NOT support other schemes, like in the Hades (without DMA).
-
-Long delays for Toshiba CD-ROMs
-CONFIG_ATARI_SCSI_TOSHIBA_DELAY
- This option increases the delay after a SCSI arbitration to
- accommodate some flaky Toshiba CD-ROM drives. Say Y if you intend to
- use a Toshiba CD-ROM drive; otherwise, the option is not needed and
- would impact performance a bit, so say N.
-
-Reset SCSI-devices at boottime
-CONFIG_ATARI_SCSI_RESET_BOOT
- Reset the devices on your Atari whenever it boots. This makes the
- boot process fractionally longer but may assist recovery from errors
- that leave the devices with SCSI operations partway completed.
-
-Hades SCSI DMA emulator
-CONFIG_TT_DMA_EMUL
- This option enables code which emulates the TT SCSI DMA chip on the
- Hades. This increases the SCSI transfer rates at least ten times
- compared to PIO transfers.
-
-Sun3x ESP SCSI
-CONFIG_SUN3X_ESP
- This option will enable support for the ESP SCSI controller found
- onboard the Sun 3/80.
-
-Ariadne support
-CONFIG_ARIADNE
- If you have a Village Tronic Ariadne Ethernet adapter, say Y.
- Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module is called ariadne.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-Zorro NS8390-based Ethernet support
-CONFIG_ZORRO8390
- This driver is for Zorro Ethernet cards using an NS8390-compatible
- chipset, like the Village Tronic Ariadne II and the Individual
- Computers X-Surf Ethernet cards. If you have such a card, say Y.
- Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called zorro8390.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-A2065 support
-CONFIG_A2065
- If you have a Commodore A2065 Ethernet adapter, say Y. Otherwise,
- say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module is called a2065.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Hydra support
-CONFIG_HYDRA
- If you have a Hydra Ethernet adapter, say Y. Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module is called hydra.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Sun3 NCR5380 SCSI
-CONFIG_SUN3_SCSI
- This option will enable support for the OBIO (onboard io) NCR5380
- SCSI controller found in the Sun 3/50 and 3/60, as well as for
- "Sun3" type VME scsi controllers also based on the NCR5380.
- General Linux information on the Sun 3 series (now discontinued)
- is at <http://www.angelfire.com/ca2/tech68k/sun3.html>.
-
-PCMCIA NE2000 and compatibles support
-CONFIG_APNE
- If you have a PCMCIA NE2000 compatible adapter, say Y. Otherwise,
- say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). The module is called apne.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Atari Lance support
-CONFIG_ATARILANCE
- Say Y to include support for several Atari Ethernet adapters based
- on the AMD Lance chipset: RieblCard (with or without battery), or
- PAMCard VME (also the version by Rhotron, with different addresses).
-
-BioNet-100 support
-CONFIG_ATARI_BIONET
- Say Y to include support for BioData's BioNet-100 Ethernet adapter
- for the ACSI port. The driver works (has to work...) with a polled
- I/O scheme, so it's rather slow :-(
-
-PAMsNet support
-CONFIG_ATARI_PAMSNET
- Say Y to include support for the PAMsNet Ethernet adapter for the
- ACSI port ("ACSI node"). The driver works (has to work...) with a
- polled I/O scheme, so it's rather slow :-(
-
-Amiga mouse support
-CONFIG_AMIGAMOUSE
- If you want to be able to use an Amiga mouse in Linux, say Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called amigamouse.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Atari mouse support
-CONFIG_ATARIMOUSE
- If you want to be able to use an Atari mouse in Linux, say Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module is called atarimouse.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-Atari MFP serial support
-CONFIG_ATARI_MFPSER
- If you like to use the MFP serial ports ("Modem1", "Serial1") under
- Linux, say Y. The driver equally supports all kinds of MFP serial
- ports and automatically detects whether Serial1 is available.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
- Note for Falcon users: You also have an MFP port, it's just not
- wired to the outside... But you could use the port under Linux.
-
-Atari SCC serial support
-CONFIG_ATARI_SCC
- If you have serial ports based on a Zilog SCC chip (Modem2, Serial2,
- LAN) and like to use them under Linux, say Y. All built-in SCC's are
- supported (TT, MegaSTE, Falcon), and also the ST-ESCC. If you have
- two connectors for channel A (Serial2 and LAN), they are visible as
- two separate devices.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Atari SCC serial DMA support
-CONFIG_ATARI_SCC_DMA
- This enables DMA support for receiving data on channel A of the SCC.
- If you have a TT you may say Y here and read
- drivers/char/atari_SCC.README. All other users should say N here,
- because only the TT has SCC-DMA, even if your machine keeps claiming
- so at boot time.
-
-Atari MIDI serial support
-CONFIG_ATARI_MIDI
- If you want to use your Atari's MIDI port in Linux, say Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Atari DSP56k Digital Signal Processor support
-CONFIG_ATARI_DSP56K
- If you want to be able to use the DSP56001 in Falcons, say Y. This
- driver is still experimental, and if you don't know what it is, or
- if you don't have this processor, just say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Support for early boot text console
-CONFIG_BOOTX_TEXT
- Say Y here to see progress messages from the boot firmware in text
- mode. Requires either BootX or Open Firmware.
-
-Amiga builtin serial support
-CONFIG_AMIGA_BUILTIN_SERIAL
- If you want to use your Amiga's built-in serial port in Linux,
- answer Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-GVP IO-Extender support
-CONFIG_GVPIOEXT
- If you want to use a GVP IO-Extender serial card in Linux, say Y.
- Otherwise, say N.
-
-GVP IO-Extender parallel printer support
-CONFIG_GVPIOEXT_LP
- Say Y to enable driving a printer from the parallel port on your
- GVP IO-Extender card, N otherwise.
-
-GVP IO-Extender PLIP support
-CONFIG_GVPIOEXT_PLIP
- Say Y to enable doing IP over the parallel port on your GVP
- IO-Extender card, N otherwise.
-
-Multiface Card III serial support
-CONFIG_MULTIFACE_III_TTY
- If you want to use a Multiface III card's serial port in Linux,
- answer Y.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Amiga/Atari/PowerMac DMA sound support
-CONFIG_DMASOUND
- Support built-in audio chips accessible by DMA on various machines
- that have them. Note that this symbol does not affect the kernel
- directly; rather, it controls whether configuration questions
- enabling DMA sound drivers for various specific machine
- architectures will be used.
-
-Atari DMA sound support
-CONFIG_DMASOUND_ATARI
- If you want to use the internal audio of your Atari in Linux, answer
- Y to this question. This will provide a Sun-like /dev/audio,
- compatible with the Linux/i386 sound system. Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-PowerMac DMA sound support
-CONFIG_DMASOUND_PMAC
- If you want to use the internal audio of your PowerMac in Linux,
- answer Y to this question. This will provide a Sun-like /dev/audio,
- compatible with the Linux/i386 sound system. Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Amiga DMA sound support
-CONFIG_DMASOUND_PAULA
- If you want to use the internal audio of your Amiga in Linux, answer
- Y to this question. This will provide a Sun-like /dev/audio,
- compatible with the Linux/i386 sound system. Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Q40 sound support
-CONFIG_DMASOUND_Q40
- If you want to use the internal audio of your Q40 in Linux, answer
- Y to this question. This will provide a Sun-like /dev/audio,
- compatible with the Linux/i386 sound system. Otherwise, say N.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you
- want). If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-HP DCA serial support
-CONFIG_HPDCA
- If you want to use the internal "DCA" serial ports on an HP300
- machine, say Y here.
-
-HP on-board LANCE support
-CONFIG_HPLANCE
- If you want to use the builtin "LANCE" Ethernet controller on an
- HP300 machine, say Y here.
-
-DIO bus support
-CONFIG_DIO
- Say Y here to enable support for the "DIO" expansion bus used in
- HP300 machines. If you are using such a system you almost certainly
- want this.
-
-# Choice: ppctype
-Processor Type
-CONFIG_6xx
- There are four types of PowerPC chips supported. The more common
- types (601, 603, 604, 740, 750, 7400), the Motorola embedded
- versions (821, 823, 850, 855, 860, 8260), the IBM embedded versions
- (403 and 405) and the high end 64 bit Power processors (Power 3,
- Power 4). Unless you are building a kernel for one of the embedded
- processor systems, or a 64 bit IBM RS/6000, choose 6xx. Note that
- the kernel runs in 32-bit mode even on 64-bit chips. Also note that
- because the 82xx family has a 603e core, specific support for that
- chipset is asked later on.
-
-Motorola MPC8260 CPM support
-CONFIG_8260
- The MPC8260 CPM (Communications Processor Module) is a typical
- embedded CPU made by Motorola. Selecting this option means that
- you wish to build a kernel for a machine with specifically an 8260
- for a CPU.
-
- If in doubt, say N.
-
-# Choice: ppc4xxtype
-Oak
-CONFIG_OAK
- Select Oak if you have an IBM 403GCX "Oak" Evaluation Board.
-
- Select Walnut if you have an IBM 405GP "Walnut" Evaluation Board.
-
- More information on these boards is available at:
- <http://www.chips.ibm.com/products/powerpc/tools/evk_pn.html#GCX>.
-
-Walnut
-CONFIG_WALNUT
- Select Walnut if you have an IBM 405GP "Walnut" Evaluation Board.
-
-Workarounds for PPC601 bugs
-CONFIG_PPC601_SYNC_FIX
- Some versions of the PPC601 (the first PowerPC chip) have bugs which
- mean that extra synchronization instructions are required near
- certain instructions, typically those that make major changes to the
- CPU state. These extra instructions reduce performance slightly.
- If you say N here, these extra instructions will not be included,
- resulting in a kernel which will run faster but may not run at all
- on some systems with the PPC601 chip.
-
- If in doubt, say Y here.
-
-8xx Cache (Copy-Back or Writethrough)
-CONFIG_8xx_COPYBACK
- Saying Y here will cause the cache on an MPC8xx processor to be used
- in Copy-Back mode. If you say N here, it is used in Writethrough
- mode.
-
- If in doubt, say Y here.
-
-MPC860 (Pre Rev. C) CPU6 Silicon Errata
-CONFIG_8xx_CPU6
- MPC860 CPUs, prior to Rev C have some bugs in the silicon, which
- require workarounds for Linux (and most other OSes to work). If you
- get a BUG() very early in boot, this might fix the problem. For
- more details read the document entitled "MPC860 Family Device Errata
- Reference" on Motorola's website. This option also incurs a
- performance hit.
-
- If in doubt, say N here.
-
-MPC8xx direct IDE support on PCMCIA port
-CONFIG_BLK_DEV_MPC8xx_IDE
- This option provides support for IDE on Motorola MPC8xx Systems.
- Please see 'Type of MPC8xx IDE interface' for details.
-
- If unsure, say N.
-
-# Choice: mpc8xxtype
-Type of MPC8xx IDE interface
-CONFIG_IDE_8xx_PCCARD
- Select how the IDE devices are connected to the MPC8xx system:
-
- 8xx_PCCARD uses the 8xx internal PCMCIA interface in combination
- with a PC Card (e.g. ARGOSY portable Hard Disk Adapter),
- ATA PC Card HDDs or ATA PC Flash Cards (example: TQM8xxL
- systems)
-
- 8xx_DIRECT is used for directly connected IDE devices using the 8xx
- internal PCMCIA interface (example: IVMS8 systems)
-
- EXT_DIRECT is used for IDE devices directly connected to the 8xx
- bus using some glue logic, but _not_ the 8xx internal
- PCMCIA interface (example: IDIF860 systems)
-
-Use SMC2 for UART
-CONFIG_8xx_SMC2
- If you would like to use SMC2 as a serial port, say Y here.
-
- If in doubt, say Y here.
-
-Use SMC2 for Console
-CONFIG_CONS_SMC2
- If you are going to have a serial console on your device and are
- using SMC2 for your serial port, say Y here, else say N.
-
-Use the alternate SMC2 I/O
-CONFIG_ALTSMC2
- If you have an MPC823 or MPC850 and would like to use the alternate
- SMC2 for I/O, say Y here.
-
- If in doubt, say N here.
-
-Enable SCC2 and SCC3 for UART
-CONFIG_USE_SCC_IO
- If your MPC8xx board has other SCC ports that you would like to use
- for for a serial port, say Y here.
-
- If in doubt, say N here.
-
-# Choice: ppc6xxtype
-Machine Type
-CONFIG_ALL_PPC
- Linux currently supports several different kinds of PowerPC-based
- machines: Apple Power Macintoshes and clones (such as the Motorola
- Starmax series), PReP (PowerPC Reference Platform) machines (such
- as the Motorola PowerStacks, Motorola cPCI/VME embedded systems,
- and some IBM RS/6000 systems), CHRP (Common Hardware Reference
- Platform), and several embedded PowerPC systems containing 4xx, 6xx,
- 7xx, 8xx, 74xx, and 82xx processors. Currently, the default option
- is to build a kernel which works on the first three.
-
- Select PowerMac/PReP/MTX/CHRP if configuring for any of the above.
-
- Select Gemini if configuring for a Synergy Microsystems' Gemini
- series Single Board Computer. More information is available at:
- <http://www.synergymicro.com/PressRel/97_10_15.html>.
-
- Select APUS if configuring for a PowerUP Amiga. More information is
- available at: <http://linux-apus.sourceforge.net/>.
-
- Note that Total Impact briQ is handled as a CHRP machine.
-
-Synergy-Gemini
-CONFIG_GEMINI
- Select Gemini if configuring for a Synergy Microsystems' Gemini
- series Single Board Computer. More information is available at:
- <http://www.synergymicro.com/PressRel/97_10_15.html>.
-
-Amiga-Apus
-CONFIG_APUS
- Select APUS if configuring for a PowerUP Amiga.
- More information is available at:
- <http://linux-apus.sourceforge.net/>.
-
-AltiVec kernel support
-CONFIG_ALTIVEC
- This option enables kernel support for the Altivec extensions to the
- PowerPC processor. The kernel currently supports saving and restoring
- altivec registers, and turning on the 'altivec enable' bit so user
- processes can execute altivec instructions.
-
- This option is only usefully if you have a processor that supports
- altivec (G4, otherwise known as 74xx series), but does not have
- any affect on a non-altivec cpu (it does, however add code to the
- kernel).
-
- If in doubt, say Y here.
-
-Thermal Management Support
-CONFIG_TAU
- G3 and G4 processors have an on-chip temperature sensor called the
- 'Thermal Assist Unit (TAU)', which, in theory, can measure the on-die
- temperature within 2-4 degrees Celsius. This option shows the current
- on-die temperature in /proc/cpuinfo if the cpu supports it.
-
- Unfortunately, on some chip revisions, this sensor is very inaccurate
- and in some cases, does not work at all, so don't assume the cpu
- temp is actually what /proc/cpuinfo says it is.
-
-Interrupt driven TAU driver
-CONFIG_TAU_INT
- The TAU supports an interrupt driven mode which causes an interrupt
- whenever the temperature goes out of range. This is the fastest way
- to get notified the temp has exceeded a range. With this option off,
- a timer is used to re-check the temperature periodically.
-
- However, on some cpus it appears that the TAU interrupt hardware
- is buggy and can cause a situation which would lead unexplained hard
- lockups.
-
- Unless you are extending the TAU driver, or enjoy kernel/hardware
- debugging, leave this option off.
-
-Average high and low temp
-CONFIG_TAU_AVERAGE
- The TAU hardware can compare the temperature to an upper and lower bound.
- The default behaviour is to show both the upper and lower bound in
- /proc/cpuinfo. If the range is large, the temperature is either changing
- a lot, or the TAU hardware is broken (likely on some G4's). If the range
- is small (around 4 degrees), the temperature is relatively stable.
-
-Power management support for PowerBooks
-CONFIG_PMAC_PBOOK
- This provides support for putting a PowerBook to sleep; it also
- enables media bay support. Power management works on the
- PB2400/3400/3500, Wallstreet, Lombard, and Bronze PowerBook G3. You
- must get the power management daemon, pmud, to make it work and you
- must have the /dev/pmu device (see the pmud README).
-
- Get pmud from <ftp://ftp.samba.org/pub/ppclinux/pmud/>.
-
- If you have a PowerBook, you should say Y.
-
- You may also want to compile the dma sound driver as a module and
- have it autoloaded. The act of removing the module shuts down the
- sound hardware for more power savings.
-
-APM emulation
-CONFIG_PMAC_APM_EMU
- This driver provides an emulated /dev/apm_bios and /proc/apm. The
- first one is mostly intended for XFree to sleep & wakeup properly,
- the second ones provides some battery informations to allow existing
- APM utilities to work. It provides less useful informations than
- tools specifically designed for PowerBooks or /proc/pmu/battery_x
-
-Backlight control for LCD screens
-CONFIG_PMAC_BACKLIGHT
- Say Y here to build in code to manage the LCD backlight on a
- Macintosh PowerBook. With this code, the backlight will be turned
- on and off appropriately on power-management and lid-open/lid-closed
- events; also, the PowerBook button device will be enabled so you can
- change the screen brightness.
-
-# Choice: ppc8xxtype
-Embedded 8xx Board Type
-CONFIG_RPXLITE
- Single-board computers based around the PowerPC MPC8xx chips and
- intended for embedded applications. The following types are
- supported:
-
- RPX-Lite:
- Embedded Planet RPX Lite. PC104 form-factor SBC based on the MPC823.
-
- RPX-Classic:
- Embedded Planet RPX Classic Low-fat. Credit-card-size SBC based on
- the MPC 860
-
- BSE-IP:
- Bright Star Engineering ip-Engine.
-
- TQM823L:
- TQM850L:
- TQM855L:
- TQM860L:
- MPC8xx based family of mini modules, half credit card size,
- up to 64 MB of RAM, 8 MB Flash, (Fast) Ethernet, 2 x serial ports,
- 2 x CAN bus interface, ...
- Manufacturer: TQ Components, www.tq-group.de
- Date of Release: October (?) 1999
- End of Life: not yet :-)
- URL:
- - module: <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>
- - starter kit: <http://www.denx.de/PDF/STK8xxLHWM201.pdf>
- - images: <http://www.denx.de/embedded-ppc-en.html>
-
- FPS850L:
- FingerPrint Sensor System (based on TQM850L)
- Manufacturer: IKENDI AG, <http://www.ikendi.com/>
- Date of Release: November 1999
- End of life: end 2000 ?
- URL: see TQM850L
-
- SPD823TS:
- MPC823 based board used in the "Tele Server" product
- Manufacturer: Speech Design, <http://www.speech-design.de/>
- Date of Release: Mid 2000 (?)
- End of life: -
- URL: <http://www.speech-design.de/>
- select "English", then "Teleteam Solutions", then "TeleServer"
-
- IVMS8:
- MPC860 based board used in the "Integrated Voice Mail System",
- Small Version (8 voice channels)
- Manufacturer: Speech Design, <http://www.speech-design.de/>
- Date of Release: December 2000 (?)
- End of life: -
- URL: <http://www.speech-design.de/>
-
- IVML24:
- MPC860 based board used in the "Integrated Voice Mail System",
- Large Version (24 voice channels)
- Manufacturer: Speech Design, <http://www.speech-design.de/>
- Date of Release: March 2001 (?)
- End of life: -
- URL: <http://www.speech-design.de/>
-
- SM850:
- Service Module (based on TQM850L)
- Manufacturer: Dependable Computer Systems, <http://www.decomsys.com/>
- Date of Release: end 2000 (?)
- End of life: mid 2001 (?)
- URL: <http://www.tz-mikroelektronik.de/ServiceModule/index.html>
-
- HERMES_PRO:
- Hermes-Pro ISDN/LAN router with integrated 8 x hub
- Manufacturer: Multidata Gesellschaft für Datentechnik und Informatik
- <http://www.multidata.de/>
- Date of Release: 2000 (?)
- End of life: -
- URL: <http://www.multidata.de/english/products/hpro.htm>
-
- IP860:
- VMEBus IP (Industry Pack) carrier board with MPC860
- Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
- Date of Release: ?
- End of life: -
- URL: <http://www.microsys.de/html/ip860.html>
-
- PCU_E:
- PCU = Peripheral Controller Unit, Extended
- Manufacturer: Siemens AG, ICN (Information and Communication Networks)
- <http://www.siemens.de/page/1,3771,224315-1-999_2_226207-0,00.html>
- Date of Release: April 2001
- End of life: August 2001
- URL: n. a.
-
-RPX-Classic
-CONFIG_RPXCLASSIC
- The RPX-Classic is a single-board computer based on the Motorola
- MPC860. It features 16MB of DRAM and a variable amount of flash,
- I2C EEPROM, thermal monitoring, a PCMCIA slot, a DIP switch and two
- LEDs. Variants with Ethernet ports exist. Say Y here to support it
- directly.
-
-BSE-IP
-CONFIG_BSEIP
- Say Y here to support the Bright Star Engineering ipEngine SBC.
- This is a credit-card-sized device featuring a MPC823 processor,
- 26MB DRAM, 4MB flash, Ethernet, a 16K-gate FPGA, USB, an LCD/video
- controller, and two RS232 ports.
-
-TQM823L
-CONFIG_TQM823L
- Say Y here to support the TQM823L, one of an MPC8xx-based family of
- mini SBCs (half credit-card size) from TQ Components first released
- in late 1999. Technical references are at
- <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
- <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
- <http://www.denx.de/embedded-ppc-en.html>.
-
-TQM850L
-CONFIG_TQM850L
- Say Y here to support the TQM850L, one of an MPC8xx-based family of
- mini SBCs (half credit-card size) from TQ Components first released
- in late 1999. Technical references are at
- <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
- <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
- <http://www.denx.de/embedded-ppc-en.html>.
-
-TQM855L
-CONFIG_TQM855L
- Say Y here to support the TQM855L, one of an MPC8xx-based family of
- mini SBCs (half credit-card size) from TQ Components first released
- in late 1999. Technical references are at
- <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
- <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
- <http://www.denx.de/embedded-ppc-en.html>.
-
-TQM860L
-CONFIG_TQM860L
- Say Y here to support the TQM860L, one of an MPC8xx-based family of
- mini SBCs (half credit-card size) from TQ Components first released
- in late 1999. Technical references are at
- <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
- <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
- <http://www.denx.de/embedded-ppc-en.html>.
-
-FPS850
-CONFIG_FPS850
- Say Y here to support the FingerPrint Sensor from AKENDI IG, based
- on the TQ Components TQM850L module, released November 1999 and
- discontinued a year later.
-
-TQM860
-CONFIG_TQM860
- Say Y here to support the TQM860, one of an MPC8xx-based family of
- SBCs (credit-card size) from TQ Components first released in
- mid-1999 and discontinued mid-2000.
-
-SM850
-CONFIG_SM850
- Say Y here to support the Service Module 850 from Dependable
- Computer Systems, an SBC based on the TQM850L module by TQ
- Components. This board is no longer in production. The
- manufacturer's website is at <http://www.decomsys.com/>.
-
-SPD823TS
-CONFIG_SPD823TS
- Say Y here to support the Speech Design 823 Tele-Server from Speech
- Design, released in 2000. The manufacturer's website is at
- <http://www.speech-design.de/>.
-
-IVMS8
-CONFIG_IVMS8
- Say Y here to support the Integrated Voice-Mail Small 8-channel SBC
- from Speech Design, released March 2001. The manufacturer's website
- is at <http://www.speech-design.de/>.
-
-# IVML24 is not yet active
-IVML24
-CONFIG_IVML24
- Say Y here to support the Integrated Voice-Mail Large 24-channel SBC
- from Speech Design, released March 2001. The manufacturer's website
- is at <http://www.speech-design.de/>.
-
-MBX
-CONFIG_MBX
- MBX is a line of Motorola single-board computer based around the
- MPC821 and MPC860 processors, and intended for embedded-controller
- applications. Say Y here to support these boards directly.
-
-WinCept
-CONFIG_WINCEPT
- The Wincept 100/110 is a Motorola single-board computer based on the
- MPC821 PowerPC, introduced in 1998 and designed to be used in
- thin-client machines. Say Y to support it directly.
-
-# More systems that will be supported soon, according to
-# Wolfgang Denk <wd@denx.de>:
-#
-# TQM8260:
-# MPC8260 based module
-#
-# Manufacturer: TQ Components, www.tq-group.de
-# Date of Release: June 2001
-# End of Life: not yet :-)
-# URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev003.pdf>
-#
-# IP860:
-# VMEBus IP (Industry Pack) carrier board with MPC860
-#
-# Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
-# Date of Release: ?
-# End of life: -
-# URL: <http://www.microsys.de/html/ip860.html>
-#
-# CU824:
-# VMEBus Board with PCI extension with MPC8240 CPU
-#
-# Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
-# Date of Release: early 2001 (?)
-# End of life: -
-# URL: <http://www.microsys.de/html/cu824.html>
-#
-# PM826:
-# Modular system with MPC8260 CPU
-#
-# Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
-# Date of Release: mid 2001
-# End of life: -
-# URL: <http://www.microsys.de/html/pm826.html>
-#
-# PCU_E:
-# PCU = Peripheral Controller Unit; E = extended (?)
-#
-# Mfr: Siemens AG, ICN (Information and Communication Networks)
-# <http://www.siemens.de/page/1,3771,224315-1-999_2_226207-0,00.html>
-# Date of Release: April 2001
-# End of life: -
-# URL: n. a.o
-
-# Choice: ppc82xxtype
-Embedded 82xx Board Type
-CONFIG_EST8260
- EST8260:
- The EST8260 is a single-board computer manufactured by Wind River
- Systems, Inc. (formerly Embedded Support Tools Corp.) and based on
- the MPC8260. Wind River Systems has a website at
- <http://www.windriver.com/>, but the EST8260 cannot be found on it
- and has probably been discontinued or rebadged.
-
- TQM8260:
- MPC8260 based module, little larger than credit card,
- up to 128 MB global + 64 MB local RAM, 32 MB Flash,
- 32 kB EEPROM, 256 kB L@ Cache, 10baseT + 100baseT Ethernet,
- 2 x serial ports, ...
- Manufacturer: TQ Components, www.tq-group.de
- Date of Release: June 2001
- End of Life: not yet :-)
- URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev005.pdf>
-
- PM826:
- Modular system with MPC8260 CPU
- Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
- Date of Release: mid 2001
- End of life: -
- URL: <http://www.microsys.de/html/pm826.html>
-
- CU824:
- VMEBus Board with PCI extension with MPC8240 CPU
- Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
- Date of Release: early 2001 (?)
- End of life: -
- URL: <http://www.microsys.de/html/cu824.html>
-
-ADB raw keycode support
-CONFIG_MAC_ADBKEYCODES
- This provides support for sending raw ADB keycodes to console
- devices. This is the default up to 2.4.0, but in future this may be
- phased out in favor of generic Linux keycodes. If you say Y here,
- you can dynamically switch via the
- /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
- sysctl and with the "keyboard_sends_linux_keycodes=" kernel
- argument.
-
- This option is now deprecated and will be removed in a future
- kernel release.
-
- If unsure, say N here.
-
-I2C/SPI Microcode Patch
-CONFIG_UCODE_PATCH
- Motorola releases microcode updates for their 8xx CPM modules. The
- microcode update file has updates for IIC, SMC and USB. Currently only
- the USB update is available by default, if the MPC8xx USB option is
- enabled. If in doubt, say 'N' here.
-
-Mouse button 2+3 emulation support
-CONFIG_MAC_EMUMOUSEBTN
- This provides generic support for emulating the 2nd and 3rd mouse
- button with keypresses. If you say Y here, the emulation is still
- disabled by default. The emulation is controlled by these sysctl
- entries:
- /proc/sys/dev/mac_hid/mouse_button_emulation
- /proc/sys/dev/mac_hid/mouse_button2_keycode
- /proc/sys/dev/mac_hid/mouse_button3_keycode
-
-Set high memory pool address
-CONFIG_HIGHMEM_START_BOOL
- Unless you know what you are doing you *should not* set this option.
-
- It can be used to override the default PKMAP_BASE address which
- is the location of the high memory pool. This can be useful in
- optimizing virtual memory usage in a system.
-
-Set maximum low memory
-CONFIG_LOWMEM_SIZE_BOOL
- Unless you know what you are doing you *should not* set this option.
-
- It can be used to override the standard calculated value of
- MAX_LOW_MEM. This can be useful in optimizing virtual memory usage
- in a system.
-
-Set custom kernel base address
-CONFIG_KERNEL_START_BOOL
- Unless you know what you are doing you *should not* set this option.
-
- It can be used to override the standard PAGE_OFFSET/KERNELBASE
- value used by the kernel. This can be useful in controlling
- amount of virtual address space available to the kernel.
-
-Set custom user task size
-CONFIG_TASK_SIZE_BOOL
- Unless you know what you are doing you *should not* set this option.
-
- It can be used to override the standard TASK_SIZE value used
- by the kernel. This can be useful in controlling amount of
- virtual address space available to user tasks.
-
-Enhanced Real Time Clock Support (/dev/rtc)
-CONFIG_PPC_RTC
- If you say Y here and create a character special file /dev/rtc with
- major number 10 and minor number 135 using mknod ("man mknod"), you
- will get access to the real time clock (or hardware clock) built
- into your computer.
-
- If unsure, say Y here.
-
-Support for Open Firmware device tree in /proc
-CONFIG_PROC_DEVICETREE
- This option adds a device-tree directory under /proc which contains
- an image of the device tree that the kernel copies from Open
- Firmware. If unsure, say Y here.
-
-RTAS (RunTime Abstraction Services) in /proc
-CONFIG_PPC_RTAS
- When you use this option, you will be able to use RTAS from
- userspace.
-
- RTAS stands for RunTime Abstraction Services and should
- provide a portable way to access and set system information. This is
- commonly used on RS/6000 (pSeries) computers.
-
- You can access RTAS via the special proc file system entry rtas.
- Don't confuse this rtas entry with the one in /proc/device-tree/rtas
- which is readonly.
-
- If you don't know if you can use RTAS look into
- /proc/device-tree/rtas. If there are some entries, it is very likely
- that you will be able to use RTAS.
-
- You can do cool things with rtas. To print out information about
- various sensors in the system, just do a
-
- $ cat /proc/rtas/sensors
-
- or if you power off your machine at night but want it running when
- you enter your office at 7:45 am, do a
-
- # date -d 'tomorrow 7:30' +%s > /proc/rtas/poweron
-
- and shutdown.
-
- If unsure, say Y.
-
-Support for Lpar Configuration data in /proc
-CONFIG_LPARCFG
- This option adds lparcfg entry as /proc/ppc64/lparcfg which returns
- system configuration info in <key word>=<value> pairs.
-
-MESH (Power Mac internal SCSI) support
-CONFIG_SCSI_MESH
- Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
- SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
- other Power Macintoshes do). Say Y to include support for this SCSI
- adaptor. This driver is also available as a module called mesh.o
- ( = code which can be inserted in and removed from the running
- kernel whenever you want). If you want to compile it as a module,
- say M here and read <file:Documentation/modules.txt>.
-
-Maximum synchronous transfer rate (MB/s) (0 = async)
-CONFIG_SCSI_MESH_SYNC_RATE
- On Power Macintoshes (and clones) where the MESH SCSI bus adaptor
- drives a bus which is entirely internal to the machine (such as the
- 7500, 7600, 8500, etc.), the MESH is capable of synchronous
- operation at up to 10 MB/s. On machines where the SCSI bus
- controlled by the MESH can have external devices connected, it is
- usually rated at 5 MB/s. 5 is a safe value here unless you know the
- MESH SCSI bus is internal only; in that case you can say 10. Say 0
- to disable synchronous operation.
-
-53C94 (Power Mac external SCSI) support
-CONFIG_SCSI_MAC53C94
- On Power Macintoshes (and clones) with two SCSI buses, the external
- SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
- machines which only have one SCSI bus, such as the 7200, also use
- the 53C94. Say Y to include support for the 53C94.
-
- This driver is also available as a module called mac53c94.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-MACE (Power Mac Ethernet) support
-CONFIG_MACE
- Power Macintoshes and clones with Ethernet built-in on the
- motherboard will usually use a MACE (Medium Access Control for
- Ethernet) interface. Say Y to include support for the MACE chip.
-
- This driver is also available as a module called mace.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Use AAUI port instead of TP by default
-CONFIG_MACE_AAUI_PORT
- Some Apple machines (notably the Apple Network Server) which use the
- MACE ethernet chip have an Apple AUI port (small 15-pin connector),
- instead of an 8-pin RJ45 connector for twisted-pair ethernet. Say
- Y here if you have such a machine. If unsure, say N.
- The driver will default to AAUI on ANS anyway, and if you use it as
- a module, you can provide the port_aaui=0|1 to force the driver.
-
-BMAC (G3 Ethernet) support
-CONFIG_BMAC
- Say Y for support of BMAC Ethernet interfaces. These are used on G3
- computers.
-
- This driver is also available as a module called bmac.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-GMAC (G4/iBook Ethernet) support
-CONFIG_GMAC
- Say Y for support of GMAC Ethernet interfaces. These are used on G4
- and iBook computers.
-
- This driver is also available as a module called gmac.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-National DP83902AV (Oak Ethernet) support
-CONFIG_OAKNET
- Say Y if your machine has this type of Ethernet network card.
-
- This driver is also available as a module called oaknet.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Video For Linux
-CONFIG_VIDEO_DEV
- Support for audio/video capture and overlay devices and FM radio
- cards. The exact capabilities of each device vary. User tools for
- this are available from
- <ftp://ftp.uk.linux.org/pub/linux/video4linux/>.
-
- If you are interested in writing a driver for such an audio/video
- device or user software interacting with such a driver, please read
- the file <file:Documentation/video4linux/API.html>.
-
- This driver is also available as a module called videodev.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Video For Linux /proc file system information
-CONFIG_VIDEO_PROC_FS
- If you say Y here, you are able to access video device information
- in /proc/video.
-
- To use this option, you have to check, that the "/proc file system
- support" (CONFIG_PROC_FS) is enabled too.
-
-AIMSlab RadioTrack (aka RadioReveal) support
-CONFIG_RADIO_RTRACK
- Choose Y here if you have one of these FM radio cards, and then fill
- in the port address below.
-
- Note that newer AIMSlab RadioTrack cards have a different chipset
- and are not supported by this driver. For these cards, use the
- RadioTrack II driver below.
-
- If you have a GemTeks combined (PnP) sound- and radio card you must
- use this driver as a module and setup the card with isapnptools.
- You must also pass the module a suitable io parameter, 0x248 has
- been reported to be used by these cards.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>. More
- information is contained in the file
- <file:Documentation/video4linux/radiotrack.txt>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-aimslab.o.
-
-RadioTrack I/O port
-CONFIG_RADIO_RTRACK_PORT
- Enter either 0x30f or 0x20f here. The card default is 0x30f, if you
- haven't changed the jumper setting on the card.
-
-AIMSlab RadioTrack II support
-CONFIG_RADIO_RTRACK2
- Choose Y here if you have this FM radio card, and then fill in the
- port address below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-rtrack2.o.
-
-RadioTrack II I/O port
-CONFIG_RADIO_RTRACK2_PORT
- Enter either 0x30c or 0x20c here. The card default is 0x30c, if you
- haven't changed the jumper setting on the card.
-
-Aztech/Packard Bell Radio
-CONFIG_RADIO_AZTECH
- Choose Y here if you have one of these FM radio cards, and then fill
- in the port address below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-aztech.o.
-
-Aztech/Packard Bell radio card I/O port
-CONFIG_RADIO_AZTECH_PORT
- Enter either 0x350 or 0x358 here. The card default is 0x350, if you
- haven't changed the setting of jumper JP3 on the card. Removing the
- jumper sets the card to 0x358.
-
-ADS Cadet AM/FM Radio Tuner Card
-CONFIG_RADIO_CADET
- Choose Y here if you have one of these AM/FM radio cards, and then
- fill in the port address below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- Further documentation on this driver can be found on the WWW at
- <http://linux.blackhawke.net/cadet.html>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-cadet.o.
-
-SF16FMI Radio
-CONFIG_RADIO_SF16FMI
- Choose Y here if you have one of these FM radio cards. If you
- compile the driver into the kernel and your card is not PnP one, you
- have to add "sf16fm=<io>" to the kernel command line (I/O address is
- 0x284 or 0x384).
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-sf16fmi.o.
-
-SF16FMR2 Radio
-CONFIG_RADIO_SF16FMR2
- Choose Y here if you have one of these FM radio cards. If you
- compile the driver into the kernel and your card is not PnP one, you
- have to add "sf16fmr2=<io>" to the kernel command line (I/O address is
- 0x284 or 0x384, default 0x384).
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-sf16fmr2.o.
-
-Typhoon Radio (a.k.a. EcoRadio)
-CONFIG_RADIO_TYPHOON
- Choose Y here if you have one of these FM radio cards, and then fill
- in the port address and the frequency used for muting below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-typhoon.o.
-
-Support for /proc/radio-typhoon
-CONFIG_RADIO_TYPHOON_PROC_FS
- Say Y here if you want the typhoon radio card driver to write
- status information (frequency, volume, muted, mute frequency,
- base address) to /proc/radio-typhoon. The file can be viewed with
- your favorite pager (i.e. use "more /proc/radio-typhoon" or "less
- /proc/radio-typhoon" or simply "cat /proc/radio-typhoon").
-
-Typhoon I/O port (0x316 or 0x336)
-CONFIG_RADIO_TYPHOON_PORT
- Enter the I/O port of your Typhoon or EcoRadio radio card.
-
-Typhoon frequency set when muting the device (kHz)
-CONFIG_RADIO_TYPHOON_MUTEFREQ
- Enter the frequency used for muting the radio. The device is never
- completely silent. If the volume is just turned down, you can still
- hear silent voices and music. For that reason, the frequency of the
- radio device is set to the frequency you can enter here whenever
- the device is muted. There should be no local radio station at that
- frequency.
-
-Zoltrix Radio
-CONFIG_RADIO_ZOLTRIX
- Choose Y here if you have one of these FM radio cards, and then fill
- in the port address below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-zoltrix.o.
-
-ZOLTRIX I/O port (0x20c or 0x30c)
-CONFIG_RADIO_ZOLTRIX_PORT
- Enter the I/O port of your Zoltrix radio card.
-
-I2C on parallel port
-CONFIG_I2C_PARPORT
- I2C is a simple serial bus system used in many micro controller
- applications. Saying Y here will allow you to use your parallel
- port as an I2C interface.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called i2c-parport.o.
-
-miroSOUND PCM20 radio
-CONFIG_RADIO_MIROPCM20
- Choose Y here if you have this FM radio card. You also need to say Y
- to "ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)" (in "Sound")
- for this to work.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called miropcm20.o.
-
-miroSOUND PCM20 radio RDS user interface (EXPERIMENTAL)
-CONFIG_RADIO_MIROPCM20_RDS
- Choose Y here if you want to see RDS/RBDS information like
- RadioText, Programme Service name, Clock Time and date, Programme
- TYpe and Traffic Announcement/Programme identification. You also
- need to say Y to "miroSOUND PCM20 radio" and devfs!
-
- It's not possible to read the raw RDS packets from the device, so
- the driver cant provide an V4L interface for this. But the
- availability of RDS is reported over V4L by the basic driver
- already. Here RDS can be read from files in /dev/v4l/rds.
-
- As module the driver will be called miropcm20-rds.o.
-
-Maestro on board radio
-CONFIG_RADIO_MAESTRO
- Say Y here to directly support the on-board radio tuner on the
- Maestro 2 or 2E sound card.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-maestro.o.
-
-Guillemot MAXI Radio FM 2000 Radio Card
-CONFIG_RADIO_MAXIRADIO
- Choose Y here if you have this radio card. This card may also be
- found as GemTek PCI FM.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-maxiradio.o.
-
-GemTek Radio Card support
-CONFIG_RADIO_GEMTEK
- Choose Y here if you have this FM radio card, and then fill in the
- port address below.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-gemtek.o.
-
-GemTek I/O port
-CONFIG_RADIO_GEMTEK_PORT
- Enter either 0x20c, 0x30c, 0x24c or 0x34c here. The card default is
- 0x34c, if you haven't changed the jumper setting on the card. On
- Sound Vision 16 Gold PnP with FM Radio (ESS1869+FM GemTek), the I/O
- port is 0x28c.
-
-GemTek PCI Radio Card support
-CONFIG_RADIO_GEMTEK_PCI
- Choose Y here if you have this PCI FM radio card.
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video for Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-gemtek-pci.o.
-
-PlanB Video-In for PowerMacs
-CONFIG_VIDEO_PLANB
- PlanB is the V4L driver for the PowerMac 7x00/8x00 series video
- input hardware. If you want to experiment with this, say Y.
- Otherwise, or if you don't understand a word, say N.
- See <http://www.cpu.lu/~mlan/planb.html> for more info.
-
- Saying M will compile this driver as a module (planb.o).
-
-TerraTec ActiveRadio
-CONFIG_RADIO_TERRATEC
- Choose Y here if you have this FM radio card, and then fill in the
- port address below. (TODO)
-
- Note: This driver is in its early stages. Right now volume and
- frequency control and muting works at least for me, but
- unfortunately I have not found anybody who wants to use this card
- with Linux. So if it is this what YOU are trying to do right now,
- PLEASE DROP ME A NOTE!! Rolf Offermanns (rolf@offermanns.de)
-
- In order to control your radio card, you will need to use programs
- that are compatible with the Video For Linux API. Information on
- this API and pointers to "v4l" programs may be found on the WWW at
- <http://roadrunner.swansea.uk.linux.org/v4l.shtml>.
-
- If you want to compile this driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called radio-terratec.o.
-
-Terratec I/O port (normally 0x590)
-CONFIG_RADIO_TERRATEC_PORT
- Fill in the I/O port of your TerraTec FM radio card. If unsure, go
- with the default.
-
-Trust FM radio card
-CONFIG_RADIO_TRUST
- This is a driver for the Trust FM radio cards. Say Y if you have
- such a card and want to use it under Linux.
-
- This driver is also available as a module called radio-trust.o ( =
- code which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-Trust I/O port (usually 0x350 or 0x358)
-CONFIG_RADIO_TRUST_PORT
- Enter the I/O port of your Trust FM radio card. If unsure, try the
- values "0x350" or "0x358".
-
-BT848 Video For Linux
-CONFIG_VIDEO_BT848
- Support for BT848 based frame grabber/overlay boards. This includes
- the Miro, Hauppauge and STB boards. Please read the material in
- <file:Documentation/video4linux/bttv> for more information.
-
- If you say Y or M here, you need to say Y or M to "I2C support" and
- "I2C bit-banging interfaces" in the character device section.
-
- This driver is available as a module called bttv.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-BT878 audio DMA
-CONFIG_SOUND_BT878
- Audio DMA support for bt878 based grabber boards. As you might have
- already noticed, bt878 is listed with two functions in /proc/pci.
- Function 0 does the video stuff (bt848 compatible), function 1 does
- the same for audio data. This is a driver for the audio part of
- the chip. If you say 'Y' here you get a oss-compatible dsp device
- where you can record from. If you want just watch TV you probably
- don't need this driver as most TV cards handle sound with a short
- cable from the TV card to your sound card's line-in.
-
- This driver is available as a module called btaudio.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-SGI Vino Video For Linux
-CONFIG_VIDEO_VINO
- Say Y here to include support for SGI VINO (Video In No Out) system
- found on SGI Indy workstations.
-
-Stradis 4:2:2 MPEG-2 video driver
-CONFIG_VIDEO_STRADIS
- Say Y here to enable support for the Stradis 4:2:2 MPEG-2 video
- driver for PCI. There is a product page at
- <http://www.stradis.com/decoder.html>.
-
-Zoran ZR36057/36060 Video For Linux
-CONFIG_VIDEO_ZORAN
- Say Y here to include support for video cards based on the Zoran
- ZR36057/36060 encoder/decoder chip (including the Iomega Buz and the
- Miro DC10 and DC30 video capture cards).
-
-Include support for Iomega Buz
-CONFIG_VIDEO_ZORAN_BUZ
- Say Y here to include support for the Iomega Buz video card. There
- is a Buz/Linux homepage at <http://www.lysator.liu.se/~gz/buz/>.
-
-Miro DC10(+) support
-CONFIG_VIDEO_ZORAN_DC10
- Say Y to support the Pinnacle Systems Studio DC10 plus TV/Video
- card. Linux page at
- <http://lhd.datapower.com/db/dispproduct.php3?DISP?1511>. Vendor
- page at <http://www.pinnaclesys.com/>.
-
-Linux Media Labs LML33 support
-CONFIG_VIDEO_ZORAN_LML33
- Say Y here to support the Linux Media Labs LML33 TV/Video card.
- Resources page is at <http://www.linuxmedialabs.com/lml33doc.html>.
-
-Zoran ZR36120/36125 Video For Linux
-CONFIG_VIDEO_ZR36120
- Support for ZR36120/ZR36125 based frame grabber/overlay boards.
- This includes the Victor II, WaveWatcher, Video Wonder, Maxi-TV,
- and Buster boards. Please read the material in
- <file:Documentation/video4linux/zr36120.txt> for more information.
-
- This driver is also available as a module called zr36120.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-SAA5249 Teletext processor
-CONFIG_VIDEO_SAA5249
- Support for I2C bus based teletext using the SAA5249 chip. At the
- moment this is only useful on some European WinTV cards.
-
- This driver is also available as a module called saa5249.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-QuickCam BW Video For Linux
-CONFIG_VIDEO_BWQCAM
- Say Y have if you the black and white version of the QuickCam
- camera. See the next option for the color version.
-
- This driver is also available as a module called bw-qcam.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-QuickCam Colour Video For Linux
-CONFIG_VIDEO_CQCAM
- This is the video4linux driver for the colour version of the
- Connectix QuickCam. If you have one of these cameras, say Y here,
- otherwise say N. This driver does not work with the original
- monochrome QuickCam, QuickCam VC or QuickClip. It is also available
- as a module (c-qcam.o).
- Read <file:Documentation/video4linux/CQcam.txt> for more information.
-
-W9966 Webcam (FlyCam Supra and others) Video For Linux
-CONFIG_VIDEO_W9966
- Video4linux driver for Winbond's w9966 based Webcams.
- Currently tested with the LifeView FlyCam Supra.
- If you have one of these cameras, say Y here
- otherwise say N.
- This driver is also available as a module (w9966.o).
-
- Check out <file:drivers/media/video4linux/w9966.txt> and
- <file:drivers/media/video/w9966.c> for more information.
-
-Philips SAA7114H for SiByte BCM91250A
-CONFIG_VIDEO_SWARM_7114H
- Say Y or M to build the video4linux driver for the Philips SAA7114H
- video decoder on Broadcom SWARM board (BCM91250A). The decoder chip
- is on the BCM1250's "E2" 8-bit FIFO port.
-
-CPiA Video For Linux
-CONFIG_VIDEO_CPIA
- This is the video4linux driver for cameras based on Vision's CPiA
- (Colour Processor Interface ASIC), such as the Creative Labs Video
- Blaster Webcam II. If you have one of these cameras, say Y here
- and select parallel port and/or USB lowlevel support below,
- otherwise say N. This will not work with the Creative Webcam III.
-
- Please read <file:Documentation/video4linux/README.cpia> for more
- information.
-
- This driver is also available as a module (cpia.o).
-
-CPiA Parallel Port Lowlevel Support
-CONFIG_VIDEO_CPIA_PP
- This is the lowlevel parallel port support for cameras based on
- Vision's CPiA (Colour Processor Interface ASIC), such as the
- Creative Webcam II. If you have the parallel port version of one
- of these cameras, say Y here, otherwise say N. It is also available
- as a module (cpia_pp.o).
-
-CPiA USB Lowlevel Support
-CONFIG_VIDEO_CPIA_USB
- This is the lowlevel USB support for cameras based on Vision's CPiA
- (Colour Processor Interface ASIC), such as the Creative Webcam II.
- If you have the USB version of one of these cameras, say Y here,
- otherwise say N. This will not work with the Creative Webcam III.
- It is also available as a module (cpia_usb.o).
-
-Mediavision Pro Movie Studio Video For Linux
-CONFIG_VIDEO_PMS
- Say Y if you have such a thing. This driver is also available as a
- module called pms.o ( = code which can be inserted in and removed
- from the running kernel whenever you want). If you want to compile
- it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Sony Vaio Picturebook Motion Eye Video For Linux
-CONFIG_VIDEO_MEYE
- This is the video4linux driver for the Motion Eye camera found
- in the Vaio Picturebook laptops. Please read the material in
- <file:Documentation/video4linux/meye.txt> for more information.
-
- If you say Y or M here, you need to say Y or M to "Sony Programmable
- I/O Control Device" in the character device section.
-
- This driver is available as a module called meye.o ( = code
- which can be inserted in and removed from the running kernel
- whenever you want). If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>.
-
-IBM's S/390 architecture
-CONFIG_ARCH_S390
- Select this option, if you want to run the Kernel on one of IBM's
- mainframes of the S/390 generation. You should have installed the
- s390-compiler released by IBM (based on gcc-2.95.1) before.
-
-Merge some code into the kernel to make the image IPLable
-CONFIG_IPL
- If you want to use the produced kernel to IPL directly from a
- device, you have to merge a bootsector specific to the device
- into the first bytes of the kernel. You will have to select the
- IPL device on another question, that pops up, when you select
- CONFIG_IPL.
-
-IPL from a S/390 tape unit
-CONFIG_IPL_TAPE
- Select this option if you want to IPL the image from a Tape.
-
-IPL from a virtual card reader emulated by VM/ESA
-CONFIG_IPL_VM
- Select this option if you are running under VM/ESA and want
- to IPL the image from the emulated card reader.
-
-CONFIG_PFAULT
- Select this option, if you want to use PFAULT pseudo page fault
- handling under VM. If running native or in LPAR, this option
- has no effect. If your VM does not support PFAULT, PAGEEX
- pseudo page fault handling will be used.
- Note that VM 4.2 supports PFAULT but has a bug in its
- implementation that causes some problems.
- Everybody who wants to run Linux under VM != VM4.2 should select
- this option.
-
-CONFIG_SHARED_KERNEL
- Select this option, if you want to share the text segment of the
- Linux kernel between different VM guests. This reduces memory
- usage with lots of guests but greatly increases kernel size.
- You should only select this option if you know what you are
- doing and want to exploit this feature.
-
-Support for IBM-style disk-labels (S/390)
-CONFIG_S390_PARTITION
- Enable this option to assure standard IBM labels on the DASDs.
- You must enable it, if you are planning to access DASDs also
- attached to another IBM mainframe operation system (OS/390,
- VM/ESA, VSE/ESA).
-
-Support for DASD hard disks
-CONFIG_DASD
- Enable this option if you want to access DASDs directly utilizing
- S/390s channel subsystem commands. This is necessary for running
- natively on a single image or an LPAR.
-
-Support for ECKD hard disks
-CONFIG_DASD_ECKD
- ECKD (Extended Count Key Data) devices are the most commonly used
- devices on S/390s. You should enable this option unless you are
- very sure you have no ECKD device.
-
-ECKD demand loading
-CONFIG_DASD_AUTO_ECKD
- This option enables demand loading of the ECKD module.
-
-Support for FBA hard disks
-CONFIG_DASD_FBA
- Select this option if you want to use FBA (Fixed Block) devices.
- If you are not sure what it is, say "Y".
-
-FBA demand loading
-CONFIG_DASD_AUTO_FBA
- This option enables demand loading of the FBA module.
-
-Support for DIAG access to CMS reserved Disks
-CONFIG_DASD_DIAG
- Select this option if you want to use CMS reserved Disks under VM
- with the Diagnose250 command. If you are not running under VM or
- unsure what it is, say "N".
-
-DIAG demand loading
-CONFIG_DASD_AUTO_DIAG
- This option enables demand loading of the DIAG module.
-
-Merge some code into the kernel to make the image IPLable
-CONFIG_IPLABLE
- If you want to use the produced kernel to IPL directly from a
- device, you have to merge a bootsector specific to the device
- into the first bytes of the kernel. You will have to select the
- IPL device on another question, that pops up, when you select
- CONFIG_IPLABE.
-
-Support for 3215 line mode terminal
-CONFIG_TN3215
- Include support for IBM 3215 line-mode terminals.
-
-Support for console on 3215 line mode terminal
-CONFIG_TN3215_CONSOLE
- Include support for using an IBM 3215 line-mode terminal as a
- Linux system console.
-
-Support for 3270 line mode terminal
-CONFIG_TN3270
- Include support for IBM 3270 line-mode terminals.
-
-Support for console on 3270 line mode terminal
-CONFIG_TN3270_CONSOLE
- Include support for using an IBM 3270 line-mode terminal as a Linux
- system console. Available only if 3270 support is compiled in
- statically.
-
-Support for HWC line mode terminal
-CONFIG_HWC
- Include support for IBM HWC line-mode terminals.
-
-Console on HWC line mode terminal
-CONFIG_HWC_CONSOLE
- Include support for using an IBM HWC line-mode terminal as the Linux
- system console.
-
-Control Program Identification
-CONFIG_HWC_CPI
- Allows for Control Program Identification via the HWC interface,
- i.e. provides a mean to pass an OS instance name (system name)
- to the machine.
-
- This option should only be selected as a module since the
- system name has to be passed as module parameter. The module
- will be called hwc_cpi.o.
-
-S/390 tape device support
-CONFIG_S390_TAPE
- Select this option if you want to access channel-attached tape
- devices on IBM S/390 or zSeries.
- If you select this option you will also want to select at
- least one of the tape interface options and one of the tape
- hardware options in order to access a tape device.
- This option is also available as a module. The module will be
- called tape390.o and include all selected interfaces.
- The hardware drivers will be seperate modules.
- If unsure, say "Y".
-
-Support for tape character devices
-CONFIG_S390_TAPE_CHAR
- Select this option if you want to access your channel-attached
- tape devices using the character device interface.
- This interface is similar to other Linux tape devices like
- SCSI-Tapes (st) and the floppy tape device (ftape).
- If unsure, say "Y".
-
-Support for tape block devices
-CONFIG_S390_TAPE_BLOCK
- Select this option if you want to access your channel-attached tape
- devices using the block device interface. This interface is similar
- to CD-ROM devices on other platforms. The tapes can only be
- accessed read-only when using this interface. Have a look at
- Documentation/s390/TAPE for further information about creating
- volumes for and using this interface. It is safe to say "Y" here.
-
-Support for 3490 tape hardware
-CONFIG_S390_TAPE_3490
- Select this option if you want to access IBM 3490 magnetic
- tape subsystems and 100% compatibles.
- This option is also available as a module. The module will be
- called tape3490.o. If CONFIG_S390_TAPE is selected as a module,
- this hardware driver cannot be built-in but is only available
- as a module.
- It is safe to say "Y" here.
-
-Support for 3480 tape hardware
-CONFIG_S390_TAPE_3480
- Select this option if you want to access IBM 3480 magnetic
- tape subsystems and 100% compatibles.
- This option is also available as a module. The module will be
- called tape3480.o. If CONFIG_S390_TAPE is selected as a module,
- this hardware driver cannot be built-in but is only available
- as a module.
- It is safe to say "Y" here.
-
-CTC device support
-CONFIG_CTC
- Select this option if you want to use channel-to-channel networking
- on IBM S/390 or zSeries. This device driver supports real CTC
- coupling using ESCON. It also supports virtual CTCs when running
- under VM. It will use the channel device configuration if this is
- available. This option is also available as a module which will be
- called ctc.o. If you do not know what it is, it's safe to say "Y".
-
-XPRAM disk support
-CONFIG_BLK_DEV_XPRAM
- Select this option if you want to use your expanded storage on S/390
- or zSeries as a disk. This is useful as a _fast_ swap device if you
- want to access more than 2G of memory when running in 31 bit mode.
- This option is also available as a module which will be called
- xpram.o. If unsure, say "N".
-
-Fast IRQ handling
-CONFIG_FAST_IRQ
- Select this option in order to get the interrupts processed faster
- on your S/390 or zSeries machine. If selected, after an interrupt
- is processed, the channel subsystem will be asked for other pending
- interrupts which will also be processed before leaving the interrupt
- context. This speeds up the I/O a lot. Say "Y".
-
-IUCV device support (VM only)
-CONFIG_IUCV
- Select this option if you want to use inter-user communication
- vehicle networking under VM or VIF. This option is also available
- as a module which will be called iucv.o. If unsure, say "Y".
-
-Process warning machine checks
-CONFIG_MACHCHK_WARNING
- Select this option if you want the machine check handler on IBM S/390 or
- zSeries to process warning machine checks (e.g. on power failures).
- If unsure, say "Y".
-
-Use chscs for Common I/O
-CONFIG_CHSC
- Select this option if you want the s390 common I/O layer to use information
- obtained by channel subsystem calls. This will enable Linux to process link
- failures and resource accessibility events. Moreover, if you have procfs
- enabled, you'll be able to toggle chpids logically offline and online. Even
- if you don't understand what this means, you should say "Y".
-
-Process warning machine checks
-CONFIG_MACHCHK_WARNING
- Select this option if you want the machine check handler on IBM S/390 or
- zSeries to process warning machine checks (e.g. on power failures).
- If unsure, say "Y".
-
-Use chscs for Common I/O
-CONFIG_CHSC
- Select this option if you want the s390 common I/O layer to use information
- obtained by channel subsystem calls. This will enable Linux to process link
- failures and resource accessibility events. Moreover, if you have procfs
- enabled, you'll be able to toggle chpids logically offline and online. Even
- if you don't understand what this means, you should say "Y".
-
-Kernel support for 31 bit ELF binaries
-CONFIG_S390_SUPPORT
- Select this option if you want to enable your system kernel to
- handle system-calls from ELF binaries for 31 bit ESA. This option
- (and some other stuff like libraries and such) is needed for
- executing 31 bit applications. It is safe to say "Y".
-
-Channel Device Configuration
-CONFIG_CHANDEV
- The channel device layer is a layer to provide a consistent
- interface for configuration & default machine check (devices
- appearing & disappearing) handling on Linux for s/390 & z/Series
- channel devices.
-
- s/390 & z/Series channel devices include among others
-
- lcs (the most common ethernet/token ring/fddi standard on
- zSeries)
- ctc/escon hi speed like serial link standard on zSeries
- claw used to talk to cisco routers.
- qeth gigabit ethernet.
-
- These devices use two channels one read & one write for
- configuration & communication (& a third channel, the data
- channel the case of gigabit ethernet). The motivation
- behind developing this layer was that there was a lot of
- duplicate code among the channel device drivers for
- configuration.
-
- Also the lcs & ctc drivers tended to fight over
- 3088/08's & 3088/1F's which could be either 2216/3172
- channel attached lcs compatible devices or escon/ctc pipes
- had to be configured separately as they couldn't autodetect,
- this is now simplified by doing the configuration in a single
- place (the channel device layer).
-
- This layer isn't invasive & it is quite okay to use channel
- drivers which don't use the channel device layer in
- conjunction with drivers which do.
-
- For more info see the chandev manpage usually distributed in
- <file:Documentation/s390/chandev.8> in the Linux source tree.
-
-SAB3036 tuner support
-CONFIG_TUNER_3036
- Say Y here to include support for Philips SAB3036 compatible tuners.
- If in doubt, say N.
-
-Compaq SMART2 support
-CONFIG_BLK_CPQ_DA
- This is the driver for Compaq Smart Array controllers. Everyone
- using these boards should say Y here. See the file
- <file:Documentation/cpqarray.txt> for the current list of boards
- supported by this driver, and for further information on the use of
- this driver.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- cpqarray.o
-
-Show crashed user process info
-CONFIG_PROCESS_DEBUG
- Say Y to print all process fault locations to the console. This is
- a debugging option; you probably do not want to set it unless you
- are an S390 port maintainer.
-
-#
-# ARM options
-#
-# CML2 transition note: CML1 asks ARCH_ARCA5K, then has ARCH_A5K and ARCH_ARK
-# as subquestions. CML2 asks the subquestions in the armtype menu and makes
-# ARCH_ARCA5K a derived symbol.
-ARM System type
-CONFIG_ARCH_ARCA5K
- This selects what ARM system you wish to build the kernel for. It
- also selects to some extent the CPU type. If you are unsure what
- to set this option to, please consult any information supplied with
- your system.
-
-# Choice: armtype
-A5000
-CONFIG_ARCH_A5K
- Say Y here to to support the Acorn A5000. Linux can support the
- internal IDE disk and CD-ROM interface, serial and parallel port,
- and the floppy drive. Note that on some A5000s the floppy is
- plugged into the wrong socket on the motherboard.
-
-Archimedes
-CONFIG_ARCH_ARC
- The Acorn Archimedes was an personal computer based on an 8K ARM2
- processor, released in 1987. It supported 512K of RAM and 2 800K
- floppy disks. Picture and more detailed specifications at
- <http://www.computingmuseum.com/museum/archi.htm>.
-
-EBSA-110
-CONFIG_ARCH_EBSA110
- This is an evaluation board for the StrongARM processor available
- from Digital. It has limited hardware on-board, including an onboard
- Ethernet interface, two PCMCIA sockets, two serial ports and a
- parallel port.
-
-RiscPC
-CONFIG_ARCH_RPC
- On the Acorn Risc-PC, Linux can support the internal IDE disk and
- CD-ROM interface, serial and parallel port, and the floppy drive.
-
-2MB physical memory
-CONFIG_PAGESIZE_16
- Say Y here if your Archimedes or A5000 system has only 2MB of
- memory, otherwise say N. The resulting kernel will not run on a
- machine with 4MB of memory.
-
-CATS
-CONFIG_ARCH_CATS
- Say Y here if you intend to run this kernel on the CATS.
-
- Saying N will reduce the size of the Footbridge kernel.
-
-EBSA285 (addin mode)
-CONFIG_ARCH_EBSA285_ADDIN
- Say Y here if you intend to run this kernel on the EBSA285 card
- in addin mode.
-
- Saying N will reduce the size of the Footbridge kernel.
-
-EBSA285 (host mode)
-CONFIG_ARCH_EBSA285_HOST
- Say Y here if you intend to run this kernel on the EBSA285 card
- in host ("central function") mode.
-
- Saying N will reduce the size of the Footbridge kernel.
-
-LinkUp Systems L7200 SDB
-CONFIG_ARCH_L7200
- Say Y here if you intend to run this kernel on a LinkUp Systems
- L7200 Software Development Board which uses an ARM720T processor.
- Information on this board can be obtained at:
-
- <http://www.linkupsys.com/>
-
- If you have any questions or comments about the Linux kernel port
- to this board, send e-mail to sjhill@cotw.com.
-
-NetWinder
-CONFIG_ARCH_NETWINDER
- Say Y here if you intend to run this kernel on the Rebel.COM
- NetWinder. Information about this machine can be found at:
-
- <http://www.netwinder.org/>
-
- Saying N will reduce the size of the Footbridge kernel.
-
-P720T
-CONFIG_ARCH_P720T
- Say Y here if you intend to run this kernel on the ARM Prospector
- 720T.
-
-Compaq Personal Server
-CONFIG_ARCH_PERSONAL_SERVER
- Say Y here if you intend to run this kernel on the Compaq
- Personal Server.
-
- Saying N will reduce the size of the Footbridge kernel.
-
- The Compaq Personal Server is not available for purchase.
- There are no product plans beyond the current research
- prototypes at this time. Information is available at:
-
- <http://crl.research.compaq.com/projects/personalserver/>
-
- If you have any questions or comments about the Compaq Personal
- Server, send e-mail to skiff@crl.dec.com.
-
-Cirrus Logic EDB-7211 evaluation board
-CONFIG_ARCH_EDB7211
- Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
- evaluation board.
-
-EP7211 infrared support
-CONFIG_EP7211_IR
- Say Y here if you wish to use the infrared port on the EP7211. Note
- that you can't use the first UART and the infrared port at the same
- time, and that the EP7211 only supports SIR mode, at speeds up to
- 115.2 kbps. To use the I/R port, you will need to get the source to
- irda-utils and apply the patch at
- <http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-June/003510.html>.
-
-Assabet
-CONFIG_SA1100_ASSABET
- Say Y here if you are using the Intel(R) StrongARM(R) SA-1110
- Microprocessor Development Board (also known as the Assabet).
-
-Neponset
-CONFIG_ASSABET_NEPONSET
- Say Y here if you are using the Intel(R) StrongARM(R) SA-1110
- Microprocessor Development Board (Assabet) with the SA-1111
- Development Board (Nepon).
-
-Compaq iPAQ H3600
-CONFIG_SA1100_H3600
- Say Y here if you intend to run this kernel on the Compaq iPAQ
- H3600 handheld computer. Information about this machine and the
- Linux port to this machine can be found at:
-
- <http://www.handhelds.org/Compaq/index.html#iPAQ_H3600>
- <http://www.compaq.com/products/handhelds/pocketpc/>
-
-Brutus
-CONFIG_SA1100_BRUTUS
- Say Y here if you are using the Intel(R) StrongARM(R) SA-1100
- Microprocessor Development Board (also known as the Brutus).
-
-LART
-CONFIG_SA1100_LART
- Say Y here if you are using the Linux Advanced Radio Terminal
- (also known as the LART). See <http://www.lart.tudelft.nl/> for
- information on the LART.
-
-GraphicsClient
-CONFIG_SA1100_GRAPHICSCLIENT
- Say Y here if you are using an Applied Data Systems Intel(R)
- StrongARM(R) SA-1100 based Graphics Client SBC. See
- <http://www.applieddata.net/> for information on this system.
-
-GraphicsMaster
-CONFIG_SA1100_GRAPHICSMASTER
- Say Y here if you are using an Applied Data Systems Intel(R)
- StrongARM(R) SA-1100 based Graphics Master SBC with SA-1111
- StrongARM companion chip. See
- <http://www.applieddata.net/products_masterSpec.asp> for information
- on this system.
-
-ADSBitsy
-CONFIG_SA1100_ADSBITSY
- Say Y here if you are using Applied Data Systems Intel(R)
- StrongARM(R) 1110 based Bitsy, 3 x 5 inches in size, Compaq - IPAQ -
- like platform. See
- <http://www.applieddata.net/products_bitsySpec.asp> for more
- information.
-
-ITSY
-CONFIG_SA1100_ITSY
- Say Y here if you are using the Compaq Itsy experimental pocket
- computer. See <http://research.compaq.com/wrl/projects/itsy/> for
- more information.
-
-PLEB
-CONFIG_SA1100_PLEB
- Say Y here if you are using a Portable Linux Embedded Board
- (also known as PLEB). See <http://www.cse.unsw.edu.au/~pleb/>
- for more information.
-
-CerfBoard
-CONFIG_SA1100_CERF
- The Intrinsyc CerfBoard is based on the StrongARM 1110.
- More information is available at:
- <http://www.intrinsyc.com/products/referenceplatforms/cerfboard.html>.
-
- Say Y if configuring for an Intrinsyc CerfBoard.
- Say N otherwise.
-
-FlexaNet
-CONFIG_SA1100_FLEXANET
- Say Y here if you intend to run this kernel on the FlexaNet
- handheld instruments. Information about this machine can be
- found at: <http://www.flexanet.com/>.
-
-nanoEngine
-CONFIG_SA1100_NANOENGINE
- The nanoEngine is a StrongARM 1110-based single board computer
- from Bright Star Engineering. More information is available at:
- <http://www.brightstareng.com/arm/nanoeng.htm>.
-
- Say Y if configuring for a nanoEngine.
- Say N otherwise.
-
-Pangolin
-CONFIG_SA1100_PANGOLIN
- Pangolin is a StrongARM 1110-based evaluation platform produced
- by Dialogue Technology. It has EISA slots for ease of configuration
- with SDRAM/Flash memory card, USB/Serial/Audio card, Compact Flash
- card, and TFT-LCD card.
-
- Say Y if configuring for a Pangolin.
- Say N otherwise.
-
-Victor
-CONFIG_SA1100_VICTOR
- Say Y here if you are using a Visu Aide Intel(R) StrongARM(R)
- SA-1100 based Victor Digital Talking Book Reader. See
- <http://www.visuaide.com/pagevictor.en.html> for information on
- this system.
-
-# Choice: cerf_ram
-Cerf on-board RAM size
-CONFIG_SA1100_CERF_8MB
- Declare the size of the CerfBoard's on-board RAM.
- Alternatives are 8, 16, 32, and 64MB.
-
-16MB
-CONFIG_SA1100_CERF_16MB
- Declare that the CerfBoard has 16MB RAM.
-
-32MB
-CONFIG_SA1100_CERF_32MB
- Declare that the CerfBoard has 32MB RAM.
-
-64MB
-CONFIG_SA1100_CERF_64MB
- Declare that the CerfBoard has 64MB RAM.
-
-# Choice: cerf_flash
-Cerf flash memory size
-CONFIG_SA1100_CERF_FLASH_8MB
- Tell the Cerf kernel the size of on-board memory. The choices
- are 8MB, 16MB, or 32MB.
-
-16MB
-CONFIG_SA1100_CERF_FLASH_16MB
- Configure the Cerf kernel to expect 16MB of flash memory.
-
-32MB
-CONFIG_SA1100_CERF_FLASH_32MB
- Configure the Cerf kernel to expect 32MB of flash memory.
-
-Support ARM610 processor
-CONFIG_CPU_ARM610
- The ARM610 is the successor to the ARM3 processor
- and was produced by VLSI Technology Inc.
-
- Say Y if you want support for the ARM610 processor.
- Otherwise, say N.
-
-Support ARM710 processor
-CONFIG_CPU_ARM710
- A 32-bit RISC microprocessor based on the ARM7 processor core
- designed by Advanced RISC Machines Ltd. The ARM710 is the
- successor to the ARM610 processor. It was released in
- July 1994 by VLSI Technology Inc.
-
- Say Y if you want support for the ARM710 processor.
- Otherwise, say N.
-
-Support ARM720T processor
-CONFIG_CPU_ARM720T
- A 32-bit RISC processor with 8kByte Cache, Write Buffer and
- MMU built around an ARM7TDMI core.
-
- Say Y if you want support for the ARM720T processor.
- Otherwise, say N.
-
-Support ARM920T processor
-CONFIG_CPU_ARM920T
- The ARM920T is licensed to be produced by numerous vendors,
- and is used in the Maverick EP9312. More information at
- <http://linuxdevices.com/products/PD2382866068.html>.
-
- Say Y if you want support for the ARM920T processor.
- Otherwise, say N.
-
-Support ARM1020 processor
-CONFIG_CPU_ARM1020
- The ARM1020 is the cached version of the ARM10 processor,
- with an addition of a floating-point unit.
-
- Say Y if you want support for the ARM1020 processor.
- Otherwise, say N.
-
-Disable I-Cache
-CONFIG_CPU_ICACHE_DISABLE
- Say Y here to disable the processor instruction cache. Unless
- you have a reason not to or are unsure, say N.
-
-Disable D-Cache
-CONFIG_CPU_DCACHE_DISABLE
- Say Y here to disable the processor data cache. Unless
- you have a reason not to or are unsure, say N.
-
-Force write through D-cache
-CONFIG_CPU_DCACHE_WRITETHROUGH
- Say Y here to use the data cache in write-through mode. Unless you
- specifically require this or are unsure, say N.
-
-Round robin I and D cache replacement algorithm
-CONFIG_CPU_CACHE_ROUND_ROBIN
- Say Y here to use the predictable round-robin cache replacement
- policy. Unless you specifically require this or are unsure, say N.
-
-Disable branch prediction
-CONFIG_CPU_BPREDICT_DISABLE
- Say Y here to disable branch prediction. If unsure, say N.
-
-Compressed boot loader in ROM/flash
-CONFIG_ZBOOT_ROM
- Say Y here if you intend to execute your compressed kernel image (zImage)
- directly from ROM or flash. If unsure, say N.
-
-Compressed ROM boot loader base address
-CONFIG_ZBOOT_ROM_TEXT
- The base address for zImage. Unless you have special requirements, you
- should not change this value.
-
-Compressed ROM boot loader BSS address
-CONFIG_ZBOOT_ROM_BSS
- The base address of 64KiB of read/write memory, which must be available
- while the decompressor is running. Unless you have special requirements,
- you should not change this value.
-
-Support StrongARM SA-110 processor
-CONFIG_CPU_SA110
- The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and
- is available at five speeds ranging from 100 MHz to 233 MHz.
- More information is available at
- <http://developer.intel.com/design/strong/sa110.htm>.
-
- Say Y if you want support for the SA-110 processor.
- Otherwise, say N.
-
-Tulsa
-CONFIG_SA1100_PFS168
- The Radisys Corp. PFS-168 (aka Tulsa) is an Intel® StrongArm® SA-1110 based
- computer which includes the SA-1111 Microprocessor Companion Chip and other
- custom I/O designed to add connectivity and multimedia features for vending
- and business machine applications. Say Y here if you require support for
- this target.
-
-HP Jornada 720
-CONFIG_SA1100_JORNADA720
- Say Y here if you want to build a kernel for the HP Jornada 720
- handheld computer. See <http://www.hp.com/jornada/products/720>
- for details.
-
-InHand Electronics OmniMeter
-CONFIG_SA1100_OMNIMETER
- Say Y here if you are using the inhand electronics OmniMeter. See
- <http://www.inhandelectronics.com/html/omni1.html> for details.
-
-Load kernel using Angel Debug Monitor
-CONFIG_ANGELBOOT
- Say Y if you plan to load the kernel using Angel, ARM Ltd's target
- debug stub. If you are not using Angel, you must say N. It is
- important to get this setting correct.
-
-CDB89712
-CONFIG_ARCH_CDB89712
- This is an evaluation board from Cirrus for the CS89712 processor. The
- board includes 2 serial ports, Ethernet, IRDA, and expansion headers.
- It comes with 16 MB SDRAM and 8 MB flash ROM.
-
-CLPS-711X internal ROM bootstrap
-CONFIG_EP72XX_ROM_BOOT
- If you say Y here, your CLPS711x-based kernel will use the bootstrap
- mode memory map instead of the normal memory map.
-
- Processors derived from the Cirrus CLPS-711X core support two boot modes.
- Normal mode boots from the external memory device at CS0. Bootstrap mode
- rearranges parts of the memory map, placing an internal 128 byte bootstrap
- ROM at CS0. This option performs the address map changes required to
- support booting in this mode.
-
- You almost surely want to say N here.
-
-Math emulation
-CONFIG_FPE_NWFPE
- Say Y to include the NWFPE floating point emulator in the kernel.
- This is necessary to run most binaries. Linux does not currently
- support floating point hardware so you need to say Y here even if
- your machine has an FPA or floating point co-processor podule.
-
- It is also possible to say M to build the emulator as a module
- (nwfpe.o) or indeed to leave it out altogether. However, unless you
- know what you are doing this can easily render your machine
- unbootable. Saying Y is the safe option.
-
- You may say N here if you are going to load the Acorn FPEmulator
- early in the bootup.
-
-FastFPE math emulation
-CONFIG_FPE_FASTFPE
- Say Y here to include the FAST floating point emulator in the kernel.
- This is an experimental much faster emulator which has only 32 bit
- precision for the mantissa. It does not support any exceptions.
- This makes it very simple, it is approximately 4-8 times faster than
- NWFPE.
-
- It should be sufficient for most programs. It is definitely not
- suitable if you do scientific calculations that need double
- precision for iteration formulas that sum up lots of very small
- numbers. If you do not feel you need a faster FP emulation you
- should better choose NWFPE.
-
- It is also possible to say M to build the emulator as a module
- (fastfpe.o). But keep in mind that you should only load the FP
- emulator early in the bootup. You should never change from NWFPE to
- FASTFPE or vice versa in an active system!
-
-DS1620 thermometer support
-CONFIG_DS1620
- Say Y here to include support for the thermal management hardware
- found in the NetWinder. This driver allows the user to control the
- temperature set points and to read the current temperature.
-
- It is also possible to say M here to build it as a module (ds1620.o)
- It is recommended to be used on a NetWinder, but it is not a
- necessity.
-
-Check for stack overflows
-CONFIG_DEBUG_STACKOVERFLOW
- This option make do_IRQ() check for enough stack space beeing left.
- This is safe to enable.
-
-Debug high memory support
-CONFIG_DEBUG_HIGHMEM
- This options enables addition error checking for high memory systems.
- Disable for production systems.
-
-Verbose kernel error messages
-CONFIG_DEBUG_ERRORS
- This option controls verbose debugging information which can be
- printed when the kernel detects an internal error. This debugging
- information is useful to kernel hackers when tracking down problems,
- but mostly meaningless to other people. It's safe to say Y unless
- you are concerned with the code size or don't want to see these
- messages.
-
-Compile kernel with frame pointer
-CONFIG_FRAME_POINTER
- If you say Y here, the resulting kernel 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.
-
-Verbose user fault messages
-CONFIG_DEBUG_USER
- When a user program crashes due to an exception, the kernel can
- print a brief message explaining what the problem was. This is
- sometimes helpful for debugging but serves no purpose on a
- production system. Most people should say N here.
-
-Include gdb debugging information in kernel binary
-CONFIG_DEBUG_INFO
- Say Y here to include source-level debugging information in the
- `vmlinux' binary image. This is handy if you want to use gdb or
- addr2line to debug the kernel. It has no impact on the in-memory
- footprint of the running kernel but it can increase the amount of
- time and disk space needed for compilation of the kernel. If in
- doubt say N.
-
-Kernel low-level debugging functions
-CONFIG_DEBUG_LL
- Say Y here to include definitions of printascii, printchar, printhex
- in the kernel. This is helpful if you are debugging code that
- executes before the console is initialized.
-
-Kernel low-level debugging messages via footbridge serial port
-CONFIG_DEBUG_DC21285_PORT
- Say Y here if you want the debug print routines to direct their
- output to the serial port in the DC21285 (Footbridge). Saying N
- will cause the debug messages to appear on the first 16550
- serial port.
-
-Kernel low-level debugging messages via UART2
-CONFIG_DEBUG_CLPS711X_UART2
- Say Y here if you want the debug print routines to direct their
- output to the second serial port on these devices. Saying N will
- cause the debug messages to appear on the first serial port.
-
-Kernel log buffer length shift
-CONFIG_LOG_BUF_SHIFT
- The kernel log buffer has a fixed size of :
- 64 kB (2^16) on MULTIQUAD and IA64,
- 128 kB (2^17) on S390
- 32 kB (2^15) on SMP systems
- 16 kB (2^14) on UP systems
-
- You have the ability to change this size with this paramter which
- fixes the bit shift of to get the buffer length (which must be a
- power of 2). Eg: a value of 16 sets the buffer to 64 kB (2^16).
- The default value of 0 uses standard values above.
-
-Disable pgtable cache
-CONFIG_NO_PGT_CACHE
- Normally the kernel maintains a `quicklist' of preallocated
- pagetable structures in order to increase performance. On machines
- with very few pages this may however be a loss. Say Y here to
- disable the pgtable cache.
-
-RISC OS personality
-CONFIG_ARTHUR
- Say Y here to include the kernel code necessary if you want to run
- Acorn RISC OS/Arthur binaries under Linux. This code is still very
- experimental; if this sounds frightening, say N and sleep in peace.
- You can also say M here to compile this support as a module (which
- will be called arthur.o).
-
-Initial kernel command line
-CONFIG_CMDLINE
- On some architectures (EBSA110 and CATS), there is currently no way
- for the boot loader to pass arguments to the kernel. For these
- architectures, you should supply some command-line options at build
- time by entering them here. As a minimum, you should specify the
- memory size and the root device (e.g., mem=64M root=/dev/nfs).
-
-Kernel-mode alignment trap handler
-CONFIG_ALIGNMENT_TRAP
- ARM processors can not fetch/store information which is not
- naturally aligned on the bus, i.e., a 4 byte fetch must start at an
- address divisible by 4. On 32-bit ARM processors, these non-aligned
- fetch/store instructions will be emulated in software if you say
- here, which has a severe performance impact. This is necessary for
- correct operation of some network protocols. With an IP-only
- configuration it is safe to say N, otherwise say Y.
-
-DC21285 serial port support
-CONFIG_SERIAL_21285
- If you have a machine based on a 21285 (Footbridge) StrongARM(R)/
- PCI bridge you can enable its onboard serial port by enabling this
- option. The device has major ID 4, minor 64.
-
-Console on DC21285 serial port
-CONFIG_SERIAL_21285_CONSOLE
- If you have enabled the serial port on the 21285 footbridge you can
- make it the console by answering Y to this option.
-
-SA1100 serial port support
-CONFIG_SERIAL_SA1100
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- If you have a machine based on a SA1100/SA1110 StrongARM CPU you can
- enable its onboard serial port by enabling this option.
- Please read <file:Documentation/arm/SA1100/serial_UART> for further
- info.
-
-Console on SA1100 serial port
-CONFIG_SERIAL_SA1100_CONSOLE
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- If you have enabled the serial port on the SA1100/SA1110 StrongARM
- CPU you can make it the console by answering Y to this option.
-
-L7200 serial port support
-CONFIG_SERIAL_L7200
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- If you have a LinkUp Systems L7200 board you can enable its two
- onboard serial ports by enabling this option. The device numbers
- are major ID 4 with minor 64 and 65 respectively.
-
-Console on L7200 serial port
-CONFIG_SERIAL_L7200_CONSOLE
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- If you have enabled the serial ports on the L7200 development board
- you can make the first serial port the console by answering Y to
- this option.
-
-L7200 SDB keyboard support
-CONFIG_KEYBOARD_L7200
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- Enable this option if you would like to be able to use a keyboard
- on a LinkUp Systems L7200 board.
-
-L7200 SDB Fujitsu keyboard support
-CONFIG_KEYBOARD_L7200_NORM
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- Select the Fujitsu keyboard if you want a normal QWERTY style
- keyboard on the LinkUp SDB.
-
-L7200 SDB Prototype keyboard support
-CONFIG_KEYBOARD_L7200_DEMO
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- Select the prototype keyboard if you want to play with the
- LCD/keyboard combination on the LinkUp SDB.
-
-Footbridge Mode
-CONFIG_HOST_FOOTBRIDGE
- * Orphaned entry retained 20 April 2001 by Russell King *
- * If you read this note from the configurator, please contact *
- * the Configure.help maintainers. *
- The 21285 Footbridge chip can operate in either `host mode' or
- `add-in' mode. Say Y if your 21285 is in host mode, and therefore
- is the configuration master, otherwise say N. This must not be
- set to Y if the card is used in 'add-in' mode.
-
-MFM hard disk support
-CONFIG_BLK_DEV_MFM
- Support the MFM hard drives on the Acorn Archimedes both
- on-board the A4x0 motherboards and via the Acorn MFM modules.
- Drives up to 64MB are supported. If you haven't got one of these
- machines or drives just say N.
-
-Old Archimedes floppy (1772) support
-CONFIG_BLK_DEV_FD1772
- Support the floppy drive on the Acorn Archimedes (A300, A4x0, A540,
- R140 and R260) series of computers; it supports only 720K floppies
- at the moment. If you don't have one of these machines just answer
- N.
-
-Autodetect hard drive geometry
-CONFIG_BLK_DEV_MFM_AUTODETECT
- If you answer Y, the MFM code will attempt to automatically detect
- the cylinders/heads/sectors count on your hard drive. WARNING: This
- sometimes doesn't work and it also does some dodgy stuff which
- potentially might damage your drive.
-
-NetWinder /dev/flash support
-CONFIG_NWFLASH
- If you say Y here and create a character device /dev/flash with
- major 10 and minor 160 you can manipulate the flash ROM containing
- the NetWinder firmware. Be careful as accidentally overwriting the
- flash contents can render your computer unbootable. On no account
- allow random users access to this device. :-)
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called nwflash.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
- If you're not sure, say N.
-
-SRM environment variables in procfs
-CONFIG_SRM_ENV
- If you enable this option, a subdirectory inside /proc called
- /proc/srm_environment will give you access to the all important
- SRM environment variables (those which have a name) and also
- to all others (by their internal number).
-
- SRM is something like a BIOS for Alpha machines. There are some
- other such BIOSes, like AlphaBIOS, which this driver cannot
- support (hey, that's not SRM!).
-
- Despite the fact that this driver doesn't work on all Alphas (but
- only on those which have SRM as their firmware), it's save to
- build it even if your particular machine doesn't know about SRM
- (or if you intend to compile a generic kernel). It will simply
- not create those subdirectory in /proc (and give you some warning,
- of course).
-
- This driver is also available as a module and will be called
- srm_env.o then.
-
-Footbridge internal watchdog
-CONFIG_21285_WATCHDOG
- The Intel Footbridge chip contains a builtin watchdog circuit. Say Y
- here if you wish to use this. Alternatively say M to compile the
- driver as a module, which will be called wdt285.o.
-
- This driver does not work on all machines. In particular, early CATS
- boards have hardware problems that will cause the machine to simply
- lock up if the watchdog fires.
-
- "If in doubt, leave it out" - say N.
-
-NetWinder WB83C977 watchdog
-CONFIG_977_WATCHDOG
- Say Y here to include support for the WB977 watchdog included in
- NetWinder machines. Alternatively say M to compile the driver as
- a module, which will be called wdt977.o.
-
- Not sure? It's safe to say N.
-
-IrDA subsystem support
-CONFIG_IRDA
- Say Y here if you want to build support for the IrDA (TM) protocols.
- The Infrared Data Associations (tm) specifies standards for wireless
- infrared communication and is supported by most laptops and PDA's.
-
- To use Linux support for the IrDA (tm) protocols, you will also need
- some user-space utilities like irattach. For more information, see
- the file <file:Documentation/networking/irda.txt>. You also want to
- read the IR-HOWTO, available at
- <http://www.tldp.org/docs.html#howto>.
-
- If you want to exchange bits of data (vCal, vCard) with a PDA, you
- will need to install some OBEX application, such as OpenObex :
- <http://sourceforge.net/projects/openobex/>
-
- This support is also available as a module called irda.o. If you
- want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
-
-Ultra (connectionless) protocol
-CONFIG_IRDA_ULTRA
- Say Y here to support the connectionless Ultra IRDA protocol.
- Ultra allows to exchange data over IrDA with really simple devices
- (watch, beacon) without the overhead of the IrDA protocol (no handshaking,
- no management frames, simple fixed header).
- Ultra is available as a special socket : socket(AF_IRDA, SOCK_DGRAM, 1);
-
-IrDA cache last LSAP
-CONFIG_IRDA_CACHE_LAST_LSAP
- Say Y here if you want IrLMP to cache the last LSAP used. This
- makes sense since most frames will be sent/received on the same
- connection. Enabling this option will save a hash-lookup per frame.
-
- If unsure, say Y.
-
-IrDA Fast RRs
-CONFIG_IRDA_FAST_RR
- Say Y here is you want IrLAP to send fast RR (Receive Ready) frames
- when acting as a primary station.
- Disabling this option will make latency over IrDA very bad. Enabling
- this option will make the IrDA stack send more packet than strictly
- necessary, thus reduce your battery life (but not that much).
-
- Fast RR will make IrLAP send out a RR frame immediately when
- receiving a frame if its own transmit queue is currently empty. This
- will give a lot of speed improvement when receiving much data since
- the secondary station will not have to wait the max. turn around
- time (usually 500ms) before it is allowed to transmit the next time.
- If the transmit queue of the secondary is also empty, the primary will
- start backing-off before sending another RR frame, waiting longer
- each time until the back-off reaches the max. turn around time.
- This back-off increase in controlled via
- /proc/sys/net/irda/fast_poll_increase
-
- If unsure, say Y.
-
-IrDA debugging information
-CONFIG_IRDA_DEBUG
- Say Y here if you want the IrDA subsystem to write debug information
- to your syslog. You can change the debug level in
- /proc/sys/net/irda/debug .
- When this option is enabled, the IrDA also perform many extra internal
- verifications which will usually prevent the kernel to crash in case of
- bugs.
-
- If unsure, say Y (since it makes it easier to find the bugs).
-
-IrLAN protocol
-CONFIG_IRLAN
- Say Y here if you want to build support for the IrLAN protocol. If
- you want to compile it as a module (irlan.o), say M here and read
- <file:Documentation/modules.txt>. IrLAN emulates an Ethernet and
- makes it possible to put up a wireless LAN using infrared beams.
-
- The IrLAN protocol can be used to talk with infrared access points
- like the HP NetbeamIR, or the ESI JetEye NET. You can also connect
- to another Linux machine running the IrLAN protocol for ad-hoc
- networking!
-
-IrNET protocol
-CONFIG_IRNET
- Say Y here if you want to build support for the IrNET protocol. If
- you want to compile it as a module (irnet.o), say M here and read
- <file:Documentation/modules.txt>. IrNET is a PPP driver, so you
- will also need a working PPP subsystem (driver, daemon and
- config)...
-
- IrNET is an alternate way to transfer TCP/IP traffic over IrDA. It
- uses synchronous PPP over a set of point to point IrDA sockets. You
- can use it between Linux machine or with W2k.
-
-IrCOMM protocol
-CONFIG_IRCOMM
- Say Y here if you want to build support for the IrCOMM protocol. If
- you want to compile it as a module (you will get ircomm.o and
- ircomm-tty.o), say M here and read <file:Documentation/modules.txt>.
- IrCOMM implements serial port emulation, and makes it possible to
- use all existing applications that understands TTY's with an
- infrared link. Thus you should be able to use application like PPP,
- minicom and others. Enabling this option will create two modules
- called ircomm and ircomm_tty.
-
-IrTTY IrDA Device Driver
-CONFIG_IRTTY_SIR
- Say Y here if you want to build support for the IrTTY line
- discipline. If you want to compile it as a module (irtty.o), say M
- here and read <file:Documentation/modules.txt>. IrTTY makes it
- possible to use Linux's own serial driver for all IrDA ports that
- are 16550 compatible. Most IrDA chips are 16550 compatible so you
- should probably say Y to this option. Using IrTTY will however
- limit the speed of the connection to 115200 bps (IrDA SIR mode).
-
- If unsure, say Y.
-
-IrPORT IrDA serial driver
-CONFIG_IRPORT_SIR
- Say Y here if you want to build support for the IrPORT IrDA device
- driver. If you want to compile it as a module (irport.o), say M here
- and read <file:Documentation/modules.txt>. IrPORT can be used
- instead of IrTTY and sometimes this can be better. One example is
- if your IrDA port does not have echo-canceling, which will work OK
- with IrPORT since this driver is working in half-duplex mode only.
- You don't need to use irattach with IrPORT, but you just insert it
- the same way as FIR drivers (insmod irport io=0x3e8 irq=11). Notice
- that IrPORT is a SIR device driver which means that speed is limited
- to 115200 bps.
-
- If unsure, say Y.
-
-USB IrDA FIR dongle Device Driver
-CONFIG_USB_IRDA
- Say Y here if you want to build support for the USB IrDA FIR Dongle
- device driver. If you want to compile it as a module (irda-usb.o),
- say M here and read <file:Documentation/modules.txt>. IrDA-USB
- support the various IrDA USB dongles available and most of their
- peculiarities. Those dongles plug in the USB port of your computer,
- are plug and play, and support SIR and FIR (4Mbps) speeds. On the
- other hand, those dongles tend to be less efficient than a FIR
- chipset.
-
- Please note that the driver is still experimental. And of course,
- you will need both USB and IrDA support in your kernel...
-
-Datafab MDCFE-B Compact Flash Reader support
-CONFIG_USB_STORAGE_DATAFAB
- This option enables a sub-driver of the USB Mass Storage driver. These
- sub-drivers are considered experimental, and should only be used by very
- brave people. System crashes and other bad things are likely to occur if
- you use this driver. If in doubt, select N.
-
-HP CD-Writer 82xx support
-CONFIG_USB_STORAGE_HP8200e
- This option enables a sub-driver of the USB Mass Storage driver. These
- sub-drivers are considered experimental, and should only be used by very
- brave people. System crashes and other bad things are likely to occur if
- you use this driver. If in doubt, select N.
-
-Lexar Jumpshot Compact Flash Reader
-CONFIG_USB_STORAGE_JUMPSHOT
- This option enables a sub-driver of the USB Mass Storage driver. These
- sub-drivers are considered experimental, and should only be used by very
- brave people. System crashes and other bad things are likely to occur if
- you use this driver. If in doubt, select N.
-
-Tieman Voyager USB Braille display support (EXPERIMENTAL)
-CONFIG_USB_BRLVGER
- Say Y here if you want to use the Voyager USB Braille display from
- Tieman. See <file:Documentation/usb/brlvger.txt> for more
- information.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called brlvger.o. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-KB Gear JamStudio tablet support
-CONFIG_USB_KBTAB
- Say Y here if you want to use the USB version of the KB Gear
- JamStudio tablet. Make sure to say Y to "Mouse support"
- (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
- (CONFIG_INPUT_EVDEV) as well.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called kbtab.o. If you want to compile it as a
- module, say M here and read <file:Documentation/modules.txt>.
-
-USB Inside Out Edgeport Serial Driver (TI devices)
-CONFIG_USB_SERIAL_EDGEPORT_TI
- Say Y here if you want to use any of the devices from Inside Out
- Networks (Digi) that are not supported by the io_edgeport driver.
- This includes the Edgeport/1 device.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called io_ti.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
-USB Keyspan MPR Firmware
-CONFIG_USB_SERIAL_KEYSPAN_MPR
- Say Y here to include firmware for the Keyspan MPR converter.
-
-Winbond W83977AF IrDA Device Driver
-CONFIG_WINBOND_FIR
- Say Y here if you want to build IrDA support for the Winbond
- W83977AF super-io chipset. This driver should be used for the IrDA
- chipset in the Corel NetWinder. The driver supports SIR, MIR and
- FIR (4Mbps) speeds.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- w83977af_ir.o.
-
-NSC PC87108/PC87338 IrDA Device Driver
-CONFIG_NSC_FIR
- Say Y here if you want to build support for the NSC PC87108 and
- PC87338 IrDA chipsets. This driver supports SIR,
- MIR and FIR (4Mbps) speeds.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- nsc-ircc.o.
-
-National Semiconductor DP83820 support
-CONFIG_NS83820
- This is a driver for the National Semiconductor DP83820 series
- of gigabit ethernet MACs. Cards using this chipset include:
-
- SMC 9452TX SMC SMC9462TX
- D-Link DGE-500T PureData PDP8023Z-TG
- SOHO-GA2000T SOHO-GA2500T.
- NetGear GA621
-
- This driver supports the use of zero copy on tx, checksum
- validation on rx, and 64 bit addressing.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called ns83820.o.
-
-Toshiba Type-O IR Port device driver (old driver)
-CONFIG_TOSHIBA_OLD
- Say Y here if you want to build support for the Toshiba Type-O IR
- chipset. This chipset is used by the Toshiba Libretto 100CT, and
- many more laptops. This driver is obsolete, will no more be
- maintained and will be removed in favor of the new driver.
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called toshoboe.o.
-
-Toshiba Type-O IR Port device driver
-CONFIG_TOSHIBA_FIR
- Say Y here if you want to build support for the Toshiba Type-O IR
- and Donau oboe chipsets. These chipsets are used by the Toshiba
- Libretto 100/110CT, Tecra 8100, Portege 7020 and many more laptops.
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>.
- The module will be called donauboe.o.
-
-SMC IrCC
-CONFIG_SMC_IRCC_FIR
- Say Y here if you want to build support for the SMC Infrared
- Communications Controller. It is used in the Fujitsu Lifebook 635t
- and Sony PCG-505TX. If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>. The module will be
- called smc-ircc.o.
-
-VIA IrCC
-CONFIG_VIA_IRCC_FIR
- Say Y here if you want to build support for the VIA Fast Infrared
- Communications Controller. It is used in all sorts of VIA686a- and
- VT1211-based notebooks. If you want to compile it as a module, say M
- here and read <file:Documentation/modules.txt>. The module will be
- called via-ircc.o.
-
-ALi M5123 FIR controller driver
-CONFIG_ALI_FIR
- Say Y here if you want to build support for the ALi M5123 FIR
- Controller. The ALi M5123 FIR Controller is embedded in ALi M1543C,
- M1535, M1535D, M1535+, M1535D Sourth Bridge. This driver supports
- SIR, MIR and FIR (4Mbps) speeds.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called
- ali-ircc.o.
-
-VLSI 82C147 PCI-IrDA SIR/MIR/FIR Controller driver
-CONFIG_VLSI_FIR
- Say Y here if you want to build support for the VLSI 82C147
- PCI-IrDA Controller. This controller is used by the HP OmniBook 800
- and 5500 notebooks. The driver provides support for SIR, MIR and
- FIR (4Mbps) speeds.
-
- If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The module will be called vlsi_ir.o.
-
-Serial dongle support
-CONFIG_DONGLE
- Say Y here if you have an infrared device that connects to your
- computer's serial port. These devices are called dongles. Then say Y
- or M to the driver for your particular dongle below.
-
- 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 serial dongles.
-
-ESI JetEye PC dongle
-CONFIG_ESI_DONGLE
- Say Y here if you want to build support for the Extended Systems
- JetEye PC dongle. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>. The ESI dongle attaches
- to the normal 9-pin serial port connector, and can currently only be
- used by IrTTY. To activate support for ESI dongles you will have to
- start irattach like this: "irattach -d esi".
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called esi.o.
-
-ACTiSYS IR-220L and IR220L+ dongle
-CONFIG_ACTISYS_DONGLE
- Say Y here if you want to build support for the ACTiSYS IR-220L and
- IR220L+ dongles. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>. The ACTiSYS dongles
- attaches to the normal 9-pin serial port connector, and can
- currently only be used by IrTTY. To activate support for ACTiSYS
- dongles you will have to start irattach like this:
- "irattach -d actisys" or "irattach -d actisys+".
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called actisys.o.
-
-Tekram IrMate 210B dongle
-CONFIG_TEKRAM_DONGLE
- Say Y here if you want to build support for the Tekram IrMate 210B
- dongle. If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The Tekram dongle attaches to the
- normal 9-pin serial port connector, and can currently only be used
- by IrTTY. To activate support for Tekram dongles you will have to
- start irattach like this: "irattach -d tekram".
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called tekram.o.
-
-Greenwich GIrBIL dongle
-CONFIG_GIRBIL_DONGLE
- Say Y here if you want to build support for the Greenwich GIrBIL
- dongle. If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The Greenwich dongle attaches to
- the normal 9-pin serial port connector, and can currently only be
- used by IrTTY. To activate support for Greenwich dongles you will
- have to insert "irattach -d girbil" in the /etc/irda/drivers script.
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called girbil.o.
-
-Parallax LiteLink dongle
-CONFIG_LITELINK_DONGLE
- Say Y here if you want to build support for the Parallax Litelink
- dongle. If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The Parallax dongle attaches to
- the normal 9-pin serial port connector, and can currently only be
- used by IrTTY. To activate support for Parallax dongles you will
- have to start irattach like this "irattach -d litelink".
-
- If you want to compile the driver as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read <file:Documentation/modules.txt>. The module
- will be called litelink.o.
-
-Microchip MCP2120 dongle
-CONFIG_MCP2120_DONGLE
- Say Y here if you want to build support for the Microchip MCP2120
- dongle. If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The MCP2120 dongle attaches to
- the normal 9-pin serial port connector, and can currently only be
- used by IrTTY. To activate support for MCP2120 dongles you will
- have to insert "irattach -d mcp2120" in the /etc/irda/drivers script.
-
- You must build this dongle yourself. For more information see:
- <http://www.eyetap.org/~tangf/irda_sir_linux.html>
-
-Old Belkin dongle
-CONFIG_OLD_BELKIN_DONGLE
- Say Y here if you want to build support for the Adaptec Airport 1000
- and 2000 dongles. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>. The module will be
- called old_belkin.o. Some information is contained in the comments
- at the top of <file:drivers/net/irda/old_belkin.c>.
-
-ACTiSYS IR-200L dongle (Experimental)
-CONFIG_ACT200L_DONGLE
- Say Y here if you want to build support for the ACTiSYS IR-200L
- dongle. If you want to compile it as a module, say M here and read
- Documentation/modules.txt. The ACTiSYS IR-200L dongle attaches to
- the normal 9-pin serial port connector, and can currently only be
- used by IrTTY. To activate support for ACTiSYS IR-200L dongles
- you will have to start irattach like this: "irattach -d act200l".
-
-Mobile Action MA600 dongle (Experimental)
-CONFIG_MA600_DONGLE
- Say Y here if you want to build support for the Mobile Action MA600
- dongle. If you want to compile it as a module, say M here and read
- <file:Documentation/modules.txt>. The MA600 dongle attaches to
- the normal 9-pin serial port connector, and can currently only be
- tested on IrCOMM. To activate support for MA600 dongles you will
- have to insert "irattach -d ma600" in the /etc/irda/drivers script.
- Note: irutils 0.9.15 requires no modification. irutils 0.9.9 needs
- modification. For more information, download the following tar gzip
- file.
-
- There is a pre-compiled module on
- <http://engsvr.ust.hk/~eetwl95/download/ma600-2.4.x.tar.gz>
-
-VME (Motorola and BVM) support
-CONFIG_VME
- Say Y here if you want to build a kernel for a 680x0 based VME
- board. Boards currently supported include Motorola boards MVME147,
- MVME162, MVME166, MVME167, MVME172, and MVME177. BVME4000 and
- BVME6000 boards from BVM Ltd are also supported.
-
-MVME147 support
-CONFIG_MVME147
- Say Y to include support for early Motorola VME boards. This will
- build a kernel which can run on MVME147 single-board computers. If
- you select this option you will have to select the appropriate
- drivers for SCSI, Ethernet and serial ports later on.
-
-MVME162, 166 and 167 support
-CONFIG_MVME16x
- Say Y to include support for Motorola VME boards. This will build a
- kernel which can run on MVME162, MVME166, MVME167, MVME172, and
- MVME177 boards. If you select this option you will have to select
- the appropriate drivers for SCSI, Ethernet and serial ports later
- on.
-
-BVME4000 and BVME6000 support
-CONFIG_BVME6000
- Say Y to include support for VME boards from BVM Ltd. This will
- build a kernel which can run on BVME4000 and BVME6000 boards. If
- you select this option you will have to select the appropriate
- drivers for SCSI, Ethernet and serial ports later on.
-
-Use write-through caching for 68060 supervisor accesses
-CONFIG_060_WRITETHROUGH
- The 68060 generally uses copyback caching of recently accessed data.
- Copyback caching means that memory writes will be held in an on-chip
- cache and only written back to memory some time later. Saying Y
- here will force supervisor (kernel) accesses to use writethrough
- caching. Writethrough caching means that data is written to memory
- straight away, so that cache and memory data always agree.
- Writethrough caching is less efficient, but is needed for some
- drivers on 68060 based systems where the 68060 bus snooping signal
- is hardwired on. The 53c710 SCSI driver is known to suffer from
- this problem.
-
-WD33C93 SCSI driver for MVME147
-CONFIG_MVME147_SCSI
- Support for the on-board SCSI controller on the Motorola MVME147
- single-board computer.
-
-SCC support for MVME147 serial ports
-CONFIG_MVME147_SCC
- This is the driver for the serial ports on the Motorola MVME147
- boards. Everyone using one of these boards should say Y here.
-
-NCR53C710 SCSI driver for MVME16x
-CONFIG_MVME16x_SCSI
- The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710
- SCSI controller chip. Almost everyone using one of these boards
- will want to say Y to this question.
-
-NCR53C710 SCSI driver for BVME6000
-CONFIG_BVME6000_SCSI
- The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710
- SCSI controller chip. Almost everyone using one of these boards
- will want to say Y to this question.
-
-MVME147 (Lance) Ethernet support
-CONFIG_MVME147_NET
- Support for the on-board Ethernet interface on the Motorola MVME147
- single-board computer. Say Y here to include the
- driver for this chip in your kernel. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-MVME16x Ethernet support
-CONFIG_MVME16x_NET
- This is the driver for the Ethernet interface on the Motorola
- MVME162, 166, 167, 172 and 177 boards. Say Y here to include the
- driver for this chip in your kernel. If you want to compile it as
- a module, say M here and read <file:Documentation/modules.txt>.
-
-BVME6000 Ethernet support
-CONFIG_BVME6000_NET
- This is the driver for the Ethernet interface on BVME4000 and
- BVME6000 VME boards. Say Y here to include the driver for this chip
- in your kernel. If you want to compile it as a module, say M here
- and read <file:Documentation/modules.txt>.
-
-CD2401 support for MVME166/7 serial ports
-CONFIG_SERIAL167
- This is the driver for the serial ports on the Motorola MVME166,
- 167, and 172 boards. Everyone using one of these boards should say
- Y here.
-
-SCC support for MVME162 serial ports
-CONFIG_MVME162_SCC
- This is the driver for the serial ports on the Motorola MVME162 and
- 172 boards. Everyone using one of these boards should say Y here.
-
-SCC support for BVME6000 serial ports
-CONFIG_BVME6000_SCC
- This is the driver for the serial ports on the BVME4000 and BVME6000
- boards from BVM Ltd. Everyone using one of these boards should say
- Y here.
-
-7-Segment Display support
-CONFIG_DISPLAY7SEG
- This is the driver for the 7-segment display and LED present on
- Sun Microsystems CompactPCI models CP1400 and CP1500.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called display7seg.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- If you do not have a CompactPCI model CP1400 or CP1500, or
- another UltraSPARC-IIi-cEngine boardset with a 7-segment display,
- you should say N to this option.
-
-# Choice: cristype
-Etrax-100-LX-v1
-CONFIG_ETRAX100LX
- Support version 1 of the Etrax 100LX.
-
-Etrax-100-LX-v2
-CONFIG_ETRAX100LX_V2
- Support version 2 of the Etrax 100LX.
-
-Etrax-100-LX-for-xsim-simulator
-CONFIG_SVINTO_SIM
- Support the xsim ETRAX Simulator.
-
-DRAM size (dec, in MB)
-CONFIG_ETRAX_DRAM_SIZE
- Size of DRAM (decimal in MB) typically 2, 8 or 16.
-
-ETRAX Flash Memory configuration
-CONFIG_ETRAX_FLASH_BUSWIDTH
- Width in bytes of the Flash bus (1, 2 or 4). Is usually 2.
-
-# Choice: crisleds
-LED configuration on PA
-CONFIG_ETRAX_PA_LEDS
- The Etrax network driver is responsible for flashing LED's when
- packets arrive and are sent. It uses macros defined in
- <file:include/asm-cris/io.h>, and those macros are defined after what
- YOU choose in this option. The actual bits used are configured
- separately. Select this if the LEDs are on port PA. Some products
- put the leds on PB or a memory-mapped latch (CSP0) instead.
-
-LED configuration on PB
-CONFIG_ETRAX_PB_LEDS
- The Etrax network driver is responsible for flashing LED's when
- packets arrive and are sent. It uses macros defined in
- <file:include/asm-cris/io.h>, and those macros are defined after what
- YOU choose in this option. The actual bits used are configured
- separately. Select this if the LEDs are on port PB. Some products
- put the leds on PA or a memory-mapped latch (CSP0) instead.
-
-LED configuration on CSP0
-CONFIG_ETRAX_CSP0_LEDS
- The Etrax network driver is responsible for flashing LED's when
- packets arrive and are sent. It uses macros defined in
- <file:include/asm-cris/io.h>, and those macros are defined after what
- YOU choose in this option. The actual bits used are configured
- separately. Select this if the LEDs are on a memory-mapped latch
- using chip select CSP0, this is mapped at 0x90000000.
- Some products put the leds on PA or PB instead.
-
-No LED at all
-CONFIG_ETRAX_NO_LEDS
- Select this option if you don't have any LED at all.
-
-First green LED bit
-CONFIG_ETRAX_LED1G
- Bit to use for the first green LED.
- Most Axis products use bit 2 here.
-
-First red LED bit
-CONFIG_ETRAX_LED1R
- Bit to use for the first red LED.
- Most Axis products use bit 3 here.
- For products with only one controllable LED,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Second green LED bit
-CONFIG_ETRAX_LED2G
- Bit to use for the second green LED. The "Active" LED.
- Most Axis products use bit 4 here.
- For products with only one controllable LED,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Second red LED bit
-CONFIG_ETRAX_LED2R
- Bit to use for the second red LED.
- Most Axis products use bit 5 here.
- For products with only one controllable LED,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Third green LED bit
-CONFIG_ETRAX_LED3G
- Bit to use for the third green LED. The "Drive" LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Third red LED bit
-CONFIG_ETRAX_LED3R
- Bit to use for the third red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Fourth green LED bit
-CONFIG_ETRAX_LED4G
- Bit to use for the fourth green LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Fourth red LED bit
-CONFIG_ETRAX_LED4R
- Bit to use for the fourth red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Fifth green LED bit
-CONFIG_ETRAX_LED5G
- Bit to use for the fifth green LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Fifth red LED bit
-CONFIG_ETRAX_LED5R
- Bit to use for the fifth red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Sixth green LED bit
-CONFIG_ETRAX_LED6G
- Bit to use for the sixth green LED. The "Drive" LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Sixth red LED bit
-CONFIG_ETRAX_LED6R
- Bit to use for the sixth red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Seventh green LED bit
-CONFIG_ETRAX_LED7G
- Bit to use for the seventh green LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Seventh red LED bit
-CONFIG_ETRAX_LED7R
- Bit to use for the seventh red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Eighth yellow LED bit
-CONFIG_ETRAX_LED8Y
- Bit to use for the eighth yellow LED. The "Drive" LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Ninth yellow LED bit
-CONFIG_ETRAX_LED9Y
- Bit to use for the ninth yellow LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Tenth yellow LED bit
-CONFIG_ETRAX_LED10Y
- Bit to use for the tenth yellow LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Eleventh yellow LED bit
-CONFIG_ETRAX_LED11Y
- Bit to use for the eleventh yellow LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Twelfth red LED bit
-CONFIG_ETRAX_LED12R
- Bit to use for the twelfth red LED.
- For products with only one or two controllable LEDs,
- set this to same as CONFIG_ETRAX_LED1G (normally 2).
-
-Flash LED off during activity
-CONFIG_ETRAX_LED_OFF_DURING_ACTIVITY
- This option allows you to decide whether the network LED (and
- Bluetooth LED in case you use Bluetooth) will be on or off when
- the network is connected, and whether it should flash off or on
- when there is activity. If you say y to this option the network
- LED will be lit when there is a connection, and will flash off
- when there is activity.
-
-PA button configuration
-CONFIG_ETRAX_PA_BUTTON_BITMASK
- This is a bitmask with information about what bits on PA that
- are used for buttons.
- Most products has a so called TEST button on PA1, if that's true
- use 02 here.
- Use 00 if there are no buttons on PA.
- If the bitmask is <> 00 a button driver will be included in the gpio
- driver. Etrax general I/O support must be enabled.
-
-PA changeable direction bits
-CONFIG_ETRAX_PA_CHANGEABLE_DIR
- This is a bitmask with information of what bits in PA that a user
- can change direction on using ioctl's.
- Bit set = changeable.
- You probably want 00 here.
-
-PA changeable data bits
-CONFIG_ETRAX_PA_CHANGEABLE_BITS
- This is a bitmask with information of what bits in PA that a user
- can change change the value on using ioctl's.
- Bit set = changeable.
- You probably want 00 here.
-
-PA changeable direction bits
-CONFIG_ETRAX_PB_CHANGEABLE_DIR
- This is a bitmask with information of what bits in PB that a user
- can change direction on using ioctl's.
- Bit set = changeable.
- You probably want 00 here.
-
-PB changeable data bits
-CONFIG_ETRAX_PB_CHANGEABLE_BITS
- This is a bitmask with information of what bits in PB that a user
- can change the value on using ioctl's.
- Bit set = changeable.
- You probably want 00 here.
-
-Kernel debugger (kgdb)
-CONFIG_ETRAX_KGDB
- 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!
-
-Etrax bus waitstates
-CONFIG_ETRAX_DEF_R_WAITSTATES
- Waitstates for SRAM, Flash and peripherals (not DRAM). 95f8 is a
- good choice for most Axis products...
-
-Etrax bus configuration
-CONFIG_ETRAX_DEF_R_BUS_CONFIG
- Assorted bits controlling write mode, DMA burst length etc. 104 is
- a good choice for most Axis products...
-
-Etrax SDRAM configuration
-CONFIG_ETRAX_SDRAM
- Enable this if you use SDRAM chips and configure
- R_SDRAM_CONFIG and R_SDRAM_TIMING as well.
-
-DRAM size (dec, in MB)
-CONFIG_ETRAX_DEF_R_DRAM_CONFIG
- The R_DRAM_CONFIG register specifies everything on how the DRAM
- chips in the system are connected to the Etrax CPU. This is
- different depending on the manufacturer, chip type and number of
- chips. So this value often needs to be different for each Axis
- product.
-
-Etrax DRAM timing
-CONFIG_ETRAX_DEF_R_DRAM_TIMING
- Different DRAM chips have different speeds. Current Axis products
- use 50ns DRAM chips which can use the timing: 5611.
-
-Etrax SDRAM configuration
-CONFIG_ETRAX_DEF_R_SDRAM_CONFIG
- The R_SDRAM_CONFIG register specifies everything on how the SDRAM
- chips in the system are connected to the Etrax CPU. This is
- different depending on the manufacturer, chip type and number of
- chips. So this value often needs to be different for each Axis
- product.
-
-Etrax SDRAM timing
-CONFIG_ETRAX_DEF_R_SDRAM_TIMING
- Different SDRAM chips have different timing.
-
-Etrax General port A direction
-CONFIG_ETRAX_DEF_R_PORT_PA_DIR
- Configures the direction of general port A bits. 1 is out, 0 is in.
- This is often totally different depending on the product used.
- There are some guidelines though - if you know that only LED's are
- connected to port PA, then they are usually connected to bits 2-4
- and you can therefore use 1c. On other boards which don't have the
- LED's at the general ports, these bits are used for all kinds of
- stuff. If you don't know what to use, it is always safe to put all
- as inputs, although floating inputs isn't good.
-
-Etrax General port A data
-CONFIG_ETRAX_DEF_R_PORT_PA_DATA
- Configures the initial data for the general port A bits. Most
- products should use 00 here.
-
-Etrax General port B config
-CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG
- Configures the type of the general port B bits. 1 is chip select,
- 0 is port. Most products should use 00 here.
-
-Etrax General port B direction
-CONFIG_ETRAX_DEF_R_PORT_PB_DIR
- Configures the direction of general port B bits. 1 is out, 0 is in.
- This is often totally different depending on the product used. Bits
- 0 and 1 on port PB are usually used for I2C communication, but the
- kernel I2C driver sets the appropriate directions itself so you
- don't need to take that into consideration when setting this option.
- If you don't know what to use, it is always safe to put all as
- inputs.
-
-Etrax General port B data
-CONFIG_ETRAX_DEF_R_PORT_PB_DATA
- Configures the initial data for the general port A bits. Most
- products should use FF here.
-
-Etrax General port device
-CONFIG_ETRAX_GPIO
- Enables the Etrax general port device (major 120, minors 0 and 1).
- You can use this driver to access the general port bits. It supports
- these ioctl's:
- #include <linux/etraxgpio.h>
- fd = open("/dev/gpioa", O_RDWR); // or /dev/gpiob
- ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_SETBITS), bits_to_set);
- ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_CLRBITS), bits_to_clear);
- val = ioctl(fd, _IO(ETRAXGPIO_IOCTYPE, IO_READBITS), NULL);
- Remember that you need to setup the port directions appropriately in
- the General configuration.
-
-Etrax parallel data support
-CONFIG_ETRAX_PARDATA
- Adds support for writing data to the parallel port par0 of the ETRAX
- 100. If you create a character special file with major number 126,
- you can write to the data bits of par0.
- Note: you need to disable Etrax100 parallel port support.
-
-Etrax parallel LCD (HD44780) Driver
-CONFIG_ETRAX_LCD_HD44780
- Adds support for a HD44780 controlled LCD connected to the parallel
- port par0 of the Etrax.
-
-Etrax Serial port ser0 support
-CONFIG_ETRAX_SERIAL
- Enables the ETRAX 100 serial driver for ser0 (ttyS0)
- You probably want this enabled.
-
-/proc/serial entry
-CONFIG_ETRAX_SERIAL_PROC_ENTRY
- Enables /proc/serial entry where errors and statistics can be
- viewed. CONFIG_PROC_FS must also be set for this to work.
-
-Etrax Serial port fast flush of DMA using fast timer API
-CONFIG_ETRAX_SERIAL_FAST_TIMER
- Select this to have the serial DMAs flushed at a higher rate than
- normally, possible by using the fast timer API, the timeout is
- approx. 4 character times.
- If unsure, say N.
-
-Etrax Serial port fast flush of DMA
-CONFIG_ETRAX_SERIAL_FLUSH_DMA_FAST
- Select this to have the serial DMAs flushed at a higher rate than
- normally possible through a fast timer interrupt (currently at
- 15360 Hz).
- If unsure, say N.
-
-Etrax Serial port receive flush timeout
-CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS
- Number of timer ticks between flush of receive fifo (1 tick = 10ms).
- Try 0-3 for low latency applications. Approx 5 for high load
- applications (e.g. PPP). Maybe this should be more adaptive some
- day...
-
-Etrax Serial port ser0 DTR, RI, DSR and CD support on PB
-CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PB
- Enables the status and control signals DTR, RI, DSR and CD on PB for
- ser0.
-
-Serial port 1 enabled
-CONFIG_ETRAX_SERIAL_PORT1
- Enables the ETRAX 100 serial driver for ser1 (ttyS1).
-
-Etrax Serial port ser1 DTR, RI, DSR and CD support on PB
-CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_ON_PB
- Enables the status and control signals DTR, RI, DSR and CD on PB for
- ser1.
-
-Serial port 2 enabled
-CONFIG_ETRAX_SERIAL_PORT2
- Enables the ETRAX 100 serial driver for ser2 (ttyS2).
-
-Etrax Serial port ser2 DTR, RI, DSR and CD support on PA
-CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PA
- Enables the status and control signals DTR, RI, DSR and CD on PA for
- ser2.
-
-Serial port 3 enabled
-CONFIG_ETRAX_SERIAL_PORT3
- Enables the ETRAX 100 serial driver for ser3 (ttyS3).
-
-Etrax100 RS-485 support
-CONFIG_ETRAX_RS485
- Enables support for RS-485 serial communication. For a primer on
- RS-485, see <http://www.hw.cz/english/docs/rs485/rs485.html>.
-
-Etrax100 RS-485 mode on PA
-CONFIG_ETRAX_RS485_ON_PA
- Control Driver Output Enable on RS485 transceiver using a pin on PA
- port:
- Axis 2400/2401 uses PA 3.
-
-Etrax100 RS-485 mode on PA bit
-CONFIG_ETRAX_RS485_ON_PA_BIT
- Control Driver Output Enable on RS485 transceiver using a this bit
- on PA port.
-
-Ser0 DTR on PB bit
-CONFIG_ETRAX_SER0_DTR_ON_PB_BIT
- Specify the pin of the PB port to carry the DTR signal for serial
- port 0.
-
-Ser0 RI on PB bit
-CONFIG_ETRAX_SER0_RI_ON_PB_BIT
- Specify the pin of the PB port to carry the RI signal for serial
- port 0.
-
-Ser0 DSR on PB bit
-CONFIG_ETRAX_SER0_DSR_ON_PB_BIT
- Specify the pin of the PB port to carry the DSR signal for serial
- port 0.
-
-Ser0 CD on PB bit
-CONFIG_ETRAX_SER0_CD_ON_PB_BIT
- Specify the pin of the PB port to carry the CD signal for serial
- port 0.
-
-Ser1 DTR on PB bit
-CONFIG_ETRAX_SER1_DTR_ON_PB_BIT
- Specify the pin of the PB port to carry the DTR signal for serial
- port 1.
-
-Ser1 RI on PB bit
-CONFIG_ETRAX_SER1_RI_ON_PB_BIT
- Specify the pin of the PB port to carry the RI signal for serial
- port 1.
-
-Ser1 DSR on PB bit
-CONFIG_ETRAX_SER1_DSR_ON_PB_BIT
- Specify the pin of the PB port to carry the DSR signal for serial
- port 1.
-
-Ser1 CD on PB bit
-CONFIG_ETRAX_SER1_CD_ON_PB_BIT
- Specify the pin of the PB port to carry the CD signal for serial
- port 1.
-
-Ser2 DTR on PA bit
-CONFIG_ETRAX_SER2_DTR_ON_PA_BIT
- Specify the pin of the PA port to carry the DTR signal for serial
- port 2.
-
-Ser2 RI on PA bit
-CONFIG_ETRAX_SER2_RI_ON_PA_BIT
- Specify the pin of the PA port to carry the RI signal for serial
- port 2.
-
-Ser2 DSR on PA bit
-CONFIG_ETRAX_SER2_DSR_ON_PA_BIT
- Specify the pin of the PA port to carry the DTR signal for serial
- port 2.
-
-Ser2 CD on PA bit
-CONFIG_ETRAX_SER2_CD_ON_PA_BIT
- Specify the pin of the PA port to carry the CD signal for serial
- port 2.
-
-Etrax100 RS-485 disable receiver
-CONFIG_ETRAX_RS485_DISABLE_RECEIVER
- It's necessary to disable the serial receiver to avoid serial
- loopback. Not all products are able to do this in software only.
- Axis 2400/2401 must disable receiver.
-
-Etrax100 I2C Support
-CONFIG_ETRAX_I2C
- Enables an I2C driver on PB0 and PB1 on ETRAX100.
- EXAMPLE usage:
- i2c_arg = I2C_WRITEARG(STA013_WRITE_ADDR, reg, val);
- ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_WRITEREG), i2c_arg);
- i2c_arg = I2C_READARG(STA013_READ_ADDR, reg);
- val = ioctl(fd, _IO(ETRAXI2C_IOCTYPE, I2C_READREG), i2c_arg);
-
-Etrax100 I2C configuration
-CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C
- Select whether to use the special I2C mode in the PB I/O register or
- not. This option needs to be selected in order to use some drivers
- that access the I2C I/O pins directly instead of going through the
- I2C driver, like the DS1302 realtime-clock driver. If you are
- uncertain, choose Y here.
-
-Etrax100 I2C EEPROM (NVRAM) support
-CONFIG_ETRAX_I2C_EEPROM
- Enables I2C EEPROM (non-volatile RAM) on PB0 and PB1 using the I2C
- driver. Select size option: Probed, 2k, 8k, 16k.
- (Probing works for 2k and 8k but not that well for 16k)
-
-Etrax100 I2C EEPROM (NVRAM) size/16kB
-CONFIG_ETRAX_I2C_EEPROM_16KB
- Use a 16kB EEPROM.
-
-Etrax100 I2C EEPROM (NVRAM) size/2kB
-CONFIG_ETRAX_I2C_EEPROM_2KB
- Use a 2kB EEPROM.
-
-Etrax100 I2C EEPROM (NVRAM) size/8kB
-CONFIG_ETRAX_I2C_EEPROM_8KB
- Use a 8kB EEPROM.
-
-# Choice: etrax_eeprom
-Etrax100 I2C EEPROM (NVRAM) size/probe
-CONFIG_ETRAX_I2C_EEPROM_PROBE
- Specifies size or auto probe of the EEPROM size.
- Options: Probed, 2k, 8k, 16k.
- (Probing works for 2k and 8k but not that well for 16k)
-
-Etrax DS1302 Real-Time Clock driver
-CONFIG_ETRAX_DS1302
- Enables the driver for the DS1302 Real-Time Clock battery-backed
- chip on some products. The kernel reads the time when booting, and
- the date can be set using ioctl(fd, RTC_SET_TIME, &rt) with rt a
- rtc_time struct (see <file:include/asm-cris/rtc.h>) on the /dev/rtc
- device, major 121. You can check the time with cat /proc/rtc, but
- normal time reading should be done using libc function time and
- friends.
-
-Etrax DS1302 RST on the Generic Port
-CONFIG_ETRAX_DS1302_RST_ON_GENERIC_PORT
- If your product has the RST signal line for the DS1302 RTC on the
- Generic Port then say Y here, otherwise leave it as N in which
- case the RST signal line is assumed to be connected to Port PB
- (just like the SCL and SDA lines).
-
-Etrax DS1302 RST bit number
-CONFIG_ETRAX_DS1302_RSTBIT
- This is the bit number for the RST signal line of the DS1302 RTC on
- the selected port. If you have selected the generic port then it
- should be bit 27, otherwise your best bet is bit 5.
-
-Etrax DS1302 SCL bit number
-CONFIG_ETRAX_DS1302_SCLBIT
- This is the bit number for the SCL signal line of the DS1302 RTC on
- Port PB. This is probably best left at 3.
-
-Etrax DS1302 SDA bit number
-CONFIG_ETRAX_DS1302_SDABIT
- This is the bit number for the SDA signal line of the DS1302 RTC on
- Port PB. This is probably best left at 2.
-
-Etrax 100 IDE Reset
-CONFIG_ETRAX_IDE_CSP0_8_RESET
- Configures the pin used to reset the IDE bus.
-
-Etrax 100 IDE Reset
-CONFIG_ETRAX_IDE_CSPE1_16_RESET
- Configures the pin used to reset the IDE bus.
-
-Delay for drives to regain consciousness
-CONFIG_ETRAX_IDE_DELAY
- Sets the time to wait for disks to regain consciousness after reset.
-
-Etrax 100 IDE Reset
-CONFIG_ETRAX_IDE_G27_RESET
- Configures the pin used to reset the IDE bus.
-
-# Choice: ide_reset
-IDE reset on PB Bit 7
-CONFIG_ETRAX_IDE_PB7_RESET
- Configures the pin used to reset the IDE bus.
-
-USB 1.1 host
-CONFIG_ETRAX_USB_HOST
- 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).
-
-USB 1.1 host port 1 enabled
-CONFIG_ETRAX_USB_HOST_PORT1
- This option enables port 1 of the ETRAX 100LX USB root hub (RH).
-
-USB 1.1 host port 2 enabled
-CONFIG_ETRAX_USB_HOST_PORT2
- This option enables port 2 of the ETRAX 100LX USB root hub (RH).
-
-ETRAX 100LX 10/100Mbit Ethernet controller
-CONFIG_ETRAX_ETHERNET
- This option enables the ETRAX 100LX built-in 10/100Mbit Ethernet
- controller.
-
-ETRAX 100LX Synchronous serial ports
-CONFIG_ETRAX_SYNCHRONOUS_SERIAL
- This option enables support for the ETRAX 100LX built-in
- synchronous serial ports. These ports are used for continuous
- streamed data like audio. The default setting is compatible
- with the STA 013 MP3 decoder, but can easily be tuned to fit
- any other audio encoder/decoder and SPI.
-
-ETRAX 100LX Synchronous serial port 0 enabled
-CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT0
- Enables the ETRAX 100LX synchronous serial port 0 (syncser0).
-
-ETRAX 100LX Synchronous serial port 0 uses DMA
-CONFIG_ETRAX_SYNCHRONOUS_SERIAL0_DMA
- Makes synchronous serial port 0 use DMA.
-
-ETRAX 100LX Synchronous serial port 1 enabled
-CONFIG_ETRAX_SYNCHRONOUS_SERIAL_PORT1
- Enables the ETRAX 100LX synchronous serial port 1 (syncser1).
-
-ETRAX 100LX Synchronous serial port 1 uses DMA
-CONFIG_ETRAX_SYNCHRONOUS_SERIAL1_DMA
- Makes synchronous serial port 1 use DMA.
-
-Delay for drives to regain consciousness
-CONFIG_IDE_DELAY
- Number of seconds to wait for IDE drives to spin up after an IDE
- reset.
-
-ARTPEC-1 support
-CONFIG_JULIETTE
- The ARTPEC-1 is a video-compression chip used in the AXIS 2100
- network camera, which is built around an ETRAX-100 board. With this
- option selected, the ETRAX kernel configures a DMA channel at boot
- time to talk to the chip.
-
-Axis flash-map support
-CONFIG_ETRAX_AXISFLASHMAP
- This option enables MTD mapping of flash devices. Needed to use
- flash memories. If unsure, say Y.
-
-Byte-offset of partition table sector
-CONFIG_ETRAX_PTABLE_SECTOR
- Byte-offset of the partition table in the first flash chip.
- The default value is 64kB and should not be changed unless
- you know exactly what you are doing. The only valid reason
- for changing this is when the flash block size is bigger
- than 64kB (e.g. when using two parallel 16 bit flashes).
-
-Enable Etrax100 watchdog
-CONFIG_ETRAX_WATCHDOG
- Enable the built-in watchdog timer support on Etrax100 embedded
- network computers.
-
-# Choice: crisdebug
-Serial-0
-CONFIG_ETRAX_DEBUG_PORT0
- Choose a serial port for the ETRAX debug console. Default to
- port 0.
-
-Etrax debug port on ser1
-CONFIG_ETRAX_DEBUG_PORT1
- Use serial port 1 for the console.
-
-Etrax debug port on ser2
-CONFIG_ETRAX_DEBUG_PORT2
- Use serial port 2 for the console.
-
-Etrax debug port on ser3
-CONFIG_ETRAX_DEBUG_PORT3
- Use serial port 3 for the console.
-
-No Etrax debug port
-CONFIG_ETRAX_DEBUG_PORT_NULL
- Disable serial-port debugging.
-
-Parallel port support
-CONFIG_ETRAX_PARPORT
- Say Y here to enable the ETRAX on-board parallel ports.
-
-Parallel port 0 enabled
-CONFIG_ETRAX_PARALLEL_PORT0
- Say Y here to enable parallel port 0.
-
-Parallel port 1 enabled
-CONFIG_ETRAX_PARALLEL_PORT1
- Say Y here to enable parallel port 1.
-
-# Choice: crisrescue
-Select a product rescue port
-CONFIG_ETRAX_RESCUE_SER0
- Select one of the four serial ports as a rescue port. The default
- is port 0.
-
-Serial-1
-CONFIG_ETRAX_RESCUE_SER1
- Use serial port 1 as the rescue port.
-
-Serial-2
-CONFIG_ETRAX_RESCUE_SER2
- Use serial port 2 as the rescue port.
-
-Serial-3
-CONFIG_ETRAX_RESCUE_SER3
- Use serial port 3 as the rescue port.
-
-RIO Hardware Watchdog support
-CONFIG_WATCHDOG_RIO
- Say Y here to support the hardware watchdog capability on Sun RIO
- machines. The watchdog timeout period is normally one minute but
- can be changed with a boot-time parameter.
-
-CP1XXX Hardware Watchdog support
-CONFIG_WATCHDOG_CP1XXX
- This is the driver for the hardware watchdog timers present on
- Sun Microsystems CompactPCI models CP1400 and CP1500.
-
- This driver is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cpwatchdog.o. If you want to compile it
- as a module, say M here and read <file:Documentation/modules.txt>.
-
- If you do not have a CompactPCI model CP1400 or CP1500, or
- another UltraSPARC-IIi-cEngine boardset with hardware watchdog,
- you should say N to this option.
-
-# Choice: ia64type
-Itanium
-CONFIG_ITANIUM
- Select your IA-64 processor type. The default is Intel Itanium.
- This choice is safe for all IA-64 systems, but may not perform
- optimally on systems with, say, Itanium 2 or newer processors.
-
-Itanium 2
-CONFIG_MCKINLEY
- Select this to configure for an Itanium 2 (McKinley) processor.
-
-# Choice: ia64system
-IA-64 system type
-CONFIG_IA64_GENERIC
- This selects the system type of your hardware. A "generic" kernel
- will run on any supported IA-64 system. However, if you configure
- a kernel for your specific system, it will be faster and smaller.
-
- generic For any supported IA-64 system
- DIG-compliant For DIG ("Developer's Interface Guide") compliant systems
- HP For HP systems
- SGI-SN2 For SGI SN2 systems
- Ski-simulator For the HP simulator (<http://www.hpl.hp.com/research/linux/ski/>)
-
- If you don't know what to do, choose "generic".
-
-CONFIG_IA64_HP_ZX1
- Build a kernel that runs on HP zx1-based systems. This adds support
- for the zx1 IOMMU and makes root bus bridges appear in PCI config space
- (required for zx1 agpgart support).
-
-# Choice: pagesize
-Kernel page size
-CONFIG_IA64_PAGE_SIZE_4KB
- This lets you select the page size of the kernel. For best IA-64
- performance, a page size of 8KB or 16KB is recommended. For best
- IA-32 compatibility, a page size of 4KB should be selected (the vast
- majority of IA-32 binaries work perfectly fine with a larger page
- size). For Itanium systems, do NOT chose a page size larger than
- 16KB.
-
- 4KB For best IA-32 compatibility
- 8KB For best IA-64 performance
- 16KB For best IA-64 performance
- 64KB Not for Itanium.
-
- If you don't know what to do, choose 8KB.
-
-Enable Itanium B-step specific code
-CONFIG_ITANIUM_BSTEP_SPECIFIC
- Select this option to build a kernel for an Itanium prototype system
- with a B-step CPU. Only B3 step CPUs are supported. You have a B3-step
- CPU if the "revision" field in /proc/cpuinfo is equal to 4. If the
- "revision" field shows a number bigger than 4, you do not have to turn
- on this option.
-
-Enable IA-64 Machine Check Abort
-CONFIG_IA64_MCA
- Say Y here to enable machine check support for IA-64. If you're
- unsure, answer Y.
-
-Use PAL_HALT_LIGHT in idle loop
-CONFIG_IA64_PAL_IDLE
- Say Y here to enable use of PAL_HALT_LIGHT in the cpu_idle loop.
- This allows the CPU to enter a low power state when idle. You
- can enable CONFIG_IA64_PALINFO and check /proc/pal/cpu0/power_info
- to see the power consumption and latency for this state. If you're
- unsure your firmware supports it, answer N.
-
-Disable IA-64 Virtual Hash Page Table
-CONFIG_DISABLE_VHPT
- The Virtual Hash Page Table (VHPT) enhances virtual address
- translation performance. Normally you want the VHPT active but you
- can select this option to disable the VHPT for debugging. If you're
- unsure, answer N.
-
-Turn on compare-and-exchange bug checking (slow!)
-CONFIG_IA64_DEBUG_CMPXCHG
- Selecting this option turns on bug checking for the IA64
- compare-and-exchange instructions. This is slow! Itaniums
- from step B3 or later don't have this problem. If you're unsure,
- select N.
-
-IA64 IRQ bug checking
-CONFIG_IA64_DEBUG_IRQ
- Selecting this option turns on bug checking for the IA64 irq_save
- and restore instructions. It's useful for tracking down spinlock
- problems, but slow! If you're unsure, select N.
-
-Early printk support
-CONFIG_IA64_EARLY_PRINTK
- Selecting this option uses a UART or VGA screen (or both) for
- printk() output before the consoles are initialised. It is useful
- for debugging problems early in the boot process, but only if you
- have a serial terminal or a VGA screen attached. If you're unsure,
- select N.
-
-Early printk on serial port
-CONFIG_IA64_EARLY_PRINTK_UART
- Select this option to use a serial port for early printk() output.
- You must also select either CONFIG_IA64_EARLY_PRINTK_UART_BASE or
- CONFIG_SERIAL_HCDP. If you select CONFIG_SERIAL_HCDP, early
- printk() output will appear on the first console device described by
- the HCDP. If you set CONFIG_IA64_EARLY_PRINTK_UART_BASE, the HCDP
- will be ignored.
-
-UART base address
-CONFIG_IA64_EARLY_PRINTK_UART_BASE
- The physical MMIO address of the UART to use for early printk().
- This overrides any UART located using the EFI HCDP table.
-
-Early printk on VGA
-CONFIG_IA64_EARLY_PRINTK_VGA
- Select this option to use VGA for early printk() output.
-
-Print possible IA64 hazards to console
-CONFIG_IA64_PRINT_HAZARDS
- Selecting this option prints more information for Illegal Dependency
- Faults, that is, for Read after Write, Write after Write or Write
- after Read violations. If you're unsure, select Y.
-
-Performance monitor support
-CONFIG_PERFMON
- Selects whether support for the IA-64 performance monitor hardware
- is included in the kernel. This makes some kernel data-structures a
- little bigger and slows down execution a bit, but it is still
- usually a good idea to turn this on. If you're unsure, say N.
-
-/proc/pal support
-CONFIG_IA64_PALINFO
- If you say Y here, you are able to get PAL (Processor Abstraction
- Layer) information in /proc/pal. This contains useful information
- about the processors in your systems, such as cache and TLB sizes
- and the PAL firmware version in use.
-
- To use this option, you have to check that the "/proc file system
- support" (CONFIG_PROC_FS) is enabled, too.
-
-PPC4xx DMA controller support
-CONFIG_PPC4xx_DMA
- Select this to enable support for the PPC4xx general purpose DMA
- controller.
-
-ttyS0 device
-CONFIG_UART0_TTYS0
- This option reverses the mapping between the hardware UART and software
- device. Selecting UART0 gives the normal mapping of UART0=ttyS0 and
- UART1=ttyS1. Selecting UART1 gives the reverse mapping of UART0=ttyS1
- and UART1=ttyS0. Most people will use UART0.
-
-PowerPC 405 on-chip ethernet
-CONFIG_IBM_OCP_ENET
- If you want to use the 405 built-in ethernet select this.
-
-CONFIG_IBM_OCP_ENET_ERROR_MSG
- Enable this option to print verbose debug messages for troubleshooting.
-
-PowerPC 405 on-chip ethernet -- Number of receive buffers
-CONFIG_IBM_OCP_ENET_RX_BUFF
- Number of ethernet receive (read) buffers. Unless you know what you
- are doing the default should be fine.
-
-PowerPC 405 on-chip ethernet -- Number of transmit buffers
-CONFIG_IBM_OCP_ENET_TX_BUFF
- Number of ethernet transmit (write) buffers. Unless you know what
- you are doing the default should be fine.
-
-PowerPC 405 on-chip ethernet -- Amount of bytes to Reserve on a skb
-CONFIG_IBM_OCP_ENET_SKB_RES
- Many standard ethernet drivers need to reserve 2 bytes of data
- on the skb before giving the data ptr to the hardware. This is
- so the IP data will be 16-byte aligned when it goes up the stack.
- This is a requirement for some processors and it can cause major
- slow downs on others. The 405GP dose not have problems with the
- misaligned data so the default is 0. If you need to route the
- incoming ethernet packets to another device that has alignment
- requirements this can help remove a data copy. A value of 2 can
- help at getting 16-byte aligned IP data for another device. A
- larger value can be used when routing to a IP tunnel device.
- Make sure XXX_DESC_SIZE - XXX_SKB_RES >= 1514, or larger if VLANS
- are used.
-
-PPC 405 I2C Algorithm
-CONFIG_PPC405_I2C_ALGO
- Enable this option to use the built-in I2C on your 405.
-
-PPC 405 I2C Adapter
-CONFIG_PPC405_I2C_ADAP
- Enable this option to use the built-in I2C on your 405.
-
-/proc/efi/vars support
-CONFIG_EFI_VARS
- If you say Y here, you are able to get EFI (Extensible Firmware
- Interface) variable information in /proc/efi/vars. You may read,
- write, create, and destroy EFI variables through this interface.
-
- To use this option, you have to check that the "/proc file system
- support" (CONFIG_PROC_FS) is enabled, too.
-
-Kernel support for IA-32 emulation
-CONFIG_IA32_SUPPORT
- IA64 processors can run IA32 (that is, x86) binaries by emulating
- the IA32 instruction set. Say Y here to build in kernel support for
- this. If in doubt, say Y.
-
-Physical memory granularity (16 MB)
-CONFIG_IA64_GRANULE_16MB
- IA64 identity-mapped regions use a large page size. We'll call such
- large pages "granules". If you can think of a better name that's
- unambiguous, let us know... Unless your identity-mapped regions are
- very large, select a granule size of 16MB.
-
-Physical memory granularity (64 MB)
-CONFIG_IA64_GRANULE_64MB
- IA64 identity-mapped regions use a large page size. We'll call such
- large pages "granules". If you can think of a better name that's
- unambiguous, let us know... Unless your identity-mapped regions are
- very large, select a granule size of 16MB. (This is the "large" choice.)
-
-Enable SGI SN extra debugging code
-CONFIG_IA64_SGI_SN_DEBUG
- Turns on extra debugging code in the SGI SN (Scalable NUMA) platform
- for IA64. Unless you are debugging problems on an SGI SN IA64 box,
- say N.
-
-Enable SGI Medusa Simulator Support
-CONFIG_IA64_SGI_SN_SIM
- If you are compiling a kernel that will run under SGI's IA64
- simulator (Medusa) then say Y, otherwise say N.
-
-PCIBA Support
-CONFIG_PCIBA
- IRIX PCIBA-inspired user mode PCI interface for the SGI SN (Scalable
- NUMA) platform for IA64. Unless you are compiling a kernel for an SGI SN IA64 box, say N.
-
-Enable protocol mode for the L1 console
-SERIAL_SGI_L1_PROTOCOL
- Uses protocol mode instead of raw mode for the level 1 console on the
- SGI SN (Scalable NUMA) platform for IA64. If you are compiling for
- an SGI SN box then Y is the recommended value, otherwise say N.
-
-Directly Connected Compact Flash support
-CONFIG_CF_ENABLER
- Compact Flash is a small, removable mass storage device introduced
- in 1994 originally as a PCMCIA device. If you say `Y' here, you
- compile in support for Compact Flash devices directly connected to
- a SuperH processor. A Compact Flash FAQ is available at
- <http://www.compactflash.org/faqs/faq.htm>.
-
- If your board has "Directly Connected" CompactFlash at area 5 or 6,
- you may want to enable this option. Then, you can use CF as
- primary IDE drive (only tested for SanDisk).
-
- If in doubt, select 'N'.
-
-Kernel debugging
-CONFIG_DEBUG_KERNEL
- Say Y here if you are developing drivers or trying to debug and
- identify kernel problems.
-
-Debug memory allocations
-CONFIG_DEBUG_SLAB
- Say Y here to have the kernel do limited verification on memory
- allocation as well as poisoning memory on free to catch use of freed
- memory.
-
-Memory mapped I/O debugging
-CONFIG_DEBUG_IOVIRT
- Say Y here to get warned whenever an attempt is made to do I/O on
- obviously invalid addresses such as those generated when ioremap()
- calls are forgotten. Memory mapped I/O will go through an extra
- check to catch access to unmapped ISA addresses, an access method
- that can still be used by old drivers that are being ported from
- 2.0/2.2.
-
-Spinlock debugging
-CONFIG_DEBUG_SPINLOCK
- Say Y here and build SMP to catch missing spinlock initialization
- and certain other kinds of spinlock errors commonly made. This is
- best used in conjunction with the NMI watchdog so that spinlock
- deadlocks are also debuggable.
-
-Additional run-time checks
-CONFIG_CHECKING
- Enables some internal consistency checks for kernel debugging.
- You should normally say N.
-
-Read-write spinlock debugging
-CONFIG_DEBUG_RWLOCK
- If you say Y here then read-write lock processing will count how many
- times it has tried to get the lock and issue an error message after
- too many attempts. If you suspect a rwlock problem or a kernel
- hacker asks for this option then say Y. Otherwise say N.
-
-Semaphore debugging
-CONFIG_DEBUG_SEMAPHORE
- If you say Y here then semaphore processing will issue lots of
- verbose debugging messages. If you suspect a semaphore problem or a
- kernel hacker asks for this option then say Y. Otherwise say N.
-
-Verbose BUG() reporting (adds 70K)
-CONFIG_DEBUG_BUGVERBOSE
- Say Y here to make BUG() panics output the file name and line number
- of the BUG call as well as the EIP and oops trace. This aids
- debugging but costs about 70-100K of memory.
-
-Include kgdb kernel debugger
-CONFIG_KGDB
- Include in-kernel hooks for kgdb, the Linux kernel source level
- debugger. For i386 architecture there is project page at
- <http://kgdb.sourceforge.net/>.
-
-Include xmon kernel debugger
-CONFIG_XMON
- Include in-kernel hooks for the xmon kernel monitor/debugger
- supported by the PPC port.
-
-Include BDI2000 debugger support
-CONFIG_BDI_SWITCH
- Include in-kernel support for the Abatron BDI2000 debugger. To
- learn more about the Abatron BDI2000, visit the web page at
- <http://www.abatron.ch/>.
-
-Add additional CFLAGS to the kernel build
-CONFIG_MORE_COMPILE_OPTIONS
- If you want to add additional CFLAGS to the kernel build, such as
- -g for KGDB, XMON or the BDI2000, enable this option and then
- enter what you would like to add in the next question.
-
-Include kgdb kernel debugger
-CONFIG_KWDB
- Include in-kernel hooks for kdb, the source level debugger for the
- PA-RISC port.
-
-IODC console
-CONFIG_IODC_CONSOLE
- IODC is HP's pre-PCI standard for device identification (a la PCI
- vendor, device IDs), detection, configuration, initialization and so
- on. It also can provide firmware function to do the actual IO,
- which are slow, not really defined for runtime usage and generally
- not desirable.
-
- See <http://www.linuxhq.com/kernel/v2.4/doc/parisc/IODC.txt.html>
- for the gory details.
-
- Say Y here to enable use of the IODC firmware functions for console
- I/O. This is only useful on older PA-RISC workstations. If in
- doubt, say Y.
-
-U2/Uturn I/O MMU
-CONFIG_IOMMU_CCIO
- Say Y here to enable DMA management routines for the first
- generation of PA-RISC cache-coherent machines. Programs the
- U2/Uturn chip in "Virtual Mode" and use the I/O MMU.
-
-LBA/Elroy PCI support
-CONFIG_PCI_LBA
- Say Y here to give the PA-RISC kernel access to PCI configuration
- and IO-port space on PA-RISC workstations equipped with a Lower Bus
- Adapter (LBA). This includes A, B, C, J, L, and N-class machines
- with 4-digit model numbers, also the A300.
-
-LASI I/O support
-CONFIG_GSC_LASI
- Say Y here to directly support the LASI controller chip found on
- PA-RISC workstations. Linux-oriented documentation for this chip
- can be found at <http://www.parisc-linux.org/documentation/>.
-
-LASI/ASP builtin parallel-port
-CONFIG_PARPORT_GSC
- Say Y here to build in low-level parallel-support for PC-style
- hardware integrated in the LASI-Controller (on the GSC Bus) for
- HP-PARISC workstations.
-
-Fujitsu Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_FUJITSU
- Enable vendor-specific code for Fujitsu IDE disks. Unless you are
- the IDE maintainer, you probably do not want to mess with this.
-
-IBM Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_IBM
- Enable vendor-specific code for IBM IDE disks. Unless you are the
- IDE maintainer, you probably do not want to mess with this.
-
-Maxtor Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_MAXTOR
- Enable vendor-specific code for Maxtor IDE disks. Unless you are
- the IDE maintainer, you probably do not want to mess with this.
-
-Quantum Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_QUANTUM
- Enable vendor-specific code for Quantum IDE disks. Unless you are
- the IDE maintainer, you probably do not want to mess with this.
-
-Seagate Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_SEAGATE
- Enable vendor-specific code for Seagate IDE disks. Unless you are
- the IDE maintainer, you probably do not want to mess with this.
-
-Western Digital Vendor Specific
-CONFIG_BLK_DEV_IDEDISK_WD
- Enable vendor-specific code for Western Digital IDE disks. Unless
- you are the IDE maintainer, you probably do not want to mess with
- this.
-
-TiVo Commerial Application Specific
-CONFIG_BLK_DEV_TIVO
- Enable vendor-specific code for TiVo IDE disks. Unless you are the
- IDE maintainer, you probably do not want to mess with this.
-
-# Choice: superhsys
-Generic
-CONFIG_SH_GENERIC
- Select Generic if configuring for a generic SuperH system.
- The "generic" option compiles in *all* the possible hardware
- support and relies on the sh_mv= kernel command option to choose
- at runtime which routines to use. "MV" stands for "machine vector";
- each of the machines below is described by a machine vector.
-
- Select SolutionEngine if configuring for a Hitachi SH7709
- or SH7750/7750S evaluation board.
-
- Select SHMobileSolutionEngine if configuring for SH-Mobile Solution
- Engine.
-
- Select Overdrive if configuring for a ST407750 Overdrive board.
- More information at
- <http://linuxsh.sourceforge.net/docs/7750overdrive.php3>.
-
- Select HP620 if configuring for a HP Jornada HP620.
- More information (hardware only) at
- <http://www.hp.com/jornada/>.
-
- Select HP680 if configuring for a HP Jornada HP680.
- More information (hardware only) at
- <http://www.hp.com/jornada/products/680/>.
-
- Select HP690 if configuring for a HP Jornada HP690.
- More information (hardware only) at
- <http://www.hp.com/jornada/products/680/>.
-
- Select CqREEK if configuring for a CqREEK SH7708 or SH7750.
- More information at
- <http://sources.redhat.com/ecos/hardware.html#SuperH>.
-
- Select DMIDA if configuring for a DataMyte 4000 Industrial
- Digital Assistant. More information at <http://www.dmida.com/>.
-
- Select EC3104 if configuring for a system with an Eclipse
- International EC3104 chip, e.g. the Harris AD2000 or Compaq Aero 8000.
-
- Select Dreamcast if configuring for a SEGA Dreamcast.
- More information at
- <http://www.m17n.org/linux-sh/dreamcast/>. There is a
- Dreamcast project is at <http://linuxdc.sourceforge.net/>.
-
- Select BareCPU if you know what this means, and it applies
- to your system.
-
-# These may have to be merged in when we go to CML2:
-# - "SolutionEngine7751" for Hitachi SolutionEngine (7751)
-# - "STB1_Harp" for STMicroelectronics HARP
-# - "CqREEK" for CQ Publishing CqREEK SH-4
-# - "CAT68701" for CAT 68701 Evaluation Board (SH7708)
-# - "BigSur" for Big Sur Evaluation Board
-# - "SH2000" for SH2000 Evaluation Board (SH7709A)
-# - "ADX" for A&D ADX
-
-SolutionEngine
-CONFIG_SH_SOLUTION_ENGINE
- Select SolutionEngine if configuring for a Hitachi SH7709
- or SH7750 evaluation board.
-
-7751 SolutionEngine
-CONFIG_SH_7751_SOLUTION_ENGINE
- Select 7751 SolutionEngine if configuring for a Hitachi SH7751
- evaluation board.
-
-SHMobileSolutionEngine
-CONFIG_SH_MOBILE_SOLUTION_ENGINE
- Select SHMobileSolutionEngine if configuring for SH-Mobile Solution
- Engine.
-
-Overdrive
-CONFIG_SH_OVERDRIVE
- Select Overdrive if configuring for a ST407750 Overdrive board.
- More information at
- <http://linuxsh.sourceforge.net/docs/7750overdrive.php3>.
-
-HP620
-CONFIG_SH_HP620
- Select HP620 if configuring for a HP jornada HP620.
- More information (hardware only) at
- <http://www.hp.com/jornada/>.
-
-HP680
-CONFIG_SH_HP680
- Select HP680 if configuring for a HP Jornada HP680.
- More information (hardware only) at
- <http://www.hp.com/jornada/products/680/>.
-
-HP690
-CONFIG_SH_HP690
- Select HP690 if configuring for a HP Jornada HP690.
- More information (hardware only)
- at <http://www.hp.com/jornada/products/680/>.
-
-CqREEK
-CONFIG_SH_CQREEK
- Select CqREEK if configuring for a CqREEK SH7708 or SH7750.
- More information at
- <http://sources.redhat.com/ecos/hardware.html#SuperH>.
-
-DMIDA
-CONFIG_SH_DMIDA
- Select DMIDA if configuring for a DataMyte 4000 Industrial
- Digital Assistant. More information at <http://www.dmida.com/>.
-
-EC3104
-CONFIG_SH_EC3104
- Select EC3104 if configuring for a system with an Eclipse
- International EC3104 chip, e.g. the Harris AD2000.
-
-Dreamcast
-CONFIG_SH_DREAMCAST
- Select Dreamcast if configuring for a SEGA Dreamcast.
- More information at
- <http://www.m17n.org/linux-sh/dreamcast/>. There is a
- Dreamcast project is at <http://linuxdc.sourceforge.net/>.
-
-SH-2000
-CONFIG_SH_SH2000
- SH-2000 is a single-board computer based around SH7709A chip
- intended for embedded applications.
- It has an Ethernet interface (CS8900A), direct connected
- Compact Flash socket, three serial ports and PC-104 bus.
- More information at <http://sh2000.sh-linux.org>.
-
-BareCPU
-CONFIG_SH_UNKNOWN
- "Bare CPU" aka "unknown" means an SH-based system which is not one
- of the specific ones mentioned above, which means you need to enter
- all sorts of stuff like CONFIG_MEMORY_START because the config
- system doesn't already know what it is. You get a machine vector
- without any platform-specific code in it, so things like the RTC may
- not work.
-
- This option is for the early stages of porting to a new machine.
-
-# Choice: superhtype
-SH7707
-CONFIG_CPU_SUBTYPE_SH7707
- Select the type of SuperH processor you have. This information is
- used for optimizing and configuration purposes.
-
- Select SH7707 if you have a 60 Mhz SH-3 HD6417707 CPU.
-
- Select SH7708 if you have a 60 Mhz SH-3 HD6417708S or
- if you have a 100 Mhz SH-3 HD6417708R CPU.
-
- Select SH7709 if you have a 80 Mhz SH-3 HD6417709 CPU.
-
- Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU.
-
- Select SH7751 if you have a SH7751
-
- Select ST40STB1 if you have a ST40STB1
- Select ST40RA/ST40STB1 if you have a ST40RA
- (previously known as ST40STB1).
-
- Select ST40GX1 if you have an ST40GX1.
-
- Select SH7300 if you have a HD6417300 CPU.
-
-SH7708
-CONFIG_CPU_SUBTYPE_SH7708
- Select SH7708 if you have a 60 Mhz SH-3 HD6417708S or
- if you have a 100 Mhz SH-3 HD6417708R CPU.
-
-SH7709
-CONFIG_CPU_SUBTYPE_SH7709
- Select SH7709 if you have a 80 Mhz SH-3 HD6417709 CPU.
-
-SH7750
-CONFIG_CPU_SUBTYPE_SH7750
- Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU.
-
-SH7751
-CONFIG_CPU_SUBTYPE_SH7751
- Select SH7751 if you have a 166 Mhz SH-4 HD6417751 CPU.
-
-ST40RA/ST40STB1
-CONFIG_CPU_SUBTYPE_ST40STB1
- Select ST40RA/ST40STB1 if you have a ST40RA. This chip was
- previously called the ST40STB1. Early versions were also
- erronously labelled ST40AR166.
-
-ST40GX1
-CONFIG_CPU_SUBTYPE_ST40GX1
- Select ST40GX1 if you have a ST40GX1 CPU.
-
-SH7300
-CONFIG_CPU_SUBTYPE_SH7300
- Select SH7300 if you have a HD6417300 CPU.
-
-Memory on LMI
-CONFIG_ST40_LMI_MEMORY
- Currently all ST40 CPUs have two external buses the
- 'Local Memory Interface' (LMI) which supports SDRAM and
- DDR SDRAM, and the 'Enhanced flash Memory Interface' (EMI),
- which supports SDRAM, Flash, peripherials and MPX. Linux
- can support memory on either of these buses, it is simply
- necessary to specify its base address. This option is simply
- a shortcut method of specifying that RAM starts from the
- bottom of the LMI.
-
-Physical memory start address
-CONFIG_MEMORY_START
- Computers built with Hitachi SuperH processors always
- map the ROM starting at address zero. But the processor
- does not specify the range that RAM takes.
-
- The physical memory (RAM) start address will be automatically
- set to 08000000, unless you selected one of the following
- processor types: SolutionEngine, Overdrive, HP620, HP680, HP690,
- in which case the start address will be set to 0c000000.
-
- Tweak this only when porting to a new machine which is not already
- known by the config system. Changing it from the known correct
- value on any of the known systems will only lead to disaster.
-
-Hitachi HD64461 companion chip support
-CONFIG_HD64461
- The Hitachi HD64461 provides an interface for
- the SH7709 CPU, supporting a LCD controller,
- CRT color controller, IrDA up to 4 Mbps, and a
- PCMCIA controller supporting 2 slots.
-
- More information is available at
- <http://semiconductor.hitachi.com/windowsce/superh/sld013.htm>.
-
- Say Y if you want support for the HD64461.
- Otherwise, say N.
-
-HD64461 PCMCIA enabler
-CONFIG_HD64461_ENABLER
- Say Y here if you want to enable PCMCIA support
- via the HD64461 companion chip.
- Otherwise, say N.
-
-HD64461 virtualized IRQ number
-CONFIG_HD64461_IRQ
- The default setting of the HD64461 IRQ is 36.
-
- Do not change this unless you know what you are doing.
-
-Hitachi HD64465 companion chip support
-CONFIG_HD64465
- The Hitachi HD64465 provides an interface for
- the SH7750 CPU, supporting a LCD controller,
- CRT color controller, IrDA, USB, PCMCIA,
- keyboard controller, and a printer interface.
-
- More information is available at
- <http://global.hitachi.com/New/cnews/E/1998/981019B.html>.
-
- Say Y if you want support for the HD64465.
- Otherwise, say N.
-
-HD64465 virtualized IRQ number
-CONFIG_HD64465_IRQ
- The default setting of the HD64465 IRQ is 5.
-
- Do not change this unless you know what you are doing.
-
-HD64465 start address
-CONFIG_HD64465_IOBASE
- The default setting of the HD64465 IO base address is 0xb0000000.
-
- Do not change this unless you know what you are doing.
-
-Early printk support
-CONFIG_SH_EARLY_PRINTK
- Say Y here to redirect kernel printk messages to the serial port
- used by the SH-IPL bootloader, starting very early in the boot
- process and ending when the kernel's serial console is initialised.
- This option is only useful porting the kernel to a new machine,
- when the kernel may crash or hang before the serial console is
- initialised. If unsure, say N.
-
-SuperH SCI (serial) support
-CONFIG_SH_SCI
- Selecting this option will allow the Linux kernel to transfer data
- over SCI (Serial Communication Interface) and/or SCIF (Serial
- Communication Interface with FIFO) which are built into the Hitachi
- SuperH processor. The option provides 1 to 3 (depending
- on the CPU model) standard Linux tty devices, /dev/ttySC[012]; one
- of these is normally used as the system console.
-
- If in doubt, press "y".
-
-Use LinuxSH standard BIOS
-CONFIG_SH_STANDARD_BIOS
- Say Y here if your target has the gdb-sh-stub
- package from www.m17n.org (or any conforming standard LinuxSH BIOS)
- in FLASH or EPROM. The kernel will use standard BIOS calls during
- boot for various housekeeping tasks (including calls to read and
- write characters to a system console, get a MAC address from an
- on-board Ethernet interface, and shut down the hardware). Note this
- does not work with machines with an existing operating system in
- mask ROM and no flash (WindowsCE machines fall in this category).
- If unsure, say N.
-
-GDB Stub kernel debug
-CONFIG_DEBUG_KERNEL_WITH_GDB_STUB
- If you say Y here, it will be possible to remotely debug the SuperH
- kernel using gdb, if you have the gdb-sh-stub package from
- www.m17n.org (or any conforming standard LinuxSH BIOS) in FLASH or
- EPROM. This enlarges your kernel image disk size by several
- megabytes but allows you to load, run and debug the kernel image
- remotely using gdb. This is only useful for kernel hackers. If
- unsure, say N.
-
-Console output to GDB
-CONFIG_GDB_CONSOLE
- If you are using GDB for remote debugging over a serial port and
- would like kernel messages to be formatted into GDB $O packets so
- that GDB prints them as program output, say 'Y'.
-
-802.1Q VLAN Support
-CONFIG_VLAN_8021Q
- Select this and you will be able to create 802.1Q VLAN interfaces on your
- ethernet interfaces. 802.1Q VLAN supports almost everything a regular
- ethernet interface does, including firewalling, bridging, and of course
- IP traffic. You will need the 'vconfig' tool from the VLAN project in
- order to effectively use VLANs. See the VLAN web page for more
- information: <http://www.candelatech.com/~greear/vlan.html> If unsure,
- you can safely say 'N'.
-
-ARC console support
-CONFIG_ARC_CONSOLE
- Support for the PROM-based console on MIPS machines built according
- to the Advanced Risc Computing specification, which is now (2001)
- dead. These included boxes from Deskstation, Acer, Olivetti and
- NEC. There is a history at <http://www.openbsd.org/arc.html>.
-
-AUTCPU12
-CONFIG_ARCH_AUTCPU12
- Say Y if you intend to run the kernel on the autronix autcpu12
- board. This board is based on a Cirrus Logic CS89712.
-
-IT8172 IDE support
-CONFIG_BLK_DEV_IT8172
- Say Y here to support the on-board IDE controller on the Integrated
- Technology Express, Inc. ITE8172 SBC. Vendor page at
- <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- board at <http://www.mvista.com/partners/semiconductor/ite.html>.
-
-Support ARM926T processor
-CONFIG_CPU_ARM926T
- This is a variant of the ARM920. It has slightly different
- instruction sequences for cache and TLB operations. Curiously,
- there is no documentation on it at the ARM corporate website.
-
- Say Y if you want support for the ARM926T processor.
- Otherwise, say N.
-
-Support CPU clock change (EXPERIMENTAL)
-CONFIG_CPU_FREQ
- CPU clock scaling allows you to change the clock speed of the
- running CPU on the fly. This is a nice method to save battery power,
- because the lower the clock speed, the less power the CPU
- consumes. Note that this driver doesn't automatically change the CPU
- clock speed, you need some userland tools (which still have to be
- written) to implement the policy. If you don't understand what this
- is all about, it's safe to say 'N'.
-
-SiS
-CONFIG_DRM_SIS
- Choose this option if you have a SIS graphics card. AGP support is
- required for this driver to work.
-
-Etrax Ethernet slave support (over lp0/1)
-CONFIG_ETRAX_ETHERNET_LPSLAVE
- This option enables a slave ETRAX 100 or ETRAX 100LX, connected to a
- master ETRAX 100 or ETRAX 100LX through par0 and par1, to act as an
- Ethernet controller.
-
-Slave has its own LEDs
-CONFIG_ETRAX_ETHERNET_LPSLAVE_HAS_LEDS
- Enable if the slave has it's own LEDs.
-
-ATA/IDE support
-CONFIG_ETRAX_IDE
- Enable this to get support for ATA/IDE. You can't use parallel
- ports or SCSI ports at the same time.
-
-LED on when link
-CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK
-
- Selecting LED_on_when_link will light the LED when there is a
- connection and will flash off when there is activity.
-
- Selecting LED_on_when_activity will light the LED only when
- there is activity.
-
- This setting will also affect the behaviour of other activity LEDs
- e.g. Bluetooth.
-
-Power button bit on port G
-CONFIG_ETRAX_POWERBUTTON_BIT
- Configure where power button is connected.
-
-Root device name
-CONFIG_ETRAX_ROOT_DEVICE
- 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.
-
-Serial port 0 enabled
-CONFIG_ETRAX_SERIAL_PORT0
- Enables the ETRAX 100 serial driver for ser0 (ttyS0)
- Normally you want this on, unless you use external DMA 1 that uses
- the same DMA channels.
-
-Shutdown bit on port CSP0
-CONFIG_ETRAX_SHUTDOWN_BIT
- Configure what pin on CSPO-port that is used for controlling power
- supply.
-
-Software Shutdown Support
-CONFIG_ETRAX_SOFT_SHUTDOWN
- Enable this if Etrax is used with a power-supply that can be turned
- off and on with PS_ON signal. Gives the possibility to detect
- powerbutton and then do a power off after unmounting disks.
-
-Disable watchdog during Oops printouts
-CONFIG_ETRAX_WATCHDOG_NICE_DOGGY
- By enabling this you make sure that the watchdog does not bite while
- printing oopses. Recommended for development systems but not for
- production releases.
-
-Compaq iPAQ Handheld sleeve support
-CONFIG_H3600_SLEEVE
- Choose this option to enable support for extension packs (sleeves)
- for the Compaq iPAQ H3XXX series of handheld computers. This option
- is required for the CF, PCMCIA, Bluetooth and GSM/GPRS extension
- packs.
-
-AVM Fritz!Card PCI/PCIv2/PnP support (EXPERIMENTAL)
-CONFIG_HISAX_FRITZ_PCIPNP
- This enables the driver for the AVM Fritz!Card PCI, Fritz!Card PCI v2
- and Fritz!Card PnP.
- (the latter also needs you to select "ISA Plug and Play support"
- from the menu "Plug and Play configuration")
-
-IBM PCI Hotplug driver
-CONFIG_HOTPLUG_PCI_IBM
- Say Y here if you have a motherboard with a IBM PCI Hotplug
- controller.
-
- This code is also available as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want).
- The module will be called cpqphp.o. If you want to compile it
- as a module, say M here and read Documentation/modules.txt.
-
- When in doubt, say N.
-
-Enable autotest (llsc). Option to run cache test instead of booting
-CONFIG_IA64_SGI_AUTOTEST
- Build a kernel used for hardware validation. If you include the
- keyword "autotest" on the boot command line, the kernel does NOT boot.
- Instead, it starts all cpus and runs cache coherency tests instead.
-
- If unsure, say N.
-
-IEC61883-6 (Audio transmission) support
-CONFIG_IEEE1394_AMDTP
- This option enables the Audio & Music Data Transmission Protocol
- (IEC61883-6) driver, which implements audio transmission over
- IEEE1394.
-
- The userspace interface is documented in amdtp.h.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module
- will be called amdtp.o.
-
-IEC61883-1 Plug support
-CONFIG_IEEE1394_CMP
- This option enables the Connection Management Procedures
- (IEC61883-1) driver, which implements input and output plugs.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module
- will be called cmp.o.
-
-OHCI-DV I/O support
-CONFIG_IEEE1394_DV1394
- This driver allows you to transmit and receive DV (digital video)
- streams on an OHCI-1394 card using a simple frame-oriented
- interface.
-
- The user-space API for dv1394 is documented in dv1394.h.
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here and read Documentation/modules.txt. The module
- will be called dv1394.o.
-
-Ethernet over 1394
-CONFIG_IEEE1394_ETH1394
- Extremely Experimental! This driver is a Linux specific way to use your
- IEEE1394 Host as an Ethernet type device. This is _NOT_ IP1394.
-
-Support for older IT8172 (Rev C)
-CONFIG_IT8172_REVC
- Say Y here to support the older, Revision C version of the Integrated
- Technology Express, Inc. ITE8172 SBC. Vendor page at
- <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- board at <http://www.mvista.com/partners/semiconductor/ite.html>.
-
-Enable Smart Card Reader 0 Support
-CONFIG_IT8172_SCR0
- Say Y here to support smart-card reader 0 (SCR0) on the Integrated
- Technology Express, Inc. ITE8172 SBC. Vendor page at
- <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- board at <http://www.mvista.com/partners/semiconductor/ite.html>.
-
-Enable Smart Card Reader 1 Support
-CONFIG_IT8172_SCR1
- Say Y here to support smart-card reader 1 (SCR1) on the Integrated
- Technology Express, Inc. ITE8172 SBC. Vendor page at
- <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- board at <http://www.mvista.com/partners/semiconductor/ite.html>.
-
-IT8172 IDE Tuning support
-CONFIG_IT8172_TUNING
- Say Y here to support tuning the ITE8172's IDE interface. This makes
- it possible to set DMA channel or PIO opration and the transfer rate.
-
-Enable protocol mode for the L1 console
-CONFIG_SERIAL_SGI_L1_PROTOCOL
- Uses protocol mode instead of raw mode for the level 1 console on the
- SGI SN (Scalable NUMA) platform for IA64. If you are compiling for
- an SGI SN box then Y is the recommended value, otherwise say N.
-
-New bus configuration (EXPERIMENTAL)
-CONFIG_TULIP_MWI
- This configures your Tulip card specifically for the card and
- system cache line size type you are using.
-
- This is experimental code, not yet tested on many boards.
-
- If unsure, say N.
-
-Hotplug firmware loading support (EXPERIMENTAL)
-CONFIG_FW_LOADER
- This option is provided for the case where no in-kernel-tree modules require
- hotplug firmware loading support, but a module built outside the kernel tree
- does.
-
-NatSemi SCx200 support
-CONFIG_SCx200
- This provides basic support for the National Semiconductor SCx200
- processor. Right now this is just a driver for the GPIO pins.
-
- If you don't know what to do here, say N.
-
- This support is also available as a module. If compiled as a
- module, it will be called scx200.o.
-
-NatSemi SCx200 GPIO support
-CONFIG_SCx200_GPIO
- Give userspace access to the GPIO pins on the National
- Semiconductor SCx200 processors.
-
- This support is also available as a module. If compiled as a
- module, it will be called scx200_gpio.o.
-
-NatSemi SCx200 Watchdog
-CONFIG_SCx200_WDT
- Enable the built-in watchdog timer support on the National
- Semiconductor SCx200 processors.
-
- If compiled as a module, it will be called scx200_watchdog.o.
-
-Flash device mapped with DOCCS on NatSemi SCx200
-CONFIG_MTD_SCx200_DOCFLASH
- Enable support for a flash chip mapped using the DOCCS signal on a
- National Semiconductor SCx200 processor.
-
- If you don't know what to do here, say N.
-
- If compiled as a module, it will be called scx200_docflash.o.
-
-BIOS flash chip on AMD76x southbridge
-CONFIG_MTD_AMD76XROM
- Support for treating the BIOS flash chip on AMD76x motherboards
- as an MTD device - with this you can reprogram your BIOS.
-
- BE VERY CAREFUL.
-
- If compiled as a module, it will be called amd76xrom.o.
-
-BIOS flash chip on Intel Hub Controller 2
-CONFIG_MTD_ICH2ROM
- Support for treating the BIOS flash chip on ICH2 motherboards
- as an MTD device - with this you can reprogram your BIOS.
-
- BE VERY CAREFUL.
-
- If compiled as a module, it will be called ich2rom.o.
-
-BIOS flash chip on Intel SCB2 boards
-CONFIG_MTD_SCB2_FLASH
- Support for treating the BIOS flash chip on Intel SCB2 boards
- as an MTD device - with this you can reprogram your BIOS.
-
- BE VERY CAREFUL.
-
- If compiled as a module, it will be called scb2_flash.o.
-
-Flash chips on Tsunami TIG bus
-CONFIG_MTD_TSUNAMI
- Support for the flash chip on Tsunami TIG bus.
-
- If compiled as a module, it will be called tsunami_flash.o.
-
-Flash chips on LASAT board
-CONFIG_MTD_LASAT
- Support for the flash chips on the Lasat 100 and 200 boards.
-
- If compiled as a module, it will be called lasat.o.
-
-CFI flash device on SnapGear/SecureEdge
-CONFIG_MTD_NETtel
- Support for flash chips on NETtel/SecureEdge/SnapGear boards.
-
- If compiled as a module, it will be called nettel.o.
-
-CFI Flash device mapped on DIL/Net PC
-CONFIG_MTD_DILNETPC
- MTD map driver for SSV DIL/Net PC Boards "DNP" and "ADNP".
- For details, see <http://www.ssv-embedded.de/ssv/pc104/p169.htm>
- and <http://www.ssv-embedded.de/ssv/pc104/p170.htm>
-
- If compiled as a module, it will be called dilnetpc.o.
-
-Size of DIL/Net PC flash boot partition
-CONFIG_MTD_DILNETPC_BOOTSIZE
- The amount of space taken up by the kernel or Etherboot
- on the DIL/Net PC flash chips.
-
-CFI Flash device mapped on Epxa10db
-CONFIG_MTD_EPXA10DB
- This enables support for the flash devices on the Altera
- Excalibur XA10 Development Board. If you are building a kernel
- for on of these boards then you should say 'Y' otherwise say 'N'.
-
- If compiled as a module, it will be called epxa10db-flash.o.
-
-CFI Flash device mapped on the FortuNet board
-CONFIG_MTD_FORTUNET
- This enables access to the Flash on the FortuNet board. If you
- have such a board, say 'Y'.
-
- If compiled as a module, it will be called fortunet.o.
-
-NV-RAM mapping AUTCPU12 board
-CONFIG_MTD_AUTCPU12
- This enables access to the NV-RAM on autronix autcpu12 board.
- If you have such a board, say 'Y'.
-
- If compiled as a module, it will be called autcpu12-nvram.o.
-
-CFI Flash device mapped on EDB7312
-CONFIG_MTD_EDB7312
- This enables access to the CFI Flash on the Cogent EDB7312 board.
- If you have such a board, say 'Y' here.
-
- If compiled as a module, it will be called edb7312.o.
-
-JEDEC Flash device mapped on impA7
-CONFIG_MTD_IMPA7
- This enables access to the NOR Flash on the impA7 board of
- implementa GmbH. If you have such a board, say 'Y' here.
-
- If compiled as a module, it will be called impa7.o.
-
-JEDEC Flash device mapped on Ceiva/Polaroid PhotoMax Digital Picture Frame
-CONFIG_MTD_CEIVA
- This enables access to the flash chips on the Ceiva/Polaroid
- PhotoMax Digital Picture Frame.
- If you have such a device, say 'Y'.
-
- If compiled as a module, it will be called ceiva.o.
-
-System flash on MBX860 board
-CONFIG_MTD_MBX860
- This enables access routines for the flash chips on the Motorola
- MBX860 board. If you have one of these boards and would like
- to use the flash chips on it, say 'Y'.
-
- If compiled as a module, it will be called mbx860.o.
-
-PCI MTD driver
-CONFIG_MTD_PCI
- Mapping for accessing flash devices on add-in cards like the Intel XScale
- IQ80310 card, and the Intel EBSA285 card in blank ROM programming mode
- (please see the manual for the link settings).
-
- If compiled as a module, it will be called pci.o.
-
- If you are not sure, say N.
-
-PCMCIA MTD driver
-CONFIG_MTD_PCMCIA
- Map driver for accessing PCMCIA linear flash memory cards. These
- cards are usually around 4-16MiB in size. This does not include
- Compact Flash cards which are treated as IDE devices.
-
- If compiled as a module, it will be called pcmciamtd.o.
-
-Generic uClinux RAM/ROM filesystem support
-CONFIG_MTD_UCLINUX
- Map driver to support image based filesystems for uClinux.
-
- If compiled as a module, it will be called uclinux.o.
-
-NatSemi SCx200 I2C using GPIO pins
-CONFIG_SCx200_I2C
- Enable the use of two GPIO pins of a SCx200 processor as an I2C bus.
-
- If you don't know what to do here, say N.
-
- If compiled as a module, it will be called scx200_i2c.o.
-
-GPIO pin used for SCL
-CONFIG_SCx200_I2C_SCL
- Enter the GPIO pin number used for the SCL signal. This value can
- also be specified with a module parameter.
-
-GPIO pin used for SDA
-CONFIG_SCx200_I2C_SDA
- Enter the GPIO pin number used for the SSA signal. This value can
- also be specified with a module parameter.
-
-NatSemi SCx200 ACCESS.bus
-CONFIG_SCx200_ACB
- Enable the use of the ACCESS.bus controllers of a SCx200 processor.
-
- If you don't know what to do here, say N.
-
- If compiled as a module, it will be called scx200_acb.o.
-
-IPMI top-level message handler
-CONFIG_IPMI_HANDLER
- This enables the central IPMI message handler, required for IPMI
- to work. Note that you must have this enabled to do any other IPMI
- things.
-
- IPMI is a standard for managing sensors (temperature,
- voltage, etc.) in a system.
-
- See Documentation/IPMI.txt for more details on the driver.
-
- If unsure, say N.
-
-Generate a panic event to all BMCs on a panic
-CONFIG_IPMI_PANIC_EVENT
- When a panic occurs, this will cause the IPMI message handler to
- generate an IPMI event describing the panic to each interface
- registered with the message handler.
-
-Device interface for IPMI
-CONFIG_IPMI_DEVICE_INTERFACE
- This provides an IOCTL interface to the IPMI message handler so
- userland processes may use IPMI. It supports poll() and select().
-
-IPMI KCS handler
-CONFIG_IPMI_KCS
- Provides a driver for a KCS-style interface to a BMC.
-
-IPMI Watchdog Timer
-CONFIG_IPMI_WATCHDOG
- This enables the IPMI watchdog timer.
-
-CRC32 functions
-CONFIG_CRC32
- This option is provided for the case where no in-kernel-tree
- modules require CRC32 functions, but a module built outside the
- kernel tree does. Such modules that use library CRC32 functions
- require that you say M or Y here.
-
-Chassis LCD and LED support
-CONFIG_CHASSIS_LCD_LED
- Say Y here if you want to enable support for the Heartbeat,
- Disk/Network activities LEDs on some PA-RISC machines,
- or support for the LCD that can be found on recent material.
-
- This has nothing to do with LED State support for A, J and E class.
-
- If unsure, say Y.
-
-VSC/GSC/HSC bus support
-CONFIG_GSC
- The VSC, GSC and HSC busses were used from the earliest 700-series
- workstations up to and including the C360/J2240 workstations. They
- were also used in servers from the E-class to the K-class. They
- are not found in B1000, C3000, J5000, A500, L1000, N4000 and upwards.
- If in doubt, say "Y".
-
-Wax I/O support
-CONFIG_GSC_WAX
- Say Y here to support the Wax multifunction chip found in some
- older systems, including B/C/D/R class and 715/64, 715/80 and
- 715/100. Wax includes an EISA adapter, a serial port (not always
- used), a HIL interface chip and is also known to be used as the
- GSC bridge for an X.25 GSC card.
-
-GSCtoPCI/Dino PCI support
-CONFIG_GSC_DINO
- Say Y here to support the Dino & Cujo GSC to PCI bridges found in
- machines from the B132 to the C360, the J2240 and the A180. Some
- GSC/HSC cards (eg gigabit & dual 100 Mbit Ethernet) have a Dino on
- the card, and you also need to say Y here if you have such a card.
- Note that Dino also supplies one of the serial ports on certain
- machines. If in doubt, say Y.
-
-HPET timers
-CONFIG_HPET_TIMER
- Use the IA-PC HPET (High Precision Event Timer) to manage
- time in preference to the PIT and RTC, if a HPET is
- present. The HPET provides a stable time base on SMP
- systems, unlike the RTC, but it is more expensive to access,
- as it is off-chip. You can find the HPET spec at
- <http://www.intel.com/labs/platcomp/hpet/hpetspec.htm>.
-
- If unsure, say Y.
-
-IOMMU support
-CONFIG_GART_IOMMU
- Support the K8 IOMMU. Needed to run systems with more than 4GB of memory
- properly with 32-bit PCI devices that do not support DAC (Double Address
- Cycle). The IOMMU can be turned off at runtime with the iommu=off parameter.
- Normally the kernel will take the right choice by itself.
- If unsure say Y
-
-Debug __init statements
-CONFIG_INIT_DEBUG
- Fill __init and __initdata at the end of boot. This helps debugging
- invalid uses of __init and __initdata after initialization.
-
-Force IOMMU to on
-CONFIG_IOMMU_DEBUG
- Force the IOMMU to on even when you have less than 4GB of memory and add
- debugging code.
- Can be disabled at boot time with iommu=noforce.
-
-IOMMU leak tracing
-CONFIG_IOMMU_LEAK
- Add a simple leak tracer to the IOMMU code. This is useful when you
- are debugging a buggy device driver that leaks IOMMU mappings.
-
-pSeries Hypervisor Virtual Console support
-CONFIG_HVC_CONSOLE
- pSeries machines when partitioned support a hypervisor virtual
- console. This driver allows each pSeries partition to have a console
- which is accessed via the HMC.
-
-CONFIG_CRYPTO
- This option provides the core Cryptographic API.
-
-CONFIG_CRYPTO_HMAC
- HMAC: Keyed-Hashing for Message Authentication (RFC2104).
- This is required for IPSec.
-
-CONFIG_CRYPTO_NULL
- These are 'Null' algorithms, used by IPsec, which do nothing.
-
-CONFIG_CRYPTO_MD4
- MD4 message digest algorithm (RFC1320).
-
-CONFIG_CRYPTO_MD5
- MD5 message digest algorithm (RFC1321).
-
-CONFIG_CRYPTO_SHA1
- SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2).
-
-CONFIG_CRYPTO_SHA256
- SHA256 secure hash standard (DFIPS 180-2).
-
- This version of SHA implements a 256 bit hash with 128 bits of
- security against collision attacks.
-
-CONFIG_CRYPTO_SHA512
- SHA512 secure hash standard (DFIPS 180-2).
-
- This version of SHA implements a 512 bit hash with 256 bits of
- security against collision attacks.
-
- This code also includes SHA-384, a 384 bit hash with 192 bits
- of security against collision attacks.
-
-CONFIG_CRYPTO_DES
- DES cipher algorithm (FIPS 46-2), and Triple DES EDE (FIPS 46-3).
-
-CONFIG_CRYPTO_BLOWFISH
- Blowfish cipher algorithm, by Bruce Schneier.
-
- This is a variable key length cipher which can use keys from 32
- bits to 448 bits in length. It's fast, simple and specifically
- designed for use on "large microprocessors".
-
- See also <http://www.counterpane.com/blowfish.html>.
-
-CONFIG_CRYPTO_TWOFISH
- Twofish cipher algorithm.
-
- Twofish was submitted as an AES (Advanced Encryption Standard)
- candidate cipher by researchers at CounterPane Systems. It is a
- 16 round block cipher supporting key sizes of 128, 192, and 256
- bits.
-
- See also:
- http://www.counterpane.com/twofish.html
-
-CONFIG_CRYPTO_SERPENT
- Serpent cipher algorithm, by Anderson, Biham & Knudsen.
-
- Keys are allowed to be from 0 to 256 bits in length, in steps
- of 8 bits.
-
- See also:
- http://www.cl.cam.ac.uk/~rja14/serpent.html
-
-CONFIG_CRYPTO_AES
- AES cipher algorithms (FIPS-197). AES uses the Rijndael
- algorithm.
-
- Rijndael appears to be consistently a very good performer in
- both hardware and software across a wide range of computing
- environments regardless of its use in feedback or non-feedback
- modes. Its key setup time is excellent, and its key agility is
- good. Rijndael's very low memory requirements make it very well
- suited for restricted-space environments, in which it also
- demonstrates excellent performance. Rijndael's operations are
- among the easiest to defend against power and timing attacks.
-
- The AES specifies three key sizes: 128, 192 and 256 bits
-
- See http://csrc.nist.gov/encryption/aes/ for more information.
-
-CONFIG_CRYPTO_CAST5
- CAST5 (CAST-128) cipher algorithm.
-
- The CAST5 encryption algorithm (synonymous with CAST-128) is
- described in RFC2144.
-
-CONFIG_CRYPTO_CAST6
- CAST6 (CAST-256) cipher algorithm.
-
- The CAST6 encryption algorithm (synonymous with CAST-256) is
- described in RFC2612.
-
-CONFIG_CRYPTO_DEFLATE
- This is the Deflate algorithm (RFC1951), specified for use in
- IPSec with the IPCOMP protocol (RFC3173, RFC2394).
-
- You will most probably want this if using IPSec.
-
-CONFIG_CRYPTO_TEST
- Quick & dirty crypto test module.
-
-CONFIG_SOUND_WM97XX
- Say Y here to support the Wolfson WM9705 and WM9712 touchscreen
- controllers. These controllers are mainly found in PDA's
- i.e. Dell Axim and Toshiba e740
-
- This is experimental code.
- Please see Documentation/wolfson-touchscreen.txt for
- a complete list of parameters.
-
- In order to use this driver, a char device called wm97xx with a major
- number of 10 and minor number 16 will have to be created under
- /dev/touchscreen.
-
- e.g.
- mknod /dev/touchscreen/wm97xx c 10 16
-
- If you want to compile this as a module ( = code which can be
- inserted in and removed from the running kernel whenever you want),
- say M here. The module will be called ac97_plugin_wm97xx.o.
-
- If unsure, say N.
-
-#
-# A couple of things I keep forgetting:
-# capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet,
-# Intel, IRQ, ISDN, Linux, MSDOS, NetWare, NetWinder,
-# NFS, PCI, SCSI, SPARC
-# two words: file system, hard drive, hard disk, home page,
-# user space, web site
-# other: it's safe to save; daemon; use --, not - or ---;
-# use KB for 1024 bytes, not kB or K.
-#
-#
-# This is used by Emacs' spell checker ispell.el:
-#
-# LocalWords: CONFIG coprocessor DX Pentium SX lilo loadlin HOWTO ftp ibiblio
-# LocalWords: unc edu docs emu README kB BLK DEV FD Thinkpad fd MFM RLL IDE gz
-# LocalWords: cdrom diskless netboot nfs xzvf ATAPI MB ide pavia rubini pl pd
-# LocalWords: HD CD-ROMs IDECD NEC MITSUMI filesystem XT XD PCI BIOS cezar ATEN
-# LocalWords: ISA EISA Microchannel VESA BIOSes IPC SYSVIPC ipc Ctrl dmesg hlt
-# LocalWords: BINFMT Linkable http ac uk jo html GCC SPARC AVANTI CABRIOLET EB
-# LocalWords: netscape gcc LD CC toplevel MODVERSIONS insmod rmmod modprobe IP
-# LocalWords: genksyms INET loopback gatewaying Ethernet PPP ARP Arp MEMSIZE
-# LocalWords: howto multicasting MULTICAST MBONE firewalling ipfw ACCT resp ip
-# LocalWords: proc acct IPIP encapsulator decapsulator klogd RARP EXT PS
-# LocalWords: telnetting subnetted NAGLE rlogin NOSR ttyS TGA techinfo mbone nl
-# LocalWords: Mb SKB IPX Novell dosemu DDP ATALK vmalloc visar ehome
-# LocalWords: SD CHR scsi thingy SG CD LUNs LUN jukebox Adaptec BusLogic EATA
-# LocalWords: buslogic DMA DPT ATT eata dma PIO UltraStor fdomain umsdos ext
-# LocalWords: QLOGIC qlogic TMC seagate Trantor ultrastor FASST wd NETDEVICES
-# LocalWords: unix BBS linux CSLIP PLIP Kirch's LDP CSlip SL SCC IRQ csustan
-# LocalWords: Turbo Laplink plip NCSA port's ReQuest IRQs EQL SMC AMD PCnet NE
-# LocalWords: COM ELPLUS Com EtherLinkIII VLB Arcnet Cabletron DEPCA DE carlos
-# LocalWords: depca EtherWorks EWRK ewrk SEEQ EtherExpress EEXPRESS NI xxx dia
-# LocalWords: EtherExpress WaveLAN wavelan PCLAN HPLAN VG SK Ansel Xen de ZNET
-# LocalWords: PCMCIA cb stanford LAN TEC RealTek ATP atp DLINK NetTools VISWS
-# LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA
-# LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech
-# LocalWords: Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs
-# LocalWords: LMS OPTCD Sanyo SJCD minix faqs xiafs XIA msdos mtools Cichocki
-# LocalWords: std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI
-# LocalWords: hpfs SYSV SCO iBCS Wyse WordPerfect tsx mit unixes sysv NR irisa
-# LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST
-# LocalWords: PSMOUSE Compaq trackballs Travelmate Inport ATIXL ATI busmice ld
-# LocalWords: gpm config QIC DYNCONF FTAPE Stor Ftape ftape pcsndrv manpage NT
-# LocalWords: readprofile diskdrives org com masq EtherTalk tcp netrom sunacm
-# LocalWords: misc AIC aic pio scc Portmaster eql GIS PhotoCDs MCDX Perell PG
-# LocalWords: mcdx gscd optcd sjcd ISP hdparm Workgroups Lan samba PARIDE PCD
-# LocalWords: filesystems smbfs ATA ppp PCTech RZ www powerquest txt CMD ESDI
-# LocalWords: chipset FB multicast MROUTE appletalk ifconfig IBMTR multiport
-# LocalWords: Multisession STALDRV EasyIO EC EasyConnection ISTALLION ONboard
-# LocalWords: Brumby pci TNC cis ohio faq usenet NETLINK dev hydra ca Tyne mem
-# LocalWords: carleton DECstation SUNFD JENSEN Noname XXXM SLiRP LILO's amifb
-# LocalWords: pppd Zilog ZS SRM bootloader ez mainmenu rarp ipfwadm paride pcd
-# LocalWords: RTNETLINK mknod xos MTU lwared Macs netatalk macs cs Wolff
-# LocalWords: dartmouth flowerpt MultiMaster FlashPoint tudelft etherexpress
-# LocalWords: ICL EtherTeam ETH IDESCSI TXC SmartRAID SmartCache httpd sjc dlp
-# LocalWords: thesphere TwoServers BOOTP DHCP ncpfs BPQETHER BPQ MG HIPPI cern
-# LocalWords: bsd comp SPARCstation le SunOS ie Gracilis PackeTwin PT pt LU FX
-# LocalWords: FX TEAC CR LCS mS ramdisk IDETAPE cmd fperllo encis tcfs unisa
-# LocalWords: Vertos Genoa Funai hsfs NCP NetWare tgz APM apm ioctls UltraLite
-# LocalWords: TravelMate CDT LCD backlight VC RPC Mips AXP barlow cdrtools pg
-# LocalWords: PMAX MILO Alphas Multia Tseng linuxelf endian mipsel mips drv HT
-# LocalWords: kerneld callouts AdvanSys advansys Admin WDT DataStor EP verden
-# LocalWords: wdt hdb hdc bugfix SiS vlb Acculogic CSA DTC dtc Holtek ht QDI
-# LocalWords: QD qd UMC umc ALI ali lena fnet fr azstarnet cdr fb MDA ps esdi
-# LocalWords: Avanti XL AlphaStations Jensen DECpc AXPpci UDB Cabriolet MCA RC
-# LocalWords: AlphaPC mca AOUT OUTput PPro sipx gwdg lo nwe FourPort Boca unm
-# LocalWords: Keepalive linefill RELCOM keepalive analogue CDR conf CDI INIT
-# LocalWords: OPTi isp irq noisp VFAT vfat NTFS losetup dmsdosfs dosfs ISDN MP
-# LocalWords: NOWAYOUT behaviour dialin isdn callback BTX Teles XXXX LVM lvm
-# LocalWords: ICN EDSS Cisco
-# LocalWords: ipppd syncppp RFC MPP VJ downloaded icn NICCY Creatix shmem ufr
-# LocalWords: ibp md ARCnet ether encap NDIS arcether ODI Amigas AmiTCP NetBSD
-# LocalWords: initrd tue util DES funet des OnNet BIOSP smc Travan Iomega CMS
-# LocalWords: FC DC dc PPA IOMEGA's ppa RNFS FMV Fujitsu ARPD arpd loran layes
-# LocalWords: FRAD indiana framerelay DLCI DCLIs Sangoma SDLA mrouted sync sec
-# LocalWords: Starmode Metricom MosquitoNet mosquitonet kbit nfsroot Digiboard
-# LocalWords: DIGI Xe Xeve digiboard UMISC touchscreens mtu Ethernets HBAs MEX
-# LocalWords: Shifflett netcom js jshiffle WIC DECchip ELCP EtherPower dst RTC
-# LocalWords: rtc SMP lp Digi Intl RightSwitch DGRS dgrs AFFS Amiga UFS SDL AP
-# LocalWords: Solaris RISCom riscom syncPPP PCBIT pcbit sparc anu au artoo MFB
-# LocalWords: hitchcock Crynwr cnam pktdrvr NCSA's CyDROM CyCD-ROM FreeBSD NeXT
-# LocalWords: NeXTstep disklabel disklabels SMD FFS tm AmigaOS diskfiles Un IQ
-# LocalWords: Bernd informatik rwth aachen uae affs multihosting bytecode java
-# LocalWords: applets applet JDK ncsa cabi SNI Alphatronix readme LANs scarab
-# LocalWords: winsock RNIS caltech OSPF honour Honouring Mbit LocalTalk DEFRAG
-# LocalWords: localtalk download Packetwin Baycom baycom interwork ASCII JNT
-# LocalWords: Camtec proxying indyramp defragment defragmented UDP FAS FASXX
-# LocalWords: FastSCSI SIO FDC qlogicfas QLogic qlogicisp setbaycom ife ee LJ
-# LocalWords: ethz ch Travelmates ProAudioSpectrum ProAudio SoundMan SB SBPro
-# LocalWords: Thunderboard SM OPL FM ADLIB TSR Gravis MPU PSS ADI SW DSP codec
-# LocalWords: ADSP ESC ASIC daughtercard GUSMAX MSS NX AdLib Excell Ensoniq YM
-# LocalWords: SoundScape Spea MediaTriX AudioTriX WSS OTI ThunderBoard VoxWare
-# LocalWords: Soundscape SSCAPE TRIX MediaTrix PnP Maui dsp midixx EIA getty
-# LocalWords: mgetty sendfax gert greenie muc lowlevel Lasermate LanManager io
-# LocalWords: OOPSes trackball binghamton mobileip ncr IOMAPPED settags ns ser
-# LocalWords: setsync NEGO MPARITY autotuning prefetch PIIX cdwrite utils rc
-# LocalWords: PCWATCHDOG berkprod bitgate boldt ucsb jf kyoto jp euc Tetsuyasu
-# LocalWords: YAMADA tetsu cauchy nslab ntt nevod perm su doc kaf kheops wsc
-# LocalWords: traduc Bourgin dbourgin menuconfig kfill READMEs HOWTOs Virge WA
-# LocalWords: IDEDISK IDEFLOPPY EIDE firewalls QMAGIC ZMAGIC LocalWords opti
-# LocalWords: SVGATextMode vga svga Xkernel syr jmwobus comfaqs dhcp flakey GD
-# LocalWords: IPv IPng interoperability ipng ipv radio's tapr pkthome PLP nano
-# LocalWords: Ses Mhz sethdlc SOUNDMODEM WindowsSoundSystem smdiag pcf inka ES
-# LocalWords: smmixer ptt circ soundmodem MKISS FDDI DEFEA DEFPA DEFXX redhat
-# LocalWords: HyperNews khg mconv sed lina wuftpd MicroChannel netlink irc cum
-# LocalWords: raudio RealAudio PPROP NETBIOS GUI IBMMCA ELMC Racal Interlan fi
-# LocalWords: eth shapecfg src esp PCWD PREVSTAT bootparam sig bitwizard SBC
-# LocalWords: downloads AFSK TCM FP Karn KA FSK RUH LinkSys cron mouseman LLC
-# LocalWords: SyQuest SyQuest's CCITT MicroSolutions BPCD bpcd ESPSERIAL PROM
-# LocalWords: SUNESP openprom OPENPROMIO quango themall al TT MC MMU LC RMW AA
-# LocalWords: INSNS Ataris AutoConfig ZORRO OCS AMIFB Agnus Denise ECS CDTV GB
-# LocalWords: AGA Cybervision CYBER GSP TMS DMI Zorro ACSI ROMs SLM BioNet GVP
-# LocalWords: PAMsNet TekMagic Cyberstorm MkI CYBERSTORMII MkII BLZ onboard cx
-# LocalWords: Village Tronic ATARILANCE RieblCard PAMCard VME MFP sangoma LAPB
-# LocalWords: Rhotron BioData's Multiface AMIGAMOUSE COPCON Amiga's bitplanes
-# LocalWords: ATARIMOUSE MFPSER SCC's MegaSTE ESCC Atari's GVPIOEXT DMASOUND
-# LocalWords: fdutils cisco univercd rpcg htm iface lapb LAPBETHER tpqic qic
-# LocalWords: SYNTH xd en binfmt aout ipip terra ipx sd sr sg wic framebuffer
-# LocalWords: ibmmca lapbether mkiss dlci sdla fmv eepro eexpress ni hp ne es
-# LocalWords: ibmtr isofs ROMFS romfs pcxx cyclades istallion psaux msbusmouse
-# LocalWords: atixlmouse sbin softdog pcwd USS Lite ACI miroSOUND PCM miroPCM
-# LocalWords: microcontroller miro Voxware downloading teles acsi slm gvp ltpc
-# LocalWords: atari ariadne amigamouse atarimouse builtin IPDDP maths bradford
-# LocalWords: AppleTalk Farallon PhoneNet Zubkoff lnz SCCB HAPN WANs vesafb nt
-# LocalWords: wanrouter WANPIPE multiprotocol Mbps wanpipe EtherWORKS nodma SC
-# LocalWords: smp HiSax SiemensChipSet Siemens AVM Elsa ITK hisax PCC MICROR
-# LocalWords: Mircolink EURO DSS Spellcaster BRI sc spellcast Digiboards GPIO
-# LocalWords: SYMBIOS COMPAT SDMS rev ASUS Tekram HX VX API ibmmcascsi ASY asy
-# LocalWords: loader's PCnetPCI automounter AUTOFS amd autofs VT Gallant's Pnp
-# LocalWords: AEDSP aedsp enskip tik Sysctl sysctl PARPORT parport pnp IDs EPP
-# LocalWords: Autoprobe bart patrickr HDLS READBACK AB usr DAMA DS SparQ aten
-# LocalWords: Symbios PCscsi tmscsim RoamAbout GHz Hinds contrib mathematik ok
-# LocalWords: darmstadt okir DIGIEPCA International's Xem digiepca epca bootup
-# LocalWords: zorro CAPI AVMB capi avmb VP SYN syncookies EM em pc Ethertalk
-# LocalWords: Dayna DL Daynatalk LT PhoneNET ATB Daystar queueing CMDS SCBs ls
-# LocalWords: SCB STATS Thinnet ThunderLAN TLAN Netelligent NetFlex tlan james
-# LocalWords: caldera Preload Preloading slowdowns schoebel uni NBD nbd prog
-# LocalWords: stuttgart rdist TRANS hostnames mango jukeboxes ESS userland PD
-# LocalWords: hardlinked NAMETRANS env mtab fstab umount nologin runlevel gid
-# LocalWords: adm Nodename hostname uname Kernelname bootp nmi DI OV StegFS
-# LocalWords: KERNNAME kname ktype kernelname Kerneltype KERNTYPE Alt RX mdafb
-# LocalWords: dataless kerneltype SYSNAME Comtrol Rocketport palmtop fbset EGS
-# LocalWords: nvram SYSRQ SysRq PrintScreen sysrq NVRAMs NvRAM Shortwave RTTY
-# LocalWords: Sitor Amtor Pactor GTOR hayes TX TMOUT JFdocs BIGMEM DAC IRQ's
-# LocalWords: IDEPCI IDEDMA PDC pdc TRM trm raidtools luthien nuclecu BAGET VR
-# LocalWords: unam mx miguel koobera uic EMUL solaris pp ieee lpsg co DMAs TOS
-# LocalWords: BLDCONFIG preloading jumperless BOOTINIT modutils multipath GRE
-# LocalWords: misconfigured autoconfiguration IPGRE ICMP tracert ipautofw PIM
-# LocalWords: netis rlynch autofw ipportfw monmouth ipsubs portforwarding pimd
-# LocalWords: portfw PIMSM netweb usc pim pf EUI aggregatable PB decapsulate
-# LocalWords: ipddp Decapsulation DECAP bool HAMRADIO tcpdump af CDs tx FBCON
-# LocalWords: ethertap multisession PPC MMIO GDT GDTH ICP gdth hamradio bpp
-# LocalWords: lmh weejock AIMSlab RadioTrack RTRACK HZP OptoSCC TRX rx TRXECHO
-# LocalWords: DMASCC paccomm dmascc addr cfg oevsv oe kib picpar FDX baudrate
-# LocalWords: baudrates fdx HDX hdx PSK kanren frforum QoS SCHED CBQ SCH sched
-# LocalWords: sch cbq CSZ Shenker Zhang csz SFQ sfq TBF tbf PFIFO fifo PRIO RW
-# LocalWords: prio Micom xIO dwmw rimi OMIRR omirr omirrd unicode ntfs cmu NIC
-# LocalWords: Braam braam Schmidt's freiburg nls codepages codepage Romanian
-# LocalWords: Slovak Slovenian Sorbian Nordic iso Catalan Faeroese Galician SZ
-# LocalWords: Valencian Slovene Esperanto Estonian Latvian Belarusian KOI mt
-# LocalWords: charset Inuit Greenlandic Sami Lappish koi Alexey Kuznetsov's sa
-# LocalWords: Specialix specialix DTR RTS RTSCTS cycladesZ Exabyte ftape's inr
-# LocalWords: Iomega's LBFM claus ZFTAPE VFS zftape zft William's lzrw DFLT kb
-# LocalWords: MTSETBLK MTIOCTOP qft setblk zftape's tar's afio's setdrvbuffer
-# LocalWords: Procfs Exabyte's THR FCD sysvinit init PSC pscwdt VMIDI Euro SAB
-# LocalWords: Mostek Fastlane PowerMac PReP PMAC PowerPC Macintoshes Starmax
-# LocalWords: PowerStack Starmaxes MCOMMON DEVICETREE ATY IMS IMSTT videodev
-# LocalWords: BT Hauppauge STB bttv Quickcam BW BWQCAM bw qcam Mediavision PMS
-# LocalWords: pms Avatar Freecom Imation Superdisk BPCK bpck COMM comm DSTR ru
-# LocalWords: dstr EPAT EPEZ epat EPIA epia FreeCom FRPW frpw KingByte KBIC HW
-# LocalWords: KingByte's kbic OnSpec ValuStore FASTROUTE fastroute FLOWCONTROL
-# LocalWords: struct APIC realtime OSs LynxOS CNC tmp cvf HFS hfs ADFS Risc os
-# LocalWords: adfs ncpmount namespace SUBDIR reexport NDS kcore FT SPX spx DAT
-# LocalWords: interserver BLKSZ NUMBUFFERS apmd Tadpole ANA roestock QuickCam
-# LocalWords: isapnptools Colour CQCAM colour Connectix QuickClip prive mentre
-# LocalWords: KMOD kmod conformant utexas kharker UnixWare Mwave cgi cl ts ibm
-# LocalWords: eXchange threepio oakland simtel pre ULTRAMCA EtherLink isa luik
-# LocalWords: EtherLink OpenBSD pts DEVPTS devpts ptmx ttyp glibc readback SA
-# LocalWords: mwave OLDCARD isdnloop linklevel loopctrl Eicon Diehl DIEHLDIVA
-# LocalWords: ASUSCOM AsusCom TELEINT semiactiv Sedlbauer Sportster TA MIC ITH
-# LocalWords: NETjet NetJet Niccy Neuhaus sparcs AOC AOCD AOCE Microlink SAA
-# LocalWords: teletext WinTV saa iproute tc Quadra Performa PowerBook tor AUN
-# LocalWords: setserial compsoc steve Econet econet AUNUDP psched TEQL TLE CLS
-# LocalWords: teql FW Ingres TwistedPair MTRR MTRRs mtrr cfs crypto TD ktti KT
-# LocalWords: PHd ICS ipchains adelaide rustcorp syslog Cumana steganography
-# LocalWords: AcornSCSI EcoSCSI EESOX EESOXSCSI Powertec POWERTECSCSI dec SF
-# LocalWords: RadioReveal gatekeeper aimslab aztech FMI sf fmi RTL rtl cesdis
-# LocalWords: Yellowfin gsfc nasa gov yellowfin pcnet Mylex LNE lne EtherH hs
-# LocalWords: EBSA chattr RiscOS Winmodem AGP Atomwide DUALSP pcsp robinson CT
-# LocalWords: SGALAXY Waverider DSPxxx TRXPRO AudioTrix OSWF MOT CFB DSY kbps
-# LocalWords: tuwien kkudielk LVD mega lun MAXTAGS Gbps arcnet Olicom SNA PAE
-# LocalWords: SysKonnect tms sna etherboot ufs NetBEUI MultiSound MSNDCLAS GX
-# LocalWords: MSNDINIT MSNDPERM MSNDPIN PNDSPINI PNDSPERM Ensoniq's RetinaZ SS
-# LocalWords: AudioPCI lspci SonicVibes sonicvibes SPARCs roadrunner CLgen UPA
-# LocalWords: swansea shtml Zoltrix zoltrix BINUTILS EGCS binutils VIDC DACs
-# LocalWords: CyberVision Cirrus PowerBooks Topcat SBUS CGsix TurboGX BWtwo SS
-# LocalWords: CGthree TCX unswappable vfb fbcon hicolor truecolor AFB ILBM SOC
-# LocalWords: IPLAN gracilis Fibre SBus SparcSTORAGE SV jnewbigin swin QNX qnx
-# LocalWords: PTY PTYS ptyxx ttyxx PTYs ssh sb Avance ALS pss pvv kerneli hd
-# LocalWords: synth WaveFront MSND NONPNP AudioExcelDSP STRAM APUS CHRP MBX Nx
-# LocalWords: PowerMac's BMAC radiotrack rtrack miropcm OFFBOARD HPT UDMA DVD
-# LocalWords: hpt fokus gmd Cyrix DXL SLC DLC NexGen MediaGX GXm IDT WinChip
-# LocalWords: MMX MII valkyrie mdacon vdolive VDOLive cuseeme CU hippi rrunner
-# LocalWords: SeeMe ipmasqadm juanjox ipmarkfw markfw TNCs Microdyne rhine lib
-# LocalWords: libc jsX gamepad gameport CHF FCS FPGaming MadCatz ASSASIN GrIP
-# LocalWords: Assasin gamepads GamePad PDPI gamecards gamecard WingMan BSP WCS
-# LocalWords: ThunderPad CyberMan SideWinder ThrustMaster DirectConnect NES XF
-# LocalWords: Millenium SNES PSX Multisystem Nintendo PlayStation Amstrad CPC
-# LocalWords: Sega TurboGraFX Steffen Schwenke Multiststem PDIF FIFOSIZE EPLUS
-# LocalWords: PowerUP RoadRunner tahallah dos functionkey setterm imladris Woz
-# LocalWords: PowerMacs Winbond Algorithmics ALGOR algor ECOFF IRIX SGI SGI's
-# LocalWords: gfx virtualized Xpmac mklinux XFree FBDev Woodhouse mvhi Seeq fp
-# LocalWords: SGISEEQ HIgh ADB ADBMOUSE crosscompiler CROSSCOMPILE FPE GDB gdb
-# LocalWords: JOYPORT rp spoofing DawiControl NOGENSUPP EEPROM HSSI Alessandro
-# LocalWords: singleprocessor tex MATHEMU FRIQ Maxell friq Alcor XLT AlphaBook
-# LocalWords: AlphaPCI DP LX Miata Mikasa Noritake RPX UX BX Takara EV PRIMO
-# LocalWords: TSC Matrox Productiva matroxfb matrox multihead ia linuxhq MFW
-# LocalWords: mfw AAA MCS Initio XXU initio imm AutoDetect IZIP CTR usec HDLC
-# LocalWords: COSA SRP muni cz kas cosa Alteon AceNIC acenic VTOC OSes GMT SAx
-# LocalWords: Inspiron localtime INTS Thinkpads Ralf Brown's Flightstick NNN
-# LocalWords: Xterminator Blackhawk NN mpu ioports DCA HPDCA HPLANCE DIO Corel
-# LocalWords: GemTek gemtek CMDLINE IrDA PDA's irmanager irattach RR AVA DN rg
-# LocalWords: uit dagb irda LSAP IrLMP RR's IrLAP IR alloc skb's kfree skb's
-# LocalWords: GZIP IrLAN NetbeamIR ESI JetEye IrOBEX IrCOMM TTY's minicom dti
-# LocalWords: ircomm ircomm pluto thiguchi IrTTY Linux's bps NetWinder MIR NSC
-# LocalWords: ACTiSYS dongle dongles esi actisys IrMate tekram BVM MVME
-# LocalWords: BVME BVME WRITETHROUGH copyback writethrough fwmark syncookie tu
-# LocalWords: alphalinux GOBIOS csn chemnitz nat ACARD AMI MegaRAID megaraid
-# LocalWords: QNXFS ISI isicom xterms Apollos VPN RCPCI rcpci sgi visws pcmcia
-# LocalWords: IrLPT UIRCC Tecra Strebel jstrebel suse Eichwalder ke INI INIA
-# LocalWords: FCP qlogicfc sym isapnp DTLK DoubleTalk rcsys dtlk DMAP SGIVW ar
-# LocalWords: dmabuf EcoRadio MUTEFREQ GIrBIL girbil tepkom vol mha diplom PQS
-# LocalWords: bmac Microgate SyncLink synclink hdlc excl ioaddr Tane tanep TCQ
-# LocalWords: PDS SMALLDOS charsets bigfoot kernelfr mcs cls fw rsvp SKnet sk
-# LocalWords: SKMC USB UHCI OHCI intel compaq usb ohci HCD Virt Compaq's hcd
-# LocalWords: VROOTHUB KBD ARRs MCRs NWBUTTON nwbutton NUM WaveArtist APNE cpu
-# LocalWords: apne blackhawke PlanB lu mlan planb NWFPE FPA nwfpe unbootable
-# LocalWords: FPEmulator ds vmlinux initialization discardable pgtable PGT mdw
-# LocalWords: quicklist pagetable arthur StrongARM podule podules Autodetect
-# LocalWords: dodgy IrPORT irport Litelink litelink SuSE rtfm internet hda CY
-# LocalWords: multmode DriveReady SeekComplete DriveStatusError miscompile AEC
-# LocalWords: mainboard's Digital's alim FastTrak aec PIIXn piix Gayle Eyetech
-# LocalWords: Catweasel IDEDOUBLER Powerbook Centris ICSIDE RapIDE OSM HDM IOP
-# LocalWords: HDM's OSM's lan FibreChannel ECP autoprobe itg lbl ipmasq cjb IC
-# LocalWords: bieringer Caulfield's dreamtime decnet SIOCFIGCONF SIOCGIFCONF
-# LocalWords: rtnetlink Endnode Aironet Arlan Telxon ylenurme arlan ACB aeschi
-# LocalWords: Sealevel sealevel Cyclom br wanconfig tarball conectiva cycsyn
-# LocalWords: devel bazar cyclomx NetGear GA IBMOL Lanstreamer uhci eu efs CYZ
-# LocalWords: olympic linuxtr usbcore acm EZUSB downloader EFS XFS INTR op IIC
-# LocalWords: heine soundcore JavaStations JavaStation GemTeks TerraTec TODO
-# LocalWords: ActiveRadio Standalone terratec Rolf Offermanns rolf offermanns
-# LocalWords: Zoran ZR Buz LML CPQ DA cpqarray PPDEV deviceid vlp ppdev atyfb
-# LocalWords: AcceleRAID eXtremeRAID NETFILTER Netfilter masqueraded netfilter
-# LocalWords: kernelnotes Cardbus PCMCIA's CardBus clgenfb Permedia YAM MMAP
-# LocalWords: mmapped ATM atm PVCs SVCs InARP ATMARP neighbour neighbours MPOA
-# LocalWords: VCs ENI FPGA Tonga MMF MF UTP printks ZeitNet ZN ZATM uPD SAR PN
-# LocalWords: approx NICStAR NICs ForeRunnerLE Madge Collage ATMizer Dxxxx VCI
-# LocalWords: ServeRAID IPS ips ipslinux gzip BSDCOMP LZW RAYCS Interphase app
-# LocalWords: Tachyon IPHASE Surfboard NextLevel SURFboard jacksonville Tigon
-# LocalWords: fventuri adelphia siglercm linuxpower AceNICs Starfire starfire
-# LocalWords: ISOC CPiA cpia uss ACPI UDF DirectCD udf CDRW's OSF Manx acpi DM
-# LocalWords: Unixware cymru Computone IntelliPort Intelliport computone SI sx
-# LocalWords: adbmouse DRI DRM dlabs GMX PLCs Applicom fieldbus applicom int
-# LocalWords: VWSND eg ESSSOLO CFU CFNR scribed eiconctrl eicon hylafax KFPU
-# LocalWords: EXTRAPREC fpu mainboards KHTTPD kHTTPd khttpd Xcelerator SBNI tw
-# LocalWords: LOGIBUSMOUSE Granch granch sbni Raylink NOHIGHMEM Athlon SIM sim
-# LocalWords: hpl Tourrilhes DuraLAN starfire Davicom davicom dmfe auk tms tr
-# LocalWords: TokenExpress Belkin Peracom eTek DVDs infradead Cxxx Adlib AV ZX
-# LocalWords: NeoMagic CPi CPt Celeron decapsulation Undeletion BFS bfs nVidia
-# LocalWords: OnStream Irongate Riva phonedev QuickNet LineJack PhoneJack IXJ
-# LocalWords: Quicknet PhoneJACK LineJACK ixj pnpdump Quicknet's Joandi SSID
-# LocalWords: aironet quickconfig adhoc btw bap NONCS cardservices Xircom lin
-# LocalWords: Netwave AirSurfer netwave HomePNA failover MVP iMacs ALi aktual
-# LocalWords: Aladin HIDBP usbkbd KEYBDEV MOUSEDEV JOYDEV EVDEV UAB WhiteHEAT
-# LocalWords: Handspring ov DABUSB URB URB's dabusb CRAMFS NFSv ELV IOAPIC WIP
-# LocalWords: NLMv SMBus ALGOBIT algo PHILIPSPAR philips elv Velleman velleman
-# LocalWords: ALGOPCF Elektor elektor CHARDEV dfx TDFX tdfx Extensa dof gravis
-# LocalWords: assasin logitech Overdrive thrustmaster DWave Aureal magellan db
-# LocalWords: SpaceTec SpaceOrb SpaceBall spaceorb FLX spaceball turbografx zr
-# LocalWords: amiga ESS's WaveWatcher Maxi belkin RW's ata glx GART MPV Baget
-# LocalWords: OpenGL Xserver agpgart HOTPLUG CyberPro Integraphics Netwinder
-# LocalWords: aty FONTWIDTH eni zatm nicstar ForeRunner OC DECstations DEC's
-# LocalWords: PHYsical SUNI reinsertion ChipSAR KVC PHY ClassID iphase iadbg
-# LocalWords: DEVS FireWire PCILynx pcilynx LOCALRAM miro's DV RAWIO GRED Mk
-# LocalWords: Diffserv DSMARK Ingress Qdisc TCINDEX TMSPCI tmspci Ringode JE
-# LocalWords: MADGEMC madgemc TokenRing SMCTR TokenCard smctr Wacom Graphire
-# LocalWords: mousedev ConnectTech HandSpring Xirlink IBMCAM ibmcam SN
-# LocalWords: DEVICEFS yyy Cymraeg Dwave SIMM JSFLASH JavaStation's multilink
-# LocalWords: nsc ircc DDB Vrc CMN TB PROMs Vino rivafb DDC Matroxes MGA TVO
-# LocalWords: MAVEN fbdev crtc maven matroxset NTSC PCA SBA AAL SKFP DAS SAS
-# LocalWords: skfp Intuos ADMtek's pegasus PLUSB plusb pointopoint mp rio Xeon
-# LocalWords: DEVFS devfs dd bs EDSS german TELESPCI FRITZPCI HFC HFCS BDS HST
-# LocalWords: ISURF ISAR Saphir HSTSAPHIR Telekom BKM Scitel Quadro SCT Gazel
-# LocalWords: SP PRI Hypercope HYSDN Hypercope's hysdn IbssJoinNetTimeout FTDI
-# LocalWords: ARCNet Keyspan PDA ADMtek sgalaxy sgbase opl mpuio mpuirq sbio
-# LocalWords: sbirq sbdma gus uart mssio mssirq mssdma sscape maui mouirq iph
-# LocalWords: CHDLC UPS's usbmouse wacom wmforce keybdev joydev fibre Trunking
-# LocalWords: Etherchannel IOC Moxa Intellio moxa SmartIO mxser Mixcom EFI ir
-# LocalWords: MIXCOMWD mixcomwd SENDCOMPLETE GMAC iBook gmac OAKNET oaknet PCG
-# LocalWords: diffserv irlan irtty toshoboe IrCC Lifebook idex AUTODMA FIP Cxx
-# LocalWords: Yenta Databook TCIC FMVJ fmvj NMCLAN LiveWire nmclan XIRC xirc
-# LocalWords: loadkeys setfont shm SuperIO soc SOCAL socal FCAL fc fcal COMX
-# LocalWords: MultiGate ITConsult comx CMX HiCOMX downloadable hw LoCOMX PROTO
-# LocalWords: locomx MixCOM mixcom proto MyriCOM MYRI Sbus myri sbus IBMLS hme
-# LocalWords: lanstreamer baseT HAPPYMEAL qfe sunhme SUNLANCE sunlance BigMAC
-# LocalWords: SUNBMAC sunbmac QuadEthernet SUNQE qe FastEthernet sunqe DSB PTI
-# LocalWords: DSBR dsbr procinfo QLOGICPTI qpti ptisp QLGC qlogicpti se LBA NF
-# LocalWords: OPENPROMFS OpenPROM openpromfs OBP OpenBoot flashable Multiboard
-# LocalWords: SPARCAUDIO SparcClassic Ultras DBRI Sparcbook sparcaudio SUNBPP
-# LocalWords: UltraDMA WDC CRC CONNTRACK IPTABLES iptables nfmark interface's
-# LocalWords: tdfxfb TNTx HGA hgafb VERBOSEDEBUG SunTrunking SunSoft XIRTULIP
-# LocalWords: ethercards PNIC Macronix MXIC ASIX xircom Mustek MDC gphoto mdc
-# LocalWords: CramFs Cramfs uid cramfs AVM's kernelcapi PCIV cdrdao Cdparanoia
-# LocalWords: DMX Domex dmx wellington ftdi sio Accton Billington Corega FEter
-# LocalWords: MELCO LUA PNA Linksys SNC chkdsk AWACS Webcam RAMFS Ramfs ramfs
-# LocalWords: ramfiles MAKEDEV pty WDTPCI APA apa
-#
-# The following sets edit modes for GNU EMACS
-# Local Variables:
-# case-fold-search:nil
-# fill-prefix:" "
-# adaptive-fill:nil
-# fill-column:70
-# End:
diff --git a/xenolinux-2.4.25-sparse/Makefile b/xenolinux-2.4.25-sparse/Makefile
deleted file mode 100644
index ab8d46856f..0000000000
--- a/xenolinux-2.4.25-sparse/Makefile
+++ /dev/null
@@ -1,591 +0,0 @@
-VERSION = 2
-PATCHLEVEL = 4
-SUBLEVEL = 25
-EXTRAVERSION =
-
-KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
-
-# SUBARCH always tells us the underlying machine architecture.
-# Unless overridden, by default ARCH is equivalent to SUBARCH.
-# This will be overriden for Xen and UML builds.
-SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
-ARCH ?= $(SUBARCH)
-
-## XXX The following hack can be discarded after users have adjusted to the
-## architectural name change 'xeno' -> 'xen'.
-ifeq ($(ARCH),xeno)
- ARCH := xen
-endif
-
-KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
-
-CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
- else if [ -x /bin/bash ]; then echo /bin/bash; \
- else echo sh; fi ; fi)
-TOPDIR := $(shell /bin/pwd)
-
-HPATH = $(TOPDIR)/include
-FINDHPATH = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net $(HPATH)/math-emu
-
-HOSTCC = gcc
-HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
-
-CROSS_COMPILE =
-
-#
-# Include the make variables (CC, etc...)
-#
-
-AS = $(CROSS_COMPILE)as
-LD = $(CROSS_COMPILE)ld
-CC = $(CROSS_COMPILE)gcc
-CPP = $(CC) -E
-AR = $(CROSS_COMPILE)ar
-NM = $(CROSS_COMPILE)nm
-STRIP = $(CROSS_COMPILE)strip
-OBJCOPY = $(CROSS_COMPILE)objcopy
-OBJDUMP = $(CROSS_COMPILE)objdump
-MAKEFILES = $(TOPDIR)/.config
-GENKSYMS = /sbin/genksyms
-DEPMOD = /sbin/depmod
-MODFLAGS = -DMODULE
-CFLAGS_KERNEL =
-PERL = perl
-AWK = awk
-RPM := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \
- else echo rpm; fi)
-
-export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION KERNELRELEASE ARCH \
- CONFIG_SHELL TOPDIR HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
- CPP AR NM STRIP OBJCOPY OBJDUMP MAKE MAKEFILES GENKSYMS MODFLAGS PERL AWK
-
-all: do-it-all
-
-#
-# Make "config" the default target if there is no configuration file or
-# "depend" the target if there is no top-level dependency information.
-#
-
-ifeq (.config,$(wildcard .config))
-include .config
-ifeq (.depend,$(wildcard .depend))
-include .depend
-do-it-all: Version vmlinux
-else
-CONFIGURATION = depend
-do-it-all: depend
-endif
-else
-CONFIGURATION = config
-do-it-all: config
-endif
-
-#
-# INSTALL_PATH specifies where to place the updated kernel and system map
-# images. Uncomment if you want to place them anywhere other than root.
-#
-
-#export INSTALL_PATH=/boot
-
-#
-# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
-# relocations required by build roots. This is not defined in the
-# makefile but the arguement can be passed to make if needed.
-#
-
-MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
-export MODLIB
-
-#
-# standard CFLAGS
-#
-
-CPPFLAGS := -D__KERNEL__ -I$(HPATH)
-
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
- -fno-strict-aliasing -fno-common
-ifndef CONFIG_FRAME_POINTER
-CFLAGS += -fomit-frame-pointer
-endif
-AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
-
-#
-# ROOT_DEV specifies the default root-device when making the image.
-# This can be either FLOPPY, CURRENT, /dev/xxxx or empty, in which case
-# the default of FLOPPY is used by 'build'.
-# This is i386 specific.
-#
-
-export ROOT_DEV = CURRENT
-
-#
-# If you want to preset the SVGA mode, uncomment the next line and
-# set SVGA_MODE to whatever number you want.
-# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.
-# The number is the same as you would ordinarily press at bootup.
-# This is i386 specific.
-#
-
-export SVGA_MODE = -DSVGA_MODE=NORMAL_VGA
-
-#
-# If you want the RAM disk device, define this to be the size in blocks.
-# This is i386 specific.
-#
-
-#export RAMDISK = -DRAMDISK=512
-
-CORE_FILES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
-NETWORKS =net/network.o
-
-LIBS =$(TOPDIR)/lib/lib.a
-SUBDIRS =kernel drivers mm fs net ipc lib crypto
-
-DRIVERS-n :=
-DRIVERS-y :=
-DRIVERS-m :=
-DRIVERS- :=
-
-DRIVERS-$(CONFIG_ACPI_BOOT) += drivers/acpi/acpi.o
-DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
-DRIVERS-y += drivers/char/char.o \
- drivers/block/block.o \
- drivers/misc/misc.o \
- drivers/net/net.o
-DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o
-DRIVERS-$(CONFIG_DRM_NEW) += drivers/char/drm/drm.o
-DRIVERS-$(CONFIG_DRM_OLD) += drivers/char/drm-4.0/drm.o
-DRIVERS-$(CONFIG_NUBUS) += drivers/nubus/nubus.a
-DRIVERS-$(CONFIG_NET_FC) += drivers/net/fc/fc.o
-DRIVERS-$(CONFIG_DEV_APPLETALK) += drivers/net/appletalk/appletalk.o
-DRIVERS-$(CONFIG_TR) += drivers/net/tokenring/tr.o
-DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.o
-DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnetdrv.o
-DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
-DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
-DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
-DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
-DRIVERS-$(CONFIG_FUSION_BOOT) += drivers/message/fusion/fusion.o
-DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394drv.o
-
-ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
-DRIVERS-y += drivers/cdrom/driver.o
-endif
-
-DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o
-DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
-DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
-DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
-DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o
-DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o
-DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o
-DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
-DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
-DRIVERS-$(CONFIG_ZORRO) += drivers/zorro/driver.o
-DRIVERS-$(CONFIG_FC4) += drivers/fc4/fc4.a
-DRIVERS-$(CONFIG_PPC32) += drivers/macintosh/macintosh.o
-DRIVERS-$(CONFIG_MAC) += drivers/macintosh/macintosh.o
-DRIVERS-$(CONFIG_ISAPNP) += drivers/pnp/pnp.o
-DRIVERS-$(CONFIG_VT) += drivers/video/video.o
-DRIVERS-$(CONFIG_PARIDE) += drivers/block/paride/paride.a
-DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o
-DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
-DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
-DRIVERS-$(CONFIG_USB_GADGET) += drivers/usb/gadget/built-in.o
-DRIVERS-y +=drivers/media/media.o
-DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o
-DRIVERS-$(CONFIG_HIL) += drivers/hil/hil.o
-DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o
-DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
-DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
-DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
-DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
-DRIVERS-$(CONFIG_GSC) += drivers/gsc/gscbus.o
-DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
-DRIVERS-$(CONFIG_HOTPLUG_PCI) += drivers/hotplug/vmlinux-obj.o
-DRIVERS-$(CONFIG_ISDN_BOOL) += drivers/isdn/vmlinux-obj.o
-DRIVERS-$(CONFIG_CRYPTO) += crypto/crypto.o
-
-DRIVERS := $(DRIVERS-y)
-
-
-# files removed with 'make clean'
-CLEAN_FILES = \
- kernel/ksyms.lst include/linux/compile.h \
- vmlinux System.map \
- .tmp* \
- drivers/char/consolemap_deftbl.c drivers/video/promcon_tbl.c \
- drivers/char/conmakehash \
- drivers/char/drm/*-mod.c \
- drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \
- drivers/zorro/devlist.h drivers/zorro/gen-devlist \
- drivers/sound/bin2hex drivers/sound/hex2hex \
- drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \
- drivers/scsi/aic7xxx/aicasm/aicasm \
- drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \
- drivers/scsi/aic7xxx/aicasm/aicasm_gram.h \
- drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.c \
- drivers/scsi/aic7xxx/aicasm/aicasm_macro_gram.h \
- drivers/scsi/aic7xxx/aicasm/aicasm_macro_scan.c \
- drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \
- drivers/scsi/aic7xxx/aicasm/aicdb.h \
- drivers/scsi/aic7xxx/aicasm/y.tab.h \
- drivers/scsi/53c700_d.h \
- drivers/tc/lk201-map.c \
- net/khttpd/make_times_h \
- net/khttpd/times.h \
- submenu*
-# directories removed with 'make clean'
-CLEAN_DIRS = \
- modules
-
-# files removed with 'make mrproper'
-MRPROPER_FILES = \
- include/linux/autoconf.h include/linux/version.h \
- lib/crc32table.h lib/gen_crc32table \
- drivers/net/hamradio/soundmodem/sm_tbl_{afsk1200,afsk2666,fsk9600}.h \
- drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \
- drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \
- drivers/net/hamradio/soundmodem/gentbl \
- drivers/sound/*_boot.h drivers/sound/.*.boot \
- drivers/sound/msndinit.c \
- drivers/sound/msndperm.c \
- drivers/sound/pndsperm.c \
- drivers/sound/pndspini.c \
- drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \
- .version .config* config.in config.old \
- scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \
- scripts/lxdialog/*.o scripts/lxdialog/lxdialog \
- .menuconfig.log \
- include/asm \
- .hdepend scripts/mkdep scripts/split-include scripts/docproc \
- $(TOPDIR)/include/linux/modversions.h \
- kernel.spec
-
-# directories removed with 'make mrproper'
-MRPROPER_DIRS = \
- include/config \
- $(TOPDIR)/include/linux/modules
-
-
-include arch/$(ARCH)/Makefile
-
-# Extra cflags for kbuild 2.4. The default is to forbid includes by kernel code
-# from user space headers. Some UML code requires user space headers, in the
-# UML Makefiles add 'kbuild_2_4_nostdinc :=' before include Rules.make. No
-# other kernel code should include user space headers, if you need
-# 'kbuild_2_4_nostdinc :=' or -I/usr/include for kernel code and you are not UML
-# then your code is broken! KAO.
-
-kbuild_2_4_nostdinc := -nostdinc -iwithprefix include
-export kbuild_2_4_nostdinc
-
-export CPPFLAGS CFLAGS CFLAGS_KERNEL AFLAGS AFLAGS_KERNEL
-
-export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS
-
-.S.s:
- $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -o $*.s $<
-.S.o:
- $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -traditional -c -o $*.o $<
-
-Version: dummy
- @rm -f include/linux/compile.h
-
-boot: vmlinux
- @$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C arch/$(ARCH)/boot
-
-vmlinux: include/linux/version.h $(CONFIGURATION) init/main.o init/version.o init/do_mounts.o linuxsubdirs
- $(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o init/do_mounts.o \
- --start-group \
- $(CORE_FILES) \
- $(DRIVERS) \
- $(NETWORKS) \
- $(LIBS) \
- --end-group \
- -o vmlinux
- $(NM) vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
-
-symlinks:
- rm -f include/asm
- ( cd include ; ln -sf asm-$(ARCH) asm)
- @if [ ! -d include/linux/modules ]; then \
- mkdir include/linux/modules; \
- fi
-
-oldconfig: symlinks
- $(CONFIG_SHELL) scripts/Configure -d arch/$(ARCH)/config.in
-
-xconfig: symlinks
- $(MAKE) -C scripts kconfig.tk
- wish -f scripts/kconfig.tk
-
-menuconfig: include/linux/version.h symlinks
- $(MAKE) -C scripts/lxdialog all
- $(CONFIG_SHELL) scripts/Menuconfig arch/$(ARCH)/config.in
-
-config: symlinks
- $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
-
-include/config/MARKER: scripts/split-include include/linux/autoconf.h
- scripts/split-include include/linux/autoconf.h include/config
- @ touch include/config/MARKER
-
-linuxsubdirs: $(patsubst %, _dir_%, $(SUBDIRS))
-
-$(patsubst %, _dir_%, $(SUBDIRS)) : dummy include/linux/version.h include/config/MARKER
- $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C $(patsubst _dir_%, %, $@)
-
-$(TOPDIR)/include/linux/version.h: include/linux/version.h
-$(TOPDIR)/include/linux/compile.h: include/linux/compile.h
-
-newversion:
- . scripts/mkversion > .tmpversion
- @mv -f .tmpversion .version
-
-uts_len := 64
-uts_truncate := sed -e 's/\(.\{1,$(uts_len)\}\).*/\1/'
-
-include/linux/compile.h: $(CONFIGURATION) include/linux/version.h newversion
- @echo -n \#`cat .version` > .ver1
- @if [ -n "$(CONFIG_SMP)" ] ; then echo -n " SMP" >> .ver1; fi
- @if [ -f .name ]; then echo -n \-`cat .name` >> .ver1; fi
- @LANG=C echo ' '`date` >> .ver1
- @echo \#define UTS_VERSION \"`cat .ver1 | $(uts_truncate)`\" > .ver
- @LANG=C echo \#define LINUX_COMPILE_TIME \"`date +%T`\" >> .ver
- @echo \#define LINUX_COMPILE_BY \"`whoami`\" >> .ver
- @echo \#define LINUX_COMPILE_HOST \"`hostname | $(uts_truncate)`\" >> .ver
- @([ -x /bin/dnsdomainname ] && /bin/dnsdomainname > .ver1) || \
- ([ -x /bin/domainname ] && /bin/domainname > .ver1) || \
- echo > .ver1
- @echo \#define LINUX_COMPILE_DOMAIN \"`cat .ver1 | $(uts_truncate)`\" >> .ver
- @echo \#define LINUX_COMPILER \"`$(CC) $(CFLAGS) -v 2>&1 | tail -n 1`\" >> .ver
- @mv -f .ver $@
- @rm -f .ver1
-
-include/linux/version.h: ./Makefile
- @expr length "$(KERNELRELEASE)" \<= $(uts_len) > /dev/null || \
- (echo KERNELRELEASE \"$(KERNELRELEASE)\" exceeds $(uts_len) characters >&2; false)
- @echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
- @echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
- @echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' >>.ver
- @mv -f .ver $@
-
-comma := ,
-
-init/version.o: init/version.c include/linux/compile.h include/config/MARKER
- $(CC) $(CFLAGS) $(CFLAGS_KERNEL) -DUTS_MACHINE='"$(SUBARCH)"' -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o init/version.o init/version.c
-
-init/main.o: init/main.c include/config/MARKER
- $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@ $<
-
-init/do_mounts.o: init/do_mounts.c include/config/MARKER
- $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $@ $<
-
-fs lib mm ipc kernel drivers net: dummy
- $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
-
-TAGS: dummy
- { find include/asm-${ARCH} -name '*.h' -print ; \
- find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print ; \
- find $(SUBDIRS) init arch/${ARCH} -name '*.[chS]' ; } | grep -v SCCS | grep -v '\.svn' | etags -
-
-# Exuberant ctags works better with -I
-tags: dummy
- CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_NOVERS"`; \
- ctags $$CTAGSF `find include/asm-$(ARCH) -name '*.h'` && \
- find include -type d \( -name "asm-*" -o -name config \) -prune -o -name '*.h' -print | xargs ctags $$CTAGSF -a && \
- find $(SUBDIRS) init -name '*.[ch]' | xargs ctags $$CTAGSF -a
-
-ifdef CONFIG_MODULES
-ifdef CONFIG_MODVERSIONS
-MODFLAGS += -DMODVERSIONS -include $(HPATH)/linux/modversions.h
-endif
-
-.PHONY: modules
-modules: $(patsubst %, _mod_%, $(SUBDIRS))
-
-.PHONY: $(patsubst %, _mod_%, $(SUBDIRS))
-$(patsubst %, _mod_%, $(SUBDIRS)) : include/linux/version.h include/config/MARKER
- $(MAKE) -C $(patsubst _mod_%, %, $@) CFLAGS="$(CFLAGS) $(MODFLAGS)" MAKING_MODULES=1 modules
-
-.PHONY: modules_install
-modules_install: _modinst_ $(patsubst %, _modinst_%, $(SUBDIRS)) _modinst_post
-
-.PHONY: _modinst_
-_modinst_:
- @rm -rf $(MODLIB)/kernel
- @rm -f $(MODLIB)/build
- @mkdir -p $(MODLIB)/kernel
- @ln -s $(TOPDIR) $(MODLIB)/build
-
-# If System.map exists, run depmod. This deliberately does not have a
-# dependency on System.map since that would run the dependency tree on
-# vmlinux. This depmod is only for convenience to give the initial
-# boot a modules.dep even before / is mounted read-write. However the
-# boot script depmod is the master version.
-ifeq "$(strip $(INSTALL_MOD_PATH))" ""
-depmod_opts :=
-else
-depmod_opts := -b $(INSTALL_MOD_PATH) -r
-endif
-.PHONY: _modinst_post
-_modinst_post: _modinst_post_pcmcia
- if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
-
-# Backwards compatibilty symlinks for people still using old versions
-# of pcmcia-cs with hard coded pathnames on insmod. Remove
-# _modinst_post_pcmcia for kernel 2.4.1.
-.PHONY: _modinst_post_pcmcia
-_modinst_post_pcmcia:
- cd $(MODLIB); \
- mkdir -p pcmcia; \
- find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
-
-.PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
-$(patsubst %, _modinst_%, $(SUBDIRS)) :
- $(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
-
-# modules disabled....
-
-else
-modules modules_install: dummy
- @echo
- @echo "The present kernel configuration has modules disabled."
- @echo "Type 'make config' and enable loadable module support."
- @echo "Then build a kernel with module support enabled."
- @echo
- @exit 1
-endif
-
-clean: archclean
- find . \( -name '*.[oas]' -o -name core -o -name '.*.flags' \) -type f -print \
- | grep -v lxdialog/ | xargs rm -f
- rm -f $(CLEAN_FILES)
- rm -rf $(CLEAN_DIRS)
- $(MAKE) -C Documentation/DocBook clean
-
-mrproper: clean archmrproper
- find . \( -size 0 -o -name .depend \) -type f -print | xargs rm -f
- rm -f $(MRPROPER_FILES)
- rm -rf $(MRPROPER_DIRS)
- $(MAKE) -C Documentation/DocBook mrproper
-
-distclean: mrproper
- rm -f core `find . \( -not -type d \) -and \
- \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
- -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
- -o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f -print` TAGS tags
-
-backup: mrproper
- cd .. && tar cf - linux/ | gzip -9 > backup.gz
- sync
-
-sgmldocs:
- chmod 755 $(TOPDIR)/scripts/docgen
- chmod 755 $(TOPDIR)/scripts/gen-all-syms
- chmod 755 $(TOPDIR)/scripts/kernel-doc
- $(MAKE) -C $(TOPDIR)/Documentation/DocBook books
-
-psdocs: sgmldocs
- $(MAKE) -C Documentation/DocBook ps
-
-pdfdocs: sgmldocs
- $(MAKE) -C Documentation/DocBook pdf
-
-htmldocs: sgmldocs
- $(MAKE) -C Documentation/DocBook html
-
-mandocs:
- chmod 755 $(TOPDIR)/scripts/kernel-doc
- chmod 755 $(TOPDIR)/scripts/split-man
- $(MAKE) -C Documentation/DocBook man
-
-sums:
- find . -type f -print | sort | xargs sum > .SUMS
-
-dep-files: scripts/mkdep archdep include/linux/version.h
- rm -f .depend .hdepend
- $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
-ifdef CONFIG_MODVERSIONS
- $(MAKE) update-modverfile
-endif
- scripts/mkdep -- `find $(FINDHPATH) \( -name SCCS -o -name .svn \) -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
- scripts/mkdep -- init/*.c > .depend
-
-ifdef CONFIG_MODVERSIONS
-MODVERFILE := $(TOPDIR)/include/linux/modversions.h
-else
-MODVERFILE :=
-endif
-export MODVERFILE
-
-depend dep: dep-files
-
-checkconfig:
- find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkconfig.pl
-
-checkhelp:
- find * -name [cC]onfig.in -print | sort | xargs $(PERL) -w scripts/checkhelp.pl
-
-checkincludes:
- find * -name '*.[hcS]' -type f -print | sort | xargs $(PERL) -w scripts/checkincludes.pl
-
-ifdef CONFIGURATION
-..$(CONFIGURATION):
- @echo
- @echo "You have a bad or nonexistent" .$(CONFIGURATION) ": running 'make" $(CONFIGURATION)"'"
- @echo
- $(MAKE) $(CONFIGURATION)
- @echo
- @echo "Successful. Try re-making (ignore the error that follows)"
- @echo
- exit 1
-
-#dummy: ..$(CONFIGURATION)
-dummy:
-
-else
-
-dummy:
-
-endif
-
-include Rules.make
-
-#
-# This generates dependencies for the .h files.
-#
-
-scripts/mkdep: scripts/mkdep.c
- $(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c
-
-scripts/split-include: scripts/split-include.c
- $(HOSTCC) $(HOSTCFLAGS) -o scripts/split-include scripts/split-include.c
-
-#
-# RPM target
-#
-# If you do a make spec before packing the tarball you can rpm -ta it
-#
-spec:
- . scripts/mkspec >kernel.spec
-
-#
-# Build a tar ball, generate an rpm from it and pack the result
-# There arw two bits of magic here
-# 1) The use of /. to avoid tar packing just the symlink
-# 2) Removing the .dep files as they have source paths in them that
-# will become invalid
-#
-rpm: clean spec
- find . \( -size 0 -o -name .depend -o -name .hdepend \) -type f -print | xargs rm -f
- set -e; \
- cd $(TOPDIR)/.. ; \
- ln -sf $(TOPDIR) $(KERNELPATH) ; \
- tar -cvz --exclude CVS -f $(KERNELPATH).tar.gz $(KERNELPATH)/. ; \
- rm $(KERNELPATH) ; \
- cd $(TOPDIR) ; \
- . scripts/mkversion > .version ; \
- $(RPM) -ta $(TOPDIR)/../$(KERNELPATH).tar.gz ; \
- rm $(TOPDIR)/../$(KERNELPATH).tar.gz
diff --git a/xenolinux-2.4.25-sparse/arch/xen/Makefile b/xenolinux-2.4.25-sparse/arch/xen/Makefile
deleted file mode 100644
index aba91a2414..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/Makefile
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# xen/Makefile
-#
-# This file is included by the global makefile so that you can add your own
-# architecture-specific flags and dependencies. Remember to do have actions
-# for "archclean" and "archdep" for cleaning up and making dependencies for
-# this architecture
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License. See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1994 by Linus Torvalds
-#
-# 19990713 Artur Skawina <skawina@geocities.com>
-# Added '-march' and '-mpreferred-stack-boundary' support
-#
-
-override EXTRAVERSION := -xen$(EXTRAVERSION)
-
-LD=$(CROSS_COMPILE)ld -m elf_i386
-OBJCOPY=$(CROSS_COMPILE)objcopy -R .note -R .comment -S
-LDFLAGS=-e stext
-LINKFLAGS =-T $(TOPDIR)/arch/xen/vmlinux.lds $(LDFLAGS)
-
-CFLAGS += -pipe
-
-check_gcc = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
-
-# prevent gcc from keeping the stack 16 byte aligned
-CFLAGS += $(call check_gcc,-mpreferred-stack-boundary=2,)
-
-ifdef CONFIG_M686
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MPENTIUMIII
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MPENTIUM4
-CFLAGS += -march=i686
-endif
-
-ifdef CONFIG_MK7
-CFLAGS += $(call check_gcc,-march=athlon,-march=i686 -malign-functions=4)
-endif
-
-HEAD := arch/xen/kernel/head.o arch/xen/kernel/init_task.o
-
-SUBDIRS += arch/xen/kernel arch/xen/mm arch/xen/lib
-SUBDIRS += arch/xen/drivers/console
-SUBDIRS += arch/xen/drivers/evtchn
-ifdef CONFIG_XEN_PHYSDEV_ACCESS
-SUBDIRS += arch/xen/drivers/vblkif
-SUBDIRS += arch/xen/drivers/vnetif
-else
-SUBDIRS += arch/xen/drivers/block
-SUBDIRS += arch/xen/drivers/network
-endif
-SUBDIRS += arch/xen/drivers/balloon
-ifdef CONFIG_XEN_PRIVILEGED_GUEST
-SUBDIRS += arch/xen/drivers/dom0
-endif
-
-CORE_FILES += arch/xen/kernel/kernel.o arch/xen/mm/mm.o
-CORE_FILES += arch/xen/drivers/evtchn/drv.o
-CORE_FILES += arch/xen/drivers/console/drv.o
-ifdef CONFIG_XEN_PHYSDEV_ACCESS
-CORE_FILES += arch/xen/drivers/vblkif/drv.o
-CORE_FILES += arch/xen/drivers/vnetif/drv.o
-else
-CORE_FILES += arch/xen/drivers/block/drv.o
-CORE_FILES += arch/xen/drivers/network/drv.o
-endif
-ifdef CONFIG_XEN_PRIVILEGED_GUEST
-CORE_FILES += arch/xen/drivers/dom0/drv.o
-endif
-CORE_FILES += arch/xen/drivers/balloon/drv.o
-LIBS := $(TOPDIR)/arch/xen/lib/lib.a $(LIBS) $(TOPDIR)/arch/xen/lib/lib.a
-
-arch/xen/kernel: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/kernel
-
-arch/xen/mm: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/mm
-
-arch/xen/drivers/console: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/console
-
-arch/xen/drivers/network: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/network
-
-arch/xen/drivers/block: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/block
-
-arch/xen/drivers/dom0: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/dom0
-
-arch/xen/drivers/balloon: dummy
- $(MAKE) linuxsubdirs SUBDIRS=arch/xen/drivers/balloon
-
-MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
-
-vmlinux: arch/xen/vmlinux.lds
-
-FORCE: ;
-
-.PHONY: bzImage compressed clean archclean archmrproper archdep
-
-bzImage: vmlinux
- @$(MAKEBOOT) xenolinux.gz
-
-install: bzImage
- mkdir -p $(prefix)/boot
- install -m0644 arch/$(ARCH)/boot/xenolinux.gz $(prefix)/boot/xenolinux.gz
- install -m0644 vmlinux $(prefix)/boot/xenolinux.dbg
-
-dist: bzImage
- mkdir -p ../install/boot
- install -m0644 arch/$(ARCH)/boot/xenolinux.gz ../install/boot/xenolinux.gz
- install -m0644 vmlinux ../install/boot/xenolinux.dbg
-
-archclean:
- @$(MAKEBOOT) clean
-
-archmrproper:
- rm -f include/asm-xen/hypervisor-ifs/arch
-
-archdep:
- rm -f include/asm-xen/hypervisor-ifs/arch
- ( cd include/asm-xen/hypervisor-ifs ; rm -rf arch ; ln -sf arch-$(SUBARCH) arch)
- @$(MAKEBOOT) dep
diff --git a/xenolinux-2.4.25-sparse/arch/xen/boot/Makefile b/xenolinux-2.4.25-sparse/arch/xen/boot/Makefile
deleted file mode 100644
index 64b402e833..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/boot/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# arch/xen/boot/Makefile
-#
-
-xenolinux.gz: xenolinux
- gzip -f -9 < $< > $@
-
-xenolinux: $(TOPDIR)/vmlinux
- $(OBJCOPY) $< $@
-
-dep:
-
-clean:
- rm -f xenolinux*
diff --git a/xenolinux-2.4.25-sparse/arch/xen/config.in b/xenolinux-2.4.25-sparse/arch/xen/config.in
deleted file mode 100644
index c66383f643..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/config.in
+++ /dev/null
@@ -1,311 +0,0 @@
-#
-# For a description of the syntax of this configuration file,
-# see Documentation/kbuild/config-language.txt.
-#
-mainmenu_name "Linux Kernel Configuration"
-
-define_bool CONFIG_XEN y
-
-define_bool CONFIG_X86 y
-define_bool CONFIG_ISA y
-define_bool CONFIG_SBUS n
-
-define_bool CONFIG_UID16 y
-
-mainmenu_option next_comment
-comment 'Xen'
-bool 'Support for privileged operations (domain 0)' CONFIG_XEN_PRIVILEGED_GUEST
-bool 'Support for direct physical device access' CONFIG_XEN_PHYSDEV_ACCESS
-endmenu
-# The IBM S/390 patch needs this.
-define_bool CONFIG_NO_IDLE_HZ y
-
-mainmenu_option next_comment
-comment 'Code maturity level options'
-bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
-endmenu
-
-mainmenu_option next_comment
-comment 'Loadable module support'
-bool 'Enable loadable module support' CONFIG_MODULES
-if [ "$CONFIG_MODULES" = "y" ]; then
- bool ' Set version information on all module symbols' CONFIG_MODVERSIONS
- bool ' Kernel module loader' CONFIG_KMOD
-fi
-endmenu
-
-mainmenu_option next_comment
-comment 'Processor type and features'
-choice 'Processor family' \
- "Pentium-Pro/Celeron/Pentium-II CONFIG_M686 \
- Pentium-III/Celeron(Coppermine) CONFIG_MPENTIUMIII \
- Pentium-4 CONFIG_MPENTIUM4 \
- Athlon/Duron/K7 CONFIG_MK7 \
- Opteron/Athlon64/Hammer/K8 CONFIG_MK8 \
- VIA-C3-2 CONFIG_MVIAC3_2" Pentium-Pro
-
- define_bool CONFIG_X86_WP_WORKS_OK y
- define_bool CONFIG_X86_INVLPG y
- define_bool CONFIG_X86_CMPXCHG y
- define_bool CONFIG_X86_XADD y
- define_bool CONFIG_X86_BSWAP y
- define_bool CONFIG_X86_POPAD_OK y
- define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n
- define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y
-
- define_bool CONFIG_X86_GOOD_APIC y
- define_bool CONFIG_X86_PGE y
- define_bool CONFIG_X86_USE_PPRO_CHECKSUM y
- define_bool CONFIG_X86_TSC y
-
-if [ "$CONFIG_M686" = "y" ]; then
- define_int CONFIG_X86_L1_CACHE_SHIFT 5
-fi
-if [ "$CONFIG_MPENTIUMIII" = "y" ]; then
- define_int CONFIG_X86_L1_CACHE_SHIFT 5
-fi
-if [ "$CONFIG_MPENTIUM4" = "y" ]; then
- define_int CONFIG_X86_L1_CACHE_SHIFT 7
-fi
-if [ "$CONFIG_MK8" = "y" ]; then
- define_bool CONFIG_MK7 y
-fi
-if [ "$CONFIG_MK7" = "y" ]; then
- define_int CONFIG_X86_L1_CACHE_SHIFT 6
- define_bool CONFIG_X86_USE_3DNOW y
-fi
-if [ "$CONFIG_MVIAC3_2" = "y" ]; then
- define_int CONFIG_X86_L1_CACHE_SHIFT 5
-fi
-
-#if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-# tristate 'BIOS Enhanced Disk Drive calls determine boot disk (EXPERIMENTAL)' CONFIG_EDD
-#fi
-
-choice 'High Memory Support' \
- "off CONFIG_NOHIGHMEM \
- 4GB CONFIG_HIGHMEM4G" off
-# 64GB CONFIG_HIGHMEM64G" off
-if [ "$CONFIG_HIGHMEM4G" = "y" ]; then
- define_bool CONFIG_HIGHMEM y
-fi
-if [ "$CONFIG_HIGHMEM64G" = "y" ]; then
- define_bool CONFIG_HIGHMEM y
- define_bool CONFIG_X86_PAE y
-fi
-
-if [ "$CONFIG_HIGHMEM" = "y" ]; then
- bool 'HIGHMEM I/O support' CONFIG_HIGHIO
-fi
-
-#bool 'Symmetric multi-processing support' CONFIG_SMP
-#if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
-# define_bool CONFIG_HAVE_DEC_LOCK y
-#fi
-endmenu
-
-mainmenu_option next_comment
-comment 'General setup'
-
-bool 'Networking support' CONFIG_NET
-
-if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
- bool 'PCI support' CONFIG_PCI
- source drivers/pci/Config.in
-
- bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG
-
- if [ "$CONFIG_HOTPLUG" = "y" ] ; then
- source drivers/pcmcia/Config.in
- source drivers/hotplug/Config.in
- else
- define_bool CONFIG_PCMCIA n
- define_bool CONFIG_HOTPLUG_PCI n
- fi
-fi
-
-bool 'System V IPC' CONFIG_SYSVIPC
-bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
-bool 'Sysctl support' CONFIG_SYSCTL
-if [ "$CONFIG_PROC_FS" = "y" ]; then
- choice 'Kernel core (/proc/kcore) format' \
- "ELF CONFIG_KCORE_ELF \
- A.OUT CONFIG_KCORE_AOUT" ELF
-fi
-tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
-tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
-tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-
-endmenu
-
-if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
- source drivers/mtd/Config.in
-
- source drivers/parport/Config.in
-
- source drivers/pnp/Config.in
-
- source drivers/block/Config.in
-
- source drivers/md/Config.in
-fi
-
-if [ "$CONFIG_NET" = "y" ]; then
- source net/Config.in
-fi
-
-if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "n" ]; then
- #
- # Block device driver configuration
- #
- mainmenu_option next_comment
- comment 'Block devices'
- tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
- dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
- tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
- if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then
- int ' Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096
- fi
- dep_bool ' Initial RAM disk (initrd) support' CONFIG_BLK_DEV_INITRD $CONFIG_BLK_DEV_RAM
- bool 'Per partition statistics in /proc/partitions' CONFIG_BLK_STATS
- bool 'XenoLinux virtual block device support' CONFIG_XEN_VBD
- define_bool CONFIG_BLK_DEV_HD n
- endmenu
-else
- mainmenu_option next_comment
- comment 'ATA/IDE/MFM/RLL support'
-
- tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
-
- if [ "$CONFIG_IDE" != "n" ]; then
- source drivers/ide/Config.in
- else
- define_bool CONFIG_BLK_DEV_HD n
- fi
- endmenu
-
- mainmenu_option next_comment
- comment 'SCSI support'
-
- tristate 'SCSI support' CONFIG_SCSI
-
- if [ "$CONFIG_SCSI" != "n" ]; then
- source drivers/scsi/Config.in
- fi
- endmenu
-
- source drivers/message/fusion/Config.in
-
- source drivers/ieee1394/Config.in
-
- source drivers/message/i2o/Config.in
-
- if [ "$CONFIG_NET" = "y" ]; then
- mainmenu_option next_comment
- comment 'Network device support'
-
- bool 'Network device support' CONFIG_NETDEVICES
- if [ "$CONFIG_NETDEVICES" = "y" ]; then
- source drivers/net/Config.in
- if [ "$CONFIG_ATM" = "y" -o "$CONFIG_ATM" = "m" ]; then
- source drivers/atm/Config.in
- fi
- fi
- endmenu
- fi
-
- source net/ax25/Config.in
-
- source net/irda/Config.in
-
- mainmenu_option next_comment
- comment 'ISDN subsystem'
- if [ "$CONFIG_NET" != "n" ]; then
- tristate 'ISDN support' CONFIG_ISDN
- if [ "$CONFIG_ISDN" != "n" ]; then
- source drivers/isdn/Config.in
- fi
- fi
- endmenu
-
- if [ "$CONFIG_ISA" = "y" ]; then
- mainmenu_option next_comment
- comment 'Old CD-ROM drivers (not SCSI, not IDE)'
-
- bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
- if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
- source drivers/cdrom/Config.in
- fi
- endmenu
- fi
-
- #
- # input before char - char/joystick depends on it. As does USB.
- #
- source drivers/input/Config.in
-fi
-
-source drivers/char/Config.in
-
-if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
- source drivers/media/Config.in
-fi
-
-source fs/Config.in
-
-mainmenu_option next_comment
-comment 'Console drivers'
-
-bool 'Xen console support' CONFIG_XEN_CONSOLE
-
-if [ "$CONFIG_VT" = "y" ]; then
- bool 'VGA text console' CONFIG_VGA_CONSOLE
- bool 'Dummy console' CONFIG_DUMMY_CONSOLE
- if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
- bool 'Video mode selection support' CONFIG_VIDEO_SELECT
- if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- tristate 'MDA text console (dual-headed) (EXPERIMENTAL)' CONFIG_MDA_CONSOLE
- source drivers/video/Config.in
- fi
- fi
-fi
-endmenu
-
-if [ "$CONFIG_XEN_PHYSDEV_ACCESS" = "y" ]; then
- mainmenu_option next_comment
- comment 'Sound'
-
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
- source drivers/sound/Config.in
- fi
- endmenu
-
- source drivers/usb/Config.in
-
- source net/bluetooth/Config.in
-fi
-
-mainmenu_option next_comment
-comment 'Kernel hacking'
-
-bool 'Kernel debugging' CONFIG_DEBUG_KERNEL
-if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then
- bool ' Check for stack overflows' CONFIG_DEBUG_STACKOVERFLOW
- bool ' Debug high memory support' CONFIG_DEBUG_HIGHMEM
- bool ' Debug memory allocations' CONFIG_DEBUG_SLAB
- bool ' Memory mapped I/O debugging' CONFIG_DEBUG_IOVIRT
- bool ' Magic SysRq key' CONFIG_MAGIC_SYSRQ
- bool ' Spinlock debugging' CONFIG_DEBUG_SPINLOCK
- bool ' Verbose BUG() reporting (adds 70K)' CONFIG_DEBUG_BUGVERBOSE
- bool ' Load all symbols for debugging' CONFIG_KALLSYMS
- bool ' Compile the kernel with frame pointers' CONFIG_FRAME_POINTER
-fi
-
-int 'Kernel messages buffer length shift (0 = default)' CONFIG_LOG_BUF_SHIFT 0
-
-endmenu
-
-source crypto/Config.in
-source lib/Config.in
diff --git a/xenolinux-2.4.25-sparse/arch/xen/defconfig b/xenolinux-2.4.25-sparse/arch/xen/defconfig
deleted file mode 100644
index be28c82d7f..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/defconfig
+++ /dev/null
@@ -1,459 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_XEN=y
-CONFIG_X86=y
-CONFIG_ISA=y
-# CONFIG_SBUS is not set
-CONFIG_UID16=y
-
-#
-# Xenolinux options
-#
-# support for privileged domains
-CONFIG_XEN_PRIVILEGED_GUEST=y
-# CONFIG_XEN_PHYSDEV_ACCESS is not set
-# on-demand timer setting (taken from s390 patch set)
-CONFIG_NO_IDLE_HZ=y
-
-#
-# Code maturity level options
-#
-# CONFIG_EXPERIMENTAL is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODVERSIONS=y
-CONFIG_KMOD=y
-
-#
-# Processor type and features
-#
-CONFIG_M686=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK7 is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_PGE=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_X86_L1_CACHE_SHIFT=5
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-
-#
-# General setup
-#
-CONFIG_NET=y
-# CONFIG_PCI is not set
-# CONFIG_PCI_NAMES is not set
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_OOM_KILLER is not set
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_FTP=y
-# CONFIG_IP_NF_AMANDA is not set
-CONFIG_IP_NF_TFTP=y
-CONFIG_IP_NF_IRC=y
-CONFIG_IP_NF_IPTABLES=y
-# CONFIG_IP_NF_MATCH_LIMIT is not set
-# CONFIG_IP_NF_MATCH_MAC is not set
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-# CONFIG_IP_NF_MATCH_MARK is not set
-# CONFIG_IP_NF_MATCH_MULTIPORT is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-# CONFIG_IP_NF_MATCH_AH_ESP is not set
-# CONFIG_IP_NF_MATCH_LENGTH is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_MATCH_TCPMSS is not set
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=y
-CONFIG_IP_NF_MATCH_CONNTRACK=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_IP_NF_NAT=y
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-# CONFIG_IP_NF_NAT_LOCAL is not set
-CONFIG_IP_NF_NAT_IRC=y
-CONFIG_IP_NF_NAT_FTP=y
-CONFIG_IP_NF_NAT_TFTP=y
-# CONFIG_IP_NF_MANGLE is not set
-CONFIG_IP_NF_TARGET_LOG=y
-CONFIG_IP_NF_TARGET_ULOG=y
-# CONFIG_IP_NF_TARGET_TCPMSS is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK is not set
-# CONFIG_DECNET is not set
-# CONFIG_BRIDGE is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_NBD=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_STATS is not set
-CONFIG_XEN_VBD=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=y
-CONFIG_PSMOUSE=y
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-# CONFIG_INPUT_NS558 is not set
-# CONFIG_INPUT_LIGHTNING is not set
-# CONFIG_INPUT_PCIGAME is not set
-# CONFIG_INPUT_CS461X is not set
-# CONFIG_INPUT_EMU10K1 is not set
-# CONFIG_INPUT_SERIO is not set
-# CONFIG_INPUT_SERPORT is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_ANALOG is not set
-# CONFIG_INPUT_A3D is not set
-# CONFIG_INPUT_ADI is not set
-# CONFIG_INPUT_COBRA is not set
-# CONFIG_INPUT_GF2K is not set
-# CONFIG_INPUT_GRIP is not set
-# CONFIG_INPUT_INTERACT is not set
-# CONFIG_INPUT_TMDC is not set
-# CONFIG_INPUT_SIDEWINDER is not set
-# CONFIG_INPUT_IFORCE_USB is not set
-# CONFIG_INPUT_IFORCE_232 is not set
-# CONFIG_INPUT_WARRIOR is not set
-# CONFIG_INPUT_MAGELLAN is not set
-# CONFIG_INPUT_SPACEORB is not set
-# CONFIG_INPUT_SPACEBALL is not set
-# CONFIG_INPUT_STINGER is not set
-# CONFIG_INPUT_DB9 is not set
-# CONFIG_INPUT_GAMECON is not set
-# CONFIG_INPUT_TURBOGRAFX is not set
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_IPMI_PANIC_EVENT is not set
-# CONFIG_IPMI_DEVICE_INTERFACE is not set
-# CONFIG_IPMI_KCS is not set
-# CONFIG_IPMI_WATCHDOG is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_SCx200 is not set
-# CONFIG_SCx200_GPIO is not set
-# CONFIG_AMD_RNG is not set
-# CONFIG_INTEL_RNG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_AMD_PM768 is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-
-#
-# Direct Rendering Manager (XFree86 DRI support)
-#
-# CONFIG_DRM is not set
-# CONFIG_MWAVE is not set
-# CONFIG_OBMOUSE is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_QFMT_V2 is not set
-CONFIG_AUTOFS_FS=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# 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_BEFS_DEBUG is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=y
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_UMSDOS_FS=y
-CONFIG_VFAT_FS=y
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW 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=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=y
-# CONFIG_SYSV_FS 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
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_TRACE is not set
-# CONFIG_XFS_DEBUG is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_TCP is not set
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-# CONFIG_SMB_FS 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_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_ZISOFS_FS=y
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SMB_NLS is not set
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8559-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Console drivers
-#
-CONFIG_XEN_CONSOLE=y
-CONFIG_VGA_CONSOLE=y
-CONFIG_DUMMY_CONSOLE=y
-
-#
-# Kernel hacking
-#
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_STACKOVERFLOW is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_IOVIRT is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_KALLSYMS=y
-# CONFIG_FRAME_POINTER is not set
-CONFIG_LOG_BUF_SHIFT=0
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-# CONFIG_ZLIB_DEFLATE is not set
diff --git a/xenolinux-2.4.25-sparse/arch/xen/defconfig-physdev b/xenolinux-2.4.25-sparse/arch/xen/defconfig-physdev
deleted file mode 100644
index 8255e6c9ff..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/defconfig-physdev
+++ /dev/null
@@ -1,1005 +0,0 @@
-#
-# Automatically generated make config: don't edit
-#
-CONFIG_XEN=y
-CONFIG_X86=y
-CONFIG_ISA=y
-# CONFIG_SBUS is not set
-CONFIG_UID16=y
-
-#
-# Xen
-#
-CONFIG_XEN_PRIVILEGED_GUEST=y
-CONFIG_XEN_PHYSDEV_ACCESS=y
-CONFIG_NO_IDLE_HZ=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODVERSIONS=y
-CONFIG_KMOD=y
-
-#
-# Processor type and features
-#
-CONFIG_M686=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_XADD=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_PGE=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_X86_L1_CACHE_SHIFT=5
-
-#
-# General setup
-#
-CONFIG_NET=y
-CONFIG_PCI=y
-CONFIG_PCI_NAMES=y
-CONFIG_HOTPLUG=y
-
-#
-# PCMCIA/CardBus support
-#
-# CONFIG_PCMCIA is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-# CONFIG_HOTPLUG_PCI_COMPAQ is not set
-# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
-CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_OOM_KILLER is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_PC_PCMCIA is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_IP22 is not set
-# CONFIG_PARPORT_OTHER is not set
-CONFIG_PARPORT_1284=y
-
-#
-# Plug and Play configuration
-#
-CONFIG_PNP=y
-# CONFIG_ISAPNP is not set
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# 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_CISS_SCSI_TAPE is not set
-# CONFIG_CISS_MONITOR_THREAD is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_NBD=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_STATS is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=y
-CONFIG_MD_LINEAR=y
-CONFIG_MD_RAID0=y
-CONFIG_MD_RAID1=y
-CONFIG_MD_RAID5=y
-CONFIG_MD_MULTIPATH=y
-CONFIG_BLK_DEV_LVM=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_FILTER=y
-CONFIG_UNIX=y
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_INET_ECN is not set
-# CONFIG_SYN_COOKIES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_FTP=y
-# CONFIG_IP_NF_AMANDA is not set
-CONFIG_IP_NF_TFTP=y
-CONFIG_IP_NF_IRC=y
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-# CONFIG_IP_NF_MATCH_LIMIT is not set
-# CONFIG_IP_NF_MATCH_MAC is not set
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-# CONFIG_IP_NF_MATCH_MARK is not set
-# CONFIG_IP_NF_MATCH_MULTIPORT is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-# CONFIG_IP_NF_MATCH_AH_ESP is not set
-# CONFIG_IP_NF_MATCH_LENGTH is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_MATCH_TCPMSS is not set
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=y
-CONFIG_IP_NF_MATCH_CONNTRACK=y
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=y
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-# CONFIG_IP_NF_NAT_LOCAL is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=y
-CONFIG_IP_NF_NAT_FTP=y
-CONFIG_IP_NF_NAT_TFTP=y
-# CONFIG_IP_NF_MANGLE is not set
-CONFIG_IP_NF_TARGET_LOG=y
-CONFIG_IP_NF_TARGET_ULOG=y
-# CONFIG_IP_NF_TARGET_TCPMSS is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_KHTTPD is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-CONFIG_IPV6_SCTP__=y
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_VLAN_8021Q is not set
-
-#
-#
-#
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# Appletalk devices
-#
-# CONFIG_DEV_APPLETALK 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
-# CONFIG_NET_FASTROUTE is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-
-#
-# ATA/IDE/MFM/RLL support
-#
-CONFIG_IDE=y
-
-#
-# IDE, ATA and ATAPI Block devices
-#
-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_HD is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_IDEDISK_STROKE=y
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=y
-CONFIG_BLK_DEV_IDEFLOPPY=y
-CONFIG_BLK_DEV_IDESCSI=y
-CONFIG_IDE_TASK_IOCTL=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_BLK_DEV_CMD640=y
-CONFIG_BLK_DEV_CMD640_ENHANCED=y
-# CONFIG_BLK_DEV_ISAPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_BLK_DEV_GENERIC=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-CONFIG_BLK_DEV_OFFBOARD=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_PCI_WIP is not set
-CONFIG_BLK_DEV_ADMA100=y
-CONFIG_BLK_DEV_AEC62XX=y
-CONFIG_BLK_DEV_ALI15X3=y
-CONFIG_WDC_ALI15X3=y
-CONFIG_BLK_DEV_AMD74XX=y
-CONFIG_AMD74XX_OVERRIDE=y
-CONFIG_BLK_DEV_CMD64X=y
-CONFIG_BLK_DEV_TRIFLEX=y
-CONFIG_BLK_DEV_CY82C693=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_PIIX=y
-CONFIG_BLK_DEV_NS87415=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_PDC202XX_OLD=y
-CONFIG_PDC202XX_BURST=y
-CONFIG_BLK_DEV_PDC202XX_NEW=y
-CONFIG_PDC202XX_FORCE=y
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_SC1200=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=y
-CONFIG_BLK_DEV_VIA82CXXX=y
-CONFIG_IDE_CHIPSETS=y
-
-#
-# Note: most of these also require special kernel boot parameters
-#
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_PDC4030 is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_DMA_NONPCI is not set
-CONFIG_BLK_DEV_PDC202XX=y
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-# CONFIG_BLK_DEV_ATARAID_SII is not set
-
-#
-# SCSI support
-#
-CONFIG_SCSI=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-CONFIG_SD_EXTRA_DEVS=40
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_DEBUG_QUEUES is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-CONFIG_SCSI_AACRAID=y
-# CONFIG_SCSI_AIC7XXX is not set
-CONFIG_SCSI_AIC79XX=y
-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
-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=y
-CONFIG_AIC79XX_DEBUG_MASK=0
-# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-CONFIG_SCSI_MEGARAID=y
-# CONFIG_SCSI_MEGARAID2 is not set
-CONFIG_SCSI_BUSLOGIC=y
-# CONFIG_SCSI_OMIT_FLASHPOINT is not set
-CONFIG_SCSI_CPQFCTS=y
-# CONFIG_SCSI_DMX3191D is not set
-CONFIG_SCSI_DTC3280=y
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NCR53C7xx is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SIM710 is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC390T is not set
-# 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
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_BOOT is not set
-# CONFIG_FUSION_ISENSE is not set
-# CONFIG_FUSION_CTL is not set
-# CONFIG_FUSION_LAN is not set
-
-#
-# IEEE 1394 (FireWire) support (EXPERIMENTAL)
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_PCI 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
-#
-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_ETHERTAP is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-# CONFIG_SUNLANCE is not set
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNBMAC is not set
-# CONFIG_SUNQE is not set
-# CONFIG_SUNGEM is not set
-CONFIG_NET_VENDOR_3COM=y
-# CONFIG_EL1 is not set
-# CONFIG_EL2 is not set
-# CONFIG_ELPLUS is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-# CONFIG_ELMC is not set
-# CONFIG_ELMC_II is not set
-CONFIG_VORTEX=y
-# CONFIG_TYPHOON 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_HP100 is not set
-# CONFIG_NET_ISA is not set
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=y
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_CS89x0 is not set
-CONFIG_TULIP=y
-# CONFIG_TULIP_MWI is not set
-# CONFIG_TULIP_MMIO is not set
-# CONFIG_DE4X5 is not set
-# CONFIG_DGRS is not set
-# CONFIG_DM9102 is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPRO100_PIO is not set
-# CONFIG_E100 is not set
-# CONFIG_LNE390 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NE3210 is not set
-# CONFIG_ES3210 is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNDANCE_MMIO is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_RHINE_MMIO is not set
-# CONFIG_WINBOND_840 is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=y
-# CONFIG_ACENIC_OMIT_TIGON_I is not set
-# CONFIG_DL2K is not set
-CONFIG_E1000=y
-# CONFIG_E1000_NAPI is not set
-# CONFIG_MYRI_SBUS is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SK98LIN is not set
-CONFIG_TIGON3=y
-# 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)
-#
-# 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
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-
-#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Input core support
-#
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_KEYBDEV is not set
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=y
-CONFIG_PSMOUSE=y
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-# CONFIG_MK712_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_INPUT_GAMEPORT is not set
-
-#
-# Input core support is needed for gameports
-#
-
-#
-# Input core support is needed for joysticks
-#
-# CONFIG_QIC02_TAPE is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_IPMI_PANIC_EVENT is not set
-# CONFIG_IPMI_DEVICE_INTERFACE is not set
-# CONFIG_IPMI_KCS is not set
-# CONFIG_IPMI_WATCHDOG is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_SCx200 is not set
-# CONFIG_SCx200_GPIO is not set
-# CONFIG_AMD_RNG is not set
-# CONFIG_INTEL_RNG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_AMD_PM768 is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-
-#
-# Direct Rendering Manager (XFree86 DRI support)
-#
-# CONFIG_DRM is not set
-# CONFIG_MWAVE is not set
-# CONFIG_OBMOUSE is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_QFMT_V2 is not set
-CONFIG_AUTOFS_FS=y
-CONFIG_AUTOFS4_FS=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# 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_BEFS_DEBUG is not set
-# CONFIG_BFS_FS is not set
-CONFIG_EXT3_FS=y
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_UMSDOS_FS=y
-CONFIG_VFAT_FS=y
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-CONFIG_TMPFS=y
-CONFIG_RAMFS=y
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW 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=y
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=y
-# CONFIG_SYSV_FS 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
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_TRACE is not set
-# CONFIG_XFS_DEBUG is not set
-
-#
-# Network File Systems
-#
-# CONFIG_CODA_FS is not set
-# CONFIG_INTERMEZZO_FS is not set
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_ROOT_NFS=y
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_TCP is not set
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-# CONFIG_SMB_FS 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_NLS is not set
-# CONFIG_NCPFS_EXTRAS is not set
-CONFIG_ZISOFS_FS=y
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SMB_NLS is not set
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_DEFAULT="iso8559-1"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Console drivers
-#
-CONFIG_XEN_CONSOLE=y
-CONFIG_VGA_CONSOLE=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_VIDEO_SELECT is not set
-# CONFIG_MDA_CONSOLE is not set
-
-#
-# Frame-buffer support
-#
-# CONFIG_FB is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB=y
-CONFIG_USB_DEBUG=y
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-CONFIG_USB_UHCI=y
-# CONFIG_USB_UHCI_ALT is not set
-CONFIG_USB_OHCI=y
-# CONFIG_USB_SL811HS_ALT is not set
-# CONFIG_USB_SL811HS is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_AUDIO is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_BLUETOOTH is not set
-# CONFIG_USB_MIDI is not set
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_HP8200e is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# USB Human Interface Devices (HID)
-#
-# CONFIG_USB_HID is not set
-
-#
-# Input core support is needed for USB HID input layer or HIDBP support
-#
-# CONFIG_USB_HIDINPUT is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_HPUSBSCSI is not set
-
-#
-# USB Multimedia devices
-#
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CDCETHER is not set
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_TIGL is not set
-# CONFIG_USB_BRLVGER is not set
-# CONFIG_USB_LCD is not set
-
-#
-# Support for USB gadgets
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# Bluetooth support
-#
-# CONFIG_BLUEZ is not set
-
-#
-# Kernel hacking
-#
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_STACKOVERFLOW is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_IOVIRT is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_KALLSYMS=y
-# CONFIG_FRAME_POINTER is not set
-CONFIG_LOG_BUF_SHIFT=0
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-# CONFIG_CRC32 is not set
-CONFIG_ZLIB_INFLATE=y
-# CONFIG_ZLIB_DEFLATE is not set
-# CONFIG_FW_LOADER is not set
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/Makefile
deleted file mode 100644
index 9fb2227978..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := balloon.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/balloon.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/balloon.c
deleted file mode 100644
index aee0e4cf99..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/balloon/balloon.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/******************************************************************************
- * balloon.c
- *
- * Xen balloon driver - enables returning/claiming memory to/from Xen.
- *
- * Copyright (c) 2003, B Dragovic
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/errno.h>
-#include <asm/xen_proc.h>
-
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/smp_lock.h>
-#include <linux/pagemap.h>
-
-#include <asm/hypervisor.h>
-#include <asm/pgalloc.h>
-#include <asm/pgtable.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-
-#include <asm/hypervisor-ifs/dom_mem_ops.h>
-
-/* USER DEFINES -- THESE SHOULD BE COPIED TO USER-SPACE TOOLS */
-#define USER_INFLATE_BALLOON 1 /* return mem to hypervisor */
-#define USER_DEFLATE_BALLOON 2 /* claim mem from hypervisor */
-typedef struct user_balloon_op {
- unsigned int op;
- unsigned long size;
-} user_balloon_op_t;
-/* END OF USER DEFINE */
-
-/* Dead entry written into ballon-owned entries in the PMT. */
-#define DEAD 0xdeadbeef
-
-static struct proc_dir_entry *balloon_pde;
-unsigned long credit;
-
-static inline pte_t *get_ptep(unsigned long addr)
-{
- pgd_t *pgd; pmd_t *pmd; pte_t *ptep;
- pgd = pgd_offset_k(addr);
-
- if ( pgd_none(*pgd) || pgd_bad(*pgd) ) BUG();
-
- pmd = pmd_offset(pgd, addr);
- if ( pmd_none(*pmd) || pmd_bad(*pmd) ) BUG();
-
- ptep = pte_offset(pmd, addr);
-
- return ptep;
-}
-
-/* main function for relinquishing bit of memory */
-static unsigned long inflate_balloon(unsigned long num_pages)
-{
- dom_mem_op_t dom_mem_op;
- unsigned long *parray;
- unsigned long *currp;
- unsigned long curraddr;
- unsigned long ret = 0;
- unsigned long vaddr;
- unsigned long i, j;
-
- parray = (unsigned long *)kmalloc(num_pages *
- sizeof(unsigned long), GFP_KERNEL);
- currp = parray;
-
- for ( i = 0; i < num_pages; i++ )
- {
- /* try to obtain a free page, has to be done with GFP_ATOMIC
- * as we do not want to sleep indefinately.
- */
- vaddr = __get_free_page(GFP_ATOMIC);
-
- /* if allocation fails, free all reserved pages */
- if(!vaddr){
- printk("Unable to inflate balloon by %ld, only %ld pages free.",
- num_pages, i);
- currp = parray;
- for(j = 0; j < i; j++){
- free_page(*currp++);
- }
- goto cleanup;
- }
-
- *currp++ = vaddr;
- }
-
-
- currp = parray;
- for ( i = 0; i < num_pages; i++ )
- {
- curraddr = *currp;
- *currp = virt_to_machine(*currp) >> PAGE_SHIFT;
- queue_l1_entry_update(get_ptep(curraddr), 0);
- phys_to_machine_mapping[__pa(curraddr) >> PAGE_SHIFT] = DEAD;
- currp++;
- }
-
- XEN_flush_page_update_queue();
-
- dom_mem_op.op = MEMOP_RESERVATION_DECREASE;
- dom_mem_op.u.decrease.size = num_pages;
- dom_mem_op.u.decrease.pages = parray;
- if ( (ret = HYPERVISOR_dom_mem_op(&dom_mem_op)) != num_pages )
- {
- printk("Unable to inflate balloon, error %lx\n", ret);
- goto cleanup;
- }
-
- credit += num_pages;
- ret = num_pages;
-
- cleanup:
- kfree(parray);
-
- return ret;
-}
-
-/* install new mem pages obtained by deflate_balloon. function walks
- * phys->machine mapping table looking for DEAD entries and populates
- * them.
- */
-static unsigned long process_new_pages(unsigned long * parray,
- unsigned long num)
-{
- /* currently, this function is rather simplistic as
- * it is assumed that domain reclaims only number of
- * pages previously released. this is to change soon
- * and the code to extend page tables etc. will be
- * incorporated here.
- */
-
- unsigned long tot_pages = start_info.nr_pages;
- unsigned long * curr = parray;
- unsigned long num_installed;
- unsigned long i;
-
- num_installed = 0;
- for ( i = 0; (i < tot_pages) && (num_installed < num); i++ )
- {
- if ( phys_to_machine_mapping[i] == DEAD )
- {
- phys_to_machine_mapping[i] = *curr;
- queue_l1_entry_update(
- (pte_t *)((i << PAGE_SHIFT) | MMU_MACHPHYS_UPDATE), i);
- queue_l1_entry_update(
- get_ptep((unsigned long)__va(i << PAGE_SHIFT)),
- ((*curr) << PAGE_SHIFT) | pgprot_val(PAGE_KERNEL));
-
- *curr = (unsigned long)__va(i << PAGE_SHIFT);
- curr++;
- num_installed++;
- }
- }
-
- /* now, this is tricky (and will also change for machine addrs that
- * are mapped to not previously released addresses). we free pages
- * that were allocated by get_free_page (the mappings are different
- * now, of course).
- */
- curr = parray;
- for ( i = 0; i < num_installed; i++ )
- {
- free_page(*curr);
- curr++;
- }
-
- return num_installed;
-}
-
-unsigned long deflate_balloon(unsigned long num_pages)
-{
- dom_mem_op_t dom_mem_op;
- unsigned long ret;
- unsigned long * parray;
-
- printk(KERN_ALERT "bd240 debug: deflate balloon called for %lx pages\n", num_pages);
-
- if ( num_pages > credit )
- {
- printk("Can not allocate more pages than previously released.\n");
- return -EAGAIN;
- }
-
- parray = (unsigned long *)kmalloc(num_pages * sizeof(unsigned long),
- GFP_KERNEL);
-
- dom_mem_op.op = MEMOP_RESERVATION_INCREASE;
- dom_mem_op.u.increase.size = num_pages;
- dom_mem_op.u.increase.pages = parray;
- if((ret = HYPERVISOR_dom_mem_op(&dom_mem_op)) != num_pages){
- printk("Unable to deflate balloon, error %lx\n", ret);
- goto cleanup;
- }
-
- if((ret = process_new_pages(parray, num_pages)) < num_pages){
- printk("Unable to deflate balloon by specified %lx pages, only %lx.\n",
- num_pages, ret);
- goto cleanup;
- }
-
- ret = num_pages;
- credit -= num_pages;
-
- cleanup:
- kfree(parray);
-
- return ret;
-}
-
-static int balloon_write(struct file *file, const char *buffer,
- u_long count, void *data)
-{
- user_balloon_op_t bop;
-
- /* Only admin can play with the balloon :) */
- if ( !capable(CAP_SYS_ADMIN) )
- return -EPERM;
-
- if ( copy_from_user(&bop, buffer, sizeof(bop)) )
- return -EFAULT;
-
- switch ( bop.op )
- {
- case USER_INFLATE_BALLOON:
- if ( inflate_balloon(bop.size) < bop.size )
- return -EAGAIN;
- break;
-
- case USER_DEFLATE_BALLOON:
- deflate_balloon(bop.size);
- break;
-
- default:
- printk("Unknown command to balloon driver.");
- return -EFAULT;
- }
-
- return sizeof(bop);
-}
-
-/*
- * main balloon driver initialization function.
- */
-static int __init init_module(void)
-{
- printk(KERN_ALERT "Starting Xen Balloon driver\n");
-
- credit = 0;
-
- balloon_pde = create_xen_proc_entry("balloon", 0600);
- if ( balloon_pde == NULL )
- {
- printk(KERN_ALERT "Unable to create balloon driver proc entry!");
- return -1;
- }
-
- balloon_pde->write_proc = balloon_write;
-
- return 0;
-}
-
-static void __exit cleanup_module(void)
-{
- if ( balloon_pde != NULL )
- {
- remove_xen_proc_entry("balloon");
- balloon_pde = NULL;
- }
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
-
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/block/Makefile
deleted file mode 100644
index 35986ca54a..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := block.o vbd.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.c
deleted file mode 100644
index d00dd98f7b..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/******************************************************************************
- * block.c
- *
- * Xenolinux virtual block-device driver.
- *
- * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
- * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
- */
-
-#include "block.h"
-#include <linux/blk.h>
-#include <linux/cdrom.h>
-#include <linux/tqueue.h>
-#include <linux/sched.h>
-#include <scsi/scsi.h>
-
-#include <linux/interrupt.h>
-
-typedef unsigned char byte; /* from linux/ide.h */
-
-#define STATE_ACTIVE 0
-#define STATE_SUSPENDED 1
-#define STATE_CLOSED 2
-static unsigned int state = STATE_SUSPENDED;
-
-/* Dynamically-mapped IRQs. */
-static int xlblk_response_irq, xlblk_update_irq;
-
-static blk_ring_t *blk_ring;
-static BLK_RING_IDX resp_cons; /* Response consumer for comms ring. */
-static BLK_RING_IDX req_prod; /* Private request producer. */
-
-/* We plug the I/O ring if the driver is suspended or if the ring is full. */
-#define RING_PLUGGED (((req_prod - resp_cons) == BLK_RING_SIZE) || \
- (state != STATE_ACTIVE))
-
-
-/*
- * Request queues with outstanding work, but ring is currently full.
- * We need no special lock here, as we always access this with the
- * io_request_lock held. We only need a small maximum list.
- */
-#define MAX_PENDING 8
-static request_queue_t *pending_queues[MAX_PENDING];
-static int nr_pending;
-
-static kdev_t sg_dev;
-static int sg_operation = -1;
-static unsigned long sg_next_sect;
-#define DISABLE_SCATTERGATHER() (sg_operation = -1)
-
-static inline void signal_requests_to_xen(void)
-{
- block_io_op_t op;
-
- DISABLE_SCATTERGATHER();
- blk_ring->req_prod = req_prod;
-
- op.cmd = BLOCK_IO_OP_SIGNAL;
- HYPERVISOR_block_io_op(&op);
- return;
-}
-
-
-/*
- * xlblk_update_int/update-vbds_task - handle VBD update events from Xen
- *
- * Schedule a task for keventd to run, which will update the VBDs and perform
- * the corresponding updates to our view of VBD state, so the XenoLinux will
- * respond to changes / additions / deletions to the set of VBDs automatically.
- */
-static struct tq_struct update_tq;
-static void update_vbds_task(void *unused)
-{
- xlvbd_update_vbds();
-}
-static void xlblk_update_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- update_tq.routine = update_vbds_task;
- schedule_task(&update_tq);
-}
-
-
-int xen_block_open(struct inode *inode, struct file *filep)
-{
- short xldev = inode->i_rdev;
- struct gendisk *gd = get_gendisk(xldev);
- xl_disk_t *disk = xldev_to_xldisk(inode->i_rdev);
- short minor = MINOR(xldev);
-
- if ( gd->part[minor].nr_sects == 0 )
- {
- /*
- * Device either doesn't exist, or has zero capacity; we use a few
- * cheesy heuristics to return the relevant error code
- */
- if ( (gd->sizes[minor >> gd->minor_shift] != 0) ||
- ((minor & (gd->max_p - 1)) != 0) )
- {
- /*
- * We have a real device, but no such partition, or we just have a
- * partition number so guess this is the problem.
- */
- return -ENXIO; /* no such device or address */
- }
- else if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE )
- {
- /* This is a removable device => assume that media is missing. */
- return -ENOMEDIUM; /* media not present (this is a guess) */
- }
- else
- {
- /* Just go for the general 'no such device' error. */
- return -ENODEV; /* no such device */
- }
- }
-
- /* Update of usage count is protected by per-device semaphore. */
- disk->usage++;
-
- return 0;
-}
-
-
-int xen_block_release(struct inode *inode, struct file *filep)
-{
- xl_disk_t *disk = xldev_to_xldisk(inode->i_rdev);
-
- /*
- * When usage drops to zero it may allow more VBD updates to occur.
- * Update of usage count is protected by a per-device semaphore.
- */
- if ( --disk->usage == 0 )
- {
- update_tq.routine = update_vbds_task;
- schedule_task(&update_tq);
- }
-
- return 0;
-}
-
-
-int xen_block_ioctl(struct inode *inode, struct file *filep,
- unsigned command, unsigned long argument)
-{
- kdev_t dev = inode->i_rdev;
- struct hd_geometry *geo = (struct hd_geometry *)argument;
- struct gendisk *gd;
- struct hd_struct *part;
- int i;
-
- /* NB. No need to check permissions. That is done for us. */
-
- DPRINTK_IOCTL("command: 0x%x, argument: 0x%lx, dev: 0x%04x\n",
- command, (long) argument, dev);
-
- gd = get_gendisk(dev);
- part = &gd->part[MINOR(dev)];
-
- switch ( command )
- {
- case BLKGETSIZE:
- DPRINTK_IOCTL(" BLKGETSIZE: %x %lx\n", BLKGETSIZE, part->nr_sects);
- return put_user(part->nr_sects, (unsigned long *) argument);
-
- case BLKGETSIZE64:
- DPRINTK_IOCTL(" BLKGETSIZE64: %x %llx\n", BLKGETSIZE64,
- (u64)part->nr_sects * 512);
- return put_user((u64)part->nr_sects * 512, (u64 *) argument);
-
- case BLKRRPART: /* re-read partition table */
- DPRINTK_IOCTL(" BLKRRPART: %x\n", BLKRRPART);
- return xen_block_revalidate(dev);
-
- case BLKSSZGET:
- return hardsect_size[MAJOR(dev)][MINOR(dev)];
-
- case BLKBSZGET: /* get block size */
- DPRINTK_IOCTL(" BLKBSZGET: %x\n", BLKBSZGET);
- break;
-
- case BLKBSZSET: /* set block size */
- DPRINTK_IOCTL(" BLKBSZSET: %x\n", BLKBSZSET);
- break;
-
- case BLKRASET: /* set read-ahead */
- DPRINTK_IOCTL(" BLKRASET: %x\n", BLKRASET);
- break;
-
- case BLKRAGET: /* get read-ahead */
- DPRINTK_IOCTL(" BLKRAFET: %x\n", BLKRAGET);
- break;
-
- case HDIO_GETGEO:
- /* note: these values are complete garbage */
- DPRINTK_IOCTL(" HDIO_GETGEO: %x\n", HDIO_GETGEO);
- if (!argument) return -EINVAL;
- if (put_user(0x00, (unsigned long *) &geo->start)) return -EFAULT;
- if (put_user(0xff, (byte *)&geo->heads)) return -EFAULT;
- if (put_user(0x3f, (byte *)&geo->sectors)) return -EFAULT;
- if (put_user(0x106, (unsigned short *)&geo->cylinders)) return -EFAULT;
- return 0;
-
- case HDIO_GETGEO_BIG:
- /* note: these values are complete garbage */
- DPRINTK_IOCTL(" HDIO_GETGEO_BIG: %x\n", HDIO_GETGEO_BIG);
- if (!argument) return -EINVAL;
- if (put_user(0x00, (unsigned long *) &geo->start)) return -EFAULT;
- if (put_user(0xff, (byte *)&geo->heads)) return -EFAULT;
- if (put_user(0x3f, (byte *)&geo->sectors)) return -EFAULT;
- if (put_user(0x106, (unsigned int *) &geo->cylinders)) return -EFAULT;
- return 0;
-
- case CDROMMULTISESSION:
- DPRINTK("FIXME: support multisession CDs later\n");
- for ( i = 0; i < sizeof(struct cdrom_multisession); i++ )
- if ( put_user(0, (byte *)(argument + i)) ) return -EFAULT;
- return 0;
-
- case SCSI_IOCTL_GET_BUS_NUMBER:
- DPRINTK("FIXME: SCSI_IOCTL_GET_BUS_NUMBER ioctl in Xen blkdev");
- return -ENOSYS;
-
- default:
- printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n", command);
- return -ENOSYS;
- }
-
- return 0;
-}
-
-/* check media change: should probably do something here in some cases :-) */
-int xen_block_check(kdev_t dev)
-{
- DPRINTK("xen_block_check\n");
- return 0;
-}
-
-int xen_block_revalidate(kdev_t dev)
-{
- struct block_device *bd;
- struct gendisk *gd;
- xl_disk_t *disk;
- unsigned long capacity;
- int i, rc = 0;
-
- if ( (bd = bdget(dev)) == NULL )
- return -EINVAL;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((gd = get_gendisk(dev)) == NULL) ||
- ((disk = xldev_to_xldisk(dev)) == NULL) ||
- ((capacity = gd->part[MINOR(dev)].nr_sects) == 0) )
- {
- rc = -EINVAL;
- goto out;
- }
-
- if ( disk->usage > 1 )
- {
- rc = -EBUSY;
- goto out;
- }
-
- /* Only reread partition table if VBDs aren't mapped to partitions. */
- if ( !(gd->flags[MINOR(dev) >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) )
- {
- for ( i = gd->max_p - 1; i >= 0; i-- )
- {
- invalidate_device(dev+i, 1);
- gd->part[MINOR(dev+i)].start_sect = 0;
- gd->part[MINOR(dev+i)].nr_sects = 0;
- gd->sizes[MINOR(dev+i)] = 0;
- }
-
- grok_partitions(gd, MINOR(dev)>>gd->minor_shift, gd->max_p, capacity);
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-
-/*
- * hypervisor_request
- *
- * request block io
- *
- * id: for guest use only.
- * operation: XEN_BLOCK_{READ,WRITE,PROBE,VBD*}
- * buffer: buffer to read/write into. this should be a
- * virtual address in the guest os.
- */
-static int hypervisor_request(unsigned long id,
- int operation,
- char * buffer,
- unsigned long sector_number,
- unsigned short nr_sectors,
- kdev_t device)
-{
- unsigned long buffer_ma = phys_to_machine(virt_to_phys(buffer));
- struct gendisk *gd;
- blk_ring_req_entry_t *req;
- struct buffer_head *bh;
-
- if ( unlikely(nr_sectors >= (1<<9)) )
- BUG();
- if ( unlikely((buffer_ma & ((1<<9)-1)) != 0) )
- BUG();
-
- if ( unlikely(state == STATE_CLOSED) )
- return 1;
-
- switch ( operation )
- {
-
- case XEN_BLOCK_READ:
- case XEN_BLOCK_WRITE:
- gd = get_gendisk(device);
-
- /*
- * Update the sector_number we'll pass down as appropriate; note that
- * we could sanity check that resulting sector will be in this
- * partition, but this will happen in xen anyhow.
- */
- sector_number += gd->part[MINOR(device)].start_sect;
-
- /*
- * If this unit doesn't consist of virtual (i.e., Xen-specified)
- * partitions then we clear the partn bits from the device number.
- */
- if ( !(gd->flags[MINOR(device)>>gd->minor_shift] &
- GENHD_FL_VIRT_PARTNS) )
- device &= ~(gd->max_p - 1);
-
- if ( (sg_operation == operation) &&
- (sg_dev == device) &&
- (sg_next_sect == sector_number) )
- {
- req = &blk_ring->ring[MASK_BLK_IDX(req_prod-1)].req;
- bh = (struct buffer_head *)id;
- bh->b_reqnext = (struct buffer_head *)req->id;
- req->id = id;
- req->buffer_and_sects[req->nr_segments] = buffer_ma | nr_sectors;
- if ( ++req->nr_segments < MAX_BLK_SEGS )
- sg_next_sect += nr_sectors;
- else
- DISABLE_SCATTERGATHER();
- return 0;
- }
- else if ( RING_PLUGGED )
- {
- return 1;
- }
- else
- {
- sg_operation = operation;
- sg_dev = device;
- sg_next_sect = sector_number + nr_sectors;
- }
- break;
-
- default:
- panic("unknown op %d\n", operation);
- }
-
- /* Fill out a communications ring structure. */
- req = &blk_ring->ring[MASK_BLK_IDX(req_prod)].req;
- req->id = id;
- req->operation = operation;
- req->sector_number = (xen_sector_t)sector_number;
- req->device = device;
- req->nr_segments = 1;
- req->buffer_and_sects[0] = buffer_ma | nr_sectors;
- req_prod++;
-
- return 0;
-}
-
-
-/*
- * do_xlblk_request
- * read a block; request is in a request queue
- */
-void do_xlblk_request(request_queue_t *rq)
-{
- struct request *req;
- struct buffer_head *bh, *next_bh;
- int rw, nsect, full, queued = 0;
-
- DPRINTK("xlblk.c::do_xlblk_request\n");
-
- while ( !rq->plugged && !list_empty(&rq->queue_head))
- {
- if ( (req = blkdev_entry_next_request(&rq->queue_head)) == NULL )
- goto out;
-
- DPRINTK("do_xlblk_request %p: cmd %i, sec %lx, (%li/%li) bh:%p\n",
- req, req->cmd, req->sector,
- req->current_nr_sectors, req->nr_sectors, req->bh);
-
- rw = req->cmd;
- if ( rw == READA )
- rw = READ;
- if ( unlikely((rw != READ) && (rw != WRITE)) )
- panic("XenoLinux Virtual Block Device: bad cmd: %d\n", rw);
-
- req->errors = 0;
-
- bh = req->bh;
- while ( bh != NULL )
- {
- next_bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
-
- full = hypervisor_request(
- (unsigned long)bh,
- (rw == READ) ? XEN_BLOCK_READ : XEN_BLOCK_WRITE,
- bh->b_data, bh->b_rsector, bh->b_size>>9, bh->b_rdev);
-
- if ( full )
- {
- bh->b_reqnext = next_bh;
- pending_queues[nr_pending++] = rq;
- if ( unlikely(nr_pending >= MAX_PENDING) )
- BUG();
- goto out;
- }
-
- queued++;
-
- /* Dequeue the buffer head from the request. */
- nsect = bh->b_size >> 9;
- bh = req->bh = next_bh;
-
- if ( bh != NULL )
- {
- /* There's another buffer head to do. Update the request. */
- req->hard_sector += nsect;
- req->hard_nr_sectors -= nsect;
- req->sector = req->hard_sector;
- req->nr_sectors = req->hard_nr_sectors;
- req->current_nr_sectors = bh->b_size >> 9;
- req->buffer = bh->b_data;
- }
- else
- {
- /* That was the last buffer head. Finalise the request. */
- if ( unlikely(end_that_request_first(req, 1, "XenBlk")) )
- BUG();
- blkdev_dequeue_request(req);
- end_that_request_last(req);
- }
- }
- }
-
- out:
- if ( queued != 0 ) signal_requests_to_xen();
-}
-
-
-static void kick_pending_request_queues(void)
-{
- /* We kick pending request queues if the ring is reasonably empty. */
- if ( (nr_pending != 0) &&
- ((req_prod - resp_cons) < (BLK_RING_SIZE >> 1)) )
- {
- /* Attempt to drain the queue, but bail if the ring becomes full. */
- while ( (nr_pending != 0) && !RING_PLUGGED )
- do_xlblk_request(pending_queues[--nr_pending]);
- }
-}
-
-
-static void xlblk_response_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- BLK_RING_IDX i;
- unsigned long flags;
- struct buffer_head *bh, *next_bh;
-
- if ( unlikely(state == STATE_CLOSED) )
- return;
-
- spin_lock_irqsave(&io_request_lock, flags);
-
- for ( i = resp_cons; i != blk_ring->resp_prod; i++ )
- {
- blk_ring_resp_entry_t *bret = &blk_ring->ring[MASK_BLK_IDX(i)].resp;
- switch ( bret->operation )
- {
- case XEN_BLOCK_READ:
- case XEN_BLOCK_WRITE:
- if ( unlikely(bret->status != 0) )
- DPRINTK("Bad return from blkdev data request: %lx\n",
- bret->status);
- for ( bh = (struct buffer_head *)bret->id;
- bh != NULL;
- bh = next_bh )
- {
- next_bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
- bh->b_end_io(bh, !bret->status);
- }
- break;
-
- default:
- BUG();
- }
- }
-
- resp_cons = i;
-
- kick_pending_request_queues();
-
- spin_unlock_irqrestore(&io_request_lock, flags);
-}
-
-
-static void reset_xlblk_interface(void)
-{
- block_io_op_t op;
-
- nr_pending = 0;
-
- op.cmd = BLOCK_IO_OP_RESET;
- if ( HYPERVISOR_block_io_op(&op) != 0 )
- printk(KERN_ALERT "Possible blkdev trouble: couldn't reset ring\n");
-
- op.cmd = BLOCK_IO_OP_RING_ADDRESS;
- (void)HYPERVISOR_block_io_op(&op);
-
- set_fixmap(FIX_BLKRING_BASE, op.u.ring_mfn << PAGE_SHIFT);
- blk_ring = (blk_ring_t *)fix_to_virt(FIX_BLKRING_BASE);
- blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
-
- wmb();
- state = STATE_ACTIVE;
-}
-
-
-int __init xlblk_init(void)
-{
- int error;
-
- reset_xlblk_interface();
-
- xlblk_response_irq = bind_virq_to_irq(VIRQ_BLKDEV);
- xlblk_update_irq = bind_virq_to_irq(VIRQ_VBD_UPD);
-
- error = request_irq(xlblk_response_irq, xlblk_response_int,
- SA_SAMPLE_RANDOM, "blkdev", NULL);
- if ( error )
- {
- printk(KERN_ALERT "Could not allocate receive interrupt\n");
- goto fail;
- }
-
- error = request_irq(xlblk_update_irq, xlblk_update_int,
- 0, "blkdev", NULL);
-
- if ( error )
- {
- printk(KERN_ALERT "Could not allocate block update interrupt\n");
- goto fail;
- }
-
- (void)xlvbd_init();
-
- return 0;
-
- fail:
- return error;
-}
-
-
-static void __exit xlblk_cleanup(void)
-{
- xlvbd_cleanup();
- free_irq(xlblk_response_irq, NULL);
- free_irq(xlblk_update_irq, NULL);
- unbind_virq_from_irq(VIRQ_BLKDEV);
- unbind_virq_from_irq(VIRQ_VBD_UPD);
-}
-
-
-#ifdef MODULE
-module_init(xlblk_init);
-module_exit(xlblk_cleanup);
-#endif
-
-
-void blkdev_suspend(void)
-{
- state = STATE_SUSPENDED;
- wmb();
-
- while ( resp_cons != blk_ring->req_prod )
- {
- barrier();
- current->state = TASK_INTERRUPTIBLE;
- schedule_timeout(1);
- }
-
- wmb();
- state = STATE_CLOSED;
- wmb();
-
- clear_fixmap(FIX_BLKRING_BASE);
-}
-
-
-void blkdev_resume(void)
-{
- reset_xlblk_interface();
- spin_lock_irq(&io_request_lock);
- kick_pending_request_queues();
- spin_unlock_irq(&io_request_lock);
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.h b/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.h
deleted file mode 100644
index e41e03970e..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/block.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************************
- * block.h
- *
- * Shared definitions between all levels of XenoLinux Virtual block devices.
- */
-
-#ifndef __XEN_DRIVERS_BLOCK_H__
-#define __XEN_DRIVERS_BLOCK_H__
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/fs.h>
-#include <linux/hdreg.h>
-#include <linux/blkdev.h>
-#include <linux/major.h>
-
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/hypervisor-ifs/vbd.h>
-#include <asm/io.h>
-#include <asm/atomic.h>
-#include <asm/uaccess.h>
-
-#if 0
-#define DPRINTK(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#else
-#define DPRINTK(_f, _a...) ((void)0)
-#endif
-
-#if 0
-#define DPRINTK_IOCTL(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#else
-#define DPRINTK_IOCTL(_f, _a...) ((void)0)
-#endif
-
-/* Private gendisk->flags[] values. */
-#define GENHD_FL_XEN 2 /* Is unit a Xen block device? */
-#define GENHD_FL_VIRT_PARTNS 4 /* Are unit partitions virtual? */
-
-/*
- * We have one of these per vbd, whether ide, scsi or 'other'.
- * They hang in an array off the gendisk structure. We may end up putting
- * all kinds of interesting stuff here :-)
- */
-typedef struct xl_disk {
- int usage;
-} xl_disk_t;
-
-extern int xen_control_msg(int operration, char *buffer, int size);
-extern int xen_block_open(struct inode *inode, struct file *filep);
-extern int xen_block_release(struct inode *inode, struct file *filep);
-extern int xen_block_ioctl(struct inode *inode, struct file *filep,
- unsigned command, unsigned long argument);
-extern int xen_block_check(kdev_t dev);
-extern int xen_block_revalidate(kdev_t dev);
-extern void do_xlblk_request (request_queue_t *rq);
-
-extern void xlvbd_update_vbds(void);
-
-static inline xl_disk_t *xldev_to_xldisk(kdev_t xldev)
-{
- struct gendisk *gd = get_gendisk(xldev);
-
- if ( gd == NULL )
- return NULL;
-
- return (xl_disk_t *)gd->real_devices +
- (MINOR(xldev) >> gd->minor_shift);
-}
-
-
-/* Virtual block-device subsystem. */
-extern int xlvbd_init(void);
-extern void xlvbd_cleanup(void);
-
-#endif /* __XEN_DRIVERS_BLOCK_H__ */
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/vbd.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/block/vbd.c
deleted file mode 100644
index e08b976c56..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/block/vbd.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/******************************************************************************
- * vbd.c
- *
- * Xenolinux virtual block-device driver (xvd).
- *
- * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
- * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
- */
-
-#include "block.h"
-#include <linux/blk.h>
-
-/*
- * For convenience we distinguish between ide, scsi and 'other' (i.e.
- * potentially combinations of the two) in the naming scheme and in a few
- * other places (like default readahead, etc).
- */
-#define XLIDE_MAJOR_NAME "hd"
-#define XLSCSI_MAJOR_NAME "sd"
-#define XLVBD_MAJOR_NAME "xvd"
-
-#define XLIDE_DEVS_PER_MAJOR 2
-#define XLSCSI_DEVS_PER_MAJOR 16
-#define XLVBD_DEVS_PER_MAJOR 16
-
-#define XLIDE_PARTN_SHIFT 6 /* amount to shift minor to get 'real' minor */
-#define XLIDE_MAX_PART (1 << XLIDE_PARTN_SHIFT) /* minors per ide vbd */
-
-#define XLSCSI_PARTN_SHIFT 4 /* amount to shift minor to get 'real' minor */
-#define XLSCSI_MAX_PART (1 << XLSCSI_PARTN_SHIFT) /* minors per scsi vbd */
-
-#define XLVBD_PARTN_SHIFT 4 /* amount to shift minor to get 'real' minor */
-#define XLVBD_MAX_PART (1 << XLVBD_PARTN_SHIFT) /* minors per 'other' vbd */
-
-/* The below are for the generic drivers/block/ll_rw_block.c code. */
-static int xlide_blksize_size[256];
-static int xlide_hardsect_size[256];
-static int xlide_max_sectors[256];
-static int xlscsi_blksize_size[256];
-static int xlscsi_hardsect_size[256];
-static int xlscsi_max_sectors[256];
-static int xlvbd_blksize_size[256];
-static int xlvbd_hardsect_size[256];
-static int xlvbd_max_sectors[256];
-
-/* Information from Xen about our VBDs. */
-#define MAX_VBDS 64
-static int nr_vbds;
-static xen_disk_t *vbd_info;
-
-static struct block_device_operations xlvbd_block_fops =
-{
- open: xen_block_open,
- release: xen_block_release,
- ioctl: xen_block_ioctl,
- check_media_change: xen_block_check,
- revalidate: xen_block_revalidate,
-};
-
-static int xlvbd_get_vbd_info(xen_disk_t *disk_info)
-{
- int error;
- block_io_op_t op;
-
- /* Probe for disk information. */
- memset(&op, 0, sizeof(op));
- op.cmd = BLOCK_IO_OP_VBD_PROBE;
- op.u.probe_params.domain = 0;
- op.u.probe_params.xdi.max = MAX_VBDS;
- op.u.probe_params.xdi.disks = disk_info;
- op.u.probe_params.xdi.count = 0;
-
- if ( (error = HYPERVISOR_block_io_op(&op)) != 0 )
- {
- printk(KERN_ALERT "Could not probe disks (%d)\n", error);
- return -1;
- }
-
- return op.u.probe_params.xdi.count;
-}
-
-/*
- * xlvbd_init_device - initialise a VBD device
- * @disk: a xen_disk_t describing the VBD
- *
- * Takes a xen_disk_t * that describes a VBD the domain has access to.
- * Performs appropriate initialisation and registration of the device.
- *
- * Care needs to be taken when making re-entrant calls to ensure that
- * corruption does not occur. Also, devices that are in use should not have
- * their details updated. This is the caller's responsibility.
- */
-static int xlvbd_init_device(xen_disk_t *xd)
-{
- int device = xd->device;
- int major = MAJOR(device);
- int minor = MINOR(device);
- int is_ide = IDE_DISK_MAJOR(major); /* is this an ide device? */
- int is_scsi= SCSI_BLK_MAJOR(major); /* is this a scsi device? */
- char *major_name;
- struct gendisk *gd;
- struct block_device *bd;
- xl_disk_t *disk;
- int i, rc = 0, max_part, partno;
- unsigned long capacity;
-
- unsigned char buf[64];
-
- if ( (bd = bdget(device)) == NULL )
- return -1;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((disk = xldev_to_xldisk(device)) != NULL) && (disk->usage != 0) )
- {
- printk(KERN_ALERT "VBD update failed - in use [dev=%x]\n", device);
- rc = -1;
- goto out;
- }
-
- if ( is_ide ) {
-
- major_name = XLIDE_MAJOR_NAME;
- max_part = XLIDE_MAX_PART;
-
- } else if ( is_scsi ) {
-
- major_name = XLSCSI_MAJOR_NAME;
- max_part = XLSCSI_MAX_PART;
-
- } else if (XD_VIRTUAL(xd->info)) {
-
- major_name = XLVBD_MAJOR_NAME;
- max_part = XLVBD_MAX_PART;
-
- } else {
-
- /* SMH: hmm - probably a CCISS driver or sim; assume CCISS for now */
- printk(KERN_ALERT "Assuming device %02x:%02x is CCISS/SCSI\n",
- major, minor);
- is_scsi = 1;
- major_name = "cciss";
- max_part = XLSCSI_MAX_PART;
-
- }
-
- partno = minor & (max_part - 1);
-
- if ( (gd = get_gendisk(device)) == NULL )
- {
- rc = register_blkdev(major, major_name, &xlvbd_block_fops);
- if ( rc < 0 )
- {
- printk(KERN_ALERT "XL VBD: can't get major %d\n", major);
- goto out;
- }
-
- if ( is_ide )
- {
- blksize_size[major] = xlide_blksize_size;
- hardsect_size[major] = xlide_hardsect_size;
- max_sectors[major] = xlide_max_sectors;
- read_ahead[major] = 8; /* from drivers/ide/ide-probe.c */
- }
- else if ( is_scsi )
- {
- blksize_size[major] = xlscsi_blksize_size;
- hardsect_size[major] = xlscsi_hardsect_size;
- max_sectors[major] = xlscsi_max_sectors;
- read_ahead[major] = 0; /* XXX 8; -- guessing */
- }
- else
- {
- blksize_size[major] = xlvbd_blksize_size;
- hardsect_size[major] = xlvbd_hardsect_size;
- max_sectors[major] = xlvbd_max_sectors;
- read_ahead[major] = 8;
- }
-
- blk_init_queue(BLK_DEFAULT_QUEUE(major), do_xlblk_request);
-
- /*
- * Turn off barking 'headactive' mode. We dequeue buffer heads as
- * soon as we pass them down to Xen.
- */
- blk_queue_headactive(BLK_DEFAULT_QUEUE(major), 0);
-
- /* Construct an appropriate gendisk structure. */
- gd = kmalloc(sizeof(struct gendisk), GFP_KERNEL);
- gd->major = major;
- gd->major_name = major_name;
-
- gd->max_p = max_part;
- if ( is_ide )
- {
- gd->minor_shift = XLIDE_PARTN_SHIFT;
- gd->nr_real = XLIDE_DEVS_PER_MAJOR;
- }
- else if ( is_scsi )
- {
- gd->minor_shift = XLSCSI_PARTN_SHIFT;
- gd->nr_real = XLSCSI_DEVS_PER_MAJOR;
- }
- else
- {
- gd->minor_shift = XLVBD_PARTN_SHIFT;
- gd->nr_real = XLVBD_DEVS_PER_MAJOR;
- }
-
- /*
- ** The sizes[] and part[] arrays hold the sizes and other
- ** information about every partition with this 'major' (i.e.
- ** every disk sharing the 8 bit prefix * max partns per disk)
- */
- gd->sizes = kmalloc(max_part*gd->nr_real*sizeof(int), GFP_KERNEL);
- gd->part = kmalloc(max_part*gd->nr_real*sizeof(struct hd_struct),
- GFP_KERNEL);
- memset(gd->sizes, 0, max_part * gd->nr_real * sizeof(int));
- memset(gd->part, 0, max_part * gd->nr_real
- * sizeof(struct hd_struct));
-
-
- gd->real_devices = kmalloc(gd->nr_real * sizeof(xl_disk_t),
- GFP_KERNEL);
- memset(gd->real_devices, 0, gd->nr_real * sizeof(xl_disk_t));
-
- gd->next = NULL;
- gd->fops = &xlvbd_block_fops;
-
- gd->de_arr = kmalloc(gd->nr_real * sizeof(*gd->de_arr),
- GFP_KERNEL);
- gd->flags = kmalloc(gd->nr_real * sizeof(*gd->flags), GFP_KERNEL);
-
- memset(gd->de_arr, 0, gd->nr_real * sizeof(*gd->de_arr));
- memset(gd->flags, 0, gd->nr_real * sizeof(*gd->flags));
-
- add_gendisk(gd);
-
- blk_size[major] = gd->sizes;
- }
-
- if ( XD_READONLY(xd->info) )
- set_device_ro(device, 1);
-
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_XEN;
-
- /* NB. Linux 2.4 only handles 32-bit sector offsets and capacities. */
- capacity = (unsigned long)xd->capacity;
-
- if ( partno != 0 )
- {
- /*
- * If this was previously set up as a real disc we will have set
- * up partition-table information. Virtual partitions override
- * 'real' partitions, and the two cannot coexist on a device.
- */
- if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
- (gd->sizes[minor & ~(max_part-1)] != 0) )
- {
- /*
- * Any non-zero sub-partition entries must be cleaned out before
- * installing 'virtual' partition entries. The two types cannot
- * coexist, and virtual partitions are favoured.
- */
- kdev_t dev = device & ~(max_part-1);
- for ( i = max_part - 1; i > 0; i-- )
- {
- invalidate_device(dev+i, 1);
- gd->part[MINOR(dev+i)].start_sect = 0;
- gd->part[MINOR(dev+i)].nr_sects = 0;
- gd->sizes[MINOR(dev+i)] = 0;
- }
- printk(KERN_ALERT
- "Virtual partitions found for /dev/%s - ignoring any "
- "real partition information we may have found.\n",
- disk_name(gd, MINOR(device), buf));
- }
-
- /* Need to skankily setup 'partition' information */
- gd->part[minor].start_sect = 0;
- gd->part[minor].nr_sects = capacity;
- gd->sizes[minor] = capacity;
-
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
- }
- else
- {
- gd->part[minor].nr_sects = capacity;
- gd->sizes[minor] = capacity>>(BLOCK_SIZE_BITS-9);
-
- /* Some final fix-ups depending on the device type */
- switch ( XD_TYPE(xd->info) )
- {
- case XD_TYPE_CDROM:
- case XD_TYPE_FLOPPY:
- case XD_TYPE_TAPE:
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_REMOVABLE;
- printk(KERN_ALERT
- "Skipping partition check on %s /dev/%s\n",
- XD_TYPE(xd->info)==XD_TYPE_CDROM ? "cdrom" :
- (XD_TYPE(xd->info)==XD_TYPE_TAPE ? "tape" :
- "floppy"), disk_name(gd, MINOR(device), buf));
- break;
-
- case XD_TYPE_DISK:
- /* Only check partitions on real discs (not virtual!). */
- if ( gd->flags[minor>>gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
- {
- printk(KERN_ALERT
- "Skipping partition check on virtual /dev/%s\n",
- disk_name(gd, MINOR(device), buf));
- break;
- }
- register_disk(gd, device, gd->max_p, &xlvbd_block_fops, capacity);
- break;
-
- default:
- printk(KERN_ALERT "XenoLinux: unknown device type %d\n",
- XD_TYPE(xd->info));
- break;
- }
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-
-/*
- * xlvbd_remove_device - remove a device node if possible
- * @device: numeric device ID
- *
- * Updates the gendisk structure and invalidates devices.
- *
- * This is OK for now but in future, should perhaps consider where this should
- * deallocate gendisks / unregister devices.
- */
-static int xlvbd_remove_device(int device)
-{
- int i, rc = 0, minor = MINOR(device);
- struct gendisk *gd;
- struct block_device *bd;
- xl_disk_t *disk = NULL;
-
- if ( (bd = bdget(device)) == NULL )
- return -1;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((gd = get_gendisk(device)) == NULL) ||
- ((disk = xldev_to_xldisk(device)) == NULL) )
- BUG();
-
- if ( disk->usage != 0 )
- {
- printk(KERN_ALERT "VBD removal failed - in use [dev=%x]\n", device);
- rc = -1;
- goto out;
- }
-
- if ( (minor & (gd->max_p-1)) != 0 )
- {
- /* 1: The VBD is mapped to a partition rather than a whole unit. */
- invalidate_device(device, 1);
- gd->part[minor].start_sect = 0;
- gd->part[minor].nr_sects = 0;
- gd->sizes[minor] = 0;
-
- /* Clear the consists-of-virtual-partitions flag if possible. */
- gd->flags[minor >> gd->minor_shift] &= ~GENHD_FL_VIRT_PARTNS;
- for ( i = 1; i < gd->max_p; i++ )
- if ( gd->sizes[(minor & ~(gd->max_p-1)) + i] != 0 )
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
-
- /*
- * If all virtual partitions are now gone, and a 'whole unit' VBD is
- * present, then we can try to grok the unit's real partition table.
- */
- if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
- (gd->sizes[minor & ~(gd->max_p-1)] != 0) &&
- !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE) )
- {
- register_disk(gd,
- device&~(gd->max_p-1),
- gd->max_p,
- &xlvbd_block_fops,
- gd->part[minor&~(gd->max_p-1)].nr_sects);
- }
- }
- else
- {
- /*
- * 2: The VBD is mapped to an entire 'unit'. Clear all partitions.
- * NB. The partition entries are only cleared if there are no VBDs
- * mapped to individual partitions on this unit.
- */
- i = gd->max_p - 1; /* Default: clear subpartitions as well. */
- if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
- i = 0; /* 'Virtual' mode: only clear the 'whole unit' entry. */
- while ( i >= 0 )
- {
- invalidate_device(device+i, 1);
- gd->part[minor+i].start_sect = 0;
- gd->part[minor+i].nr_sects = 0;
- gd->sizes[minor+i] = 0;
- i--;
- }
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-/*
- * xlvbd_update_vbds - reprobes the VBD status and performs updates driver
- * state. The VBDs need to be updated in this way when the domain is
- * initialised and also each time we receive an XLBLK_UPDATE event.
- */
-void xlvbd_update_vbds(void)
-{
- int i, j, k, old_nr, new_nr;
- xen_disk_t *old_info, *new_info, *merged_info;
-
- old_info = vbd_info;
- old_nr = nr_vbds;
-
- new_info = kmalloc(MAX_VBDS * sizeof(xen_disk_t), GFP_KERNEL);
- if ( unlikely(new_nr = xlvbd_get_vbd_info(new_info)) < 0 )
- {
- kfree(new_info);
- return;
- }
-
- /*
- * Final list maximum size is old list + new list. This occurs only when
- * old list and new list do not overlap at all, and we cannot yet destroy
- * VBDs in the old list because the usage counts are busy.
- */
- merged_info = kmalloc((old_nr + new_nr) * sizeof(xen_disk_t), GFP_KERNEL);
-
- /* @i tracks old list; @j tracks new list; @k tracks merged list. */
- i = j = k = 0;
-
- while ( (i < old_nr) && (j < new_nr) )
- {
- if ( old_info[i].device < new_info[j].device )
- {
- if ( xlvbd_remove_device(old_info[i].device) != 0 )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- i++;
- }
- else if ( old_info[i].device > new_info[j].device )
- {
- if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- j++;
- }
- else
- {
- if ( ((old_info[i].capacity == new_info[j].capacity) &&
- (old_info[i].info == new_info[j].info)) ||
- (xlvbd_remove_device(old_info[i].device) != 0) )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- else if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- i++; j++;
- }
- }
-
- for ( ; i < old_nr; i++ )
- {
- if ( xlvbd_remove_device(old_info[i].device) != 0 )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- }
-
- for ( ; j < new_nr; j++ )
- {
- if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- }
-
- vbd_info = merged_info;
- nr_vbds = k;
-
- kfree(old_info);
- kfree(new_info);
-}
-
-
-/*
- * Set up all the linux device goop for the virtual block devices (vbd's) that
- * xen tells us about. Note that although from xen's pov VBDs are addressed
- * simply an opaque 16-bit device number, the domain creation tools
- * conventionally allocate these numbers to correspond to those used by 'real'
- * linux -- this is just for convenience as it means e.g. that the same
- * /etc/fstab can be used when booting with or without xen.
- */
-int __init xlvbd_init(void)
-{
- int i;
-
- /*
- * If compiled as a module, we don't support unloading yet. We therefore
- * permanently increment the reference count to disallow it.
- */
- SET_MODULE_OWNER(&xlvbd_block_fops);
- MOD_INC_USE_COUNT;
-
- /* Initialize the global arrays. */
- for ( i = 0; i < 256; i++ )
- {
- /* from the generic ide code (drivers/ide/ide-probe.c, etc) */
- xlide_blksize_size[i] = 1024;
- xlide_hardsect_size[i] = 512;
- xlide_max_sectors[i] = 128; /* 'hwif->rqsize' if we knew it */
-
- /* from the generic scsi disk code (drivers/scsi/sd.c) */
- xlscsi_blksize_size[i] = 1024; /* XXX 512; */
- xlscsi_hardsect_size[i] = 512;
- xlscsi_max_sectors[i] = 128*8; /* XXX 128; */
-
- /* we don't really know what to set these too since it depends */
- xlvbd_blksize_size[i] = 512;
- xlvbd_hardsect_size[i] = 512;
- xlvbd_max_sectors[i] = 128;
- }
-
- vbd_info = kmalloc(MAX_VBDS * sizeof(xen_disk_t), GFP_KERNEL);
- nr_vbds = xlvbd_get_vbd_info(vbd_info);
-
- if ( nr_vbds < 0 )
- {
- kfree(vbd_info);
- vbd_info = NULL;
- nr_vbds = 0;
- }
- else
- {
- for ( i = 0; i < nr_vbds; i++ )
- xlvbd_init_device(&vbd_info[i]);
- }
-
- return 0;
-}
-
-
-#ifdef MODULE
-module_init(xlvbd_init);
-#endif
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/console/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/console/Makefile
deleted file mode 100644
index aaa546a8f3..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/console/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-$(CONFIG_XEN_CONSOLE) := console.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/console/console.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/console/console.c
deleted file mode 100644
index a6ee346857..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/console/console.c
+++ /dev/null
@@ -1,543 +0,0 @@
-/******************************************************************************
- * console.c
- *
- * Virtual console driver.
- *
- * Copyright (c) 2002-2004, K A Fraser.
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-#include <linux/serial.h>
-#include <linux/major.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/console.h>
-#include <asm/evtchn.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
-#include <asm/hypervisor.h>
-#include <asm/hypervisor-ifs/event_channel.h>
-#include <asm/ctrl_if.h>
-
-#define XEN_TTY_MINOR 123
-
-/* The kernel and user-land drivers share a common transmit buffer. */
-#define WBUF_SIZE 1024
-#define WBUF_MASK(_i) ((_i)&(WBUF_SIZE-1))
-static char wbuf[WBUF_SIZE];
-static unsigned int wc, wp; /* write_cons, write_prod */
-
-/* This lock protects accesses to the common transmit buffer. */
-static spinlock_t xencons_lock = SPIN_LOCK_UNLOCKED;
-
-/* Common transmit-kick routine. */
-static void __xencons_tx_flush(void);
-
-/* This task is used to defer sending console data until there is space. */
-static void xencons_tx_flush_task_routine(void *data);
-static struct tq_struct xencons_tx_flush_task = {
- routine: xencons_tx_flush_task_routine
-};
-
-
-/******************** Kernel console driver ********************************/
-
-static void kcons_write(
- struct console *c, const char *s, unsigned int count)
-{
- int i;
- unsigned long flags;
-
- spin_lock_irqsave(&xencons_lock, flags);
-
- for ( i = 0; i < count; i++ )
- {
- if ( (wp - wc) >= (WBUF_SIZE - 1) )
- break;
- if ( (wbuf[WBUF_MASK(wp++)] = s[i]) == '\n' )
- wbuf[WBUF_MASK(wp++)] = '\r';
- }
-
- __xencons_tx_flush();
-
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static void kcons_write_dom0(
- struct console *c, const char *s, unsigned int count)
-{
- int rc;
-
- while ( count > 0 )
- {
- if ( (rc = HYPERVISOR_console_io(CONSOLEIO_write, count, s)) > 0 )
- {
- count -= rc;
- s += rc;
- }
- }
-}
-
-static kdev_t kcons_device(struct console *c)
-{
- /*
- * This is the magic that binds our "struct console" to our
- * "tty_struct", defined below.
- */
- return MKDEV(TTY_MAJOR, XEN_TTY_MINOR);
-}
-
-static struct console kcons_info = {
- name: "xencons",
- device: kcons_device,
- flags: CON_PRINTBUFFER,
- index: -1,
-};
-
-void xen_console_init(void)
-{
- kcons_info.write =
- (start_info.flags & SIF_INITDOMAIN) ? kcons_write_dom0 : kcons_write;
- register_console(&kcons_info);
-}
-
-
-/*** Useful function for console debugging -- goes straight to Xen. ***/
-asmlinkage int xprintk(const char *fmt, ...)
-{
- va_list args;
- int printk_len;
- static char printk_buf[1024];
-
- /* Emit the output into the temporary buffer */
- va_start(args, fmt);
- printk_len = vsnprintf(printk_buf, sizeof(printk_buf), fmt, args);
- va_end(args);
-
- /* Send the processed output directly to Xen. */
- if ( start_info.flags & SIF_INITDOMAIN )
- kcons_write_dom0(NULL, printk_buf, printk_len);
- else
- kcons_write(NULL, printk_buf, printk_len);
-
- return 0;
-}
-
-/*** Forcibly flush console data before dying. ***/
-void xencons_force_flush(void)
-{
- ctrl_msg_t msg;
- int sz;
-
- /* Emergency console is synchronous, so there's nothing to flush. */
- if ( start_info.flags & SIF_INITDOMAIN )
- return;
-
- /*
- * We use dangerous control-interface functions that require a quiescent
- * system and no interrupts. Try to ensure this with a global cli().
- */
- cli();
-
- /* Spin until console data is flushed through to the domain controller. */
- while ( (wc != wp) && !ctrl_if_transmitter_empty() )
- {
- /* Interrupts are disabled -- we must manually reap responses. */
- ctrl_if_discard_responses();
-
- if ( (sz = wp - wc) == 0 )
- continue;
- if ( sz > sizeof(msg.msg) )
- sz = sizeof(msg.msg);
- if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
- sz = WBUF_SIZE - WBUF_MASK(wc);
-
- msg.type = CMSG_CONSOLE;
- msg.subtype = CMSG_CONSOLE_DATA;
- msg.length = sz;
- memcpy(msg.msg, &wbuf[WBUF_MASK(wc)], sz);
-
- if ( ctrl_if_send_message_noblock(&msg, NULL, 0) == 0 )
- wc += sz;
- }
-}
-
-
-/******************** User-space console driver (/dev/console) ************/
-
-static struct tty_driver xencons_driver;
-static int xencons_refcount;
-static struct tty_struct *xencons_table[1];
-static struct termios *xencons_termios[1];
-static struct termios *xencons_termios_locked[1];
-static struct tty_struct *xencons_tty;
-static int xencons_priv_irq;
-static char x_char;
-
-/* Non-privileged receive callback. */
-static void xencons_rx(ctrl_msg_t *msg, unsigned long id)
-{
- int i;
- unsigned long flags;
-
- spin_lock_irqsave(&xencons_lock, flags);
- if ( xencons_tty != NULL )
- {
- for ( i = 0; i < msg->length; i++ )
- tty_insert_flip_char(xencons_tty, msg->msg[i], 0);
- tty_flip_buffer_push(xencons_tty);
- }
- spin_unlock_irqrestore(&xencons_lock, flags);
-
- msg->length = 0;
- ctrl_if_send_response(msg);
-}
-
-/* Privileged and non-privileged transmit worker. */
-static void __xencons_tx_flush(void)
-{
- int sz, work_done = 0;
- ctrl_msg_t msg;
-
- if ( start_info.flags & SIF_INITDOMAIN )
- {
- if ( x_char )
- {
- kcons_write_dom0(NULL, &x_char, 1);
- x_char = 0;
- work_done = 1;
- }
-
- while ( wc != wp )
- {
- sz = wp - wc;
- if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
- sz = WBUF_SIZE - WBUF_MASK(wc);
- kcons_write_dom0(NULL, &wbuf[WBUF_MASK(wc)], sz);
- wc += sz;
- work_done = 1;
- }
- }
- else
- {
- while ( x_char )
- {
- msg.type = CMSG_CONSOLE;
- msg.subtype = CMSG_CONSOLE_DATA;
- msg.length = 1;
- msg.msg[0] = x_char;
-
- if ( ctrl_if_send_message_noblock(&msg, NULL, 0) == 0 )
- x_char = 0;
- else if ( ctrl_if_enqueue_space_callback(&xencons_tx_flush_task) )
- break;
-
- work_done = 1;
- }
-
- while ( wc != wp )
- {
- sz = wp - wc;
- if ( sz > sizeof(msg.msg) )
- sz = sizeof(msg.msg);
- if ( sz > (WBUF_SIZE - WBUF_MASK(wc)) )
- sz = WBUF_SIZE - WBUF_MASK(wc);
-
- msg.type = CMSG_CONSOLE;
- msg.subtype = CMSG_CONSOLE_DATA;
- msg.length = sz;
- memcpy(msg.msg, &wbuf[WBUF_MASK(wc)], sz);
-
- if ( ctrl_if_send_message_noblock(&msg, NULL, 0) == 0 )
- wc += sz;
- else if ( ctrl_if_enqueue_space_callback(&xencons_tx_flush_task) )
- break;
-
- work_done = 1;
- }
- }
-
- if ( work_done && (xencons_tty != NULL) )
- {
- wake_up_interruptible(&xencons_tty->write_wait);
- if ( (xencons_tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
- (xencons_tty->ldisc.write_wakeup != NULL) )
- (xencons_tty->ldisc.write_wakeup)(xencons_tty);
- }
-}
-
-/* Non-privileged transmit kicker. */
-static void xencons_tx_flush_task_routine(void *data)
-{
- unsigned long flags;
- spin_lock_irqsave(&xencons_lock, flags);
- __xencons_tx_flush();
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-/* Privileged receive callback and transmit kicker. */
-static void xencons_priv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
- static char rbuf[16];
- int i, l;
- unsigned long flags;
-
- spin_lock_irqsave(&xencons_lock, flags);
-
- if ( xencons_tty != NULL )
- {
- /* Receive work. */
- while ( (l = HYPERVISOR_console_io(CONSOLEIO_read, 16, rbuf)) > 0 )
- for ( i = 0; i < l; i++ )
- tty_insert_flip_char(xencons_tty, rbuf[i], 0);
- if ( xencons_tty->flip.count != 0 )
- tty_flip_buffer_push(xencons_tty);
- }
-
- /* Transmit work. */
- __xencons_tx_flush();
-
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static int xencons_write_room(struct tty_struct *tty)
-{
- return WBUF_SIZE - (wp - wc);
-}
-
-static int xencons_chars_in_buffer(struct tty_struct *tty)
-{
- return wp - wc;
-}
-
-static void xencons_send_xchar(struct tty_struct *tty, char ch)
-{
- unsigned long flags;
- spin_lock_irqsave(&xencons_lock, flags);
- x_char = ch;
- __xencons_tx_flush();
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static void xencons_throttle(struct tty_struct *tty)
-{
- if ( I_IXOFF(tty) )
- xencons_send_xchar(tty, STOP_CHAR(tty));
-}
-
-static void xencons_unthrottle(struct tty_struct *tty)
-{
- if ( I_IXOFF(tty) )
- {
- if ( x_char != 0 )
- x_char = 0;
- else
- xencons_send_xchar(tty, START_CHAR(tty));
- }
-}
-
-static void xencons_flush_buffer(struct tty_struct *tty)
-{
- unsigned long flags;
- spin_lock_irqsave(&xencons_lock, flags);
- wc = wp = 0;
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static inline int __xencons_put_char(int ch)
-{
- char _ch = (char)ch;
- if ( (wp - wc) == WBUF_SIZE )
- return 0;
- wbuf[WBUF_MASK(wp++)] = _ch;
- return 1;
-}
-
-static int xencons_write(struct tty_struct *tty, int from_user,
- const u_char * buf, int count)
-{
- int i;
- unsigned long flags;
-
- if ( from_user && verify_area(VERIFY_READ, buf, count) )
- return -EINVAL;
-
- spin_lock_irqsave(&xencons_lock, flags);
-
- for ( i = 0; i < count; i++ )
- {
- char ch;
- if ( from_user )
- __get_user(ch, buf + i);
- else
- ch = buf[i];
- if ( !__xencons_put_char(ch) )
- break;
- }
-
- if ( i != 0 )
- __xencons_tx_flush();
-
- spin_unlock_irqrestore(&xencons_lock, flags);
-
- return i;
-}
-
-static void xencons_put_char(struct tty_struct *tty, u_char ch)
-{
- unsigned long flags;
- spin_lock_irqsave(&xencons_lock, flags);
- (void)__xencons_put_char(ch);
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static void xencons_flush_chars(struct tty_struct *tty)
-{
- unsigned long flags;
- spin_lock_irqsave(&xencons_lock, flags);
- __xencons_tx_flush();
- spin_unlock_irqrestore(&xencons_lock, flags);
-}
-
-static void xencons_wait_until_sent(struct tty_struct *tty, int timeout)
-{
- unsigned long orig_jiffies = jiffies;
-
- while ( tty->driver.chars_in_buffer(tty) )
- {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(1);
- if ( signal_pending(current) )
- break;
- if ( (timeout != 0) && time_after(jiffies, orig_jiffies + timeout) )
- break;
- }
-
- set_current_state(TASK_RUNNING);
-}
-
-static int xencons_open(struct tty_struct *tty, struct file *filp)
-{
- int line;
- unsigned long flags;
-
- MOD_INC_USE_COUNT;
- line = MINOR(tty->device) - tty->driver.minor_start;
- if ( line != 0 )
- {
- MOD_DEC_USE_COUNT;
- return -ENODEV;
- }
-
- spin_lock_irqsave(&xencons_lock, flags);
- tty->driver_data = NULL;
- if ( xencons_tty == NULL )
- xencons_tty = tty;
- __xencons_tx_flush();
- spin_unlock_irqrestore(&xencons_lock, flags);
-
- return 0;
-}
-
-static void xencons_close(struct tty_struct *tty, struct file *filp)
-{
- unsigned long flags;
-
- if ( tty->count == 1 )
- {
- tty->closing = 1;
- tty_wait_until_sent(tty, 0);
- if ( tty->driver.flush_buffer != NULL )
- tty->driver.flush_buffer(tty);
- if ( tty->ldisc.flush_buffer != NULL )
- tty->ldisc.flush_buffer(tty);
- tty->closing = 0;
- spin_lock_irqsave(&xencons_lock, flags);
- xencons_tty = NULL;
- spin_unlock_irqrestore(&xencons_lock, flags);
- }
-
- MOD_DEC_USE_COUNT;
-}
-
-static int __init xencons_init(void)
-{
- memset(&xencons_driver, 0, sizeof(struct tty_driver));
- xencons_driver.magic = TTY_DRIVER_MAGIC;
- xencons_driver.name = "xencons";
- xencons_driver.major = TTY_MAJOR;
- xencons_driver.minor_start = XEN_TTY_MINOR;
- xencons_driver.num = 1;
- xencons_driver.type = TTY_DRIVER_TYPE_SERIAL;
- xencons_driver.subtype = SERIAL_TYPE_NORMAL;
- xencons_driver.init_termios = tty_std_termios;
- xencons_driver.flags =
- TTY_DRIVER_REAL_RAW | TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_NO_DEVFS;
- xencons_driver.refcount = &xencons_refcount;
- xencons_driver.table = xencons_table;
- xencons_driver.termios = xencons_termios;
- xencons_driver.termios_locked = xencons_termios_locked;
-
- xencons_driver.open = xencons_open;
- xencons_driver.close = xencons_close;
- xencons_driver.write = xencons_write;
- xencons_driver.write_room = xencons_write_room;
- xencons_driver.put_char = xencons_put_char;
- xencons_driver.flush_chars = xencons_flush_chars;
- xencons_driver.chars_in_buffer = xencons_chars_in_buffer;
- xencons_driver.send_xchar = xencons_send_xchar;
- xencons_driver.flush_buffer = xencons_flush_buffer;
- xencons_driver.throttle = xencons_throttle;
- xencons_driver.unthrottle = xencons_unthrottle;
- xencons_driver.wait_until_sent = xencons_wait_until_sent;
-
- if ( tty_register_driver(&xencons_driver) )
- panic("Couldn't register Xen virtual console driver\n");
-
- if ( start_info.flags & SIF_INITDOMAIN )
- {
- xencons_priv_irq = bind_virq_to_irq(VIRQ_CONSOLE);
- (void)request_irq(xencons_priv_irq,
- xencons_priv_interrupt, 0, "console", NULL);
- }
- else
- {
- (void)ctrl_if_register_receiver(CMSG_CONSOLE, xencons_rx);
- }
-
- printk("Xen virtual console successfully installed\n");
-
- return 0;
-}
-
-static void __exit xencons_fini(void)
-{
- int ret;
-
- if ( (ret = tty_unregister_driver(&xencons_driver)) != 0 )
- printk(KERN_ERR "Unable to unregister Xen console driver: %d\n", ret);
-
- if ( start_info.flags & SIF_INITDOMAIN )
- {
- free_irq(xencons_priv_irq, NULL);
- unbind_virq_from_irq(VIRQ_CONSOLE);
- }
- else
- {
- ctrl_if_unregister_receiver(CMSG_CONSOLE, xencons_rx);
- }
-}
-
-module_init(xencons_init);
-module_exit(xencons_fini);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/Makefile
deleted file mode 100644
index 3e2e17bd23..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := core.o vfr.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/core.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/core.c
deleted file mode 100644
index b59f3e8a84..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/core.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/******************************************************************************
- * core.c
- *
- * Interface to privileged domain-0 commands.
- *
- * Copyright (c) 2002-2004, K A Fraser, B Dragovic
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-#include <linux/smp_lock.h>
-#include <linux/swapctl.h>
-#include <linux/iobuf.h>
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-#include <linux/seq_file.h>
-
-#include <asm/pgalloc.h>
-#include <asm/pgtable.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-#include <asm/proc_cmd.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-#include <asm/xen_proc.h>
-
-static struct proc_dir_entry *privcmd_intf;
-
-static int privcmd_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long data)
-{
- int ret = 0;
-
- switch ( cmd )
- {
- case IOCTL_PRIVCMD_HYPERCALL:
- {
- privcmd_hypercall_t hypercall;
-
- if ( copy_from_user(&hypercall, (void *)data, sizeof(hypercall)) )
- return -EFAULT;
-
- __asm__ __volatile__ (
- "pushl %%ebx; pushl %%ecx; pushl %%edx; pushl %%esi; pushl %%edi; "
- "movl 4(%%eax),%%ebx ;"
- "movl 8(%%eax),%%ecx ;"
- "movl 12(%%eax),%%edx ;"
- "movl 16(%%eax),%%esi ;"
- "movl 20(%%eax),%%edi ;"
- "movl (%%eax),%%eax ;"
- TRAP_INSTR "; "
- "popl %%edi; popl %%esi; popl %%edx; popl %%ecx; popl %%ebx"
- : "=a" (ret) : "0" (&hypercall) : "memory" );
-
- }
- break;
-
- default:
- ret = -EINVAL;
- break;
- }
- return ret;
-}
-
-
-static struct file_operations privcmd_file_ops = {
- ioctl : privcmd_ioctl
-};
-
-
-static int __init init_module(void)
-{
- if ( !(start_info.flags & SIF_PRIVILEGED) )
- return 0;
-
- privcmd_intf = create_xen_proc_entry("privcmd", 0400);
- if ( privcmd_intf != NULL )
- {
- privcmd_intf->owner = THIS_MODULE;
- privcmd_intf->nlink = 1;
- privcmd_intf->proc_fops = &privcmd_file_ops;
- }
-
- return 0;
-}
-
-
-static void __exit cleanup_module(void)
-{
- if ( privcmd_intf == NULL ) return;
- remove_xen_proc_entry("privcmd");
- privcmd_intf = NULL;
-}
-
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/vfr.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/vfr.c
deleted file mode 100644
index 9d8ca0a32d..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/dom0/vfr.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/******************************************************************************
- * vfr.c
- *
- * Interface to the virtual firewall/router.
- *
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <asm/xen_proc.h>
-#include <asm/hypervisor-ifs/network.h>
-
-static struct proc_dir_entry *proc_vfr;
-
-static unsigned char readbuf[1024];
-
-/* Helpers, implemented at the bottom. */
-u32 getipaddr(const char *buff, unsigned int len);
-u16 antous(const char *buff, int len);
-u64 antoull(const char *buff, int len);
-int anton(const char *buff, int len);
-
-static int vfr_read_proc(char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- strcpy(page, readbuf);
- *readbuf = '\0';
- *eof = 1;
- *start = page;
- return strlen(page);
-}
-
-/* The format for the vfr interface is as follows:
- *
- * COMMAND <field>=<val> [<field>=<val> [...]]
- *
- * where:
- *
- * COMMAND = { ACCEPT | COUNT }
- *
- * field=val pairs are as follows:
- *
- * field = { srcaddr | dstaddr }
- * val is a dot seperated, numeric IP address.
- *
- * field = { srcport | dstport }
- * val is a (16-bit) unsigned int
- *
- * field = { proto }
- * val = { IP | TCP | UDP | ARP }
- *
- */
-
-#define isspace(_x) ( ((_x)==' ') || ((_x)=='\t') || ((_x)=='\v') || \
- ((_x)=='\f') || ((_x)=='\r') || ((_x)=='\n') )
-
-static int vfr_write_proc(struct file *file, const char *buffer,
- u_long count, void *data)
-{
- network_op_t op;
- int ret, len;
- int ts, te, tl; // token start, end, and length
- int fs, fe, fl; // field.
-
- len = count;
- ts = te = 0;
-
- memset(&op, 0, sizeof(network_op_t));
-
- // get the command:
- while ( count && isspace(buffer[ts]) ) { ts++; count--; } // skip spaces.
- te = ts;
- while ( count && !isspace(buffer[te]) ) { te++; count--; } // command end
- if ( te <= ts ) goto bad;
- tl = te - ts;
-
- if ( strncmp(&buffer[ts], "ADD", tl) == 0 )
- {
- op.cmd = NETWORK_OP_ADDRULE;
- }
- else if ( strncmp(&buffer[ts], "DELETE", tl) == 0 )
- {
- op.cmd = NETWORK_OP_DELETERULE;
- }
- else if ( strncmp(&buffer[ts], "PRINT", tl) == 0 )
- {
- op.cmd = NETWORK_OP_GETRULELIST;
- goto doneparsing;
- }
-
- ts = te;
-
- // get the action
- while ( count && (buffer[ts] == ' ') ) { ts++; count--; } // skip spaces.
- te = ts;
- while ( count && (buffer[te] != ' ') ) { te++; count--; } // command end
- if ( te <= ts ) goto bad;
- tl = te - ts;
-
- if ( strncmp(&buffer[ts], "ACCEPT", tl) == 0 )
- {
- op.u.net_rule.action = NETWORK_ACTION_ACCEPT;
- goto keyval;
- }
- if ( strncmp(&buffer[ts], "COUNT", tl) == 0 )
- {
- op.u.net_rule.action = NETWORK_ACTION_COUNT;
- goto keyval;
- }
-
- // default case;
- return (len);
-
-
- // get the key=val pairs.
- keyval:
- while (count)
- {
- //get field
- ts = te; while ( count && isspace(buffer[ts]) ) { ts++; count--; }
- te = ts;
- while ( count && !isspace(buffer[te]) && (buffer[te] != '=') )
- { te++; count--; }
- if ( te <= ts )
- goto doneparsing;
- tl = te - ts;
- fs = ts; fe = te; fl = tl; // save the field markers.
- // skip " = " (ignores extra equals.)
- while ( count && (isspace(buffer[te]) || (buffer[te] == '=')) )
- { te++; count--; }
- ts = te;
- while ( count && !isspace(buffer[te]) ) { te++; count--; }
- tl = te - ts;
-
- if ( (fl <= 0) || (tl <= 0) ) goto bad;
-
- /* NB. Prefix matches must go first! */
- if (strncmp(&buffer[fs], "src", fl) == 0)
- {
- op.u.net_rule.src_dom = VIF_SPECIAL;
- op.u.net_rule.src_idx = VIF_ANY_INTERFACE;
- }
- else if (strncmp(&buffer[fs], "dst", fl) == 0)
- {
- op.u.net_rule.dst_dom = VIF_SPECIAL;
- op.u.net_rule.dst_idx = VIF_PHYSICAL_INTERFACE;
- }
- else if (strncmp(&buffer[fs], "srcaddr", fl) == 0)
- {
- op.u.net_rule.src_addr = getipaddr(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstaddr", fl) == 0)
- {
- op.u.net_rule.dst_addr = getipaddr(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "srcaddrmask", fl) == 0)
- {
- op.u.net_rule.src_addr_mask = getipaddr(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstaddrmask", fl) == 0)
- {
- op.u.net_rule.dst_addr_mask = getipaddr(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "srcport", fl) == 0)
- {
- op.u.net_rule.src_port = antous(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstport", fl) == 0)
- {
- op.u.net_rule.dst_port = antous(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "srcportmask", fl) == 0)
- {
- op.u.net_rule.src_port_mask = antous(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstportmask", fl) == 0)
- {
- op.u.net_rule.dst_port_mask = antous(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "srcdom", fl) == 0)
- {
- op.u.net_rule.src_dom = antoull(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "srcidx", fl) == 0)
- {
- op.u.net_rule.src_idx = anton(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstdom", fl) == 0)
- {
- op.u.net_rule.dst_dom = antoull(&buffer[ts], tl);
- }
- else if (strncmp(&buffer[fs], "dstidx", fl) == 0)
- {
- op.u.net_rule.dst_idx = anton(&buffer[ts], tl);
- }
- else if ( (strncmp(&buffer[fs], "proto", fl) == 0))
- {
- if (strncmp(&buffer[ts], "any", tl) == 0)
- op.u.net_rule.proto = NETWORK_PROTO_ANY;
- if (strncmp(&buffer[ts], "ip", tl) == 0)
- op.u.net_rule.proto = NETWORK_PROTO_IP;
- if (strncmp(&buffer[ts], "tcp", tl) == 0)
- op.u.net_rule.proto = NETWORK_PROTO_TCP;
- if (strncmp(&buffer[ts], "udp", tl) == 0)
- op.u.net_rule.proto = NETWORK_PROTO_UDP;
- if (strncmp(&buffer[ts], "arp", tl) == 0)
- op.u.net_rule.proto = NETWORK_PROTO_ARP;
- }
- }
-
- doneparsing:
- ret = HYPERVISOR_network_op(&op);
- return(len);
-
- bad:
- return(len);
-
-
-}
-
-static int __init init_module(void)
-{
- if ( !(start_info.flags & SIF_PRIVILEGED) )
- return 0;
-
- *readbuf = '\0';
- proc_vfr = create_xen_proc_entry("vfr", 0600);
- if ( proc_vfr != NULL )
- {
- proc_vfr->owner = THIS_MODULE;
- proc_vfr->nlink = 1;
- proc_vfr->read_proc = vfr_read_proc;
- proc_vfr->write_proc = vfr_write_proc;
- printk("Successfully installed virtual firewall/router interface\n");
- }
- return 0;
-}
-
-static void __exit cleanup_module(void)
-{
- if ( proc_vfr == NULL ) return;
- remove_xen_proc_entry("vfr");
- proc_vfr = NULL;
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
-
-/* Helper functions start here: */
-
-int anton(const char *buff, int len)
-{
- int ret;
- char c;
- int sign = 1;
-
- ret = 0;
-
- if (len == 0) return 0;
- if (*buff == '-') { sign = -1; buff++; len--; }
-
- while ( (len) && ((c = *buff) >= '0') && (c <= '9') )
- {
- ret *= 10;
- ret += c - '0';
- buff++; len--;
- }
-
- ret *= sign;
- return ret;
-}
-
-u16 antous(const char *buff, int len)
-{
- u16 ret;
- char c;
-
- ret = 0;
-
- while ( (len) && ((c = *buff) >= '0') && (c <= '9') )
- {
- ret *= 10;
- ret += c - '0';
- buff++; len--;
- }
-
- return ret;
-}
-
-u64 antoull(const char *buff, int len)
-{
- u64 ret;
- char c;
-
- ret = 0;
-
- while ( (len) && ((c = *buff) >= '0') && (c <= '9') )
- {
- ret *= 10;
- ret += c - '0';
- buff++; len--;
- }
-
- return ret;
-}
-
-u32 getipaddr(const char *buff, unsigned int len)
-{
- char c;
- u32 ret, val;
-
- ret = 0; val = 0;
-
- while ( len )
- {
- if (!((((c = *buff) >= '0') && ( c <= '9')) || ( c == '.' ) ) )
- {
- return(0); // malformed.
- }
-
- if ( c == '.' ) {
- if (val > 255) return (0); //malformed.
- ret = ret << 8;
- ret += val;
- val = 0;
- len--; buff++;
- continue;
- }
- val *= 10;
- val += c - '0';
- buff++; len--;
- }
- ret = ret << 8;
- ret += val;
-
- return (ret);
-}
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/Makefile
deleted file mode 100644
index 61c983f625..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := evtchn.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/evtchn.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/evtchn.c
deleted file mode 100644
index 985d72821d..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/evtchn/evtchn.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/******************************************************************************
- * evtchn.c
- *
- * Xenolinux driver for receiving and demuxing event-channel signals.
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/errno.h>
-#include <linux/miscdevice.h>
-#include <linux/major.h>
-#include <linux/proc_fs.h>
-#include <linux/devfs_fs_kernel.h>
-#include <linux/stat.h>
-#include <linux/poll.h>
-#include <linux/irq.h>
-#include <asm/evtchn.h>
-
-/* NB. This must be shared amongst drivers if more things go in /dev/xen */
-static devfs_handle_t xen_dev_dir;
-
-/* Only one process may open /dev/xen/evtchn at any time. */
-static unsigned long evtchn_dev_inuse;
-
-/* Notification ring, accessed via /dev/xen/evtchn. */
-#define RING_SIZE 2048 /* 2048 16-bit entries */
-#define RING_MASK(_i) ((_i)&(RING_SIZE-1))
-static u16 *ring;
-static unsigned int ring_cons, ring_prod, ring_overflow;
-
-/* Processes wait on this queue via /dev/xen/evtchn when ring is empty. */
-static DECLARE_WAIT_QUEUE_HEAD(evtchn_wait);
-static struct fasync_struct *evtchn_async_queue;
-
-/* Which ports is user-space bound to? */
-static u32 bound_ports[32];
-
-static spinlock_t lock;
-
-void evtchn_device_upcall(int port)
-{
- u16 port_subtype;
- shared_info_t *s = HYPERVISOR_shared_info;
-
- spin_lock(&lock);
-
- mask_evtchn(port);
- clear_evtchn(port);
-
- if ( likely(!synch_test_and_clear_bit(port, &s->evtchn_exception[0])) )
- port_subtype = PORT_NORMAL;
- else
- port_subtype = PORT_EXCEPTION;
-
- if ( ring != NULL )
- {
- if ( (ring_prod - ring_cons) < RING_SIZE )
- {
- ring[RING_MASK(ring_prod)] = (u16)port | port_subtype;
- if ( ring_cons == ring_prod++ )
- {
- wake_up_interruptible(&evtchn_wait);
- kill_fasync(&evtchn_async_queue, SIGIO, POLL_IN);
- }
- }
- else
- {
- ring_overflow = 1;
- }
- }
-
- spin_unlock(&lock);
-}
-
-static void __evtchn_reset_buffer_ring(void)
-{
- /* Initialise the ring to empty. Clear errors. */
- ring_cons = ring_prod = ring_overflow = 0;
-}
-
-static ssize_t evtchn_read(struct file *file, char *buf,
- size_t count, loff_t *ppos)
-{
- int rc;
- unsigned int c, p, bytes1 = 0, bytes2 = 0;
- DECLARE_WAITQUEUE(wait, current);
-
- add_wait_queue(&evtchn_wait, &wait);
-
- count &= ~1; /* even number of bytes */
-
- if ( count == 0 )
- {
- rc = 0;
- goto out;
- }
-
- if ( count > PAGE_SIZE )
- count = PAGE_SIZE;
-
- for ( ; ; )
- {
- set_current_state(TASK_INTERRUPTIBLE);
-
- if ( (c = ring_cons) != (p = ring_prod) )
- break;
-
- if ( ring_overflow )
- {
- rc = -EFBIG;
- goto out;
- }
-
- if ( file->f_flags & O_NONBLOCK )
- {
- rc = -EAGAIN;
- goto out;
- }
-
- if ( signal_pending(current) )
- {
- rc = -ERESTARTSYS;
- goto out;
- }
-
- schedule();
- }
-
- /* Byte lengths of two chunks. Chunk split (if any) is at ring wrap. */
- if ( ((c ^ p) & RING_SIZE) != 0 )
- {
- bytes1 = (RING_SIZE - RING_MASK(c)) * sizeof(u16);
- bytes2 = RING_MASK(p) * sizeof(u16);
- }
- else
- {
- bytes1 = (p - c) * sizeof(u16);
- bytes2 = 0;
- }
-
- /* Truncate chunks according to caller's maximum byte count. */
- if ( bytes1 > count )
- {
- bytes1 = count;
- bytes2 = 0;
- }
- else if ( (bytes1 + bytes2) > count )
- {
- bytes2 = count - bytes1;
- }
-
- if ( copy_to_user(buf, &ring[RING_MASK(c)], bytes1) ||
- ((bytes2 != 0) && copy_to_user(&buf[bytes1], &ring[0], bytes2)) )
- {
- rc = -EFAULT;
- goto out;
- }
-
- ring_cons += (bytes1 + bytes2) / sizeof(u16);
-
- rc = bytes1 + bytes2;
-
- out:
- __set_current_state(TASK_RUNNING);
- remove_wait_queue(&evtchn_wait, &wait);
- return rc;
-}
-
-static ssize_t evtchn_write(struct file *file, const char *buf,
- size_t count, loff_t *ppos)
-{
- int rc, i;
- u16 *kbuf = (u16 *)get_free_page(GFP_KERNEL);
-
- if ( kbuf == NULL )
- return -ENOMEM;
-
- count &= ~1; /* even number of bytes */
-
- if ( count == 0 )
- {
- rc = 0;
- goto out;
- }
-
- if ( count > PAGE_SIZE )
- count = PAGE_SIZE;
-
- if ( copy_from_user(kbuf, buf, count) != 0 )
- {
- rc = -EFAULT;
- goto out;
- }
-
- spin_lock_irq(&lock);
- for ( i = 0; i < (count/2); i++ )
- if ( test_bit(kbuf[i], &bound_ports[0]) )
- unmask_evtchn(kbuf[i]);
- spin_unlock_irq(&lock);
-
- rc = count;
-
- out:
- free_page((unsigned long)kbuf);
- return rc;
-}
-
-static int evtchn_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
-{
- int rc = 0;
-
- spin_lock_irq(&lock);
-
- switch ( cmd )
- {
- case EVTCHN_RESET:
- __evtchn_reset_buffer_ring();
- break;
- case EVTCHN_BIND:
- if ( !test_and_set_bit(arg, &bound_ports[0]) )
- unmask_evtchn(arg);
- else
- rc = -EINVAL;
- break;
- case EVTCHN_UNBIND:
- if ( test_and_clear_bit(arg, &bound_ports[0]) )
- mask_evtchn(arg);
- else
- rc = -EINVAL;
- break;
- default:
- rc = -ENOSYS;
- break;
- }
-
- spin_unlock_irq(&lock);
-
- return rc;
-}
-
-static unsigned int evtchn_poll(struct file *file, poll_table *wait)
-{
- unsigned int mask = POLLOUT | POLLWRNORM;
- poll_wait(file, &evtchn_wait, wait);
- if ( ring_cons != ring_prod )
- mask |= POLLIN | POLLRDNORM;
- if ( ring_overflow )
- mask = POLLERR;
- return mask;
-}
-
-static int evtchn_fasync(int fd, struct file *filp, int on)
-{
- return fasync_helper(fd, filp, on, &evtchn_async_queue);
-}
-
-static int evtchn_open(struct inode *inode, struct file *filp)
-{
- u16 *_ring;
-
- if ( test_and_set_bit(0, &evtchn_dev_inuse) )
- return -EBUSY;
-
- /* Allocate outside locked region so that we can use GFP_KERNEL. */
- if ( (_ring = (u16 *)get_free_page(GFP_KERNEL)) == NULL )
- return -ENOMEM;
-
- spin_lock_irq(&lock);
- ring = _ring;
- __evtchn_reset_buffer_ring();
- spin_unlock_irq(&lock);
-
- MOD_INC_USE_COUNT;
-
- return 0;
-}
-
-static int evtchn_release(struct inode *inode, struct file *filp)
-{
- int i;
-
- spin_lock_irq(&lock);
- if ( ring != NULL )
- {
- free_page((unsigned long)ring);
- ring = NULL;
- }
- for ( i = 0; i < NR_EVENT_CHANNELS; i++ )
- if ( test_and_clear_bit(i, &bound_ports[0]) )
- mask_evtchn(i);
- spin_unlock_irq(&lock);
-
- evtchn_dev_inuse = 0;
-
- MOD_DEC_USE_COUNT;
-
- return 0;
-}
-
-static struct file_operations evtchn_fops = {
- owner: THIS_MODULE,
- read: evtchn_read,
- write: evtchn_write,
- ioctl: evtchn_ioctl,
- poll: evtchn_poll,
- fasync: evtchn_fasync,
- open: evtchn_open,
- release: evtchn_release
-};
-
-static struct miscdevice evtchn_miscdev = {
- minor: EVTCHN_MINOR,
- name: "evtchn",
- fops: &evtchn_fops
-};
-
-static int __init init_module(void)
-{
- devfs_handle_t symlink_handle;
- int err, pos;
- char link_dest[64];
-
- /* (DEVFS) create '/dev/misc/evtchn'. */
- err = misc_register(&evtchn_miscdev);
- if ( err != 0 )
- {
- printk(KERN_ALERT "Could not register /dev/misc/evtchn\n");
- return err;
- }
-
- /* (DEVFS) create directory '/dev/xen'. */
- xen_dev_dir = devfs_mk_dir(NULL, "xen", NULL);
-
- /* (DEVFS) &link_dest[pos] == '../misc/evtchn'. */
- pos = devfs_generate_path(evtchn_miscdev.devfs_handle,
- &link_dest[3],
- sizeof(link_dest) - 3);
- if ( pos >= 0 )
- strncpy(&link_dest[pos], "../", 3);
-
- /* (DEVFS) symlink '/dev/xen/evtchn' -> '../misc/evtchn'. */
- (void)devfs_mk_symlink(xen_dev_dir,
- "evtchn",
- DEVFS_FL_DEFAULT,
- &link_dest[pos],
- &symlink_handle,
- NULL);
-
- /* (DEVFS) automatically destroy the symlink with its destination. */
- devfs_auto_unregister(evtchn_miscdev.devfs_handle, symlink_handle);
-
- printk("Event-channel device installed.\n");
-
- return 0;
-}
-
-static void cleanup_module(void)
-{
- misc_deregister(&evtchn_miscdev);
-}
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/network/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/network/Makefile
deleted file mode 100644
index 2e4c1f4825..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/network/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := network.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/network/network.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/network/network.c
deleted file mode 100644
index ef54ff7fe9..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/network/network.c
+++ /dev/null
@@ -1,643 +0,0 @@
-/******************************************************************************
- * network.c
- *
- * Virtual network driver for XenoLinux.
- *
- * Copyright (c) 2002-2003, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/netdevice.h>
-#include <linux/inetdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/init.h>
-
-#include <asm/io.h>
-#include <net/sock.h>
-#include <net/pkt_sched.h>
-
-#define RX_BUF_SIZE ((PAGE_SIZE/2)+1) /* Fool the slab allocator :-) */
-
-static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs);
-static void network_tx_buf_gc(struct net_device *dev);
-static void network_alloc_rx_buffers(struct net_device *dev);
-static void cleanup_module(void);
-
-/* Dynamically-mapped IRQs. */
-static int network_irq, debug_irq;
-
-static struct list_head dev_list;
-
-struct net_private
-{
- struct list_head list;
- struct net_device *dev;
-
- struct net_device_stats stats;
- NET_RING_IDX rx_resp_cons, tx_resp_cons;
- unsigned int net_ring_fixmap_idx, tx_full;
- net_ring_t *net_ring;
- net_idx_t *net_idx;
- spinlock_t tx_lock;
- unsigned int idx; /* Domain-specific index of this VIF. */
-
- unsigned int rx_bufs_to_notify;
-
-#define STATE_ACTIVE 0
-#define STATE_SUSPENDED 1
-#define STATE_CLOSED 2
- unsigned int state;
-
- /*
- * {tx,rx}_skbs store outstanding skbuffs. The first entry in each
- * array is an index into a chain of free entries.
- */
- struct sk_buff *tx_skbs[XENNET_TX_RING_SIZE+1];
- struct sk_buff *rx_skbs[XENNET_RX_RING_SIZE+1];
-};
-
-/* Access macros for acquiring freeing slots in {tx,rx}_skbs[]. */
-#define ADD_ID_TO_FREELIST(_list, _id) \
- (_list)[(_id)] = (_list)[0]; \
- (_list)[0] = (void *)(unsigned long)(_id);
-#define GET_ID_FROM_FREELIST(_list) \
- ({ unsigned long _id = (unsigned long)(_list)[0]; \
- (_list)[0] = (_list)[_id]; \
- (unsigned short)_id; })
-
-
-static void _dbg_network_int(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
-
- if ( np->state == STATE_CLOSED )
- return;
-
- printk(KERN_ALERT "net: tx_full=%d, tx_resp_cons=0x%08x,"
- " tx_req_prod=0x%08x\nnet: tx_resp_prod=0x%08x,"
- " tx_event=0x%08x, state=%d\n",
- np->tx_full, np->tx_resp_cons,
- np->net_idx->tx_req_prod, np->net_idx->tx_resp_prod,
- np->net_idx->tx_event,
- test_bit(__LINK_STATE_XOFF, &dev->state));
- printk(KERN_ALERT "net: rx_resp_cons=0x%08x,"
- " rx_req_prod=0x%08x\nnet: rx_resp_prod=0x%08x, rx_event=0x%08x\n",
- np->rx_resp_cons, np->net_idx->rx_req_prod,
- np->net_idx->rx_resp_prod, np->net_idx->rx_event);
-}
-
-
-static void dbg_network_int(int irq, void *unused, struct pt_regs *ptregs)
-{
- struct list_head *ent;
- struct net_private *np;
- list_for_each ( ent, &dev_list )
- {
- np = list_entry(ent, struct net_private, list);
- _dbg_network_int(np->dev);
- }
-}
-
-
-static int network_open(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- netop_t netop;
- int i, ret;
-
- netop.cmd = NETOP_RESET_RINGS;
- netop.vif = np->idx;
- if ( (ret = HYPERVISOR_net_io_op(&netop)) != 0 )
- {
- printk(KERN_ALERT "Possible net trouble: couldn't reset ring idxs\n");
- return ret;
- }
-
- netop.cmd = NETOP_GET_VIF_INFO;
- netop.vif = np->idx;
- if ( (ret = HYPERVISOR_net_io_op(&netop)) != 0 )
- {
- printk(KERN_ALERT "Couldn't get info for vif %d\n", np->idx);
- return ret;
- }
-
- memcpy(dev->dev_addr, netop.u.get_vif_info.vmac, ETH_ALEN);
-
- set_fixmap(FIX_NETRING0_BASE + np->net_ring_fixmap_idx,
- netop.u.get_vif_info.ring_mfn << PAGE_SHIFT);
- np->net_ring = (net_ring_t *)fix_to_virt(
- FIX_NETRING0_BASE + np->net_ring_fixmap_idx);
- np->net_idx = &HYPERVISOR_shared_info->net_idx[np->idx];
-
- np->rx_bufs_to_notify = 0;
- np->rx_resp_cons = np->tx_resp_cons = np->tx_full = 0;
- memset(&np->stats, 0, sizeof(np->stats));
- spin_lock_init(&np->tx_lock);
- memset(np->net_ring, 0, sizeof(*np->net_ring));
- memset(np->net_idx, 0, sizeof(*np->net_idx));
-
- /* Initialise {tx,rx}_skbs to be a free chain containing every entry. */
- for ( i = 0; i <= XENNET_TX_RING_SIZE; i++ )
- np->tx_skbs[i] = (void *)(i+1);
- for ( i = 0; i <= XENNET_RX_RING_SIZE; i++ )
- np->rx_skbs[i] = (void *)(i+1);
-
- wmb();
- np->state = STATE_ACTIVE;
-
- network_alloc_rx_buffers(dev);
-
- netif_start_queue(dev);
-
- MOD_INC_USE_COUNT;
-
- return 0;
-}
-
-
-static void network_tx_buf_gc(struct net_device *dev)
-{
- NET_RING_IDX i, prod;
- unsigned short id;
- struct net_private *np = dev->priv;
- struct sk_buff *skb;
- tx_entry_t *tx_ring = np->net_ring->tx_ring;
-
- do {
- prod = np->net_idx->tx_resp_prod;
-
- for ( i = np->tx_resp_cons; i != prod; i++ )
- {
- id = tx_ring[MASK_NET_TX_IDX(i)].resp.id;
- skb = np->tx_skbs[id];
- ADD_ID_TO_FREELIST(np->tx_skbs, id);
- dev_kfree_skb_any(skb);
- }
-
- np->tx_resp_cons = prod;
-
- /*
- * Set a new event, then check for race with update of tx_cons. Note
- * that it is essential to schedule a callback, no matter how few
- * buffers are pending. Even if there is space in the transmit ring,
- * higher layers may be blocked because too much data is outstanding:
- * in such cases notification from Xen is likely to be the only kick
- * that we'll get.
- */
- np->net_idx->tx_event =
- prod + ((np->net_idx->tx_req_prod - prod) >> 1) + 1;
- mb();
- }
- while ( prod != np->net_idx->tx_resp_prod );
-
- if ( np->tx_full &&
- ((np->net_idx->tx_req_prod - prod) < XENNET_TX_RING_SIZE) )
- {
- np->tx_full = 0;
- if ( np->state == STATE_ACTIVE )
- netif_wake_queue(dev);
- }
-}
-
-
-static inline pte_t *get_ppte(void *addr)
-{
- pgd_t *pgd; pmd_t *pmd; pte_t *pte;
- pgd = pgd_offset_k( (unsigned long)addr);
- pmd = pmd_offset(pgd, (unsigned long)addr);
- pte = pte_offset(pmd, (unsigned long)addr);
- return pte;
-}
-
-
-static void network_alloc_rx_buffers(struct net_device *dev)
-{
- unsigned short id;
- struct net_private *np = dev->priv;
- struct sk_buff *skb;
- netop_t netop;
- NET_RING_IDX i = np->net_idx->rx_req_prod;
-
- if ( unlikely((i - np->rx_resp_cons) == XENNET_RX_RING_SIZE) ||
- unlikely(np->state != STATE_ACTIVE) )
- return;
-
- do {
- skb = dev_alloc_skb(RX_BUF_SIZE);
- if ( unlikely(skb == NULL) )
- break;
-
- skb->dev = dev;
-
- if ( unlikely(((unsigned long)skb->head & (PAGE_SIZE-1)) != 0) )
- panic("alloc_skb needs to provide us page-aligned buffers.");
-
- id = GET_ID_FROM_FREELIST(np->rx_skbs);
- np->rx_skbs[id] = skb;
-
- np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].req.id = id;
- np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].req.addr =
- virt_to_machine(get_ppte(skb->head));
-
- np->rx_bufs_to_notify++;
- }
- while ( (++i - np->rx_resp_cons) != XENNET_RX_RING_SIZE );
-
- /*
- * We may have allocated buffers which have entries outstanding in the page
- * update queue -- make sure we flush those first!
- */
- flush_page_update_queue();
-
- np->net_idx->rx_req_prod = i;
- np->net_idx->rx_event = np->rx_resp_cons + 1;
-
- /* Batch Xen notifications. */
- if ( np->rx_bufs_to_notify > (XENNET_RX_RING_SIZE/4) )
- {
- netop.cmd = NETOP_PUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
- np->rx_bufs_to_notify = 0;
- }
-}
-
-
-static int network_start_xmit(struct sk_buff *skb, struct net_device *dev)
-{
- unsigned short id;
- struct net_private *np = (struct net_private *)dev->priv;
- tx_req_entry_t *tx;
- netop_t netop;
- NET_RING_IDX i;
-
- if ( unlikely(np->tx_full) )
- {
- printk(KERN_ALERT "%s: full queue wasn't stopped!\n", dev->name);
- netif_stop_queue(dev);
- return -ENOBUFS;
- }
-
- if ( unlikely((((unsigned long)skb->data & ~PAGE_MASK) + skb->len) >=
- PAGE_SIZE) )
- {
- struct sk_buff *new_skb = dev_alloc_skb(RX_BUF_SIZE);
- if ( unlikely(new_skb == NULL) )
- return 1;
- skb_put(new_skb, skb->len);
- memcpy(new_skb->data, skb->data, skb->len);
- dev_kfree_skb(skb);
- skb = new_skb;
- }
-
- spin_lock_irq(&np->tx_lock);
-
- i = np->net_idx->tx_req_prod;
-
- id = GET_ID_FROM_FREELIST(np->tx_skbs);
- np->tx_skbs[id] = skb;
-
- tx = &np->net_ring->tx_ring[MASK_NET_TX_IDX(i)].req;
-
- tx->id = id;
- tx->addr = phys_to_machine(virt_to_phys(skb->data));
- tx->size = skb->len;
-
- wmb();
- np->net_idx->tx_req_prod = i + 1;
-
- network_tx_buf_gc(dev);
-
- if ( (i - np->tx_resp_cons) == (XENNET_TX_RING_SIZE - 1) )
- {
- np->tx_full = 1;
- netif_stop_queue(dev);
- }
-
- spin_unlock_irq(&np->tx_lock);
-
- np->stats.tx_bytes += skb->len;
- np->stats.tx_packets++;
-
- /* Only notify Xen if there are no outstanding responses. */
- mb();
- if ( np->net_idx->tx_resp_prod == i )
- {
- netop.cmd = NETOP_PUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
- }
-
- return 0;
-}
-
-
-static inline void _network_interrupt(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- unsigned long flags;
- struct sk_buff *skb;
- rx_resp_entry_t *rx;
- NET_RING_IDX i;
-
- if ( unlikely(np->state == STATE_CLOSED) )
- return;
-
- spin_lock_irqsave(&np->tx_lock, flags);
- network_tx_buf_gc(dev);
- spin_unlock_irqrestore(&np->tx_lock, flags);
-
- again:
- for ( i = np->rx_resp_cons; i != np->net_idx->rx_resp_prod; i++ )
- {
- rx = &np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].resp;
-
- skb = np->rx_skbs[rx->id];
- ADD_ID_TO_FREELIST(np->rx_skbs, rx->id);
-
- if ( unlikely(rx->status != RING_STATUS_OK) )
- {
- /* Gate this error. We get a (valid) slew of them on suspend. */
- if ( np->state == STATE_ACTIVE )
- printk(KERN_ALERT "bad buffer on RX ring!(%d)\n", rx->status);
- dev_kfree_skb_any(skb);
- continue;
- }
-
- /*
- * Set up shinfo -- from alloc_skb This was particularily nasty: the
- * shared info is hidden at the back of the data area (presumably so it
- * can be shared), but on page flip it gets very spunked.
- */
- atomic_set(&(skb_shinfo(skb)->dataref), 1);
- skb_shinfo(skb)->nr_frags = 0;
- skb_shinfo(skb)->frag_list = NULL;
-
- phys_to_machine_mapping[virt_to_phys(skb->head) >> PAGE_SHIFT] =
- (*(unsigned long *)get_ppte(skb->head)) >> PAGE_SHIFT;
-
- skb->data = skb->tail = skb->head + rx->offset;
- skb_put(skb, rx->size);
- skb->protocol = eth_type_trans(skb, dev);
-
- np->stats.rx_packets++;
-
- np->stats.rx_bytes += rx->size;
- netif_rx(skb);
- dev->last_rx = jiffies;
- }
-
- np->rx_resp_cons = i;
-
- network_alloc_rx_buffers(dev);
-
- /* Deal with hypervisor racing our resetting of rx_event. */
- mb();
- if ( np->net_idx->rx_resp_prod != i )
- goto again;
-}
-
-
-static void network_interrupt(int irq, void *unused, struct pt_regs *ptregs)
-{
- struct list_head *ent;
- struct net_private *np;
- list_for_each ( ent, &dev_list )
- {
- np = list_entry(ent, struct net_private, list);
- _network_interrupt(np->dev);
- }
-}
-
-
-static int network_close(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- netop_t netop;
-
- np->state = STATE_SUSPENDED;
- wmb();
-
- netif_stop_queue(np->dev);
-
- netop.cmd = NETOP_FLUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
-
- while ( (np->rx_resp_cons != np->net_idx->rx_req_prod) ||
- (np->tx_resp_cons != np->net_idx->tx_req_prod) )
- {
- barrier();
- current->state = TASK_INTERRUPTIBLE;
- schedule_timeout(1);
- }
-
- wmb();
- np->state = STATE_CLOSED;
- wmb();
-
- /* Now no longer safe to take interrupts for this device. */
- clear_fixmap(FIX_NETRING0_BASE + np->net_ring_fixmap_idx);
-
- MOD_DEC_USE_COUNT;
-
- return 0;
-}
-
-
-static struct net_device_stats *network_get_stats(struct net_device *dev)
-{
- struct net_private *np = (struct net_private *)dev->priv;
- return &np->stats;
-}
-
-
-/*
- * This notifier is installed for domain 0 only.
- * All other domains have VFR rules installed on their behalf by domain 0
- * when they are created. For bootstrap, Xen creates wildcard rules for
- * domain 0 -- this notifier is used to detect when we find our proper
- * IP address, so we can poke down proper rules and remove the wildcards.
- */
-static int inetdev_notify(struct notifier_block *this,
- unsigned long event,
- void *ptr)
-{
- struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
- struct net_device *dev = ifa->ifa_dev->dev;
- struct list_head *ent;
- struct net_private *np;
- int idx = -1;
- network_op_t op;
-
- list_for_each ( ent, &dev_list )
- {
- np = list_entry(dev_list.next, struct net_private, list);
- if ( np->dev == dev )
- idx = np->idx;
- }
-
- if ( idx == -1 )
- goto out;
-
- memset(&op, 0, sizeof(op));
- op.u.net_rule.proto = NETWORK_PROTO_ANY;
- op.u.net_rule.action = NETWORK_ACTION_ACCEPT;
-
- if ( event == NETDEV_UP )
- op.cmd = NETWORK_OP_ADDRULE;
- else if ( event == NETDEV_DOWN )
- op.cmd = NETWORK_OP_DELETERULE;
- else
- goto out;
-
- op.u.net_rule.src_dom = 0;
- op.u.net_rule.src_idx = idx;
- op.u.net_rule.dst_dom = VIF_SPECIAL;
- op.u.net_rule.dst_idx = VIF_PHYSICAL_INTERFACE;
- op.u.net_rule.src_addr = ntohl(ifa->ifa_address);
- op.u.net_rule.src_addr_mask = ~0UL;
- op.u.net_rule.dst_addr = 0;
- op.u.net_rule.dst_addr_mask = 0;
- (void)HYPERVISOR_network_op(&op);
-
- op.u.net_rule.src_dom = VIF_SPECIAL;
- op.u.net_rule.src_idx = VIF_ANY_INTERFACE;
- op.u.net_rule.dst_dom = 0;
- op.u.net_rule.dst_idx = idx;
- op.u.net_rule.src_addr = 0;
- op.u.net_rule.src_addr_mask = 0;
- op.u.net_rule.dst_addr = ntohl(ifa->ifa_address);
- op.u.net_rule.dst_addr_mask = ~0UL;
- (void)HYPERVISOR_network_op(&op);
-
- out:
- return NOTIFY_DONE;
-}
-
-static struct notifier_block notifier_inetdev = {
- .notifier_call = inetdev_notify,
- .next = NULL,
- .priority = 0
-};
-
-
-static int __init init_module(void)
-{
- int i, fixmap_idx=-1, err;
- struct net_device *dev;
- struct net_private *np;
- netop_t netop;
-
- INIT_LIST_HEAD(&dev_list);
-
- /*
- * Domain 0 must poke its own network rules as it discovers its IP
- * addresses. All other domains have a privileged "parent" to do this for
- * them at start of day.
- */
- if ( start_info.flags & SIF_INITDOMAIN )
- (void)register_inetaddr_notifier(&notifier_inetdev);
-
- network_irq = bind_virq_to_irq(VIRQ_NET);
- debug_irq = bind_virq_to_irq(VIRQ_DEBUG);
-
- err = request_irq(network_irq, network_interrupt,
- SA_SAMPLE_RANDOM, "network", NULL);
- if ( err )
- {
- printk(KERN_WARNING "Could not allocate network interrupt\n");
- goto fail;
- }
-
- err = request_irq(debug_irq, dbg_network_int,
- SA_SHIRQ, "net_dbg", &dbg_network_int);
- if ( err )
- printk(KERN_WARNING "Non-fatal error -- no debug interrupt\n");
-
- for ( i = 0; i < MAX_DOMAIN_VIFS; i++ )
- {
- /* If the VIF is invalid then the query hypercall will fail. */
- netop.cmd = NETOP_GET_VIF_INFO;
- netop.vif = i;
- if ( HYPERVISOR_net_io_op(&netop) != 0 )
- continue;
-
- /* We actually only support up to 4 vifs right now. */
- if ( ++fixmap_idx == 4 )
- break;
-
- dev = alloc_etherdev(sizeof(struct net_private));
- if ( dev == NULL )
- {
- err = -ENOMEM;
- goto fail;
- }
-
- np = dev->priv;
- np->state = STATE_CLOSED;
- np->net_ring_fixmap_idx = fixmap_idx;
- np->idx = i;
-
- SET_MODULE_OWNER(dev);
- dev->open = network_open;
- dev->hard_start_xmit = network_start_xmit;
- dev->stop = network_close;
- dev->get_stats = network_get_stats;
-
- memcpy(dev->dev_addr, netop.u.get_vif_info.vmac, ETH_ALEN);
-
- if ( (err = register_netdev(dev)) != 0 )
- {
- kfree(dev);
- goto fail;
- }
-
- np->dev = dev;
- list_add(&np->list, &dev_list);
- }
-
- return 0;
-
- fail:
- cleanup_module();
- return err;
-}
-
-
-static void cleanup_module(void)
-{
- struct net_private *np;
- struct net_device *dev;
-
- while ( !list_empty(&dev_list) )
- {
- np = list_entry(dev_list.next, struct net_private, list);
- list_del(&np->list);
- dev = np->dev;
- unregister_netdev(dev);
- kfree(dev);
- }
-
- if ( start_info.flags & SIF_INITDOMAIN )
- (void)unregister_inetaddr_notifier(&notifier_inetdev);
-
- free_irq(network_irq, NULL);
- free_irq(debug_irq, NULL);
-
- unbind_virq_from_irq(VIRQ_NET);
- unbind_virq_from_irq(VIRQ_DEBUG);
-}
-
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/Makefile
deleted file mode 100644
index 35986ca54a..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := block.o vbd.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.c
deleted file mode 100644
index d00dd98f7b..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/******************************************************************************
- * block.c
- *
- * Xenolinux virtual block-device driver.
- *
- * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
- * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
- */
-
-#include "block.h"
-#include <linux/blk.h>
-#include <linux/cdrom.h>
-#include <linux/tqueue.h>
-#include <linux/sched.h>
-#include <scsi/scsi.h>
-
-#include <linux/interrupt.h>
-
-typedef unsigned char byte; /* from linux/ide.h */
-
-#define STATE_ACTIVE 0
-#define STATE_SUSPENDED 1
-#define STATE_CLOSED 2
-static unsigned int state = STATE_SUSPENDED;
-
-/* Dynamically-mapped IRQs. */
-static int xlblk_response_irq, xlblk_update_irq;
-
-static blk_ring_t *blk_ring;
-static BLK_RING_IDX resp_cons; /* Response consumer for comms ring. */
-static BLK_RING_IDX req_prod; /* Private request producer. */
-
-/* We plug the I/O ring if the driver is suspended or if the ring is full. */
-#define RING_PLUGGED (((req_prod - resp_cons) == BLK_RING_SIZE) || \
- (state != STATE_ACTIVE))
-
-
-/*
- * Request queues with outstanding work, but ring is currently full.
- * We need no special lock here, as we always access this with the
- * io_request_lock held. We only need a small maximum list.
- */
-#define MAX_PENDING 8
-static request_queue_t *pending_queues[MAX_PENDING];
-static int nr_pending;
-
-static kdev_t sg_dev;
-static int sg_operation = -1;
-static unsigned long sg_next_sect;
-#define DISABLE_SCATTERGATHER() (sg_operation = -1)
-
-static inline void signal_requests_to_xen(void)
-{
- block_io_op_t op;
-
- DISABLE_SCATTERGATHER();
- blk_ring->req_prod = req_prod;
-
- op.cmd = BLOCK_IO_OP_SIGNAL;
- HYPERVISOR_block_io_op(&op);
- return;
-}
-
-
-/*
- * xlblk_update_int/update-vbds_task - handle VBD update events from Xen
- *
- * Schedule a task for keventd to run, which will update the VBDs and perform
- * the corresponding updates to our view of VBD state, so the XenoLinux will
- * respond to changes / additions / deletions to the set of VBDs automatically.
- */
-static struct tq_struct update_tq;
-static void update_vbds_task(void *unused)
-{
- xlvbd_update_vbds();
-}
-static void xlblk_update_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- update_tq.routine = update_vbds_task;
- schedule_task(&update_tq);
-}
-
-
-int xen_block_open(struct inode *inode, struct file *filep)
-{
- short xldev = inode->i_rdev;
- struct gendisk *gd = get_gendisk(xldev);
- xl_disk_t *disk = xldev_to_xldisk(inode->i_rdev);
- short minor = MINOR(xldev);
-
- if ( gd->part[minor].nr_sects == 0 )
- {
- /*
- * Device either doesn't exist, or has zero capacity; we use a few
- * cheesy heuristics to return the relevant error code
- */
- if ( (gd->sizes[minor >> gd->minor_shift] != 0) ||
- ((minor & (gd->max_p - 1)) != 0) )
- {
- /*
- * We have a real device, but no such partition, or we just have a
- * partition number so guess this is the problem.
- */
- return -ENXIO; /* no such device or address */
- }
- else if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE )
- {
- /* This is a removable device => assume that media is missing. */
- return -ENOMEDIUM; /* media not present (this is a guess) */
- }
- else
- {
- /* Just go for the general 'no such device' error. */
- return -ENODEV; /* no such device */
- }
- }
-
- /* Update of usage count is protected by per-device semaphore. */
- disk->usage++;
-
- return 0;
-}
-
-
-int xen_block_release(struct inode *inode, struct file *filep)
-{
- xl_disk_t *disk = xldev_to_xldisk(inode->i_rdev);
-
- /*
- * When usage drops to zero it may allow more VBD updates to occur.
- * Update of usage count is protected by a per-device semaphore.
- */
- if ( --disk->usage == 0 )
- {
- update_tq.routine = update_vbds_task;
- schedule_task(&update_tq);
- }
-
- return 0;
-}
-
-
-int xen_block_ioctl(struct inode *inode, struct file *filep,
- unsigned command, unsigned long argument)
-{
- kdev_t dev = inode->i_rdev;
- struct hd_geometry *geo = (struct hd_geometry *)argument;
- struct gendisk *gd;
- struct hd_struct *part;
- int i;
-
- /* NB. No need to check permissions. That is done for us. */
-
- DPRINTK_IOCTL("command: 0x%x, argument: 0x%lx, dev: 0x%04x\n",
- command, (long) argument, dev);
-
- gd = get_gendisk(dev);
- part = &gd->part[MINOR(dev)];
-
- switch ( command )
- {
- case BLKGETSIZE:
- DPRINTK_IOCTL(" BLKGETSIZE: %x %lx\n", BLKGETSIZE, part->nr_sects);
- return put_user(part->nr_sects, (unsigned long *) argument);
-
- case BLKGETSIZE64:
- DPRINTK_IOCTL(" BLKGETSIZE64: %x %llx\n", BLKGETSIZE64,
- (u64)part->nr_sects * 512);
- return put_user((u64)part->nr_sects * 512, (u64 *) argument);
-
- case BLKRRPART: /* re-read partition table */
- DPRINTK_IOCTL(" BLKRRPART: %x\n", BLKRRPART);
- return xen_block_revalidate(dev);
-
- case BLKSSZGET:
- return hardsect_size[MAJOR(dev)][MINOR(dev)];
-
- case BLKBSZGET: /* get block size */
- DPRINTK_IOCTL(" BLKBSZGET: %x\n", BLKBSZGET);
- break;
-
- case BLKBSZSET: /* set block size */
- DPRINTK_IOCTL(" BLKBSZSET: %x\n", BLKBSZSET);
- break;
-
- case BLKRASET: /* set read-ahead */
- DPRINTK_IOCTL(" BLKRASET: %x\n", BLKRASET);
- break;
-
- case BLKRAGET: /* get read-ahead */
- DPRINTK_IOCTL(" BLKRAFET: %x\n", BLKRAGET);
- break;
-
- case HDIO_GETGEO:
- /* note: these values are complete garbage */
- DPRINTK_IOCTL(" HDIO_GETGEO: %x\n", HDIO_GETGEO);
- if (!argument) return -EINVAL;
- if (put_user(0x00, (unsigned long *) &geo->start)) return -EFAULT;
- if (put_user(0xff, (byte *)&geo->heads)) return -EFAULT;
- if (put_user(0x3f, (byte *)&geo->sectors)) return -EFAULT;
- if (put_user(0x106, (unsigned short *)&geo->cylinders)) return -EFAULT;
- return 0;
-
- case HDIO_GETGEO_BIG:
- /* note: these values are complete garbage */
- DPRINTK_IOCTL(" HDIO_GETGEO_BIG: %x\n", HDIO_GETGEO_BIG);
- if (!argument) return -EINVAL;
- if (put_user(0x00, (unsigned long *) &geo->start)) return -EFAULT;
- if (put_user(0xff, (byte *)&geo->heads)) return -EFAULT;
- if (put_user(0x3f, (byte *)&geo->sectors)) return -EFAULT;
- if (put_user(0x106, (unsigned int *) &geo->cylinders)) return -EFAULT;
- return 0;
-
- case CDROMMULTISESSION:
- DPRINTK("FIXME: support multisession CDs later\n");
- for ( i = 0; i < sizeof(struct cdrom_multisession); i++ )
- if ( put_user(0, (byte *)(argument + i)) ) return -EFAULT;
- return 0;
-
- case SCSI_IOCTL_GET_BUS_NUMBER:
- DPRINTK("FIXME: SCSI_IOCTL_GET_BUS_NUMBER ioctl in Xen blkdev");
- return -ENOSYS;
-
- default:
- printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n", command);
- return -ENOSYS;
- }
-
- return 0;
-}
-
-/* check media change: should probably do something here in some cases :-) */
-int xen_block_check(kdev_t dev)
-{
- DPRINTK("xen_block_check\n");
- return 0;
-}
-
-int xen_block_revalidate(kdev_t dev)
-{
- struct block_device *bd;
- struct gendisk *gd;
- xl_disk_t *disk;
- unsigned long capacity;
- int i, rc = 0;
-
- if ( (bd = bdget(dev)) == NULL )
- return -EINVAL;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((gd = get_gendisk(dev)) == NULL) ||
- ((disk = xldev_to_xldisk(dev)) == NULL) ||
- ((capacity = gd->part[MINOR(dev)].nr_sects) == 0) )
- {
- rc = -EINVAL;
- goto out;
- }
-
- if ( disk->usage > 1 )
- {
- rc = -EBUSY;
- goto out;
- }
-
- /* Only reread partition table if VBDs aren't mapped to partitions. */
- if ( !(gd->flags[MINOR(dev) >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) )
- {
- for ( i = gd->max_p - 1; i >= 0; i-- )
- {
- invalidate_device(dev+i, 1);
- gd->part[MINOR(dev+i)].start_sect = 0;
- gd->part[MINOR(dev+i)].nr_sects = 0;
- gd->sizes[MINOR(dev+i)] = 0;
- }
-
- grok_partitions(gd, MINOR(dev)>>gd->minor_shift, gd->max_p, capacity);
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-
-/*
- * hypervisor_request
- *
- * request block io
- *
- * id: for guest use only.
- * operation: XEN_BLOCK_{READ,WRITE,PROBE,VBD*}
- * buffer: buffer to read/write into. this should be a
- * virtual address in the guest os.
- */
-static int hypervisor_request(unsigned long id,
- int operation,
- char * buffer,
- unsigned long sector_number,
- unsigned short nr_sectors,
- kdev_t device)
-{
- unsigned long buffer_ma = phys_to_machine(virt_to_phys(buffer));
- struct gendisk *gd;
- blk_ring_req_entry_t *req;
- struct buffer_head *bh;
-
- if ( unlikely(nr_sectors >= (1<<9)) )
- BUG();
- if ( unlikely((buffer_ma & ((1<<9)-1)) != 0) )
- BUG();
-
- if ( unlikely(state == STATE_CLOSED) )
- return 1;
-
- switch ( operation )
- {
-
- case XEN_BLOCK_READ:
- case XEN_BLOCK_WRITE:
- gd = get_gendisk(device);
-
- /*
- * Update the sector_number we'll pass down as appropriate; note that
- * we could sanity check that resulting sector will be in this
- * partition, but this will happen in xen anyhow.
- */
- sector_number += gd->part[MINOR(device)].start_sect;
-
- /*
- * If this unit doesn't consist of virtual (i.e., Xen-specified)
- * partitions then we clear the partn bits from the device number.
- */
- if ( !(gd->flags[MINOR(device)>>gd->minor_shift] &
- GENHD_FL_VIRT_PARTNS) )
- device &= ~(gd->max_p - 1);
-
- if ( (sg_operation == operation) &&
- (sg_dev == device) &&
- (sg_next_sect == sector_number) )
- {
- req = &blk_ring->ring[MASK_BLK_IDX(req_prod-1)].req;
- bh = (struct buffer_head *)id;
- bh->b_reqnext = (struct buffer_head *)req->id;
- req->id = id;
- req->buffer_and_sects[req->nr_segments] = buffer_ma | nr_sectors;
- if ( ++req->nr_segments < MAX_BLK_SEGS )
- sg_next_sect += nr_sectors;
- else
- DISABLE_SCATTERGATHER();
- return 0;
- }
- else if ( RING_PLUGGED )
- {
- return 1;
- }
- else
- {
- sg_operation = operation;
- sg_dev = device;
- sg_next_sect = sector_number + nr_sectors;
- }
- break;
-
- default:
- panic("unknown op %d\n", operation);
- }
-
- /* Fill out a communications ring structure. */
- req = &blk_ring->ring[MASK_BLK_IDX(req_prod)].req;
- req->id = id;
- req->operation = operation;
- req->sector_number = (xen_sector_t)sector_number;
- req->device = device;
- req->nr_segments = 1;
- req->buffer_and_sects[0] = buffer_ma | nr_sectors;
- req_prod++;
-
- return 0;
-}
-
-
-/*
- * do_xlblk_request
- * read a block; request is in a request queue
- */
-void do_xlblk_request(request_queue_t *rq)
-{
- struct request *req;
- struct buffer_head *bh, *next_bh;
- int rw, nsect, full, queued = 0;
-
- DPRINTK("xlblk.c::do_xlblk_request\n");
-
- while ( !rq->plugged && !list_empty(&rq->queue_head))
- {
- if ( (req = blkdev_entry_next_request(&rq->queue_head)) == NULL )
- goto out;
-
- DPRINTK("do_xlblk_request %p: cmd %i, sec %lx, (%li/%li) bh:%p\n",
- req, req->cmd, req->sector,
- req->current_nr_sectors, req->nr_sectors, req->bh);
-
- rw = req->cmd;
- if ( rw == READA )
- rw = READ;
- if ( unlikely((rw != READ) && (rw != WRITE)) )
- panic("XenoLinux Virtual Block Device: bad cmd: %d\n", rw);
-
- req->errors = 0;
-
- bh = req->bh;
- while ( bh != NULL )
- {
- next_bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
-
- full = hypervisor_request(
- (unsigned long)bh,
- (rw == READ) ? XEN_BLOCK_READ : XEN_BLOCK_WRITE,
- bh->b_data, bh->b_rsector, bh->b_size>>9, bh->b_rdev);
-
- if ( full )
- {
- bh->b_reqnext = next_bh;
- pending_queues[nr_pending++] = rq;
- if ( unlikely(nr_pending >= MAX_PENDING) )
- BUG();
- goto out;
- }
-
- queued++;
-
- /* Dequeue the buffer head from the request. */
- nsect = bh->b_size >> 9;
- bh = req->bh = next_bh;
-
- if ( bh != NULL )
- {
- /* There's another buffer head to do. Update the request. */
- req->hard_sector += nsect;
- req->hard_nr_sectors -= nsect;
- req->sector = req->hard_sector;
- req->nr_sectors = req->hard_nr_sectors;
- req->current_nr_sectors = bh->b_size >> 9;
- req->buffer = bh->b_data;
- }
- else
- {
- /* That was the last buffer head. Finalise the request. */
- if ( unlikely(end_that_request_first(req, 1, "XenBlk")) )
- BUG();
- blkdev_dequeue_request(req);
- end_that_request_last(req);
- }
- }
- }
-
- out:
- if ( queued != 0 ) signal_requests_to_xen();
-}
-
-
-static void kick_pending_request_queues(void)
-{
- /* We kick pending request queues if the ring is reasonably empty. */
- if ( (nr_pending != 0) &&
- ((req_prod - resp_cons) < (BLK_RING_SIZE >> 1)) )
- {
- /* Attempt to drain the queue, but bail if the ring becomes full. */
- while ( (nr_pending != 0) && !RING_PLUGGED )
- do_xlblk_request(pending_queues[--nr_pending]);
- }
-}
-
-
-static void xlblk_response_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- BLK_RING_IDX i;
- unsigned long flags;
- struct buffer_head *bh, *next_bh;
-
- if ( unlikely(state == STATE_CLOSED) )
- return;
-
- spin_lock_irqsave(&io_request_lock, flags);
-
- for ( i = resp_cons; i != blk_ring->resp_prod; i++ )
- {
- blk_ring_resp_entry_t *bret = &blk_ring->ring[MASK_BLK_IDX(i)].resp;
- switch ( bret->operation )
- {
- case XEN_BLOCK_READ:
- case XEN_BLOCK_WRITE:
- if ( unlikely(bret->status != 0) )
- DPRINTK("Bad return from blkdev data request: %lx\n",
- bret->status);
- for ( bh = (struct buffer_head *)bret->id;
- bh != NULL;
- bh = next_bh )
- {
- next_bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
- bh->b_end_io(bh, !bret->status);
- }
- break;
-
- default:
- BUG();
- }
- }
-
- resp_cons = i;
-
- kick_pending_request_queues();
-
- spin_unlock_irqrestore(&io_request_lock, flags);
-}
-
-
-static void reset_xlblk_interface(void)
-{
- block_io_op_t op;
-
- nr_pending = 0;
-
- op.cmd = BLOCK_IO_OP_RESET;
- if ( HYPERVISOR_block_io_op(&op) != 0 )
- printk(KERN_ALERT "Possible blkdev trouble: couldn't reset ring\n");
-
- op.cmd = BLOCK_IO_OP_RING_ADDRESS;
- (void)HYPERVISOR_block_io_op(&op);
-
- set_fixmap(FIX_BLKRING_BASE, op.u.ring_mfn << PAGE_SHIFT);
- blk_ring = (blk_ring_t *)fix_to_virt(FIX_BLKRING_BASE);
- blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0;
-
- wmb();
- state = STATE_ACTIVE;
-}
-
-
-int __init xlblk_init(void)
-{
- int error;
-
- reset_xlblk_interface();
-
- xlblk_response_irq = bind_virq_to_irq(VIRQ_BLKDEV);
- xlblk_update_irq = bind_virq_to_irq(VIRQ_VBD_UPD);
-
- error = request_irq(xlblk_response_irq, xlblk_response_int,
- SA_SAMPLE_RANDOM, "blkdev", NULL);
- if ( error )
- {
- printk(KERN_ALERT "Could not allocate receive interrupt\n");
- goto fail;
- }
-
- error = request_irq(xlblk_update_irq, xlblk_update_int,
- 0, "blkdev", NULL);
-
- if ( error )
- {
- printk(KERN_ALERT "Could not allocate block update interrupt\n");
- goto fail;
- }
-
- (void)xlvbd_init();
-
- return 0;
-
- fail:
- return error;
-}
-
-
-static void __exit xlblk_cleanup(void)
-{
- xlvbd_cleanup();
- free_irq(xlblk_response_irq, NULL);
- free_irq(xlblk_update_irq, NULL);
- unbind_virq_from_irq(VIRQ_BLKDEV);
- unbind_virq_from_irq(VIRQ_VBD_UPD);
-}
-
-
-#ifdef MODULE
-module_init(xlblk_init);
-module_exit(xlblk_cleanup);
-#endif
-
-
-void blkdev_suspend(void)
-{
- state = STATE_SUSPENDED;
- wmb();
-
- while ( resp_cons != blk_ring->req_prod )
- {
- barrier();
- current->state = TASK_INTERRUPTIBLE;
- schedule_timeout(1);
- }
-
- wmb();
- state = STATE_CLOSED;
- wmb();
-
- clear_fixmap(FIX_BLKRING_BASE);
-}
-
-
-void blkdev_resume(void)
-{
- reset_xlblk_interface();
- spin_lock_irq(&io_request_lock);
- kick_pending_request_queues();
- spin_unlock_irq(&io_request_lock);
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.h b/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.h
deleted file mode 100644
index e41e03970e..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/block.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************************
- * block.h
- *
- * Shared definitions between all levels of XenoLinux Virtual block devices.
- */
-
-#ifndef __XEN_DRIVERS_BLOCK_H__
-#define __XEN_DRIVERS_BLOCK_H__
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/fs.h>
-#include <linux/hdreg.h>
-#include <linux/blkdev.h>
-#include <linux/major.h>
-
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/hypervisor-ifs/vbd.h>
-#include <asm/io.h>
-#include <asm/atomic.h>
-#include <asm/uaccess.h>
-
-#if 0
-#define DPRINTK(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#else
-#define DPRINTK(_f, _a...) ((void)0)
-#endif
-
-#if 0
-#define DPRINTK_IOCTL(_f, _a...) printk ( KERN_ALERT _f , ## _a )
-#else
-#define DPRINTK_IOCTL(_f, _a...) ((void)0)
-#endif
-
-/* Private gendisk->flags[] values. */
-#define GENHD_FL_XEN 2 /* Is unit a Xen block device? */
-#define GENHD_FL_VIRT_PARTNS 4 /* Are unit partitions virtual? */
-
-/*
- * We have one of these per vbd, whether ide, scsi or 'other'.
- * They hang in an array off the gendisk structure. We may end up putting
- * all kinds of interesting stuff here :-)
- */
-typedef struct xl_disk {
- int usage;
-} xl_disk_t;
-
-extern int xen_control_msg(int operration, char *buffer, int size);
-extern int xen_block_open(struct inode *inode, struct file *filep);
-extern int xen_block_release(struct inode *inode, struct file *filep);
-extern int xen_block_ioctl(struct inode *inode, struct file *filep,
- unsigned command, unsigned long argument);
-extern int xen_block_check(kdev_t dev);
-extern int xen_block_revalidate(kdev_t dev);
-extern void do_xlblk_request (request_queue_t *rq);
-
-extern void xlvbd_update_vbds(void);
-
-static inline xl_disk_t *xldev_to_xldisk(kdev_t xldev)
-{
- struct gendisk *gd = get_gendisk(xldev);
-
- if ( gd == NULL )
- return NULL;
-
- return (xl_disk_t *)gd->real_devices +
- (MINOR(xldev) >> gd->minor_shift);
-}
-
-
-/* Virtual block-device subsystem. */
-extern int xlvbd_init(void);
-extern void xlvbd_cleanup(void);
-
-#endif /* __XEN_DRIVERS_BLOCK_H__ */
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/vbd.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/vbd.c
deleted file mode 100644
index e08b976c56..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vblkif/vbd.c
+++ /dev/null
@@ -1,561 +0,0 @@
-/******************************************************************************
- * vbd.c
- *
- * Xenolinux virtual block-device driver (xvd).
- *
- * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
- * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
- */
-
-#include "block.h"
-#include <linux/blk.h>
-
-/*
- * For convenience we distinguish between ide, scsi and 'other' (i.e.
- * potentially combinations of the two) in the naming scheme and in a few
- * other places (like default readahead, etc).
- */
-#define XLIDE_MAJOR_NAME "hd"
-#define XLSCSI_MAJOR_NAME "sd"
-#define XLVBD_MAJOR_NAME "xvd"
-
-#define XLIDE_DEVS_PER_MAJOR 2
-#define XLSCSI_DEVS_PER_MAJOR 16
-#define XLVBD_DEVS_PER_MAJOR 16
-
-#define XLIDE_PARTN_SHIFT 6 /* amount to shift minor to get 'real' minor */
-#define XLIDE_MAX_PART (1 << XLIDE_PARTN_SHIFT) /* minors per ide vbd */
-
-#define XLSCSI_PARTN_SHIFT 4 /* amount to shift minor to get 'real' minor */
-#define XLSCSI_MAX_PART (1 << XLSCSI_PARTN_SHIFT) /* minors per scsi vbd */
-
-#define XLVBD_PARTN_SHIFT 4 /* amount to shift minor to get 'real' minor */
-#define XLVBD_MAX_PART (1 << XLVBD_PARTN_SHIFT) /* minors per 'other' vbd */
-
-/* The below are for the generic drivers/block/ll_rw_block.c code. */
-static int xlide_blksize_size[256];
-static int xlide_hardsect_size[256];
-static int xlide_max_sectors[256];
-static int xlscsi_blksize_size[256];
-static int xlscsi_hardsect_size[256];
-static int xlscsi_max_sectors[256];
-static int xlvbd_blksize_size[256];
-static int xlvbd_hardsect_size[256];
-static int xlvbd_max_sectors[256];
-
-/* Information from Xen about our VBDs. */
-#define MAX_VBDS 64
-static int nr_vbds;
-static xen_disk_t *vbd_info;
-
-static struct block_device_operations xlvbd_block_fops =
-{
- open: xen_block_open,
- release: xen_block_release,
- ioctl: xen_block_ioctl,
- check_media_change: xen_block_check,
- revalidate: xen_block_revalidate,
-};
-
-static int xlvbd_get_vbd_info(xen_disk_t *disk_info)
-{
- int error;
- block_io_op_t op;
-
- /* Probe for disk information. */
- memset(&op, 0, sizeof(op));
- op.cmd = BLOCK_IO_OP_VBD_PROBE;
- op.u.probe_params.domain = 0;
- op.u.probe_params.xdi.max = MAX_VBDS;
- op.u.probe_params.xdi.disks = disk_info;
- op.u.probe_params.xdi.count = 0;
-
- if ( (error = HYPERVISOR_block_io_op(&op)) != 0 )
- {
- printk(KERN_ALERT "Could not probe disks (%d)\n", error);
- return -1;
- }
-
- return op.u.probe_params.xdi.count;
-}
-
-/*
- * xlvbd_init_device - initialise a VBD device
- * @disk: a xen_disk_t describing the VBD
- *
- * Takes a xen_disk_t * that describes a VBD the domain has access to.
- * Performs appropriate initialisation and registration of the device.
- *
- * Care needs to be taken when making re-entrant calls to ensure that
- * corruption does not occur. Also, devices that are in use should not have
- * their details updated. This is the caller's responsibility.
- */
-static int xlvbd_init_device(xen_disk_t *xd)
-{
- int device = xd->device;
- int major = MAJOR(device);
- int minor = MINOR(device);
- int is_ide = IDE_DISK_MAJOR(major); /* is this an ide device? */
- int is_scsi= SCSI_BLK_MAJOR(major); /* is this a scsi device? */
- char *major_name;
- struct gendisk *gd;
- struct block_device *bd;
- xl_disk_t *disk;
- int i, rc = 0, max_part, partno;
- unsigned long capacity;
-
- unsigned char buf[64];
-
- if ( (bd = bdget(device)) == NULL )
- return -1;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((disk = xldev_to_xldisk(device)) != NULL) && (disk->usage != 0) )
- {
- printk(KERN_ALERT "VBD update failed - in use [dev=%x]\n", device);
- rc = -1;
- goto out;
- }
-
- if ( is_ide ) {
-
- major_name = XLIDE_MAJOR_NAME;
- max_part = XLIDE_MAX_PART;
-
- } else if ( is_scsi ) {
-
- major_name = XLSCSI_MAJOR_NAME;
- max_part = XLSCSI_MAX_PART;
-
- } else if (XD_VIRTUAL(xd->info)) {
-
- major_name = XLVBD_MAJOR_NAME;
- max_part = XLVBD_MAX_PART;
-
- } else {
-
- /* SMH: hmm - probably a CCISS driver or sim; assume CCISS for now */
- printk(KERN_ALERT "Assuming device %02x:%02x is CCISS/SCSI\n",
- major, minor);
- is_scsi = 1;
- major_name = "cciss";
- max_part = XLSCSI_MAX_PART;
-
- }
-
- partno = minor & (max_part - 1);
-
- if ( (gd = get_gendisk(device)) == NULL )
- {
- rc = register_blkdev(major, major_name, &xlvbd_block_fops);
- if ( rc < 0 )
- {
- printk(KERN_ALERT "XL VBD: can't get major %d\n", major);
- goto out;
- }
-
- if ( is_ide )
- {
- blksize_size[major] = xlide_blksize_size;
- hardsect_size[major] = xlide_hardsect_size;
- max_sectors[major] = xlide_max_sectors;
- read_ahead[major] = 8; /* from drivers/ide/ide-probe.c */
- }
- else if ( is_scsi )
- {
- blksize_size[major] = xlscsi_blksize_size;
- hardsect_size[major] = xlscsi_hardsect_size;
- max_sectors[major] = xlscsi_max_sectors;
- read_ahead[major] = 0; /* XXX 8; -- guessing */
- }
- else
- {
- blksize_size[major] = xlvbd_blksize_size;
- hardsect_size[major] = xlvbd_hardsect_size;
- max_sectors[major] = xlvbd_max_sectors;
- read_ahead[major] = 8;
- }
-
- blk_init_queue(BLK_DEFAULT_QUEUE(major), do_xlblk_request);
-
- /*
- * Turn off barking 'headactive' mode. We dequeue buffer heads as
- * soon as we pass them down to Xen.
- */
- blk_queue_headactive(BLK_DEFAULT_QUEUE(major), 0);
-
- /* Construct an appropriate gendisk structure. */
- gd = kmalloc(sizeof(struct gendisk), GFP_KERNEL);
- gd->major = major;
- gd->major_name = major_name;
-
- gd->max_p = max_part;
- if ( is_ide )
- {
- gd->minor_shift = XLIDE_PARTN_SHIFT;
- gd->nr_real = XLIDE_DEVS_PER_MAJOR;
- }
- else if ( is_scsi )
- {
- gd->minor_shift = XLSCSI_PARTN_SHIFT;
- gd->nr_real = XLSCSI_DEVS_PER_MAJOR;
- }
- else
- {
- gd->minor_shift = XLVBD_PARTN_SHIFT;
- gd->nr_real = XLVBD_DEVS_PER_MAJOR;
- }
-
- /*
- ** The sizes[] and part[] arrays hold the sizes and other
- ** information about every partition with this 'major' (i.e.
- ** every disk sharing the 8 bit prefix * max partns per disk)
- */
- gd->sizes = kmalloc(max_part*gd->nr_real*sizeof(int), GFP_KERNEL);
- gd->part = kmalloc(max_part*gd->nr_real*sizeof(struct hd_struct),
- GFP_KERNEL);
- memset(gd->sizes, 0, max_part * gd->nr_real * sizeof(int));
- memset(gd->part, 0, max_part * gd->nr_real
- * sizeof(struct hd_struct));
-
-
- gd->real_devices = kmalloc(gd->nr_real * sizeof(xl_disk_t),
- GFP_KERNEL);
- memset(gd->real_devices, 0, gd->nr_real * sizeof(xl_disk_t));
-
- gd->next = NULL;
- gd->fops = &xlvbd_block_fops;
-
- gd->de_arr = kmalloc(gd->nr_real * sizeof(*gd->de_arr),
- GFP_KERNEL);
- gd->flags = kmalloc(gd->nr_real * sizeof(*gd->flags), GFP_KERNEL);
-
- memset(gd->de_arr, 0, gd->nr_real * sizeof(*gd->de_arr));
- memset(gd->flags, 0, gd->nr_real * sizeof(*gd->flags));
-
- add_gendisk(gd);
-
- blk_size[major] = gd->sizes;
- }
-
- if ( XD_READONLY(xd->info) )
- set_device_ro(device, 1);
-
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_XEN;
-
- /* NB. Linux 2.4 only handles 32-bit sector offsets and capacities. */
- capacity = (unsigned long)xd->capacity;
-
- if ( partno != 0 )
- {
- /*
- * If this was previously set up as a real disc we will have set
- * up partition-table information. Virtual partitions override
- * 'real' partitions, and the two cannot coexist on a device.
- */
- if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
- (gd->sizes[minor & ~(max_part-1)] != 0) )
- {
- /*
- * Any non-zero sub-partition entries must be cleaned out before
- * installing 'virtual' partition entries. The two types cannot
- * coexist, and virtual partitions are favoured.
- */
- kdev_t dev = device & ~(max_part-1);
- for ( i = max_part - 1; i > 0; i-- )
- {
- invalidate_device(dev+i, 1);
- gd->part[MINOR(dev+i)].start_sect = 0;
- gd->part[MINOR(dev+i)].nr_sects = 0;
- gd->sizes[MINOR(dev+i)] = 0;
- }
- printk(KERN_ALERT
- "Virtual partitions found for /dev/%s - ignoring any "
- "real partition information we may have found.\n",
- disk_name(gd, MINOR(device), buf));
- }
-
- /* Need to skankily setup 'partition' information */
- gd->part[minor].start_sect = 0;
- gd->part[minor].nr_sects = capacity;
- gd->sizes[minor] = capacity;
-
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
- }
- else
- {
- gd->part[minor].nr_sects = capacity;
- gd->sizes[minor] = capacity>>(BLOCK_SIZE_BITS-9);
-
- /* Some final fix-ups depending on the device type */
- switch ( XD_TYPE(xd->info) )
- {
- case XD_TYPE_CDROM:
- case XD_TYPE_FLOPPY:
- case XD_TYPE_TAPE:
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_REMOVABLE;
- printk(KERN_ALERT
- "Skipping partition check on %s /dev/%s\n",
- XD_TYPE(xd->info)==XD_TYPE_CDROM ? "cdrom" :
- (XD_TYPE(xd->info)==XD_TYPE_TAPE ? "tape" :
- "floppy"), disk_name(gd, MINOR(device), buf));
- break;
-
- case XD_TYPE_DISK:
- /* Only check partitions on real discs (not virtual!). */
- if ( gd->flags[minor>>gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
- {
- printk(KERN_ALERT
- "Skipping partition check on virtual /dev/%s\n",
- disk_name(gd, MINOR(device), buf));
- break;
- }
- register_disk(gd, device, gd->max_p, &xlvbd_block_fops, capacity);
- break;
-
- default:
- printk(KERN_ALERT "XenoLinux: unknown device type %d\n",
- XD_TYPE(xd->info));
- break;
- }
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-
-/*
- * xlvbd_remove_device - remove a device node if possible
- * @device: numeric device ID
- *
- * Updates the gendisk structure and invalidates devices.
- *
- * This is OK for now but in future, should perhaps consider where this should
- * deallocate gendisks / unregister devices.
- */
-static int xlvbd_remove_device(int device)
-{
- int i, rc = 0, minor = MINOR(device);
- struct gendisk *gd;
- struct block_device *bd;
- xl_disk_t *disk = NULL;
-
- if ( (bd = bdget(device)) == NULL )
- return -1;
-
- /*
- * Update of partition info, and check of usage count, is protected
- * by the per-block-device semaphore.
- */
- down(&bd->bd_sem);
-
- if ( ((gd = get_gendisk(device)) == NULL) ||
- ((disk = xldev_to_xldisk(device)) == NULL) )
- BUG();
-
- if ( disk->usage != 0 )
- {
- printk(KERN_ALERT "VBD removal failed - in use [dev=%x]\n", device);
- rc = -1;
- goto out;
- }
-
- if ( (minor & (gd->max_p-1)) != 0 )
- {
- /* 1: The VBD is mapped to a partition rather than a whole unit. */
- invalidate_device(device, 1);
- gd->part[minor].start_sect = 0;
- gd->part[minor].nr_sects = 0;
- gd->sizes[minor] = 0;
-
- /* Clear the consists-of-virtual-partitions flag if possible. */
- gd->flags[minor >> gd->minor_shift] &= ~GENHD_FL_VIRT_PARTNS;
- for ( i = 1; i < gd->max_p; i++ )
- if ( gd->sizes[(minor & ~(gd->max_p-1)) + i] != 0 )
- gd->flags[minor >> gd->minor_shift] |= GENHD_FL_VIRT_PARTNS;
-
- /*
- * If all virtual partitions are now gone, and a 'whole unit' VBD is
- * present, then we can try to grok the unit's real partition table.
- */
- if ( !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS) &&
- (gd->sizes[minor & ~(gd->max_p-1)] != 0) &&
- !(gd->flags[minor >> gd->minor_shift] & GENHD_FL_REMOVABLE) )
- {
- register_disk(gd,
- device&~(gd->max_p-1),
- gd->max_p,
- &xlvbd_block_fops,
- gd->part[minor&~(gd->max_p-1)].nr_sects);
- }
- }
- else
- {
- /*
- * 2: The VBD is mapped to an entire 'unit'. Clear all partitions.
- * NB. The partition entries are only cleared if there are no VBDs
- * mapped to individual partitions on this unit.
- */
- i = gd->max_p - 1; /* Default: clear subpartitions as well. */
- if ( gd->flags[minor >> gd->minor_shift] & GENHD_FL_VIRT_PARTNS )
- i = 0; /* 'Virtual' mode: only clear the 'whole unit' entry. */
- while ( i >= 0 )
- {
- invalidate_device(device+i, 1);
- gd->part[minor+i].start_sect = 0;
- gd->part[minor+i].nr_sects = 0;
- gd->sizes[minor+i] = 0;
- i--;
- }
- }
-
- out:
- up(&bd->bd_sem);
- bdput(bd);
- return rc;
-}
-
-/*
- * xlvbd_update_vbds - reprobes the VBD status and performs updates driver
- * state. The VBDs need to be updated in this way when the domain is
- * initialised and also each time we receive an XLBLK_UPDATE event.
- */
-void xlvbd_update_vbds(void)
-{
- int i, j, k, old_nr, new_nr;
- xen_disk_t *old_info, *new_info, *merged_info;
-
- old_info = vbd_info;
- old_nr = nr_vbds;
-
- new_info = kmalloc(MAX_VBDS * sizeof(xen_disk_t), GFP_KERNEL);
- if ( unlikely(new_nr = xlvbd_get_vbd_info(new_info)) < 0 )
- {
- kfree(new_info);
- return;
- }
-
- /*
- * Final list maximum size is old list + new list. This occurs only when
- * old list and new list do not overlap at all, and we cannot yet destroy
- * VBDs in the old list because the usage counts are busy.
- */
- merged_info = kmalloc((old_nr + new_nr) * sizeof(xen_disk_t), GFP_KERNEL);
-
- /* @i tracks old list; @j tracks new list; @k tracks merged list. */
- i = j = k = 0;
-
- while ( (i < old_nr) && (j < new_nr) )
- {
- if ( old_info[i].device < new_info[j].device )
- {
- if ( xlvbd_remove_device(old_info[i].device) != 0 )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- i++;
- }
- else if ( old_info[i].device > new_info[j].device )
- {
- if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- j++;
- }
- else
- {
- if ( ((old_info[i].capacity == new_info[j].capacity) &&
- (old_info[i].info == new_info[j].info)) ||
- (xlvbd_remove_device(old_info[i].device) != 0) )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- else if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- i++; j++;
- }
- }
-
- for ( ; i < old_nr; i++ )
- {
- if ( xlvbd_remove_device(old_info[i].device) != 0 )
- memcpy(&merged_info[k++], &old_info[i], sizeof(xen_disk_t));
- }
-
- for ( ; j < new_nr; j++ )
- {
- if ( xlvbd_init_device(&new_info[j]) == 0 )
- memcpy(&merged_info[k++], &new_info[j], sizeof(xen_disk_t));
- }
-
- vbd_info = merged_info;
- nr_vbds = k;
-
- kfree(old_info);
- kfree(new_info);
-}
-
-
-/*
- * Set up all the linux device goop for the virtual block devices (vbd's) that
- * xen tells us about. Note that although from xen's pov VBDs are addressed
- * simply an opaque 16-bit device number, the domain creation tools
- * conventionally allocate these numbers to correspond to those used by 'real'
- * linux -- this is just for convenience as it means e.g. that the same
- * /etc/fstab can be used when booting with or without xen.
- */
-int __init xlvbd_init(void)
-{
- int i;
-
- /*
- * If compiled as a module, we don't support unloading yet. We therefore
- * permanently increment the reference count to disallow it.
- */
- SET_MODULE_OWNER(&xlvbd_block_fops);
- MOD_INC_USE_COUNT;
-
- /* Initialize the global arrays. */
- for ( i = 0; i < 256; i++ )
- {
- /* from the generic ide code (drivers/ide/ide-probe.c, etc) */
- xlide_blksize_size[i] = 1024;
- xlide_hardsect_size[i] = 512;
- xlide_max_sectors[i] = 128; /* 'hwif->rqsize' if we knew it */
-
- /* from the generic scsi disk code (drivers/scsi/sd.c) */
- xlscsi_blksize_size[i] = 1024; /* XXX 512; */
- xlscsi_hardsect_size[i] = 512;
- xlscsi_max_sectors[i] = 128*8; /* XXX 128; */
-
- /* we don't really know what to set these too since it depends */
- xlvbd_blksize_size[i] = 512;
- xlvbd_hardsect_size[i] = 512;
- xlvbd_max_sectors[i] = 128;
- }
-
- vbd_info = kmalloc(MAX_VBDS * sizeof(xen_disk_t), GFP_KERNEL);
- nr_vbds = xlvbd_get_vbd_info(vbd_info);
-
- if ( nr_vbds < 0 )
- {
- kfree(vbd_info);
- vbd_info = NULL;
- nr_vbds = 0;
- }
- else
- {
- for ( i = 0; i < nr_vbds; i++ )
- xlvbd_init_device(&vbd_info[i]);
- }
-
- return 0;
-}
-
-
-#ifdef MODULE
-module_init(xlvbd_init);
-#endif
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/Makefile b/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/Makefile
deleted file mode 100644
index 304c2e78ef..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-O_TARGET := drv.o
-obj-y := vnetif.o
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/vnetif.c b/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/vnetif.c
deleted file mode 100644
index d1a4b21ad0..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/drivers/vnetif/vnetif.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/******************************************************************************
- * vnetif.c
- *
- * Virtual network driver for XenoLinux.
- *
- * Copyright (c) 2002-2004, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-
-#include <linux/netdevice.h>
-#include <linux/inetdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/init.h>
-
-#include <asm/io.h>
-#include <net/sock.h>
-#include <net/pkt_sched.h>
-
-#define RX_BUF_SIZE ((PAGE_SIZE/2)+1) /* Fool the slab allocator :-) */
-
-static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs);
-static void network_tx_buf_gc(struct net_device *dev);
-static void network_alloc_rx_buffers(struct net_device *dev);
-static void cleanup_module(void);
-
-/* Dynamically-mapped IRQs. */
-static int network_irq, debug_irq;
-
-static struct list_head dev_list;
-
-struct net_private
-{
- struct list_head list;
- struct net_device *dev;
-
- struct net_device_stats stats;
- NET_RING_IDX rx_resp_cons, tx_resp_cons;
- unsigned int net_ring_fixmap_idx, tx_full;
- net_ring_t *net_ring;
- net_idx_t *net_idx;
- spinlock_t tx_lock;
- unsigned int idx; /* Domain-specific index of this VIF. */
-
- unsigned int rx_bufs_to_notify;
-
-#define STATE_ACTIVE 0
-#define STATE_SUSPENDED 1
-#define STATE_CLOSED 2
- unsigned int state;
-
- /*
- * {tx,rx}_skbs store outstanding skbuffs. The first entry in each
- * array is an index into a chain of free entries.
- */
- struct sk_buff *tx_skbs[XENNET_TX_RING_SIZE+1];
- struct sk_buff *rx_skbs[XENNET_RX_RING_SIZE+1];
-};
-
-/* Access macros for acquiring freeing slots in {tx,rx}_skbs[]. */
-#define ADD_ID_TO_FREELIST(_list, _id) \
- (_list)[(_id)] = (_list)[0]; \
- (_list)[0] = (void *)(unsigned long)(_id);
-#define GET_ID_FROM_FREELIST(_list) \
- ({ unsigned long _id = (unsigned long)(_list)[0]; \
- (_list)[0] = (_list)[_id]; \
- (unsigned short)_id; })
-
-
-static void _dbg_network_int(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
-
- if ( np->state == STATE_CLOSED )
- return;
-
- printk(KERN_ALERT "net: tx_full=%d, tx_resp_cons=0x%08x,"
- " tx_req_prod=0x%08x\nnet: tx_resp_prod=0x%08x,"
- " tx_event=0x%08x, state=%d\n",
- np->tx_full, np->tx_resp_cons,
- np->net_idx->tx_req_prod, np->net_idx->tx_resp_prod,
- np->net_idx->tx_event,
- test_bit(__LINK_STATE_XOFF, &dev->state));
- printk(KERN_ALERT "net: rx_resp_cons=0x%08x,"
- " rx_req_prod=0x%08x\nnet: rx_resp_prod=0x%08x, rx_event=0x%08x\n",
- np->rx_resp_cons, np->net_idx->rx_req_prod,
- np->net_idx->rx_resp_prod, np->net_idx->rx_event);
-}
-
-
-static void dbg_network_int(int irq, void *unused, struct pt_regs *ptregs)
-{
- struct list_head *ent;
- struct net_private *np;
- list_for_each ( ent, &dev_list )
- {
- np = list_entry(ent, struct net_private, list);
- _dbg_network_int(np->dev);
- }
-}
-
-
-static int network_open(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- netop_t netop;
- int i, ret;
-
- netop.cmd = NETOP_RESET_RINGS;
- netop.vif = np->idx;
- if ( (ret = HYPERVISOR_net_io_op(&netop)) != 0 )
- {
- printk(KERN_ALERT "Possible net trouble: couldn't reset ring idxs\n");
- return ret;
- }
-
- netop.cmd = NETOP_GET_VIF_INFO;
- netop.vif = np->idx;
- if ( (ret = HYPERVISOR_net_io_op(&netop)) != 0 )
- {
- printk(KERN_ALERT "Couldn't get info for vif %d\n", np->idx);
- return ret;
- }
-
- memcpy(dev->dev_addr, netop.u.get_vif_info.vmac, ETH_ALEN);
-
- set_fixmap(FIX_NETRING0_BASE + np->net_ring_fixmap_idx,
- netop.u.get_vif_info.ring_mfn << PAGE_SHIFT);
- np->net_ring = (net_ring_t *)fix_to_virt(
- FIX_NETRING0_BASE + np->net_ring_fixmap_idx);
- np->net_idx = &HYPERVISOR_shared_info->net_idx[np->idx];
-
- np->rx_bufs_to_notify = 0;
- np->rx_resp_cons = np->tx_resp_cons = np->tx_full = 0;
- memset(&np->stats, 0, sizeof(np->stats));
- spin_lock_init(&np->tx_lock);
- memset(np->net_ring, 0, sizeof(*np->net_ring));
- memset(np->net_idx, 0, sizeof(*np->net_idx));
-
- /* Initialise {tx,rx}_skbs to be a free chain containing every entry. */
- for ( i = 0; i <= XENNET_TX_RING_SIZE; i++ )
- np->tx_skbs[i] = (void *)(i+1);
- for ( i = 0; i <= XENNET_RX_RING_SIZE; i++ )
- np->rx_skbs[i] = (void *)(i+1);
-
- wmb();
- np->state = STATE_ACTIVE;
-
- network_alloc_rx_buffers(dev);
-
- netif_start_queue(dev);
-
- MOD_INC_USE_COUNT;
-
- return 0;
-}
-
-
-static void network_tx_buf_gc(struct net_device *dev)
-{
- NET_RING_IDX i, prod;
- unsigned short id;
- struct net_private *np = dev->priv;
- struct sk_buff *skb;
- tx_entry_t *tx_ring = np->net_ring->tx_ring;
-
- do {
- prod = np->net_idx->tx_resp_prod;
-
- for ( i = np->tx_resp_cons; i != prod; i++ )
- {
- id = tx_ring[MASK_NET_TX_IDX(i)].resp.id;
- skb = np->tx_skbs[id];
- ADD_ID_TO_FREELIST(np->tx_skbs, id);
- dev_kfree_skb_any(skb);
- }
-
- np->tx_resp_cons = prod;
-
- /*
- * Set a new event, then check for race with update of tx_cons. Note
- * that it is essential to schedule a callback, no matter how few
- * buffers are pending. Even if there is space in the transmit ring,
- * higher layers may be blocked because too much data is outstanding:
- * in such cases notification from Xen is likely to be the only kick
- * that we'll get.
- */
- np->net_idx->tx_event =
- prod + ((np->net_idx->tx_req_prod - prod) >> 1) + 1;
- mb();
- }
- while ( prod != np->net_idx->tx_resp_prod );
-
- if ( np->tx_full &&
- ((np->net_idx->tx_req_prod - prod) < XENNET_TX_RING_SIZE) )
- {
- np->tx_full = 0;
- if ( np->state == STATE_ACTIVE )
- netif_wake_queue(dev);
- }
-}
-
-
-static inline pte_t *get_ppte(void *addr)
-{
- pgd_t *pgd; pmd_t *pmd; pte_t *pte;
- pgd = pgd_offset_k( (unsigned long)addr);
- pmd = pmd_offset(pgd, (unsigned long)addr);
- pte = pte_offset(pmd, (unsigned long)addr);
- return pte;
-}
-
-
-static void network_alloc_rx_buffers(struct net_device *dev)
-{
- unsigned short id;
- struct net_private *np = dev->priv;
- struct sk_buff *skb;
- netop_t netop;
- NET_RING_IDX i = np->net_idx->rx_req_prod;
-
- if ( unlikely((i - np->rx_resp_cons) == XENNET_RX_RING_SIZE) ||
- unlikely(np->state != STATE_ACTIVE) )
- return;
-
- do {
- skb = dev_alloc_skb(RX_BUF_SIZE);
- if ( unlikely(skb == NULL) )
- break;
-
- skb->dev = dev;
-
- if ( unlikely(((unsigned long)skb->head & (PAGE_SIZE-1)) != 0) )
- panic("alloc_skb needs to provide us page-aligned buffers.");
-
- id = GET_ID_FROM_FREELIST(np->rx_skbs);
- np->rx_skbs[id] = skb;
-
- np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].req.id = id;
- np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].req.addr =
- virt_to_machine(get_ppte(skb->head));
-
- np->rx_bufs_to_notify++;
- }
- while ( (++i - np->rx_resp_cons) != XENNET_RX_RING_SIZE );
-
- /*
- * We may have allocated buffers which have entries outstanding in the page
- * update queue -- make sure we flush those first!
- */
- flush_page_update_queue();
-
- np->net_idx->rx_req_prod = i;
- np->net_idx->rx_event = np->rx_resp_cons + 1;
-
- /* Batch Xen notifications. */
- if ( np->rx_bufs_to_notify > (XENNET_RX_RING_SIZE/4) )
- {
- netop.cmd = NETOP_PUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
- np->rx_bufs_to_notify = 0;
- }
-}
-
-
-static int network_start_xmit(struct sk_buff *skb, struct net_device *dev)
-{
- unsigned short id;
- struct net_private *np = (struct net_private *)dev->priv;
- tx_req_entry_t *tx;
- netop_t netop;
- NET_RING_IDX i;
-
- if ( unlikely(np->tx_full) )
- {
- printk(KERN_ALERT "%s: full queue wasn't stopped!\n", dev->name);
- netif_stop_queue(dev);
- return -ENOBUFS;
- }
-
- if ( unlikely((((unsigned long)skb->data & ~PAGE_MASK) + skb->len) >=
- PAGE_SIZE) )
- {
- struct sk_buff *new_skb = dev_alloc_skb(RX_BUF_SIZE);
- if ( unlikely(new_skb == NULL) )
- return 1;
- skb_put(new_skb, skb->len);
- memcpy(new_skb->data, skb->data, skb->len);
- dev_kfree_skb(skb);
- skb = new_skb;
- }
-
- spin_lock_irq(&np->tx_lock);
-
- i = np->net_idx->tx_req_prod;
-
- id = GET_ID_FROM_FREELIST(np->tx_skbs);
- np->tx_skbs[id] = skb;
-
- tx = &np->net_ring->tx_ring[MASK_NET_TX_IDX(i)].req;
-
- tx->id = id;
- tx->addr = phys_to_machine(virt_to_phys(skb->data));
- tx->size = skb->len;
-
- wmb();
- np->net_idx->tx_req_prod = i + 1;
-
- network_tx_buf_gc(dev);
-
- if ( (i - np->tx_resp_cons) == (XENNET_TX_RING_SIZE - 1) )
- {
- np->tx_full = 1;
- netif_stop_queue(dev);
- }
-
- spin_unlock_irq(&np->tx_lock);
-
- np->stats.tx_bytes += skb->len;
- np->stats.tx_packets++;
-
- /* Only notify Xen if there are no outstanding responses. */
- mb();
- if ( np->net_idx->tx_resp_prod == i )
- {
- netop.cmd = NETOP_PUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
- }
-
- return 0;
-}
-
-
-static inline void _network_interrupt(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- unsigned long flags;
- struct sk_buff *skb;
- rx_resp_entry_t *rx;
- NET_RING_IDX i;
-
- if ( unlikely(np->state == STATE_CLOSED) )
- return;
-
- spin_lock_irqsave(&np->tx_lock, flags);
- network_tx_buf_gc(dev);
- spin_unlock_irqrestore(&np->tx_lock, flags);
-
- again:
- for ( i = np->rx_resp_cons; i != np->net_idx->rx_resp_prod; i++ )
- {
- rx = &np->net_ring->rx_ring[MASK_NET_RX_IDX(i)].resp;
-
- skb = np->rx_skbs[rx->id];
- ADD_ID_TO_FREELIST(np->rx_skbs, rx->id);
-
- if ( unlikely(rx->status != RING_STATUS_OK) )
- {
- /* Gate this error. We get a (valid) slew of them on suspend. */
- if ( np->state == STATE_ACTIVE )
- printk(KERN_ALERT "bad buffer on RX ring!(%d)\n", rx->status);
- dev_kfree_skb_any(skb);
- continue;
- }
-
- /*
- * Set up shinfo -- from alloc_skb This was particularily nasty: the
- * shared info is hidden at the back of the data area (presumably so it
- * can be shared), but on page flip it gets very spunked.
- */
- atomic_set(&(skb_shinfo(skb)->dataref), 1);
- skb_shinfo(skb)->nr_frags = 0;
- skb_shinfo(skb)->frag_list = NULL;
-
- phys_to_machine_mapping[virt_to_phys(skb->head) >> PAGE_SHIFT] =
- (*(unsigned long *)get_ppte(skb->head)) >> PAGE_SHIFT;
-
- skb->data = skb->tail = skb->head + rx->offset;
- skb_put(skb, rx->size);
- skb->protocol = eth_type_trans(skb, dev);
-
- np->stats.rx_packets++;
-
- np->stats.rx_bytes += rx->size;
- netif_rx(skb);
- dev->last_rx = jiffies;
- }
-
- np->rx_resp_cons = i;
-
- network_alloc_rx_buffers(dev);
-
- /* Deal with hypervisor racing our resetting of rx_event. */
- mb();
- if ( np->net_idx->rx_resp_prod != i )
- goto again;
-}
-
-
-static void network_interrupt(int irq, void *unused, struct pt_regs *ptregs)
-{
- struct list_head *ent;
- struct net_private *np;
- list_for_each ( ent, &dev_list )
- {
- np = list_entry(ent, struct net_private, list);
- _network_interrupt(np->dev);
- }
-}
-
-
-static int network_close(struct net_device *dev)
-{
- struct net_private *np = dev->priv;
- netop_t netop;
-
- np->state = STATE_SUSPENDED;
- wmb();
-
- netif_stop_queue(np->dev);
-
- netop.cmd = NETOP_FLUSH_BUFFERS;
- netop.vif = np->idx;
- (void)HYPERVISOR_net_io_op(&netop);
-
- while ( (np->rx_resp_cons != np->net_idx->rx_req_prod) ||
- (np->tx_resp_cons != np->net_idx->tx_req_prod) )
- {
- barrier();
- current->state = TASK_INTERRUPTIBLE;
- schedule_timeout(1);
- }
-
- wmb();
- np->state = STATE_CLOSED;
- wmb();
-
- /* Now no longer safe to take interrupts for this device. */
- clear_fixmap(FIX_NETRING0_BASE + np->net_ring_fixmap_idx);
-
- MOD_DEC_USE_COUNT;
-
- return 0;
-}
-
-
-static struct net_device_stats *network_get_stats(struct net_device *dev)
-{
- struct net_private *np = (struct net_private *)dev->priv;
- return &np->stats;
-}
-
-
-static int __init init_module(void)
-{
-#if 0
- int i, fixmap_idx=-1, err;
- struct net_device *dev;
- struct net_private *np;
- netop_t netop;
-
- INIT_LIST_HEAD(&dev_list);
-
- network_irq = bind_virq_to_irq(VIRQ_NET);
- debug_irq = bind_virq_to_irq(VIRQ_DEBUG);
-
- err = request_irq(network_irq, network_interrupt,
- SA_SAMPLE_RANDOM, "network", NULL);
- if ( err )
- {
- printk(KERN_WARNING "Could not allocate network interrupt\n");
- goto fail;
- }
-
- err = request_irq(debug_irq, dbg_network_int,
- SA_SHIRQ, "net_dbg", &dbg_network_int);
- if ( err )
- printk(KERN_WARNING "Non-fatal error -- no debug interrupt\n");
-
- for ( i = 0; i < MAX_DOMAIN_VIFS; i++ )
- {
- /* If the VIF is invalid then the query hypercall will fail. */
- netop.cmd = NETOP_GET_VIF_INFO;
- netop.vif = i;
- if ( HYPERVISOR_net_io_op(&netop) != 0 )
- continue;
-
- /* We actually only support up to 4 vifs right now. */
- if ( ++fixmap_idx == 4 )
- break;
-
- dev = alloc_etherdev(sizeof(struct net_private));
- if ( dev == NULL )
- {
- err = -ENOMEM;
- goto fail;
- }
-
- np = dev->priv;
- np->state = STATE_CLOSED;
- np->net_ring_fixmap_idx = fixmap_idx;
- np->idx = i;
-
- SET_MODULE_OWNER(dev);
- dev->open = network_open;
- dev->hard_start_xmit = network_start_xmit;
- dev->stop = network_close;
- dev->get_stats = network_get_stats;
-
- memcpy(dev->dev_addr, netop.u.get_vif_info.vmac, ETH_ALEN);
-
- if ( (err = register_netdev(dev)) != 0 )
- {
- kfree(dev);
- goto fail;
- }
-
- np->dev = dev;
- list_add(&np->list, &dev_list);
- }
-
- return 0;
-
- fail:
- cleanup_module();
- return err;
-#endif
- return 0;
-}
-
-
-static void cleanup_module(void)
-{
- struct net_private *np;
- struct net_device *dev;
-
- while ( !list_empty(&dev_list) )
- {
- np = list_entry(dev_list.next, struct net_private, list);
- list_del(&np->list);
- dev = np->dev;
- unregister_netdev(dev);
- kfree(dev);
- }
-
- free_irq(network_irq, NULL);
- free_irq(debug_irq, NULL);
-
- unbind_virq_from_irq(VIRQ_NET);
- unbind_virq_from_irq(VIRQ_DEBUG);
-}
-
-
-module_init(init_module);
-module_exit(cleanup_module);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/Makefile b/xenolinux-2.4.25-sparse/arch/xen/kernel/Makefile
deleted file mode 100644
index 90438fa623..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/Makefile
+++ /dev/null
@@ -1,19 +0,0 @@
-
-.S.o:
- $(CC) $(AFLAGS) -traditional -c $< -o $*.o
-
-all: kernel.o head.o init_task.o
-
-O_TARGET := kernel.o
-
-export-objs := i386_ksyms.o
-
-obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \
- ptrace.o ioport.o ldt.o setup.o time.o sys_i386.o \
- i386_ksyms.o i387.o evtchn.o ctrl_if.o pci-dma.o
-
-ifdef CONFIG_PCI
-obj-y += pci-i386.o pci-pc.o
-endif
-
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/ctrl_if.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/ctrl_if.c
deleted file mode 100644
index 4002ae4c61..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/ctrl_if.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/******************************************************************************
- * ctrl_if.c
- *
- * Management functions for special interface to the domain controller.
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <asm/ctrl_if.h>
-#include <asm/hypervisor.h>
-#include <asm/hypervisor-ifs/event_channel.h>
-
-static int ctrl_if_evtchn;
-static int ctrl_if_irq;
-static spinlock_t ctrl_if_lock;
-
-static struct irqaction ctrl_if_irq_action;
-
-static CONTROL_RING_IDX ctrl_if_tx_resp_cons;
-static CONTROL_RING_IDX ctrl_if_rx_req_cons;
-
-/* Incoming message requests: primary message type -> message handler. */
-static ctrl_msg_handler_t ctrl_if_rxmsg_handler[256];
-
-/* Incoming message responses: message identifier -> message handler/id. */
-static struct {
- ctrl_msg_handler_t fn;
- unsigned long id;
-} ctrl_if_txmsg_id_mapping[CONTROL_RING_SIZE];
-
-static DECLARE_TASK_QUEUE(ctrl_if_tx_tq);
-static DECLARE_WAIT_QUEUE_HEAD(ctrl_if_tx_wait);
-static void __ctrl_if_tx_tasklet(unsigned long data);
-static DECLARE_TASKLET(ctrl_if_tx_tasklet, __ctrl_if_tx_tasklet, 0);
-
-static void __ctrl_if_rx_tasklet(unsigned long data);
-static DECLARE_TASKLET(ctrl_if_rx_tasklet, __ctrl_if_rx_tasklet, 0);
-
-#define get_ctrl_if() ((control_if_t *)((char *)HYPERVISOR_shared_info + 2048))
-#define TX_FULL(_c) \
- (((_c)->tx_req_prod - ctrl_if_tx_resp_cons) == CONTROL_RING_SIZE)
-
-static void ctrl_if_notify_controller(void)
-{
- evtchn_op_t evtchn_op;
- evtchn_op.cmd = EVTCHNOP_send;
- evtchn_op.u.send.local_port = ctrl_if_evtchn;
- (void)HYPERVISOR_event_channel_op(&evtchn_op);
-}
-
-static void ctrl_if_rxmsg_default_handler(ctrl_msg_t *msg, unsigned long id)
-{
- msg->length = 0;
- ctrl_if_send_response(msg);
-}
-
-static void __ctrl_if_tx_tasklet(unsigned long data)
-{
- control_if_t *ctrl_if = get_ctrl_if();
- ctrl_msg_t *msg;
- int was_full = TX_FULL(ctrl_if);
-
- while ( ctrl_if_tx_resp_cons != ctrl_if->tx_resp_prod )
- {
- msg = &ctrl_if->tx_ring[MASK_CONTROL_IDX(ctrl_if_tx_resp_cons)];
-
- /* Execute the callback handler, if one was specified. */
- if ( msg->id != 0xFF )
- {
- (*ctrl_if_txmsg_id_mapping[msg->id].fn)(
- msg, ctrl_if_txmsg_id_mapping[msg->id].id);
- smp_mb(); /* Execute, /then/ free. */
- ctrl_if_txmsg_id_mapping[msg->id].fn = NULL;
- }
-
- /*
- * Step over the message in the ring /after/ finishing reading it. As
- * soon as the index is updated then the message may get blown away.
- */
- smp_mb();
- ctrl_if_tx_resp_cons++;
- }
-
- if ( was_full && !TX_FULL(ctrl_if) )
- {
- wake_up(&ctrl_if_tx_wait);
- run_task_queue(&ctrl_if_tx_tq);
- }
-}
-
-static void __ctrl_if_rx_tasklet(unsigned long data)
-{
- control_if_t *ctrl_if = get_ctrl_if();
- ctrl_msg_t *msg;
-
- while ( ctrl_if_rx_req_cons != ctrl_if->rx_req_prod )
- {
- /*
- * We need no locking or barriers here. There will be one and only one
- * response as a result of each callback, so the callback handler
- * doesn't need to worry about the 'msg' being overwritten until:
- * 1. It returns (if the message must persist then it must be copied).
- * 2. A response is sent (the response may overwrite the request).
- */
- msg = &ctrl_if->rx_ring[MASK_CONTROL_IDX(ctrl_if_rx_req_cons++)];
- (*ctrl_if_rxmsg_handler[msg->type])(msg, 0);
- }
-}
-
-static void ctrl_if_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
- control_if_t *ctrl_if = get_ctrl_if();
-
- if ( ctrl_if_tx_resp_cons != ctrl_if->tx_resp_prod )
- tasklet_schedule(&ctrl_if_tx_tasklet);
-
- if ( ctrl_if_rx_req_cons != ctrl_if->rx_req_prod )
- tasklet_schedule(&ctrl_if_rx_tasklet);
-}
-
-int ctrl_if_send_message_noblock(
- ctrl_msg_t *msg,
- ctrl_msg_handler_t hnd,
- unsigned long id)
-{
- control_if_t *ctrl_if = get_ctrl_if();
- unsigned long flags;
- int i;
-
- spin_lock_irqsave(&ctrl_if_lock, flags);
-
- if ( TX_FULL(ctrl_if) )
- {
- spin_unlock_irqrestore(&ctrl_if_lock, flags);
- return -EAGAIN;
- }
-
- msg->id = 0xFF;
- if ( hnd != NULL )
- {
- for ( i = 0; ctrl_if_txmsg_id_mapping[i].fn != NULL; i++ )
- continue;
- ctrl_if_txmsg_id_mapping[i].fn = hnd;
- ctrl_if_txmsg_id_mapping[i].id = id;
- msg->id = i;
- }
-
- memcpy(&ctrl_if->tx_ring[MASK_CONTROL_IDX(ctrl_if->tx_req_prod)],
- msg, sizeof(*msg));
- wmb(); /* Write the message before letting the controller peek at it. */
- ctrl_if->tx_req_prod++;
-
- spin_unlock_irqrestore(&ctrl_if_lock, flags);
-
- ctrl_if_notify_controller();
-
- return 0;
-}
-
-int ctrl_if_send_message_block(
- ctrl_msg_t *msg,
- ctrl_msg_handler_t hnd,
- unsigned long id,
- long wait_state)
-{
- DECLARE_WAITQUEUE(wait, current);
- int rc;
-
- /* Fast path. */
- if ( (rc = ctrl_if_send_message_noblock(msg, hnd, id)) != -EAGAIN )
- return rc;
-
- add_wait_queue(&ctrl_if_tx_wait, &wait);
-
- for ( ; ; )
- {
- set_current_state(wait_state);
-
- if ( (rc = ctrl_if_send_message_noblock(msg, hnd, id)) != -EAGAIN )
- break;
-
- rc = -ERESTARTSYS;
- if ( signal_pending(current) && (wait_state == TASK_INTERRUPTIBLE) )
- break;
-
- schedule();
- }
-
- set_current_state(TASK_RUNNING);
- remove_wait_queue(&ctrl_if_tx_wait, &wait);
-
- return rc;
-}
-
-int ctrl_if_enqueue_space_callback(struct tq_struct *task)
-{
- control_if_t *ctrl_if = get_ctrl_if();
-
- /* Fast path. */
- if ( !TX_FULL(ctrl_if) )
- return 0;
-
- (void)queue_task(task, &ctrl_if_tx_tq);
-
- /*
- * We may race execution of the task queue, so return re-checked status. If
- * the task is not executed despite the ring being non-full then we will
- * certainly return 'not full'.
- */
- smp_mb();
- return TX_FULL(ctrl_if);
-}
-
-void ctrl_if_send_response(ctrl_msg_t *msg)
-{
- control_if_t *ctrl_if = get_ctrl_if();
- unsigned long flags;
- ctrl_msg_t *dmsg;
-
- /*
- * NB. The response may the original request message, modified in-place.
- * In this situation we may have src==dst, so no copying is required.
- */
- spin_lock_irqsave(&ctrl_if_lock, flags);
- dmsg = &ctrl_if->rx_ring[MASK_CONTROL_IDX(ctrl_if->rx_resp_prod)];
- if ( dmsg != msg )
- memcpy(dmsg, msg, sizeof(*msg));
- wmb(); /* Write the message before letting the controller peek at it. */
- ctrl_if->rx_resp_prod++;
- spin_unlock_irqrestore(&ctrl_if_lock, flags);
-
- ctrl_if_notify_controller();
-}
-
-int ctrl_if_register_receiver(u8 type, ctrl_msg_handler_t hnd)
-{
- unsigned long flags;
- int inuse;
-
- spin_lock_irqsave(&ctrl_if_lock, flags);
-
- inuse = (ctrl_if_rxmsg_handler[type] != ctrl_if_rxmsg_default_handler);
-
- if ( inuse )
- printk(KERN_INFO "Receiver %p already established for control "
- "messages of type %d.\n", ctrl_if_rxmsg_handler[type], type);
- else
- ctrl_if_rxmsg_handler[type] = hnd;
-
- spin_unlock_irqrestore(&ctrl_if_lock, flags);
-
- return !inuse;
-}
-
-void ctrl_if_unregister_receiver(u8 type, ctrl_msg_handler_t hnd)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&ctrl_if_lock, flags);
-
- if ( ctrl_if_rxmsg_handler[type] != hnd )
- printk(KERN_INFO "Receiver %p is not registered for control "
- "messages of type %d.\n", hnd, type);
- else
- ctrl_if_rxmsg_handler[type] = ctrl_if_rxmsg_default_handler;
-
- spin_unlock_irqrestore(&ctrl_if_lock, flags);
-
- /* Ensure that @hnd will not be executed after this function returns. */
- tasklet_unlock_wait(&ctrl_if_rx_tasklet);
-}
-
-void ctrl_if_suspend(void)
-{
- if ( start_info.flags & SIF_INITDOMAIN )
- return;
-
- free_irq(ctrl_if_irq, NULL);
- unbind_evtchn_from_irq(ctrl_if_evtchn);
-}
-
-void ctrl_if_resume(void)
-{
- if ( start_info.flags & SIF_INITDOMAIN )
- return;
-
- ctrl_if_tx_resp_cons = 0;
- ctrl_if_rx_req_cons = 0;
-
- ctrl_if_evtchn = start_info.domain_controller_evtchn;
- ctrl_if_irq = bind_evtchn_to_irq(ctrl_if_evtchn);
-
- memset(&ctrl_if_irq_action, 0, sizeof(ctrl_if_irq_action));
- ctrl_if_irq_action.handler = ctrl_if_interrupt;
- ctrl_if_irq_action.name = "ctrl-if";
- (void)setup_irq(ctrl_if_irq, &ctrl_if_irq_action);
-}
-
-void __init ctrl_if_init(void)
-{
- int i;
-
- for ( i = 0; i < 256; i++ )
- ctrl_if_rxmsg_handler[i] = ctrl_if_rxmsg_default_handler;
-
- spin_lock_init(&ctrl_if_lock);
-
- ctrl_if_resume();
-}
-
-
-/*
- * !! The following are DANGEROUS FUNCTIONS !!
- * Use with care [for example, see xencons_force_flush()].
- */
-
-int ctrl_if_transmitter_empty(void)
-{
- return (get_ctrl_if()->tx_req_prod == ctrl_if_tx_resp_cons);
-}
-
-void ctrl_if_discard_responses(void)
-{
- ctrl_if_tx_resp_cons = get_ctrl_if()->tx_resp_prod;
-}
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/entry.S b/xenolinux-2.4.25-sparse/arch/xen/kernel/entry.S
deleted file mode 100644
index 305bd42c70..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/entry.S
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * linux/arch/i386/entry.S
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/*
- * entry.S contains the system-call and fault low-level handling routines.
- * This also contains the timer-interrupt handler, as well as all interrupts
- * and faults that can result in a task-switch.
- *
- * NOTE: This code handles signal-recognition, which happens every time
- * after a timer-interrupt and after each system call.
- *
- * I changed all the .align's to 4 (16 byte alignment), as that's faster
- * on a 486.
- *
- * Stack layout in 'ret_to_user':
- * ptrace needs to have all regs on the stack.
- * if the order here is changed, it needs to be
- * updated in fork.c:copy_process, signal.c:do_signal,
- * ptrace.c and ptrace.h
- *
- * 0(%esp) - %ebx
- * 4(%esp) - %ecx
- * 8(%esp) - %edx
- * C(%esp) - %esi
- * 10(%esp) - %edi
- * 14(%esp) - %ebp
- * 18(%esp) - %eax
- * 1C(%esp) - %ds
- * 20(%esp) - %es
- * 24(%esp) - orig_eax
- * 28(%esp) - %eip
- * 2C(%esp) - %cs
- * 30(%esp) - %eflags
- * 34(%esp) - %oldesp
- * 38(%esp) - %oldss
- *
- * "current" is in register %ebx during any slow entries.
- */
-
-#include <linux/config.h>
-#include <linux/sys.h>
-#include <linux/linkage.h>
-#include <asm/segment.h>
-#include <asm/smp.h>
-
-EBX = 0x00
-ECX = 0x04
-EDX = 0x08
-ESI = 0x0C
-EDI = 0x10
-EBP = 0x14
-EAX = 0x18
-DS = 0x1C
-ES = 0x20
-ORIG_EAX = 0x24
-EIP = 0x28
-CS = 0x2C
-EFLAGS = 0x30
-OLDESP = 0x34
-OLDSS = 0x38
-
-CF_MASK = 0x00000001
-TF_MASK = 0x00000100
-IF_MASK = 0x00000200
-DF_MASK = 0x00000400
-NT_MASK = 0x00004000
-
-/* Offsets into task_struct. */
-state = 0
-flags = 4
-sigpending = 8
-addr_limit = 12
-exec_domain = 16
-need_resched = 20
-tsk_ptrace = 24
-processor = 52
-
-/* Offsets into shared_info_t. */
-#define evtchn_upcall_pending /* 0 */
-#define evtchn_upcall_mask 1
-
-ENOSYS = 38
-
-
-#define SAVE_ALL \
- cld; \
- pushl %es; \
- pushl %ds; \
- pushl %eax; \
- pushl %ebp; \
- pushl %edi; \
- pushl %esi; \
- pushl %edx; \
- pushl %ecx; \
- pushl %ebx; \
- movl $(__KERNEL_DS),%edx; \
- movl %edx,%ds; \
- movl %edx,%es;
-
-#define RESTORE_ALL \
- popl %ebx; \
- popl %ecx; \
- popl %edx; \
- popl %esi; \
- popl %edi; \
- popl %ebp; \
- popl %eax; \
-1: popl %ds; \
-2: popl %es; \
- addl $4,%esp; \
-3: iret; \
-.section .fixup,"ax"; \
-4: movl $0,(%esp); \
- jmp 1b; \
-5: movl $0,(%esp); \
- jmp 2b; \
-6: pushl %ss; \
- popl %ds; \
- pushl %ss; \
- popl %es; \
- pushl $11; \
- call do_exit; \
-.previous; \
-.section __ex_table,"a";\
- .align 4; \
- .long 1b,4b; \
- .long 2b,5b; \
- .long 3b,6b; \
-.previous
-
-#define GET_CURRENT(reg) \
- movl $-8192, reg; \
- andl %esp, reg
-
-ENTRY(lcall7)
- pushfl # We get a different stack layout with call
- pushl %eax # gates, which has to be cleaned up later..
- SAVE_ALL
- movl EIP(%esp),%eax # due to call gates, this is eflags, not eip..
- movl CS(%esp),%edx # this is eip..
- movl EFLAGS(%esp),%ecx # and this is cs..
- movl %eax,EFLAGS(%esp) #
- andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
- pushl %eax
- popfl
- movl %edx,EIP(%esp) # Now we move them to their "normal" places
- movl %ecx,CS(%esp) #
- movl %esp,%ebx
- pushl %ebx
- andl $-8192,%ebx # GET_CURRENT
- movl exec_domain(%ebx),%edx # Get the execution domain
- movl 4(%edx),%edx # Get the lcall7 handler for the domain
- pushl $0x7
- call *%edx
- addl $4, %esp
- popl %eax
- jmp ret_to_user
-
-ENTRY(lcall27)
- pushfl # We get a different stack layout with call
- pushl %eax # gates, which has to be cleaned up later..
- SAVE_ALL
- movl EIP(%esp),%eax # due to call gates, this is eflags, not eip..
- movl CS(%esp),%edx # this is eip..
- movl EFLAGS(%esp),%ecx # and this is cs..
- movl %eax,EFLAGS(%esp) #
- andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
- pushl %eax
- popfl
- movl %edx,EIP(%esp) # Now we move them to their "normal" places
- movl %ecx,CS(%esp) #
- movl %esp,%ebx
- pushl %ebx
- andl $-8192,%ebx # GET_CURRENT
- movl exec_domain(%ebx),%edx # Get the execution domain
- movl 4(%edx),%edx # Get the lcall7 handler for the domain
- pushl $0x27
- call *%edx
- addl $4, %esp
- popl %eax
- jmp ret_to_user
-
-ENTRY(ret_from_fork)
- pushl %ebx
- call SYMBOL_NAME(schedule_tail)
- addl $4, %esp
- GET_CURRENT(%ebx)
- testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
- jne tracesys_exit
- jmp ret_to_user
-
-/*
- * Return to user mode is not as complex as all this looks,
- * but we want the default path for a system call return to
- * go as quickly as possible which is why some of this is
- * less clear than it otherwise should be.
- */
-ENTRY(system_call)
- pushl %eax # save orig_eax
- SAVE_ALL
- GET_CURRENT(%ebx)
- testb $0x02,tsk_ptrace(%ebx) # PT_TRACESYS
- jne tracesys
- cmpl $(NR_syscalls),%eax
- jae badsys
- call *SYMBOL_NAME(sys_call_table)(,%eax,4)
- movl %eax,EAX(%esp) # save the return value
-ret_to_user:
- movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
- movb $1,evtchn_upcall_mask(%esi) # make tests atomic
-ret_to_user_nocli:
- cmpl $0,need_resched(%ebx)
- jne reschedule
- cmpl $0,sigpending(%ebx)
- je safesti # ensure need_resched updates are seen
-/*signal_return:*/
- movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
- movl %esp,%eax
- xorl %edx,%edx
- call SYMBOL_NAME(do_signal)
- jmp safesti
-
- ALIGN
-restore_all:
- RESTORE_ALL
-
- ALIGN
-tracesys:
- movl $-ENOSYS,EAX(%esp)
- call SYMBOL_NAME(syscall_trace)
- movl ORIG_EAX(%esp),%eax
- cmpl $(NR_syscalls),%eax
- jae tracesys_exit
- call *SYMBOL_NAME(sys_call_table)(,%eax,4)
- movl %eax,EAX(%esp) # save the return value
-tracesys_exit:
- call SYMBOL_NAME(syscall_trace)
- jmp ret_to_user
-badsys:
- movl $-ENOSYS,EAX(%esp)
- jmp ret_to_user
-
- ALIGN
-ENTRY(ret_from_intr)
- GET_CURRENT(%ebx)
-ret_from_exception:
- movb CS(%esp),%al
- testl $2,%eax
- jne ret_to_user
- jmp restore_all
-
- ALIGN
-reschedule:
- movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
- call SYMBOL_NAME(schedule) # test
- jmp ret_to_user
-
-ENTRY(divide_error)
- pushl $0 # no error code
- pushl $ SYMBOL_NAME(do_divide_error)
- ALIGN
-error_code:
- pushl %ds
- pushl %eax
- xorl %eax,%eax
- pushl %ebp
- pushl %edi
- pushl %esi
- pushl %edx
- decl %eax # eax = -1
- pushl %ecx
- pushl %ebx
- GET_CURRENT(%ebx)
- cld
- movl %es,%ecx
- movl ORIG_EAX(%esp), %esi # get the error code
- movl ES(%esp), %edi # get the function address
- movl %eax, ORIG_EAX(%esp)
- movl %ecx, ES(%esp)
- movl %esp,%edx
- pushl %esi # push the error code
- pushl %edx # push the pt_regs pointer
- movl $(__KERNEL_DS),%edx
- movl %edx,%ds
- movl %edx,%es
- call *%edi
- addl $8,%esp
- jmp ret_from_exception
-
-# A note on the "critical region" in our callback handler.
-# We want to avoid stacking callback handlers due to events occurring
-# during handling of the last event. To do this, we keep events disabled
-# until we've done all processing. HOWEVER, we must enable events before
-# popping the stack frame (can't be done atomically) and so it would still
-# be possible to get enough handler activations to overflow the stack.
-# Although unlikely, bugs of that kind are hard to track down, so we'd
-# like to avoid the possibility.
-# So, on entry to the handler we detect whether we interrupted an
-# existing activation in its critical region -- if so, we pop the current
-# activation and restart the handler using the previous one.
-ENTRY(hypervisor_callback)
- pushl %eax
- SAVE_ALL
- GET_CURRENT(%ebx)
- movl EIP(%esp),%eax
- cmpl $scrit,%eax
- jb 11f
- cmpl $ecrit,%eax
- jb critical_region_fixup
-11: push %esp
- call evtchn_do_upcall
- add $4,%esp
- movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
- movb CS(%esp),%cl
- test $2,%cl # slow return to ring 2 or 3
- jne ret_to_user_nocli
-safesti:movb $0,evtchn_upcall_mask(%esi) # reenable event callbacks
-scrit: /**** START OF CRITICAL REGION ****/
- testb $0xFF,evtchn_upcall_pending(%esi)
- jnz 14f # process more events if necessary...
- RESTORE_ALL
-14: movb $1,evtchn_upcall_mask(%esi)
- jmp 11b
-ecrit: /**** END OF CRITICAL REGION ****/
-# [How we do the fixup]. We want to merge the current stack frame with the
-# just-interrupted frame. How we do this depends on where in the critical
-# region the interrupted handler was executing, and so how many saved
-# registers are in each frame. We do this quickly using the lookup table
-# 'critical_fixup_table'. For each byte offset in the critical region, it
-# provides the number of bytes which have already been popped from the
-# interrupted stack frame.
-critical_region_fixup:
- addl $critical_fixup_table-scrit,%eax
- movzbl (%eax),%eax # %eax contains num bytes popped
- mov %esp,%esi
- add %eax,%esi # %esi points at end of src region
- mov %esp,%edi
- add $0x34,%edi # %edi points at end of dst region
- mov %eax,%ecx
- shr $2,%ecx # convert words to bytes
- je 16f # skip loop if nothing to copy
-15: subl $4,%esi # pre-decrementing copy loop
- subl $4,%edi
- movl (%esi),%eax
- movl %eax,(%edi)
- loop 15b
-16: movl %edi,%esp # final %edi is top of merged stack
- jmp 11b
-
-critical_fixup_table:
- .byte 0x00,0x00,0x00 # testb $0xFF,(%esi)
- .byte 0x00,0x00 # jnz 14f
- .byte 0x00 # pop %ebx
- .byte 0x04 # pop %ecx
- .byte 0x08 # pop %edx
- .byte 0x0c # pop %esi
- .byte 0x10 # pop %edi
- .byte 0x14 # pop %ebp
- .byte 0x18 # pop %eax
- .byte 0x1c # pop %ds
- .byte 0x20 # pop %es
- .byte 0x24,0x24,0x24 # add $4,%esp
- .byte 0x28 # iret
- .byte 0x00,0x00,0x00,0x00 # movb $1,4(%esi)
- .byte 0x00,0x00 # jmp 11b
-
-# Hypervisor uses this for application faults while it executes.
-ENTRY(failsafe_callback)
- pushal
- call SYMBOL_NAME(install_safe_pf_handler)
- movl 32(%esp),%ebx
-1: movl %ebx,%ds
- movl 36(%esp),%ebx
-2: movl %ebx,%es
- movl 40(%esp),%ebx
-3: movl %ebx,%fs
- movl 44(%esp),%ebx
-4: movl %ebx,%gs
- call SYMBOL_NAME(install_normal_pf_handler)
- popal
- addl $16,%esp
-5: iret
-.section .fixup,"ax"; \
-6: xorl %ebx,%ebx; \
- jmp 1b; \
-7: xorl %ebx,%ebx; \
- jmp 2b; \
-8: xorl %ebx,%ebx; \
- jmp 3b; \
-9: xorl %ebx,%ebx; \
- jmp 4b; \
-10: pushl %ss; \
- popl %ds; \
- pushl %ss; \
- popl %es; \
- pushl $11; \
- call do_exit; \
-.previous; \
-.section __ex_table,"a";\
- .align 4; \
- .long 1b,6b; \
- .long 2b,7b; \
- .long 3b,8b; \
- .long 4b,9b; \
- .long 5b,10b; \
-.previous
-
-ENTRY(coprocessor_error)
- pushl $0
- pushl $ SYMBOL_NAME(do_coprocessor_error)
- jmp error_code
-
-ENTRY(simd_coprocessor_error)
- pushl $0
- pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
- jmp error_code
-
-ENTRY(device_not_available)
- pushl $-1 # mark this as an int
- SAVE_ALL
- GET_CURRENT(%ebx)
- call SYMBOL_NAME(math_state_restore)
- jmp ret_from_exception
-
-ENTRY(debug)
- pushl $0
- pushl $ SYMBOL_NAME(do_debug)
- jmp error_code
-
-ENTRY(int3)
- pushl $0
- pushl $ SYMBOL_NAME(do_int3)
- jmp error_code
-
-ENTRY(overflow)
- pushl $0
- pushl $ SYMBOL_NAME(do_overflow)
- jmp error_code
-
-ENTRY(bounds)
- pushl $0
- pushl $ SYMBOL_NAME(do_bounds)
- jmp error_code
-
-ENTRY(invalid_op)
- pushl $0
- pushl $ SYMBOL_NAME(do_invalid_op)
- jmp error_code
-
-ENTRY(coprocessor_segment_overrun)
- pushl $0
- pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
- jmp error_code
-
-ENTRY(double_fault)
- pushl $ SYMBOL_NAME(do_double_fault)
- jmp error_code
-
-ENTRY(invalid_TSS)
- pushl $ SYMBOL_NAME(do_invalid_TSS)
- jmp error_code
-
-ENTRY(segment_not_present)
- pushl $ SYMBOL_NAME(do_segment_not_present)
- jmp error_code
-
-ENTRY(stack_segment)
- pushl $ SYMBOL_NAME(do_stack_segment)
- jmp error_code
-
-ENTRY(general_protection)
- pushl $ SYMBOL_NAME(do_general_protection)
- jmp error_code
-
-ENTRY(alignment_check)
- pushl $ SYMBOL_NAME(do_alignment_check)
- jmp error_code
-
-# This handler is special, because it gets an extra value on its stack,
-# which is the linear faulting address.
-#define PAGE_FAULT_STUB(_name1, _name2) \
-ENTRY(_name1) \
- pushl %ds ; \
- pushl %eax ; \
- xorl %eax,%eax ; \
- pushl %ebp ; \
- pushl %edi ; \
- pushl %esi ; \
- pushl %edx ; \
- decl %eax /* eax = -1 */ ; \
- pushl %ecx ; \
- pushl %ebx ; \
- GET_CURRENT(%ebx) ; \
- cld ; \
- movl %es,%ecx ; \
- movl ORIG_EAX(%esp), %esi /* get the error code */ ; \
- movl ES(%esp), %edi /* get the faulting address */ ; \
- movl %eax, ORIG_EAX(%esp) ; \
- movl %ecx, ES(%esp) ; \
- movl %esp,%edx ; \
- pushl %edi /* push the faulting address */ ; \
- pushl %esi /* push the error code */ ; \
- pushl %edx /* push the pt_regs pointer */ ; \
- movl $(__KERNEL_DS),%edx ; \
- movl %edx,%ds ; \
- movl %edx,%es ; \
- call SYMBOL_NAME(_name2) ; \
- addl $12,%esp ; \
- jmp ret_from_exception ;
-PAGE_FAULT_STUB(page_fault, do_page_fault)
-PAGE_FAULT_STUB(safe_page_fault, do_safe_page_fault)
-
-ENTRY(machine_check)
- pushl $0
- pushl $ SYMBOL_NAME(do_machine_check)
- jmp error_code
-
-ENTRY(spurious_interrupt_bug)
- pushl $0
- pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
- jmp error_code
-
-.data
-ENTRY(sys_call_table)
- .long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
- .long SYMBOL_NAME(sys_exit)
- .long SYMBOL_NAME(sys_fork)
- .long SYMBOL_NAME(sys_read)
- .long SYMBOL_NAME(sys_write)
- .long SYMBOL_NAME(sys_open) /* 5 */
- .long SYMBOL_NAME(sys_close)
- .long SYMBOL_NAME(sys_waitpid)
- .long SYMBOL_NAME(sys_creat)
- .long SYMBOL_NAME(sys_link)
- .long SYMBOL_NAME(sys_unlink) /* 10 */
- .long SYMBOL_NAME(sys_execve)
- .long SYMBOL_NAME(sys_chdir)
- .long SYMBOL_NAME(sys_time)
- .long SYMBOL_NAME(sys_mknod)
- .long SYMBOL_NAME(sys_chmod) /* 15 */
- .long SYMBOL_NAME(sys_lchown16)
- .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */
- .long SYMBOL_NAME(sys_stat)
- .long SYMBOL_NAME(sys_lseek)
- .long SYMBOL_NAME(sys_getpid) /* 20 */
- .long SYMBOL_NAME(sys_mount)
- .long SYMBOL_NAME(sys_oldumount)
- .long SYMBOL_NAME(sys_setuid16)
- .long SYMBOL_NAME(sys_getuid16)
- .long SYMBOL_NAME(sys_stime) /* 25 */
- .long SYMBOL_NAME(sys_ptrace)
- .long SYMBOL_NAME(sys_alarm)
- .long SYMBOL_NAME(sys_fstat)
- .long SYMBOL_NAME(sys_pause)
- .long SYMBOL_NAME(sys_utime) /* 30 */
- .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */
- .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */
- .long SYMBOL_NAME(sys_access)
- .long SYMBOL_NAME(sys_nice)
- .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */
- .long SYMBOL_NAME(sys_sync)
- .long SYMBOL_NAME(sys_kill)
- .long SYMBOL_NAME(sys_rename)
- .long SYMBOL_NAME(sys_mkdir)
- .long SYMBOL_NAME(sys_rmdir) /* 40 */
- .long SYMBOL_NAME(sys_dup)
- .long SYMBOL_NAME(sys_pipe)
- .long SYMBOL_NAME(sys_times)
- .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */
- .long SYMBOL_NAME(sys_brk) /* 45 */
- .long SYMBOL_NAME(sys_setgid16)
- .long SYMBOL_NAME(sys_getgid16)
- .long SYMBOL_NAME(sys_signal)
- .long SYMBOL_NAME(sys_geteuid16)
- .long SYMBOL_NAME(sys_getegid16) /* 50 */
- .long SYMBOL_NAME(sys_acct)
- .long SYMBOL_NAME(sys_umount) /* recycled never used phys() */
- .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */
- .long SYMBOL_NAME(sys_ioctl)
- .long SYMBOL_NAME(sys_fcntl) /* 55 */
- .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */
- .long SYMBOL_NAME(sys_setpgid)
- .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */
- .long SYMBOL_NAME(sys_olduname)
- .long SYMBOL_NAME(sys_umask) /* 60 */
- .long SYMBOL_NAME(sys_chroot)
- .long SYMBOL_NAME(sys_ustat)
- .long SYMBOL_NAME(sys_dup2)
- .long SYMBOL_NAME(sys_getppid)
- .long SYMBOL_NAME(sys_getpgrp) /* 65 */
- .long SYMBOL_NAME(sys_setsid)
- .long SYMBOL_NAME(sys_sigaction)
- .long SYMBOL_NAME(sys_sgetmask)
- .long SYMBOL_NAME(sys_ssetmask)
- .long SYMBOL_NAME(sys_setreuid16) /* 70 */
- .long SYMBOL_NAME(sys_setregid16)
- .long SYMBOL_NAME(sys_sigsuspend)
- .long SYMBOL_NAME(sys_sigpending)
- .long SYMBOL_NAME(sys_sethostname)
- .long SYMBOL_NAME(sys_setrlimit) /* 75 */
- .long SYMBOL_NAME(sys_old_getrlimit)
- .long SYMBOL_NAME(sys_getrusage)
- .long SYMBOL_NAME(sys_gettimeofday)
- .long SYMBOL_NAME(sys_settimeofday)
- .long SYMBOL_NAME(sys_getgroups16) /* 80 */
- .long SYMBOL_NAME(sys_setgroups16)
- .long SYMBOL_NAME(old_select)
- .long SYMBOL_NAME(sys_symlink)
- .long SYMBOL_NAME(sys_lstat)
- .long SYMBOL_NAME(sys_readlink) /* 85 */
- .long SYMBOL_NAME(sys_uselib)
- .long SYMBOL_NAME(sys_swapon)
- .long SYMBOL_NAME(sys_reboot)
- .long SYMBOL_NAME(old_readdir)
- .long SYMBOL_NAME(old_mmap) /* 90 */
- .long SYMBOL_NAME(sys_munmap)
- .long SYMBOL_NAME(sys_truncate)
- .long SYMBOL_NAME(sys_ftruncate)
- .long SYMBOL_NAME(sys_fchmod)
- .long SYMBOL_NAME(sys_fchown16) /* 95 */
- .long SYMBOL_NAME(sys_getpriority)
- .long SYMBOL_NAME(sys_setpriority)
- .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */
- .long SYMBOL_NAME(sys_statfs)
- .long SYMBOL_NAME(sys_fstatfs) /* 100 */
- .long SYMBOL_NAME(sys_ioperm)
- .long SYMBOL_NAME(sys_socketcall)
- .long SYMBOL_NAME(sys_syslog)
- .long SYMBOL_NAME(sys_setitimer)
- .long SYMBOL_NAME(sys_getitimer) /* 105 */
- .long SYMBOL_NAME(sys_newstat)
- .long SYMBOL_NAME(sys_newlstat)
- .long SYMBOL_NAME(sys_newfstat)
- .long SYMBOL_NAME(sys_uname)
- .long SYMBOL_NAME(sys_iopl) /* 110 */
- .long SYMBOL_NAME(sys_vhangup)
- .long SYMBOL_NAME(sys_ni_syscall) /* old "idle" system call */
- .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
- .long SYMBOL_NAME(sys_wait4)
- .long SYMBOL_NAME(sys_swapoff) /* 115 */
- .long SYMBOL_NAME(sys_sysinfo)
- .long SYMBOL_NAME(sys_ipc)
- .long SYMBOL_NAME(sys_fsync)
- .long SYMBOL_NAME(sys_sigreturn)
- .long SYMBOL_NAME(sys_clone) /* 120 */
- .long SYMBOL_NAME(sys_setdomainname)
- .long SYMBOL_NAME(sys_newuname)
- .long SYMBOL_NAME(sys_modify_ldt)
- .long SYMBOL_NAME(sys_adjtimex)
- .long SYMBOL_NAME(sys_mprotect) /* 125 */
- .long SYMBOL_NAME(sys_sigprocmask)
- .long SYMBOL_NAME(sys_create_module)
- .long SYMBOL_NAME(sys_init_module)
- .long SYMBOL_NAME(sys_delete_module)
- .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */
- .long SYMBOL_NAME(sys_quotactl)
- .long SYMBOL_NAME(sys_getpgid)
- .long SYMBOL_NAME(sys_fchdir)
- .long SYMBOL_NAME(sys_bdflush)
- .long SYMBOL_NAME(sys_sysfs) /* 135 */
- .long SYMBOL_NAME(sys_personality)
- .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */
- .long SYMBOL_NAME(sys_setfsuid16)
- .long SYMBOL_NAME(sys_setfsgid16)
- .long SYMBOL_NAME(sys_llseek) /* 140 */
- .long SYMBOL_NAME(sys_getdents)
- .long SYMBOL_NAME(sys_select)
- .long SYMBOL_NAME(sys_flock)
- .long SYMBOL_NAME(sys_msync)
- .long SYMBOL_NAME(sys_readv) /* 145 */
- .long SYMBOL_NAME(sys_writev)
- .long SYMBOL_NAME(sys_getsid)
- .long SYMBOL_NAME(sys_fdatasync)
- .long SYMBOL_NAME(sys_sysctl)
- .long SYMBOL_NAME(sys_mlock) /* 150 */
- .long SYMBOL_NAME(sys_munlock)
- .long SYMBOL_NAME(sys_mlockall)
- .long SYMBOL_NAME(sys_munlockall)
- .long SYMBOL_NAME(sys_sched_setparam)
- .long SYMBOL_NAME(sys_sched_getparam) /* 155 */
- .long SYMBOL_NAME(sys_sched_setscheduler)
- .long SYMBOL_NAME(sys_sched_getscheduler)
- .long SYMBOL_NAME(sys_sched_yield)
- .long SYMBOL_NAME(sys_sched_get_priority_max)
- .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */
- .long SYMBOL_NAME(sys_sched_rr_get_interval)
- .long SYMBOL_NAME(sys_nanosleep)
- .long SYMBOL_NAME(sys_mremap)
- .long SYMBOL_NAME(sys_setresuid16)
- .long SYMBOL_NAME(sys_getresuid16) /* 165 */
- .long SYMBOL_NAME(sys_ni_syscall) /* was VM86 */
- .long SYMBOL_NAME(sys_query_module)
- .long SYMBOL_NAME(sys_poll)
- .long SYMBOL_NAME(sys_nfsservctl)
- .long SYMBOL_NAME(sys_setresgid16) /* 170 */
- .long SYMBOL_NAME(sys_getresgid16)
- .long SYMBOL_NAME(sys_prctl)
- .long SYMBOL_NAME(sys_rt_sigreturn)
- .long SYMBOL_NAME(sys_rt_sigaction)
- .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */
- .long SYMBOL_NAME(sys_rt_sigpending)
- .long SYMBOL_NAME(sys_rt_sigtimedwait)
- .long SYMBOL_NAME(sys_rt_sigqueueinfo)
- .long SYMBOL_NAME(sys_rt_sigsuspend)
- .long SYMBOL_NAME(sys_pread) /* 180 */
- .long SYMBOL_NAME(sys_pwrite)
- .long SYMBOL_NAME(sys_chown16)
- .long SYMBOL_NAME(sys_getcwd)
- .long SYMBOL_NAME(sys_capget)
- .long SYMBOL_NAME(sys_capset) /* 185 */
- .long SYMBOL_NAME(sys_sigaltstack)
- .long SYMBOL_NAME(sys_sendfile)
- .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */
- .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */
- .long SYMBOL_NAME(sys_vfork) /* 190 */
- .long SYMBOL_NAME(sys_getrlimit)
- .long SYMBOL_NAME(sys_mmap2)
- .long SYMBOL_NAME(sys_truncate64)
- .long SYMBOL_NAME(sys_ftruncate64)
- .long SYMBOL_NAME(sys_stat64) /* 195 */
- .long SYMBOL_NAME(sys_lstat64)
- .long SYMBOL_NAME(sys_fstat64)
- .long SYMBOL_NAME(sys_lchown)
- .long SYMBOL_NAME(sys_getuid)
- .long SYMBOL_NAME(sys_getgid) /* 200 */
- .long SYMBOL_NAME(sys_geteuid)
- .long SYMBOL_NAME(sys_getegid)
- .long SYMBOL_NAME(sys_setreuid)
- .long SYMBOL_NAME(sys_setregid)
- .long SYMBOL_NAME(sys_getgroups) /* 205 */
- .long SYMBOL_NAME(sys_setgroups)
- .long SYMBOL_NAME(sys_fchown)
- .long SYMBOL_NAME(sys_setresuid)
- .long SYMBOL_NAME(sys_getresuid)
- .long SYMBOL_NAME(sys_setresgid) /* 210 */
- .long SYMBOL_NAME(sys_getresgid)
- .long SYMBOL_NAME(sys_chown)
- .long SYMBOL_NAME(sys_setuid)
- .long SYMBOL_NAME(sys_setgid)
- .long SYMBOL_NAME(sys_setfsuid) /* 215 */
- .long SYMBOL_NAME(sys_setfsgid)
- .long SYMBOL_NAME(sys_pivot_root)
- .long SYMBOL_NAME(sys_mincore)
- .long SYMBOL_NAME(sys_madvise)
- .long SYMBOL_NAME(sys_getdents64) /* 220 */
- .long SYMBOL_NAME(sys_fcntl64)
- .long SYMBOL_NAME(sys_ni_syscall) /* reserved for TUX */
- .long SYMBOL_NAME(sys_ni_syscall) /* Reserved for Security */
- .long SYMBOL_NAME(sys_gettid)
- .long SYMBOL_NAME(sys_readahead) /* 225 */
- .long SYMBOL_NAME(sys_setxattr)
- .long SYMBOL_NAME(sys_lsetxattr)
- .long SYMBOL_NAME(sys_fsetxattr)
- .long SYMBOL_NAME(sys_getxattr)
- .long SYMBOL_NAME(sys_lgetxattr) /* 230 */
- .long SYMBOL_NAME(sys_fgetxattr)
- .long SYMBOL_NAME(sys_listxattr)
- .long SYMBOL_NAME(sys_llistxattr)
- .long SYMBOL_NAME(sys_flistxattr)
- .long SYMBOL_NAME(sys_removexattr) /* 235 */
- .long SYMBOL_NAME(sys_lremovexattr)
- .long SYMBOL_NAME(sys_fremovexattr)
- .long SYMBOL_NAME(sys_tkill)
- .long SYMBOL_NAME(sys_sendfile64)
- .long SYMBOL_NAME(sys_ni_syscall) /* 240 reserved for futex */
- .long SYMBOL_NAME(sys_ni_syscall) /* reserved for sched_setaffinity */
- .long SYMBOL_NAME(sys_ni_syscall) /* reserved for sched_getaffinity */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_thread_area */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_get_thread_area */
- .long SYMBOL_NAME(sys_ni_syscall) /* 245 sys_io_setup */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_destroy */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_getevents */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_submit */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_io_cancel */
- .long SYMBOL_NAME(sys_ni_syscall) /* 250 sys_alloc_hugepages */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_free_hugepages */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_exit_group */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_lookup_dcookie */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_create */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_ctl 255 */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_wait */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */
- .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */
-
- .rept NR_syscalls-(.-sys_call_table)/4
- .long SYMBOL_NAME(sys_ni_syscall)
- .endr
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/evtchn.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/evtchn.c
deleted file mode 100644
index 4f933057c2..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/evtchn.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/******************************************************************************
- * evtchn.c
- *
- * Communication via Xen event channels.
- *
- * Copyright (c) 2002-2004, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <linux/sched.h>
-#include <linux/kernel_stat.h>
-#include <asm/atomic.h>
-#include <asm/system.h>
-#include <asm/ptrace.h>
-#include <asm/synch_bitops.h>
-#include <asm/ctrl_if.h>
-#include <asm/hypervisor.h>
-#include <asm/hypervisor-ifs/event_channel.h>
-#include <asm/hypervisor-ifs/physdev.h>
-
-/*
- * This lock protects updates to the following mapping and reference-count
- * arrays. The lock does not need to be acquired to read the mapping tables.
- */
-static spinlock_t irq_mapping_update_lock;
-
-/* IRQ <-> event-channel mappings. */
-static int evtchn_to_irq[NR_EVENT_CHANNELS];
-static int irq_to_evtchn[NR_IRQS];
-
-/* IRQ <-> VIRQ mapping. */
-static int virq_to_irq[NR_VIRQS];
-
-/* Reference counts for bindings to IRQs. */
-static int irq_bindcount[NR_IRQS];
-
-/* Upcall to generic IRQ layer. */
-extern asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs);
-
-#define VALID_EVTCHN(_chn) ((_chn) != -1)
-
-void evtchn_do_upcall(struct pt_regs *regs)
-{
- unsigned long l1, l2;
- unsigned int l1i, l2i, port;
- int irq;
- unsigned long flags;
- shared_info_t *s = HYPERVISOR_shared_info;
-
- local_irq_save(flags);
-
- while ( s->vcpu_data[0].evtchn_upcall_pending )
- {
- s->vcpu_data[0].evtchn_upcall_pending = 0;
- /* NB. No need for a barrier here -- XCHG is a barrier on x86. */
- l1 = xchg(&s->evtchn_pending_sel, 0);
- while ( (l1i = ffs(l1)) != 0 )
- {
- l1i--;
- l1 &= ~(1 << l1i);
-
- l2 = s->evtchn_pending[l1i] & ~s->evtchn_mask[l1i];
- while ( (l2i = ffs(l2)) != 0 )
- {
- l2i--;
- l2 &= ~(1 << l2i);
-
- port = (l1i << 5) + l2i;
- if ( (irq = evtchn_to_irq[port]) != -1 )
- do_IRQ(irq, regs);
- else
- evtchn_device_upcall(port);
- }
- }
- }
-
- local_irq_restore(flags);
-}
-
-
-static int find_unbound_irq(void)
-{
- int irq;
-
- for ( irq = 0; irq < NR_IRQS; irq++ )
- if ( irq_bindcount[irq] == 0 )
- break;
-
- if ( irq == NR_IRQS )
- panic("No available IRQ to bind to: increase NR_IRQS!\n");
-
- return irq;
-}
-
-int bind_virq_to_irq(int virq)
-{
- evtchn_op_t op;
- int evtchn, irq;
-
- spin_lock(&irq_mapping_update_lock);
-
- if ( (irq = virq_to_irq[virq]) == -1 )
- {
- op.cmd = EVTCHNOP_bind_virq;
- op.u.bind_virq.virq = virq;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- panic("Failed to bind virtual IRQ %d\n", virq);
- evtchn = op.u.bind_virq.port;
-
- irq = find_unbound_irq();
- evtchn_to_irq[evtchn] = irq;
- irq_to_evtchn[irq] = evtchn;
-
- virq_to_irq[virq] = irq;
- }
-
- irq_bindcount[irq]++;
-
- spin_unlock(&irq_mapping_update_lock);
-
- return irq;
-}
-
-void unbind_virq_from_irq(int virq)
-{
- evtchn_op_t op;
- int irq = virq_to_irq[virq];
- int evtchn = irq_to_evtchn[irq];
-
- spin_lock(&irq_mapping_update_lock);
-
- if ( --irq_bindcount[irq] == 0 )
- {
- op.cmd = EVTCHNOP_close;
- op.u.close.dom = DOMID_SELF;
- op.u.close.port = evtchn;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- panic("Failed to unbind virtual IRQ %d\n", virq);
-
- evtchn_to_irq[evtchn] = -1;
- irq_to_evtchn[irq] = -1;
- virq_to_irq[virq] = -1;
- }
-
- spin_unlock(&irq_mapping_update_lock);
-}
-
-int bind_evtchn_to_irq(int evtchn)
-{
- int irq;
-
- spin_lock(&irq_mapping_update_lock);
-
- if ( (irq = evtchn_to_irq[evtchn]) == -1 )
- {
- irq = find_unbound_irq();
- evtchn_to_irq[evtchn] = irq;
- irq_to_evtchn[irq] = evtchn;
- }
-
- irq_bindcount[irq]++;
-
- spin_unlock(&irq_mapping_update_lock);
-
- return irq;
-}
-
-void unbind_evtchn_from_irq(int evtchn)
-{
- int irq = evtchn_to_irq[evtchn];
-
- spin_lock(&irq_mapping_update_lock);
-
- if ( --irq_bindcount[irq] == 0 )
- {
- evtchn_to_irq[evtchn] = -1;
- irq_to_evtchn[irq] = -1;
- }
-
- spin_unlock(&irq_mapping_update_lock);
-}
-
-
-/*
- * Interface to generic handling in irq.c
- */
-
-static unsigned int startup_dynirq(unsigned int irq)
-{
- unmask_evtchn(irq_to_evtchn[irq]);
- return 0;
-}
-
-static void shutdown_dynirq(unsigned int irq)
-{
- mask_evtchn(irq_to_evtchn[irq]);
-}
-
-static void enable_dynirq(unsigned int irq)
-{
- unmask_evtchn(irq_to_evtchn[irq]);
-}
-
-static void disable_dynirq(unsigned int irq)
-{
- mask_evtchn(irq_to_evtchn[irq]);
-}
-
-static void ack_dynirq(unsigned int irq)
-{
- mask_evtchn(irq_to_evtchn[irq]);
- clear_evtchn(irq_to_evtchn[irq]);
-}
-
-static void end_dynirq(unsigned int irq)
-{
- if ( !(irq_desc[irq].status & IRQ_DISABLED) )
- unmask_evtchn(irq_to_evtchn[irq]);
-}
-
-static struct hw_interrupt_type dynirq_type = {
- "Dynamic-irq",
- startup_dynirq,
- shutdown_dynirq,
- enable_dynirq,
- disable_dynirq,
- ack_dynirq,
- end_dynirq,
- NULL
-};
-
-static inline void pirq_unmask_notify(int pirq)
-{
- physdev_op_t op;
- op.cmd = PHYSDEVOP_UNMASK_IRQ;
- (void)HYPERVISOR_physdev_op(&op);
-}
-
-/*
- * On startup, if there is no action associated with the IRQ then we are
- * probing. In this case we should not share with others as it will confuse us.
- */
-#define probing_irq(_irq) (irq_desc[(_irq)].action == NULL)
-
-static unsigned int startup_pirq(unsigned int irq)
-{
- evtchn_op_t op;
- int evtchn;
-
- op.cmd = EVTCHNOP_bind_pirq;
- op.u.bind_pirq.pirq = irq;
- /* NB. We are happy to share unless we are probing. */
- op.u.bind_pirq.flags = probing_irq(irq) ? 0 : BIND_PIRQ__WILL_SHARE;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- {
- if ( !probing_irq(irq) ) /* Some failures are expected when probing. */
- printk(KERN_INFO "Failed to obtain physical IRQ %d\n", irq);
- return 0;
- }
- evtchn = op.u.bind_pirq.port;
-
- evtchn_to_irq[evtchn] = irq;
- irq_to_evtchn[irq] = evtchn;
-
- unmask_evtchn(evtchn);
- pirq_unmask_notify(irq_to_pirq(irq));
-
- return 0;
-}
-
-static void shutdown_pirq(unsigned int irq)
-{
- evtchn_op_t op;
- int evtchn = irq_to_evtchn[irq];
-
- if ( !VALID_EVTCHN(evtchn) )
- return;
-
- mask_evtchn(evtchn);
-
- op.cmd = EVTCHNOP_close;
- op.u.close.dom = DOMID_SELF;
- op.u.close.port = evtchn;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- panic("Failed to unbind physical IRQ %d\n", irq);
-
- evtchn_to_irq[evtchn] = -1;
- irq_to_evtchn[irq] = -1;
-}
-
-static void enable_pirq(unsigned int irq)
-{
- int evtchn = irq_to_evtchn[irq];
- if ( !VALID_EVTCHN(evtchn) )
- return;
- unmask_evtchn(evtchn);
- pirq_unmask_notify(irq_to_pirq(irq));
-}
-
-static void disable_pirq(unsigned int irq)
-{
- int evtchn = irq_to_evtchn[irq];
- if ( !VALID_EVTCHN(evtchn) )
- return;
- mask_evtchn(evtchn);
-}
-
-static void ack_pirq(unsigned int irq)
-{
- int evtchn = irq_to_evtchn[irq];
- if ( !VALID_EVTCHN(evtchn) )
- return;
- mask_evtchn(evtchn);
- clear_evtchn(evtchn);
-}
-
-static void end_pirq(unsigned int irq)
-{
- int evtchn = irq_to_evtchn[irq];
- if ( !VALID_EVTCHN(evtchn) )
- return;
- if ( !(irq_desc[irq].status & IRQ_DISABLED) )
- {
- unmask_evtchn(evtchn);
- pirq_unmask_notify(irq_to_pirq(irq));
- }
-}
-
-static struct hw_interrupt_type pirq_type = {
- "Phys-irq",
- startup_pirq,
- shutdown_pirq,
- enable_pirq,
- disable_pirq,
- ack_pirq,
- end_pirq,
- NULL
-};
-
-static void misdirect_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
- /* nothing */
-}
-
-static struct irqaction misdirect_action = {
- misdirect_interrupt,
- SA_INTERRUPT,
- 0,
- "misdirect",
- NULL,
- NULL
-};
-
-void irq_suspend(void)
-{
- evtchn_op_t op;
- int virq, irq, evtchn;
-
- /* Unbind VIRQs from event channels. */
- for ( virq = 0; virq < NR_VIRQS; virq++ )
- {
- if ( (irq = virq_to_irq[virq]) == -1 )
- continue;
- evtchn = irq_to_evtchn[irq];
-
- /* Inform Xen that we are unbinding. */
- op.cmd = EVTCHNOP_close;
- op.u.close.dom = DOMID_SELF;
- op.u.close.port = evtchn;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- panic("Failed to unbind virtual IRQ %d\n", virq);
-
- /* Mark the event channel as unused in our table. */
- evtchn_to_irq[evtchn] = -1;
- irq_to_evtchn[irq] = -1;
- }
-
- /*
- * We should now be unbound from all event channels. Stale bindings to
- * PIRQs and/or inter-domain event channels will cause us to barf here.
- */
- for ( evtchn = 0; evtchn < NR_EVENT_CHANNELS; evtchn++ )
- if ( evtchn_to_irq[evtchn] != -1 )
- panic("Suspend attempted while bound to evtchn %d.\n", evtchn);
-}
-
-
-void irq_resume(void)
-{
- evtchn_op_t op;
- int virq, irq, evtchn;
-
- for ( evtchn = 0; evtchn < NR_EVENT_CHANNELS; evtchn++ )
- mask_evtchn(evtchn); /* New event-channel space is not 'live' yet. */
-
- for ( virq = 0; virq < NR_VIRQS; virq++ )
- {
- if ( (irq = virq_to_irq[virq]) == -1 )
- continue;
-
- /* Get a new binding from Xen. */
- op.cmd = EVTCHNOP_bind_virq;
- op.u.bind_virq.virq = virq;
- if ( HYPERVISOR_event_channel_op(&op) != 0 )
- panic("Failed to bind virtual IRQ %d\n", virq);
- evtchn = op.u.bind_virq.port;
-
- /* Record the new mapping. */
- evtchn_to_irq[evtchn] = irq;
- irq_to_evtchn[irq] = evtchn;
-
- /* Ready for use. */
- unmask_evtchn(evtchn);
- }
-}
-
-void __init init_IRQ(void)
-{
- int i;
-
- spin_lock_init(&irq_mapping_update_lock);
-
- /* No VIRQ -> IRQ mappings. */
- for ( i = 0; i < NR_VIRQS; i++ )
- virq_to_irq[i] = -1;
-
- /* No event-channel -> IRQ mappings. */
- for ( i = 0; i < NR_EVENT_CHANNELS; i++ )
- {
- evtchn_to_irq[i] = -1;
- mask_evtchn(i); /* No event channels are 'live' right now. */
- }
-
- /* No IRQ -> event-channel mappings. */
- for ( i = 0; i < NR_IRQS; i++ )
- irq_to_evtchn[i] = -1;
-
- for ( i = 0; i < NR_DYNIRQS; i++ )
- {
- /* Dynamic IRQ space is currently unbound. Zero the refcnts. */
- irq_bindcount[dynirq_to_irq(i)] = 0;
-
- irq_desc[dynirq_to_irq(i)].status = IRQ_DISABLED;
- irq_desc[dynirq_to_irq(i)].action = 0;
- irq_desc[dynirq_to_irq(i)].depth = 1;
- irq_desc[dynirq_to_irq(i)].handler = &dynirq_type;
- }
-
- for ( i = 0; i < NR_PIRQS; i++ )
- {
- /* Phys IRQ space is statically bound (1:1 mapping). Nail refcnts. */
- irq_bindcount[pirq_to_irq(i)] = 1;
-
- irq_desc[pirq_to_irq(i)].status = IRQ_DISABLED;
- irq_desc[pirq_to_irq(i)].action = 0;
- irq_desc[pirq_to_irq(i)].depth = 1;
- irq_desc[pirq_to_irq(i)].handler = &pirq_type;
- }
-
- (void)setup_irq(bind_virq_to_irq(VIRQ_MISDIRECT), &misdirect_action);
-
- /* This needs to be done early, but after the IRQ subsystem is alive. */
- ctrl_if_init();
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/head.S b/xenolinux-2.4.25-sparse/arch/xen/kernel/head.S
deleted file mode 100644
index 2d9379a15b..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/head.S
+++ /dev/null
@@ -1,39 +0,0 @@
-
-.section __xen_guest
- .asciz "GUEST_OS=linux,GUEST_VER=2.4,XEN_VER=1.3"
-
-.text
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <linux/linkage.h>
-#include <asm/segment.h>
-#include <asm/page.h>
-#include <asm/pgtable.h>
-#include <asm/desc.h>
-
-ENTRY(stext)
-ENTRY(_stext)
- cld
- lss stack_start,%esp
- /* Copy the necessary stuff from start_info structure. */
- mov $SYMBOL_NAME(start_info_union),%edi
- mov $128,%ecx
- rep movsl
- jmp SYMBOL_NAME(start_kernel)
-
-ENTRY(stack_start)
- .long SYMBOL_NAME(init_task_union)+8192, __KERNEL_DS
-
-.org 0x1000
-ENTRY(empty_zero_page)
-
-.org 0x2000
-ENTRY(default_ldt)
-
-.org 0x3000
-ENTRY(cpu0_pte_quicklist)
-
-.org 0x3400
-ENTRY(cpu0_pgd_quicklist)
-
-.org 0x3800
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/i386_ksyms.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/i386_ksyms.c
deleted file mode 100644
index 034b39d859..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/i386_ksyms.c
+++ /dev/null
@@ -1,175 +0,0 @@
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/smp.h>
-#include <linux/user.h>
-#include <linux/elfcore.h>
-#include <linux/mca.h>
-#include <linux/sched.h>
-#include <linux/in6.h>
-#include <linux/interrupt.h>
-#include <linux/smp_lock.h>
-#include <linux/pm.h>
-#include <linux/pci.h>
-#include <linux/apm_bios.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/tty.h>
-
-#include <asm/semaphore.h>
-#include <asm/processor.h>
-#include <asm/i387.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/mmx.h>
-#include <asm/desc.h>
-#include <asm/pgtable.h>
-#include <asm/pgalloc.h>
-
-extern void dump_thread(struct pt_regs *, struct user *);
-extern spinlock_t rtc_lock;
-
-#if defined(CONFIG_APMXXX) || defined(CONFIG_APM_MODULEXXX)
-extern void machine_real_restart(unsigned char *, int);
-EXPORT_SYMBOL(machine_real_restart);
-extern void default_idle(void);
-EXPORT_SYMBOL(default_idle);
-#endif
-
-#ifdef CONFIG_SMP
-extern void FASTCALL( __write_lock_failed(rwlock_t *rw));
-extern void FASTCALL( __read_lock_failed(rwlock_t *rw));
-#endif
-
-#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
-extern struct drive_info_struct drive_info;
-EXPORT_SYMBOL(drive_info);
-#endif
-
-// XXX extern unsigned long get_cmos_time(void);
-
-/* platform dependent support */
-EXPORT_SYMBOL(boot_cpu_data);
-EXPORT_SYMBOL(dump_thread);
-EXPORT_SYMBOL(dump_fpu);
-EXPORT_SYMBOL(dump_extended_fpu);
-EXPORT_SYMBOL(__ioremap);
-EXPORT_SYMBOL(iounmap);
-EXPORT_SYMBOL(enable_irq);
-EXPORT_SYMBOL(disable_irq);
-EXPORT_SYMBOL(disable_irq_nosync);
-EXPORT_SYMBOL(probe_irq_mask);
-EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(pm_idle);
-EXPORT_SYMBOL(pm_power_off);
-EXPORT_SYMBOL(apm_info);
-//EXPORT_SYMBOL(gdt);
-EXPORT_SYMBOL(empty_zero_page);
-EXPORT_SYMBOL(phys_to_machine_mapping);
-
-
-#ifdef CONFIG_DEBUG_IOVIRT
-EXPORT_SYMBOL(__io_virt_debug);
-#endif
-
-EXPORT_SYMBOL_NOVERS(__down_failed);
-EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
-EXPORT_SYMBOL_NOVERS(__down_failed_trylock);
-EXPORT_SYMBOL_NOVERS(__up_wakeup);
-/* Networking helper routines. */
-EXPORT_SYMBOL(csum_partial_copy_generic);
-/* Delay loops */
-EXPORT_SYMBOL(__ndelay);
-EXPORT_SYMBOL(__udelay);
-EXPORT_SYMBOL(__delay);
-EXPORT_SYMBOL(__const_udelay);
-
-EXPORT_SYMBOL_NOVERS(__get_user_1);
-EXPORT_SYMBOL_NOVERS(__get_user_2);
-EXPORT_SYMBOL_NOVERS(__get_user_4);
-
-EXPORT_SYMBOL(strtok);
-EXPORT_SYMBOL(strpbrk);
-EXPORT_SYMBOL(strstr);
-
-EXPORT_SYMBOL(strncpy_from_user);
-EXPORT_SYMBOL(__strncpy_from_user);
-EXPORT_SYMBOL(clear_user);
-EXPORT_SYMBOL(__clear_user);
-EXPORT_SYMBOL(__generic_copy_from_user);
-EXPORT_SYMBOL(__generic_copy_to_user);
-EXPORT_SYMBOL(strnlen_user);
-
-
-EXPORT_SYMBOL(pci_alloc_consistent);
-EXPORT_SYMBOL(pci_free_consistent);
-
-#ifdef CONFIG_PCI
-EXPORT_SYMBOL(pcibios_penalize_isa_irq);
-EXPORT_SYMBOL(pci_mem_start);
-#endif
-
-
-#ifdef CONFIG_X86_USE_3DNOW
-EXPORT_SYMBOL(_mmx_memcpy);
-EXPORT_SYMBOL(mmx_clear_page);
-EXPORT_SYMBOL(mmx_copy_page);
-#endif
-
-#ifdef CONFIG_SMP
-EXPORT_SYMBOL(cpu_data);
-EXPORT_SYMBOL(kernel_flag_cacheline);
-EXPORT_SYMBOL(smp_num_cpus);
-EXPORT_SYMBOL(cpu_online_map);
-EXPORT_SYMBOL_NOVERS(__write_lock_failed);
-EXPORT_SYMBOL_NOVERS(__read_lock_failed);
-
-/* Global SMP irq stuff */
-EXPORT_SYMBOL(synchronize_irq);
-EXPORT_SYMBOL(global_irq_holder);
-EXPORT_SYMBOL(__global_cli);
-EXPORT_SYMBOL(__global_sti);
-EXPORT_SYMBOL(__global_save_flags);
-EXPORT_SYMBOL(__global_restore_flags);
-EXPORT_SYMBOL(smp_call_function);
-
-/* TLB flushing */
-EXPORT_SYMBOL(flush_tlb_page);
-#endif
-
-#ifdef CONFIG_X86_IO_APIC
-EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
-#endif
-
-#ifdef CONFIG_VT
-EXPORT_SYMBOL(screen_info);
-#endif
-
-EXPORT_SYMBOL(get_wchan);
-
-EXPORT_SYMBOL(rtc_lock);
-
-#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);
-
-#ifdef CONFIG_HAVE_DEC_LOCK
-EXPORT_SYMBOL(atomic_dec_and_lock);
-#endif
-
-#ifdef CONFIG_MULTIQUAD
-EXPORT_SYMBOL(xquad_portio);
-#endif
-
-#include <asm/xen_proc.h>
-EXPORT_SYMBOL(create_xen_proc_entry);
-EXPORT_SYMBOL(remove_xen_proc_entry);
-
-EXPORT_SYMBOL(evtchn_do_upcall);
-EXPORT_SYMBOL(HYPERVISOR_shared_info);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/ioport.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/ioport.c
deleted file mode 100644
index fc0164045f..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/ioport.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/types.h>
-#include <linux/stddef.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-
-
-asmlinkage int sys_iopl(unsigned int new_io_pl)
-{
- unsigned int old_io_pl = current->thread.io_pl;
- dom0_op_t op;
-
- if ( !(start_info.flags & SIF_PRIVILEGED) )
- return -EPERM;
-
- if ( new_io_pl > 3 )
- return -EINVAL;
-
- /* Need "raw I/O" privileges for direct port access. */
- if ( (new_io_pl > old_io_pl) && !capable(CAP_SYS_RAWIO) )
- return -EPERM;
-
- /* Maintain OS privileges even if user attempts to relinquish them. */
- if ( (new_io_pl == 0) && (start_info.flags & SIF_PRIVILEGED) )
- new_io_pl = 1;
-
- /* Change our version of the privilege levels. */
- current->thread.io_pl = new_io_pl;
-
- /* Force the change at ring 0. */
- op.cmd = DOM0_IOPL;
- op.u.iopl.domain = DOMID_SELF;
- op.u.iopl.iopl = new_io_pl;
- HYPERVISOR_dom0_op(&op);
-
- return 0;
-}
-
-
-asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int turn_on)
-{
- printk(KERN_INFO "ioperm not fully supported - %s\n",
- turn_on ? "set iopl to 3" : "ignore resource release");
- return turn_on ? sys_iopl(3) : 0;
-}
-
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/irq.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/irq.c
deleted file mode 100644
index 07dad7e8ca..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/irq.c
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
- * linux/arch/i386/kernel/irq.c
- *
- * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
- *
- * This file contains the code used by various IRQ handling routines:
- * asking for different IRQ's should be done through these routines
- * instead of just grabbing them. Thus setups with different IRQ numbers
- * shouldn't result in any weird surprises, and installing new handlers
- * should be easier.
- */
-
-/*
- * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
- *
- * IRQs are in fact implemented a bit like signal handlers for the kernel.
- * Naturally it's not a 1:1 relation, but there are similarities.
- */
-
-#include <linux/config.h>
-#include <linux/ptrace.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/ioport.h>
-#include <linux/interrupt.h>
-#include <linux/timex.h>
-#include <linux/slab.h>
-#include <linux/random.h>
-#include <linux/smp_lock.h>
-#include <linux/init.h>
-#include <linux/kernel_stat.h>
-#include <linux/irq.h>
-#include <linux/proc_fs.h>
-#include <linux/seq_file.h>
-
-#include <asm/atomic.h>
-#include <asm/io.h>
-#include <asm/smp.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/delay.h>
-#include <asm/desc.h>
-#include <asm/irq.h>
-
-
-
-/*
- * Linux has a controller-independent x86 interrupt architecture.
- * every controller has a 'controller-template', that is used
- * by the main code to do the right thing. Each driver-visible
- * interrupt source is transparently wired to the apropriate
- * controller. Thus drivers need not be aware of the
- * interrupt-controller.
- *
- * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
- * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
- * (IO-APICs assumed to be messaging to Pentium local-APICs)
- *
- * the code is designed to be easily extended with new/different
- * interrupt controllers, without having to do assembly magic.
- */
-
-/*
- * Controller mappings for all interrupt sources:
- */
-irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
- { [0 ... NR_IRQS-1] = { 0, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
-
-static void register_irq_proc (unsigned int irq);
-
-/*
- * Special irq handlers.
- */
-
-void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
-
-/*
- * Generic no controller code
- */
-
-static void enable_none(unsigned int irq) { }
-static unsigned int startup_none(unsigned int irq) { return 0; }
-static void disable_none(unsigned int irq) { }
-static void ack_none(unsigned int irq)
-{
-/*
- * 'what should we do if we get a hw irq event on an illegal vector'.
- * each architecture has to answer this themselves, it doesnt deserve
- * a generic callback i think.
- */
-#if CONFIG_X86
- printk("unexpected IRQ trap at vector %02x\n", irq);
-#ifdef CONFIG_X86_LOCAL_APIC
- /*
- * Currently unexpected vectors happen only on SMP and APIC.
- * We _must_ ack these because every local APIC has only N
- * irq slots per priority level, and a 'hanging, unacked' IRQ
- * holds up an irq slot - in excessive cases (when multiple
- * unexpected vectors occur) that might lock up the APIC
- * completely.
- */
- ack_APIC_irq();
-#endif
-#endif
-}
-
-/* startup is the same as "enable", shutdown is same as "disable" */
-#define shutdown_none disable_none
-#define end_none enable_none
-
-struct hw_interrupt_type no_irq_type = {
- "none",
- startup_none,
- shutdown_none,
- enable_none,
- disable_none,
- ack_none,
- end_none
-};
-
-atomic_t irq_err_count;
-#ifdef CONFIG_X86_IO_APIC
-#ifdef APIC_MISMATCH_DEBUG
-atomic_t irq_mis_count;
-#endif
-#endif
-
-/*
- * Generic, controller-independent functions:
- */
-
-int show_interrupts(struct seq_file *p, void *v)
-{
- int i, j;
- struct irqaction * action;
-
- seq_printf(p, " ");
- for (j=0; j<smp_num_cpus; j++)
- seq_printf(p, "CPU%d ",j);
- seq_putc(p,'\n');
-
- for (i = 0 ; i < NR_IRQS ; i++) {
- action = irq_desc[i].action;
- if (!action)
- continue;
- seq_printf(p, "%3d: ",i);
-#ifndef CONFIG_SMP
- seq_printf(p, "%10u ", kstat_irqs(i));
-#else
- for (j = 0; j < smp_num_cpus; j++)
- seq_printf(p, "%10u ",
- kstat.irqs[cpu_logical_map(j)][i]);
-#endif
- seq_printf(p, " %14s", irq_desc[i].handler->typename);
- seq_printf(p, " %s", action->name);
-
- for (action=action->next; action; action = action->next)
- seq_printf(p, ", %s", action->name);
- seq_putc(p,'\n');
- }
- seq_printf(p, "NMI: ");
- for (j = 0; j < smp_num_cpus; j++)
- seq_printf(p, "%10u ",
- nmi_count(cpu_logical_map(j)));
- seq_printf(p, "\n");
-#if CONFIG_X86_LOCAL_APIC
- seq_printf(p, "LOC: ");
- for (j = 0; j < smp_num_cpus; j++)
- seq_printf(p, "%10u ",
- apic_timer_irqs[cpu_logical_map(j)]);
- seq_printf(p, "\n");
-#endif
- seq_printf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
-#ifdef CONFIG_X86_IO_APIC
-#ifdef APIC_MISMATCH_DEBUG
- seq_printf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
-#endif
-#endif
-
- return 0;
-}
-
-
-/*
- * Global interrupt locks for SMP. Allow interrupts to come in on any
- * CPU, yet make cli/sti act globally to protect critical regions..
- */
-
-#ifdef CONFIG_SMP
-unsigned char global_irq_holder = NO_PROC_ID;
-unsigned volatile long global_irq_lock; /* pendantic: long for set_bit --RR */
-
-extern void show_stack(unsigned long* esp);
-
-static void show(char * str)
-{
- int i;
- int cpu = smp_processor_id();
-
- printk("\n%s, CPU %d:\n", str, cpu);
- printk("irq: %d [",irqs_running());
- for(i=0;i < smp_num_cpus;i++)
- printk(" %d",local_irq_count(i));
- printk(" ]\nbh: %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
- for(i=0;i < smp_num_cpus;i++)
- printk(" %d",local_bh_count(i));
-
- printk(" ]\nStack dumps:");
- for(i = 0; i < smp_num_cpus; i++) {
- unsigned long esp;
- if (i == cpu)
- continue;
- printk("\nCPU %d:",i);
- esp = init_tss[i].esp0;
- if (!esp) {
- /* tss->esp0 is set to NULL in cpu_init(),
- * it's initialized when the cpu returns to user
- * space. -- manfreds
- */
- printk(" <unknown> ");
- continue;
- }
- esp &= ~(THREAD_SIZE-1);
- esp += sizeof(struct task_struct);
- show_stack((void*)esp);
- }
- printk("\nCPU %d:",cpu);
- show_stack(NULL);
- printk("\n");
-}
-
-#define MAXCOUNT 100000000
-
-/*
- * I had a lockup scenario where a tight loop doing
- * spin_unlock()/spin_lock() on CPU#1 was racing with
- * spin_lock() on CPU#0. CPU#0 should have noticed spin_unlock(), but
- * apparently the spin_unlock() information did not make it
- * through to CPU#0 ... nasty, is this by design, do we have to limit
- * 'memory update oscillation frequency' artificially like here?
- *
- * Such 'high frequency update' races can be avoided by careful design, but
- * some of our major constructs like spinlocks use similar techniques,
- * it would be nice to clarify this issue. Set this define to 0 if you
- * want to check whether your system freezes. I suspect the delay done
- * by SYNC_OTHER_CORES() is in correlation with 'snooping latency', but
- * i thought that such things are guaranteed by design, since we use
- * the 'LOCK' prefix.
- */
-#define SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND 0
-
-#if SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND
-# define SYNC_OTHER_CORES(x) udelay(x+1)
-#else
-/*
- * We have to allow irqs to arrive between __sti and __cli
- */
-# define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop")
-#endif
-
-static inline void wait_on_irq(int cpu)
-{
- int count = MAXCOUNT;
-
- for (;;) {
-
- /*
- * Wait until all interrupts are gone. Wait
- * for bottom half handlers unless we're
- * already executing in one..
- */
- if (!irqs_running())
- if (local_bh_count(cpu) || !spin_is_locked(&global_bh_lock))
- break;
-
- /* Duh, we have to loop. Release the lock to avoid deadlocks */
- clear_bit(0,&global_irq_lock);
-
- for (;;) {
- if (!--count) {
- show("wait_on_irq");
- count = ~0;
- }
- __sti();
- SYNC_OTHER_CORES(cpu);
- __cli();
- if (irqs_running())
- continue;
- if (global_irq_lock)
- continue;
- if (!local_bh_count(cpu) && spin_is_locked(&global_bh_lock))
- continue;
- if (!test_and_set_bit(0,&global_irq_lock))
- break;
- }
- }
-}
-
-/*
- * This is called when we want to synchronize with
- * interrupts. We may for example tell a device to
- * stop sending interrupts: but to make sure there
- * are no interrupts that are executing on another
- * CPU we need to call this function.
- */
-void synchronize_irq(void)
-{
- if (irqs_running()) {
- /* Stupid approach */
- cli();
- sti();
- }
-}
-
-static inline void get_irqlock(int cpu)
-{
- if (test_and_set_bit(0,&global_irq_lock)) {
- /* do we already hold the lock? */
- if ((unsigned char) cpu == global_irq_holder)
- return;
- /* Uhhuh.. Somebody else got it. Wait.. */
- do {
- do {
- rep_nop();
- } while (test_bit(0,&global_irq_lock));
- } while (test_and_set_bit(0,&global_irq_lock));
- }
- /*
- * We also to make sure that nobody else is running
- * in an interrupt context.
- */
- wait_on_irq(cpu);
-
- /*
- * Ok, finally..
- */
- global_irq_holder = cpu;
-}
-
-/*
- * A global "cli()" while in an interrupt context
- * turns into just a local cli(). Interrupts
- * should use spinlocks for the (very unlikely)
- * case that they ever want to protect against
- * each other.
- *
- * If we already have local interrupts disabled,
- * this will not turn a local disable into a
- * global one (problems with spinlocks: this makes
- * save_flags+cli+sti usable inside a spinlock).
- */
-void __global_cli(void)
-{
- unsigned int flags;
-
- __save_flags(flags);
- if (!flags) {
- int cpu = smp_processor_id();
- __cli();
- if (!local_irq_count(cpu))
- get_irqlock(cpu);
- }
-}
-
-void __global_sti(void)
-{
- int cpu = smp_processor_id();
-
- if (!local_irq_count(cpu))
- release_irqlock(cpu);
- __sti();
-}
-
-/*
- * SMP flags value to restore to:
- * 0 - global cli
- * 1 - global sti
- * 2 - local cli
- * 3 - local sti
- */
-unsigned long __global_save_flags(void)
-{
- int retval;
- int local_enabled;
- unsigned long flags;
- int cpu = smp_processor_id();
-
- __save_flags(flags);
- local_enabled = !flags;
- /* default to local */
- retval = 2 + local_enabled;
-
- /* check for global flags if we're not in an interrupt */
- if (!local_irq_count(cpu)) {
- if (local_enabled)
- retval = 1;
- if (global_irq_holder == cpu)
- retval = 0;
- }
- return retval;
-}
-
-void __global_restore_flags(unsigned long flags)
-{
- switch (flags) {
- case 0:
- __global_cli();
- break;
- case 1:
- __global_sti();
- break;
- case 2:
- __cli();
- break;
- case 3:
- __sti();
- break;
- default:
- printk("global_restore_flags: %08lx (%08lx)\n",
- flags, (&flags)[-1]);
- }
-}
-
-#endif
-
-/*
- * This should really return information about whether
- * we should do bottom half handling etc. Right now we
- * end up _always_ checking the bottom half, which is a
- * waste of time and is not what some drivers would
- * prefer.
- */
-int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
-{
- int status;
- int cpu = smp_processor_id();
-
- irq_enter(cpu, irq);
-
- status = 1; /* Force the "do bottom halves" bit */
-
- if (!(action->flags & SA_INTERRUPT))
- __sti();
-
- do {
- status |= action->flags;
- action->handler(irq, action->dev_id, regs);
- action = action->next;
- } while (action);
- if (status & SA_SAMPLE_RANDOM)
- add_interrupt_randomness(irq);
- __cli();
-
- irq_exit(cpu, irq);
-
- return status;
-}
-
-/*
- * Generic enable/disable code: this just calls
- * down into the PIC-specific version for the actual
- * hardware disable after having gotten the irq
- * controller lock.
- */
-
-/**
- * disable_irq_nosync - disable an irq without waiting
- * @irq: Interrupt to disable
- *
- * Disable the selected interrupt line. Disables and Enables are
- * nested.
- * Unlike disable_irq(), this function does not ensure existing
- * instances of the IRQ handler have completed before returning.
- *
- * This function may be called from IRQ context.
- */
-
-inline void disable_irq_nosync(unsigned int irq)
-{
- irq_desc_t *desc = irq_desc + irq;
- unsigned long flags;
-
- spin_lock_irqsave(&desc->lock, flags);
- if (!desc->depth++) {
- desc->status |= IRQ_DISABLED;
- desc->handler->disable(irq);
- }
- spin_unlock_irqrestore(&desc->lock, flags);
-}
-
-/**
- * disable_irq - disable an irq and wait for completion
- * @irq: Interrupt to disable
- *
- * Disable the selected interrupt line. Enables and Disables are
- * nested.
- * This function waits for any pending IRQ handlers for this interrupt
- * to complete before returning. If you use this function while
- * holding a resource the IRQ handler may need you will deadlock.
- *
- * This function may be called - with care - from IRQ context.
- */
-
-void disable_irq(unsigned int irq)
-{
- disable_irq_nosync(irq);
-
- if (!local_irq_count(smp_processor_id())) {
- do {
- barrier();
- cpu_relax();
- } while (irq_desc[irq].status & IRQ_INPROGRESS);
- }
-}
-
-/**
- * enable_irq - enable handling of an irq
- * @irq: Interrupt to enable
- *
- * Undoes the effect of one call to disable_irq(). If this
- * matches the last disable, processing of interrupts on this
- * IRQ line is re-enabled.
- *
- * This function may be called from IRQ context.
- */
-
-void enable_irq(unsigned int irq)
-{
- irq_desc_t *desc = irq_desc + irq;
- unsigned long flags;
-
- spin_lock_irqsave(&desc->lock, flags);
- switch (desc->depth) {
- case 1: {
- unsigned int status = desc->status & ~IRQ_DISABLED;
- desc->status = status;
- if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
- desc->status = status | IRQ_REPLAY;
- hw_resend_irq(desc->handler,irq);
- }
- desc->handler->enable(irq);
- /* fall-through */
- }
- default:
- desc->depth--;
- break;
- case 0:
- printk("enable_irq(%u) unbalanced from %p\n", irq,
- __builtin_return_address(0));
- }
- spin_unlock_irqrestore(&desc->lock, flags);
-}
-
-/*
- * do_IRQ handles all normal device IRQ's (the special
- * SMP cross-CPU interrupts have their own specific
- * handlers).
- */
-asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs)
-{
- /*
- * We ack quickly, we don't want the irq controller
- * thinking we're snobs just because some other CPU has
- * disabled global interrupts (we have already done the
- * INT_ACK cycles, it's too late to try to pretend to the
- * controller that we aren't taking the interrupt).
- *
- * 0 return value means that this irq is already being
- * handled by some other CPU. (or is disabled)
- */
- int cpu = smp_processor_id();
- irq_desc_t *desc = irq_desc + irq;
- struct irqaction * action;
- unsigned int status;
-#ifdef CONFIG_DEBUG_STACKOVERFLOW
- long esp;
-
- /* Debugging check for stack overflow: is there less than 1KB free? */
- __asm__ __volatile__("andl %%esp,%0" : "=r" (esp) : "0" (8191));
- if (unlikely(esp < (sizeof(struct task_struct) + 1024))) {
- extern void show_stack(unsigned long *);
-
- printk("do_IRQ: stack overflow: %ld\n",
- esp - sizeof(struct task_struct));
- __asm__ __volatile__("movl %%esp,%0" : "=r" (esp));
- show_stack((void *)esp);
- }
-#endif
-
- kstat.irqs[cpu][irq]++;
- spin_lock(&desc->lock);
- desc->handler->ack(irq);
- /*
- REPLAY is when Linux resends an IRQ that was dropped earlier
- WAITING is used by probe to mark irqs that are being tested
- */
- status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
- status |= IRQ_PENDING; /* we _want_ to handle it */
-
- /*
- * If the IRQ is disabled for whatever reason, we cannot
- * use the action we have.
- */
- action = NULL;
- if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
- action = desc->action;
- status &= ~IRQ_PENDING; /* we commit to handling */
- status |= IRQ_INPROGRESS; /* we are handling it */
- }
- desc->status = status;
-
- /*
- * If there is no IRQ handler or it was disabled, exit early.
- Since we set PENDING, if another processor is handling
- a different instance of this same irq, the other processor
- will take care of it.
- */
- if (!action)
- goto out;
-
- /*
- * Edge triggered interrupts need to remember
- * pending events.
- * This applies to any hw interrupts that allow a second
- * instance of the same irq to arrive while we are in do_IRQ
- * or in the handler. But the code here only handles the _second_
- * instance of the irq, not the third or fourth. So it is mostly
- * useful for irq hardware that does not mask cleanly in an
- * SMP environment.
- */
- for (;;) {
- spin_unlock(&desc->lock);
- handle_IRQ_event(irq, regs, action);
- spin_lock(&desc->lock);
-
- if (!(desc->status & IRQ_PENDING))
- break;
- desc->status &= ~IRQ_PENDING;
- }
- desc->status &= ~IRQ_INPROGRESS;
-out:
- /*
- * The ->end() handler has to deal with interrupts which got
- * disabled while the handler was running.
- */
- desc->handler->end(irq);
- spin_unlock(&desc->lock);
-
- if (softirq_pending(cpu))
- do_softirq();
- return 1;
-}
-
-/**
- * request_irq - allocate an interrupt line
- * @irq: Interrupt line to allocate
- * @handler: Function to be called when the IRQ occurs
- * @irqflags: Interrupt type flags
- * @devname: An ascii name for the claiming device
- * @dev_id: A cookie passed back to the handler function
- *
- * This call allocates interrupt resources and enables the
- * interrupt line and IRQ handling. From the point this
- * call is made your handler function may be invoked. Since
- * your handler function must clear any interrupt the board
- * raises, you must take care both to initialise your hardware
- * and to set up the interrupt handler in the right order.
- *
- * Dev_id must be globally unique. Normally the address of the
- * device data structure is used as the cookie. Since the handler
- * receives this value it makes sense to use it.
- *
- * If your interrupt is shared you must pass a non NULL dev_id
- * as this is required when freeing the interrupt.
- *
- * Flags:
- *
- * SA_SHIRQ Interrupt is shared
- *
- * SA_INTERRUPT Disable local interrupts while processing
- *
- * SA_SAMPLE_RANDOM The interrupt can be used for entropy
- *
- */
-
-int request_irq(unsigned int irq,
- void (*handler)(int, void *, struct pt_regs *),
- unsigned long irqflags,
- const char * devname,
- void *dev_id)
-{
- int retval;
- struct irqaction * action;
-
-#if 1
- /*
- * Sanity-check: shared interrupts should REALLY pass in
- * a real dev-ID, otherwise we'll have trouble later trying
- * to figure out which interrupt is which (messes up the
- * interrupt freeing logic etc).
- */
- if (irqflags & SA_SHIRQ) {
- if (!dev_id)
- printk("Bad boy: %s (at 0x%x) called us without a dev_id!\n", devname, (&irq)[-1]);
- }
-#endif
-
- if (irq >= NR_IRQS)
- return -EINVAL;
- if (!handler)
- return -EINVAL;
-
- action = (struct irqaction *)
- kmalloc(sizeof(struct irqaction), GFP_KERNEL);
- if (!action)
- return -ENOMEM;
-
- action->handler = handler;
- action->flags = irqflags;
- action->mask = 0;
- action->name = devname;
- action->next = NULL;
- action->dev_id = dev_id;
-
- retval = setup_irq(irq, action);
- if (retval)
- kfree(action);
- return retval;
-}
-
-/**
- * free_irq - free an interrupt
- * @irq: Interrupt line to free
- * @dev_id: Device identity to free
- *
- * Remove an interrupt handler. The handler is removed and if the
- * interrupt line is no longer in use by any driver it is disabled.
- * On a shared IRQ the caller must ensure the interrupt is disabled
- * on the card it drives before calling this function. The function
- * does not return until any executing interrupts for this IRQ
- * have completed.
- *
- * This function may be called from interrupt context.
- *
- * Bugs: Attempting to free an irq in a handler for the same irq hangs
- * the machine.
- */
-
-void free_irq(unsigned int irq, void *dev_id)
-{
- irq_desc_t *desc;
- struct irqaction **p;
- unsigned long flags;
-
- if (irq >= NR_IRQS)
- return;
-
- desc = irq_desc + irq;
- spin_lock_irqsave(&desc->lock,flags);
- p = &desc->action;
- for (;;) {
- struct irqaction * action = *p;
- if (action) {
- struct irqaction **pp = p;
- p = &action->next;
- if (action->dev_id != dev_id)
- continue;
-
- /* Found it - now remove it from the list of entries */
- *pp = action->next;
- if (!desc->action) {
- desc->status |= IRQ_DISABLED;
- desc->handler->shutdown(irq);
- }
- spin_unlock_irqrestore(&desc->lock,flags);
-
-#ifdef CONFIG_SMP
- /* Wait to make sure it's not being used on another CPU */
- while (desc->status & IRQ_INPROGRESS) {
- barrier();
- cpu_relax();
- }
-#endif
- kfree(action);
- return;
- }
- printk("Trying to free free IRQ%d\n",irq);
- spin_unlock_irqrestore(&desc->lock,flags);
- return;
- }
-}
-
-/*
- * IRQ autodetection code..
- *
- * This depends on the fact that any interrupt that
- * comes in on to an unassigned handler will get stuck
- * with "IRQ_WAITING" cleared and the interrupt
- * disabled.
- */
-
-static DECLARE_MUTEX(probe_sem);
-
-/**
- * probe_irq_on - begin an interrupt autodetect
- *
- * Commence probing for an interrupt. The interrupts are scanned
- * and a mask of potential interrupt lines is returned.
- *
- */
-
-unsigned long probe_irq_on(void)
-{
- unsigned int i;
- irq_desc_t *desc;
- unsigned long val;
- unsigned long delay;
-
- down(&probe_sem);
- /*
- * something may have generated an irq long ago and we want to
- * flush such a longstanding irq before considering it as spurious.
- */
- for (i = NR_PIRQS-1; i > 0; i--) {
- desc = irq_desc + i;
-
- spin_lock_irq(&desc->lock);
- if (!irq_desc[i].action)
- irq_desc[i].handler->startup(i);
- spin_unlock_irq(&desc->lock);
- }
-
- /* Wait for longstanding interrupts to trigger. */
- for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
- /* about 20ms delay */ synchronize_irq();
-
- /*
- * enable any unassigned irqs
- * (we must startup again here because if a longstanding irq
- * happened in the previous stage, it may have masked itself)
- */
- for (i = NR_PIRQS-1; i > 0; i--) {
- desc = irq_desc + i;
-
- spin_lock_irq(&desc->lock);
- if (!desc->action) {
- desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
- if (desc->handler->startup(i))
- desc->status |= IRQ_PENDING;
- }
- spin_unlock_irq(&desc->lock);
- }
-
- /*
- * Wait for spurious interrupts to trigger
- */
- for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
- /* about 100ms delay */ synchronize_irq();
-
- /*
- * Now filter out any obviously spurious interrupts
- */
- val = 0;
- for (i = 0; i < NR_PIRQS; i++) {
- irq_desc_t *desc = irq_desc + i;
- unsigned int status;
-
- spin_lock_irq(&desc->lock);
- status = desc->status;
-
- if (status & IRQ_AUTODETECT) {
- /* It triggered already - consider it spurious. */
- if (!(status & IRQ_WAITING)) {
- desc->status = status & ~IRQ_AUTODETECT;
- desc->handler->shutdown(i);
- } else
- if (i < 32)
- val |= 1 << i;
- }
- spin_unlock_irq(&desc->lock);
- }
-
- return val;
-}
-
-/*
- * Return a mask of triggered interrupts (this
- * can handle only legacy ISA interrupts).
- */
-
-/**
- * probe_irq_mask - scan a bitmap of interrupt lines
- * @val: mask of interrupts to consider
- *
- * Scan the ISA bus interrupt lines and return a bitmap of
- * active interrupts. The interrupt probe logic state is then
- * returned to its previous value.
- *
- * Note: we need to scan all the irq's even though we will
- * only return ISA irq numbers - just so that we reset them
- * all to a known state.
- */
-unsigned int probe_irq_mask(unsigned long val)
-{
- int i;
- unsigned int mask;
-
- mask = 0;
- for (i = 0; i < NR_PIRQS; i++) {
- irq_desc_t *desc = irq_desc + i;
- unsigned int status;
-
- spin_lock_irq(&desc->lock);
- status = desc->status;
-
- if (status & IRQ_AUTODETECT) {
- if (i < 16 && !(status & IRQ_WAITING))
- mask |= 1 << i;
-
- desc->status = status & ~IRQ_AUTODETECT;
- desc->handler->shutdown(i);
- }
- spin_unlock_irq(&desc->lock);
- }
- up(&probe_sem);
-
- return mask & val;
-}
-
-/*
- * Return the one interrupt that triggered (this can
- * handle any interrupt source).
- */
-
-/**
- * probe_irq_off - end an interrupt autodetect
- * @val: mask of potential interrupts (unused)
- *
- * Scans the unused interrupt lines and returns the line which
- * appears to have triggered the interrupt. If no interrupt was
- * found then zero is returned. If more than one interrupt is
- * found then minus the first candidate is returned to indicate
- * their is doubt.
- *
- * The interrupt probe logic state is returned to its previous
- * value.
- *
- * BUGS: When used in a module (which arguably shouldnt happen)
- * nothing prevents two IRQ probe callers from overlapping. The
- * results of this are non-optimal.
- */
-
-int probe_irq_off(unsigned long val)
-{
- int i, irq_found, nr_irqs;
-
- nr_irqs = 0;
- irq_found = 0;
- for (i = 0; i < NR_PIRQS; i++) {
- irq_desc_t *desc = irq_desc + i;
- unsigned int status;
-
- spin_lock_irq(&desc->lock);
- status = desc->status;
-
- if (status & IRQ_AUTODETECT) {
- if (!(status & IRQ_WAITING)) {
- if (!nr_irqs)
- irq_found = i;
- nr_irqs++;
- }
- desc->status = status & ~IRQ_AUTODETECT;
- desc->handler->shutdown(i);
- }
- spin_unlock_irq(&desc->lock);
- }
- up(&probe_sem);
-
- if (nr_irqs > 1)
- irq_found = -irq_found;
- return irq_found;
-}
-
-/* this was setup_x86_irq but it seems pretty generic */
-int setup_irq(unsigned int irq, struct irqaction * new)
-{
- int shared = 0;
- unsigned long flags;
- struct irqaction *old, **p;
- irq_desc_t *desc = irq_desc + irq;
-
- /*
- * Some drivers like serial.c use request_irq() heavily,
- * so we have to be careful not to interfere with a
- * running system.
- */
- if (new->flags & SA_SAMPLE_RANDOM) {
- /*
- * This function might sleep, we want to call it first,
- * outside of the atomic block.
- * Yes, this might clear the entropy pool if the wrong
- * driver is attempted to be loaded, without actually
- * installing a new handler, but is this really a problem,
- * only the sysadmin is able to do this.
- */
- rand_initialize_irq(irq);
- }
-
- /*
- * The following block of code has to be executed atomically
- */
- spin_lock_irqsave(&desc->lock,flags);
- p = &desc->action;
- if ((old = *p) != NULL) {
- /* Can't share interrupts unless both agree to */
- if (!(old->flags & new->flags & SA_SHIRQ)) {
- spin_unlock_irqrestore(&desc->lock,flags);
- return -EBUSY;
- }
-
- /* add new interrupt at end of irq queue */
- do {
- p = &old->next;
- old = *p;
- } while (old);
- shared = 1;
- }
-
- *p = new;
-
- if (!shared) {
- desc->depth = 0;
- desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
- desc->handler->startup(irq);
- }
- spin_unlock_irqrestore(&desc->lock,flags);
-
- register_irq_proc(irq);
- return 0;
-}
-
-static struct proc_dir_entry * root_irq_dir;
-static struct proc_dir_entry * irq_dir [NR_IRQS];
-
-#define HEX_DIGITS 8
-
-static unsigned int parse_hex_value (const char *buffer,
- unsigned long count, unsigned long *ret)
-{
- unsigned char hexnum [HEX_DIGITS];
- unsigned long value;
- int i;
-
- if (!count)
- return -EINVAL;
- if (count > HEX_DIGITS)
- count = HEX_DIGITS;
- if (copy_from_user(hexnum, buffer, count))
- return -EFAULT;
-
- /*
- * Parse the first 8 characters as a hex string, any non-hex char
- * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
- */
- value = 0;
-
- for (i = 0; i < count; i++) {
- unsigned int c = hexnum[i];
-
- switch (c) {
- case '0' ... '9': c -= '0'; break;
- case 'a' ... 'f': c -= 'a'-10; break;
- case 'A' ... 'F': c -= 'A'-10; break;
- default:
- goto out;
- }
- value = (value << 4) | c;
- }
-out:
- *ret = value;
- return 0;
-}
-
-#if CONFIG_SMP
-
-static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
-static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- if (count < HEX_DIGITS+1)
- return -EINVAL;
- return sprintf (page, "%08lx\n", irq_affinity[(long)data]);
-}
-
-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;
- unsigned long new_value;
-
- if (!irq_desc[irq].handler->set_affinity)
- return -EIO;
-
- err = parse_hex_value(buffer, count, &new_value);
-
- /*
- * Do not allow disabling IRQs completely - it's a too easy
- * way to make the system unusable accidentally :-) At least
- * one online CPU still has to be targeted.
- */
- if (!(new_value & cpu_online_map))
- return -EINVAL;
-
- irq_affinity[irq] = new_value;
- irq_desc[irq].handler->set_affinity(irq, new_value);
-
- return full_count;
-}
-
-#endif
-
-static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
-{
- unsigned long *mask = (unsigned long *) data;
- if (count < HEX_DIGITS+1)
- return -EINVAL;
- return sprintf (page, "%08lx\n", *mask);
-}
-
-static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
- unsigned long count, void *data)
-{
- unsigned long *mask = (unsigned long *) data, full_count = count, err;
- unsigned long new_value;
-
- err = parse_hex_value(buffer, count, &new_value);
- if (err)
- return err;
-
- *mask = new_value;
- return full_count;
-}
-
-#define MAX_NAMELEN 10
-
-static void register_irq_proc (unsigned int irq)
-{
- char name [MAX_NAMELEN];
-
- if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
- irq_dir[irq])
- return;
-
- memset(name, 0, MAX_NAMELEN);
- sprintf(name, "%d", irq);
-
- /* create /proc/irq/1234 */
- irq_dir[irq] = proc_mkdir(name, root_irq_dir);
-
-#if CONFIG_SMP
- {
- struct proc_dir_entry *entry;
-
- /* create /proc/irq/1234/smp_affinity */
- entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
-
- if (entry) {
- entry->nlink = 1;
- entry->data = (void *)(long)irq;
- entry->read_proc = irq_affinity_read_proc;
- entry->write_proc = irq_affinity_write_proc;
- }
-
- smp_affinity_entry[irq] = entry;
- }
-#endif
-}
-
-unsigned long prof_cpu_mask = -1;
-
-void init_irq_proc (void)
-{
- struct proc_dir_entry *entry;
- int i;
-
- /* create /proc/irq */
- root_irq_dir = proc_mkdir("irq", 0);
-
- /* create /proc/irq/prof_cpu_mask */
- entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
-
- if (!entry)
- return;
-
- entry->nlink = 1;
- entry->data = (void *)&prof_cpu_mask;
- entry->read_proc = prof_cpu_mask_read_proc;
- entry->write_proc = prof_cpu_mask_write_proc;
-
- /*
- * Create entries for all existing IRQs.
- */
- for (i = 0; i < NR_IRQS; i++)
- register_irq_proc(i);
-}
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/ldt.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/ldt.c
deleted file mode 100644
index 6a2bd7a0d9..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/ldt.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * linux/kernel/ldt.c
- *
- * Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
- * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
- */
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/vmalloc.h>
-#include <linux/slab.h>
-
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/ldt.h>
-#include <asm/desc.h>
-
-#ifdef CONFIG_SMP /* avoids "defined but not used" warnig */
-static void flush_ldt(void *mm)
-{
- if (current->active_mm)
- load_LDT(&current->active_mm->context);
-}
-#endif
-
-static int alloc_ldt(mm_context_t *pc, int mincount, int reload)
-{
- void *oldldt;
- void *newldt;
- int oldsize;
-
- if (mincount <= pc->size)
- return 0;
- oldsize = pc->size;
- mincount = (mincount+511)&(~511);
- if (mincount*LDT_ENTRY_SIZE > PAGE_SIZE)
- newldt = vmalloc(mincount*LDT_ENTRY_SIZE);
- else
- newldt = kmalloc(mincount*LDT_ENTRY_SIZE, GFP_KERNEL);
-
- if (!newldt)
- return -ENOMEM;
-
- if (oldsize)
- memcpy(newldt, pc->ldt, oldsize*LDT_ENTRY_SIZE);
-
- oldldt = pc->ldt;
- memset(newldt+oldsize*LDT_ENTRY_SIZE, 0, (mincount-oldsize)*LDT_ENTRY_SIZE);
- wmb();
- pc->ldt = newldt;
- pc->size = mincount;
- if (reload) {
- make_pages_readonly(
- pc->ldt,
- (pc->size*LDT_ENTRY_SIZE)/PAGE_SIZE);
- load_LDT(pc);
- flush_page_update_queue();
-#ifdef CONFIG_SMP
- if (current->mm->cpu_vm_mask != (1<<smp_processor_id()))
- smp_call_function(flush_ldt, 0, 1, 1);
-#endif
- }
- wmb();
- if (oldsize) {
- if (oldsize*LDT_ENTRY_SIZE > PAGE_SIZE)
- vfree(oldldt);
- else
- kfree(oldldt);
- }
- return 0;
-}
-
-static inline int copy_ldt(mm_context_t *new, mm_context_t *old)
-{
- int err = alloc_ldt(new, old->size, 0);
- if (err < 0) {
- printk(KERN_WARNING "ldt allocation failed\n");
- new->size = 0;
- return err;
- }
- memcpy(new->ldt, old->ldt, old->size*LDT_ENTRY_SIZE);
- make_pages_readonly(new->ldt, (new->size*LDT_ENTRY_SIZE)/PAGE_SIZE);
- return 0;
-}
-
-/*
- * we do not have to muck with descriptors here, that is
- * done in switch_mm() as needed.
- */
-int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
-{
- struct mm_struct * old_mm;
- int retval = 0;
-
- init_MUTEX(&mm->context.sem);
- mm->context.size = 0;
- old_mm = current->mm;
- if (old_mm && old_mm->context.size > 0) {
- down(&old_mm->context.sem);
- retval = copy_ldt(&mm->context, &old_mm->context);
- up(&old_mm->context.sem);
- }
- return retval;
-}
-
-/*
- * No need to lock the MM as we are the last user
- * Do not touch the ldt register, we are already
- * in the next thread.
- */
-void destroy_context(struct mm_struct *mm)
-{
- if (mm->context.size) {
- make_pages_writeable(
- mm->context.ldt,
- (mm->context.size*LDT_ENTRY_SIZE)/PAGE_SIZE);
- flush_page_update_queue();
- if (mm->context.size*LDT_ENTRY_SIZE > PAGE_SIZE)
- vfree(mm->context.ldt);
- else
- kfree(mm->context.ldt);
- mm->context.size = 0;
- }
-}
-
-static int read_ldt(void * ptr, unsigned long bytecount)
-{
- int err;
- unsigned long size;
- struct mm_struct * mm = current->mm;
-
- if (!mm->context.size)
- return 0;
- if (bytecount > LDT_ENTRY_SIZE*LDT_ENTRIES)
- bytecount = LDT_ENTRY_SIZE*LDT_ENTRIES;
-
- down(&mm->context.sem);
- size = mm->context.size*LDT_ENTRY_SIZE;
- if (size > bytecount)
- size = bytecount;
-
- err = 0;
- if (copy_to_user(ptr, mm->context.ldt, size))
- err = -EFAULT;
- up(&mm->context.sem);
- if (err < 0)
- return err;
- if (size != bytecount) {
- /* zero-fill the rest */
- clear_user(ptr+size, bytecount-size);
- }
- return bytecount;
-}
-
-
-static int read_default_ldt(void * ptr, unsigned long bytecount)
-{
- int err;
- unsigned long size;
- void *address;
-
- err = 0;
- address = &default_ldt[0];
- size = 5*sizeof(struct desc_struct);
- if (size > bytecount)
- size = bytecount;
-
- err = size;
- if (copy_to_user(ptr, address, size))
- err = -EFAULT;
-
- return err;
-}
-
-static int write_ldt(void * ptr, unsigned long bytecount, int oldmode)
-{
- struct mm_struct * mm = current->mm;
- __u32 entry_1, entry_2, *lp;
- unsigned long phys_lp, max_limit;
- int error;
- struct modify_ldt_ldt_s ldt_info;
-
- error = -EINVAL;
- if (bytecount != sizeof(ldt_info))
- goto out;
- error = -EFAULT;
- if (copy_from_user(&ldt_info, ptr, sizeof(ldt_info)))
- goto out;
-
- error = -EINVAL;
- if (ldt_info.entry_number >= LDT_ENTRIES)
- goto out;
- if (ldt_info.contents == 3) {
- if (oldmode)
- goto out;
- if (ldt_info.seg_not_present == 0)
- goto out;
- }
-
- /*
- * This makes our tests for overlap with Xen space easier. There's no good
- * reason to have a user segment starting this high anyway.
- */
- if (ldt_info.base_addr >= PAGE_OFFSET)
- goto out;
-
- down(&mm->context.sem);
- if (ldt_info.entry_number >= mm->context.size) {
- error = alloc_ldt(&current->mm->context, ldt_info.entry_number+1, 1);
- if (error < 0)
- goto out_unlock;
- }
-
-
- lp = (__u32 *)((ldt_info.entry_number<<3) + (char *)mm->context.ldt);
- phys_lp = arbitrary_virt_to_phys(lp);
-
- /* Allow LDTs to be cleared by the user. */
- if (ldt_info.base_addr == 0 && ldt_info.limit == 0) {
- if (oldmode ||
- (ldt_info.contents == 0 &&
- ldt_info.read_exec_only == 1 &&
- ldt_info.seg_32bit == 0 &&
- ldt_info.limit_in_pages == 0 &&
- ldt_info.seg_not_present == 1 &&
- ldt_info.useable == 0 )) {
- entry_1 = 0;
- entry_2 = 0;
- goto install;
- }
- }
-
- max_limit = HYPERVISOR_VIRT_START - ldt_info.base_addr;
- if ( ldt_info.limit_in_pages )
- max_limit >>= PAGE_SHIFT;
- max_limit--;
- if ( (ldt_info.limit & 0xfffff) > (max_limit & 0xfffff) )
- ldt_info.limit = max_limit;
-
- entry_1 = ((ldt_info.base_addr & 0x0000ffff) << 16) |
- (ldt_info.limit & 0x0ffff);
- entry_2 = (ldt_info.base_addr & 0xff000000) |
- ((ldt_info.base_addr & 0x00ff0000) >> 16) |
- (ldt_info.limit & 0xf0000) |
- ((ldt_info.read_exec_only ^ 1) << 9) |
- (ldt_info.contents << 10) |
- ((ldt_info.seg_not_present ^ 1) << 15) |
- (ldt_info.seg_32bit << 22) |
- (ldt_info.limit_in_pages << 23) |
- 0x7000;
- if (!oldmode)
- entry_2 |= (ldt_info.useable << 20);
-
- /* Install the new entry ... */
- install:
- error = HYPERVISOR_update_descriptor(phys_lp, entry_1, entry_2);
-
- out_unlock:
- up(&mm->context.sem);
- out:
- return error;
-}
-
-asmlinkage int sys_modify_ldt(int func, void *ptr, unsigned long bytecount)
-{
- int ret = -ENOSYS;
-
- switch (func) {
- case 0:
- ret = read_ldt(ptr, bytecount);
- break;
- case 1:
- ret = write_ldt(ptr, bytecount, 1);
- break;
- case 2:
- ret = read_default_ldt(ptr, bytecount);
- break;
- case 0x11:
- ret = write_ldt(ptr, bytecount, 0);
- break;
- }
- return ret;
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-dma.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-dma.c
deleted file mode 100644
index dd8842719e..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-dma.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Dynamic DMA mapping support.
- *
- * On i386 there is no hardware dynamic DMA address translation,
- * so consistent alloc/free are merely page allocation/freeing.
- * The rest of the dynamic DMA mapping interface is implemented
- * in asm/pci.h.
- */
-
-#include <linux/types.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/pci.h>
-#include <asm/io.h>
-
-void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
- dma_addr_t *dma_handle)
-{
- void *ret;
- int gfp = GFP_ATOMIC;
-
- if (hwdev == NULL || ((u32)hwdev->dma_mask < 0xffffffff))
- gfp |= GFP_DMA;
- ret = (void *)__get_free_pages(gfp, get_order(size));
-
- if (ret != NULL) {
- memset(ret, 0, size);
- *dma_handle = virt_to_bus(ret);
- }
- return ret;
-}
-
-void pci_free_consistent(struct pci_dev *hwdev, size_t size,
- void *vaddr, dma_addr_t dma_handle)
-{
- free_pages((unsigned long)vaddr, get_order(size));
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-pc.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-pc.c
deleted file mode 100644
index 48dcecd6ec..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/pci-pc.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Low-Level PCI Support for PC
- *
- * (c) 1999--2000 Martin Mares <mj@ucw.cz>
- *
- * Adjusted to use Xen's interface by Rolf Neugebauer, Intel Research Cambridge
- * Further modifications by Keir Fraser, University of Cambridge
- */
-
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/pci.h>
-#include <linux/init.h>
-#include <linux/ioport.h>
-
-#include <asm/segment.h>
-#include <asm/io.h>
-
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/hypervisor-ifs/physdev.h>
-
-#include "pci-i386.h"
-
-/*
- * NB. The following interface functions are not included here:
- * 1. void eisa_set_level_irq(unsigned int irq)
- * 2. irq_routing_table * __devinit pcibios_get_irq_routing_table(void)
- * 3. int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
- * All are used by the ACPI driver. This should be ported to Xen if it is
- * ever required -- Xen is the ultimate source for IRQ-routing knowledge.
- */
-
-struct pci_ops *pci_root_ops = NULL;
-
-int (*pci_config_read)(int seg, int bus, int dev, int fn,
- int reg, int len, u32 *value) = NULL;
-int (*pci_config_write)(int seg, int bus, int dev, int fn,
- int reg, int len, u32 value) = NULL;
-
-unsigned int pci_probe = PCI_PROBE_BIOS;
-
-struct pci_fixup pcibios_fixups[] = { { 0 } };
-
-static int pci_confx_read(int seg, int bus, int dev, int fn, int reg,
- int len, u32 *value)
-{
- int ret;
- physdev_op_t op;
-
- if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
- return -EINVAL;
-
- op.cmd = PHYSDEVOP_PCI_CFGREG_READ;
- op.u.pci_cfgreg_read.bus = bus;
- op.u.pci_cfgreg_read.dev = dev;
- op.u.pci_cfgreg_read.func = fn;
- op.u.pci_cfgreg_read.reg = reg;
- op.u.pci_cfgreg_read.len = len;
-
- if ( (ret = HYPERVISOR_physdev_op(&op)) != 0 )
- return ret;
-
- *value = op.u.pci_cfgreg_read.value;
-
- return 0;
-}
-
-static int pci_confx_write(int seg, int bus, int dev, int fn, int reg,
- int len, u32 value)
-{
- int ret;
- physdev_op_t op;
-
- if ((bus > 255 || dev > 31 || fn > 7 || reg > 255))
- return -EINVAL;
-
- op.cmd = PHYSDEVOP_PCI_CFGREG_WRITE;
- op.u.pci_cfgreg_write.bus = bus;
- op.u.pci_cfgreg_write.dev = dev;
- op.u.pci_cfgreg_write.func = fn;
- op.u.pci_cfgreg_write.reg = reg;
- op.u.pci_cfgreg_write.len = len;
- op.u.pci_cfgreg_write.value = value;
-
- if ( (ret = HYPERVISOR_physdev_op(&op)) != 0 )
- return ret;
- return 0;
-}
-
-
-static int pci_confx_read_config_byte(struct pci_dev *dev,
- int where, u8 *value)
-{
- int result;
- u32 data;
-
- result = pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 1, &data);
-
- *value = (u8)data;
-
- return result;
-}
-
-static int pci_confx_read_config_word(struct pci_dev *dev,
- int where, u16 *value)
-{
- int result;
- u32 data;
-
- result = pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 2, &data);
-
- *value = (u16)data;
-
- return result;
-}
-
-static int pci_confx_read_config_dword(struct pci_dev *dev,
- int where, u32 *value)
-{
- return pci_confx_read(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 4, value);
-}
-
-static int pci_confx_write_config_byte(struct pci_dev *dev,
- int where, u8 value)
-{
- return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 1, value);
-}
-
-static int pci_confx_write_config_word(struct pci_dev *dev,
- int where, u16 value)
-{
- return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 2, value);
-}
-
-static int pci_confx_write_config_dword(struct pci_dev *dev,
- int where, u32 value)
-{
- return pci_confx_write(0, dev->bus->number, PCI_SLOT(dev->devfn),
- PCI_FUNC(dev->devfn), where, 4, value);
-}
-
-static struct pci_ops pci_conf_xen = {
- pci_confx_read_config_byte,
- pci_confx_read_config_word,
- pci_confx_read_config_dword,
- pci_confx_write_config_byte,
- pci_confx_write_config_word,
- pci_confx_write_config_dword
-};
-
-void pcibios_penalize_isa_irq(int irq)
-{
- /* nothing */
-}
-
-void __devinit pcibios_fixup_bus(struct pci_bus *b)
-{
- pci_read_bridge_bases(b);
-}
-
-struct pci_bus * __devinit pcibios_scan_root(int busnum)
-{
- struct list_head *list;
- struct pci_bus *bus;
-
- list_for_each ( list, &pci_root_buses )
- {
- bus = pci_bus_b(list);
- if ( bus->number == busnum )
- return bus;
- }
-
- printk("PCI: Probing PCI hardware (bus %02x)\n", busnum);
- return pci_scan_bus(busnum, pci_root_ops, NULL);
-}
-
-void __init pcibios_init(void)
-{
- int bus;
- physdev_op_t op;
-
- if ( !pci_probe )
- return;
-
- pci_root_ops = &pci_conf_xen;
- pci_config_read = pci_confx_read;
- pci_config_write = pci_confx_write;
-
- pcibios_set_cacheline_size();
-
- op.cmd = PHYSDEVOP_PCI_PROBE_ROOT_BUSES;
- if ( HYPERVISOR_physdev_op(&op) != 0 )
- {
- printk(KERN_WARNING "PCI: System does not support PCI\n");
- return;
- }
-
- printk(KERN_INFO "PCI: Probing PCI hardware\n");
- for ( bus = 0; bus < 256; bus++ )
- if ( test_bit(bus, &op.u.pci_probe_root_buses.busmask[0]) )
- (void)pcibios_scan_root(bus);
-
- pcibios_resource_survey();
-}
-
-char * __devinit pcibios_setup(char *str)
-{
- if ( !strcmp(str, "off") )
- pci_probe = 0;
- return NULL;
-}
-
-unsigned int pcibios_assign_all_busses(void)
-{
- return 0;
-}
-
-int pcibios_enable_device(struct pci_dev *dev, int mask)
-{
- int err;
- u8 pin;
- physdev_op_t op;
-
- /* Inform Xen that we are going to use this device. */
- op.cmd = PHYSDEVOP_PCI_INITIALISE_DEVICE;
- op.u.pci_initialise_device.bus = dev->bus->number;
- op.u.pci_initialise_device.dev = PCI_SLOT(dev->devfn);
- op.u.pci_initialise_device.func = PCI_FUNC(dev->devfn);
- if ( (err = HYPERVISOR_physdev_op(&op)) != 0 )
- return err;
-
- /* Now we can bind to the very final IRQ line. */
- pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &pin);
- dev->irq = pin;
-
- /* Turn on device I/O and memory access as necessary. */
- if ( (err = pcibios_enable_resources(dev, mask)) < 0 )
- return err;
-
- /* Sanity-check that an interrupt-producing device is routed to an IRQ. */
- pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
- if ( pin != 0 )
- {
- if ( dev->irq != 0 )
- printk(KERN_INFO "PCI: Obtained IRQ %d for device %s\n",
- dev->irq, dev->slot_name);
- else
- printk(KERN_WARNING "PCI: No IRQ known for interrupt pin %c of "
- "device %s.\n", 'A' + pin - 1, dev->slot_name);
- }
-
- return 0;
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/process.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/process.c
deleted file mode 100644
index 1ef8521fcb..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/process.c
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * linux/arch/i386/kernel/process.c
- *
- * Copyright (C) 1995 Linus Torvalds
- *
- * Pentium III FXSR, SSE support
- * Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * This file handles the architecture-dependent parts of process handling..
- */
-
-#define __KERNEL_SYSCALLS__
-#include <stdarg.h>
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/stddef.h>
-#include <linux/unistd.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/user.h>
-#include <linux/a.out.h>
-#include <linux/interrupt.h>
-#include <linux/config.h>
-#include <linux/delay.h>
-#include <linux/reboot.h>
-#include <linux/init.h>
-#include <linux/mc146818rtc.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/ldt.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/desc.h>
-#include <asm/mmu_context.h>
-#include <asm/multicall.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-
-#include <linux/irq.h>
-
-asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
-
-int hlt_counter;
-
-/*
- * Powermanagement idle function, if any..
- */
-void (*pm_idle)(void);
-
-/*
- * Power off function, if any
- */
-void (*pm_power_off)(void);
-
-void disable_hlt(void)
-{
- hlt_counter++;
-}
-
-void enable_hlt(void)
-{
- hlt_counter--;
-}
-
-/*
- * The idle thread. There's no useful work to be
- * done, so just try to conserve power and have a
- * low exit latency (ie sit in a loop waiting for
- * somebody to say that they'd like to reschedule)
- */
-void cpu_idle (void)
-{
- extern int set_timeout_timer(void);
-
- /* Endless idle loop with no priority at all. */
- init_idle();
- current->nice = 20;
- current->counter = -100;
-
- for ( ; ; )
- {
- while ( !current->need_resched )
- {
- __cli();
- if ( current->need_resched )
- {
- /* The race-free check for events failed. */
- __sti();
- break;
- }
- else if ( set_timeout_timer() == 0 )
- {
- /* NB. Blocking reenable events in a race-free manner. */
- HYPERVISOR_block();
- }
- else
- {
- /* No race here: yielding will get us the CPU again anyway. */
- __sti();
- HYPERVISOR_yield();
- }
- }
- schedule();
- check_pgt_cache();
- }
-}
-
-void machine_restart(char * __unused)
-{
- /* We really want to get pending console data out before we die. */
- extern void xencons_force_flush(void);
- xencons_force_flush();
- HYPERVISOR_exit();
-}
-
-void machine_halt(void)
-{
- machine_restart(NULL);
-}
-
-void machine_power_off(void)
-{
- machine_restart(NULL);
-}
-
-extern void show_trace(unsigned long* esp);
-
-void show_regs(struct pt_regs * regs)
-{
- printk("\n");
- printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
- printk("EIP: %04x:[<%08lx>] CPU: %d",0xffff & regs->xcs,regs->eip, smp_processor_id());
- if (regs->xcs & 2)
- printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
- printk(" EFLAGS: %08lx %s\n",regs->eflags, print_tainted());
- printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
- regs->eax,regs->ebx,regs->ecx,regs->edx);
- printk("ESI: %08lx EDI: %08lx EBP: %08lx",
- regs->esi, regs->edi, regs->ebp);
- printk(" DS: %04x ES: %04x\n",
- 0xffff & regs->xds,0xffff & regs->xes);
-
- show_trace(&regs->esp);
-}
-
-
-/*
- * Create a kernel thread
- */
-int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
-{
- long retval, d0;
-
- __asm__ __volatile__(
- "movl %%esp,%%esi\n\t"
- "int $0x80\n\t" /* Linux/i386 system call */
- "cmpl %%esp,%%esi\n\t" /* child or parent? */
- "je 1f\n\t" /* parent - jump */
- /* Load the argument into eax, and push it. That way, it does
- * not matter whether the called function is compiled with
- * -mregparm or not. */
- "movl %4,%%eax\n\t"
- "pushl %%eax\n\t"
- "call *%5\n\t" /* call fn */
- "movl %3,%0\n\t" /* exit */
- "int $0x80\n"
- "1:\t"
- :"=&a" (retval), "=&S" (d0)
- :"0" (__NR_clone), "i" (__NR_exit),
- "r" (arg), "r" (fn),
- "b" (flags | CLONE_VM)
- : "memory");
-
- return retval;
-}
-
-/*
- * Free current thread data structures etc..
- */
-void exit_thread(void)
-{
- /* nothing to do ... */
-}
-
-void flush_thread(void)
-{
- struct task_struct *tsk = current;
-
- memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
-
- /*
- * Forget coprocessor state..
- */
- clear_fpu(tsk);
- tsk->used_math = 0;
-}
-
-void release_thread(struct task_struct *dead_task)
-{
- if (dead_task->mm) {
- // temporary debugging check
- if (dead_task->mm->context.size) {
- printk("WARNING: dead process %8s still has LDT? <%p/%08x>\n",
- dead_task->comm,
- dead_task->mm->context.ldt,
- dead_task->mm->context.size);
- BUG();
- }
- }
- //release_x86_irqs(dead_task);
-}
-
-
-/*
- * Save a segment.
- */
-#define savesegment(seg,value) \
- asm volatile("movl %%" #seg ",%0":"=m" (*(int *)&(value)))
-
-int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
- unsigned long unused,
- struct task_struct * p, struct pt_regs * regs)
-{
- struct pt_regs * childregs;
- unsigned long eflags;
-
- childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p)) - 1;
- struct_cpy(childregs, regs);
- childregs->eax = 0;
- childregs->esp = esp;
-
- p->thread.esp = (unsigned long) childregs;
- p->thread.esp0 = (unsigned long) (childregs+1);
-
- p->thread.eip = (unsigned long) ret_from_fork;
-
- savesegment(fs,p->thread.fs);
- savesegment(gs,p->thread.gs);
-
- unlazy_fpu(current);
- struct_cpy(&p->thread.i387, &current->thread.i387);
-
-
- __asm__ __volatile__ ( "pushfl; popl %0" : "=r" (eflags) : );
- p->thread.io_pl = (eflags >> 12) & 3;
-
- return 0;
-}
-
-/*
- * fill in the user structure for a core dump..
- */
-void dump_thread(struct pt_regs * regs, struct user * dump)
-{
- int i;
-
-/* changed the size calculations - should hopefully work better. lbt */
- dump->magic = CMAGIC;
- dump->start_code = 0;
- dump->start_stack = regs->esp & ~(PAGE_SIZE - 1);
- dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT;
- dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT;
- dump->u_dsize -= dump->u_tsize;
- dump->u_ssize = 0;
- for (i = 0; i < 8; i++)
- dump->u_debugreg[i] = current->thread.debugreg[i];
-
- if (dump->start_stack < TASK_SIZE)
- dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT;
-
- dump->regs.ebx = regs->ebx;
- dump->regs.ecx = regs->ecx;
- dump->regs.edx = regs->edx;
- dump->regs.esi = regs->esi;
- dump->regs.edi = regs->edi;
- dump->regs.ebp = regs->ebp;
- dump->regs.eax = regs->eax;
- dump->regs.ds = regs->xds;
- dump->regs.es = regs->xes;
- savesegment(fs,dump->regs.fs);
- savesegment(gs,dump->regs.gs);
- dump->regs.orig_eax = regs->orig_eax;
- dump->regs.eip = regs->eip;
- dump->regs.cs = regs->xcs;
- dump->regs.eflags = regs->eflags;
- dump->regs.esp = regs->esp;
- dump->regs.ss = regs->xss;
-
- dump->u_fpvalid = dump_fpu (regs, &dump->i387);
-}
-
-/*
- * switch_to(x,yn) should switch tasks from x to y.
- *
- * We fsave/fwait so that an exception goes off at the right time
- * (as a call from the fsave or fwait in effect) rather than to
- * the wrong process. Lazy FP saving no longer makes any sense
- * with modern CPU's, and this simplifies a lot of things (SMP
- * and UP become the same).
- *
- * NOTE! We used to use the x86 hardware context switching. The
- * reason for not using it any more becomes apparent when you
- * try to recover gracefully from saved state that is no longer
- * valid (stale segment register values in particular). With the
- * hardware task-switch, there is no way to fix up bad state in
- * a reasonable manner.
- *
- * The fact that Intel documents the hardware task-switching to
- * be slow is a fairly red herring - this code is not noticeably
- * faster. However, there _is_ some room for improvement here,
- * so the performance issues may eventually be a valid point.
- * More important, however, is the fact that this allows us much
- * more flexibility.
- */
-void __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
-{
- struct thread_struct *next = &next_p->thread;
-
- __cli();
-
- /*
- * We clobber FS and GS here so that we avoid a GPF when restoring previous
- * task's FS/GS values in Xen when the LDT is switched. If we don't do this
- * then we can end up erroneously re-flushing the page-update queue when
- * we 'execute_multicall_list'.
- */
- __asm__ __volatile__ (
- "xorl %%eax,%%eax; movl %%eax,%%fs; movl %%eax,%%gs" : : : "eax" );
-
- MULTICALL_flush_page_update_queue();
-
- /*
- * This is basically 'unlazy_fpu', except that we queue a multicall to
- * indicate FPU task switch, rather than synchronously trapping to Xen.
- */
- if ( prev_p->flags & PF_USEDFPU )
- {
- if ( cpu_has_fxsr )
- asm volatile( "fxsave %0 ; fnclex"
- : "=m" (prev_p->thread.i387.fxsave) );
- else
- asm volatile( "fnsave %0 ; fwait"
- : "=m" (prev_p->thread.i387.fsave) );
- prev_p->flags &= ~PF_USEDFPU;
- queue_multicall0(__HYPERVISOR_fpu_taskswitch);
- }
-
- queue_multicall2(__HYPERVISOR_stack_switch, __KERNEL_DS, next->esp0);
- if ( start_info.flags & SIF_PRIVILEGED )
- {
- dom0_op_t op;
- op.cmd = DOM0_IOPL;
- op.u.iopl.domain = DOMID_SELF;
- op.u.iopl.iopl = next->io_pl;
- queue_multicall1(__HYPERVISOR_dom0_op, (unsigned long)&op);
- }
-
- /* EXECUTE ALL TASK SWITCH XEN SYSCALLS AT THIS POINT. */
- execute_multicall_list();
- __sti();
-
- /*
- * Restore %fs and %gs.
- */
- loadsegment(fs, next->fs);
- loadsegment(gs, next->gs);
-
- /*
- * Now maybe reload the debug registers
- */
- if ( next->debugreg[7] != 0 )
- {
- HYPERVISOR_set_debugreg(0, next->debugreg[0]);
- HYPERVISOR_set_debugreg(1, next->debugreg[1]);
- HYPERVISOR_set_debugreg(2, next->debugreg[2]);
- HYPERVISOR_set_debugreg(3, next->debugreg[3]);
- /* no 4 and 5 */
- HYPERVISOR_set_debugreg(6, next->debugreg[6]);
- HYPERVISOR_set_debugreg(7, next->debugreg[7]);
- }
-}
-
-asmlinkage int sys_fork(struct pt_regs regs)
-{
- return do_fork(SIGCHLD, regs.esp, &regs, 0);
-}
-
-asmlinkage int sys_clone(struct pt_regs regs)
-{
- unsigned long clone_flags;
- unsigned long newsp;
-
- clone_flags = regs.ebx;
- newsp = regs.ecx;
- if (!newsp)
- newsp = regs.esp;
- return do_fork(clone_flags, newsp, &regs, 0);
-}
-
-/*
- * This is trivial, and on the face of it looks like it
- * could equally well be done in user mode.
- *
- * Not so, for quite unobvious reasons - register pressure.
- * In user mode vfork() cannot have a stack frame, and if
- * done by calling the "clone()" system call directly, you
- * do not have enough call-clobbered registers to hold all
- * the information you need.
- */
-asmlinkage int sys_vfork(struct pt_regs regs)
-{
- return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs.esp, &regs, 0);
-}
-
-/*
- * sys_execve() executes a new program.
- */
-asmlinkage int sys_execve(struct pt_regs regs)
-{
- int error;
- char * filename;
-
- filename = getname((char *) regs.ebx);
- error = PTR_ERR(filename);
- if (IS_ERR(filename))
- goto out;
- error = do_execve(filename, (char **) regs.ecx, (char **) regs.edx, &regs);
- if (error == 0)
- current->ptrace &= ~PT_DTRACE;
- putname(filename);
- out:
- return error;
-}
-
-/*
- * These bracket the sleeping functions..
- */
-extern void scheduling_functions_start_here(void);
-extern void scheduling_functions_end_here(void);
-#define first_sched ((unsigned long) scheduling_functions_start_here)
-#define last_sched ((unsigned long) scheduling_functions_end_here)
-
-unsigned long get_wchan(struct task_struct *p)
-{
- unsigned long ebp, esp, eip;
- unsigned long stack_page;
- int count = 0;
- if (!p || p == current || p->state == TASK_RUNNING)
- return 0;
- stack_page = (unsigned long)p;
- esp = p->thread.esp;
- if (!stack_page || esp < stack_page || esp > 8188+stack_page)
- return 0;
- /* include/asm-i386/system.h:switch_to() pushes ebp last. */
- ebp = *(unsigned long *) esp;
- do {
- if (ebp < stack_page || ebp > 8184+stack_page)
- return 0;
- eip = *(unsigned long *) (ebp+4);
- if (eip < first_sched || eip >= last_sched)
- return eip;
- ebp = *(unsigned long *) ebp;
- } while (count++ < 16);
- return 0;
-}
-#undef last_sched
-#undef first_sched
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c
deleted file mode 100644
index 6be85db7f1..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/setup.c
+++ /dev/null
@@ -1,1274 +0,0 @@
-/*
- * linux/arch/i386/kernel/setup.c
- *
- * Copyright (C) 1995 Linus Torvalds
- */
-
-/*
- * This file handles the architecture-dependent parts of initialization
- */
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/stddef.h>
-#include <linux/unistd.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/user.h>
-#include <linux/a.out.h>
-#include <linux/tty.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/config.h>
-#include <linux/init.h>
-#include <linux/apm_bios.h>
-#ifdef CONFIG_BLK_DEV_RAM
-#include <linux/blk.h>
-#endif
-#include <linux/highmem.h>
-#include <linux/bootmem.h>
-#include <linux/seq_file.h>
-#include <asm/processor.h>
-#include <linux/console.h>
-#include <linux/module.h>
-#include <asm/mtrr.h>
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/smp.h>
-#include <asm/msr.h>
-#include <asm/desc.h>
-#include <asm/dma.h>
-#include <asm/mpspec.h>
-#include <asm/mmu_context.h>
-#include <asm/ctrl_if.h>
-#include <asm/hypervisor.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-#include <linux/netdevice.h>
-#include <linux/rtnetlink.h>
-#include <linux/tqueue.h>
-#include <net/pkt_sched.h> /* dev_(de)activate */
-
-/*
- * Point at the empty zero page to start with. We map the real shared_info
- * page as soon as fixmap is up and running.
- */
-shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
-
-unsigned long *phys_to_machine_mapping;
-
-multicall_entry_t multicall_list[8];
-int nr_multicall_ents = 0;
-
-/*
- * Machine setup..
- */
-
-char ignore_irq13; /* set if exception 16 works */
-struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
-
-unsigned long mmu_cr4_features;
-
-unsigned char * vgacon_mmap;
-
-/*
- * Bus types ..
- */
-#ifdef CONFIG_EISA
-int EISA_bus;
-#endif
-int MCA_bus;
-
-/* for MCA, but anyone else can use it if they want */
-unsigned int machine_id;
-unsigned int machine_submodel_id;
-unsigned int BIOS_revision;
-unsigned int mca_pentium_flag;
-
-/* For PCI or other memory-mapped resources */
-unsigned long pci_mem_start = 0x10000000;
-
-/*
- * Setup options
- */
-struct drive_info_struct { char dummy[32]; } drive_info;
-struct screen_info screen_info;
-struct apm_info apm_info;
-struct sys_desc_table_struct {
- unsigned short length;
- unsigned char table[0];
-};
-
-unsigned char aux_device_present;
-
-extern int root_mountflags;
-extern char _text, _etext, _edata, _end;
-
-extern int blk_nohighio;
-
-int enable_acpi_smp_table;
-
-/* Raw start-of-day parameters from the hypervisor. */
-union start_info_union start_info_union;
-
-#define COMMAND_LINE_SIZE 256
-static char command_line[COMMAND_LINE_SIZE];
-char saved_command_line[COMMAND_LINE_SIZE];
-
-static void __init parse_mem_cmdline (char ** cmdline_p)
-{
- char c = ' ', *to = command_line, *from = saved_command_line;
- int len = 0;
-
- /* Save unparsed command line copy for /proc/cmdline */
- memcpy(saved_command_line, start_info.cmd_line, COMMAND_LINE_SIZE);
- saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
-
- for (;;) {
- /*
- * "mem=nopentium" disables the 4MB page tables.
- * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
- * to <mem>, overriding the bios size.
- * "mem=XXX[KkmM]@XXX[KkmM]" defines a memory region from
- * <start> to <start>+<mem>, overriding the bios size.
- */
- if (c == ' ' && !memcmp(from, "mem=", 4)) {
- if (to != command_line)
- to--;
- if (!memcmp(from+4, "nopentium", 9)) {
- from += 9+4;
- } else if (!memcmp(from+4, "exactmap", 8)) {
- from += 8+4;
- } else {
- (void)memparse(from+4, &from);
- if (*from == '@')
- (void)memparse(from+1, &from);
- }
- }
-
- c = *(from++);
- if (!c)
- break;
- if (COMMAND_LINE_SIZE <= ++len)
- break;
- *(to++) = c;
- }
- *to = '\0';
- *cmdline_p = command_line;
-}
-
-void __init setup_arch(char **cmdline_p)
-{
- unsigned long bootmap_size, start_pfn, max_low_pfn;
-
- extern void hypervisor_callback(void);
- extern void failsafe_callback(void);
-
- extern unsigned long cpu0_pte_quicklist[];
- extern unsigned long cpu0_pgd_quicklist[];
-
- /* Force a quick death if the kernel panics. */
- extern int panic_timeout;
- if ( panic_timeout == 0 )
- panic_timeout = 1;
-
-#ifndef CONFIG_HIGHIO
- blk_nohighio = 1;
-#endif
-
- HYPERVISOR_set_callbacks(
- __KERNEL_CS, (unsigned long)hypervisor_callback,
- __KERNEL_CS, (unsigned long)failsafe_callback);
-
- boot_cpu_data.pgd_quick = cpu0_pgd_quicklist;
- boot_cpu_data.pte_quick = cpu0_pte_quicklist;
-
- ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
- memset(&drive_info, 0, sizeof(drive_info));
- memset(&screen_info, 0, sizeof(screen_info));
-
- /* This is drawn from a dump from vgacon:startup in standard Linux. */
- screen_info.orig_video_mode = 3;
- screen_info.orig_video_isVGA = 1;
- screen_info.orig_video_lines = 25;
- screen_info.orig_video_cols = 80;
- screen_info.orig_video_ega_bx = 3;
- screen_info.orig_video_points = 16;
-
- memset(&apm_info.bios, 0, sizeof(apm_info.bios));
- aux_device_present = 0;
-#ifdef CONFIG_BLK_DEV_RAM
- rd_image_start = 0;
- rd_prompt = 0;
- rd_doload = 0;
-#endif
-
- root_mountflags &= ~MS_RDONLY;
- init_mm.start_code = (unsigned long) &_text;
- init_mm.end_code = (unsigned long) &_etext;
- init_mm.end_data = (unsigned long) &_edata;
- init_mm.brk = (unsigned long) &_end;
-
- parse_mem_cmdline(cmdline_p);
-
-#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-#define PFN_DOWN(x) ((x) >> PAGE_SHIFT)
-#define PFN_PHYS(x) ((x) << PAGE_SHIFT)
-
-/*
- * 128MB for vmalloc(), iomap(), kmap(), and fixaddr mappings.
- */
-#define VMALLOC_RESERVE (unsigned long)(128 << 20)
-#define MAXMEM (unsigned long)(HYPERVISOR_VIRT_START-PAGE_OFFSET-VMALLOC_RESERVE)
-#define MAXMEM_PFN PFN_DOWN(MAXMEM)
-#define MAX_NONPAE_PFN (1 << 20)
-
- /*
- * Determine low and high memory ranges:
- */
- max_low_pfn = max_pfn = start_info.nr_pages;
- if (max_low_pfn > MAXMEM_PFN) {
- max_low_pfn = MAXMEM_PFN;
-#ifndef CONFIG_HIGHMEM
- /* Maximum memory usable is what is directly addressable */
- printk(KERN_WARNING "Warning only %ldMB will be used.\n",
- MAXMEM>>20);
- if (max_pfn > MAX_NONPAE_PFN)
- printk(KERN_WARNING "Use a PAE enabled kernel.\n");
- else
- printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
-#else /* !CONFIG_HIGHMEM */
-#ifndef CONFIG_X86_PAE
- if (max_pfn > MAX_NONPAE_PFN) {
- max_pfn = MAX_NONPAE_PFN;
- printk(KERN_WARNING "Warning only 4GB will be used.\n");
- printk(KERN_WARNING "Use a PAE enabled kernel.\n");
- }
-#endif /* !CONFIG_X86_PAE */
-#endif /* !CONFIG_HIGHMEM */
- }
-
-#ifdef CONFIG_HIGHMEM
- highstart_pfn = highend_pfn = max_pfn;
- if (max_pfn > MAXMEM_PFN) {
- highstart_pfn = MAXMEM_PFN;
- printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
- pages_to_mb(highend_pfn - highstart_pfn));
- }
-#endif
-
- phys_to_machine_mapping = (unsigned long *)start_info.mfn_list;
- cur_pgd = init_mm.pgd = (pgd_t *)start_info.pt_base;
-
- start_pfn = (__pa(start_info.pt_base) >> PAGE_SHIFT) +
- start_info.nr_pt_frames;
-
- /*
- * Initialize the boot-time allocator, and free up all RAM. Then reserve
- * space for OS image, initrd, phys->machine table, bootstrap page table,
- * and the bootmem bitmap.
- * NB. There is definitely enough room for the bootmem bitmap in the
- * bootstrap page table. We are guaranteed to get >=512kB unused 'padding'
- * for our own use after all bootstrap elements (see hypervisor-if.h).
- */
- bootmap_size = init_bootmem(start_pfn, max_low_pfn);
- free_bootmem(0, PFN_PHYS(max_low_pfn));
- reserve_bootmem(0, PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1);
-
-#ifdef CONFIG_BLK_DEV_INITRD
- if ( start_info.mod_start != 0 )
- {
- if ( (__pa(start_info.mod_start) + start_info.mod_len) <=
- (max_low_pfn << PAGE_SHIFT) )
- {
- initrd_start = start_info.mod_start;
- initrd_end = initrd_start + start_info.mod_len;
- initrd_below_start_ok = 1;
- }
- else
- {
- printk(KERN_ERR "initrd extends beyond end of memory "
- "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
- __pa(start_info.mod_start) + start_info.mod_len,
- max_low_pfn << PAGE_SHIFT);
- initrd_start = 0;
- }
- }
-#endif
-
- paging_init();
-
- /* If we are a privileged guest OS then we should request IO privileges. */
- if ( start_info.flags & SIF_PRIVILEGED )
- {
- dom0_op_t op;
- op.cmd = DOM0_IOPL;
- op.u.iopl.domain = DOMID_SELF;
- op.u.iopl.iopl = 1;
- if( HYPERVISOR_dom0_op(&op) != 0 )
- panic("Unable to obtain IOPL, despite being SIF_PRIVILEGED");
- current->thread.io_pl = 1;
- }
-
- if (start_info.flags & SIF_INITDOMAIN )
- {
- if( !(start_info.flags & SIF_PRIVILEGED) )
- panic("Xen granted us console access but not privileged status");
-
-#if defined(CONFIG_VT)
-#if defined(CONFIG_VGA_CONSOLE)
- conswitchp = &vga_con;
-#elif defined(CONFIG_DUMMY_CONSOLE)
- conswitchp = &dummy_con;
-#endif
-#endif
- }
-}
-
-static int cachesize_override __initdata = -1;
-static int __init cachesize_setup(char *str)
-{
- get_option (&str, &cachesize_override);
- return 1;
-}
-__setup("cachesize=", cachesize_setup);
-
-static int __init highio_setup(char *str)
-{
- printk("i386: disabling HIGHMEM block I/O\n");
- blk_nohighio = 1;
- return 1;
-}
-__setup("nohighio", highio_setup);
-
-static int __init get_model_name(struct cpuinfo_x86 *c)
-{
- unsigned int *v;
- char *p, *q;
-
- if (cpuid_eax(0x80000000) < 0x80000004)
- return 0;
-
- v = (unsigned int *) c->x86_model_id;
- cpuid(0x80000002, &v[0], &v[1], &v[2], &v[3]);
- cpuid(0x80000003, &v[4], &v[5], &v[6], &v[7]);
- cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
- c->x86_model_id[48] = 0;
-
- /* Intel chips right-justify this string for some dumb reason;
- undo that brain damage */
- p = q = &c->x86_model_id[0];
- while ( *p == ' ' )
- p++;
- if ( p != q ) {
- while ( *p )
- *q++ = *p++;
- while ( q <= &c->x86_model_id[48] )
- *q++ = '\0'; /* Zero-pad the rest */
- }
-
- return 1;
-}
-
-
-static void __init display_cacheinfo(struct cpuinfo_x86 *c)
-{
- unsigned int n, dummy, ecx, edx, l2size;
-
- n = cpuid_eax(0x80000000);
-
- if (n >= 0x80000005) {
- cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
- printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d bytes/line)\n",
- edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
- c->x86_cache_size=(ecx>>24)+(edx>>24);
- }
-
- if (n < 0x80000006) /* Some chips just has a large L1. */
- return;
-
- ecx = cpuid_ecx(0x80000006);
- l2size = ecx >> 16;
-
- /* AMD errata T13 (order #21922) */
- if ((c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 6)) {
- if (c->x86_model == 3 && c->x86_mask == 0) /* Duron Rev A0 */
- l2size = 64;
- if (c->x86_model == 4 &&
- (c->x86_mask==0 || c->x86_mask==1)) /* Tbird rev A1/A2 */
- l2size = 256;
- }
-
- /* Intel PIII Tualatin. This comes in two flavours.
- * One has 256kb of cache, the other 512. We have no way
- * to determine which, so we use a boottime override
- * for the 512kb model, and assume 256 otherwise.
- */
- if ((c->x86_vendor == X86_VENDOR_INTEL) && (c->x86 == 6) &&
- (c->x86_model == 11) && (l2size == 0))
- l2size = 256;
-
- if (c->x86_vendor == X86_VENDOR_CENTAUR) {
- /* VIA C3 CPUs (670-68F) need further shifting. */
- if ((c->x86 == 6) &&
- ((c->x86_model == 7) || (c->x86_model == 8))) {
- l2size >>= 8;
- }
-
- /* VIA also screwed up Nehemiah stepping 1, and made
- it return '65KB' instead of '64KB'
- - Note, it seems this may only be in engineering samples. */
- if ((c->x86==6) && (c->x86_model==9) &&
- (c->x86_mask==1) && (l2size==65))
- l2size -= 1;
- }
-
- /* Allow user to override all this if necessary. */
- if (cachesize_override != -1)
- l2size = cachesize_override;
-
- if ( l2size == 0 )
- return; /* Again, no L2 cache is possible */
-
- c->x86_cache_size = l2size;
-
- printk(KERN_INFO "CPU: L2 Cache: %dK (%d bytes/line)\n",
- l2size, ecx & 0xFF);
-}
-
-static void __init init_c3(struct cpuinfo_x86 *c)
-{
- /* Test for Centaur Extended Feature Flags presence */
- if (cpuid_eax(0xC0000000) >= 0xC0000001) {
- /* store Centaur Extended Feature Flags as
- * word 5 of the CPU capability bit array
- */
- c->x86_capability[5] = cpuid_edx(0xC0000001);
- }
-
- switch (c->x86_model) {
- case 9: /* Nehemiah */
- default:
- get_model_name(c);
- display_cacheinfo(c);
- break;
- }
-}
-
-static void __init init_centaur(struct cpuinfo_x86 *c)
-{
- /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
- 3DNow is IDd by bit 31 in extended CPUID (1*3231) anyway */
- clear_bit(0*32+31, &c->x86_capability);
-
- switch (c->x86) {
- case 6:
- init_c3(c);
- break;
- default:
- panic("Unsupported Centaur CPU (%i)\n", c->x86);
- }
-}
-
-static int __init init_amd(struct cpuinfo_x86 *c)
-{
- int r;
-
- /* Bit 31 in normal CPUID used for nonstandard 3DNow ID;
- 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */
- clear_bit(0*32+31, &c->x86_capability);
-
- r = get_model_name(c);
-
- switch(c->x86)
- {
- case 5: /* We don't like AMD K6 */
- panic("Unsupported AMD processor\n");
- case 6: /* An Athlon/Duron. We can trust the BIOS probably */
- break;
- }
-
- display_cacheinfo(c);
- return r;
-}
-
-
-static void __init init_intel(struct cpuinfo_x86 *c)
-{
- char *p = NULL;
- unsigned int l1i = 0, l1d = 0, l2 = 0, l3 = 0; /* Cache sizes */
-
- if (c->cpuid_level > 1) {
- /* supports eax=2 call */
- int i, j, n;
- int regs[4];
- unsigned char *dp = (unsigned char *)regs;
-
- /* Number of times to iterate */
- n = cpuid_eax(2) & 0xFF;
-
- for ( i = 0 ; i < n ; i++ ) {
- cpuid(2, &regs[0], &regs[1], &regs[2], &regs[3]);
-
- /* If bit 31 is set, this is an unknown format */
- for ( j = 0 ; j < 3 ; j++ ) {
- if ( regs[j] < 0 ) regs[j] = 0;
- }
-
- /* Byte 0 is level count, not a descriptor */
- for ( j = 1 ; j < 16 ; j++ ) {
- unsigned char des = dp[j];
- unsigned char dl, dh;
- unsigned int cs;
-
- dh = des >> 4;
- dl = des & 0x0F;
-
- /* Black magic... */
-
- switch ( dh )
- {
- case 0:
- switch ( dl ) {
- case 6:
- /* L1 I cache */
- l1i += 8;
- break;
- case 8:
- /* L1 I cache */
- l1i += 16;
- break;
- case 10:
- /* L1 D cache */
- l1d += 8;
- break;
- case 12:
- /* L1 D cache */
- l1d += 16;
- break;
- default:;
- /* TLB, or unknown */
- }
- break;
- case 2:
- if ( dl ) {
- /* L3 cache */
- cs = (dl-1) << 9;
- l3 += cs;
- }
- break;
- case 4:
- if ( c->x86 > 6 && dl ) {
- /* P4 family */
- /* L3 cache */
- cs = 128 << (dl-1);
- l3 += cs;
- break;
- }
- /* else same as 8 - fall through */
- case 8:
- if ( dl ) {
- /* L2 cache */
- cs = 128 << (dl-1);
- l2 += cs;
- }
- break;
- case 6:
- if (dl > 5) {
- /* L1 D cache */
- cs = 8<<(dl-6);
- l1d += cs;
- }
- break;
- case 7:
- if ( dl >= 8 )
- {
- /* L2 cache */
- cs = 64<<(dl-8);
- l2 += cs;
- } else {
- /* L0 I cache, count as L1 */
- cs = dl ? (16 << (dl-1)) : 12;
- l1i += cs;
- }
- break;
- default:
- /* TLB, or something else we don't know about */
- break;
- }
- }
- }
- if ( l1i || l1d )
- printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n",
- l1i, l1d);
- if ( l2 )
- printk(KERN_INFO "CPU: L2 cache: %dK\n", l2);
- if ( l3 )
- printk(KERN_INFO "CPU: L3 cache: %dK\n", l3);
-
- /*
- * This assumes the L3 cache is shared; it typically lives in
- * the northbridge. The L1 caches are included by the L2
- * cache, and so should not be included for the purpose of
- * SMP switching weights.
- */
- c->x86_cache_size = l2 ? l2 : (l1i+l1d);
- }
-
- /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */
- if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 )
- clear_bit(X86_FEATURE_SEP, &c->x86_capability);
-
- /* Names for the Pentium II/Celeron processors
- detectable only by also checking the cache size.
- Dixon is NOT a Celeron. */
- if (c->x86 == 6) {
- switch (c->x86_model) {
- case 5:
- if (l2 == 0)
- p = "Celeron (Covington)";
- if (l2 == 256)
- p = "Mobile Pentium II (Dixon)";
- break;
-
- case 6:
- if (l2 == 128)
- p = "Celeron (Mendocino)";
- break;
-
- case 8:
- if (l2 == 128)
- p = "Celeron (Coppermine)";
- break;
- }
- }
-
- if ( p )
- strcpy(c->x86_model_id, p);
-}
-
-void __init get_cpu_vendor(struct cpuinfo_x86 *c)
-{
- char *v = c->x86_vendor_id;
-
- if (!strcmp(v, "GenuineIntel"))
- c->x86_vendor = X86_VENDOR_INTEL;
- else if (!strcmp(v, "AuthenticAMD"))
- c->x86_vendor = X86_VENDOR_AMD;
- else if (!strcmp(v, "CentaurHauls"))
- c->x86_vendor = X86_VENDOR_CENTAUR;
- else
- c->x86_vendor = X86_VENDOR_UNKNOWN;
-}
-
-struct cpu_model_info {
- int vendor;
- int family;
- char *model_names[16];
-};
-
-/* Naming convention should be: <Name> [(<Codename>)] */
-/* This table only is used unless init_<vendor>() below doesn't set it; */
-/* in particular, if CPUID levels 0x80000002..4 are supported, this isn't used */
-static struct cpu_model_info cpu_models[] __initdata = {
- { X86_VENDOR_INTEL, 6,
- { "Pentium Pro A-step", "Pentium Pro", NULL, "Pentium II (Klamath)",
- NULL, "Pentium II (Deschutes)", "Mobile Pentium II",
- "Pentium III (Katmai)", "Pentium III (Coppermine)", NULL,
- "Pentium III (Cascades)", NULL, NULL, NULL, NULL }},
- { X86_VENDOR_AMD, 6, /* Is this this really necessary?? */
- { "Athlon", "Athlon",
- "Athlon", NULL, "Athlon", NULL,
- NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL }}
-};
-
-/* Look up CPU names by table lookup. */
-static char __init *table_lookup_model(struct cpuinfo_x86 *c)
-{
- struct cpu_model_info *info = cpu_models;
- int i;
-
- if ( c->x86_model >= 16 )
- return NULL; /* Range check */
-
- for ( i = 0 ; i < sizeof(cpu_models)/sizeof(struct cpu_model_info) ; i++ ) {
- if ( info->vendor == c->x86_vendor &&
- info->family == c->x86 ) {
- return info->model_names[c->x86_model];
- }
- info++;
- }
- return NULL; /* Not found */
-}
-
-
-
-/* Standard macro to see if a specific flag is changeable */
-static inline int flag_is_changeable_p(u32 flag)
-{
- u32 f1, f2;
-
- asm("pushfl\n\t"
- "pushfl\n\t"
- "popl %0\n\t"
- "movl %0,%1\n\t"
- "xorl %2,%0\n\t"
- "pushl %0\n\t"
- "popfl\n\t"
- "pushfl\n\t"
- "popl %0\n\t"
- "popfl\n\t"
- : "=&r" (f1), "=&r" (f2)
- : "ir" (flag));
-
- return ((f1^f2) & flag) != 0;
-}
-
-
-/* Probe for the CPUID instruction */
-static int __init have_cpuid_p(void)
-{
- return flag_is_changeable_p(X86_EFLAGS_ID);
-}
-
-
-
-#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
-unsigned char eddnr;
-struct edd_info edd[EDDMAXNR];
-unsigned int edd_disk80_sig;
-/**
- * copy_edd() - Copy the BIOS EDD information
- * from empty_zero_page into a safe place.
- *
- */
-static inline void copy_edd(void)
-{
- eddnr = EDD_NR;
- memcpy(edd, EDD_BUF, sizeof(edd));
- edd_disk80_sig = DISK80_SIGNATURE_BUFFER;
-}
-#else
-static inline void copy_edd(void) {}
-#endif
-
-/*
- * This does the hard work of actually picking apart the CPU stuff...
- */
-void __init identify_cpu(struct cpuinfo_x86 *c)
-{
- int junk, i;
- u32 xlvl, tfms;
-
- c->loops_per_jiffy = loops_per_jiffy;
- c->x86_cache_size = -1;
- c->x86_vendor = X86_VENDOR_UNKNOWN;
- c->cpuid_level = -1; /* CPUID not detected */
- c->x86_model = c->x86_mask = 0; /* So far unknown... */
- c->x86_vendor_id[0] = '\0'; /* Unset */
- c->x86_model_id[0] = '\0'; /* Unset */
- memset(&c->x86_capability, 0, sizeof c->x86_capability);
- c->hard_math = 1;
-
- if ( !have_cpuid_p() ) {
- panic("Processor must support CPUID\n");
- } else {
- /* CPU does have CPUID */
-
- /* Get vendor name */
- cpuid(0x00000000, &c->cpuid_level,
- (int *)&c->x86_vendor_id[0],
- (int *)&c->x86_vendor_id[8],
- (int *)&c->x86_vendor_id[4]);
-
- get_cpu_vendor(c);
- /* Initialize the standard set of capabilities */
- /* Note that the vendor-specific code below might override */
-
- /* Intel-defined flags: level 0x00000001 */
- if ( c->cpuid_level >= 0x00000001 ) {
- u32 capability, excap;
- cpuid(0x00000001, &tfms, &junk, &excap, &capability);
- c->x86_capability[0] = capability;
- c->x86_capability[4] = excap;
- c->x86 = (tfms >> 8) & 15;
- c->x86_model = (tfms >> 4) & 15;
- if (c->x86 == 0xf) {
- c->x86 += (tfms >> 20) & 0xff;
- c->x86_model += ((tfms >> 16) & 0xF) << 4;
- }
- c->x86_mask = tfms & 15;
- } else {
- /* Have CPUID level 0 only - unheard of */
- c->x86 = 4;
- }
-
- /* AMD-defined flags: level 0x80000001 */
- xlvl = cpuid_eax(0x80000000);
- if ( (xlvl & 0xffff0000) == 0x80000000 ) {
- if ( xlvl >= 0x80000001 )
- c->x86_capability[1] = cpuid_edx(0x80000001);
- if ( xlvl >= 0x80000004 )
- get_model_name(c); /* Default name */
- }
-
- /* Transmeta-defined flags: level 0x80860001 */
- xlvl = cpuid_eax(0x80860000);
- if ( (xlvl & 0xffff0000) == 0x80860000 ) {
- if ( xlvl >= 0x80860001 )
- c->x86_capability[2] = cpuid_edx(0x80860001);
- }
- }
-
- printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n",
- c->x86_capability[0],
- c->x86_capability[1],
- c->x86_capability[2],
- c->x86_vendor);
-
- /*
- * Vendor-specific initialization. In this section we
- * canonicalize the feature flags, meaning if there are
- * features a certain CPU supports which CPUID doesn't
- * tell us, CPUID claiming incorrect flags, or other bugs,
- * we handle them here.
- *
- * At the end of this section, c->x86_capability better
- * indicate the features this CPU genuinely supports!
- */
- switch ( c->x86_vendor ) {
- case X86_VENDOR_AMD:
- init_amd(c);
- break;
-
- case X86_VENDOR_INTEL:
- init_intel(c);
- break;
-
- case X86_VENDOR_CENTAUR:
- init_centaur(c);
- break;
-
- default:
- printk("Unsupported CPU vendor (%d) -- please report!\n",
- c->x86_vendor);
- }
-
- printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n",
- c->x86_capability[0],
- c->x86_capability[1],
- c->x86_capability[2],
- c->x86_capability[3]);
-
-
- /* If the model name is still unset, do table lookup. */
- if ( !c->x86_model_id[0] ) {
- char *p;
- p = table_lookup_model(c);
- if ( p )
- strcpy(c->x86_model_id, p);
- else
- /* Last resort... */
- sprintf(c->x86_model_id, "%02x/%02x",
- c->x86_vendor, c->x86_model);
- }
-
- /* Now the feature flags better reflect actual CPU features! */
-
- printk(KERN_DEBUG "CPU: After generic, caps: %08x %08x %08x %08x\n",
- c->x86_capability[0],
- c->x86_capability[1],
- c->x86_capability[2],
- c->x86_capability[3]);
-
- /*
- * On SMP, boot_cpu_data holds the common feature set between
- * all CPUs; so make sure that we indicate which features are
- * common between the CPUs. The first time this routine gets
- * executed, c == &boot_cpu_data.
- */
- if ( c != &boot_cpu_data ) {
- /* AND the already accumulated flags with these */
- for ( i = 0 ; i < NCAPINTS ; i++ )
- boot_cpu_data.x86_capability[i] &= c->x86_capability[i];
- }
-
- printk(KERN_DEBUG "CPU: Common caps: %08x %08x %08x %08x\n",
- boot_cpu_data.x86_capability[0],
- boot_cpu_data.x86_capability[1],
- boot_cpu_data.x86_capability[2],
- boot_cpu_data.x86_capability[3]);
-}
-
-
-/* These need to match <asm/processor.h> */
-static char *cpu_vendor_names[] __initdata = {
- "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" };
-
-
-void __init print_cpu_info(struct cpuinfo_x86 *c)
-{
- char *vendor = NULL;
-
- if (c->x86_vendor < sizeof(cpu_vendor_names)/sizeof(char *))
- vendor = cpu_vendor_names[c->x86_vendor];
- else if (c->cpuid_level >= 0)
- vendor = c->x86_vendor_id;
-
- if (vendor && strncmp(c->x86_model_id, vendor, strlen(vendor)))
- printk("%s ", vendor);
-
- if (!c->x86_model_id[0])
- printk("%d86", c->x86);
- else
- printk("%s", c->x86_model_id);
-
- if (c->x86_mask || c->cpuid_level >= 0)
- printk(" stepping %02x\n", c->x86_mask);
- else
- printk("\n");
-}
-
-/*
- * Get CPU information for use by the procfs.
- */
-static int show_cpuinfo(struct seq_file *m, void *v)
-{
- /*
- * These flag bits must match the definitions in <asm/cpufeature.h>.
- * NULL means this bit is undefined or reserved; either way it doesn't
- * have meaning as far as Linux is concerned. Note that it's important
- * to realize there is a difference between this table and CPUID -- if
- * applications want to get the raw CPUID data, they should access
- * /dev/cpu/<cpu_nr>/cpuid instead.
- */
- static char *x86_cap_flags[] = {
- /* Intel-defined */
- "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
- "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov",
- "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx",
- "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", "pbe",
-
- /* 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, NULL, NULL, "lm", "3dnowext", "3dnow",
-
- /* Transmeta-defined */
- "recovery", "longrun", NULL, "lrti", NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
- /* Other (Linux-defined) */
- "cxmmx", "k6_mtrr", "cyrix_arr", "centaur_mcr",
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
- /* Intel-defined (#2) */
- "pni", NULL, NULL, "monitor", "ds_cpl", NULL, NULL, "tm2",
- "est", NULL, "cid", NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
- /* VIA/Cyrix/Centaur-defined */
- NULL, NULL, "xstore", NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-
- };
- struct cpuinfo_x86 *c = v;
- int i, n = c - cpu_data;
- int fpu_exception;
-
-#ifdef CONFIG_SMP
- if (!(cpu_online_map & (1<<n)))
- return 0;
-#endif
- seq_printf(m, "processor\t: %d\n"
- "vendor_id\t: %s\n"
- "cpu family\t: %d\n"
- "model\t\t: %d\n"
- "model name\t: %s\n",
- n,
- c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",
- c->x86,
- c->x86_model,
- c->x86_model_id[0] ? c->x86_model_id : "unknown");
-
- if (c->x86_mask || c->cpuid_level >= 0)
- seq_printf(m, "stepping\t: %d\n", c->x86_mask);
- else
- seq_printf(m, "stepping\t: unknown\n");
-
- if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) {
- seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n",
- cpu_khz / 1000, (cpu_khz % 1000));
- }
-
- /* Cache size */
- if (c->x86_cache_size >= 0)
- seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
-
- /* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
- fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu);
- seq_printf(m, "fdiv_bug\t: %s\n"
- "hlt_bug\t\t: %s\n"
- "f00f_bug\t: %s\n"
- "coma_bug\t: %s\n"
- "fpu\t\t: %s\n"
- "fpu_exception\t: %s\n"
- "cpuid level\t: %d\n"
- "wp\t\t: %s\n"
- "flags\t\t:",
- c->fdiv_bug ? "yes" : "no",
- c->hlt_works_ok ? "no" : "yes",
- c->f00f_bug ? "yes" : "no",
- c->coma_bug ? "yes" : "no",
- c->hard_math ? "yes" : "no",
- fpu_exception ? "yes" : "no",
- c->cpuid_level,
- c->wp_works_ok ? "yes" : "no");
-
- for ( i = 0 ; i < 32*NCAPINTS ; i++ )
- if ( test_bit(i, &c->x86_capability) &&
- x86_cap_flags[i] != NULL )
- seq_printf(m, " %s", x86_cap_flags[i]);
-
- seq_printf(m, "\nbogomips\t: %lu.%02lu\n\n",
- c->loops_per_jiffy/(500000/HZ),
- (c->loops_per_jiffy/(5000/HZ)) % 100);
- return 0;
-}
-
-static void *c_start(struct seq_file *m, loff_t *pos)
-{
- return *pos < NR_CPUS ? cpu_data + *pos : NULL;
-}
-static void *c_next(struct seq_file *m, void *v, loff_t *pos)
-{
- ++*pos;
- return c_start(m, pos);
-}
-static void c_stop(struct seq_file *m, void *v)
-{
-}
-struct seq_operations cpuinfo_op = {
- start: c_start,
- next: c_next,
- stop: c_stop,
- show: show_cpuinfo,
-};
-
-unsigned long cpu_initialized __initdata = 0;
-
-/*
- * cpu_init() initializes state that is per-CPU. Some data is already
- * initialized (naturally) in the bootstrap process, such as the GDT
- * and IDT. We reload them nevertheless, this function acts as a
- * 'CPU state barrier', nothing should get across.
- */
-void __init cpu_init (void)
-{
- int nr = smp_processor_id();
-
- if (test_and_set_bit(nr, &cpu_initialized)) {
- printk(KERN_WARNING "CPU#%d already initialized!\n", nr);
- for (;;) __sti();
- }
- printk(KERN_INFO "Initializing CPU#%d\n", nr);
-
- /*
- * set up and load the per-CPU TSS and LDT
- */
- atomic_inc(&init_mm.mm_count);
- current->active_mm = &init_mm;
- if(current->mm)
- BUG();
- enter_lazy_tlb(&init_mm, current, nr);
-
- HYPERVISOR_stack_switch(__KERNEL_DS, current->thread.esp0);
-
- load_LDT(&init_mm.context);
- flush_page_update_queue();
-
- /* Force FPU initialization. */
- current->flags &= ~PF_USEDFPU;
- current->used_math = 0;
- stts();
-}
-
-
-/******************************************************************************
- * Time-to-die callback handling.
- */
-
-/* Dynamically-mapped IRQ. */
-static int die_irq;
-
-static void die_interrupt(int irq, void *unused, struct pt_regs *regs)
-{
- extern void ctrl_alt_del(void);
- ctrl_alt_del();
-}
-
-static int __init setup_die_event(void)
-{
- die_irq = bind_virq_to_irq(VIRQ_DIE);
- (void)request_irq(die_irq, die_interrupt, 0, "die", NULL);
- return 0;
-}
-
-__initcall(setup_die_event);
-
-
-/******************************************************************************
- * Stop/pickle callback handling.
- */
-
-#include <asm/suspend.h>
-
-static void stop_task(void *unused)
-{
- /* Hmmm... a cleaner interface to suspend/resume blkdevs would be nice. */
- extern void blkdev_suspend(void);
- extern void blkdev_resume(void);
-
- extern void time_suspend(void);
- extern void time_resume(void);
-
- unsigned long *pfn_to_mfn_frame_list = NULL;
- suspend_record_t *suspend_record = NULL;
- struct net_device *dev;
- char name[6];
- int i, j;
-
- if ( (pfn_to_mfn_frame_list = (unsigned long *)__get_free_page(GFP_KERNEL))
- == NULL )
- goto out;
- if ( (suspend_record = (suspend_record_t *)__get_free_page(GFP_KERNEL))
- == NULL )
- goto out;
-
- suspend_record->pfn_to_mfn_frame_list =
- virt_to_machine(pfn_to_mfn_frame_list) >> PAGE_SHIFT;
- suspend_record->nr_pfns = max_pfn;
-
- j = 0;
- for ( i = 0; i < max_pfn; i += (PAGE_SIZE / sizeof(unsigned long)) )
- pfn_to_mfn_frame_list[j++] =
- virt_to_machine(&phys_to_machine_mapping[i]) >> PAGE_SHIFT;
-
- /*
- * NB. This is /not/ a full dev_close() as that loses route information!
- * Instead we do essentialy the same as dev_close() but without notifying
- * various registered subsystems about the NETDEV_DOWN event.
- */
- rtnl_lock();
- for ( i = 0; i < 10; i++ )
- {
- sprintf(name, "eth%d", i);
- if ( ((dev = __dev_get_by_name(name)) != NULL) &&
- (dev->flags & IFF_UP) )
- {
- dev_deactivate(dev);
- clear_bit(__LINK_STATE_START, &dev->state);
- if ( dev->stop != NULL )
- dev->stop(dev);
- dev->flags &= ~IFF_UP;
- }
- }
- rtnl_unlock();
-
- blkdev_suspend();
-
- __cli();
-
- time_suspend();
-
- ctrl_if_suspend();
-
- irq_suspend();
-
- HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
- clear_fixmap(FIX_SHARED_INFO);
-
- memcpy(&suspend_record->resume_info, &start_info, sizeof(start_info));
-
- HYPERVISOR_stop(virt_to_machine(suspend_record) >> PAGE_SHIFT);
-
- memcpy(&start_info, &suspend_record->resume_info, sizeof(start_info));
-
- set_fixmap(FIX_SHARED_INFO, start_info.shared_info);
- HYPERVISOR_shared_info = (shared_info_t *)fix_to_virt(FIX_SHARED_INFO);
- memset(empty_zero_page, 0, PAGE_SIZE);
-
- irq_resume();
-
- ctrl_if_resume();
-
- time_resume();
-
- __sti();
-
- blkdev_resume();
-
- /*
- * We now do the opposite of the network suspend code. Basically it's
- * dev_open() but without notifying anyone about NETDEV_UP.
- */
- rtnl_lock();
- for ( i = 0; i < 10; i++ )
- {
- sprintf(name, "eth%d", i);
- if ( ((dev = __dev_get_by_name(name)) != NULL) &&
- !(dev->flags & IFF_UP) )
- {
- set_bit(__LINK_STATE_START, &dev->state);
- if ( (dev->open == NULL) || (dev->open(dev) == 0) )
- {
- dev->flags |= IFF_UP;
- dev_activate(dev);
- }
- else
- {
- clear_bit(__LINK_STATE_START, &dev->state);
- }
- }
- }
- rtnl_unlock();
-
- out:
- if ( pfn_to_mfn_frame_list != NULL )
- free_page((unsigned long)pfn_to_mfn_frame_list);
- if ( suspend_record != NULL )
- free_page((unsigned long)suspend_record);
-}
-
-static struct tq_struct stop_tq;
-
-/* Dynamically-mapped IRQ. */
-static int stop_irq;
-
-static void stop_interrupt(int irq, void *unused, struct pt_regs *regs)
-{
- stop_tq.routine = stop_task;
- schedule_task(&stop_tq);
-}
-
-static int __init setup_stop_event(void)
-{
- stop_irq = bind_virq_to_irq(VIRQ_STOP);
- (void)request_irq(stop_irq, stop_interrupt, 0, "stop", NULL);
- return 0;
-}
-
-__initcall(setup_stop_event);
-
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/signal.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/signal.c
deleted file mode 100644
index f646c5c0ca..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/signal.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * linux/arch/i386/kernel/signal.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * 1997-11-28 Modified for POSIX.1b signals by Richard Henderson
- * 2000-06-20 Pentium III FXSR, SSE support by Gareth Hughes
- */
-
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/kernel.h>
-#include <linux/signal.h>
-#include <linux/errno.h>
-#include <linux/wait.h>
-#include <linux/ptrace.h>
-#include <linux/unistd.h>
-#include <linux/stddef.h>
-#include <linux/tty.h>
-#include <linux/personality.h>
-#include <asm/ucontext.h>
-#include <asm/uaccess.h>
-#include <asm/i387.h>
-
-#define DEBUG_SIG 0
-
-#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
-
-int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset));
-
-int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
-{
- if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
- return -EFAULT;
- if (from->si_code < 0)
- return __copy_to_user(to, from, sizeof(siginfo_t));
- else {
- int err;
-
- /* If you change siginfo_t structure, please be sure
- this code is fixed accordingly.
- It should never copy any pad contained in the structure
- to avoid security leaks, but must copy the generic
- 3 ints plus the relevant union member. */
- err = __put_user(from->si_signo, &to->si_signo);
- err |= __put_user(from->si_errno, &to->si_errno);
- err |= __put_user((short)from->si_code, &to->si_code);
- /* First 32bits of unions are always present. */
- err |= __put_user(from->si_pid, &to->si_pid);
- switch (from->si_code >> 16) {
- case __SI_FAULT >> 16:
- break;
- case __SI_CHLD >> 16:
- err |= __put_user(from->si_utime, &to->si_utime);
- err |= __put_user(from->si_stime, &to->si_stime);
- err |= __put_user(from->si_status, &to->si_status);
- default:
- err |= __put_user(from->si_uid, &to->si_uid);
- break;
- /* case __SI_RT: This is not generated by the kernel as of now. */
- }
- return err;
- }
-}
-
-/*
- * Atomically swap in the new signal mask, and wait for a signal.
- */
-asmlinkage int
-sys_sigsuspend(int history0, int history1, old_sigset_t mask)
-{
- struct pt_regs * regs = (struct pt_regs *) &history0;
- sigset_t saveset;
-
- mask &= _BLOCKABLE;
- spin_lock_irq(&current->sigmask_lock);
- saveset = current->blocked;
- siginitset(&current->blocked, mask);
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
- regs->eax = -EINTR;
- while (1) {
- current->state = TASK_INTERRUPTIBLE;
- schedule();
- if (do_signal(regs, &saveset))
- return -EINTR;
- }
-}
-
-asmlinkage int
-sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize)
-{
- struct pt_regs * regs = (struct pt_regs *) &unewset;
- sigset_t saveset, newset;
-
- /* XXX: Don't preclude handling different sized sigset_t's. */
- if (sigsetsize != sizeof(sigset_t))
- return -EINVAL;
-
- if (copy_from_user(&newset, unewset, sizeof(newset)))
- return -EFAULT;
- sigdelsetmask(&newset, ~_BLOCKABLE);
-
- spin_lock_irq(&current->sigmask_lock);
- saveset = current->blocked;
- current->blocked = newset;
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
- regs->eax = -EINTR;
- while (1) {
- current->state = TASK_INTERRUPTIBLE;
- schedule();
- if (do_signal(regs, &saveset))
- return -EINTR;
- }
-}
-
-asmlinkage int
-sys_sigaction(int sig, const struct old_sigaction *act,
- struct old_sigaction *oact)
-{
- struct k_sigaction new_ka, old_ka;
- int ret;
-
- if (act) {
- old_sigset_t mask;
- if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
- __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
- __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
- return -EFAULT;
- __get_user(new_ka.sa.sa_flags, &act->sa_flags);
- __get_user(mask, &act->sa_mask);
- siginitset(&new_ka.sa.sa_mask, mask);
- }
-
- ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
- if (!ret && oact) {
- if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
- __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
- __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
- return -EFAULT;
- __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
- __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
- }
-
- return ret;
-}
-
-asmlinkage int
-sys_sigaltstack(const stack_t *uss, stack_t *uoss)
-{
- struct pt_regs *regs = (struct pt_regs *) &uss;
- return do_sigaltstack(uss, uoss, regs->esp);
-}
-
-
-/*
- * Do a signal return; undo the signal stack.
- */
-
-struct sigframe
-{
- char *pretcode;
- int sig;
- struct sigcontext sc;
- struct _fpstate fpstate;
- unsigned long extramask[_NSIG_WORDS-1];
- char retcode[8];
-};
-
-struct rt_sigframe
-{
- char *pretcode;
- int sig;
- struct siginfo *pinfo;
- void *puc;
- struct siginfo info;
- struct ucontext uc;
- struct _fpstate fpstate;
- char retcode[8];
-};
-
-static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *peax)
-{
- unsigned int err = 0;
-
-#define COPY(x) err |= __get_user(regs->x, &sc->x)
-
-#define COPY_SEG(seg) \
- { unsigned short tmp; \
- err |= __get_user(tmp, &sc->seg); \
- regs->x##seg = tmp; }
-
-#define COPY_SEG_STRICT(seg) \
- { unsigned short tmp; \
- err |= __get_user(tmp, &sc->seg); \
- regs->x##seg = tmp|3; }
-
-#define GET_SEG(seg) \
- { unsigned short tmp; \
- err |= __get_user(tmp, &sc->seg); \
- loadsegment(seg,tmp); }
-
- GET_SEG(gs);
- GET_SEG(fs);
- COPY_SEG(es);
- COPY_SEG(ds);
- COPY(edi);
- COPY(esi);
- COPY(ebp);
- COPY(esp);
- COPY(ebx);
- COPY(edx);
- COPY(ecx);
- COPY(eip);
- COPY_SEG_STRICT(cs);
- COPY_SEG_STRICT(ss);
-
- {
- unsigned int tmpflags;
- err |= __get_user(tmpflags, &sc->eflags);
- regs->eflags = (regs->eflags & ~0x40DD5) | (tmpflags & 0x40DD5);
- regs->orig_eax = -1; /* disable syscall checks */
- }
-
- {
- struct _fpstate * buf;
- err |= __get_user(buf, &sc->fpstate);
- if (buf) {
- if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
- goto badframe;
- err |= restore_i387(buf);
- }
- }
-
- err |= __get_user(*peax, &sc->eax);
- return err;
-
-badframe:
- return 1;
-}
-
-asmlinkage int sys_sigreturn(unsigned long __unused)
-{
- struct pt_regs *regs = (struct pt_regs *) &__unused;
- struct sigframe *frame = (struct sigframe *)(regs->esp - 8);
- sigset_t set;
- int eax;
-
- if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
- goto badframe;
- if (__get_user(set.sig[0], &frame->sc.oldmask)
- || (_NSIG_WORDS > 1
- && __copy_from_user(&set.sig[1], &frame->extramask,
- sizeof(frame->extramask))))
- goto badframe;
-
- sigdelsetmask(&set, ~_BLOCKABLE);
- spin_lock_irq(&current->sigmask_lock);
- current->blocked = set;
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
- if (restore_sigcontext(regs, &frame->sc, &eax))
- goto badframe;
- return eax;
-
-badframe:
- force_sig(SIGSEGV, current);
- return 0;
-}
-
-asmlinkage int sys_rt_sigreturn(unsigned long __unused)
-{
- struct pt_regs *regs = (struct pt_regs *) &__unused;
- struct rt_sigframe *frame = (struct rt_sigframe *)(regs->esp - 4);
- sigset_t set;
- stack_t st;
- int eax;
-
- if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
- goto badframe;
- if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
- goto badframe;
-
- sigdelsetmask(&set, ~_BLOCKABLE);
- spin_lock_irq(&current->sigmask_lock);
- current->blocked = set;
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
-
- if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &eax))
- goto badframe;
-
- if (__copy_from_user(&st, &frame->uc.uc_stack, sizeof(st)))
- goto badframe;
- /* It is more difficult to avoid calling this function than to
- call it and ignore errors. */
- do_sigaltstack(&st, NULL, regs->esp);
-
- return eax;
-
-badframe:
- force_sig(SIGSEGV, current);
- return 0;
-}
-
-/*
- * Set up a signal frame.
- */
-
-static int
-setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate,
- struct pt_regs *regs, unsigned long mask)
-{
- int tmp, err = 0;
-
- tmp = 0;
- __asm__("movl %%gs,%0" : "=r"(tmp): "0"(tmp));
- err |= __put_user(tmp, (unsigned int *)&sc->gs);
- __asm__("movl %%fs,%0" : "=r"(tmp): "0"(tmp));
- err |= __put_user(tmp, (unsigned int *)&sc->fs);
-
- err |= __put_user(regs->xes, (unsigned int *)&sc->es);
- err |= __put_user(regs->xds, (unsigned int *)&sc->ds);
- err |= __put_user(regs->edi, &sc->edi);
- err |= __put_user(regs->esi, &sc->esi);
- err |= __put_user(regs->ebp, &sc->ebp);
- err |= __put_user(regs->esp, &sc->esp);
- err |= __put_user(regs->ebx, &sc->ebx);
- err |= __put_user(regs->edx, &sc->edx);
- err |= __put_user(regs->ecx, &sc->ecx);
- err |= __put_user(regs->eax, &sc->eax);
- err |= __put_user(current->thread.trap_no, &sc->trapno);
- err |= __put_user(current->thread.error_code, &sc->err);
- err |= __put_user(regs->eip, &sc->eip);
- err |= __put_user(regs->xcs, (unsigned int *)&sc->cs);
- err |= __put_user(regs->eflags, &sc->eflags);
- err |= __put_user(regs->esp, &sc->esp_at_signal);
- err |= __put_user(regs->xss, (unsigned int *)&sc->ss);
-
- tmp = save_i387(fpstate);
- if (tmp < 0)
- err = 1;
- else
- err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate);
-
- /* non-iBCS2 extensions.. */
- err |= __put_user(mask, &sc->oldmask);
- err |= __put_user(current->thread.cr2, &sc->cr2);
-
- return err;
-}
-
-/*
- * Determine which stack to use..
- */
-static inline void *
-get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
-{
- unsigned long esp;
-
- /* Default to using normal stack */
- esp = regs->esp;
-
- /* This is the X/Open sanctioned signal stack switching. */
- if (ka->sa.sa_flags & SA_ONSTACK) {
- if (sas_ss_flags(esp) == 0)
- esp = current->sas_ss_sp + current->sas_ss_size;
- }
-
- /* This is the legacy signal stack switching. */
- else if ((regs->xss & 0xffff) != __USER_DS &&
- !(ka->sa.sa_flags & SA_RESTORER) &&
- ka->sa.sa_restorer) {
- esp = (unsigned long) ka->sa.sa_restorer;
- }
-
- return (void *)((esp - frame_size) & -8ul);
-}
-
-static void setup_frame(int sig, struct k_sigaction *ka,
- sigset_t *set, struct pt_regs * regs)
-{
- struct sigframe *frame;
- int err = 0;
-
- frame = get_sigframe(ka, regs, sizeof(*frame));
-
- if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
- goto give_sigsegv;
-
- err |= __put_user((current->exec_domain
- && current->exec_domain->signal_invmap
- && sig < 32
- ? current->exec_domain->signal_invmap[sig]
- : sig),
- &frame->sig);
- if (err)
- goto give_sigsegv;
-
- err |= setup_sigcontext(&frame->sc, &frame->fpstate, regs, set->sig[0]);
- if (err)
- goto give_sigsegv;
-
- if (_NSIG_WORDS > 1) {
- err |= __copy_to_user(frame->extramask, &set->sig[1],
- sizeof(frame->extramask));
- }
- if (err)
- goto give_sigsegv;
-
- /* Set up to return from userspace. If provided, use a stub
- already in userspace. */
- if (ka->sa.sa_flags & SA_RESTORER) {
- err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
- } else {
- err |= __put_user(frame->retcode, &frame->pretcode);
- /* This is popl %eax ; movl $,%eax ; int $0x80 */
- err |= __put_user(0xb858, (short *)(frame->retcode+0));
- err |= __put_user(__NR_sigreturn, (int *)(frame->retcode+2));
- err |= __put_user(0x80cd, (short *)(frame->retcode+6));
- }
-
- if (err)
- goto give_sigsegv;
-
- /* Set up registers for signal handler */
- regs->esp = (unsigned long) frame;
- regs->eip = (unsigned long) ka->sa.sa_handler;
-
- set_fs(USER_DS);
- regs->xds = __USER_DS;
- regs->xes = __USER_DS;
- regs->xss = __USER_DS;
- regs->xcs = __USER_CS;
- regs->eflags &= ~TF_MASK;
-
-#if DEBUG_SIG
- printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
- current->comm, current->pid, frame, regs->eip, frame->pretcode);
-#endif
-
- return;
-
-give_sigsegv:
- if (sig == SIGSEGV)
- ka->sa.sa_handler = SIG_DFL;
- force_sig(SIGSEGV, current);
-}
-
-static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
- sigset_t *set, struct pt_regs * regs)
-{
- struct rt_sigframe *frame;
- int err = 0;
-
- frame = get_sigframe(ka, regs, sizeof(*frame));
-
- if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
- goto give_sigsegv;
-
- err |= __put_user((current->exec_domain
- && current->exec_domain->signal_invmap
- && sig < 32
- ? current->exec_domain->signal_invmap[sig]
- : sig),
- &frame->sig);
- err |= __put_user(&frame->info, &frame->pinfo);
- err |= __put_user(&frame->uc, &frame->puc);
- err |= copy_siginfo_to_user(&frame->info, info);
- if (err)
- goto give_sigsegv;
-
- /* Create the ucontext. */
- err |= __put_user(0, &frame->uc.uc_flags);
- err |= __put_user(0, &frame->uc.uc_link);
- err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp);
- err |= __put_user(sas_ss_flags(regs->esp),
- &frame->uc.uc_stack.ss_flags);
- err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
- err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->fpstate,
- regs, set->sig[0]);
- err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
- if (err)
- goto give_sigsegv;
-
- /* Set up to return from userspace. If provided, use a stub
- already in userspace. */
- if (ka->sa.sa_flags & SA_RESTORER) {
- err |= __put_user(ka->sa.sa_restorer, &frame->pretcode);
- } else {
- err |= __put_user(frame->retcode, &frame->pretcode);
- /* This is movl $,%eax ; int $0x80 */
- err |= __put_user(0xb8, (char *)(frame->retcode+0));
- err |= __put_user(__NR_rt_sigreturn, (int *)(frame->retcode+1));
- err |= __put_user(0x80cd, (short *)(frame->retcode+5));
- }
-
- if (err)
- goto give_sigsegv;
-
- /* Set up registers for signal handler */
- regs->esp = (unsigned long) frame;
- regs->eip = (unsigned long) ka->sa.sa_handler;
-
- set_fs(USER_DS);
- regs->xds = __USER_DS;
- regs->xes = __USER_DS;
- regs->xss = __USER_DS;
- regs->xcs = __USER_CS;
- regs->eflags &= ~TF_MASK;
-
-#if DEBUG_SIG
- printk("SIG deliver (%s:%d): sp=%p pc=%p ra=%p\n",
- current->comm, current->pid, frame, regs->eip, frame->pretcode);
-#endif
-
- return;
-
-give_sigsegv:
- if (sig == SIGSEGV)
- ka->sa.sa_handler = SIG_DFL;
- force_sig(SIGSEGV, current);
-}
-
-/*
- * OK, we're invoking a handler
- */
-
-static void
-handle_signal(unsigned long sig, struct k_sigaction *ka,
- siginfo_t *info, sigset_t *oldset, struct pt_regs * regs)
-{
- /* Are we from a system call? */
- if (regs->orig_eax >= 0) {
- /* If so, check system call restarting.. */
- switch (regs->eax) {
- case -ERESTARTNOHAND:
- regs->eax = -EINTR;
- break;
-
- case -ERESTARTSYS:
- if (!(ka->sa.sa_flags & SA_RESTART)) {
- regs->eax = -EINTR;
- break;
- }
- /* fallthrough */
- case -ERESTARTNOINTR:
- regs->eax = regs->orig_eax;
- regs->eip -= 2;
- }
- }
-
- /* Set up the stack frame */
- if (ka->sa.sa_flags & SA_SIGINFO)
- setup_rt_frame(sig, ka, info, oldset, regs);
- else
- setup_frame(sig, ka, oldset, regs);
-
- if (ka->sa.sa_flags & SA_ONESHOT)
- ka->sa.sa_handler = SIG_DFL;
-
- if (!(ka->sa.sa_flags & SA_NODEFER)) {
- spin_lock_irq(&current->sigmask_lock);
- sigorsets(&current->blocked,&current->blocked,&ka->sa.sa_mask);
- sigaddset(&current->blocked,sig);
- recalc_sigpending(current);
- spin_unlock_irq(&current->sigmask_lock);
- }
-}
-
-/*
- * Note that 'init' is a special process: it doesn't get signals it doesn't
- * want to handle. Thus you cannot kill init even with a SIGKILL even by
- * mistake.
- */
-int do_signal(struct pt_regs *regs, sigset_t *oldset)
-{
- siginfo_t info;
- struct k_sigaction *ka;
-
- /*
- * We want the common case to go fast, which
- * is why we may in certain cases get here from
- * kernel mode. Just return without doing anything
- * if so.
- */
- if ((regs->xcs & 2) != 2)
- return 1;
-
- if (!oldset)
- oldset = &current->blocked;
-
- for (;;) {
- unsigned long signr;
-
- spin_lock_irq(&current->sigmask_lock);
- signr = dequeue_signal(&current->blocked, &info);
- spin_unlock_irq(&current->sigmask_lock);
-
- if (!signr)
- break;
-
- if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
- /* Let the debugger run. */
- current->exit_code = signr;
- current->state = TASK_STOPPED;
- notify_parent(current, SIGCHLD);
- schedule();
-
- /* We're back. Did the debugger cancel the sig? */
- if (!(signr = current->exit_code))
- continue;
- current->exit_code = 0;
-
- /* The debugger continued. Ignore SIGSTOP. */
- if (signr == SIGSTOP)
- continue;
-
- /* Update the siginfo structure. Is this good? */
- if (signr != info.si_signo) {
- info.si_signo = signr;
- info.si_errno = 0;
- info.si_code = SI_USER;
- info.si_pid = current->p_pptr->pid;
- info.si_uid = current->p_pptr->uid;
- }
-
- /* If the (new) signal is now blocked, requeue it. */
- if (sigismember(&current->blocked, signr)) {
- send_sig_info(signr, &info, current);
- continue;
- }
- }
-
- ka = &current->sig->action[signr-1];
- if (ka->sa.sa_handler == SIG_IGN) {
- if (signr != SIGCHLD)
- continue;
- /* Check for SIGCHLD: it's special. */
- while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0)
- /* nothing */;
- continue;
- }
-
- if (ka->sa.sa_handler == SIG_DFL) {
- int exit_code = signr;
-
- /* Init gets no signals it doesn't want. */
- if (current->pid == 1)
- continue;
-
- switch (signr) {
- case SIGCONT: case SIGCHLD: case SIGWINCH: case SIGURG:
- continue;
-
- case SIGTSTP: case SIGTTIN: case SIGTTOU:
- if (is_orphaned_pgrp(current->pgrp))
- continue;
- /* FALLTHRU */
-
- case SIGSTOP: {
- struct signal_struct *sig;
- current->state = TASK_STOPPED;
- current->exit_code = signr;
- sig = current->p_pptr->sig;
- if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP))
- notify_parent(current, SIGCHLD);
- schedule();
- continue;
- }
-
- case SIGQUIT: case SIGILL: case SIGTRAP:
- case SIGABRT: case SIGFPE: case SIGSEGV:
- case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ:
- if (do_coredump(signr, regs))
- exit_code |= 0x80;
- /* FALLTHRU */
-
- default:
- sig_exit(signr, exit_code, &info);
- /* NOTREACHED */
- }
- }
-
- /* Reenable any watchpoints before delivering the
- * signal to user space. The processor register will
- * have been cleared if the watchpoint triggered
- * inside the kernel.
- */
- if ( current->thread.debugreg[7] != 0 )
- HYPERVISOR_set_debugreg(7, current->thread.debugreg[7]);
-
- /* Whee! Actually deliver the signal. */
- handle_signal(signr, ka, &info, oldset, regs);
- return 1;
- }
-
- /* Did we come from a system call? */
- if (regs->orig_eax >= 0) {
- /* Restart the system call - no handlers present */
- if (regs->eax == -ERESTARTNOHAND ||
- regs->eax == -ERESTARTSYS ||
- regs->eax == -ERESTARTNOINTR) {
- regs->eax = regs->orig_eax;
- regs->eip -= 2;
- }
- }
- return 0;
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c
deleted file mode 100644
index 52920cd0fc..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/time.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/* -*- Mode:C; c-basic-offset:4; tab-width:4 -*-
- ****************************************************************************
- * (C) 2002-2003 - Rolf Neugebauer - Intel Research Cambridge
- * (C) 2002-2003 - Keir Fraser - University of Cambridge
- ****************************************************************************
- *
- * File: arch/xen/kernel/time.c
- * Author: Rolf Neugebauer and Keir Fraser
- *
- * Description: Interface with Xen to get correct notion of time
- */
-
-/*
- * linux/arch/i386/kernel/time.c
- *
- * Copyright (C) 1991, 1992, 1995 Linus Torvalds
- *
- * This file contains the PC-specific time handling details:
- * reading the RTC at bootup, etc..
- * 1994-07-02 Alan Modra
- * fixed set_rtc_mmss, fixed time.year for >= 2000, new mktime
- * 1995-03-26 Markus Kuhn
- * fixed 500 ms bug at call to set_rtc_mmss, fixed DS12887
- * precision CMOS clock update
- * 1996-05-03 Ingo Molnar
- * fixed time warps in do_[slow|fast]_gettimeoffset()
- * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
- * "A Kernel Model for Precision Timekeeping" by Dave Mills
- * 1998-09-05 (Various)
- * More robust do_fast_gettimeoffset() algorithm implemented
- * (works with APM, Cyrix 6x86MX and Centaur C6),
- * monotonic gettimeofday() with fast_get_timeoffset(),
- * drift-proof precision TSC calibration on boot
- * (C. Scott Ananian <cananian@alumni.princeton.edu>, Andrew D.
- * Balsa <andrebalsa@altern.org>, Philip Gladstone <philip@raptor.com>;
- * ported from 2.0.35 Jumbo-9 by Michael Krause <m.krause@tu-harburg.de>).
- * 1998-12-16 Andrea Arcangeli
- * Fixed Jumbo-9 code in 2.1.131: do_gettimeofday was missing 1 jiffy
- * because was not accounting lost_ticks.
- * 1998-12-24 Copyright (C) 1998 Andrea Arcangeli
- * Fixed a xtime SMP race (we need the xtime_lock rw spinlock to
- * serialize accesses to xtime/lost_ticks).
- */
-
-#include <asm/smp.h>
-#include <asm/irq.h>
-#include <asm/msr.h>
-#include <asm/delay.h>
-#include <asm/mpspec.h>
-#include <asm/uaccess.h>
-#include <asm/processor.h>
-
-#include <asm/div64.h>
-#include <asm/hypervisor.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-
-#include <linux/mc146818rtc.h>
-#include <linux/kernel.h>
-#include <linux/interrupt.h>
-#include <linux/time.h>
-#include <linux/init.h>
-#include <linux/smp.h>
-#include <linux/irq.h>
-#include <linux/sysctl.h>
-
-spinlock_t rtc_lock = SPIN_LOCK_UNLOCKED;
-extern rwlock_t xtime_lock;
-extern unsigned long wall_jiffies;
-
-unsigned long cpu_khz; /* get this from Xen, used elsewhere */
-
-static unsigned int rdtsc_bitshift;
-static u32 st_scale_f; /* convert ticks -> usecs */
-static u32 st_scale_i; /* convert ticks -> usecs */
-
-/* These are peridically updated in shared_info, and then copied here. */
-static u32 shadow_tsc_stamp;
-static u64 shadow_system_time;
-static u32 shadow_time_version;
-static struct timeval shadow_tv;
-
-/*
- * We use this to ensure that gettimeofday() is monotonically increasing. We
- * only break this guarantee if the wall clock jumps backwards "a long way".
- */
-static struct timeval last_seen_tv = {0,0};
-
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
-/* Periodically propagate synchronised time base to the RTC and to Xen. */
-static long last_update_to_rtc, last_update_to_xen;
-#endif
-
-/* Periodically take synchronised time base from Xen, if we need it. */
-static long last_update_from_xen; /* UTC seconds when last read Xen clock. */
-
-/* Keep track of last time we did processing/updating of jiffies and xtime. */
-static u64 processed_system_time; /* System time (ns) at last processing. */
-
-#define NS_PER_TICK (1000000000ULL/HZ)
-
-#define HANDLE_USEC_UNDERFLOW(_tv) \
- do { \
- while ( (_tv).tv_usec < 0 ) \
- { \
- (_tv).tv_usec += 1000000; \
- (_tv).tv_sec--; \
- } \
- } while ( 0 )
-#define HANDLE_USEC_OVERFLOW(_tv) \
- do { \
- while ( (_tv).tv_usec >= 1000000 ) \
- { \
- (_tv).tv_usec -= 1000000; \
- (_tv).tv_sec++; \
- } \
- } while ( 0 )
-
-/* Dynamically-mapped IRQs. */
-static int time_irq, debug_irq;
-
-/* Does this guest OS track Xen time, or set its wall clock independently? */
-static int independent_wallclock = 0;
-static int __init __independent_wallclock(char *str)
-{
- independent_wallclock = 1;
- return 1;
-}
-__setup("independent_wallclock", __independent_wallclock);
-
-
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
-/*
- * In order to set the CMOS clock precisely, set_rtc_mmss has to be
- * called 500 ms after the second nowtime has started, because when
- * nowtime is written into the registers of the CMOS clock, it will
- * jump to the next second precisely 500 ms later. Check the Motorola
- * MC146818A or Dallas DS12887 data sheet for details.
- *
- * BUG: This routine does not handle hour overflow properly; it just
- * sets the minutes. Usually you'll only notice that after reboot!
- */
-static int set_rtc_mmss(unsigned long nowtime)
-{
- int retval = 0;
- int real_seconds, real_minutes, cmos_minutes;
- unsigned char save_control, save_freq_select;
-
- /* gets recalled with irq locally disabled */
- spin_lock(&rtc_lock);
- save_control = CMOS_READ(RTC_CONTROL);
- CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
-
- save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
- CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
-
- cmos_minutes = CMOS_READ(RTC_MINUTES);
- if ( !(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD )
- BCD_TO_BIN(cmos_minutes);
-
- /*
- * since we're only adjusting minutes and seconds, don't interfere with
- * hour overflow. This avoids messing with unknown time zones but requires
- * your RTC not to be off by more than 15 minutes
- */
- real_seconds = nowtime % 60;
- real_minutes = nowtime / 60;
- if ( ((abs(real_minutes - cmos_minutes) + 15)/30) & 1 )
- real_minutes += 30; /* correct for half hour time zone */
- real_minutes %= 60;
-
- if ( abs(real_minutes - cmos_minutes) < 30 )
- {
- if ( !(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD )
- {
- BIN_TO_BCD(real_seconds);
- BIN_TO_BCD(real_minutes);
- }
- CMOS_WRITE(real_seconds,RTC_SECONDS);
- CMOS_WRITE(real_minutes,RTC_MINUTES);
- }
- else
- {
- printk(KERN_WARNING
- "set_rtc_mmss: can't update from %d to %d\n",
- cmos_minutes, real_minutes);
- retval = -1;
- }
-
- /* The following flags have to be released exactly in this order,
- * otherwise the DS12887 (popular MC146818A clone with integrated
- * battery and quartz) will not reset the oscillator and will not
- * update precisely 500 ms later. You won't find this mentioned in
- * the Dallas Semiconductor data sheets, but who believes data
- * sheets anyway ... -- Markus Kuhn
- */
- CMOS_WRITE(save_control, RTC_CONTROL);
- CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
- spin_unlock(&rtc_lock);
-
- return retval;
-}
-#endif
-
-
-/*
- * Reads a consistent set of time-base values from Xen, into a shadow data
- * area. Must be called with the xtime_lock held for writing.
- */
-static void __get_time_values_from_xen(void)
-{
- do {
- shadow_time_version = HYPERVISOR_shared_info->time_version2;
- rmb();
- shadow_tv.tv_sec = HYPERVISOR_shared_info->wc_sec;
- shadow_tv.tv_usec = HYPERVISOR_shared_info->wc_usec;
- shadow_tsc_stamp = HYPERVISOR_shared_info->tsc_timestamp.tsc_bits;
- shadow_system_time = HYPERVISOR_shared_info->system_time;
- rmb();
- }
- while ( shadow_time_version != HYPERVISOR_shared_info->time_version1 );
-}
-
-#define TIME_VALUES_UP_TO_DATE \
- (shadow_time_version == HYPERVISOR_shared_info->time_version2)
-
-
-/*
- * Returns the system time elapsed, in ns, since the current shadow_timestamp
- * was calculated. Must be called with the xtime_lock held for reading.
- */
-static inline unsigned long __get_time_delta_usecs(void)
-{
- s32 delta_tsc;
- u32 low;
- u64 delta, tsc;
-
- rdtscll(tsc);
- low = (u32)(tsc >> rdtsc_bitshift);
- delta_tsc = (s32)(low - shadow_tsc_stamp);
- if ( unlikely(delta_tsc < 0) ) delta_tsc = 0;
- delta = ((u64)delta_tsc * st_scale_f);
- delta >>= 32;
- delta += ((u64)delta_tsc * st_scale_i);
-
- return (unsigned long)delta;
-}
-
-
-/*
- * Returns the current time-of-day in UTC timeval format.
- */
-void do_gettimeofday(struct timeval *tv)
-{
- unsigned long flags, lost;
- struct timeval _tv;
-
- again:
- read_lock_irqsave(&xtime_lock, flags);
-
- _tv.tv_usec = __get_time_delta_usecs();
- if ( (lost = (jiffies - wall_jiffies)) != 0 )
- _tv.tv_usec += lost * (1000000 / HZ);
- _tv.tv_sec = xtime.tv_sec;
- _tv.tv_usec += xtime.tv_usec;
-
- if ( unlikely(!TIME_VALUES_UP_TO_DATE) )
- {
- /*
- * We may have blocked for a long time, rendering our calculations
- * invalid (e.g. the time delta may have overflowed). Detect that
- * and recalculate with fresh values.
- */
- read_unlock_irqrestore(&xtime_lock, flags);
- write_lock_irqsave(&xtime_lock, flags);
- __get_time_values_from_xen();
- write_unlock_irqrestore(&xtime_lock, flags);
- goto again;
- }
-
- HANDLE_USEC_OVERFLOW(_tv);
-
- /* Ensure that time-of-day is monotonically increasing. */
- if ( (_tv.tv_sec < last_seen_tv.tv_sec) ||
- ((_tv.tv_sec == last_seen_tv.tv_sec) &&
- (_tv.tv_usec < last_seen_tv.tv_usec)) )
- _tv = last_seen_tv;
- last_seen_tv = _tv;
-
- read_unlock_irqrestore(&xtime_lock, flags);
-
- *tv = _tv;
-}
-
-
-/*
- * Sets the current time-of-day based on passed-in UTC timeval parameter.
- */
-void do_settimeofday(struct timeval *tv)
-{
- struct timeval newtv;
-
- if ( !independent_wallclock && !(start_info.flags & SIF_INITDOMAIN) )
- return;
-
- write_lock_irq(&xtime_lock);
-
- /*
- * Ensure we don't get blocked for a long time so that our time delta
- * overflows. If that were to happen then our shadow time values would
- * be stale, so we can retry with fresh ones.
- */
- again:
- tv->tv_usec -= __get_time_delta_usecs();
- if ( unlikely(!TIME_VALUES_UP_TO_DATE) )
- {
- __get_time_values_from_xen();
- goto again;
- }
-
- HANDLE_USEC_UNDERFLOW(*tv);
-
- newtv = *tv;
-
- tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ);
- HANDLE_USEC_UNDERFLOW(*tv);
-
- xtime = *tv;
- time_adjust = 0; /* stop active adjtime() */
- time_status |= STA_UNSYNC;
- time_maxerror = NTP_PHASE_LIMIT;
- time_esterror = NTP_PHASE_LIMIT;
-
- /* Reset all our running time counts. They make no sense now. */
- last_seen_tv.tv_sec = 0;
- last_update_from_xen = 0;
-
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
- if ( start_info.flags & SIF_INITDOMAIN )
- {
- dom0_op_t op;
- last_update_to_rtc = last_update_to_xen = 0;
- op.cmd = DOM0_SETTIME;
- op.u.settime.secs = newtv.tv_sec;
- op.u.settime.usecs = newtv.tv_usec;
- op.u.settime.system_time = shadow_system_time;
- write_unlock_irq(&xtime_lock);
- HYPERVISOR_dom0_op(&op);
- }
- else
-#endif
- {
- write_unlock_irq(&xtime_lock);
- }
-}
-
-
-asmlinkage long sys_stime(int *tptr)
-{
- int value;
- struct timeval tv;
-
- if ( !capable(CAP_SYS_TIME) )
- return -EPERM;
-
- if ( get_user(value, tptr) )
- return -EFAULT;
-
- tv.tv_sec = value;
- tv.tv_usec = 0;
-
- do_settimeofday(&tv);
-
- return 0;
-}
-
-
-/* Convert jiffies to system time. Call with xtime_lock held for reading. */
-static inline u64 __jiffies_to_st(unsigned long j)
-{
- return processed_system_time + ((j - jiffies) * NS_PER_TICK);
-}
-
-
-static inline void do_timer_interrupt(int irq, void *dev_id,
- struct pt_regs *regs)
-{
- s64 delta;
- unsigned long ticks = 0;
- long sec_diff;
-
- __get_time_values_from_xen();
-
- if ( (delta = (s64)(shadow_system_time - processed_system_time)) < 0 )
- {
- printk("Timer ISR: Time went backwards: %lld\n", delta);
- return;
- }
-
- /* Process elapsed jiffies since last call. */
- while ( delta >= NS_PER_TICK )
- {
- ticks++;
- delta -= NS_PER_TICK;
- processed_system_time += NS_PER_TICK;
- }
-
- if ( ticks != 0 )
- {
- do_timer_ticks(ticks);
-
- if ( user_mode(regs) )
- update_process_times_us(ticks, 0);
- else
- update_process_times_us(0, ticks);
- }
-
- /*
- * Take synchronised time from Xen once a minute if we're not
- * synchronised ourselves, and we haven't chosen to keep an independent
- * time base.
- */
- if ( !independent_wallclock &&
- ((time_status & STA_UNSYNC) != 0) &&
- (xtime.tv_sec > (last_update_from_xen + 60)) )
- {
- /* Adjust shadow timeval for jiffies that haven't updated xtime yet. */
- shadow_tv.tv_usec -= (jiffies - wall_jiffies) * (1000000/HZ);
- HANDLE_USEC_UNDERFLOW(shadow_tv);
-
- /*
- * Reset our running time counts if they are invalidated by a warp
- * backwards of more than 500ms.
- */
- sec_diff = xtime.tv_sec - shadow_tv.tv_sec;
- if ( unlikely(abs(sec_diff) > 1) ||
- unlikely(((sec_diff * 1000000) +
- xtime.tv_usec - shadow_tv.tv_usec) > 500000) )
- {
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
- last_update_to_rtc = last_update_to_xen = 0;
-#endif
- last_seen_tv.tv_sec = 0;
- }
-
- /* Update our unsynchronised xtime appropriately. */
- xtime = shadow_tv;
-
- last_update_from_xen = xtime.tv_sec;
- }
-
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
- if ( (start_info.flags & SIF_INITDOMAIN) &&
- ((time_status & STA_UNSYNC) == 0) )
- {
- /* Send synchronised time to Xen approximately every minute. */
- if ( xtime.tv_sec > (last_update_to_xen + 60) )
- {
- dom0_op_t op;
- struct timeval tv = xtime;
-
- tv.tv_usec += (jiffies - wall_jiffies) * (1000000/HZ);
- HANDLE_USEC_OVERFLOW(tv);
-
- op.cmd = DOM0_SETTIME;
- op.u.settime.secs = tv.tv_sec;
- op.u.settime.usecs = tv.tv_usec;
- op.u.settime.system_time = shadow_system_time;
- HYPERVISOR_dom0_op(&op);
-
- last_update_to_xen = xtime.tv_sec;
- }
-
- /*
- * If we have an externally synchronized Linux clock, then update CMOS
- * clock accordingly every ~11 minutes. Set_rtc_mmss() has to be called
- * as close as possible to 500 ms before the new second starts.
- */
- if ( (xtime.tv_sec > (last_update_to_rtc + 660)) &&
- (xtime.tv_usec >= (500000 - ((unsigned) tick) / 2)) &&
- (xtime.tv_usec <= (500000 + ((unsigned) tick) / 2)) )
- {
- if ( set_rtc_mmss(xtime.tv_sec) == 0 )
- last_update_to_rtc = xtime.tv_sec;
- else
- last_update_to_rtc = xtime.tv_sec - 600;
- }
- }
-#endif
-}
-
-
-static void timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
- write_lock(&xtime_lock);
- do_timer_interrupt(irq, NULL, regs);
- write_unlock(&xtime_lock);
-}
-
-static struct irqaction irq_timer = {
- timer_interrupt,
- SA_INTERRUPT,
- 0,
- "timer",
- NULL,
- NULL
-};
-
-
-/*
- * This function works out when the the next timer function has to be
- * executed (by looking at the timer list) and sets the Xen one-shot
- * domain timer to the appropriate value. This is typically called in
- * cpu_idle() before the domain blocks.
- *
- * The function returns a non-0 value on error conditions.
- *
- * It must be called with interrupts disabled.
- */
-extern spinlock_t timerlist_lock;
-int set_timeout_timer(void)
-{
- struct timer_list *timer;
- u64 alarm = 0;
- int ret = 0;
-
- spin_lock(&timerlist_lock);
-
- /*
- * This is safe against long blocking (since calculations are not based on
- * TSC deltas). It is also safe against warped system time since
- * suspend-resume is cooperative and we would first get locked out. It is
- * safe against normal updates of jiffies since interrupts are off.
- */
- if ( (timer = next_timer_event()) != NULL )
- alarm = __jiffies_to_st(timer->expires);
-
- /* Tasks on the timer task queue expect to be executed on the next tick. */
- if ( TQ_ACTIVE(tq_timer) )
- alarm = __jiffies_to_st(jiffies + 1);
-
- /* Failure is pretty bad, but we'd best soldier on. */
- if ( HYPERVISOR_set_timer_op(alarm) != 0 )
- ret = -1;
-
- spin_unlock(&timerlist_lock);
-
- return ret;
-}
-
-
-/* Time debugging. */
-static void dbg_time_int(int irq, void *dev_id, struct pt_regs *ptregs)
-{
- unsigned long flags, j;
- u64 s_now, j_st;
- struct timeval s_tv, tv;
-
- struct timer_list *timer;
- u64 t_st;
-
- read_lock_irqsave(&xtime_lock, flags);
- s_tv.tv_sec = shadow_tv.tv_sec;
- s_tv.tv_usec = shadow_tv.tv_usec;
- s_now = shadow_system_time;
- read_unlock_irqrestore(&xtime_lock, flags);
-
- do_gettimeofday(&tv);
-
- j = jiffies;
- j_st = __jiffies_to_st(j);
-
- timer = next_timer_event();
- t_st = __jiffies_to_st(timer->expires);
-
- printk(KERN_ALERT "time: shadow_st=0x%X:%08X\n",
- (u32)(s_now>>32), (u32)s_now);
- printk(KERN_ALERT "time: wct=%lds %ldus shadow_wct=%lds %ldus\n",
- tv.tv_sec, tv.tv_usec, s_tv.tv_sec, s_tv.tv_usec);
- printk(KERN_ALERT "time: jiffies=%lu(0x%X:%08X) timeout=%lu(0x%X:%08X)\n",
- jiffies,(u32)(j_st>>32), (u32)j_st,
- timer->expires,(u32)(t_st>>32), (u32)t_st);
- printk(KERN_ALERT "time: processed_system_time=0x%X:%08X\n",
- (u32)(processed_system_time>>32), (u32)processed_system_time);
-}
-
-static struct irqaction dbg_time = {
- dbg_time_int,
- SA_SHIRQ,
- 0,
- "timer_dbg",
- &dbg_time_int,
- NULL
-};
-
-void __init time_init(void)
-{
- unsigned long long alarm;
- u64 __cpu_khz, cpu_freq, scale, scale2;
-
- __cpu_khz = HYPERVISOR_shared_info->cpu_freq;
- do_div(__cpu_khz, 1000);
- cpu_khz = (u32)__cpu_khz;
- printk("Xen reported: %lu.%03lu MHz processor.\n",
- cpu_khz / 1000, cpu_khz % 1000);
-
- xtime.tv_sec = HYPERVISOR_shared_info->wc_sec;
- xtime.tv_usec = HYPERVISOR_shared_info->wc_usec;
- processed_system_time = shadow_system_time;
-
- rdtsc_bitshift = HYPERVISOR_shared_info->tsc_timestamp.tsc_bitshift;
- cpu_freq = HYPERVISOR_shared_info->cpu_freq;
-
- scale = 1000000LL << (32 + rdtsc_bitshift);
- do_div(scale, (u32)cpu_freq);
-
- if ( (cpu_freq >> 32) != 0 )
- {
- scale2 = 1000000LL << rdtsc_bitshift;
- do_div(scale2, (u32)(cpu_freq>>32));
- scale += scale2;
- }
-
- st_scale_f = scale & 0xffffffff;
- st_scale_i = scale >> 32;
-
- __get_time_values_from_xen();
- processed_system_time = shadow_system_time;
-
- time_irq = bind_virq_to_irq(VIRQ_TIMER);
- debug_irq = bind_virq_to_irq(VIRQ_DEBUG);
-
- (void)setup_irq(time_irq, &irq_timer);
- (void)setup_irq(debug_irq, &dbg_time);
-
- rdtscll(alarm);
-}
-
-void time_suspend(void)
-{
-}
-
-void time_resume(void)
-{
- unsigned long flags;
- write_lock_irqsave(&xtime_lock, flags);
- /* Get timebases for new environment. */
- __get_time_values_from_xen();
- /* Reset our own concept of passage of system time. */
- processed_system_time = shadow_system_time;
- /* Accept a warp in UTC (wall-clock) time. */
- last_seen_tv.tv_sec = 0;
- /* Make sure we resync UTC time with Xen on next timer interrupt. */
- last_update_from_xen = 0;
- write_unlock_irqrestore(&xtime_lock, flags);
-}
-
-/*
- * /proc/sys/xen: This really belongs in another file. It can stay here for
- * now however.
- */
-static ctl_table xen_subtable[] = {
- {1, "independent_wallclock", &independent_wallclock,
- sizeof(independent_wallclock), 0644, NULL, proc_dointvec},
- {0}
-};
-static ctl_table xen_table[] = {
- {123, "xen", NULL, 0, 0555, xen_subtable},
- {0}
-};
-static int __init xen_sysctl_init(void)
-{
- (void)register_sysctl_table(xen_table, 0);
- return 0;
-}
-__initcall(xen_sysctl_init);
diff --git a/xenolinux-2.4.25-sparse/arch/xen/kernel/traps.c b/xenolinux-2.4.25-sparse/arch/xen/kernel/traps.c
deleted file mode 100644
index b98e0cc6bb..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/kernel/traps.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * linux/arch/i386/traps.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * Pentium III FXSR, SSE support
- * Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * 'Traps.c' handles hardware traps and faults after we have saved some
- * state in 'asm.s'.
- */
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/errno.h>
-#include <linux/ptrace.h>
-#include <linux/timer.h>
-#include <linux/mm.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/spinlock.h>
-#include <linux/interrupt.h>
-#include <linux/highmem.h>
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-#include <asm/atomic.h>
-#include <asm/debugreg.h>
-#include <asm/desc.h>
-#include <asm/i387.h>
-
-#include <asm/smp.h>
-#include <asm/pgalloc.h>
-
-#include <asm/hypervisor.h>
-
-#include <linux/irq.h>
-#include <linux/module.h>
-
-asmlinkage int system_call(void);
-asmlinkage void lcall7(void);
-asmlinkage void lcall27(void);
-
-asmlinkage void divide_error(void);
-asmlinkage void debug(void);
-asmlinkage void int3(void);
-asmlinkage void overflow(void);
-asmlinkage void bounds(void);
-asmlinkage void invalid_op(void);
-asmlinkage void device_not_available(void);
-asmlinkage void double_fault(void);
-asmlinkage void coprocessor_segment_overrun(void);
-asmlinkage void invalid_TSS(void);
-asmlinkage void segment_not_present(void);
-asmlinkage void stack_segment(void);
-asmlinkage void general_protection(void);
-asmlinkage void page_fault(void);
-asmlinkage void safe_page_fault(void);
-asmlinkage void coprocessor_error(void);
-asmlinkage void simd_coprocessor_error(void);
-asmlinkage void alignment_check(void);
-asmlinkage void spurious_interrupt_bug(void);
-asmlinkage void machine_check(void);
-
-int kstack_depth_to_print = 24;
-
-
-/*
- * If the address is either in the .text section of the
- * kernel, or in the vmalloc'ed module regions, it *may*
- * be the address of a calling routine
- */
-
-#ifdef CONFIG_MODULES
-
-extern struct module *module_list;
-extern struct module kernel_module;
-
-static inline int kernel_text_address(unsigned long addr)
-{
- int retval = 0;
- struct module *mod;
-
- if (addr >= (unsigned long) &_stext &&
- addr <= (unsigned long) &_etext)
- return 1;
-
- for (mod = module_list; mod != &kernel_module; mod = mod->next) {
- /* mod_bound tests for addr being inside the vmalloc'ed
- * module area. Of course it'd be better to test only
- * for the .text subset... */
- if (mod_bound(addr, 0, mod)) {
- retval = 1;
- break;
- }
- }
-
- return retval;
-}
-
-#else
-
-static inline int kernel_text_address(unsigned long addr)
-{
- return (addr >= (unsigned long) &_stext &&
- addr <= (unsigned long) &_etext);
-}
-
-#endif
-
-void show_trace(unsigned long * stack)
-{
- int i;
- unsigned long addr;
-
- if (!stack)
- stack = (unsigned long*)&stack;
-
- printk("Call Trace: ");
- i = 1;
- while (((long) stack & (THREAD_SIZE-1)) != 0) {
- addr = *stack++;
- if (kernel_text_address(addr)) {
- if (i && ((i % 6) == 0))
- printk("\n ");
- printk("[<%08lx>] ", addr);
- i++;
- }
- }
- printk("\n");
-}
-
-void show_trace_task(struct task_struct *tsk)
-{
- unsigned long esp = tsk->thread.esp;
-
- /* User space on another CPU? */
- if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
- return;
- show_trace((unsigned long *)esp);
-}
-
-void show_stack(unsigned long * esp)
-{
- unsigned long *stack;
- int i;
-
- // debugging aid: "show_stack(NULL);" prints the
- // back trace for this cpu.
-
- if(esp==NULL)
- esp=(unsigned long*)&esp;
-
- stack = esp;
- for(i=0; i < kstack_depth_to_print; i++) {
- if (((long) stack & (THREAD_SIZE-1)) == 0)
- break;
- if (i && ((i % 8) == 0))
- printk("\n ");
- printk("%08lx ", *stack++);
- }
- printk("\n");
- show_trace(esp);
-}
-
-void show_registers(struct pt_regs *regs)
-{
- int in_kernel = 1;
- unsigned long esp;
- unsigned short ss;
-
- esp = (unsigned long) (&regs->esp);
- ss = __KERNEL_DS;
- if (regs->xcs & 2) {
- in_kernel = 0;
- esp = regs->esp;
- ss = regs->xss & 0xffff;
- }
- printk(KERN_ALERT "CPU: %d\n", smp_processor_id() );
- printk(KERN_ALERT "EIP: %04x:[<%08lx>] %s\n",
- 0xffff & regs->xcs, regs->eip, print_tainted());
- printk(KERN_ALERT "EFLAGS: %08lx\n",regs->eflags);
- printk(KERN_ALERT "eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n",
- regs->eax, regs->ebx, regs->ecx, regs->edx);
- printk(KERN_ALERT "esi: %08lx edi: %08lx ebp: %08lx esp: %08lx\n",
- regs->esi, regs->edi, regs->ebp, esp);
- printk(KERN_ALERT "ds: %04x es: %04x ss: %04x\n",
- regs->xds & 0xffff, regs->xes & 0xffff, ss);
- printk(KERN_ALERT "Process %s (pid: %d, stackpage=%08lx)",
- current->comm, current->pid, 4096+(unsigned long)current);
- /*
- * When in-kernel, we also print out the stack and code at the
- * time of the fault..
- */
- if (in_kernel) {
-
- printk(KERN_ALERT "\nStack: ");
- show_stack((unsigned long*)esp);
-
-#if 0
- {
- int i;
- printk(KERN_ALERT "\nCode: ");
- if(regs->eip < PAGE_OFFSET)
- goto bad;
-
- for(i=0;i<20;i++)
- {
- unsigned char c;
- if(__get_user(c, &((unsigned char*)regs->eip)[i])) {
-bad:
- printk(KERN_ALERT " Bad EIP value.");
- break;
- }
- printk("%02x ", c);
- }
- }
-#endif
- }
- printk(KERN_ALERT "\n");
-}
-
-spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
-
-void die(const char * str, struct pt_regs * regs, long err)
-{
- console_verbose();
- spin_lock_irq(&die_lock);
- bust_spinlocks(1);
- printk("%s: %04lx\n", str, err & 0xffff);
- show_registers(regs);
- bust_spinlocks(0);
- spin_unlock_irq(&die_lock);
- do_exit(SIGSEGV);
-}
-
-static inline void die_if_kernel(const char * str, struct pt_regs * regs, long err)
-{
- if (!(2 & regs->xcs))
- die(str, regs, err);
-}
-
-
-static void inline do_trap(int trapnr, int signr, char *str,
- struct pt_regs * regs, long error_code,
- siginfo_t *info)
-{
- if (!(regs->xcs & 2))
- goto kernel_trap;
-
- /*trap_signal:*/ {
- struct task_struct *tsk = current;
- tsk->thread.error_code = error_code;
- tsk->thread.trap_no = trapnr;
- if (info)
- force_sig_info(signr, info, tsk);
- else
- force_sig(signr, tsk);
- return;
- }
-
- kernel_trap: {
- unsigned long fixup = search_exception_table(regs->eip);
- if (fixup)
- regs->eip = fixup;
- else
- die(str, regs, error_code);
- return;
- }
-}
-
-#define DO_ERROR(trapnr, signr, str, name) \
-asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
-{ \
- do_trap(trapnr, signr, str, regs, error_code, NULL); \
-}
-
-#define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
-asmlinkage void do_##name(struct pt_regs * regs, long error_code) \
-{ \
- siginfo_t info; \
- info.si_signo = signr; \
- info.si_errno = 0; \
- info.si_code = sicode; \
- info.si_addr = (void *)siaddr; \
- do_trap(trapnr, signr, str, regs, error_code, &info); \
-}
-
-DO_ERROR_INFO( 0, SIGFPE, "divide error", divide_error, FPE_INTDIV, regs->eip)
-DO_ERROR( 3, SIGTRAP, "int3", int3)
-DO_ERROR( 4, SIGSEGV, "overflow", overflow)
-DO_ERROR( 5, SIGSEGV, "bounds", bounds)
-DO_ERROR_INFO( 6, SIGILL, "invalid operand", invalid_op, ILL_ILLOPN, regs->eip)
-DO_ERROR( 7, SIGSEGV, "device not available", device_not_available)
-DO_ERROR( 8, SIGSEGV, "double fault", double_fault)
-DO_ERROR( 9, SIGFPE, "coprocessor segment overrun", coprocessor_segment_overrun)
-DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
-DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
-DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
-DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
-DO_ERROR(18, SIGBUS, "machine check", machine_check)
-
-asmlinkage void do_general_protection(struct pt_regs * regs, long error_code)
-{
- /*
- * If we trapped on an LDT access then ensure that the default_ldt is
- * loaded, if nothing else. We load default_ldt lazily because LDT
- * switching costs time and many applications don't need it.
- */
- if ( unlikely((error_code & 6) == 4) )
- {
- unsigned long ldt;
- __asm__ __volatile__ ( "sldt %0" : "=r" (ldt) );
- if ( ldt == 0 )
- {
- mmu_update_t u;
- u.ptr = MMU_EXTENDED_COMMAND;
- u.ptr |= (unsigned long)&default_ldt[0];
- u.val = MMUEXT_SET_LDT | (5 << MMUEXT_CMD_SHIFT);
- HYPERVISOR_mmu_update(&u, 1);
- return;
- }
- }
-
- if (!(regs->xcs & 2))
- goto gp_in_kernel;
-
- current->thread.error_code = error_code;
- current->thread.trap_no = 13;
- force_sig(SIGSEGV, current);
- return;
-
-gp_in_kernel:
- {
- unsigned long fixup;
- fixup = search_exception_table(regs->eip);
- if (fixup) {
- regs->eip = fixup;
- return;
- }
- die("general protection fault", regs, error_code);
- }
-}
-
-
-asmlinkage void do_debug(struct pt_regs * regs, long error_code)
-{
- unsigned int condition;
- struct task_struct *tsk = current;
- siginfo_t info;
-
- condition = HYPERVISOR_get_debugreg(6);
-
- /* Mask out spurious debug traps due to lazy DR7 setting */
- if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {
- if (!tsk->thread.debugreg[7])
- goto clear_dr7;
- }
-
- /* Save debug status register where ptrace can see it */
- tsk->thread.debugreg[6] = condition;
-
- /* Mask out spurious TF errors due to lazy TF clearing */
- if (condition & DR_STEP) {
- /*
- * The TF error should be masked out only if the current
- * process is not traced and if the TRAP flag has been set
- * previously by a tracing process (condition detected by
- * the PT_DTRACE flag); remember that the i386 TRAP flag
- * can be modified by the process itself in user mode,
- * allowing programs to debug themselves without the ptrace()
- * interface.
- */
- if ((tsk->ptrace & (PT_DTRACE|PT_PTRACED)) == PT_DTRACE)
- goto clear_TF;
- }
-
- /* Ok, finally something we can handle */
- tsk->thread.trap_no = 1;
- tsk->thread.error_code = error_code;
- info.si_signo = SIGTRAP;
- info.si_errno = 0;
- info.si_code = TRAP_BRKPT;
-
- /* If this is a kernel mode trap, save the user PC on entry to
- * the kernel, that's what the debugger can make sense of.
- */
- info.si_addr = ((regs->xcs & 2) == 0) ? (void *)tsk->thread.eip :
- (void *)regs->eip;
- force_sig_info(SIGTRAP, &info, tsk);
-
- /* Disable additional traps. They'll be re-enabled when
- * the signal is delivered.
- */
- clear_dr7:
- HYPERVISOR_set_debugreg(7, 0);
- return;
-
- clear_TF:
- regs->eflags &= ~TF_MASK;
- return;
-}
-
-
-/*
- * Note that we play around with the 'TS' bit in an attempt to get
- * the correct behaviour even in the presence of the asynchronous
- * IRQ13 behaviour
- */
-void math_error(void *eip)
-{
- struct task_struct * task;
- siginfo_t info;
- unsigned short cwd, swd;
-
- /*
- * Save the info for the exception handler and clear the error.
- */
- task = current;
- save_init_fpu(task);
- task->thread.trap_no = 16;
- task->thread.error_code = 0;
- info.si_signo = SIGFPE;
- info.si_errno = 0;
- info.si_code = __SI_FAULT;
- info.si_addr = eip;
- /*
- * (~cwd & swd) will mask out exceptions that are not set to unmasked
- * status. 0x3f is the exception bits in these regs, 0x200 is the
- * C1 reg you need in case of a stack fault, 0x040 is the stack
- * fault bit. We should only be taking one exception at a time,
- * so if this combination doesn't produce any single exception,
- * then we have a bad program that isn't syncronizing its FPU usage
- * and it will suffer the consequences since we won't be able to
- * fully reproduce the context of the exception
- */
- cwd = get_fpu_cwd(task);
- swd = get_fpu_swd(task);
- switch (((~cwd) & swd & 0x3f) | (swd & 0x240)) {
- case 0x000:
- default:
- break;
- case 0x001: /* Invalid Op */
- case 0x040: /* Stack Fault */
- case 0x240: /* Stack Fault | Direction */
- info.si_code = FPE_FLTINV;
- break;
- case 0x002: /* Denormalize */
- case 0x010: /* Underflow */
- info.si_code = FPE_FLTUND;
- break;
- case 0x004: /* Zero Divide */
- info.si_code = FPE_FLTDIV;
- break;
- case 0x008: /* Overflow */
- info.si_code = FPE_FLTOVF;
- break;
- case 0x020: /* Precision */
- info.si_code = FPE_FLTRES;
- break;
- }
- force_sig_info(SIGFPE, &info, task);
-}
-
-asmlinkage void do_coprocessor_error(struct pt_regs * regs, long error_code)
-{
- ignore_irq13 = 1;
- math_error((void *)regs->eip);
-}
-
-void simd_math_error(void *eip)
-{
- struct task_struct * task;
- siginfo_t info;
- unsigned short mxcsr;
-
- /*
- * Save the info for the exception handler and clear the error.
- */
- task = current;
- save_init_fpu(task);
- task->thread.trap_no = 19;
- task->thread.error_code = 0;
- info.si_signo = SIGFPE;
- info.si_errno = 0;
- info.si_code = __SI_FAULT;
- info.si_addr = eip;
- /*
- * The SIMD FPU exceptions are handled a little differently, as there
- * is only a single status/control register. Thus, to determine which
- * unmasked exception was caught we must mask the exception mask bits
- * at 0x1f80, and then use these to mask the exception bits at 0x3f.
- */
- mxcsr = get_fpu_mxcsr(task);
- switch (~((mxcsr & 0x1f80) >> 7) & (mxcsr & 0x3f)) {
- case 0x000:
- default:
- break;
- case 0x001: /* Invalid Op */
- info.si_code = FPE_FLTINV;
- break;
- case 0x002: /* Denormalize */
- case 0x010: /* Underflow */
- info.si_code = FPE_FLTUND;
- break;
- case 0x004: /* Zero Divide */
- info.si_code = FPE_FLTDIV;
- break;
- case 0x008: /* Overflow */
- info.si_code = FPE_FLTOVF;
- break;
- case 0x020: /* Precision */
- info.si_code = FPE_FLTRES;
- break;
- }
- force_sig_info(SIGFPE, &info, task);
-}
-
-asmlinkage void do_simd_coprocessor_error(struct pt_regs * regs,
- long error_code)
-{
- if (cpu_has_xmm) {
- /* Handle SIMD FPU exceptions on PIII+ processors. */
- ignore_irq13 = 1;
- simd_math_error((void *)regs->eip);
- } else {
- die_if_kernel("cache flush denied", regs, error_code);
- current->thread.trap_no = 19;
- current->thread.error_code = error_code;
- force_sig(SIGSEGV, current);
- }
-}
-
-asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs,
- long error_code)
-{
-}
-
-/*
- * 'math_state_restore()' saves the current math information in the
- * old math state array, and gets the new ones from the current task
- *
- * Careful.. There are problems with IBM-designed IRQ13 behaviour.
- * Don't touch unless you *really* know how it works.
- */
-asmlinkage void math_state_restore(struct pt_regs regs)
-{
- /*
- * A trap in kernel mode can be ignored. It'll be the fast XOR or
- * copying libraries, which will correctly save/restore state and
- * reset the TS bit in CR0.
- */
- if ( (regs.xcs & 2) == 0 )
- return;
-
- if (current->used_math) {
- restore_fpu(current);
- } else {
- init_fpu();
- }
- current->flags |= PF_USEDFPU; /* So we fnsave on switch_to() */
-}
-
-
-#define _set_gate(gate_addr,type,dpl,addr) \
-do { \
- int __d0, __d1; \
- __asm__ __volatile__ ("movw %%dx,%%ax\n\t" \
- "movw %4,%%dx\n\t" \
- "movl %%eax,%0\n\t" \
- "movl %%edx,%1" \
- :"=m" (*((long *) (gate_addr))), \
- "=m" (*(1+(long *) (gate_addr))), "=&a" (__d0), "=&d" (__d1) \
- :"i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
- "3" ((char *) (addr)),"2" (__KERNEL_CS << 16)); \
-} while (0)
-
-static void __init set_call_gate(void *a, void *addr)
-{
- _set_gate(a,12,3,addr);
-}
-
-
-/* NB. All these are "trap gates" (i.e. events_mask isn't cleared). */
-static trap_info_t trap_table[] = {
- { 0, 0, __KERNEL_CS, (unsigned long)divide_error },
- { 1, 0, __KERNEL_CS, (unsigned long)debug },
- { 3, 3, __KERNEL_CS, (unsigned long)int3 },
- { 4, 3, __KERNEL_CS, (unsigned long)overflow },
- { 5, 3, __KERNEL_CS, (unsigned long)bounds },
- { 6, 0, __KERNEL_CS, (unsigned long)invalid_op },
- { 7, 0, __KERNEL_CS, (unsigned long)device_not_available },
- { 8, 0, __KERNEL_CS, (unsigned long)double_fault },
- { 9, 0, __KERNEL_CS, (unsigned long)coprocessor_segment_overrun },
- { 10, 0, __KERNEL_CS, (unsigned long)invalid_TSS },
- { 11, 0, __KERNEL_CS, (unsigned long)segment_not_present },
- { 12, 0, __KERNEL_CS, (unsigned long)stack_segment },
- { 13, 0, __KERNEL_CS, (unsigned long)general_protection },
- { 14, 0, __KERNEL_CS, (unsigned long)page_fault },
- { 15, 0, __KERNEL_CS, (unsigned long)spurious_interrupt_bug },
- { 16, 0, __KERNEL_CS, (unsigned long)coprocessor_error },
- { 17, 0, __KERNEL_CS, (unsigned long)alignment_check },
- { 18, 0, __KERNEL_CS, (unsigned long)machine_check },
- { 19, 0, __KERNEL_CS, (unsigned long)simd_coprocessor_error },
- { SYSCALL_VECTOR,
- 3, __KERNEL_CS, (unsigned long)system_call },
- { 0, 0, 0, 0 }
-};
-
-
-void __init trap_init(void)
-{
- HYPERVISOR_set_trap_table(trap_table);
- HYPERVISOR_set_fast_trap(SYSCALL_VECTOR);
-
- /*
- * The default LDT is a single-entry callgate to lcall7 for iBCS and a
- * callgate to lcall27 for Solaris/x86 binaries.
- */
- clear_page(&default_ldt[0]);
- set_call_gate(&default_ldt[0],lcall7);
- set_call_gate(&default_ldt[4],lcall27);
- __make_page_readonly(&default_ldt[0]);
-
- cpu_init();
-}
-
-
-/*
- * install_safe_pf_handler / install_normal_pf_handler:
- *
- * These are used within the failsafe_callback handler in entry.S to avoid
- * taking a full page fault when reloading FS and GS. This is because FS and
- * GS could be invalid at pretty much any point while Xenolinux executes (we
- * don't set them to safe values on entry to the kernel). At *any* point Xen
- * may be entered due to a hardware interrupt --- on exit from Xen an invalid
- * FS/GS will cause our failsafe_callback to be executed. This could occur,
- * for example, while the mmmu_update_queue is in an inconsistent state. This
- * is disastrous because the normal page-fault handler touches the update
- * queue!
- *
- * Fortunately, within the failsafe handler it is safe to force DS/ES/FS/GS
- * to zero if they cannot be reloaded -- at this point executing a normal
- * page fault would not change this effect. The safe page-fault handler
- * ensures this end result (blow away the selector value) without the dangers
- * of the normal page-fault handler.
- *
- * NB. Perhaps this can all go away after we have implemented writeable
- * page tables. :-)
- */
-
-asmlinkage void do_safe_page_fault(struct pt_regs *regs,
- unsigned long error_code,
- unsigned long address)
-{
- unsigned long fixup;
-
- if ( (fixup = search_exception_table(regs->eip)) != 0 )
- {
- regs->eip = fixup;
- return;
- }
-
- die("Unhandleable 'safe' page fault!", regs, error_code);
-}
-
-unsigned long install_safe_pf_handler(void)
-{
- static trap_info_t safe_pf[] = {
- { 14, 0, __KERNEL_CS, (unsigned long)safe_page_fault },
- { 0, 0, 0, 0 }
- };
- unsigned long flags;
- local_irq_save(flags);
- HYPERVISOR_set_trap_table(safe_pf);
- return flags; /* This is returned in %%eax */
-}
-
-__attribute__((regparm(3))) /* This function take its arg in %%eax */
-void install_normal_pf_handler(unsigned long flags)
-{
- static trap_info_t normal_pf[] = {
- { 14, 0, __KERNEL_CS, (unsigned long)page_fault },
- { 0, 0, 0, 0 }
- };
- HYPERVISOR_set_trap_table(normal_pf);
- local_irq_restore(flags);
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/lib/Makefile b/xenolinux-2.4.25-sparse/arch/xen/lib/Makefile
deleted file mode 100644
index 5e00fdc135..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/lib/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-
-.S.o:
- $(CC) $(AFLAGS) -c $< -o $*.o
-
-L_TARGET = lib.a
-
-obj-y = checksum.o old-checksum.o delay.o \
- usercopy.o getuser.o \
- memcpy.o strstr.o xen_proc.o
-
-obj-$(CONFIG_X86_USE_3DNOW) += mmx.o
-obj-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o
-obj-$(CONFIG_DEBUG_IOVIRT) += iodebug.o
-
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/lib/delay.c b/xenolinux-2.4.25-sparse/arch/xen/lib/delay.c
deleted file mode 100644
index 0035bed074..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/lib/delay.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Precise Delay Loops for i386
- *
- * Copyright (C) 1993 Linus Torvalds
- * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
- *
- * The __delay function must _NOT_ be inlined as its execution time
- * depends wildly on alignment on many x86 processors. The additional
- * jump magic is needed to get the timing stable on all the CPU's
- * we have to worry about.
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <asm/processor.h>
-#include <asm/delay.h>
-
-#ifdef CONFIG_SMP
-#include <asm/smp.h>
-#endif
-
-void __delay(unsigned long loops)
-{
- unsigned long bclock, now;
-
- rdtscl(bclock);
- do
- {
- rep_nop();
- rdtscl(now);
- } while ((now-bclock) < loops);
-}
-
-inline void __const_udelay(unsigned long xloops)
-{
- int d0;
- __asm__("mull %0"
- :"=d" (xloops), "=&a" (d0)
- :"1" (xloops),"0" (current_cpu_data.loops_per_jiffy));
- __delay(xloops * HZ);
-}
-
-void __udelay(unsigned long usecs)
-{
- __const_udelay(usecs * 0x000010c6); /* 2**32 / 1000000 */
-}
-
-void __ndelay(unsigned long nsecs)
-{
- __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/lib/xen_proc.c b/xenolinux-2.4.25-sparse/arch/xen/lib/xen_proc.c
deleted file mode 100644
index 9c06dcdd89..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/lib/xen_proc.c
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#include <linux/config.h>
-#include <linux/proc_fs.h>
-
-static struct proc_dir_entry *xen_base;
-
-struct proc_dir_entry *create_xen_proc_entry(const char *name, mode_t mode)
-{
- if ( xen_base == NULL )
- if ( (xen_base = proc_mkdir("xen", &proc_root)) == NULL )
- panic("Couldn't create /proc/xen");
- return create_proc_entry(name, mode, xen_base);
-}
-
-void remove_xen_proc_entry(const char *name)
-{
- remove_proc_entry(name, xen_base);
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/mm/Makefile b/xenolinux-2.4.25-sparse/arch/xen/mm/Makefile
deleted file mode 100644
index d0d16114b6..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/mm/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Makefile for the linux i386-specific parts of the memory manager.
-#
-# Note! Dependencies are done automagically by 'make dep', which also
-# removes any old dependencies. DON'T put your own dependencies here
-# unless it's something special (ie not a .c file).
-#
-# Note 2! The CFLAGS definition is now in the main makefile...
-
-O_TARGET := mm.o
-
-obj-y := init.o fault.o extable.o pageattr.o hypervisor.o ioremap.o
-
-export-objs := pageattr.o
-
-include $(TOPDIR)/Rules.make
diff --git a/xenolinux-2.4.25-sparse/arch/xen/mm/fault.c b/xenolinux-2.4.25-sparse/arch/xen/mm/fault.c
deleted file mode 100644
index 496e974487..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/mm/fault.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * linux/arch/i386/mm/fault.c
- *
- * Copyright (C) 1995 Linus Torvalds
- */
-
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/ptrace.h>
-#include <linux/mman.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-#include <linux/tty.h>
-#include <linux/vt_kern.h> /* For unblank_screen() */
-
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/hardirq.h>
-
-extern void die(const char *,struct pt_regs *,long);
-
-pgd_t *cur_pgd;
-
-extern spinlock_t timerlist_lock;
-
-/*
- * Unlock any spinlocks which will prevent us from getting the
- * message out (timerlist_lock is acquired through the
- * console unblank code)
- */
-void bust_spinlocks(int yes)
-{
- spin_lock_init(&timerlist_lock);
- if (yes) {
- oops_in_progress = 1;
- } else {
- int loglevel_save = console_loglevel;
-#ifdef CONFIG_VT
- unblank_screen();
-#endif
- oops_in_progress = 0;
- /*
- * OK, the message is on the console. Now we call printk()
- * without oops_in_progress set so that printk will give klogd
- * a poke. Hold onto your hats...
- */
- console_loglevel = 15; /* NMI oopser may have shut the console up */
- printk(" ");
- console_loglevel = loglevel_save;
- }
-}
-
-/*
- * This routine handles page faults. It determines the address,
- * and the problem, and then passes it off to one of the appropriate
- * routines.
- *
- * error_code:
- * bit 0 == 0 means no page found, 1 means protection fault
- * bit 1 == 0 means read, 1 means write
- * bit 2 == 0 means kernel, 1 means user-mode
- */
-asmlinkage void do_page_fault(struct pt_regs *regs,
- unsigned long error_code,
- unsigned long address)
-{
- struct task_struct *tsk = current;
- struct mm_struct *mm;
- struct vm_area_struct * vma;
- unsigned long page;
- unsigned long fixup;
- int write;
- siginfo_t info;
-
- /* Set the "privileged fault" bit to something sane. */
- error_code &= 3;
- error_code |= (regs->xcs & 2) << 1;
-
-#if MMU_UPDATE_DEBUG > 0
- if ( (error_code == 0) && (address >= TASK_SIZE) )
- {
- unsigned long paddr = __pa(address);
- int i;
- for ( i = 0; i < mmu_update_queue_idx; i++ )
- {
- if ( update_debug_queue[i].ptr == paddr )
- {
- printk("XXX now(EIP=%08lx:ptr=%08lx) "
- "then(%s/%d:p/v=%08lx/%08lx)\n",
- regs->eip, address,
- update_debug_queue[i].file,
- update_debug_queue[i].line,
- update_debug_queue[i].ptr,
- update_debug_queue[i].val);
- }
- }
- }
-#endif
-
- if ( flush_page_update_queue() != 0 ) return;
-
- /*
- * We fault-in kernel-space virtual memory on-demand. The
- * 'reference' page table is init_mm.pgd.
- *
- * NOTE! We MUST NOT take any locks for this case. We may
- * be in an interrupt or a critical region, and should
- * only copy the information from the master page table,
- * nothing more.
- *
- * This verifies that the fault happens in kernel space
- * (error_code & 4) == 0, and that the fault was not a
- * protection error (error_code & 1) == 0.
- */
- if (address >= TASK_SIZE && !(error_code & 5))
- goto vmalloc_fault;
-
- mm = tsk->mm;
- info.si_code = SEGV_MAPERR;
-
- /*
- * If we're in an interrupt or have no user
- * context, we must not take the fault..
- */
- if (in_interrupt() || !mm)
- goto no_context;
-
- down_read(&mm->mmap_sem);
-
- vma = find_vma(mm, address);
- if (!vma)
- goto bad_area;
- if (vma->vm_start <= address)
- goto good_area;
- if (!(vma->vm_flags & VM_GROWSDOWN))
- goto bad_area;
- if (error_code & 4) {
- /*
- * accessing the stack below %esp is always a bug.
- * The "+ 32" is there due to some instructions (like
- * pusha) doing post-decrement on the stack and that
- * doesn't show up until later..
- */
- if (address + 32 < regs->esp)
- goto bad_area;
- }
- if (expand_stack(vma, address))
- goto bad_area;
-/*
- * Ok, we have a good vm_area for this memory access, so
- * we can handle it..
- */
-good_area:
- info.si_code = SEGV_ACCERR;
- write = 0;
- switch (error_code & 3) {
- default: /* 3: write, present */
- /* fall through */
- case 2: /* write, not present */
- if (!(vma->vm_flags & VM_WRITE))
- goto bad_area;
- write++;
- break;
- case 1: /* read, present */
- goto bad_area;
- case 0: /* read, not present */
- if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
- goto bad_area;
- }
-
- survive:
- /*
- * If for any reason at all we couldn't handle the fault,
- * make sure we exit gracefully rather than endlessly redo
- * the fault.
- */
- switch (handle_mm_fault(mm, vma, address, write)) {
- case 1:
- tsk->min_flt++;
- break;
- case 2:
- tsk->maj_flt++;
- break;
- case 0:
- goto do_sigbus;
- default:
- goto out_of_memory;
- }
-
- up_read(&mm->mmap_sem);
- return;
-
-/*
- * Something tried to access memory that isn't in our memory map..
- * Fix it, but check if it's kernel or user first..
- */
-bad_area:
- up_read(&mm->mmap_sem);
-
- /* User mode accesses just cause a SIGSEGV */
- if (error_code & 4) {
- tsk->thread.cr2 = address;
- /* Kernel addresses are always protection faults */
- tsk->thread.error_code = error_code | (address >= TASK_SIZE);
- tsk->thread.trap_no = 14;
- info.si_signo = SIGSEGV;
- info.si_errno = 0;
- /* info.si_code has been set above */
- info.si_addr = (void *)address;
- force_sig_info(SIGSEGV, &info, tsk);
- return;
- }
-
-no_context:
- /* Are we prepared to handle this kernel fault? */
- if ((fixup = search_exception_table(regs->eip)) != 0) {
- regs->eip = fixup;
- return;
- }
-
-/*
- * Oops. The kernel tried to access some bad page. We'll have to
- * terminate things with extreme prejudice.
- */
-
- bust_spinlocks(1);
-
- if (address < PAGE_SIZE)
- printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
- else
- printk(KERN_ALERT "Unable to handle kernel paging request");
- printk(" at virtual address %08lx\n",address);
- printk(" printing eip:\n");
- printk("%08lx\n", regs->eip);
- page = ((unsigned long *) cur_pgd)[address >> 22];
- printk(KERN_ALERT "*pde=%08lx(%08lx)\n", page, machine_to_phys(page));
- if (page & 1) {
- page &= PAGE_MASK;
- address &= 0x003ff000;
- page = machine_to_phys(page);
- page = ((unsigned long *) __va(page))[address >> PAGE_SHIFT];
- printk(KERN_ALERT "*pte=%08lx(%08lx)\n", page,
- machine_to_phys(page));
- }
- die("Oops", regs, error_code);
- bust_spinlocks(0);
- do_exit(SIGKILL);
-
-/*
- * We ran out of memory, or some other thing happened to us that made
- * us unable to handle the page fault gracefully.
- */
-out_of_memory:
- if (tsk->pid == 1) {
- yield();
- goto survive;
- }
- up_read(&mm->mmap_sem);
- printk("VM: killing process %s\n", tsk->comm);
- if (error_code & 4)
- do_exit(SIGKILL);
- goto no_context;
-
-do_sigbus:
- up_read(&mm->mmap_sem);
-
- /*
- * Send a sigbus, regardless of whether we were in kernel
- * or user mode.
- */
- tsk->thread.cr2 = address;
- tsk->thread.error_code = error_code;
- tsk->thread.trap_no = 14;
- info.si_signo = SIGBUS;
- info.si_errno = 0;
- info.si_code = BUS_ADRERR;
- info.si_addr = (void *)address;
- force_sig_info(SIGBUS, &info, tsk);
-
- /* Kernel mode? Handle exceptions or die */
- if (!(error_code & 4))
- goto no_context;
- return;
-
-vmalloc_fault:
- {
- /*
- * Synchronize this task's top level page-table
- * with the 'reference' page table.
- *
- * Do _not_ use "tsk" here. We might be inside
- * an interrupt in the middle of a task switch..
- */
- int offset = __pgd_offset(address);
- pgd_t *pgd, *pgd_k;
- pmd_t *pmd, *pmd_k;
- pte_t *pte_k;
-
- pgd = offset + cur_pgd;
- pgd_k = init_mm.pgd + offset;
-
- if (!pgd_present(*pgd_k))
- goto no_context;
- set_pgd(pgd, *pgd_k);
-
- pmd = pmd_offset(pgd, address);
- pmd_k = pmd_offset(pgd_k, address);
- if (!pmd_present(*pmd_k))
- goto no_context;
- set_pmd(pmd, *pmd_k);
- XEN_flush_page_update_queue(); /* flush PMD update */
-
- pte_k = pte_offset(pmd_k, address);
- if (!pte_present(*pte_k))
- goto no_context;
- return;
- }
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/mm/hypervisor.c b/xenolinux-2.4.25-sparse/arch/xen/mm/hypervisor.c
deleted file mode 100644
index 39f6863d66..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/mm/hypervisor.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/******************************************************************************
- * xen/mm/hypervisor.c
- *
- * Update page tables via the hypervisor.
- *
- * Copyright (c) 2002, K A Fraser
- */
-
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <asm/hypervisor.h>
-#include <asm/page.h>
-#include <asm/pgtable.h>
-#include <asm/multicall.h>
-
-/*
- * This suffices to protect us if we ever move to SMP domains.
- * Further, it protects us against interrupts. At the very least, this is
- * required for the network driver which flushes the update queue before
- * pushing new receive buffers.
- */
-static spinlock_t update_lock = SPIN_LOCK_UNLOCKED;
-
-#define QUEUE_SIZE 2048
-static mmu_update_t update_queue[QUEUE_SIZE];
-unsigned int mmu_update_queue_idx = 0;
-#define idx mmu_update_queue_idx
-
-#if MMU_UPDATE_DEBUG > 0
-page_update_debug_t update_debug_queue[QUEUE_SIZE] = {{0}};
-#undef queue_l1_entry_update
-#undef queue_l2_entry_update
-static void DEBUG_allow_pt_reads(void)
-{
- pte_t *pte;
- mmu_update_t update;
- int i;
- for ( i = idx-1; i >= 0; i-- )
- {
- pte = update_debug_queue[i].ptep;
- if ( pte == NULL ) continue;
- update_debug_queue[i].ptep = NULL;
- update.ptr = virt_to_machine(pte);
- update.val = update_debug_queue[i].pteval;
- HYPERVISOR_mmu_update(&update, 1);
- }
-}
-static void DEBUG_disallow_pt_read(unsigned long va)
-{
- pte_t *pte;
- pmd_t *pmd;
- pgd_t *pgd;
- unsigned long pteval;
- /*
- * We may fault because of an already outstanding update.
- * That's okay -- it'll get fixed up in the fault handler.
- */
- mmu_update_t update;
- pgd = pgd_offset_k(va);
- pmd = pmd_offset(pgd, va);
- pte = pte_offset(pmd, va);
- update.ptr = virt_to_machine(pte);
- pteval = *(unsigned long *)pte;
- update.val = pteval & ~_PAGE_PRESENT;
- HYPERVISOR_mmu_update(&update, 1);
- update_debug_queue[idx].ptep = pte;
- update_debug_queue[idx].pteval = pteval;
-}
-#endif
-
-#if MMU_UPDATE_DEBUG > 1
-#undef queue_pt_switch
-#undef queue_tlb_flush
-#undef queue_invlpg
-#undef queue_pgd_pin
-#undef queue_pgd_unpin
-#undef queue_pte_pin
-#undef queue_pte_unpin
-#endif
-
-
-/*
- * MULTICALL_flush_page_update_queue:
- * This is a version of the flush which queues as part of a multicall.
- */
-void MULTICALL_flush_page_update_queue(void)
-{
- unsigned long flags;
- unsigned int _idx;
- spin_lock_irqsave(&update_lock, flags);
- if ( (_idx = idx) != 0 )
- {
-#if MMU_UPDATE_DEBUG > 1
- printk("Flushing %d entries from pt update queue\n", idx);
-#endif
-#if MMU_UPDATE_DEBUG > 0
- DEBUG_allow_pt_reads();
-#endif
- idx = 0;
- wmb(); /* Make sure index is cleared first to avoid double updates. */
- queue_multicall2(__HYPERVISOR_mmu_update,
- (unsigned long)update_queue,
- _idx);
- }
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-static inline void __flush_page_update_queue(void)
-{
- unsigned int _idx = idx;
-#if MMU_UPDATE_DEBUG > 1
- printk("Flushing %d entries from pt update queue\n", idx);
-#endif
-#if MMU_UPDATE_DEBUG > 0
- DEBUG_allow_pt_reads();
-#endif
- idx = 0;
- wmb(); /* Make sure index is cleared first to avoid double updates. */
- HYPERVISOR_mmu_update(update_queue, _idx);
-}
-
-void _flush_page_update_queue(void)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- if ( idx != 0 ) __flush_page_update_queue();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-static inline void increment_index(void)
-{
- idx++;
- if ( unlikely(idx == QUEUE_SIZE) ) __flush_page_update_queue();
-}
-
-void queue_l1_entry_update(pte_t *ptr, unsigned long val)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
-#if MMU_UPDATE_DEBUG > 0
- DEBUG_disallow_pt_read((unsigned long)ptr);
-#endif
- update_queue[idx].ptr = virt_to_machine(ptr);
- update_queue[idx].val = val;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_l2_entry_update(pmd_t *ptr, unsigned long val)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = virt_to_machine(ptr);
- update_queue[idx].val = val;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_pt_switch(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = phys_to_machine(ptr);
- update_queue[idx].ptr |= MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_NEW_BASEPTR;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_tlb_flush(void)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_TLB_FLUSH;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_invlpg(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = MMU_EXTENDED_COMMAND;
- update_queue[idx].val = ptr & PAGE_MASK;
- update_queue[idx].val |= MMUEXT_INVLPG;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_pgd_pin(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = phys_to_machine(ptr);
- update_queue[idx].ptr |= MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_PIN_L2_TABLE;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_pgd_unpin(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = phys_to_machine(ptr);
- update_queue[idx].ptr |= MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_UNPIN_TABLE;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_pte_pin(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = phys_to_machine(ptr);
- update_queue[idx].ptr |= MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_PIN_L1_TABLE;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_pte_unpin(unsigned long ptr)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = phys_to_machine(ptr);
- update_queue[idx].ptr |= MMU_EXTENDED_COMMAND;
- update_queue[idx].val = MMUEXT_UNPIN_TABLE;
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
-
-void queue_set_ldt(unsigned long ptr, unsigned long len)
-{
- unsigned long flags;
- spin_lock_irqsave(&update_lock, flags);
- update_queue[idx].ptr = MMU_EXTENDED_COMMAND | ptr;
- update_queue[idx].val = MMUEXT_SET_LDT | (len << MMUEXT_CMD_SHIFT);
- increment_index();
- spin_unlock_irqrestore(&update_lock, flags);
-}
diff --git a/xenolinux-2.4.25-sparse/arch/xen/mm/init.c b/xenolinux-2.4.25-sparse/arch/xen/mm/init.c
deleted file mode 100644
index 6bfdd3ae9f..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/mm/init.c
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * linux/arch/i386/mm/init.c
- *
- * Copyright (C) 1995 Linus Torvalds
- *
- * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
- */
-
-#include <linux/config.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/ptrace.h>
-#include <linux/mman.h>
-#include <linux/mm.h>
-#include <linux/swap.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#ifdef CONFIG_BLK_DEV_INITRD
-#include <linux/blk.h>
-#endif
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-#include <linux/bootmem.h>
-#include <linux/slab.h>
-
-#include <asm/processor.h>
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/pgalloc.h>
-#include <asm/dma.h>
-#include <asm/apic.h>
-#include <asm/tlb.h>
-
-mmu_gather_t mmu_gathers[NR_CPUS];
-unsigned long highstart_pfn, highend_pfn;
-static unsigned long totalram_pages;
-static unsigned long totalhigh_pages;
-
-int do_check_pgt_cache(int low, int high)
-{
- int freed = 0;
- if(pgtable_cache_size > high) {
- do {
- if (!QUICKLIST_EMPTY(pgd_quicklist)) {
- free_pgd_slow(get_pgd_fast());
- freed++;
- }
- if (!QUICKLIST_EMPTY(pte_quicklist)) {
- pte_free_slow(pte_alloc_one_fast(NULL, 0));
- freed++;
- }
- } while(pgtable_cache_size > low);
- }
- return freed;
-}
-
-/*
- * NOTE: pagetable_init alloc all the fixmap pagetables contiguous on the
- * physical space so we can cache the place of the first one and move
- * around without checking the pgd every time.
- */
-
-#if CONFIG_HIGHMEM
-pte_t *kmap_pte;
-pgprot_t kmap_prot;
-
-#define kmap_get_fixmap_pte(vaddr) \
- pte_offset(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
-
-void __init kmap_init(void)
-{
- unsigned long kmap_vstart;
-
- /* cache the first kmap pte */
- kmap_vstart = __fix_to_virt(FIX_KMAP_BEGIN);
- kmap_pte = kmap_get_fixmap_pte(kmap_vstart);
-
- kmap_prot = PAGE_KERNEL;
-}
-#endif /* CONFIG_HIGHMEM */
-
-void show_mem(void)
-{
- int i, total = 0, reserved = 0;
- int shared = 0, cached = 0;
- int highmem = 0;
-
- printk("Mem-info:\n");
- show_free_areas();
- printk("Free swap: %6dkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
- i = max_mapnr;
- while (i-- > 0) {
- total++;
- if (PageHighMem(mem_map+i))
- highmem++;
- if (PageReserved(mem_map+i))
- reserved++;
- else if (PageSwapCache(mem_map+i))
- cached++;
- else if (page_count(mem_map+i))
- shared += page_count(mem_map+i) - 1;
- }
- printk("%d pages of RAM\n", total);
- printk("%d pages of HIGHMEM\n",highmem);
- printk("%d reserved pages\n",reserved);
- printk("%d pages shared\n",shared);
- printk("%d pages swap cached\n",cached);
- printk("%ld pages in page table cache\n",pgtable_cache_size);
- show_buffers();
-}
-
-/* References to section boundaries */
-
-extern char _text, _etext, _edata, __bss_start, _end;
-extern char __init_begin, __init_end;
-
-static inline void set_pte_phys (unsigned long vaddr,
- unsigned long phys, pgprot_t prot)
-{
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *pte;
-
- pgd = init_mm.pgd + __pgd_offset(vaddr);
- if (pgd_none(*pgd)) {
- printk("PAE BUG #00!\n");
- return;
- }
- pmd = pmd_offset(pgd, vaddr);
- if (pmd_none(*pmd)) {
- printk("PAE BUG #01!\n");
- return;
- }
- pte = pte_offset(pmd, vaddr);
-
- queue_l1_entry_update(pte, phys | pgprot_val(prot));
-
- /*
- * It's enough to flush this one mapping.
- * (PGE mappings get flushed as well)
- */
- __flush_tlb_one(vaddr);
-}
-
-void __set_fixmap(enum fixed_addresses idx, unsigned long phys,
- pgprot_t flags)
-{
- unsigned long address = __fix_to_virt(idx);
-
- if (idx >= __end_of_fixed_addresses) {
- printk("Invalid __set_fixmap\n");
- return;
- }
- set_pte_phys(address, phys, flags);
-}
-
-void clear_fixmap(enum fixed_addresses idx)
-{
- set_pte_phys(__fix_to_virt(idx), 0, __pgprot(0));
-}
-
-static void __init fixrange_init (unsigned long start,
- unsigned long end, pgd_t *pgd_base)
-{
- pgd_t *pgd, *kpgd;
- pmd_t *pmd, *kpmd;
- pte_t *pte, *kpte;
- int i, j;
- unsigned long vaddr;
-
- vaddr = start;
- i = __pgd_offset(vaddr);
- j = __pmd_offset(vaddr);
- pgd = pgd_base + i;
-
- for ( ; (i < PTRS_PER_PGD) && (vaddr != end); pgd++, i++) {
-#if CONFIG_X86_PAE
- if (pgd_none(*pgd)) {
- pmd = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
- set_pgd(pgd, __pgd(__pa(pmd) + 0x1));
- if (pmd != pmd_offset(pgd, 0))
- printk("PAE BUG #02!\n");
- }
- pmd = pmd_offset(pgd, vaddr);
-#else
- pmd = (pmd_t *)pgd;
-#endif
- for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
- if (pmd_none(*pmd)) {
- pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
- clear_page(pte);
- kpgd = pgd_offset_k((unsigned long)pte);
- kpmd = pmd_offset(kpgd, (unsigned long)pte);
- kpte = pte_offset(kpmd, (unsigned long)pte);
- queue_l1_entry_update(kpte,
- (*(unsigned long *)kpte)&~_PAGE_RW);
-
- set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)));
- }
- vaddr += PMD_SIZE;
- }
- j = 0;
- }
-
- XEN_flush_page_update_queue();
-}
-
-
-static void __init pagetable_init (void)
-{
- unsigned long vaddr, end;
- pgd_t *kpgd, *pgd, *pgd_base;
- int i, j, k;
- pmd_t *kpmd, *pmd;
- pte_t *kpte, *pte, *pte_base;
-
- /*
- * This can be zero as well - no problem, in that case we exit
- * the loops anyway due to the PTRS_PER_* conditions.
- */
- end = (unsigned long)__va(max_low_pfn*PAGE_SIZE);
-
- pgd_base = init_mm.pgd;
- i = __pgd_offset(PAGE_OFFSET);
- pgd = pgd_base + i;
-
- for (; i < PTRS_PER_PGD; pgd++, i++) {
- vaddr = i*PGDIR_SIZE;
- if (end && (vaddr >= end))
- break;
- pmd = (pmd_t *)pgd;
- for (j = 0; j < PTRS_PER_PMD; pmd++, j++) {
- vaddr = i*PGDIR_SIZE + j*PMD_SIZE;
- if (end && (vaddr >= end))
- break;
-
- /* Filled in for us already? */
- if ( pmd_val(*pmd) & _PAGE_PRESENT )
- continue;
-
- pte_base = pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-
- for (k = 0; k < PTRS_PER_PTE; pte++, k++) {
- vaddr = i*PGDIR_SIZE + j*PMD_SIZE + k*PAGE_SIZE;
- if (end && (vaddr >= end))
- break;
- *pte = mk_pte_phys(__pa(vaddr), PAGE_KERNEL);
- }
- kpgd = pgd_offset_k((unsigned long)pte_base);
- kpmd = pmd_offset(kpgd, (unsigned long)pte_base);
- kpte = pte_offset(kpmd, (unsigned long)pte_base);
- queue_l1_entry_update(kpte,
- (*(unsigned long *)kpte)&~_PAGE_RW);
- set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte_base)));
- XEN_flush_page_update_queue();
- }
- }
-
- /*
- * Fixed mappings, only the page table structure has to be
- * created - mappings will be set by set_fixmap():
- */
- vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
- fixrange_init(vaddr, HYPERVISOR_VIRT_START, init_mm.pgd);
-
-#if CONFIG_HIGHMEM
- /*
- * Permanent kmaps:
- */
- vaddr = PKMAP_BASE;
- fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, init_mm.pgd);
-
- pgd = init_mm.pgd + __pgd_offset(vaddr);
- pmd = pmd_offset(pgd, vaddr);
- pte = pte_offset(pmd, vaddr);
- pkmap_page_table = pte;
-#endif
-}
-
-static void __init zone_sizes_init(void)
-{
- unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
- unsigned int max_dma, high, low;
-
- max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
- low = max_low_pfn;
- high = highend_pfn;
-
- if (low < max_dma)
- zones_size[ZONE_DMA] = low;
- else {
- zones_size[ZONE_DMA] = max_dma;
- zones_size[ZONE_NORMAL] = low - max_dma;
-#ifdef CONFIG_HIGHMEM
- zones_size[ZONE_HIGHMEM] = high - low;
-#endif
- }
- free_area_init(zones_size);
-}
-
-void __init paging_init(void)
-{
- pagetable_init();
-
- zone_sizes_init();
-
- /* Switch to the real shared_info page, and clear the dummy page. */
- set_fixmap(FIX_SHARED_INFO, start_info.shared_info);
- HYPERVISOR_shared_info = (shared_info_t *)fix_to_virt(FIX_SHARED_INFO);
- memset(empty_zero_page, 0, sizeof(empty_zero_page));
-
-#ifdef CONFIG_HIGHMEM
- kmap_init();
-#endif
-}
-
-static inline int page_is_ram (unsigned long pagenr)
-{
- return 1;
-}
-
-static inline int page_kills_ppro(unsigned long pagenr)
-{
- return 0;
-}
-
-#ifdef CONFIG_HIGHMEM
-void __init one_highpage_init(struct page *page, int pfn, int bad_ppro)
-{
- if (!page_is_ram(pfn)) {
- SetPageReserved(page);
- return;
- }
-
- if (bad_ppro && page_kills_ppro(pfn)) {
- SetPageReserved(page);
- return;
- }
-
- ClearPageReserved(page);
- set_bit(PG_highmem, &page->flags);
- atomic_set(&page->count, 1);
- __free_page(page);
- totalhigh_pages++;
-}
-#endif /* CONFIG_HIGHMEM */
-
-static void __init set_max_mapnr_init(void)
-{
-#ifdef CONFIG_HIGHMEM
- highmem_start_page = mem_map + highstart_pfn;
- max_mapnr = num_physpages = highend_pfn;
- num_mappedpages = max_low_pfn;
-#else
- max_mapnr = num_mappedpages = num_physpages = max_low_pfn;
-#endif
-}
-
-static int __init free_pages_init(void)
-{
-#ifdef CONFIG_HIGHMEM
- int bad_ppro = 0;
-#endif
- int reservedpages, pfn;
-
- /* this will put all low memory onto the freelists */
- totalram_pages += free_all_bootmem();
-
- reservedpages = 0;
- for (pfn = 0; pfn < max_low_pfn; pfn++) {
- /*
- * Only count reserved RAM pages
- */
- if (page_is_ram(pfn) && PageReserved(mem_map+pfn))
- reservedpages++;
- }
-#ifdef CONFIG_HIGHMEM
- for (pfn = highend_pfn-1; pfn >= highstart_pfn; pfn--)
- one_highpage_init((struct page *) (mem_map + pfn), pfn, bad_ppro);
- totalram_pages += totalhigh_pages;
-#endif
- return reservedpages;
-}
-
-void __init mem_init(void)
-{
- int codesize, reservedpages, datasize, initsize;
-
- if (!mem_map)
- BUG();
-
- set_max_mapnr_init();
-
- high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
-
- /* clear the zero-page */
- memset(empty_zero_page, 0, PAGE_SIZE);
-
- reservedpages = free_pages_init();
-
- codesize = (unsigned long) &_etext - (unsigned long) &_text;
- datasize = (unsigned long) &_edata - (unsigned long) &_etext;
- initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
-
- printk(KERN_INFO "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, %dk init, %ldk highmem)\n",
- (unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
- max_mapnr << (PAGE_SHIFT-10),
- codesize >> 10,
- reservedpages << (PAGE_SHIFT-10),
- datasize >> 10,
- initsize >> 10,
- (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10))
- );
-
- boot_cpu_data.wp_works_ok = 1;
-}
-
-void free_initmem(void)
-{
- unsigned long addr;
-
- addr = (unsigned long)(&__init_begin);
- for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
- ClearPageReserved(virt_to_page(addr));
- set_page_count(virt_to_page(addr), 1);
- free_page(addr);
- totalram_pages++;
- }
- printk (KERN_INFO "Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-void free_initrd_mem(unsigned long start, unsigned long end)
-{
- if (start < end)
- printk (KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
- for (; start < end; start += PAGE_SIZE) {
- ClearPageReserved(virt_to_page(start));
- set_page_count(virt_to_page(start), 1);
- free_page(start);
- totalram_pages++;
- }
-}
-#endif
-
-void si_meminfo(struct sysinfo *val)
-{
- val->totalram = totalram_pages;
- val->sharedram = 0;
- val->freeram = nr_free_pages();
- val->bufferram = atomic_read(&buffermem_pages);
- val->totalhigh = totalhigh_pages;
- val->freehigh = nr_free_highpages();
- val->mem_unit = PAGE_SIZE;
- return;
-}
-
-#if defined(CONFIG_X86_PAE)
-struct kmem_cache_s *pae_pgd_cachep;
-void __init pgtable_cache_init(void)
-{
- /*
- * PAE pgds must be 16-byte aligned:
- */
- pae_pgd_cachep = kmem_cache_create("pae_pgd", 32, 0,
- SLAB_HWCACHE_ALIGN | SLAB_MUST_HWCACHE_ALIGN, NULL, NULL);
- if (!pae_pgd_cachep)
- panic("init_pae(): Cannot alloc pae_pgd SLAB cache");
-}
-#endif /* CONFIG_X86_PAE */
diff --git a/xenolinux-2.4.25-sparse/arch/xen/mm/ioremap.c b/xenolinux-2.4.25-sparse/arch/xen/mm/ioremap.c
deleted file mode 100644
index 7b1162de9c..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/mm/ioremap.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * arch/xen/mm/ioremap.c
- *
- * Re-map IO memory to kernel address space so that we can access it.
- *
- * (C) Copyright 1995 1996 Linus Torvalds
- *
- * Modifications for Xenolinux (c) 2003 Keir Fraser
- */
-
-#include <linux/slab.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/vmalloc.h>
-#include <asm/io.h>
-#include <asm/pgalloc.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-#include <asm/mmu.h>
-
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
-
-/* These hacky macros avoid phys->machine translations. */
-#define __direct_pte(x) ((pte_t) { (x) } )
-#define __direct_mk_pte(page_nr,pgprot) \
- __direct_pte(((page_nr) << PAGE_SHIFT) | pgprot_val(pgprot))
-#define direct_mk_pte_phys(physpage, pgprot) \
- __direct_mk_pte((physpage) >> PAGE_SHIFT, pgprot)
-
-static inline void direct_remap_area_pte(pte_t *pte,
- unsigned long address,
- unsigned long size,
- unsigned long machine_addr,
- pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- if (address >= end)
- BUG();
- do {
- if (!pte_none(*pte)) {
- printk("direct_remap_area_pte: page already exists\n");
- BUG();
- }
- set_pte(pte, pte_mkio(direct_mk_pte_phys(machine_addr, prot)));
- address += PAGE_SIZE;
- machine_addr += PAGE_SIZE;
- pte++;
- } while (address && (address < end));
-}
-
-static inline int direct_remap_area_pmd(struct mm_struct *mm,
- pmd_t *pmd,
- unsigned long address,
- unsigned long size,
- unsigned long machine_addr,
- pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- machine_addr -= address;
- if (address >= end)
- BUG();
- do {
- pte_t * pte = pte_alloc(mm, pmd, address);
- if (!pte)
- return -ENOMEM;
- direct_remap_area_pte(pte, address, end - address,
- address + machine_addr, prot);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
- return 0;
-}
-
-int direct_remap_area_pages(struct mm_struct *mm,
- unsigned long address,
- unsigned long machine_addr,
- unsigned long size,
- pgprot_t prot)
-{
- int error = 0;
- pgd_t * dir;
- unsigned long end = address + size;
-
- machine_addr -= address;
- dir = pgd_offset(mm, address);
- flush_cache_all();
- if (address >= end)
- BUG();
- spin_lock(&mm->page_table_lock);
- do {
- pmd_t *pmd = pmd_alloc(mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
- error = direct_remap_area_pmd(mm, pmd, address, end - address,
- machine_addr + address, prot);
- if (error)
- break;
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
- spin_unlock(&mm->page_table_lock);
- flush_tlb_all();
- return error;
-}
-
-#endif /* CONFIG_XEN_PRIVILEGED_GUEST */
-
-
-/*
- * Remap an arbitrary machine address space into the kernel virtual
- * address space. Needed when a privileged instance of Xenolinux wants
- * to access space outside its world directly.
- *
- * NOTE! We need to allow non-page-aligned mappings too: we will obviously
- * have to convert them into an offset in a page-aligned mapping, but the
- * caller shouldn't need to know that small detail.
- */
-void * __ioremap(unsigned long machine_addr,
- unsigned long size,
- unsigned long flags)
-{
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- void * addr;
- struct vm_struct * area;
- unsigned long offset, last_addr;
- pgprot_t prot;
-
- /* Only privileged Xenolinux can make unchecked pagetable updates. */
- if ( !(start_info.flags & SIF_PRIVILEGED) )
- return NULL;
-
- /* Don't allow wraparound or zero size */
- last_addr = machine_addr + size - 1;
- if (!size || last_addr < machine_addr)
- return NULL;
-
- /* Mappings have to be page-aligned */
- offset = machine_addr & ~PAGE_MASK;
- machine_addr &= PAGE_MASK;
- size = PAGE_ALIGN(last_addr+1) - machine_addr;
-
- /* Ok, go for it */
- area = get_vm_area(size, VM_IOREMAP);
- if (!area)
- return NULL;
- addr = area->addr;
- prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY |
- _PAGE_ACCESSED | flags);
- if (direct_remap_area_pages(&init_mm, VMALLOC_VMADDR(addr),
- machine_addr, size, prot)) {
- vfree(addr);
- return NULL;
- }
- return (void *) (offset + (char *)addr);
-#else
- return NULL;
-#endif
-}
-
-void iounmap(void *addr)
-{
- vfree((void *)((unsigned long)addr & PAGE_MASK));
-}
-
-/* implementation of boot time ioremap for purpose of provising access
-to the vga console for privileged domains. Unlike boot time ioremap on
-other architectures, ours is permanent and not reclaimed when then vmalloc
-infrastructure is started */
-
-void __init *bt_ioremap(unsigned long machine_addr, unsigned long size)
-{
- unsigned long offset, last_addr;
- unsigned int nrpages;
- enum fixed_addresses idx;
-
- /* Don't allow wraparound or zero size */
- last_addr = machine_addr + size - 1;
- if (!size || last_addr < machine_addr)
- return NULL;
-
- /*
- * Mappings have to be page-aligned
- */
- offset = machine_addr & ~PAGE_MASK;
- machine_addr &= PAGE_MASK;
- size = PAGE_ALIGN(last_addr) - machine_addr;
-
- /*
- * Mappings have to fit in the FIX_BTMAP area.
- */
- nrpages = size >> PAGE_SHIFT;
- if (nrpages > NR_FIX_BTMAPS)
- return NULL;
-
- /*
- * Ok, go for it..
- */
- idx = FIX_BTMAP_BEGIN;
- while (nrpages > 0) {
- __set_fixmap(idx, machine_addr,
- __pgprot(__PAGE_KERNEL|_PAGE_IO));
- machine_addr += PAGE_SIZE;
- --idx;
- --nrpages;
- }
-
- flush_tlb_all();
-
- return (void*) (offset + fix_to_virt(FIX_BTMAP_BEGIN));
-}
-
-
-#if 0 /* We don't support these functions. They shouldn't be required. */
-void __init bt_iounmap(void *addr, unsigned long size) {}
-#endif
diff --git a/xenolinux-2.4.25-sparse/arch/xen/vmlinux.lds b/xenolinux-2.4.25-sparse/arch/xen/vmlinux.lds
deleted file mode 100644
index 7c4c4f8e9c..0000000000
--- a/xenolinux-2.4.25-sparse/arch/xen/vmlinux.lds
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ld script to make i386 Linux kernel
- * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>;
- */
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(_start)
-SECTIONS
-{
- . = 0xC0000000 + 0x000000;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
- } = 0x9090
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) }
- .kstrtab : { *(.kstrtab) }
-
- . = ALIGN(16); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) }
- __stop___ex_table = .;
-
- __start___ksymtab = .; /* Kernel symbol table */
- __ksymtab : { *(__ksymtab) }
- __stop___ksymtab = .;
-
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
- }
-
- _edata = .; /* End of data section */
-
- . = ALIGN(8192); /* init_task */
- .data.init_task : { *(.data.init_task) }
-
- . = ALIGN(4096); /* Init code and data */
- __init_begin = .;
- .text.init : { *(.text.init) }
- .data.init : { *(.data.init) }
- . = ALIGN(16);
- __setup_start = .;
- .setup.init : { *(.setup.init) }
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall.init) }
- __initcall_end = .;
- . = ALIGN(4096);
- __init_end = .;
-
- . = ALIGN(4096);
- .data.page_aligned : { *(.data.idt) }
-
- . = ALIGN(32);
- .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss)
- }
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
diff --git a/xenolinux-2.4.25-sparse/drivers/block/ll_rw_blk.c b/xenolinux-2.4.25-sparse/drivers/block/ll_rw_blk.c
deleted file mode 100644
index 8092d5fe7d..0000000000
--- a/xenolinux-2.4.25-sparse/drivers/block/ll_rw_blk.c
+++ /dev/null
@@ -1,1644 +0,0 @@
-/*
- * linux/drivers/block/ll_rw_blk.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- * Copyright (C) 1994, Karl Keyte: Added support for disk statistics
- * Elevator latency, (C) 2000 Andrea Arcangeli <andrea@suse.de> SuSE
- * Queue request tables / lock, selectable elevator, Jens Axboe <axboe@suse.de>
- * kernel-doc documentation started by NeilBrown <neilb@cse.unsw.edu.au> - July2000
- */
-
-/*
- * This handles all read/write requests to block devices
- */
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/kernel_stat.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/config.h>
-#include <linux/locks.h>
-#include <linux/mm.h>
-#include <linux/swap.h>
-#include <linux/init.h>
-#include <linux/smp_lock.h>
-#include <linux/completion.h>
-#include <linux/bootmem.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <linux/blk.h>
-#include <linux/highmem.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-
-/*
- * MAC Floppy IWM hooks
- */
-
-#ifdef CONFIG_MAC_FLOPPY_IWM
-extern int mac_floppy_init(void);
-#endif
-
-/*
- * For the allocated request tables
- */
-static kmem_cache_t *request_cachep;
-
-/*
- * The "disk" task queue is used to start the actual requests
- * after a plug
- */
-DECLARE_TASK_QUEUE(tq_disk);
-
-/*
- * Protect the request list against multiple users..
- *
- * With this spinlock the Linux block IO subsystem is 100% SMP threaded
- * from the IRQ event side, and almost 100% SMP threaded from the syscall
- * side (we still have protect against block device array operations, and
- * the do_request() side is casually still unsafe. The kernel lock protects
- * this part currently.).
- *
- * there is a fair chance that things will work just OK if these functions
- * are called with no global kernel lock held ...
- */
-spinlock_t io_request_lock = SPIN_LOCK_UNLOCKED;
-
-/* This specifies how many sectors to read ahead on the disk. */
-
-int read_ahead[MAX_BLKDEV];
-
-/* blk_dev_struct is:
- * *request_fn
- * *current_request
- */
-struct blk_dev_struct blk_dev[MAX_BLKDEV]; /* initialized by blk_dev_init() */
-
-/*
- * blk_size contains the size of all block-devices in units of 1024 byte
- * sectors:
- *
- * blk_size[MAJOR][MINOR]
- *
- * if (!blk_size[MAJOR]) then no minor size checking is done.
- */
-int * blk_size[MAX_BLKDEV];
-
-/*
- * blksize_size contains the size of all block-devices:
- *
- * blksize_size[MAJOR][MINOR]
- *
- * if (!blksize_size[MAJOR]) then 1024 bytes is assumed.
- */
-int * blksize_size[MAX_BLKDEV];
-
-/*
- * hardsect_size contains the size of the hardware sector of a device.
- *
- * hardsect_size[MAJOR][MINOR]
- *
- * if (!hardsect_size[MAJOR])
- * then 512 bytes is assumed.
- * else
- * sector_size is hardsect_size[MAJOR][MINOR]
- * This is currently set by some scsi devices and read by the msdos fs driver.
- * Other uses may appear later.
- */
-int * hardsect_size[MAX_BLKDEV];
-
-/*
- * The following tunes the read-ahead algorithm in mm/filemap.c
- */
-int * max_readahead[MAX_BLKDEV];
-
-/*
- * Max number of sectors per request
- */
-int * max_sectors[MAX_BLKDEV];
-
-unsigned long blk_max_low_pfn, blk_max_pfn;
-int blk_nohighio = 0;
-
-int block_dump = 0;
-
-static struct timer_list writeback_timer;
-
-static inline int get_max_sectors(kdev_t dev)
-{
- if (!max_sectors[MAJOR(dev)])
- return MAX_SECTORS;
- return max_sectors[MAJOR(dev)][MINOR(dev)];
-}
-
-inline request_queue_t *blk_get_queue(kdev_t dev)
-{
- struct blk_dev_struct *bdev = blk_dev + MAJOR(dev);
-
- if (bdev->queue)
- return bdev->queue(dev);
- else
- return &blk_dev[MAJOR(dev)].request_queue;
-}
-
-static int __blk_cleanup_queue(struct request_list *list)
-{
- struct list_head *head = &list->free;
- struct request *rq;
- int i = 0;
-
- while (!list_empty(head)) {
- rq = list_entry(head->next, struct request, queue);
- list_del(&rq->queue);
- kmem_cache_free(request_cachep, rq);
- i++;
- };
-
- if (i != list->count)
- printk("request list leak!\n");
-
- list->count = 0;
- return i;
-}
-
-/**
- * blk_cleanup_queue: - release a &request_queue_t when it is no longer needed
- * @q: the request queue to be released
- *
- * Description:
- * blk_cleanup_queue is the pair to blk_init_queue(). It should
- * be called when a request queue is being released; typically
- * when a block device is being de-registered. Currently, its
- * primary task it to free all the &struct request structures that
- * were allocated to the queue.
- * Caveat:
- * Hopefully the low level driver will have finished any
- * outstanding requests first...
- **/
-void blk_cleanup_queue(request_queue_t * q)
-{
- int count = q->nr_requests;
-
- count -= __blk_cleanup_queue(&q->rq);
-
- if (count)
- printk("blk_cleanup_queue: leaked requests (%d)\n", count);
- if (atomic_read(&q->nr_sectors))
- printk("blk_cleanup_queue: leaked sectors (%d)\n", atomic_read(&q->nr_sectors));
-
- memset(q, 0, sizeof(*q));
-}
-
-/**
- * blk_queue_headactive - indicate whether head of request queue may be active
- * @q: The queue which this applies to.
- * @active: A flag indication where the head of the queue is active.
- *
- * Description:
- * The driver for a block device may choose to leave the currently active
- * request on the request queue, removing it only when it has completed.
- * The queue handling routines assume this by default for safety reasons
- * and will not involve the head of the request queue in any merging or
- * reordering of requests when the queue is unplugged (and thus may be
- * working on this particular request).
- *
- * If a driver removes requests from the queue before processing them, then
- * it may indicate that it does so, there by allowing the head of the queue
- * to be involved in merging and reordering. This is done be calling
- * blk_queue_headactive() with an @active flag of %0.
- *
- * If a driver processes several requests at once, it must remove them (or
- * at least all but one of them) from the request queue.
- *
- * When a queue is plugged the head will be assumed to be inactive.
- **/
-
-void blk_queue_headactive(request_queue_t * q, int active)
-{
- q->head_active = active;
-}
-
-/**
- * blk_queue_throttle_sectors - indicates you will call sector throttling funcs
- * @q: The queue which this applies to.
- * @active: A flag indication if you want sector throttling on
- *
- * Description:
- * The sector throttling code allows us to put a limit on the number of
- * sectors pending io to the disk at a given time, sending @active nonzero
- * indicates you will call blk_started_sectors and blk_finished_sectors in
- * addition to calling blk_started_io and blk_finished_io in order to
- * keep track of the number of sectors in flight.
- **/
-
-void blk_queue_throttle_sectors(request_queue_t * q, int active)
-{
- q->can_throttle = active;
-}
-
-/**
- * blk_queue_make_request - define an alternate make_request function for a device
- * @q: the request queue for the device to be affected
- * @mfn: the alternate make_request function
- *
- * Description:
- * The normal way for &struct buffer_heads to be passed to a device
- * driver is for them to be collected into requests on a request
- * queue, and then to allow the device driver to select requests
- * off that queue when it is ready. This works well for many block
- * devices. However some block devices (typically virtual devices
- * such as md or lvm) do not benefit from the processing on the
- * request queue, and are served best by having the requests passed
- * directly to them. This can be achieved by providing a function
- * to blk_queue_make_request().
- *
- * Caveat:
- * The driver that does this *must* be able to deal appropriately
- * with buffers in "highmemory", either by calling bh_kmap() to get
- * a kernel mapping, to by calling create_bounce() to create a
- * buffer in normal memory.
- **/
-
-void blk_queue_make_request(request_queue_t * q, make_request_fn * mfn)
-{
- q->make_request_fn = mfn;
-}
-
-/**
- * blk_queue_bounce_limit - set bounce buffer limit for queue
- * @q: the request queue for the device
- * @dma_addr: bus address limit
- *
- * Description:
- * Different hardware can have different requirements as to what pages
- * it can do I/O directly to. A low level driver can call
- * blk_queue_bounce_limit to have lower memory pages allocated as bounce
- * buffers for doing I/O to pages residing above @page. By default
- * the block layer sets this to the highest numbered "low" memory page.
- **/
-void blk_queue_bounce_limit(request_queue_t *q, u64 dma_addr)
-{
- unsigned long bounce_pfn = dma_addr >> PAGE_SHIFT;
- unsigned long mb = dma_addr >> 20;
- static request_queue_t *old_q;
-
- /*
- * keep this for debugging for now...
- */
- if (dma_addr != BLK_BOUNCE_HIGH && q != old_q) {
- old_q = q;
- printk("blk: queue %p, ", q);
- if (dma_addr == BLK_BOUNCE_ANY)
- printk("no I/O memory limit\n");
- else
- printk("I/O limit %luMb (mask 0x%Lx)\n", mb,
- (long long) dma_addr);
- }
-
- q->bounce_pfn = bounce_pfn;
-}
-
-
-/*
- * can we merge the two segments, or do we need to start a new one?
- */
-inline int blk_seg_merge_ok(struct buffer_head *bh, struct buffer_head *nxt)
-{
- /*
- * if bh and nxt are contigous and don't cross a 4g boundary, it's ok
- */
- if (BH_CONTIG(bh, nxt) && BH_PHYS_4G(bh, nxt))
- return 1;
-
- return 0;
-}
-
-static inline int ll_new_segment(request_queue_t *q, struct request *req, int max_segments)
-{
- if (req->nr_segments < max_segments) {
- req->nr_segments++;
- return 1;
- }
- return 0;
-}
-
-static int ll_back_merge_fn(request_queue_t *q, struct request *req,
- struct buffer_head *bh, int max_segments)
-{
- if (blk_seg_merge_ok(req->bhtail, bh))
- return 1;
-
- return ll_new_segment(q, req, max_segments);
-}
-
-static int ll_front_merge_fn(request_queue_t *q, struct request *req,
- struct buffer_head *bh, int max_segments)
-{
- if (blk_seg_merge_ok(bh, req->bh))
- return 1;
-
- return ll_new_segment(q, req, max_segments);
-}
-
-static int ll_merge_requests_fn(request_queue_t *q, struct request *req,
- struct request *next, int max_segments)
-{
- int total_segments = req->nr_segments + next->nr_segments;
-
- if (blk_seg_merge_ok(req->bhtail, next->bh))
- total_segments--;
-
- if (total_segments > max_segments)
- return 0;
-
- req->nr_segments = total_segments;
- return 1;
-}
-
-/*
- * "plug" the device if there are no outstanding requests: this will
- * force the transfer to start only after we have put all the requests
- * on the list.
- *
- * This is called with interrupts off and no requests on the queue.
- * (and with the request spinlock acquired)
- */
-static void generic_plug_device(request_queue_t *q, kdev_t dev)
-{
- /*
- * no need to replug device
- */
- if (!list_empty(&q->queue_head) || q->plugged)
- return;
-
- q->plugged = 1;
- queue_task(&q->plug_tq, &tq_disk);
-}
-
-/*
- * remove the plug and let it rip..
- */
-static inline void __generic_unplug_device(request_queue_t *q)
-{
- if (q->plugged) {
- q->plugged = 0;
- if (!list_empty(&q->queue_head))
- q->request_fn(q);
- }
-}
-
-void generic_unplug_device(void *data)
-{
- request_queue_t *q = (request_queue_t *) data;
- unsigned long flags;
-
- spin_lock_irqsave(&io_request_lock, flags);
- __generic_unplug_device(q);
- spin_unlock_irqrestore(&io_request_lock, flags);
-}
-
-/** blk_grow_request_list
- * @q: The &request_queue_t
- * @nr_requests: how many requests are desired
- *
- * More free requests are added to the queue's free lists, bringing
- * the total number of requests to @nr_requests.
- *
- * The requests are added equally to the request queue's read
- * and write freelists.
- *
- * This function can sleep.
- *
- * Returns the (new) number of requests which the queue has available.
- */
-int blk_grow_request_list(request_queue_t *q, int nr_requests, int max_queue_sectors)
-{
- unsigned long flags;
- /* Several broken drivers assume that this function doesn't sleep,
- * this causes system hangs during boot.
- * As a temporary fix, make the function non-blocking.
- */
- spin_lock_irqsave(&io_request_lock, flags);
- while (q->nr_requests < nr_requests) {
- struct request *rq;
-
- rq = kmem_cache_alloc(request_cachep, SLAB_ATOMIC);
- if (rq == NULL)
- break;
- memset(rq, 0, sizeof(*rq));
- rq->rq_status = RQ_INACTIVE;
- list_add(&rq->queue, &q->rq.free);
- q->rq.count++;
-
- q->nr_requests++;
- }
-
- /*
- * Wakeup waiters after both one quarter of the
- * max-in-fligh queue and one quarter of the requests
- * are available again.
- */
-
- q->batch_requests = q->nr_requests / 4;
- if (q->batch_requests > 32)
- q->batch_requests = 32;
- q->batch_sectors = max_queue_sectors / 4;
-
- q->max_queue_sectors = max_queue_sectors;
-
- BUG_ON(!q->batch_sectors);
- atomic_set(&q->nr_sectors, 0);
-
- spin_unlock_irqrestore(&io_request_lock, flags);
- return q->nr_requests;
-}
-
-static void blk_init_free_list(request_queue_t *q)
-{
- struct sysinfo si;
- int megs; /* Total memory, in megabytes */
- int nr_requests, max_queue_sectors = MAX_QUEUE_SECTORS;
-
- INIT_LIST_HEAD(&q->rq.free);
- q->rq.count = 0;
- q->rq.pending[READ] = q->rq.pending[WRITE] = 0;
- q->nr_requests = 0;
-
- si_meminfo(&si);
- megs = si.totalram >> (20 - PAGE_SHIFT);
- nr_requests = MAX_NR_REQUESTS;
- if (megs < 30) {
- nr_requests /= 2;
- max_queue_sectors /= 2;
- }
- /* notice early if anybody screwed the defaults */
- BUG_ON(!nr_requests);
- BUG_ON(!max_queue_sectors);
-
- blk_grow_request_list(q, nr_requests, max_queue_sectors);
-
- init_waitqueue_head(&q->wait_for_requests);
-
- spin_lock_init(&q->queue_lock);
-}
-
-static int __make_request(request_queue_t * q, int rw, struct buffer_head * bh);
-
-/**
- * blk_init_queue - prepare a request queue for use with a block device
- * @q: The &request_queue_t to be initialised
- * @rfn: The function to be called to process requests that have been
- * placed on the queue.
- *
- * Description:
- * If a block device wishes to use the standard request handling procedures,
- * which sorts requests and coalesces adjacent requests, then it must
- * call blk_init_queue(). The function @rfn will be called when there
- * are requests on the queue that need to be processed. If the device
- * supports plugging, then @rfn may not be called immediately when requests
- * are available on the queue, but may be called at some time later instead.
- * Plugged queues are generally unplugged when a buffer belonging to one
- * of the requests on the queue is needed, or due to memory pressure.
- *
- * @rfn is not required, or even expected, to remove all requests off the
- * queue, but only as many as it can handle at a time. If it does leave
- * requests on the queue, it is responsible for arranging that the requests
- * get dealt with eventually.
- *
- * A global spin lock $io_request_lock must be held while manipulating the
- * requests on the request queue.
- *
- * The request on the head of the queue is by default assumed to be
- * potentially active, and it is not considered for re-ordering or merging
- * whenever the given queue is unplugged. This behaviour can be changed with
- * blk_queue_headactive().
- *
- * Note:
- * blk_init_queue() must be paired with a blk_cleanup_queue() call
- * when the block device is deactivated (such as at module unload).
- **/
-void blk_init_queue(request_queue_t * q, request_fn_proc * rfn)
-{
- INIT_LIST_HEAD(&q->queue_head);
- elevator_init(&q->elevator, ELEVATOR_LINUS);
- blk_init_free_list(q);
- q->request_fn = rfn;
- q->back_merge_fn = ll_back_merge_fn;
- q->front_merge_fn = ll_front_merge_fn;
- q->merge_requests_fn = ll_merge_requests_fn;
- q->make_request_fn = __make_request;
- q->plug_tq.sync = 0;
- q->plug_tq.routine = &generic_unplug_device;
- q->plug_tq.data = q;
- q->plugged = 0;
- q->can_throttle = 0;
-
- /*
- * These booleans describe the queue properties. We set the
- * default (and most common) values here. Other drivers can
- * use the appropriate functions to alter the queue properties.
- * as appropriate.
- */
- q->plug_device_fn = generic_plug_device;
- q->head_active = 1;
-
- blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH);
-}
-
-#define blkdev_free_rq(list) list_entry((list)->next, struct request, queue);
-/*
- * Get a free request. io_request_lock must be held and interrupts
- * disabled on the way in. Returns NULL if there are no free requests.
- */
-static struct request *get_request(request_queue_t *q, int rw)
-{
- struct request *rq = NULL;
- struct request_list *rl = &q->rq;
-
- if (blk_oversized_queue(q)) {
- int rlim = q->nr_requests >> 5;
-
- if (rlim < 4)
- rlim = 4;
-
- /*
- * if its a write, or we have more than a handful of reads
- * pending, bail out
- */
- if ((rw == WRITE) || (rw == READ && rl->pending[READ] > rlim))
- return NULL;
- if (blk_oversized_queue_reads(q))
- return NULL;
- }
-
- if (!list_empty(&rl->free)) {
- rq = blkdev_free_rq(&rl->free);
- list_del(&rq->queue);
- rl->count--;
- rl->pending[rw]++;
- rq->rq_status = RQ_ACTIVE;
- rq->cmd = rw;
- rq->special = NULL;
- rq->q = q;
- }
-
- return rq;
-}
-
-/*
- * Here's the request allocation design, low latency version:
- *
- * 1: Blocking on request exhaustion is a key part of I/O throttling.
- *
- * 2: We want to be `fair' to all requesters. We must avoid starvation, and
- * attempt to ensure that all requesters sleep for a similar duration. Hence
- * no stealing requests when there are other processes waiting.
- *
- * There used to be more here, attempting to allow a process to send in a
- * number of requests once it has woken up. But, there's no way to
- * tell if a process has just been woken up, or if it is a new process
- * coming in to steal requests from the waiters. So, we give up and force
- * everyone to wait fairly.
- *
- * So here's what we do:
- *
- * a) A READA requester fails if free_requests < batch_requests
- *
- * We don't want READA requests to prevent sleepers from ever
- * waking. Note that READA is used extremely rarely - a few
- * filesystems use it for directory readahead.
- *
- * When a process wants a new request:
- *
- * b) If free_requests == 0, the requester sleeps in FIFO manner, and
- * the queue full condition is set. The full condition is not
- * cleared until there are no longer any waiters. Once the full
- * condition is set, all new io must wait, hopefully for a very
- * short period of time.
- *
- * When a request is released:
- *
- * c) If free_requests < batch_requests, do nothing.
- *
- * d) If free_requests >= batch_requests, wake up a single waiter.
- *
- * As each waiter gets a request, he wakes another waiter. We do this
- * to prevent a race where an unplug might get run before a request makes
- * it's way onto the queue. The result is a cascade of wakeups, so delaying
- * the initial wakeup until we've got batch_requests available helps avoid
- * wakeups where there aren't any requests available yet.
- */
-
-static struct request *__get_request_wait(request_queue_t *q, int rw)
-{
- register struct request *rq;
- DECLARE_WAITQUEUE(wait, current);
-
- add_wait_queue_exclusive(&q->wait_for_requests, &wait);
-
- do {
- set_current_state(TASK_UNINTERRUPTIBLE);
- spin_lock_irq(&io_request_lock);
- if (blk_oversized_queue(q) || q->rq.count == 0) {
- __generic_unplug_device(q);
- spin_unlock_irq(&io_request_lock);
- schedule();
- spin_lock_irq(&io_request_lock);
- }
- rq = get_request(q, rw);
- spin_unlock_irq(&io_request_lock);
- } while (rq == NULL);
- remove_wait_queue(&q->wait_for_requests, &wait);
- current->state = TASK_RUNNING;
-
- return rq;
-}
-
-static void get_request_wait_wakeup(request_queue_t *q, int rw)
-{
- /*
- * avoid losing an unplug if a second __get_request_wait did the
- * generic_unplug_device while our __get_request_wait was running
- * w/o the queue_lock held and w/ our request out of the queue.
- */
- if (waitqueue_active(&q->wait_for_requests))
- wake_up(&q->wait_for_requests);
-}
-
-/* RO fail safe mechanism */
-
-static long ro_bits[MAX_BLKDEV][8];
-
-int is_read_only(kdev_t dev)
-{
- int minor,major;
-
- major = MAJOR(dev);
- minor = MINOR(dev);
- if (major < 0 || major >= MAX_BLKDEV) return 0;
- return ro_bits[major][minor >> 5] & (1 << (minor & 31));
-}
-
-void set_device_ro(kdev_t dev,int flag)
-{
- int minor,major;
-
- major = MAJOR(dev);
- minor = MINOR(dev);
- if (major < 0 || major >= MAX_BLKDEV) return;
- if (flag) ro_bits[major][minor >> 5] |= 1 << (minor & 31);
- else ro_bits[major][minor >> 5] &= ~(1 << (minor & 31));
-}
-
-inline void drive_stat_acct (kdev_t dev, int rw,
- unsigned long nr_sectors, int new_io)
-{
- unsigned int major = MAJOR(dev);
- unsigned int index;
-
- index = disk_index(dev);
- if ((index >= DK_MAX_DISK) || (major >= DK_MAX_MAJOR))
- return;
-
- kstat.dk_drive[major][index] += new_io;
- if (rw == READ) {
- kstat.dk_drive_rio[major][index] += new_io;
- kstat.dk_drive_rblk[major][index] += nr_sectors;
- } else if (rw == WRITE) {
- kstat.dk_drive_wio[major][index] += new_io;
- kstat.dk_drive_wblk[major][index] += nr_sectors;
- } else
- printk(KERN_ERR "drive_stat_acct: cmd not R/W?\n");
-}
-
-#ifdef CONFIG_BLK_STATS
-/*
- * Return up to two hd_structs on which to do IO accounting for a given
- * request.
- *
- * On a partitioned device, we want to account both against the partition
- * and against the whole disk.
- */
-static void locate_hd_struct(struct request *req,
- struct hd_struct **hd1,
- struct hd_struct **hd2)
-{
- struct gendisk *gd;
-
- *hd1 = NULL;
- *hd2 = NULL;
-
- gd = get_gendisk(req->rq_dev);
- if (gd && gd->part) {
- /* Mask out the partition bits: account for the entire disk */
- int devnr = MINOR(req->rq_dev) >> gd->minor_shift;
- int whole_minor = devnr << gd->minor_shift;
-
- *hd1 = &gd->part[whole_minor];
- if (whole_minor != MINOR(req->rq_dev))
- *hd2= &gd->part[MINOR(req->rq_dev)];
- }
-}
-
-/*
- * Round off the performance stats on an hd_struct.
- *
- * The average IO queue length and utilisation statistics are maintained
- * by observing the current state of the queue length and the amount of
- * time it has been in this state for.
- * Normally, that accounting is done on IO completion, but that can result
- * in more than a second's worth of IO being accounted for within any one
- * second, leading to >100% utilisation. To deal with that, we do a
- * round-off before returning the results when reading /proc/partitions,
- * accounting immediately for all queue usage up to the current jiffies and
- * restarting the counters again.
- */
-void disk_round_stats(struct hd_struct *hd)
-{
- unsigned long now = jiffies;
-
- hd->aveq += (hd->ios_in_flight * (jiffies - hd->last_queue_change));
- hd->last_queue_change = now;
-
- if (hd->ios_in_flight)
- hd->io_ticks += (now - hd->last_idle_time);
- hd->last_idle_time = now;
-}
-
-static inline void down_ios(struct hd_struct *hd)
-{
- disk_round_stats(hd);
- --hd->ios_in_flight;
-}
-
-static inline void up_ios(struct hd_struct *hd)
-{
- disk_round_stats(hd);
- ++hd->ios_in_flight;
-}
-
-static void account_io_start(struct hd_struct *hd, struct request *req,
- int merge, int sectors)
-{
- switch (req->cmd) {
- case READ:
- if (merge)
- hd->rd_merges++;
- hd->rd_sectors += sectors;
- break;
- case WRITE:
- if (merge)
- hd->wr_merges++;
- hd->wr_sectors += sectors;
- break;
- }
- if (!merge)
- up_ios(hd);
-}
-
-static void account_io_end(struct hd_struct *hd, struct request *req)
-{
- unsigned long duration = jiffies - req->start_time;
- switch (req->cmd) {
- case READ:
- hd->rd_ticks += duration;
- hd->rd_ios++;
- break;
- case WRITE:
- hd->wr_ticks += duration;
- hd->wr_ios++;
- break;
- }
- down_ios(hd);
-}
-
-void req_new_io(struct request *req, int merge, int sectors)
-{
- struct hd_struct *hd1, *hd2;
-
- locate_hd_struct(req, &hd1, &hd2);
- if (hd1)
- account_io_start(hd1, req, merge, sectors);
- if (hd2)
- account_io_start(hd2, req, merge, sectors);
-}
-
-void req_merged_io(struct request *req)
-{
- struct hd_struct *hd1, *hd2;
-
- locate_hd_struct(req, &hd1, &hd2);
- if (hd1)
- down_ios(hd1);
- if (hd2)
- down_ios(hd2);
-}
-
-void req_finished_io(struct request *req)
-{
- struct hd_struct *hd1, *hd2;
-
- locate_hd_struct(req, &hd1, &hd2);
- if (hd1)
- account_io_end(hd1, req);
- if (hd2)
- account_io_end(hd2, req);
-}
-EXPORT_SYMBOL(req_finished_io);
-#endif /* CONFIG_BLK_STATS */
-
-/*
- * add-request adds a request to the linked list.
- * io_request_lock is held and interrupts disabled, as we muck with the
- * request queue list.
- *
- * By this point, req->cmd is always either READ/WRITE, never READA,
- * which is important for drive_stat_acct() above.
- */
-static inline void add_request(request_queue_t * q, struct request * req,
- struct list_head *insert_here)
-{
- drive_stat_acct(req->rq_dev, req->cmd, req->nr_sectors, 1);
-
- if (!q->plugged && q->head_active && insert_here == &q->queue_head) {
- spin_unlock_irq(&io_request_lock);
- BUG();
- }
-
- /*
- * elevator indicated where it wants this request to be
- * inserted at elevator_merge time
- */
- list_add(&req->queue, insert_here);
-}
-
-/*
- * Must be called with io_request_lock held and interrupts disabled
- */
-void blkdev_release_request(struct request *req)
-{
- request_queue_t *q = req->q;
-
- req->rq_status = RQ_INACTIVE;
- req->q = NULL;
-
- /*
- * Request may not have originated from ll_rw_blk. if not,
- * assume it has free buffers and check waiters
- */
- if (q) {
- struct request_list *rl = &q->rq;
- int oversized_batch = 0;
-
- if (q->can_throttle)
- oversized_batch = blk_oversized_queue_batch(q);
- rl->count++;
- /*
- * paranoia check
- */
- if (req->cmd == READ || req->cmd == WRITE)
- rl->pending[req->cmd]--;
- if (rl->pending[READ] > q->nr_requests)
- printk("blk: reads: %u\n", rl->pending[READ]);
- if (rl->pending[WRITE] > q->nr_requests)
- printk("blk: writes: %u\n", rl->pending[WRITE]);
- if (rl->pending[READ] + rl->pending[WRITE] > q->nr_requests)
- printk("blk: r/w: %u + %u > %u\n", rl->pending[READ], rl->pending[WRITE], q->nr_requests);
- list_add(&req->queue, &rl->free);
- if (rl->count >= q->batch_requests && !oversized_batch) {
- smp_mb();
- if (waitqueue_active(&q->wait_for_requests))
- wake_up(&q->wait_for_requests);
- }
- }
-}
-
-/*
- * Has to be called with the request spinlock acquired
- */
-static void attempt_merge(request_queue_t * q,
- struct request *req,
- int max_sectors,
- int max_segments)
-{
- struct request *next;
-
- next = blkdev_next_request(req);
- if (req->sector + req->nr_sectors != next->sector)
- return;
- if (req->cmd != next->cmd
- || req->rq_dev != next->rq_dev
- || req->nr_sectors + next->nr_sectors > max_sectors
- || next->waiting)
- return;
- /*
- * If we are not allowed to merge these requests, then
- * return. If we are allowed to merge, then the count
- * will have been updated to the appropriate number,
- * and we shouldn't do it here too.
- */
- if (!q->merge_requests_fn(q, req, next, max_segments))
- return;
-
- q->elevator.elevator_merge_req_fn(req, next);
- req->bhtail->b_reqnext = next->bh;
- req->bhtail = next->bhtail;
- req->nr_sectors = req->hard_nr_sectors += next->hard_nr_sectors;
- list_del(&next->queue);
-
- /* One last thing: we have removed a request, so we now have one
- less expected IO to complete for accounting purposes. */
- req_merged_io(req);
-
- blkdev_release_request(next);
-}
-
-static inline void attempt_back_merge(request_queue_t * q,
- struct request *req,
- int max_sectors,
- int max_segments)
-{
- if (&req->queue == q->queue_head.prev)
- return;
- attempt_merge(q, req, max_sectors, max_segments);
-}
-
-static inline void attempt_front_merge(request_queue_t * q,
- struct list_head * head,
- struct request *req,
- int max_sectors,
- int max_segments)
-{
- struct list_head * prev;
-
- prev = req->queue.prev;
- if (head == prev)
- return;
- attempt_merge(q, blkdev_entry_to_request(prev), max_sectors, max_segments);
-}
-
-static int __make_request(request_queue_t * q, int rw,
- struct buffer_head * bh)
-{
- unsigned int sector, count, sync;
- int max_segments = MAX_SEGMENTS;
- struct request * req, *freereq = NULL;
- int rw_ahead, max_sectors, el_ret;
- struct list_head *head, *insert_here;
- int latency;
- elevator_t *elevator = &q->elevator;
- int should_wake = 0;
-
- count = bh->b_size >> 9;
- sector = bh->b_rsector;
- sync = test_and_clear_bit(BH_Sync, &bh->b_state);
-
- rw_ahead = 0; /* normal case; gets changed below for READA */
- switch (rw) {
- case READA:
-#if 0 /* bread() misinterprets failed READA attempts as IO errors on SMP */
- rw_ahead = 1;
-#endif
- rw = READ; /* drop into READ */
- case READ:
- case WRITE:
- latency = elevator_request_latency(elevator, rw);
- break;
- default:
- BUG();
- goto end_io;
- }
-
- /* We'd better have a real physical mapping!
- Check this bit only if the buffer was dirty and just locked
- down by us so at this point flushpage will block and
- won't clear the mapped bit under us. */
- if (!buffer_mapped(bh))
- BUG();
-
- /*
- * Temporary solution - in 2.5 this will be done by the lowlevel
- * driver. Create a bounce buffer if the buffer data points into
- * high memory - keep the original buffer otherwise.
- */
- bh = blk_queue_bounce(q, rw, bh);
-
-/* look for a free request. */
- /*
- * Try to coalesce the new request with old requests
- */
- max_sectors = get_max_sectors(bh->b_rdev);
-
- req = NULL;
- head = &q->queue_head;
- /*
- * Now we acquire the request spinlock, we have to be mega careful
- * not to schedule or do something nonatomic
- */
- spin_lock_irq(&io_request_lock);
-
-again:
- insert_here = head->prev;
-
- if (list_empty(head)) {
- q->plug_device_fn(q, bh->b_rdev); /* is atomic */
- goto get_rq;
- } else if (q->head_active && !q->plugged)
- head = head->next;
-
- el_ret = elevator->elevator_merge_fn(q, &req, head, bh, rw,max_sectors);
- switch (el_ret) {
-
- case ELEVATOR_BACK_MERGE:
- if (!q->back_merge_fn(q, req, bh, max_segments)) {
- insert_here = &req->queue;
- break;
- }
- req->bhtail->b_reqnext = bh;
- req->bhtail = bh;
- req->nr_sectors = req->hard_nr_sectors += count;
- blk_started_io(count);
- blk_started_sectors(req, count);
- drive_stat_acct(req->rq_dev, req->cmd, count, 0);
- req_new_io(req, 1, count);
- attempt_back_merge(q, req, max_sectors, max_segments);
- goto out;
-
- case ELEVATOR_FRONT_MERGE:
- if (!q->front_merge_fn(q, req, bh, max_segments)) {
- insert_here = req->queue.prev;
- break;
- }
- bh->b_reqnext = req->bh;
- req->bh = bh;
- /*
- * may not be valid, but queues not having bounce
- * enabled for highmem pages must not look at
- * ->buffer anyway
- */
- req->buffer = bh->b_data;
- req->current_nr_sectors = req->hard_cur_sectors = count;
- req->sector = req->hard_sector = sector;
- req->nr_sectors = req->hard_nr_sectors += count;
- blk_started_io(count);
- blk_started_sectors(req, count);
- drive_stat_acct(req->rq_dev, req->cmd, count, 0);
- req_new_io(req, 1, count);
- attempt_front_merge(q, head, req, max_sectors, max_segments);
- goto out;
-
- /*
- * elevator says don't/can't merge. get new request
- */
- case ELEVATOR_NO_MERGE:
- /*
- * use elevator hints as to where to insert the
- * request. if no hints, just add it to the back
- * of the queue
- */
- if (req)
- insert_here = &req->queue;
- break;
-
- default:
- printk("elevator returned crap (%d)\n", el_ret);
- BUG();
- }
-
-get_rq:
- if (freereq) {
- req = freereq;
- freereq = NULL;
- } else {
- /*
- * See description above __get_request_wait()
- */
- if (rw_ahead) {
- if (q->rq.count < q->batch_requests || blk_oversized_queue_batch(q)) {
- spin_unlock_irq(&io_request_lock);
- goto end_io;
- }
- req = get_request(q, rw);
- if (req == NULL)
- BUG();
- } else {
- req = get_request(q, rw);
- if (req == NULL) {
- spin_unlock_irq(&io_request_lock);
- freereq = __get_request_wait(q, rw);
- head = &q->queue_head;
- spin_lock_irq(&io_request_lock);
- should_wake = 1;
- goto again;
- }
- }
- }
-
-/* fill up the request-info, and add it to the queue */
- req->elevator_sequence = latency;
- req->cmd = rw;
- req->errors = 0;
- req->hard_sector = req->sector = sector;
- req->hard_nr_sectors = req->nr_sectors = count;
- req->current_nr_sectors = req->hard_cur_sectors = count;
- req->nr_segments = 1; /* Always 1 for a new request. */
- req->nr_hw_segments = 1; /* Always 1 for a new request. */
- req->buffer = bh->b_data;
- req->waiting = NULL;
- req->bh = bh;
- req->bhtail = bh;
- req->rq_dev = bh->b_rdev;
- req->start_time = jiffies;
- req_new_io(req, 0, count);
- blk_started_io(count);
- blk_started_sectors(req, count);
- add_request(q, req, insert_here);
-out:
- if (freereq)
- blkdev_release_request(freereq);
- if (should_wake)
- get_request_wait_wakeup(q, rw);
- if (sync)
- __generic_unplug_device(q);
- spin_unlock_irq(&io_request_lock);
- return 0;
-end_io:
- bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
- return 0;
-}
-
-/**
- * generic_make_request: hand a buffer head to it's device driver for I/O
- * @rw: READ, WRITE, or READA - what sort of I/O is desired.
- * @bh: The buffer head describing the location in memory and on the device.
- *
- * generic_make_request() is used to make I/O requests of block
- * devices. It is passed a &struct buffer_head and a &rw value. The
- * %READ and %WRITE options are (hopefully) obvious in meaning. The
- * %READA value means that a read is required, but that the driver is
- * free to fail the request if, for example, it cannot get needed
- * resources immediately.
- *
- * generic_make_request() does not return any status. The
- * success/failure status of the request, along with notification of
- * completion, is delivered asynchronously through the bh->b_end_io
- * function described (one day) else where.
- *
- * The caller of generic_make_request must make sure that b_page,
- * b_addr, b_size are set to describe the memory buffer, that b_rdev
- * and b_rsector are set to describe the device address, and the
- * b_end_io and optionally b_private are set to describe how
- * completion notification should be signaled. BH_Mapped should also
- * be set (to confirm that b_dev and b_blocknr are valid).
- *
- * generic_make_request and the drivers it calls may use b_reqnext,
- * and may change b_rdev and b_rsector. So the values of these fields
- * should NOT be depended on after the call to generic_make_request.
- * Because of this, the caller should record the device address
- * information in b_dev and b_blocknr.
- *
- * Apart from those fields mentioned above, no other fields, and in
- * particular, no other flags, are changed by generic_make_request or
- * any lower level drivers.
- * */
-void generic_make_request (int rw, struct buffer_head * bh)
-{
- int major = MAJOR(bh->b_rdev);
- int minorsize = 0;
- request_queue_t *q;
-
- if (!bh->b_end_io)
- BUG();
-
- /* Test device size, when known. */
- if (blk_size[major])
- minorsize = blk_size[major][MINOR(bh->b_rdev)];
- if (minorsize) {
- unsigned long maxsector = (minorsize << 1) + 1;
- unsigned long sector = bh->b_rsector;
- unsigned int count = bh->b_size >> 9;
-
- if (maxsector < count || maxsector - count < sector) {
- /* Yecch */
- bh->b_state &= ~(1 << BH_Dirty);
-
- /* This may well happen - the kernel calls bread()
- without checking the size of the device, e.g.,
- when mounting a device. */
- printk(KERN_INFO
- "attempt to access beyond end of device\n");
- printk(KERN_INFO "%s: rw=%d, want=%ld, limit=%d\n",
- kdevname(bh->b_rdev), rw,
- (sector + count)>>1, minorsize);
-
- bh->b_end_io(bh, 0);
- return;
- }
- }
-
- /*
- * Resolve the mapping until finished. (drivers are
- * still free to implement/resolve their own stacking
- * by explicitly returning 0)
- */
- /* NOTE: we don't repeat the blk_size check for each new device.
- * Stacking drivers are expected to know what they are doing.
- */
- do {
- q = blk_get_queue(bh->b_rdev);
- if (!q) {
- printk(KERN_ERR
- "generic_make_request: Trying to access "
- "nonexistent block-device %s (%ld)\n",
- kdevname(bh->b_rdev), bh->b_rsector);
- buffer_IO_error(bh);
- break;
- }
- } while (q->make_request_fn(q, rw, bh));
-}
-
-
-/**
- * submit_bh: submit a buffer_head to the block device later for I/O
- * @rw: whether to %READ or %WRITE, or maybe to %READA (read ahead)
- * @bh: The &struct buffer_head which describes the I/O
- *
- * submit_bh() is very similar in purpose to generic_make_request(), and
- * uses that function to do most of the work.
- *
- * The extra functionality provided by submit_bh is to determine
- * b_rsector from b_blocknr and b_size, and to set b_rdev from b_dev.
- * This is is appropriate for IO requests that come from the buffer
- * cache and page cache which (currently) always use aligned blocks.
- */
-void submit_bh(int rw, struct buffer_head * bh)
-{
- int count = bh->b_size >> 9;
-
- if (!test_bit(BH_Lock, &bh->b_state))
- BUG();
-
- set_bit(BH_Req, &bh->b_state);
- set_bit(BH_Launder, &bh->b_state);
-
- /*
- * First step, 'identity mapping' - RAID or LVM might
- * further remap this.
- */
- bh->b_rdev = bh->b_dev;
- bh->b_rsector = bh->b_blocknr * count;
-
- get_bh(bh);
- generic_make_request(rw, bh);
-
- /* fix race condition with wait_on_buffer() */
- smp_mb(); /* spin_unlock may have inclusive semantics */
- if (waitqueue_active(&bh->b_wait))
- wake_up(&bh->b_wait);
-
- if (block_dump)
- printk(KERN_DEBUG "%s: %s block %lu/%u on %s\n", current->comm, rw == WRITE ? "WRITE" : "READ", bh->b_rsector, count, kdevname(bh->b_rdev));
-
- put_bh(bh);
- switch (rw) {
- case WRITE:
- kstat.pgpgout += count;
- break;
- default:
- kstat.pgpgin += count;
- break;
- }
-}
-
-/**
- * ll_rw_block: low-level access to block devices
- * @rw: whether to %READ or %WRITE or maybe %READA (readahead)
- * @nr: number of &struct buffer_heads in the array
- * @bhs: array of pointers to &struct buffer_head
- *
- * ll_rw_block() takes an array of pointers to &struct buffer_heads,
- * and requests an I/O operation on them, either a %READ or a %WRITE.
- * The third %READA option is described in the documentation for
- * generic_make_request() which ll_rw_block() calls.
- *
- * This function provides extra functionality that is not in
- * generic_make_request() that is relevant to buffers in the buffer
- * cache or page cache. In particular it drops any buffer that it
- * cannot get a lock on (with the BH_Lock state bit), any buffer that
- * appears to be clean when doing a write request, and any buffer that
- * appears to be up-to-date when doing read request. Further it marks
- * as clean buffers that are processed for writing (the buffer cache
- * wont assume that they are actually clean until the buffer gets
- * unlocked).
- *
- * ll_rw_block sets b_end_io to simple completion handler that marks
- * the buffer up-to-date (if approriate), unlocks the buffer and wakes
- * any waiters. As client that needs a more interesting completion
- * routine should call submit_bh() (or generic_make_request())
- * directly.
- *
- * Caveat:
- * All of the buffers must be for the same device, and must also be
- * of the current approved size for the device. */
-
-void ll_rw_block(int rw, int nr, struct buffer_head * bhs[])
-{
- unsigned int major;
- int correct_size;
- int i;
-
- if (!nr)
- return;
-
- major = MAJOR(bhs[0]->b_dev);
-
- /* Determine correct block size for this device. */
- correct_size = get_hardsect_size(bhs[0]->b_dev);
-
- /* Verify requested block sizes. */
- for (i = 0; i < nr; i++) {
- struct buffer_head *bh = bhs[i];
- if (bh->b_size % correct_size) {
- printk(KERN_NOTICE "ll_rw_block: device %s: "
- "only %d-char blocks implemented (%u)\n",
- kdevname(bhs[0]->b_dev),
- correct_size, bh->b_size);
- goto sorry;
- }
- }
-
- if ((rw & WRITE) && is_read_only(bhs[0]->b_dev)) {
- printk(KERN_NOTICE "Can't write to read-only device %s\n",
- kdevname(bhs[0]->b_dev));
- goto sorry;
- }
-
- for (i = 0; i < nr; i++) {
- struct buffer_head *bh = bhs[i];
-
- lock_buffer(bh);
-
- /* We have the buffer lock */
- atomic_inc(&bh->b_count);
- bh->b_end_io = end_buffer_io_sync;
-
- switch(rw) {
- case WRITE:
- if (!atomic_set_buffer_clean(bh))
- /* Hmmph! Nothing to write */
- goto end_io;
- __mark_buffer_clean(bh);
- break;
-
- case READA:
- case READ:
- if (buffer_uptodate(bh))
- /* Hmmph! Already have it */
- goto end_io;
- break;
- default:
- BUG();
- end_io:
- bh->b_end_io(bh, test_bit(BH_Uptodate, &bh->b_state));
- continue;
- }
-
- submit_bh(rw, bh);
- }
- return;
-
-sorry:
- /* Make sure we don't get infinite dirty retries.. */
- for (i = 0; i < nr; i++)
- mark_buffer_clean(bhs[i]);
-}
-
-#ifdef CONFIG_STRAM_SWAP
-extern int stram_device_init (void);
-#endif
-
-static void blk_writeback_timer(unsigned long data)
-{
- wakeup_bdflush();
- wakeup_kupdate();
-}
-
-/**
- * end_that_request_first - end I/O on one buffer.
- * @req: the request being processed
- * @uptodate: 0 for I/O error
- * @name: the name printed for an I/O error
- *
- * Description:
- * Ends I/O on the first buffer attached to @req, and sets it up
- * for the next buffer_head (if any) in the cluster.
- *
- * Return:
- * 0 - we are done with this request, call end_that_request_last()
- * 1 - still buffers pending for this request
- *
- * Caveat:
- * Drivers implementing their own end_request handling must call
- * blk_finished_io() appropriately.
- **/
-
-int end_that_request_first (struct request *req, int uptodate, char *name)
-{
- struct buffer_head * bh;
- int nsect;
-
- req->errors = 0;
- if (!uptodate)
- printk("end_request: I/O error, dev %s (%s), sector %lu\n",
- kdevname(req->rq_dev), name, req->sector);
-
- if ((bh = req->bh) != NULL) {
- nsect = bh->b_size >> 9;
- blk_finished_io(nsect);
- blk_finished_sectors(req, nsect);
- req->bh = bh->b_reqnext;
- bh->b_reqnext = NULL;
- bh->b_end_io(bh, uptodate);
- if ((bh = req->bh) != NULL) {
- req->hard_sector += nsect;
- req->hard_nr_sectors -= nsect;
- req->sector = req->hard_sector;
- req->nr_sectors = req->hard_nr_sectors;
-
- req->current_nr_sectors = bh->b_size >> 9;
- req->hard_cur_sectors = req->current_nr_sectors;
- if (req->nr_sectors < req->current_nr_sectors) {
- req->nr_sectors = req->current_nr_sectors;
- printk("end_request: buffer-list destroyed\n");
- }
- req->buffer = bh->b_data;
- return 1;
- }
- }
- return 0;
-}
-
-extern int laptop_mode;
-
-void end_that_request_last(struct request *req)
-{
- struct completion *waiting = req->waiting;
-
- /*
- * schedule the writeout of pending dirty data when the disk is idle
- */
- if (laptop_mode && req->cmd == READ)
- mod_timer(&writeback_timer, jiffies + 5 * HZ);
-
- req_finished_io(req);
- blkdev_release_request(req);
- if (waiting)
- complete(waiting);
-}
-
-int __init blk_dev_init(void)
-{
- struct blk_dev_struct *dev;
-
- request_cachep = kmem_cache_create("blkdev_requests",
- sizeof(struct request),
- 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
-
- if (!request_cachep)
- panic("Can't create request pool slab cache\n");
-
- for (dev = blk_dev + MAX_BLKDEV; dev-- != blk_dev;)
- dev->queue = NULL;
-
- memset(ro_bits,0,sizeof(ro_bits));
- memset(max_readahead, 0, sizeof(max_readahead));
- memset(max_sectors, 0, sizeof(max_sectors));
-
- blk_max_low_pfn = max_low_pfn - 1;
- blk_max_pfn = max_pfn - 1;
-
- init_timer(&writeback_timer);
- writeback_timer.function = blk_writeback_timer;
-
-#ifdef CONFIG_AMIGA_Z2RAM
- z2_init();
-#endif
-#ifdef CONFIG_STRAM_SWAP
- stram_device_init();
-#endif
-#ifdef CONFIG_ISP16_CDI
- isp16_init();
-#endif
-#ifdef CONFIG_BLK_DEV_PS2
- ps2esdi_init();
-#endif
-#ifdef CONFIG_BLK_DEV_XD
- xd_init();
-#endif
-#ifdef CONFIG_BLK_DEV_MFM
- mfm_init();
-#endif
-#ifdef CONFIG_PARIDE
- { extern void paride_init(void); paride_init(); };
-#endif
-#ifdef CONFIG_MAC_FLOPPY
- swim3_init();
-#endif
-#ifdef CONFIG_BLK_DEV_SWIM_IOP
- swimiop_init();
-#endif
-#ifdef CONFIG_AMIGA_FLOPPY
- amiga_floppy_init();
-#endif
-#ifdef CONFIG_ATARI_FLOPPY
- atari_floppy_init();
-#endif
-#ifdef CONFIG_BLK_DEV_FD
- floppy_init();
-#else
-#if defined(__i386__) && !defined(CONFIG_XEN) /* Do we even need this? */
- outb_p(0xc, 0x3f2);
-#endif
-#endif
-#ifdef CONFIG_CDU31A
- cdu31a_init();
-#endif
-#ifdef CONFIG_ATARI_ACSI
- acsi_init();
-#endif
-#ifdef CONFIG_MCD
- mcd_init();
-#endif
-#ifdef CONFIG_MCDX
- mcdx_init();
-#endif
-#ifdef CONFIG_SBPCD
- sbpcd_init();
-#endif
-#ifdef CONFIG_AZTCD
- aztcd_init();
-#endif
-#ifdef CONFIG_CDU535
- sony535_init();
-#endif
-#ifdef CONFIG_GSCD
- gscd_init();
-#endif
-#ifdef CONFIG_CM206
- cm206_init();
-#endif
-#ifdef CONFIG_OPTCD
- optcd_init();
-#endif
-#ifdef CONFIG_SJCD
- sjcd_init();
-#endif
-#ifdef CONFIG_APBLOCK
- ap_init();
-#endif
-#ifdef CONFIG_DDV
- ddv_init();
-#endif
-#ifdef CONFIG_MDISK
- mdisk_init();
-#endif
-#ifdef CONFIG_DASD
- dasd_init();
-#endif
-#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_BLOCK)
- tapeblock_init();
-#endif
-#ifdef CONFIG_BLK_DEV_XPRAM
- xpram_init();
-#endif
-
-#ifdef CONFIG_SUN_JSFLASH
- jsfd_init();
-#endif
-
-#ifdef CONFIG_XEN_VBD
- xlblk_init();
-#endif
-
- return 0;
-};
-
-EXPORT_SYMBOL(io_request_lock);
-EXPORT_SYMBOL(end_that_request_first);
-EXPORT_SYMBOL(end_that_request_last);
-EXPORT_SYMBOL(blk_grow_request_list);
-EXPORT_SYMBOL(blk_init_queue);
-EXPORT_SYMBOL(blk_get_queue);
-EXPORT_SYMBOL(blk_cleanup_queue);
-EXPORT_SYMBOL(blk_queue_headactive);
-EXPORT_SYMBOL(blk_queue_throttle_sectors);
-EXPORT_SYMBOL(blk_queue_make_request);
-EXPORT_SYMBOL(generic_make_request);
-EXPORT_SYMBOL(blkdev_release_request);
-EXPORT_SYMBOL(generic_unplug_device);
-EXPORT_SYMBOL(blk_queue_bounce_limit);
-EXPORT_SYMBOL(blk_max_low_pfn);
-EXPORT_SYMBOL(blk_max_pfn);
-EXPORT_SYMBOL(blk_seg_merge_ok);
-EXPORT_SYMBOL(blk_nohighio);
diff --git a/xenolinux-2.4.25-sparse/drivers/char/mem.c b/xenolinux-2.4.25-sparse/drivers/char/mem.c
deleted file mode 100644
index dbc10d6382..0000000000
--- a/xenolinux-2.4.25-sparse/drivers/char/mem.c
+++ /dev/null
@@ -1,815 +0,0 @@
-/*
- * linux/drivers/char/mem.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * Added devfs support.
- * Jan-11-1998, C. Scott Ananian <cananian@alumni.princeton.edu>
- * Shared /dev/zero mmaping support, Feb 2000, Kanoj Sarcar <kanoj@sgi.com>
- *
- * MODIFIED FOR XEN by Keir Fraser, 10th July 2003.
- * Linux running on Xen has strange semantics for /dev/mem and /dev/kmem!!
- * 1. mmap will not work on /dev/kmem
- * 2. mmap on /dev/mem interprets the 'file offset' as a machine address
- * rather than a physical address.
- * I don't believe anyone sane mmaps /dev/kmem, but /dev/mem is mmapped
- * to get at memory-mapped I/O spaces (eg. the VESA X server does this).
- * For this to work at all we need to expect machine addresses.
- * Reading/writing of /dev/kmem expects kernel virtual addresses, as usual.
- * Reading/writing of /dev/mem expects 'physical addresses' as usual -- this
- * is because /dev/mem can only read/write existing kernel mappings, which
- * will be normal RAM, and we should present pseudo-physical layout for all
- * except I/O (which is the sticky case that mmap is hacked to deal with).
- */
-
-#include <linux/config.h>
-#include <linux/mm.h>
-#include <linux/miscdevice.h>
-#include <linux/tpqic02.h>
-#include <linux/ftape.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/mman.h>
-#include <linux/random.h>
-#include <linux/init.h>
-#include <linux/raw.h>
-#include <linux/tty.h>
-#include <linux/capability.h>
-#include <linux/ptrace.h>
-
-#include <asm/uaccess.h>
-#include <asm/io.h>
-#include <asm/pgalloc.h>
-
-#ifdef CONFIG_I2C
-extern int i2c_init_all(void);
-#endif
-#ifdef CONFIG_FB
-extern void fbmem_init(void);
-#endif
-#ifdef CONFIG_PROM_CONSOLE
-extern void prom_con_init(void);
-#endif
-#ifdef CONFIG_MDA_CONSOLE
-extern void mda_console_init(void);
-#endif
-#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
-extern void tapechar_init(void);
-#endif
-
-static ssize_t do_write_mem(struct file * file, void *p, unsigned long realp,
- const char * buf, size_t count, loff_t *ppos)
-{
- ssize_t written;
-
- written = 0;
-#if defined(__sparc__) || defined(__mc68000__)
- /* we don't have page 0 mapped on sparc and m68k.. */
- if (realp < PAGE_SIZE) {
- unsigned long sz = PAGE_SIZE-realp;
- if (sz > count) sz = count;
- /* Hmm. Do something? */
- buf+=sz;
- p+=sz;
- count-=sz;
- written+=sz;
- }
-#endif
- if (copy_from_user(p, buf, count))
- return -EFAULT;
- written += count;
- *ppos += written;
- return written;
-}
-
-
-/*
- * This funcion reads the *physical* memory. The f_pos points directly to the
- * memory location.
- */
-static ssize_t read_mem(struct file * file, char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long p = *ppos;
- unsigned long end_mem;
- ssize_t read;
-
- end_mem = __pa(high_memory);
- if (p >= end_mem)
- return 0;
- if (count > end_mem - p)
- count = end_mem - p;
- read = 0;
-#if defined(__sparc__) || defined(__mc68000__)
- /* we don't have page 0 mapped on sparc and m68k.. */
- if (p < PAGE_SIZE) {
- unsigned long sz = PAGE_SIZE-p;
- if (sz > count)
- sz = count;
- if (sz > 0) {
- if (clear_user(buf, sz))
- return -EFAULT;
- buf += sz;
- p += sz;
- count -= sz;
- read += sz;
- }
- }
-#endif
- if (copy_to_user(buf, __va(p), count))
- return -EFAULT;
- read += count;
- *ppos += read;
- return read;
-}
-
-static ssize_t write_mem(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long p = *ppos;
- unsigned long end_mem;
-
- end_mem = __pa(high_memory);
- if (p >= end_mem)
- return 0;
- if (count > end_mem - p)
- count = end_mem - p;
- return do_write_mem(file, __va(p), p, buf, count, ppos);
-}
-
-#ifndef pgprot_noncached
-
-/*
- * This should probably be per-architecture in <asm/pgtable.h>
- */
-static inline pgprot_t pgprot_noncached(pgprot_t _prot)
-{
- unsigned long prot = pgprot_val(_prot);
-
-#if defined(__i386__) || defined(__x86_64__)
- /* On PPro and successors, PCD alone doesn't always mean
- uncached because of interactions with the MTRRs. PCD | PWT
- means definitely uncached. */
- if (boot_cpu_data.x86 > 3)
- prot |= _PAGE_PCD | _PAGE_PWT;
-#elif defined(__powerpc__)
- prot |= _PAGE_NO_CACHE | _PAGE_GUARDED;
-#elif defined(__mc68000__)
-#ifdef SUN3_PAGE_NOCACHE
- if (MMU_IS_SUN3)
- prot |= SUN3_PAGE_NOCACHE;
- else
-#endif
- if (MMU_IS_851 || MMU_IS_030)
- prot |= _PAGE_NOCACHE030;
- /* Use no-cache mode, serialized */
- else if (MMU_IS_040 || MMU_IS_060)
- prot = (prot & _CACHEMASK040) | _PAGE_NOCACHE_S;
-#endif
-
- return __pgprot(prot);
-}
-
-#endif /* !pgprot_noncached */
-
-/*
- * Architectures vary in how they handle caching for addresses
- * outside of main memory.
- */
-static inline int noncached_address(unsigned long addr)
-{
-#if defined(__i386__)
- /*
- * On the PPro and successors, the MTRRs are used to set
- * memory types for physical addresses outside main memory,
- * so blindly setting PCD or PWT on those pages is wrong.
- * For Pentiums and earlier, the surround logic should disable
- * caching for the high addresses through the KEN pin, but
- * we maintain the tradition of paranoia in this code.
- */
- return !( test_bit(X86_FEATURE_MTRR, &boot_cpu_data.x86_capability) ||
- test_bit(X86_FEATURE_K6_MTRR, &boot_cpu_data.x86_capability) ||
- test_bit(X86_FEATURE_CYRIX_ARR, &boot_cpu_data.x86_capability) ||
- test_bit(X86_FEATURE_CENTAUR_MCR, &boot_cpu_data.x86_capability) )
- && addr >= __pa(high_memory);
-#else
- return addr >= __pa(high_memory);
-#endif
-}
-
-static int mmap_mem(struct file * file, struct vm_area_struct * vma)
-{
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-
-#if defined(CONFIG_XEN) && defined(CONFIG_XEN_PRIVILEGED_GUEST)
- if (!(start_info.flags & SIF_PRIVILEGED))
- return -ENXIO;
-
- /* DONTCOPY is essential for Xen as copy_page_range is broken. */
- vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY;
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
- if (direct_remap_area_pages(vma->vm_mm, vma->vm_start, offset,
- vma->vm_end-vma->vm_start, vma->vm_page_prot))
- return -EAGAIN;
- return 0;
-#elif defined(CONFIG_XEN)
- return -ENXIO;
-#else
- /*
- * Accessing memory above the top the kernel knows about or
- * through a file pointer that was marked O_SYNC will be
- * done non-cached.
- */
- if (noncached_address(offset) || (file->f_flags & O_SYNC))
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-
- /* Don't try to swap out physical pages.. */
- vma->vm_flags |= VM_RESERVED;
-
- /*
- * Don't dump addresses that are not real memory to a core file.
- */
- if (offset >= __pa(high_memory) || (file->f_flags & O_SYNC))
- vma->vm_flags |= VM_IO;
-
- if (remap_page_range(vma->vm_start, offset, vma->vm_end-vma->vm_start,
- vma->vm_page_prot))
- return -EAGAIN;
- return 0;
-#endif
-}
-
-/*
- * This function reads the *virtual* memory as seen by the kernel.
- */
-static ssize_t read_kmem(struct file *file, char *buf,
- size_t count, loff_t *ppos)
-{
- unsigned long p = *ppos;
- ssize_t read = 0;
- ssize_t virtr = 0;
- char * kbuf; /* k-addr because vread() takes vmlist_lock rwlock */
-
- if (p < (unsigned long) high_memory) {
- read = count;
- if (count > (unsigned long) high_memory - p)
- read = (unsigned long) high_memory - p;
-
-#if defined(__sparc__) || defined(__mc68000__)
- /* we don't have page 0 mapped on sparc and m68k.. */
- if (p < PAGE_SIZE && read > 0) {
- size_t tmp = PAGE_SIZE - p;
- if (tmp > read) tmp = read;
- if (clear_user(buf, tmp))
- return -EFAULT;
- buf += tmp;
- p += tmp;
- read -= tmp;
- count -= tmp;
- }
-#endif
- if (copy_to_user(buf, (char *)p, read))
- return -EFAULT;
- p += read;
- buf += read;
- count -= read;
- }
-
- if (count > 0) {
- kbuf = (char *)__get_free_page(GFP_KERNEL);
- if (!kbuf)
- return -ENOMEM;
- while (count > 0) {
- int len = count;
-
- if (len > PAGE_SIZE)
- len = PAGE_SIZE;
- len = vread(kbuf, (char *)p, len);
- if (!len)
- break;
- if (copy_to_user(buf, kbuf, len)) {
- free_page((unsigned long)kbuf);
- return -EFAULT;
- }
- count -= len;
- buf += len;
- virtr += len;
- p += len;
- }
- free_page((unsigned long)kbuf);
- }
- *ppos = p;
- return virtr + read;
-}
-
-extern long vwrite(char *buf, char *addr, unsigned long count);
-
-/*
- * This function writes to the *virtual* memory as seen by the kernel.
- */
-static ssize_t write_kmem(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long p = *ppos;
- ssize_t wrote = 0;
- ssize_t virtr = 0;
- char * kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */
-
- if (p < (unsigned long) high_memory) {
- wrote = count;
- if (count > (unsigned long) high_memory - p)
- wrote = (unsigned long) high_memory - p;
-
- wrote = do_write_mem(file, (void*)p, p, buf, wrote, ppos);
-
- p += wrote;
- buf += wrote;
- count -= wrote;
- }
-
- if (count > 0) {
- kbuf = (char *)__get_free_page(GFP_KERNEL);
- if (!kbuf)
- return -ENOMEM;
- while (count > 0) {
- int len = count;
-
- if (len > PAGE_SIZE)
- len = PAGE_SIZE;
- if (len && copy_from_user(kbuf, buf, len)) {
- free_page((unsigned long)kbuf);
- return -EFAULT;
- }
- len = vwrite(kbuf, (char *)p, len);
- count -= len;
- buf += len;
- virtr += len;
- p += len;
- }
- free_page((unsigned long)kbuf);
- }
-
- *ppos = p;
- return virtr + wrote;
-}
-
-#if defined(CONFIG_ISA) || !defined(__mc68000__)
-static ssize_t read_port(struct file * file, char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long i = *ppos;
- char *tmp = buf;
-
- if (verify_area(VERIFY_WRITE,buf,count))
- return -EFAULT;
- while (count-- > 0 && i < 65536) {
- if (__put_user(inb(i),tmp) < 0)
- return -EFAULT;
- i++;
- tmp++;
- }
- *ppos = i;
- return tmp-buf;
-}
-
-static ssize_t write_port(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long i = *ppos;
- const char * tmp = buf;
-
- if (verify_area(VERIFY_READ,buf,count))
- return -EFAULT;
- while (count-- > 0 && i < 65536) {
- char c;
- if (__get_user(c, tmp))
- return -EFAULT;
- outb(c,i);
- i++;
- tmp++;
- }
- *ppos = i;
- return tmp-buf;
-}
-#endif
-
-static ssize_t read_null(struct file * file, char * buf,
- size_t count, loff_t *ppos)
-{
- return 0;
-}
-
-static ssize_t write_null(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- return count;
-}
-
-/*
- * For fun, we are using the MMU for this.
- */
-static inline size_t read_zero_pagealigned(char * buf, size_t size)
-{
- struct mm_struct *mm;
- struct vm_area_struct * vma;
- unsigned long addr=(unsigned long)buf;
-
- mm = current->mm;
- /* Oops, this was forgotten before. -ben */
- down_read(&mm->mmap_sem);
-
- /* For private mappings, just map in zero pages. */
- for (vma = find_vma(mm, addr); vma; vma = vma->vm_next) {
- unsigned long count;
-
- if (vma->vm_start > addr || (vma->vm_flags & VM_WRITE) == 0)
- goto out_up;
- if (vma->vm_flags & VM_SHARED)
- break;
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- if (vma->vm_flags & VM_IO)
- break;
-#endif
- count = vma->vm_end - addr;
- if (count > size)
- count = size;
-
- zap_page_range(mm, addr, count);
- zeromap_page_range(addr, count, PAGE_COPY);
-
- size -= count;
- buf += count;
- addr += count;
- if (size == 0)
- goto out_up;
- }
-
- up_read(&mm->mmap_sem);
-
- /* The shared case is hard. Let's do the conventional zeroing. */
- do {
- unsigned long unwritten = clear_user(buf, PAGE_SIZE);
- if (unwritten)
- return size + unwritten - PAGE_SIZE;
- if (current->need_resched)
- schedule();
- buf += PAGE_SIZE;
- size -= PAGE_SIZE;
- } while (size);
-
- return size;
-out_up:
- up_read(&mm->mmap_sem);
- return size;
-}
-
-static ssize_t read_zero(struct file * file, char * buf,
- size_t count, loff_t *ppos)
-{
- unsigned long left, unwritten, written = 0;
-
- if (!count)
- return 0;
-
- if (!access_ok(VERIFY_WRITE, buf, count))
- return -EFAULT;
-
- left = count;
-
- /* do we want to be clever? Arbitrary cut-off */
- if (count >= PAGE_SIZE*4) {
- unsigned long partial;
-
- /* How much left of the page? */
- partial = (PAGE_SIZE-1) & -(unsigned long) buf;
- unwritten = clear_user(buf, partial);
- written = partial - unwritten;
- if (unwritten)
- goto out;
- left -= partial;
- buf += partial;
- unwritten = read_zero_pagealigned(buf, left & PAGE_MASK);
- written += (left & PAGE_MASK) - unwritten;
- if (unwritten)
- goto out;
- buf += left & PAGE_MASK;
- left &= ~PAGE_MASK;
- }
- unwritten = clear_user(buf, left);
- written += left - unwritten;
-out:
- return written ? written : -EFAULT;
-}
-
-static int mmap_zero(struct file * file, struct vm_area_struct * vma)
-{
- if (vma->vm_flags & VM_SHARED)
- return shmem_zero_setup(vma);
- if (zeromap_page_range(vma->vm_start, vma->vm_end - vma->vm_start, vma->vm_page_prot))
- return -EAGAIN;
- return 0;
-}
-
-static ssize_t write_full(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- return -ENOSPC;
-}
-
-/*
- * Special lseek() function for /dev/null and /dev/zero. Most notably, you
- * can fopen() both devices with "a" now. This was previously impossible.
- * -- SRB.
- */
-
-static loff_t null_lseek(struct file * file, loff_t offset, int orig)
-{
- return file->f_pos = 0;
-}
-
-/*
- * The memory devices use the full 32/64 bits of the offset, and so we cannot
- * check against negative addresses: they are ok. The return value is weird,
- * though, in that case (0).
- *
- * also note that seeking relative to the "end of file" isn't supported:
- * it has no meaning, so it returns -EINVAL.
- */
-static loff_t memory_lseek(struct file * file, loff_t offset, int orig)
-{
- loff_t ret;
-
- switch (orig) {
- case 0:
- file->f_pos = offset;
- ret = file->f_pos;
- force_successful_syscall_return();
- break;
- case 1:
- file->f_pos += offset;
- ret = file->f_pos;
- force_successful_syscall_return();
- break;
- default:
- ret = -EINVAL;
- }
- return ret;
-}
-
-static int open_port(struct inode * inode, struct file * filp)
-{
- return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
-}
-
-struct page *kmem_vm_nopage(struct vm_area_struct *vma, unsigned long address, int write)
-{
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
- unsigned long kaddr;
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *ptep, pte;
- struct page *page = NULL;
-
- /* address is user VA; convert to kernel VA of desired page */
- kaddr = (address - vma->vm_start) + offset;
- kaddr = VMALLOC_VMADDR(kaddr);
-
- spin_lock(&init_mm.page_table_lock);
-
- /* Lookup page structure for kernel VA */
- pgd = pgd_offset(&init_mm, kaddr);
- if (pgd_none(*pgd) || pgd_bad(*pgd))
- goto out;
- pmd = pmd_offset(pgd, kaddr);
- if (pmd_none(*pmd) || pmd_bad(*pmd))
- goto out;
- ptep = pte_offset(pmd, kaddr);
- if (!ptep)
- goto out;
- pte = *ptep;
- if (!pte_present(pte))
- goto out;
- if (write && !pte_write(pte))
- goto out;
- page = pte_page(pte);
- if (!VALID_PAGE(page)) {
- page = NULL;
- goto out;
- }
-
- /* Increment reference count on page */
- get_page(page);
-
-out:
- spin_unlock(&init_mm.page_table_lock);
-
- return page;
-}
-
-struct vm_operations_struct kmem_vm_ops = {
- nopage: kmem_vm_nopage,
-};
-
-static int mmap_kmem(struct file * file, struct vm_area_struct * vma)
-{
- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
- unsigned long size = vma->vm_end - vma->vm_start;
-
-#if defined(CONFIG_XEN)
- return -ENXIO;
-#endif
-
- /*
- * If the user is not attempting to mmap a high memory address then
- * the standard mmap_mem mechanism will work. High memory addresses
- * need special handling, as remap_page_range expects a physically-
- * contiguous range of kernel addresses (such as obtained in kmalloc).
- */
- if ((offset + size) < (unsigned long) high_memory)
- return mmap_mem(file, vma);
-
- /*
- * Accessing memory above the top the kernel knows about or
- * through a file pointer that was marked O_SYNC will be
- * done non-cached.
- */
- if (noncached_address(offset) || (file->f_flags & O_SYNC))
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
-
- /* Don't do anything here; "nopage" will fill the holes */
- vma->vm_ops = &kmem_vm_ops;
-
- /* Don't try to swap out physical pages.. */
- vma->vm_flags |= VM_RESERVED;
-
- /*
- * Don't dump addresses that are not real memory to a core file.
- */
- vma->vm_flags |= VM_IO;
-
- return 0;
-}
-
-#define zero_lseek null_lseek
-#define full_lseek null_lseek
-#define write_zero write_null
-#define read_full read_zero
-#define open_mem open_port
-#define open_kmem open_mem
-
-static struct file_operations mem_fops = {
- llseek: memory_lseek,
- read: read_mem,
- write: write_mem,
- mmap: mmap_mem,
- open: open_mem,
-};
-
-static struct file_operations kmem_fops = {
- llseek: memory_lseek,
- read: read_kmem,
- write: write_kmem,
- mmap: mmap_kmem,
- open: open_kmem,
-};
-
-static struct file_operations null_fops = {
- llseek: null_lseek,
- read: read_null,
- write: write_null,
-};
-
-#if defined(CONFIG_ISA) || !defined(__mc68000__)
-static struct file_operations port_fops = {
- llseek: memory_lseek,
- read: read_port,
- write: write_port,
- open: open_port,
-};
-#endif
-
-static struct file_operations zero_fops = {
- llseek: zero_lseek,
- read: read_zero,
- write: write_zero,
- mmap: mmap_zero,
-};
-
-static struct file_operations full_fops = {
- llseek: full_lseek,
- read: read_full,
- write: write_full,
-};
-
-static int memory_open(struct inode * inode, struct file * filp)
-{
- switch (MINOR(inode->i_rdev)) {
- case 1:
- filp->f_op = &mem_fops;
- break;
- case 2:
- filp->f_op = &kmem_fops;
- break;
- case 3:
- filp->f_op = &null_fops;
- break;
-#if defined(CONFIG_ISA) || !defined(__mc68000__)
- case 4:
-#if defined(CONFIG_XEN)
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- if (!(start_info.flags & SIF_PRIVILEGED))
-#endif
- return -ENXIO;
-#endif
- filp->f_op = &port_fops;
- break;
-#endif
- case 5:
- filp->f_op = &zero_fops;
- break;
- case 7:
- filp->f_op = &full_fops;
- break;
- case 8:
- filp->f_op = &random_fops;
- break;
- case 9:
- filp->f_op = &urandom_fops;
- break;
- default:
- return -ENXIO;
- }
- if (filp->f_op && filp->f_op->open)
- return filp->f_op->open(inode,filp);
- return 0;
-}
-
-void __init memory_devfs_register (void)
-{
- /* These are never unregistered */
- static const struct {
- unsigned short minor;
- char *name;
- umode_t mode;
- struct file_operations *fops;
- } list[] = { /* list of minor devices */
- {1, "mem", S_IRUSR | S_IWUSR | S_IRGRP, &mem_fops},
- {2, "kmem", S_IRUSR | S_IWUSR | S_IRGRP, &kmem_fops},
- {3, "null", S_IRUGO | S_IWUGO, &null_fops},
-#if defined(CONFIG_ISA) || !defined(__mc68000__)
- {4, "port", S_IRUSR | S_IWUSR | S_IRGRP, &port_fops},
-#endif
- {5, "zero", S_IRUGO | S_IWUGO, &zero_fops},
- {7, "full", S_IRUGO | S_IWUGO, &full_fops},
- {8, "random", S_IRUGO | S_IWUSR, &random_fops},
- {9, "urandom", S_IRUGO | S_IWUSR, &urandom_fops}
- };
- int i;
-
- for (i=0; i<(sizeof(list)/sizeof(*list)); i++)
- devfs_register (NULL, list[i].name, DEVFS_FL_NONE,
- MEM_MAJOR, list[i].minor,
- list[i].mode | S_IFCHR,
- list[i].fops, NULL);
-}
-
-static struct file_operations memory_fops = {
- open: memory_open, /* just a selector for the real open */
-};
-
-int __init chr_dev_init(void)
-{
- if (devfs_register_chrdev(MEM_MAJOR,"mem",&memory_fops))
- printk("unable to get major %d for memory devs\n", MEM_MAJOR);
- memory_devfs_register();
- rand_initialize();
-#ifdef CONFIG_I2C
- i2c_init_all();
-#endif
-#if defined (CONFIG_FB)
- fbmem_init();
-#endif
-#if defined (CONFIG_PROM_CONSOLE)
- prom_con_init();
-#endif
-#if defined (CONFIG_MDA_CONSOLE)
- mda_console_init();
-#endif
- tty_init();
-#ifdef CONFIG_M68K_PRINTER
- lp_m68k_init();
-#endif
- misc_init();
-#if CONFIG_QIC02_TAPE
- qic02_tape_init();
-#endif
-#ifdef CONFIG_FTAPE
- ftape_init();
-#endif
-#if defined(CONFIG_S390_TAPE) && defined(CONFIG_S390_TAPE_CHAR)
- tapechar_init();
-#endif
- return 0;
-}
-
-__initcall(chr_dev_init);
diff --git a/xenolinux-2.4.25-sparse/drivers/char/tty_io.c b/xenolinux-2.4.25-sparse/drivers/char/tty_io.c
deleted file mode 100644
index b3d0fb4397..0000000000
--- a/xenolinux-2.4.25-sparse/drivers/char/tty_io.c
+++ /dev/null
@@ -1,2472 +0,0 @@
-/*
- * linux/drivers/char/tty_io.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/*
- * 'tty_io.c' gives an orthogonal feeling to tty's, be they consoles
- * or rs-channels. It also implements echoing, cooked mode etc.
- *
- * Kill-line thanks to John T Kohl, who also corrected VMIN = VTIME = 0.
- *
- * Modified by Theodore Ts'o, 9/14/92, to dynamically allocate the
- * tty_struct and tty_queue structures. Previously there was an array
- * of 256 tty_struct's which was statically allocated, and the
- * tty_queue structures were allocated at boot time. Both are now
- * dynamically allocated only when the tty is open.
- *
- * Also restructured routines so that there is more of a separation
- * between the high-level tty routines (tty_io.c and tty_ioctl.c) and
- * the low-level tty routines (serial.c, pty.c, console.c). This
- * makes for cleaner and more compact code. -TYT, 9/17/92
- *
- * Modified by Fred N. van Kempen, 01/29/93, to add line disciplines
- * which can be dynamically activated and de-activated by the line
- * discipline handling modules (like SLIP).
- *
- * NOTE: pay no attention to the line discipline code (yet); its
- * interface is still subject to change in this version...
- * -- TYT, 1/31/92
- *
- * Added functionality to the OPOST tty handling. No delays, but all
- * other bits should be there.
- * -- Nick Holloway <alfie@dcs.warwick.ac.uk>, 27th May 1993.
- *
- * Rewrote canonical mode and added more termios flags.
- * -- julian@uhunix.uhcc.hawaii.edu (J. Cowley), 13Jan94
- *
- * Reorganized FASYNC support so mouse code can share it.
- * -- ctm@ardi.com, 9Sep95
- *
- * New TIOCLINUX variants added.
- * -- mj@k332.feld.cvut.cz, 19-Nov-95
- *
- * Restrict vt switching via ioctl()
- * -- grif@cs.ucr.edu, 5-Dec-95
- *
- * Move console and virtual terminal code to more appropriate files,
- * implement CONFIG_VT and generalize console device interface.
- * -- Marko Kohtala <Marko.Kohtala@hut.fi>, March 97
- *
- * Rewrote init_dev and release_dev to eliminate races.
- * -- Bill Hawes <whawes@star.net>, June 97
- *
- * Added devfs support.
- * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 13-Jan-1998
- *
- * Added support for a Unix98-style ptmx device.
- * -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998
- *
- * Reduced memory usage for older ARM systems
- * -- Russell King <rmk@arm.linux.org.uk>
- *
- * Move do_SAK() into process context. Less stack use in devfs functions.
- * alloc_tty_struct() always uses kmalloc() -- Andrew Morton <andrewm@uow.edu.eu> 17Mar01
- */
-
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/major.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/fcntl.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/tty.h>
-#include <linux/tty_driver.h>
-#include <linux/tty_flip.h>
-#include <linux/devpts_fs.h>
-#include <linux/file.h>
-#include <linux/console.h>
-#include <linux/timer.h>
-#include <linux/ctype.h>
-#include <linux/kd.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/slab.h>
-#include <linux/poll.h>
-#include <linux/proc_fs.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/smp_lock.h>
-
-#include <asm/uaccess.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-
-#include <linux/kbd_kern.h>
-#include <linux/vt_kern.h>
-#include <linux/selection.h>
-#include <linux/devfs_fs_kernel.h>
-
-#include <linux/kmod.h>
-
-#ifdef CONFIG_XEN_CONSOLE
-extern void xen_console_init(void);
-#endif
-
-#ifdef CONFIG_VT
-extern void con_init_devfs (void);
-#endif
-
-extern void disable_early_printk(void);
-
-#define CONSOLE_DEV MKDEV(TTY_MAJOR,0)
-#define TTY_DEV MKDEV(TTYAUX_MAJOR,0)
-#define SYSCONS_DEV MKDEV(TTYAUX_MAJOR,1)
-#define PTMX_DEV MKDEV(TTYAUX_MAJOR,2)
-
-#undef TTY_DEBUG_HANGUP
-
-#define TTY_PARANOIA_CHECK 1
-#define CHECK_TTY_COUNT 1
-
-struct termios tty_std_termios; /* for the benefit of tty drivers */
-struct tty_driver *tty_drivers; /* linked list of tty drivers */
-struct tty_ldisc ldiscs[NR_LDISCS]; /* line disc dispatch table */
-
-#ifdef CONFIG_UNIX98_PTYS
-extern struct tty_driver ptm_driver[]; /* Unix98 pty masters; for /dev/ptmx */
-extern struct tty_driver pts_driver[]; /* Unix98 pty slaves; for /dev/ptmx */
-#endif
-
-static void initialize_tty_struct(struct tty_struct *tty);
-
-static ssize_t tty_read(struct file *, char *, size_t, loff_t *);
-static ssize_t tty_write(struct file *, const char *, size_t, loff_t *);
-static unsigned int tty_poll(struct file *, poll_table *);
-static int tty_open(struct inode *, struct file *);
-static int tty_release(struct inode *, struct file *);
-int tty_ioctl(struct inode * inode, struct file * file,
- unsigned int cmd, unsigned long arg);
-static int tty_fasync(int fd, struct file * filp, int on);
-extern int vme_scc_init (void);
-extern long vme_scc_console_init(void);
-extern int serial167_init(void);
-extern long serial167_console_init(void);
-extern void console_8xx_init(void);
-extern void au1x00_serial_console_init(void);
-extern int rs_8xx_init(void);
-extern void mac_scc_console_init(void);
-extern void hwc_console_init(void);
-extern void hwc_tty_init(void);
-extern void con3215_init(void);
-extern void tty3215_init(void);
-extern void tub3270_con_init(void);
-extern void tub3270_init(void);
-extern void rs285_console_init(void);
-extern void sa1100_rs_console_init(void);
-extern void sgi_serial_console_init(void);
-extern void sn_sal_serial_console_init(void);
-extern void sci_console_init(void);
-extern void dec_serial_console_init(void);
-extern void tx3912_console_init(void);
-extern void tx3912_rs_init(void);
-extern void txx927_console_init(void);
-extern void txx9_rs_init(void);
-extern void txx9_serial_console_init(void);
-extern void sb1250_serial_console_init(void);
-extern void arc_console_init(void);
-extern int hvc_console_init(void);
-
-#ifndef MIN
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a,b) ((a) < (b) ? (b) : (a))
-#endif
-
-static struct tty_struct *alloc_tty_struct(void)
-{
- struct tty_struct *tty;
-
- tty = kmalloc(sizeof(struct tty_struct), GFP_KERNEL);
- if (tty)
- memset(tty, 0, sizeof(struct tty_struct));
- return tty;
-}
-
-static inline void free_tty_struct(struct tty_struct *tty)
-{
- kfree(tty);
-}
-
-/*
- * This routine returns the name of tty.
- */
-static char *
-_tty_make_name(struct tty_struct *tty, const char *name, char *buf)
-{
- int idx = (tty)?MINOR(tty->device) - tty->driver.minor_start:0;
-
- if (!tty) /* Hmm. NULL pointer. That's fun. */
- strcpy(buf, "NULL tty");
- else
- sprintf(buf, name,
- idx + tty->driver.name_base);
-
- return buf;
-}
-
-#define TTY_NUMBER(tty) (MINOR((tty)->device) - (tty)->driver.minor_start + \
- (tty)->driver.name_base)
-
-char *tty_name(struct tty_struct *tty, char *buf)
-{
- return _tty_make_name(tty, (tty)?tty->driver.name:NULL, buf);
-}
-
-inline int tty_paranoia_check(struct tty_struct *tty, kdev_t device,
- const char *routine)
-{
-#ifdef TTY_PARANOIA_CHECK
- static const char badmagic[] = KERN_WARNING
- "Warning: bad magic number for tty struct (%s) in %s\n";
- static const char badtty[] = KERN_WARNING
- "Warning: null TTY for (%s) in %s\n";
-
- if (!tty) {
- printk(badtty, kdevname(device), routine);
- return 1;
- }
- if (tty->magic != TTY_MAGIC) {
- printk(badmagic, kdevname(device), routine);
- return 1;
- }
-#endif
- return 0;
-}
-
-static int check_tty_count(struct tty_struct *tty, const char *routine)
-{
-#ifdef CHECK_TTY_COUNT
- struct list_head *p;
- int count = 0;
-
- file_list_lock();
- for(p = tty->tty_files.next; p != &tty->tty_files; p = p->next) {
- if(list_entry(p, struct file, f_list)->private_data == tty)
- count++;
- }
- file_list_unlock();
- if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
- tty->driver.subtype == PTY_TYPE_SLAVE &&
- tty->link && tty->link->count)
- count++;
- if (tty->count != count) {
- printk(KERN_WARNING "Warning: dev (%s) tty->count(%d) "
- "!= #fd's(%d) in %s\n",
- kdevname(tty->device), tty->count, count, routine);
- return count;
- }
-#endif
- return 0;
-}
-
-int tty_register_ldisc(int disc, struct tty_ldisc *new_ldisc)
-{
- if (disc < N_TTY || disc >= NR_LDISCS)
- return -EINVAL;
-
- if (new_ldisc) {
- ldiscs[disc] = *new_ldisc;
- ldiscs[disc].flags |= LDISC_FLAG_DEFINED;
- ldiscs[disc].num = disc;
- } else
- memset(&ldiscs[disc], 0, sizeof(struct tty_ldisc));
-
- return 0;
-}
-
-EXPORT_SYMBOL(tty_register_ldisc);
-
-/* Set the discipline of a tty line. */
-static int tty_set_ldisc(struct tty_struct *tty, int ldisc)
-{
- int retval = 0;
- struct tty_ldisc o_ldisc;
- char buf[64];
-
- if ((ldisc < N_TTY) || (ldisc >= NR_LDISCS))
- return -EINVAL;
- /* Eduardo Blanco <ejbs@cs.cs.com.uy> */
- /* Cyrus Durgin <cider@speakeasy.org> */
- if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED)) {
- char modname [20];
- sprintf(modname, "tty-ldisc-%d", ldisc);
- request_module (modname);
- }
- if (!(ldiscs[ldisc].flags & LDISC_FLAG_DEFINED))
- return -EINVAL;
-
- if (tty->ldisc.num == ldisc)
- return 0; /* We are already in the desired discipline */
- o_ldisc = tty->ldisc;
-
- tty_wait_until_sent(tty, 0);
-
- /* Shutdown the current discipline. */
- if (tty->ldisc.close)
- (tty->ldisc.close)(tty);
-
- /* Now set up the new line discipline. */
- tty->ldisc = ldiscs[ldisc];
- tty->termios->c_line = ldisc;
- if (tty->ldisc.open)
- retval = (tty->ldisc.open)(tty);
- if (retval < 0) {
- tty->ldisc = o_ldisc;
- tty->termios->c_line = tty->ldisc.num;
- if (tty->ldisc.open && (tty->ldisc.open(tty) < 0)) {
- tty->ldisc = ldiscs[N_TTY];
- tty->termios->c_line = N_TTY;
- if (tty->ldisc.open) {
- int r = tty->ldisc.open(tty);
-
- if (r < 0)
- panic("Couldn't open N_TTY ldisc for "
- "%s --- error %d.",
- tty_name(tty, buf), r);
- }
- }
- }
- if (tty->ldisc.num != o_ldisc.num && tty->driver.set_ldisc)
- tty->driver.set_ldisc(tty);
- return retval;
-}
-
-/*
- * This routine returns a tty driver structure, given a device number
- */
-struct tty_driver *get_tty_driver(kdev_t device)
-{
- int major, minor;
- struct tty_driver *p;
-
- minor = MINOR(device);
- major = MAJOR(device);
-
- for (p = tty_drivers; p; p = p->next) {
- if (p->major != major)
- continue;
- if (minor < p->minor_start)
- continue;
- if (minor >= p->minor_start + p->num)
- continue;
- return p;
- }
- return NULL;
-}
-
-/*
- * If we try to write to, or set the state of, a terminal and we're
- * not in the foreground, send a SIGTTOU. If the signal is blocked or
- * ignored, go ahead and perform the operation. (POSIX 7.2)
- */
-int tty_check_change(struct tty_struct * tty)
-{
- if (current->tty != tty)
- return 0;
- if (tty->pgrp <= 0) {
- printk(KERN_WARNING "tty_check_change: tty->pgrp <= 0!\n");
- return 0;
- }
- if (current->pgrp == tty->pgrp)
- return 0;
- if (is_ignored(SIGTTOU))
- return 0;
- if (is_orphaned_pgrp(current->pgrp))
- return -EIO;
- (void) kill_pg(current->pgrp,SIGTTOU,1);
- return -ERESTARTSYS;
-}
-
-static ssize_t hung_up_tty_read(struct file * file, char * buf,
- size_t count, loff_t *ppos)
-{
- /* Can't seek (pread) on ttys. */
- if (ppos != &file->f_pos)
- return -ESPIPE;
- return 0;
-}
-
-static ssize_t hung_up_tty_write(struct file * file, const char * buf,
- size_t count, loff_t *ppos)
-{
- /* Can't seek (pwrite) on ttys. */
- if (ppos != &file->f_pos)
- return -ESPIPE;
- return -EIO;
-}
-
-/* No kernel lock held - none needed ;) */
-static unsigned int hung_up_tty_poll(struct file * filp, poll_table * wait)
-{
- return POLLIN | POLLOUT | POLLERR | POLLHUP | POLLRDNORM | POLLWRNORM;
-}
-
-static int hung_up_tty_ioctl(struct inode * inode, struct file * file,
- unsigned int cmd, unsigned long arg)
-{
- return cmd == TIOCSPGRP ? -ENOTTY : -EIO;
-}
-
-static struct file_operations tty_fops = {
- llseek: no_llseek,
- read: tty_read,
- write: tty_write,
- poll: tty_poll,
- ioctl: tty_ioctl,
- open: tty_open,
- release: tty_release,
- fasync: tty_fasync,
-};
-
-static struct file_operations hung_up_tty_fops = {
- llseek: no_llseek,
- read: hung_up_tty_read,
- write: hung_up_tty_write,
- poll: hung_up_tty_poll,
- ioctl: hung_up_tty_ioctl,
- release: tty_release,
-};
-
-static spinlock_t redirect_lock = SPIN_LOCK_UNLOCKED;
-static struct file *redirect;
-/*
- * This can be called by the "eventd" kernel thread. That is process synchronous,
- * but doesn't hold any locks, so we need to make sure we have the appropriate
- * locks for what we're doing..
- */
-void do_tty_hangup(void *data)
-{
- struct tty_struct *tty = (struct tty_struct *) data;
- struct file * cons_filp = NULL;
- struct file *f = NULL;
- struct task_struct *p;
- struct list_head *l;
- int closecount = 0, n;
-
- if (!tty)
- return;
-
- /* inuse_filps is protected by the single kernel lock */
- lock_kernel();
-
- spin_lock(&redirect_lock);
- if (redirect && redirect->private_data == tty) {
- f = redirect;
- redirect = NULL;
- }
- spin_unlock(&redirect_lock);
-
- check_tty_count(tty, "do_tty_hangup");
- file_list_lock();
- for (l = tty->tty_files.next; l != &tty->tty_files; l = l->next) {
- struct file * filp = list_entry(l, struct file, f_list);
- if (filp->f_dentry->d_inode->i_rdev == CONSOLE_DEV ||
- filp->f_dentry->d_inode->i_rdev == SYSCONS_DEV) {
- cons_filp = filp;
- continue;
- }
- if (filp->f_op != &tty_fops)
- continue;
- closecount++;
- tty_fasync(-1, filp, 0); /* can't block */
- filp->f_op = &hung_up_tty_fops;
- }
- file_list_unlock();
-
- /* FIXME! What are the locking issues here? This may me overdoing things.. */
- {
- unsigned long flags;
-
- save_flags(flags); cli();
- if (tty->ldisc.flush_buffer)
- tty->ldisc.flush_buffer(tty);
- if (tty->driver.flush_buffer)
- tty->driver.flush_buffer(tty);
- if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
- tty->ldisc.write_wakeup)
- (tty->ldisc.write_wakeup)(tty);
- restore_flags(flags);
- }
-
- wake_up_interruptible(&tty->write_wait);
- wake_up_interruptible(&tty->read_wait);
-
- /*
- * Shutdown the current line discipline, and reset it to
- * N_TTY.
- */
- if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS)
- *tty->termios = tty->driver.init_termios;
- if (tty->ldisc.num != ldiscs[N_TTY].num) {
- if (tty->ldisc.close)
- (tty->ldisc.close)(tty);
- tty->ldisc = ldiscs[N_TTY];
- tty->termios->c_line = N_TTY;
- if (tty->ldisc.open) {
- int i = (tty->ldisc.open)(tty);
- if (i < 0)
- printk(KERN_ERR "do_tty_hangup: N_TTY open: "
- "error %d\n", -i);
- }
- }
-
- read_lock(&tasklist_lock);
- for_each_task(p) {
- if ((tty->session > 0) && (p->session == tty->session) &&
- p->leader) {
- send_sig(SIGHUP,p,1);
- send_sig(SIGCONT,p,1);
- if (tty->pgrp > 0)
- p->tty_old_pgrp = tty->pgrp;
- }
- if (p->tty == tty)
- p->tty = NULL;
- }
- read_unlock(&tasklist_lock);
-
- tty->flags = 0;
- tty->session = 0;
- tty->pgrp = -1;
- tty->ctrl_status = 0;
- /*
- * If one of the devices matches a console pointer, we
- * cannot just call hangup() because that will cause
- * tty->count and state->count to go out of sync.
- * So we just call close() the right number of times.
- */
- if (cons_filp) {
- if (tty->driver.close)
- for (n = 0; n < closecount; n++)
- tty->driver.close(tty, cons_filp);
- } else if (tty->driver.hangup)
- (tty->driver.hangup)(tty);
- unlock_kernel();
- if (f)
- fput(f);
-}
-
-void tty_hangup(struct tty_struct * tty)
-{
-#ifdef TTY_DEBUG_HANGUP
- char buf[64];
-
- printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
-#endif
- schedule_task(&tty->tq_hangup);
-}
-
-void tty_vhangup(struct tty_struct * tty)
-{
-#ifdef TTY_DEBUG_HANGUP
- char buf[64];
-
- printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
-#endif
- do_tty_hangup((void *) tty);
-}
-
-int tty_hung_up_p(struct file * filp)
-{
- return (filp->f_op == &hung_up_tty_fops);
-}
-
-/*
- * This function is typically called only by the session leader, when
- * it wants to disassociate itself from its controlling tty.
- *
- * It performs the following functions:
- * (1) Sends a SIGHUP and SIGCONT to the foreground process group
- * (2) Clears the tty from being controlling the session
- * (3) Clears the controlling tty for all processes in the
- * session group.
- *
- * The argument on_exit is set to 1 if called when a process is
- * exiting; it is 0 if called by the ioctl TIOCNOTTY.
- */
-void disassociate_ctty(int on_exit)
-{
- struct tty_struct *tty = current->tty;
- struct task_struct *p;
- int tty_pgrp = -1;
-
- if (tty) {
- tty_pgrp = tty->pgrp;
- if (on_exit && tty->driver.type != TTY_DRIVER_TYPE_PTY)
- tty_vhangup(tty);
- } else {
- if (current->tty_old_pgrp) {
- kill_pg(current->tty_old_pgrp, SIGHUP, on_exit);
- kill_pg(current->tty_old_pgrp, SIGCONT, on_exit);
- }
- return;
- }
- if (tty_pgrp > 0) {
- kill_pg(tty_pgrp, SIGHUP, on_exit);
- if (!on_exit)
- kill_pg(tty_pgrp, SIGCONT, on_exit);
- }
-
- current->tty_old_pgrp = 0;
- tty->session = 0;
- tty->pgrp = -1;
-
- read_lock(&tasklist_lock);
- for_each_task(p)
- if (p->session == current->session)
- p->tty = NULL;
- read_unlock(&tasklist_lock);
-}
-
-void stop_tty(struct tty_struct *tty)
-{
- if (tty->stopped)
- return;
- tty->stopped = 1;
- if (tty->link && tty->link->packet) {
- tty->ctrl_status &= ~TIOCPKT_START;
- tty->ctrl_status |= TIOCPKT_STOP;
- wake_up_interruptible(&tty->link->read_wait);
- }
- if (tty->driver.stop)
- (tty->driver.stop)(tty);
-}
-
-void start_tty(struct tty_struct *tty)
-{
- if (!tty->stopped || tty->flow_stopped)
- return;
- tty->stopped = 0;
- if (tty->link && tty->link->packet) {
- tty->ctrl_status &= ~TIOCPKT_STOP;
- tty->ctrl_status |= TIOCPKT_START;
- wake_up_interruptible(&tty->link->read_wait);
- }
- if (tty->driver.start)
- (tty->driver.start)(tty);
- if ((test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags)) &&
- tty->ldisc.write_wakeup)
- (tty->ldisc.write_wakeup)(tty);
- wake_up_interruptible(&tty->write_wait);
-}
-
-static ssize_t tty_read(struct file * file, char * buf, size_t count,
- loff_t *ppos)
-{
- int i;
- struct tty_struct * tty;
- struct inode *inode;
-
- /* Can't seek (pread) on ttys. */
- if (ppos != &file->f_pos)
- return -ESPIPE;
-
- tty = (struct tty_struct *)file->private_data;
- inode = file->f_dentry->d_inode;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_read"))
- return -EIO;
- if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
- return -EIO;
-
- /* This check not only needs to be done before reading, but also
- whenever read_chan() gets woken up after sleeping, so I've
- moved it to there. This should only be done for the N_TTY
- line discipline, anyway. Same goes for write_chan(). -- jlc. */
-#if 0
- if ((inode->i_rdev != CONSOLE_DEV) && /* don't stop on /dev/console */
- (tty->pgrp > 0) &&
- (current->tty == tty) &&
- (tty->pgrp != current->pgrp))
- if (is_ignored(SIGTTIN) || is_orphaned_pgrp(current->pgrp))
- return -EIO;
- else {
- (void) kill_pg(current->pgrp, SIGTTIN, 1);
- return -ERESTARTSYS;
- }
-#endif
- lock_kernel();
- if (tty->ldisc.read)
- i = (tty->ldisc.read)(tty,file,buf,count);
- else
- i = -EIO;
- unlock_kernel();
- if (i > 0)
- inode->i_atime = CURRENT_TIME;
- return i;
-}
-
-/*
- * Split writes up in sane blocksizes to avoid
- * denial-of-service type attacks
- */
-static inline ssize_t do_tty_write(
- ssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t),
- struct tty_struct *tty,
- struct file *file,
- const unsigned char *buf,
- size_t count)
-{
- ssize_t ret = 0, written = 0;
-
- if (file->f_flags & O_NONBLOCK) {
- if (down_trylock(&tty->atomic_write))
- return -EAGAIN;
- }
- else {
- if (down_interruptible(&tty->atomic_write))
- return -ERESTARTSYS;
- }
- if ( test_bit(TTY_NO_WRITE_SPLIT, &tty->flags) ) {
- lock_kernel();
- written = write(tty, file, buf, count);
- unlock_kernel();
- } else {
- for (;;) {
- unsigned long size = MAX(PAGE_SIZE*2,16384);
- if (size > count)
- size = count;
- lock_kernel();
- ret = write(tty, file, buf, size);
- unlock_kernel();
- if (ret <= 0)
- break;
- written += ret;
- buf += ret;
- count -= ret;
- if (!count)
- break;
- ret = -ERESTARTSYS;
- if (signal_pending(current))
- break;
- if (current->need_resched)
- schedule();
- }
- }
- if (written) {
- file->f_dentry->d_inode->i_mtime = CURRENT_TIME;
- ret = written;
- }
- up(&tty->atomic_write);
- return ret;
-}
-
-
-static ssize_t tty_write(struct file * file, const char * buf, size_t count,
- loff_t *ppos)
-{
- int is_console;
- struct tty_struct * tty;
- struct inode *inode = file->f_dentry->d_inode;
-
- /* Can't seek (pwrite) on ttys. */
- if (ppos != &file->f_pos)
- return -ESPIPE;
-
- /*
- * For now, we redirect writes from /dev/console as
- * well as /dev/tty0.
- */
- inode = file->f_dentry->d_inode;
- is_console = (inode->i_rdev == SYSCONS_DEV ||
- inode->i_rdev == CONSOLE_DEV);
-
- if (is_console) {
- struct file *p = NULL;
-
- spin_lock(&redirect_lock);
- if (redirect) {
- get_file(redirect);
- p = redirect;
- }
- spin_unlock(&redirect_lock);
-
- if (p) {
- ssize_t res = p->f_op->write(p, buf, count, &p->f_pos);
- fput(p);
- return res;
- }
- }
-
- tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_write"))
- return -EIO;
- if (!tty || !tty->driver.write || (test_bit(TTY_IO_ERROR, &tty->flags)))
- return -EIO;
-#if 0
- if (!is_console && L_TOSTOP(tty) && (tty->pgrp > 0) &&
- (current->tty == tty) && (tty->pgrp != current->pgrp)) {
- if (is_orphaned_pgrp(current->pgrp))
- return -EIO;
- if (!is_ignored(SIGTTOU)) {
- (void) kill_pg(current->pgrp, SIGTTOU, 1);
- return -ERESTARTSYS;
- }
- }
-#endif
- if (!tty->ldisc.write)
- return -EIO;
- return do_tty_write(tty->ldisc.write, tty, file,
- (const unsigned char *)buf, count);
-}
-
-/* Semaphore to protect creating and releasing a tty */
-static DECLARE_MUTEX(tty_sem);
-
-static void down_tty_sem(int index)
-{
- down(&tty_sem);
-}
-
-static void up_tty_sem(int index)
-{
- up(&tty_sem);
-}
-
-static void release_mem(struct tty_struct *tty, int idx);
-
-/*
- * WSH 06/09/97: Rewritten to remove races and properly clean up after a
- * failed open. The new code protects the open with a semaphore, so it's
- * really quite straightforward. The semaphore locking can probably be
- * relaxed for the (most common) case of reopening a tty.
- */
-static int init_dev(kdev_t device, struct tty_struct **ret_tty)
-{
- struct tty_struct *tty, *o_tty;
- struct termios *tp, **tp_loc, *o_tp, **o_tp_loc;
- struct termios *ltp, **ltp_loc, *o_ltp, **o_ltp_loc;
- struct tty_driver *driver;
- int retval=0;
- int idx;
-
- driver = get_tty_driver(device);
- if (!driver)
- return -ENODEV;
-
- idx = MINOR(device) - driver->minor_start;
-
- /*
- * Check whether we need to acquire the tty semaphore to avoid
- * race conditions. For now, play it safe.
- */
- down_tty_sem(idx);
-
- /* check whether we're reopening an existing tty */
- tty = driver->table[idx];
- if (tty) goto fast_track;
-
- /*
- * First time open is complex, especially for PTY devices.
- * This code guarantees that either everything succeeds and the
- * TTY is ready for operation, or else the table slots are vacated
- * and the allocated memory released. (Except that the termios
- * and locked termios may be retained.)
- */
-
- o_tty = NULL;
- tp = o_tp = NULL;
- ltp = o_ltp = NULL;
-
- tty = alloc_tty_struct();
- if(!tty)
- goto fail_no_mem;
- initialize_tty_struct(tty);
- tty->device = device;
- tty->driver = *driver;
-
- tp_loc = &driver->termios[idx];
- if (!*tp_loc) {
- tp = (struct termios *) kmalloc(sizeof(struct termios),
- GFP_KERNEL);
- if (!tp)
- goto free_mem_out;
- *tp = driver->init_termios;
- }
-
- ltp_loc = &driver->termios_locked[idx];
- if (!*ltp_loc) {
- ltp = (struct termios *) kmalloc(sizeof(struct termios),
- GFP_KERNEL);
- if (!ltp)
- goto free_mem_out;
- memset(ltp, 0, sizeof(struct termios));
- }
-
- if (driver->type == TTY_DRIVER_TYPE_PTY) {
- o_tty = alloc_tty_struct();
- if (!o_tty)
- goto free_mem_out;
- initialize_tty_struct(o_tty);
- o_tty->device = (kdev_t) MKDEV(driver->other->major,
- driver->other->minor_start + idx);
- o_tty->driver = *driver->other;
-
- o_tp_loc = &driver->other->termios[idx];
- if (!*o_tp_loc) {
- o_tp = (struct termios *)
- kmalloc(sizeof(struct termios), GFP_KERNEL);
- if (!o_tp)
- goto free_mem_out;
- *o_tp = driver->other->init_termios;
- }
-
- o_ltp_loc = &driver->other->termios_locked[idx];
- if (!*o_ltp_loc) {
- o_ltp = (struct termios *)
- kmalloc(sizeof(struct termios), GFP_KERNEL);
- if (!o_ltp)
- goto free_mem_out;
- memset(o_ltp, 0, sizeof(struct termios));
- }
-
- /*
- * Everything allocated ... set up the o_tty structure.
- */
- driver->other->table[idx] = o_tty;
- if (!*o_tp_loc)
- *o_tp_loc = o_tp;
- if (!*o_ltp_loc)
- *o_ltp_loc = o_ltp;
- o_tty->termios = *o_tp_loc;
- o_tty->termios_locked = *o_ltp_loc;
- (*driver->other->refcount)++;
- if (driver->subtype == PTY_TYPE_MASTER)
- o_tty->count++;
-
- /* Establish the links in both directions */
- tty->link = o_tty;
- o_tty->link = tty;
- }
-
- /*
- * All structures have been allocated, so now we install them.
- * Failures after this point use release_mem to clean up, so
- * there's no need to null out the local pointers.
- */
- driver->table[idx] = tty;
-
- if (!*tp_loc)
- *tp_loc = tp;
- if (!*ltp_loc)
- *ltp_loc = ltp;
- tty->termios = *tp_loc;
- tty->termios_locked = *ltp_loc;
- (*driver->refcount)++;
- tty->count++;
-
- /*
- * Structures all installed ... call the ldisc open routines.
- * If we fail here just call release_mem to clean up. No need
- * to decrement the use counts, as release_mem doesn't care.
- */
- if (tty->ldisc.open) {
- retval = (tty->ldisc.open)(tty);
- if (retval)
- goto release_mem_out;
- }
- if (o_tty && o_tty->ldisc.open) {
- retval = (o_tty->ldisc.open)(o_tty);
- if (retval) {
- if (tty->ldisc.close)
- (tty->ldisc.close)(tty);
- goto release_mem_out;
- }
- }
- goto success;
-
- /*
- * This fast open can be used if the tty is already open.
- * No memory is allocated, and the only failures are from
- * attempting to open a closing tty or attempting multiple
- * opens on a pty master.
- */
-fast_track:
- if (test_bit(TTY_CLOSING, &tty->flags)) {
- retval = -EIO;
- goto end_init;
- }
- if (driver->type == TTY_DRIVER_TYPE_PTY &&
- driver->subtype == PTY_TYPE_MASTER) {
- /*
- * special case for PTY masters: only one open permitted,
- * and the slave side open count is incremented as well.
- */
- if (tty->count) {
- retval = -EIO;
- goto end_init;
- }
- tty->link->count++;
- }
- tty->count++;
- tty->driver = *driver; /* N.B. why do this every time?? */
-
-success:
- *ret_tty = tty;
-
- /* All paths come through here to release the semaphore */
-end_init:
- up_tty_sem(idx);
- return retval;
-
- /* Release locally allocated memory ... nothing placed in slots */
-free_mem_out:
- if (o_tp)
- kfree(o_tp);
- if (o_tty)
- free_tty_struct(o_tty);
- if (ltp)
- kfree(ltp);
- if (tp)
- kfree(tp);
- free_tty_struct(tty);
-
-fail_no_mem:
- retval = -ENOMEM;
- goto end_init;
-
- /* call the tty release_mem routine to clean out this slot */
-release_mem_out:
- printk(KERN_INFO "init_dev: ldisc open failed, "
- "clearing slot %d\n", idx);
- release_mem(tty, idx);
- goto end_init;
-}
-
-/*
- * Releases memory associated with a tty structure, and clears out the
- * driver table slots.
- */
-static void release_mem(struct tty_struct *tty, int idx)
-{
- struct tty_struct *o_tty;
- struct termios *tp;
-
- if ((o_tty = tty->link) != NULL) {
- o_tty->driver.table[idx] = NULL;
- if (o_tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
- tp = o_tty->driver.termios[idx];
- o_tty->driver.termios[idx] = NULL;
- kfree(tp);
- }
- o_tty->magic = 0;
- (*o_tty->driver.refcount)--;
- list_del_init(&o_tty->tty_files);
- free_tty_struct(o_tty);
- }
-
- tty->driver.table[idx] = NULL;
- if (tty->driver.flags & TTY_DRIVER_RESET_TERMIOS) {
- tp = tty->driver.termios[idx];
- tty->driver.termios[idx] = NULL;
- kfree(tp);
- }
- tty->magic = 0;
- (*tty->driver.refcount)--;
- list_del_init(&tty->tty_files);
- free_tty_struct(tty);
-}
-
-/*
- * Even releasing the tty structures is a tricky business.. We have
- * to be very careful that the structures are all released at the
- * same time, as interrupts might otherwise get the wrong pointers.
- *
- * WSH 09/09/97: rewritten to avoid some nasty race conditions that could
- * lead to double frees or releasing memory still in use.
- */
-static void release_dev(struct file * filp)
-{
- struct tty_struct *tty, *o_tty;
- int pty_master, tty_closing, o_tty_closing, do_sleep;
- int idx;
- char buf[64];
-
- tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "release_dev"))
- return;
-
- check_tty_count(tty, "release_dev");
-
- tty_fasync(-1, filp, 0);
-
- idx = MINOR(tty->device) - tty->driver.minor_start;
- pty_master = (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
- tty->driver.subtype == PTY_TYPE_MASTER);
- o_tty = tty->link;
-
-#ifdef TTY_PARANOIA_CHECK
- if (idx < 0 || idx >= tty->driver.num) {
- printk(KERN_DEBUG "release_dev: bad idx when trying to "
- "free (%s)\n", kdevname(tty->device));
- return;
- }
- if (tty != tty->driver.table[idx]) {
- printk(KERN_DEBUG "release_dev: driver.table[%d] not tty "
- "for (%s)\n", idx, kdevname(tty->device));
- return;
- }
- if (tty->termios != tty->driver.termios[idx]) {
- printk(KERN_DEBUG "release_dev: driver.termios[%d] not termios "
- "for (%s)\n",
- idx, kdevname(tty->device));
- return;
- }
- if (tty->termios_locked != tty->driver.termios_locked[idx]) {
- printk(KERN_DEBUG "release_dev: driver.termios_locked[%d] not "
- "termios_locked for (%s)\n",
- idx, kdevname(tty->device));
- return;
- }
-#endif
-
-#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "release_dev of %s (tty count=%d)...",
- tty_name(tty, buf), tty->count);
-#endif
-
-#ifdef TTY_PARANOIA_CHECK
- if (tty->driver.other) {
- if (o_tty != tty->driver.other->table[idx]) {
- printk(KERN_DEBUG "release_dev: other->table[%d] "
- "not o_tty for (%s)\n",
- idx, kdevname(tty->device));
- return;
- }
- if (o_tty->termios != tty->driver.other->termios[idx]) {
- printk(KERN_DEBUG "release_dev: other->termios[%d] "
- "not o_termios for (%s)\n",
- idx, kdevname(tty->device));
- return;
- }
- if (o_tty->termios_locked !=
- tty->driver.other->termios_locked[idx]) {
- printk(KERN_DEBUG "release_dev: other->termios_locked["
- "%d] not o_termios_locked for (%s)\n",
- idx, kdevname(tty->device));
- return;
- }
- if (o_tty->link != tty) {
- printk(KERN_DEBUG "release_dev: bad pty pointers\n");
- return;
- }
- }
-#endif
-
- if (tty->driver.close)
- tty->driver.close(tty, filp);
-
- /*
- * Sanity check: if tty->count is going to zero, there shouldn't be
- * any waiters on tty->read_wait or tty->write_wait. We test the
- * wait queues and kick everyone out _before_ actually starting to
- * close. This ensures that we won't block while releasing the tty
- * structure.
- *
- * The test for the o_tty closing is necessary, since the master and
- * slave sides may close in any order. If the slave side closes out
- * first, its count will be one, since the master side holds an open.
- * Thus this test wouldn't be triggered at the time the slave closes,
- * so we do it now.
- *
- * Note that it's possible for the tty to be opened again while we're
- * flushing out waiters. By recalculating the closing flags before
- * each iteration we avoid any problems.
- */
- while (1) {
- tty_closing = tty->count <= 1;
- o_tty_closing = o_tty &&
- (o_tty->count <= (pty_master ? 1 : 0));
- do_sleep = 0;
-
- if (tty_closing) {
- if (waitqueue_active(&tty->read_wait)) {
- wake_up(&tty->read_wait);
- do_sleep++;
- }
- if (waitqueue_active(&tty->write_wait)) {
- wake_up(&tty->write_wait);
- do_sleep++;
- }
- }
- if (o_tty_closing) {
- if (waitqueue_active(&o_tty->read_wait)) {
- wake_up(&o_tty->read_wait);
- do_sleep++;
- }
- if (waitqueue_active(&o_tty->write_wait)) {
- wake_up(&o_tty->write_wait);
- do_sleep++;
- }
- }
- if (!do_sleep)
- break;
-
- printk(KERN_WARNING "release_dev: %s: read/write wait queue "
- "active!\n", tty_name(tty, buf));
- schedule();
- }
-
- /*
- * The closing flags are now consistent with the open counts on
- * both sides, and we've completed the last operation that could
- * block, so it's safe to proceed with closing.
- */
- if (pty_master) {
- if (--o_tty->count < 0) {
- printk(KERN_WARNING "release_dev: bad pty slave count "
- "(%d) for %s\n",
- o_tty->count, tty_name(o_tty, buf));
- o_tty->count = 0;
- }
- }
- if (--tty->count < 0) {
- printk(KERN_WARNING "release_dev: bad tty->count (%d) for %s\n",
- tty->count, tty_name(tty, buf));
- tty->count = 0;
- }
-
- /*
- * We've decremented tty->count, so we should zero out
- * filp->private_data, to break the link between the tty and
- * the file descriptor. Otherwise if filp_close() blocks before
- * the file descriptor is removed from the inuse_filp
- * list, check_tty_count() could observe a discrepancy and
- * printk a warning message to the user.
- */
- filp->private_data = 0;
-
- /*
- * Perform some housekeeping before deciding whether to return.
- *
- * Set the TTY_CLOSING flag if this was the last open. In the
- * case of a pty we may have to wait around for the other side
- * to close, and TTY_CLOSING makes sure we can't be reopened.
- */
- if(tty_closing)
- set_bit(TTY_CLOSING, &tty->flags);
- if(o_tty_closing)
- set_bit(TTY_CLOSING, &o_tty->flags);
-
- /*
- * If _either_ side is closing, make sure there aren't any
- * processes that still think tty or o_tty is their controlling
- * tty.
- */
- if (tty_closing || o_tty_closing) {
- struct task_struct *p;
-
- read_lock(&tasklist_lock);
- for_each_task(p) {
- if (p->tty == tty || (o_tty && p->tty == o_tty))
- p->tty = NULL;
- }
- read_unlock(&tasklist_lock);
- }
-
- /* check whether both sides are closing ... */
- if (!tty_closing || (o_tty && !o_tty_closing))
- return;
-
-#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "freeing tty structure...");
-#endif
-
- /*
- * Shutdown the current line discipline, and reset it to N_TTY.
- * N.B. why reset ldisc when we're releasing the memory??
- */
- if (tty->ldisc.close)
- (tty->ldisc.close)(tty);
- tty->ldisc = ldiscs[N_TTY];
- tty->termios->c_line = N_TTY;
- if (o_tty) {
- if (o_tty->ldisc.close)
- (o_tty->ldisc.close)(o_tty);
- o_tty->ldisc = ldiscs[N_TTY];
- }
-
- /*
- * Make sure that the tty's task queue isn't activated.
- */
- run_task_queue(&tq_timer);
- flush_scheduled_tasks();
-
- /*
- * The release_mem function takes care of the details of clearing
- * the slots and preserving the termios structure.
- */
- release_mem(tty, idx);
-}
-
-/*
- * tty_open and tty_release keep up the tty count that contains the
- * number of opens done on a tty. We cannot use the inode-count, as
- * different inodes might point to the same tty.
- *
- * Open-counting is needed for pty masters, as well as for keeping
- * track of serial lines: DTR is dropped when the last close happens.
- * (This is not done solely through tty->count, now. - Ted 1/27/92)
- *
- * The termios state of a pty is reset on first open so that
- * settings don't persist across reuse.
- */
-static int tty_open(struct inode * inode, struct file * filp)
-{
- struct tty_struct *tty;
- int noctty, retval;
- kdev_t device;
- unsigned short saved_flags;
- char buf[64];
-
- saved_flags = filp->f_flags;
-retry_open:
- noctty = filp->f_flags & O_NOCTTY;
- device = inode->i_rdev;
- if (device == TTY_DEV) {
- if (!current->tty)
- return -ENXIO;
- device = current->tty->device;
- filp->f_flags |= O_NONBLOCK; /* Don't let /dev/tty block */
- /* noctty = 1; */
- }
-#ifdef CONFIG_VT
- if (device == CONSOLE_DEV) {
- extern int fg_console;
- device = MKDEV(TTY_MAJOR, fg_console + 1);
- noctty = 1;
- }
-#endif
- if (device == SYSCONS_DEV) {
- struct console *c = console_drivers;
- while(c && !c->device)
- c = c->next;
- if (!c)
- return -ENODEV;
- device = c->device(c);
- filp->f_flags |= O_NONBLOCK; /* Don't let /dev/console block */
- noctty = 1;
- }
-
- if (device == PTMX_DEV) {
-#ifdef CONFIG_UNIX98_PTYS
-
- /* find a free pty. */
- int major, minor;
- struct tty_driver *driver;
-
- /* find a device that is not in use. */
- retval = -1;
- for ( major = 0 ; major < UNIX98_NR_MAJORS ; major++ ) {
- driver = &ptm_driver[major];
- for (minor = driver->minor_start ;
- minor < driver->minor_start + driver->num ;
- minor++) {
- device = MKDEV(driver->major, minor);
- if (!init_dev(device, &tty)) goto ptmx_found; /* ok! */
- }
- }
- return -EIO; /* no free ptys */
- ptmx_found:
- set_bit(TTY_PTY_LOCK, &tty->flags); /* LOCK THE SLAVE */
- minor -= driver->minor_start;
- devpts_pty_new(driver->other->name_base + minor, MKDEV(driver->other->major, minor + driver->other->minor_start));
- tty_register_devfs(&pts_driver[major], DEVFS_FL_DEFAULT,
- pts_driver[major].minor_start + minor);
- noctty = 1;
- goto init_dev_done;
-
-#else /* CONFIG_UNIX_98_PTYS */
-
- return -ENODEV;
-
-#endif /* CONFIG_UNIX_98_PTYS */
- }
-
- retval = init_dev(device, &tty);
- if (retval)
- return retval;
-
-#ifdef CONFIG_UNIX98_PTYS
-init_dev_done:
-#endif
- filp->private_data = tty;
- file_move(filp, &tty->tty_files);
- check_tty_count(tty, "tty_open");
- if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
- tty->driver.subtype == PTY_TYPE_MASTER)
- noctty = 1;
-#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "opening %s...", tty_name(tty, buf));
-#endif
- if (tty->driver.open)
- retval = tty->driver.open(tty, filp);
- else
- retval = -ENODEV;
- filp->f_flags = saved_flags;
-
- if (!retval && test_bit(TTY_EXCLUSIVE, &tty->flags) && !suser())
- retval = -EBUSY;
-
- if (retval) {
-#ifdef TTY_DEBUG_HANGUP
- printk(KERN_DEBUG "error %d in opening %s...", retval,
- tty_name(tty, buf));
-#endif
-
- release_dev(filp);
- if (retval != -ERESTARTSYS)
- return retval;
- if (signal_pending(current))
- return retval;
- schedule();
- /*
- * Need to reset f_op in case a hangup happened.
- */
- filp->f_op = &tty_fops;
- goto retry_open;
- }
- if (!noctty &&
- current->leader &&
- !current->tty &&
- tty->session == 0) {
- task_lock(current);
- current->tty = tty;
- task_unlock(current);
- current->tty_old_pgrp = 0;
- tty->session = current->session;
- tty->pgrp = current->pgrp;
- }
- if ((tty->driver.type == TTY_DRIVER_TYPE_SERIAL) &&
- (tty->driver.subtype == SERIAL_TYPE_CALLOUT) &&
- (tty->count == 1)) {
- static int nr_warns;
- if (nr_warns < 5) {
- printk(KERN_WARNING "tty_io.c: "
- "process %d (%s) used obsolete /dev/%s - "
- "update software to use /dev/ttyS%d\n",
- current->pid, current->comm,
- tty_name(tty, buf), TTY_NUMBER(tty));
- nr_warns++;
- }
- }
- return 0;
-}
-
-static int tty_release(struct inode * inode, struct file * filp)
-{
- lock_kernel();
- release_dev(filp);
- unlock_kernel();
- return 0;
-}
-
-/* No kernel lock held - fine */
-static unsigned int tty_poll(struct file * filp, poll_table * wait)
-{
- struct tty_struct * tty;
-
- tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_poll"))
- return 0;
-
- if (tty->ldisc.poll)
- return (tty->ldisc.poll)(tty, filp, wait);
- return 0;
-}
-
-static int tty_fasync(int fd, struct file * filp, int on)
-{
- struct tty_struct * tty;
- int retval;
-
- tty = (struct tty_struct *)filp->private_data;
- if (tty_paranoia_check(tty, filp->f_dentry->d_inode->i_rdev, "tty_fasync"))
- return 0;
-
- retval = fasync_helper(fd, filp, on, &tty->fasync);
- if (retval <= 0)
- return retval;
-
- if (on) {
- if (!waitqueue_active(&tty->read_wait))
- tty->minimum_to_wake = 1;
- if (filp->f_owner.pid == 0) {
- filp->f_owner.pid = (-tty->pgrp) ? : current->pid;
- filp->f_owner.uid = current->uid;
- filp->f_owner.euid = current->euid;
- }
- } else {
- if (!tty->fasync && !waitqueue_active(&tty->read_wait))
- tty->minimum_to_wake = N_TTY_BUF_SIZE;
- }
- return 0;
-}
-
-static int tiocsti(struct tty_struct *tty, char * arg)
-{
- char ch, mbz = 0;
-
- if ((current->tty != tty) && !suser())
- return -EPERM;
- if (get_user(ch, arg))
- return -EFAULT;
- tty->ldisc.receive_buf(tty, &ch, &mbz, 1);
- return 0;
-}
-
-static int tiocgwinsz(struct tty_struct *tty, struct winsize * arg)
-{
- if (copy_to_user(arg, &tty->winsize, sizeof(*arg)))
- return -EFAULT;
- return 0;
-}
-
-static int tiocswinsz(struct tty_struct *tty, struct tty_struct *real_tty,
- struct winsize * arg)
-{
- struct winsize tmp_ws;
-
- if (copy_from_user(&tmp_ws, arg, sizeof(*arg)))
- return -EFAULT;
- if (!memcmp(&tmp_ws, &tty->winsize, sizeof(*arg)))
- return 0;
- if (tty->pgrp > 0)
- kill_pg(tty->pgrp, SIGWINCH, 1);
- if ((real_tty->pgrp != tty->pgrp) && (real_tty->pgrp > 0))
- kill_pg(real_tty->pgrp, SIGWINCH, 1);
- tty->winsize = tmp_ws;
- real_tty->winsize = tmp_ws;
- return 0;
-}
-
-static int tioccons(struct inode *inode, struct file *file)
-{
- if (inode->i_rdev == SYSCONS_DEV ||
- inode->i_rdev == CONSOLE_DEV) {
- struct file *f;
- if (!suser())
- return -EPERM;
- spin_lock(&redirect_lock);
- f = redirect;
- redirect = NULL;
- spin_unlock(&redirect_lock);
- if (f)
- fput(f);
- return 0;
- }
- spin_lock(&redirect_lock);
- if (redirect) {
- spin_unlock(&redirect_lock);
- return -EBUSY;
- }
- get_file(file);
- redirect = file;
- spin_unlock(&redirect_lock);
- return 0;
-}
-
-
-static int fionbio(struct file *file, int *arg)
-{
- int nonblock;
-
- if (get_user(nonblock, arg))
- return -EFAULT;
-
- if (nonblock)
- file->f_flags |= O_NONBLOCK;
- else
- file->f_flags &= ~O_NONBLOCK;
- return 0;
-}
-
-static int tiocsctty(struct tty_struct *tty, int arg)
-{
- if (current->leader &&
- (current->session == tty->session))
- return 0;
- /*
- * The process must be a session leader and
- * not have a controlling tty already.
- */
- if (!current->leader || current->tty)
- return -EPERM;
- if (tty->session > 0) {
- /*
- * This tty is already the controlling
- * tty for another session group!
- */
- if ((arg == 1) && suser()) {
- /*
- * Steal it away
- */
- struct task_struct *p;
-
- read_lock(&tasklist_lock);
- for_each_task(p)
- if (p->tty == tty)
- p->tty = NULL;
- read_unlock(&tasklist_lock);
- } else
- return -EPERM;
- }
- task_lock(current);
- current->tty = tty;
- task_unlock(current);
- current->tty_old_pgrp = 0;
- tty->session = current->session;
- tty->pgrp = current->pgrp;
- return 0;
-}
-
-static int tiocgpgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
- /*
- * (tty == real_tty) is a cheap way of
- * testing if the tty is NOT a master pty.
- */
- if (tty == real_tty && current->tty != real_tty)
- return -ENOTTY;
- return put_user(real_tty->pgrp, arg);
-}
-
-static int tiocspgrp(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
- pid_t pgrp;
- int retval = tty_check_change(real_tty);
-
- if (retval == -EIO)
- return -ENOTTY;
- if (retval)
- return retval;
- if (!current->tty ||
- (current->tty != real_tty) ||
- (real_tty->session != current->session))
- return -ENOTTY;
- if (get_user(pgrp, (pid_t *) arg))
- return -EFAULT;
- if (pgrp < 0)
- return -EINVAL;
- if (session_of_pgrp(pgrp) != current->session)
- return -EPERM;
- real_tty->pgrp = pgrp;
- return 0;
-}
-
-static int tiocgsid(struct tty_struct *tty, struct tty_struct *real_tty, pid_t *arg)
-{
- /*
- * (tty == real_tty) is a cheap way of
- * testing if the tty is NOT a master pty.
- */
- if (tty == real_tty && current->tty != real_tty)
- return -ENOTTY;
- if (real_tty->session <= 0)
- return -ENOTTY;
- return put_user(real_tty->session, arg);
-}
-
-static int tiocttygstruct(struct tty_struct *tty, struct tty_struct *arg)
-{
- if (copy_to_user(arg, tty, sizeof(*arg)))
- return -EFAULT;
- return 0;
-}
-
-static int tiocsetd(struct tty_struct *tty, int *arg)
-{
- int ldisc;
-
- if (get_user(ldisc, arg))
- return -EFAULT;
- return tty_set_ldisc(tty, ldisc);
-}
-
-static int send_break(struct tty_struct *tty, int duration)
-{
- set_current_state(TASK_INTERRUPTIBLE);
-
- tty->driver.break_ctl(tty, -1);
- if (!signal_pending(current))
- schedule_timeout(duration);
- tty->driver.break_ctl(tty, 0);
- if (signal_pending(current))
- return -EINTR;
- return 0;
-}
-
-static int tty_generic_brk(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
-{
- if (cmd == TCSBRK && arg)
- {
- /* tcdrain case */
- int retval = tty_check_change(tty);
- if (retval)
- return retval;
- tty_wait_until_sent(tty, 0);
- if (signal_pending(current))
- return -EINTR;
- }
- return 0;
-}
-
-/*
- * Split this up, as gcc can choke on it otherwise..
- */
-int tty_ioctl(struct inode * inode, struct file * file,
- unsigned int cmd, unsigned long arg)
-{
- struct tty_struct *tty, *real_tty;
- int retval;
-
- tty = (struct tty_struct *)file->private_data;
- if (tty_paranoia_check(tty, inode->i_rdev, "tty_ioctl"))
- return -EINVAL;
-
- real_tty = tty;
- if (tty->driver.type == TTY_DRIVER_TYPE_PTY &&
- tty->driver.subtype == PTY_TYPE_MASTER)
- real_tty = tty->link;
-
- /*
- * Break handling by driver
- */
- if (!tty->driver.break_ctl) {
- switch(cmd) {
- case TIOCSBRK:
- case TIOCCBRK:
- if (tty->driver.ioctl)
- return tty->driver.ioctl(tty, file, cmd, arg);
- return -EINVAL;
-
- /* These two ioctl's always return success; even if */
- /* the driver doesn't support them. */
- case TCSBRK:
- case TCSBRKP:
- retval = -ENOIOCTLCMD;
- if (tty->driver.ioctl)
- retval = tty->driver.ioctl(tty, file, cmd, arg);
- /* Not driver handled */
- if (retval == -ENOIOCTLCMD)
- retval = tty_generic_brk(tty, file, cmd, arg);
- return retval;
- }
- }
-
- /*
- * Factor out some common prep work
- */
- switch (cmd) {
- case TIOCSETD:
- case TIOCSBRK:
- case TIOCCBRK:
- case TCSBRK:
- case TCSBRKP:
- retval = tty_check_change(tty);
- if (retval)
- return retval;
- if (cmd != TIOCCBRK) {
- tty_wait_until_sent(tty, 0);
- if (signal_pending(current))
- return -EINTR;
- }
- break;
- }
-
- switch (cmd) {
- case TIOCSTI:
- return tiocsti(tty, (char *)arg);
- case TIOCGWINSZ:
- return tiocgwinsz(tty, (struct winsize *) arg);
- case TIOCSWINSZ:
- return tiocswinsz(tty, real_tty, (struct winsize *) arg);
- case TIOCCONS:
- return real_tty!=tty ? -EINVAL : tioccons(inode, file);
- case FIONBIO:
- return fionbio(file, (int *) arg);
- case TIOCEXCL:
- set_bit(TTY_EXCLUSIVE, &tty->flags);
- return 0;
- case TIOCNXCL:
- clear_bit(TTY_EXCLUSIVE, &tty->flags);
- return 0;
- case TIOCNOTTY:
- if (current->tty != tty)
- return -ENOTTY;
- if (current->leader)
- disassociate_ctty(0);
- task_lock(current);
- current->tty = NULL;
- task_unlock(current);
- return 0;
- case TIOCSCTTY:
- return tiocsctty(tty, arg);
- case TIOCGPGRP:
- return tiocgpgrp(tty, real_tty, (pid_t *) arg);
- case TIOCSPGRP:
- return tiocspgrp(tty, real_tty, (pid_t *) arg);
- case TIOCGSID:
- return tiocgsid(tty, real_tty, (pid_t *) arg);
- case TIOCGETD:
- return put_user(tty->ldisc.num, (int *) arg);
- case TIOCSETD:
- return tiocsetd(tty, (int *) arg);
-#ifdef CONFIG_VT
- case TIOCLINUX:
- return tioclinux(tty, arg);
-#endif
- case TIOCTTYGSTRUCT:
- return tiocttygstruct(tty, (struct tty_struct *) arg);
-
- /*
- * Break handling
- */
- case TIOCSBRK: /* Turn break on, unconditionally */
- tty->driver.break_ctl(tty, -1);
- return 0;
-
- case TIOCCBRK: /* Turn break off, unconditionally */
- tty->driver.break_ctl(tty, 0);
- return 0;
- case TCSBRK: /* SVID version: non-zero arg --> no break */
- /*
- * XXX is the above comment correct, or the
- * code below correct? Is this ioctl used at
- * all by anyone?
- */
- if (!arg)
- return send_break(tty, HZ/4);
- return 0;
- case TCSBRKP: /* support for POSIX tcsendbreak() */
- return send_break(tty, arg ? arg*(HZ/10) : HZ/4);
- }
- if (tty->driver.ioctl) {
- int retval = (tty->driver.ioctl)(tty, file, cmd, arg);
- if (retval != -ENOIOCTLCMD)
- return retval;
- }
- if (tty->ldisc.ioctl) {
- int retval = (tty->ldisc.ioctl)(tty, file, cmd, arg);
- if (retval != -ENOIOCTLCMD)
- return retval;
- }
- return -EINVAL;
-}
-
-
-/*
- * This implements the "Secure Attention Key" --- the idea is to
- * prevent trojan horses by killing all processes associated with this
- * tty when the user hits the "Secure Attention Key". Required for
- * super-paranoid applications --- see the Orange Book for more details.
- *
- * This code could be nicer; ideally it should send a HUP, wait a few
- * seconds, then send a INT, and then a KILL signal. But you then
- * have to coordinate with the init process, since all processes associated
- * with the current tty must be dead before the new getty is allowed
- * to spawn.
- *
- * Now, if it would be correct ;-/ The current code has a nasty hole -
- * it doesn't catch files in flight. We may send the descriptor to ourselves
- * via AF_UNIX socket, close it and later fetch from socket. FIXME.
- *
- * Nasty bug: do_SAK is being called in interrupt context. This can
- * deadlock. We punt it up to process context. AKPM - 16Mar2001
- */
-static void __do_SAK(void *arg)
-{
-#ifdef TTY_SOFT_SAK
- tty_hangup(tty);
-#else
- struct tty_struct *tty = arg;
- struct task_struct *p;
- int session;
- int i;
- struct file *filp;
-
- if (!tty)
- return;
- session = tty->session;
- if (tty->ldisc.flush_buffer)
- tty->ldisc.flush_buffer(tty);
- if (tty->driver.flush_buffer)
- tty->driver.flush_buffer(tty);
- read_lock(&tasklist_lock);
- for_each_task(p) {
- if ((p->tty == tty) ||
- ((session > 0) && (p->session == session))) {
- send_sig(SIGKILL, p, 1);
- continue;
- }
- task_lock(p);
- if (p->files) {
- read_lock(&p->files->file_lock);
- for (i=0; i < p->files->max_fds; i++) {
- filp = fcheck_files(p->files, i);
- if (filp && (filp->f_op == &tty_fops) &&
- (filp->private_data == tty)) {
- send_sig(SIGKILL, p, 1);
- break;
- }
- }
- read_unlock(&p->files->file_lock);
- }
- task_unlock(p);
- }
- read_unlock(&tasklist_lock);
-#endif
-}
-
-/*
- * The tq handling here is a little racy - tty->SAK_tq may already be queued.
- * But there's no mechanism to fix that without futzing with tqueue_lock.
- * Fortunately we don't need to worry, because if ->SAK_tq is already queued,
- * the values which we write to it will be identical to the values which it
- * already has. --akpm
- */
-void do_SAK(struct tty_struct *tty)
-{
- if (!tty)
- return;
- PREPARE_TQUEUE(&tty->SAK_tq, __do_SAK, tty);
- schedule_task(&tty->SAK_tq);
-}
-
-/*
- * This routine is called out of the software interrupt to flush data
- * from the flip buffer to the line discipline.
- */
-static void flush_to_ldisc(void *private_)
-{
- struct tty_struct *tty = (struct tty_struct *) private_;
- unsigned char *cp;
- char *fp;
- int count;
- unsigned long flags;
-
- if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
- queue_task(&tty->flip.tqueue, &tq_timer);
- return;
- }
- if (tty->flip.buf_num) {
- cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
- fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
- tty->flip.buf_num = 0;
-
- save_flags(flags); cli();
- tty->flip.char_buf_ptr = tty->flip.char_buf;
- tty->flip.flag_buf_ptr = tty->flip.flag_buf;
- } else {
- cp = tty->flip.char_buf;
- fp = tty->flip.flag_buf;
- tty->flip.buf_num = 1;
-
- save_flags(flags); cli();
- tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;
- tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;
- }
- count = tty->flip.count;
- tty->flip.count = 0;
- restore_flags(flags);
-
- tty->ldisc.receive_buf(tty, cp, fp, count);
-}
-
-/*
- * Routine which returns the baud rate of the tty
- *
- * Note that the baud_table needs to be kept in sync with the
- * include/asm/termbits.h file.
- */
-static int baud_table[] = {
- 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
- 9600, 19200, 38400, 57600, 115200, 230400, 460800,
-#ifdef __sparc__
- 76800, 153600, 307200, 614400, 921600
-#else
- 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
- 2500000, 3000000, 3500000, 4000000
-#endif
-};
-
-static int n_baud_table = sizeof(baud_table)/sizeof(int);
-
-int tty_get_baud_rate(struct tty_struct *tty)
-{
- unsigned int cflag, i;
-
- cflag = tty->termios->c_cflag;
-
- i = cflag & CBAUD;
- if (i & CBAUDEX) {
- i &= ~CBAUDEX;
- if (i < 1 || i+15 >= n_baud_table)
- tty->termios->c_cflag &= ~CBAUDEX;
- else
- i += 15;
- }
- if (i==15 && tty->alt_speed) {
- if (!tty->warned) {
- printk(KERN_WARNING "Use of setserial/setrocket to "
- "set SPD_* flags is deprecated\n");
- tty->warned = 1;
- }
- return(tty->alt_speed);
- }
-
- return baud_table[i];
-}
-
-void tty_flip_buffer_push(struct tty_struct *tty)
-{
- if (tty->low_latency)
- flush_to_ldisc((void *) tty);
- else
- queue_task(&tty->flip.tqueue, &tq_timer);
-}
-
-/*
- * This subroutine initializes a tty structure.
- */
-static void initialize_tty_struct(struct tty_struct *tty)
-{
- memset(tty, 0, sizeof(struct tty_struct));
- tty->magic = TTY_MAGIC;
- tty->ldisc = ldiscs[N_TTY];
- tty->pgrp = -1;
- tty->flip.char_buf_ptr = tty->flip.char_buf;
- tty->flip.flag_buf_ptr = tty->flip.flag_buf;
- tty->flip.tqueue.routine = flush_to_ldisc;
- tty->flip.tqueue.data = tty;
- init_MUTEX(&tty->flip.pty_sem);
- init_waitqueue_head(&tty->write_wait);
- init_waitqueue_head(&tty->read_wait);
- tty->tq_hangup.routine = do_tty_hangup;
- tty->tq_hangup.data = tty;
- sema_init(&tty->atomic_read, 1);
- sema_init(&tty->atomic_write, 1);
- spin_lock_init(&tty->read_lock);
- INIT_LIST_HEAD(&tty->tty_files);
- INIT_TQUEUE(&tty->SAK_tq, 0, 0);
-}
-
-/*
- * The default put_char routine if the driver did not define one.
- */
-void tty_default_put_char(struct tty_struct *tty, unsigned char ch)
-{
- tty->driver.write(tty, 0, &ch, 1);
-}
-
-/*
- * Register a tty device described by <driver>, with minor number <minor>.
- */
-void tty_register_devfs (struct tty_driver *driver, unsigned int flags, unsigned minor)
-{
-#ifdef CONFIG_DEVFS_FS
- umode_t mode = S_IFCHR | S_IRUSR | S_IWUSR;
- kdev_t device = MKDEV (driver->major, minor);
- int idx = minor - driver->minor_start;
- char buf[32];
-
- switch (device) {
- case TTY_DEV:
- case PTMX_DEV:
- mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
- break;
- default:
- if (driver->major == PTY_MASTER_MAJOR)
- mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
- break;
- }
- if ( (minor < driver->minor_start) ||
- (minor >= driver->minor_start + driver->num) ) {
- printk(KERN_ERR "Attempt to register invalid minor number "
- "with devfs (%d:%d).\n", (int)driver->major,(int)minor);
- return;
- }
-# ifdef CONFIG_UNIX98_PTYS
- if ( (driver->major >= UNIX98_PTY_SLAVE_MAJOR) &&
- (driver->major < UNIX98_PTY_SLAVE_MAJOR + UNIX98_NR_MAJORS) )
- flags |= DEVFS_FL_CURRENT_OWNER;
-# endif
- sprintf(buf, driver->name, idx + driver->name_base);
- devfs_register (NULL, buf, flags | DEVFS_FL_DEFAULT,
- driver->major, minor, mode, &tty_fops, NULL);
-#endif /* CONFIG_DEVFS_FS */
-}
-
-void tty_unregister_devfs (struct tty_driver *driver, unsigned minor)
-{
-#ifdef CONFIG_DEVFS_FS
- void * handle;
- int idx = minor - driver->minor_start;
- char buf[32];
-
- sprintf(buf, driver->name, idx + driver->name_base);
- handle = devfs_find_handle (NULL, buf, driver->major, minor,
- DEVFS_SPECIAL_CHR, 0);
- devfs_unregister (handle);
-#endif /* CONFIG_DEVFS_FS */
-}
-
-EXPORT_SYMBOL(tty_register_devfs);
-EXPORT_SYMBOL(tty_unregister_devfs);
-
-/*
- * Called by a tty driver to register itself.
- */
-int tty_register_driver(struct tty_driver *driver)
-{
- int error;
- int i;
-
- if (driver->flags & TTY_DRIVER_INSTALLED)
- return 0;
-
- error = devfs_register_chrdev(driver->major, driver->name, &tty_fops);
- if (error < 0)
- return error;
- else if(driver->major == 0)
- driver->major = error;
-
- if (!driver->put_char)
- driver->put_char = tty_default_put_char;
-
- driver->prev = 0;
- driver->next = tty_drivers;
- if (tty_drivers) tty_drivers->prev = driver;
- tty_drivers = driver;
-
- if ( !(driver->flags & TTY_DRIVER_NO_DEVFS) ) {
- for(i = 0; i < driver->num; i++)
- tty_register_devfs(driver, 0, driver->minor_start + i);
- }
- proc_tty_register_driver(driver);
- return error;
-}
-
-/*
- * Called by a tty driver to unregister itself.
- */
-int tty_unregister_driver(struct tty_driver *driver)
-{
- int retval;
- struct tty_driver *p;
- int i, found = 0;
- struct termios *tp;
- const char *othername = NULL;
-
- if (*driver->refcount)
- return -EBUSY;
-
- for (p = tty_drivers; p; p = p->next) {
- if (p == driver)
- found++;
- else if (p->major == driver->major)
- othername = p->name;
- }
-
- if (!found)
- return -ENOENT;
-
- if (othername == NULL) {
- retval = devfs_unregister_chrdev(driver->major, driver->name);
- if (retval)
- return retval;
- } else
- devfs_register_chrdev(driver->major, othername, &tty_fops);
-
- if (driver->prev)
- driver->prev->next = driver->next;
- else
- tty_drivers = driver->next;
-
- if (driver->next)
- driver->next->prev = driver->prev;
-
- /*
- * Free the termios and termios_locked structures because
- * we don't want to get memory leaks when modular tty
- * drivers are removed from the kernel.
- */
- for (i = 0; i < driver->num; i++) {
- tp = driver->termios[i];
- if (tp) {
- driver->termios[i] = NULL;
- kfree(tp);
- }
- tp = driver->termios_locked[i];
- if (tp) {
- driver->termios_locked[i] = NULL;
- kfree(tp);
- }
- tty_unregister_devfs(driver, driver->minor_start + i);
- }
- proc_tty_unregister_driver(driver);
- return 0;
-}
-
-
-/*
- * Initialize the console device. This is called *early*, so
- * we can't necessarily depend on lots of kernel help here.
- * Just do some early initializations, and do the complex setup
- * later.
- */
-void __init console_init(void)
-{
- /* Setup the default TTY line discipline. */
- memset(ldiscs, 0, sizeof(ldiscs));
- (void) tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY);
-
- /*
- * Set up the standard termios. Individual tty drivers may
- * deviate from this; this is used as a template.
- */
- memset(&tty_std_termios, 0, sizeof(struct termios));
- memcpy(tty_std_termios.c_cc, INIT_C_CC, NCCS);
- tty_std_termios.c_iflag = ICRNL | IXON;
- tty_std_termios.c_oflag = OPOST | ONLCR;
- tty_std_termios.c_cflag = B38400 | CS8 | CREAD | HUPCL;
- tty_std_termios.c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK |
- ECHOCTL | ECHOKE | IEXTEN;
-
- /*
- * set up the console device so that later boot sequences can
- * inform about problems etc..
- */
-#ifdef CONFIG_EARLY_PRINTK
- disable_early_printk();
-#endif
-
-#ifdef CONFIG_XEN_CONSOLE
- xen_console_init();
-#endif
-
-#ifdef CONFIG_VT
- con_init();
-#endif
-#ifdef CONFIG_AU1X00_SERIAL_CONSOLE
- au1x00_serial_console_init();
-#endif
-#ifdef CONFIG_SERIAL_CONSOLE
-#if (defined(CONFIG_8xx) || defined(CONFIG_8260))
- console_8xx_init();
-#elif defined(CONFIG_MAC_SERIAL) && defined(CONFIG_SERIAL)
- if (_machine == _MACH_Pmac)
- mac_scc_console_init();
- else
- serial_console_init();
-#elif defined(CONFIG_MAC_SERIAL)
- mac_scc_console_init();
-#elif defined(CONFIG_PARISC)
- pdc_console_init();
-#elif defined(CONFIG_SERIAL)
- serial_console_init();
-#endif /* CONFIG_8xx */
-#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
- vme_scc_console_init();
-#endif
-#if defined(CONFIG_SERIAL167)
- serial167_console_init();
-#endif
-#if defined(CONFIG_SH_SCI)
- sci_console_init();
-#endif
-#endif
-#ifdef CONFIG_SERIAL_DEC_CONSOLE
- dec_serial_console_init();
-#endif
-#ifdef CONFIG_TN3270_CONSOLE
- tub3270_con_init();
-#endif
-#ifdef CONFIG_TN3215
- con3215_init();
-#endif
-#ifdef CONFIG_HWC
- hwc_console_init();
-#endif
-#ifdef CONFIG_STDIO_CONSOLE
- stdio_console_init();
-#endif
-#ifdef CONFIG_SERIAL_21285_CONSOLE
- rs285_console_init();
-#endif
-#ifdef CONFIG_SERIAL_SA1100_CONSOLE
- sa1100_rs_console_init();
-#endif
-#ifdef CONFIG_ARC_CONSOLE
- arc_console_init();
-#endif
-#ifdef CONFIG_SERIAL_AMBA_CONSOLE
- ambauart_console_init();
-#endif
-#ifdef CONFIG_SERIAL_TX3912_CONSOLE
- tx3912_console_init();
-#endif
-#ifdef CONFIG_TXX927_SERIAL_CONSOLE
- txx927_console_init();
-#endif
-#ifdef CONFIG_SERIAL_TXX9_CONSOLE
- txx9_serial_console_init();
-#endif
-#ifdef CONFIG_SIBYTE_SB1250_DUART_CONSOLE
- sb1250_serial_console_init();
-#endif
-#ifdef CONFIG_IP22_SERIAL
- sgi_serial_console_init();
-#endif
-}
-
-static struct tty_driver dev_tty_driver, dev_syscons_driver;
-#ifdef CONFIG_UNIX98_PTYS
-static struct tty_driver dev_ptmx_driver;
-#endif
-#ifdef CONFIG_HVC_CONSOLE
- hvc_console_init();
-#endif
-#ifdef CONFIG_VT
-static struct tty_driver dev_console_driver;
-#endif
-
-/*
- * Ok, now we can initialize the rest of the tty devices and can count
- * on memory allocations, interrupts etc..
- */
-void __init tty_init(void)
-{
- /*
- * dev_tty_driver and dev_console_driver are actually magic
- * devices which get redirected at open time. Nevertheless,
- * we register them so that register_chrdev is called
- * appropriately.
- */
- memset(&dev_tty_driver, 0, sizeof(struct tty_driver));
- dev_tty_driver.magic = TTY_DRIVER_MAGIC;
- dev_tty_driver.driver_name = "/dev/tty";
- dev_tty_driver.name = dev_tty_driver.driver_name + 5;
- dev_tty_driver.name_base = 0;
- dev_tty_driver.major = TTYAUX_MAJOR;
- dev_tty_driver.minor_start = 0;
- dev_tty_driver.num = 1;
- dev_tty_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_tty_driver.subtype = SYSTEM_TYPE_TTY;
-
- if (tty_register_driver(&dev_tty_driver))
- panic("Couldn't register /dev/tty driver\n");
-
- dev_syscons_driver = dev_tty_driver;
- dev_syscons_driver.driver_name = "/dev/console";
- dev_syscons_driver.name = dev_syscons_driver.driver_name + 5;
- dev_syscons_driver.major = TTYAUX_MAJOR;
- dev_syscons_driver.minor_start = 1;
- dev_syscons_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_syscons_driver.subtype = SYSTEM_TYPE_SYSCONS;
-
- if (tty_register_driver(&dev_syscons_driver))
- panic("Couldn't register /dev/console driver\n");
-
- /* console calls tty_register_driver() before kmalloc() works.
- * Thus, we can't devfs_register() then. Do so now, instead.
- */
-#ifdef CONFIG_VT
- con_init_devfs();
-#endif
-
-#ifdef CONFIG_UNIX98_PTYS
- dev_ptmx_driver = dev_tty_driver;
- dev_ptmx_driver.driver_name = "/dev/ptmx";
- dev_ptmx_driver.name = dev_ptmx_driver.driver_name + 5;
- dev_ptmx_driver.major= MAJOR(PTMX_DEV);
- dev_ptmx_driver.minor_start = MINOR(PTMX_DEV);
- dev_ptmx_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_ptmx_driver.subtype = SYSTEM_TYPE_SYSPTMX;
-
- if (tty_register_driver(&dev_ptmx_driver))
- panic("Couldn't register /dev/ptmx driver\n");
-#endif
-
-#ifdef CONFIG_VT
- dev_console_driver = dev_tty_driver;
- dev_console_driver.driver_name = "/dev/vc/0";
- dev_console_driver.name = dev_console_driver.driver_name + 5;
- dev_console_driver.major = TTY_MAJOR;
- dev_console_driver.type = TTY_DRIVER_TYPE_SYSTEM;
- dev_console_driver.subtype = SYSTEM_TYPE_CONSOLE;
-
- if (tty_register_driver(&dev_console_driver))
- panic("Couldn't register /dev/tty0 driver\n");
-
- kbd_init();
-#endif
-
-#ifdef CONFIG_SGI_L1_SERIAL_CONSOLE
- if (ia64_platform_is("sn2")) {
- sn_sal_serial_console_init();
- return; /* only one console right now for SN2 */
- }
-#endif
-#ifdef CONFIG_ESPSERIAL /* init ESP before rs, so rs doesn't see the port */
- espserial_init();
-#endif
-#if defined(CONFIG_MVME162_SCC) || defined(CONFIG_BVME6000_SCC) || defined(CONFIG_MVME147_SCC)
- vme_scc_init();
-#endif
-#ifdef CONFIG_SERIAL_TX3912
- tx3912_rs_init();
-#endif
-#ifdef CONFIG_ROCKETPORT
- rp_init();
-#endif
-#ifdef CONFIG_SERIAL167
- serial167_init();
-#endif
-#ifdef CONFIG_CYCLADES
- cy_init();
-#endif
-#ifdef CONFIG_STALLION
- stl_init();
-#endif
-#ifdef CONFIG_ISTALLION
- stli_init();
-#endif
-#ifdef CONFIG_DIGI
- pcxe_init();
-#endif
-#ifdef CONFIG_DIGIEPCA
- pc_init();
-#endif
-#ifdef CONFIG_SPECIALIX
- specialix_init();
-#endif
-#if (defined(CONFIG_8xx) || defined(CONFIG_8260))
- rs_8xx_init();
-#endif /* CONFIG_8xx */
- pty_init();
-#ifdef CONFIG_MOXA_SMARTIO
- mxser_init();
-#endif
-#ifdef CONFIG_MOXA_INTELLIO
- moxa_init();
-#endif
-#ifdef CONFIG_VT
- vcs_init();
-#endif
-#ifdef CONFIG_TN3270
- tub3270_init();
-#endif
-#ifdef CONFIG_TN3215
- tty3215_init();
-#endif
-#ifdef CONFIG_HWC
- hwc_tty_init();
-#endif
-#ifdef CONFIG_A2232
- a2232board_init();
-#endif
-}
diff --git a/xenolinux-2.4.25-sparse/fs/exec.c b/xenolinux-2.4.25-sparse/fs/exec.c
deleted file mode 100644
index 16dc3193bf..0000000000
--- a/xenolinux-2.4.25-sparse/fs/exec.c
+++ /dev/null
@@ -1,1157 +0,0 @@
-/*
- * linux/fs/exec.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/*
- * #!-checking implemented by tytso.
- */
-/*
- * Demand-loading implemented 01.12.91 - no need to read anything but
- * the header into memory. The inode of the executable is put into
- * "current->executable", and page faults do the actual loading. Clean.
- *
- * Once more I can proudly say that linux stood up to being changed: it
- * was less than 2 hours work to get demand-loading completely implemented.
- *
- * Demand loading changed July 1993 by Eric Youngdale. Use mmap instead,
- * current->executable is only used by the procfs. This allows a dispatch
- * table to check for several different types of binary formats. We keep
- * trying until we recognize the file or we run out of supported binary
- * formats.
- */
-
-#include <linux/config.h>
-#include <linux/slab.h>
-#include <linux/file.h>
-#include <linux/mman.h>
-#include <linux/a.out.h>
-#include <linux/stat.h>
-#include <linux/fcntl.h>
-#include <linux/smp_lock.h>
-#include <linux/init.h>
-#include <linux/pagemap.h>
-#include <linux/highmem.h>
-#include <linux/spinlock.h>
-#include <linux/personality.h>
-#include <linux/swap.h>
-#include <linux/utsname.h>
-#define __NO_VERSION__
-#include <linux/module.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/mmu_context.h>
-
-#ifdef CONFIG_KMOD
-#include <linux/kmod.h>
-#endif
-
-int core_uses_pid;
-char core_pattern[65] = "core";
-int core_setuid_ok = 0;
-/* The maximal length of core_pattern is also specified in sysctl.c */
-
-static struct linux_binfmt *formats;
-static rwlock_t binfmt_lock = RW_LOCK_UNLOCKED;
-
-int register_binfmt(struct linux_binfmt * fmt)
-{
- struct linux_binfmt ** tmp = &formats;
-
- if (!fmt)
- return -EINVAL;
- if (fmt->next)
- return -EBUSY;
- write_lock(&binfmt_lock);
- while (*tmp) {
- if (fmt == *tmp) {
- write_unlock(&binfmt_lock);
- return -EBUSY;
- }
- tmp = &(*tmp)->next;
- }
- fmt->next = formats;
- formats = fmt;
- write_unlock(&binfmt_lock);
- return 0;
-}
-
-int unregister_binfmt(struct linux_binfmt * fmt)
-{
- struct linux_binfmt ** tmp = &formats;
-
- write_lock(&binfmt_lock);
- while (*tmp) {
- if (fmt == *tmp) {
- *tmp = fmt->next;
- write_unlock(&binfmt_lock);
- return 0;
- }
- tmp = &(*tmp)->next;
- }
- write_unlock(&binfmt_lock);
- return -EINVAL;
-}
-
-static inline void put_binfmt(struct linux_binfmt * fmt)
-{
- if (fmt->module)
- __MOD_DEC_USE_COUNT(fmt->module);
-}
-
-/*
- * Note that a shared library must be both readable and executable due to
- * security reasons.
- *
- * Also note that we take the address to load from from the file itself.
- */
-asmlinkage long sys_uselib(const char * library)
-{
- struct file * file;
- struct nameidata nd;
- int error;
-
- error = user_path_walk(library, &nd);
- if (error)
- goto out;
-
- error = -EINVAL;
- if (!S_ISREG(nd.dentry->d_inode->i_mode))
- goto exit;
-
- error = permission(nd.dentry->d_inode, MAY_READ | MAY_EXEC);
- if (error)
- goto exit;
-
- file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
- error = PTR_ERR(file);
- if (IS_ERR(file))
- goto out;
-
- error = -ENOEXEC;
- if(file->f_op && file->f_op->read) {
- struct linux_binfmt * fmt;
-
- read_lock(&binfmt_lock);
- for (fmt = formats ; fmt ; fmt = fmt->next) {
- if (!fmt->load_shlib)
- continue;
- if (!try_inc_mod_count(fmt->module))
- continue;
- read_unlock(&binfmt_lock);
- error = fmt->load_shlib(file);
- read_lock(&binfmt_lock);
- put_binfmt(fmt);
- if (error != -ENOEXEC)
- break;
- }
- read_unlock(&binfmt_lock);
- }
- fput(file);
-out:
- return error;
-exit:
- path_release(&nd);
- goto out;
-}
-
-/*
- * count() counts the number of arguments/envelopes
- */
-static int count(char ** argv, int max)
-{
- int i = 0;
-
- if (argv != NULL) {
- for (;;) {
- char * p;
-
- if (get_user(p, argv))
- return -EFAULT;
- if (!p)
- break;
- argv++;
- if(++i > max)
- return -E2BIG;
- }
- }
- return i;
-}
-
-/*
- * 'copy_strings()' copies argument/envelope strings from user
- * memory to free pages in kernel mem. These are in a format ready
- * to be put directly into the top of new user memory.
- */
-int copy_strings(int argc,char ** argv, struct linux_binprm *bprm)
-{
- struct page *kmapped_page = NULL;
- char *kaddr = NULL;
- int ret;
-
- while (argc-- > 0) {
- char *str;
- int len;
- unsigned long pos;
-
- if (get_user(str, argv+argc) ||
- !(len = strnlen_user(str, bprm->p))) {
- ret = -EFAULT;
- goto out;
- }
-
- if (bprm->p < len) {
- ret = -E2BIG;
- goto out;
- }
-
- bprm->p -= len;
- /* XXX: add architecture specific overflow check here. */
- pos = bprm->p;
-
- while (len > 0) {
- int i, new, err;
- int offset, bytes_to_copy;
- struct page *page;
-
- offset = pos % PAGE_SIZE;
- i = pos/PAGE_SIZE;
- page = bprm->page[i];
- new = 0;
- if (!page) {
- page = alloc_page(GFP_HIGHUSER);
- bprm->page[i] = page;
- if (!page) {
- ret = -ENOMEM;
- goto out;
- }
- new = 1;
- }
-
- if (page != kmapped_page) {
- if (kmapped_page)
- kunmap(kmapped_page);
- kmapped_page = page;
- kaddr = kmap(kmapped_page);
- }
- if (new && offset)
- memset(kaddr, 0, offset);
- bytes_to_copy = PAGE_SIZE - offset;
- if (bytes_to_copy > len) {
- bytes_to_copy = len;
- if (new)
- memset(kaddr+offset+len, 0,
- PAGE_SIZE-offset-len);
- }
- err = copy_from_user(kaddr+offset, str, bytes_to_copy);
- if (err) {
- ret = -EFAULT;
- goto out;
- }
-
- pos += bytes_to_copy;
- str += bytes_to_copy;
- len -= bytes_to_copy;
- }
- }
- ret = 0;
-out:
- if (kmapped_page)
- kunmap(kmapped_page);
- return ret;
-}
-
-/*
- * Like copy_strings, but get argv and its values from kernel memory.
- */
-int copy_strings_kernel(int argc,char ** argv, struct linux_binprm *bprm)
-{
- int r;
- mm_segment_t oldfs = get_fs();
- set_fs(KERNEL_DS);
- r = copy_strings(argc, argv, bprm);
- set_fs(oldfs);
- return r;
-}
-
-/*
- * This routine is used to map in a page into an address space: needed by
- * execve() for the initial stack and environment pages.
- *
- * tsk->mmap_sem is held for writing.
- */
-void put_dirty_page(struct task_struct * tsk, struct page *page, unsigned long address)
-{
- pgd_t * pgd;
- pmd_t * pmd;
- pte_t * pte;
- struct vm_area_struct *vma;
- pgprot_t prot = PAGE_COPY;
-
- if (page_count(page) != 1)
- printk(KERN_ERR "mem_map disagrees with %p at %08lx\n", page, address);
- pgd = pgd_offset(tsk->mm, address);
-
- spin_lock(&tsk->mm->page_table_lock);
- pmd = pmd_alloc(tsk->mm, pgd, address);
- if (!pmd)
- goto out;
- pte = pte_alloc(tsk->mm, pmd, address);
- if (!pte)
- goto out;
- if (!pte_none(*pte))
- goto out;
- lru_cache_add(page);
- flush_dcache_page(page);
- flush_page_to_ram(page);
- /* lookup is cheap because there is only a single entry in the list */
- vma = find_vma(tsk->mm, address);
- if (vma)
- prot = vma->vm_page_prot;
- set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot))));
- XEN_flush_page_update_queue();
- tsk->mm->rss++;
- spin_unlock(&tsk->mm->page_table_lock);
-
- /* no need for flush_tlb */
- return;
-out:
- spin_unlock(&tsk->mm->page_table_lock);
- __free_page(page);
- force_sig(SIGKILL, tsk);
- return;
-}
-
-int setup_arg_pages(struct linux_binprm *bprm)
-{
- unsigned long stack_base;
- struct vm_area_struct *mpnt;
- int i;
-
- stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
-
- bprm->p += stack_base;
- if (bprm->loader)
- bprm->loader += stack_base;
- bprm->exec += stack_base;
-
- mpnt = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
- if (!mpnt)
- return -ENOMEM;
-
- down_write(&current->mm->mmap_sem);
- {
- mpnt->vm_mm = current->mm;
- mpnt->vm_start = PAGE_MASK & (unsigned long) bprm->p;
- mpnt->vm_end = STACK_TOP;
- mpnt->vm_flags = VM_STACK_FLAGS;
- mpnt->vm_page_prot = protection_map[VM_STACK_FLAGS & 0x7];
- mpnt->vm_ops = NULL;
- mpnt->vm_pgoff = 0;
- mpnt->vm_file = NULL;
- mpnt->vm_private_data = (void *) 0;
- insert_vm_struct(current->mm, mpnt);
- current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
- }
-
- for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
- struct page *page = bprm->page[i];
- if (page) {
- bprm->page[i] = NULL;
- put_dirty_page(current,page,stack_base);
- }
- stack_base += PAGE_SIZE;
- }
- up_write(&current->mm->mmap_sem);
-
- return 0;
-}
-
-struct file *open_exec(const char *name)
-{
- struct nameidata nd;
- struct inode *inode;
- struct file *file;
- int err = 0;
-
- err = path_lookup(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
- file = ERR_PTR(err);
- if (!err) {
- inode = nd.dentry->d_inode;
- file = ERR_PTR(-EACCES);
- if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
- S_ISREG(inode->i_mode)) {
- int err = permission(inode, MAY_EXEC);
- if (!err && !(inode->i_mode & 0111))
- err = -EACCES;
- file = ERR_PTR(err);
- if (!err) {
- file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
- if (!IS_ERR(file)) {
- err = deny_write_access(file);
- if (err) {
- fput(file);
- file = ERR_PTR(err);
- }
- }
-out:
- return file;
- }
- }
- path_release(&nd);
- }
- goto out;
-}
-
-int kernel_read(struct file *file, unsigned long offset,
- char * addr, unsigned long count)
-{
- mm_segment_t old_fs;
- loff_t pos = offset;
- int result = -ENOSYS;
-
- if (!file->f_op->read)
- goto fail;
- old_fs = get_fs();
- set_fs(get_ds());
- result = file->f_op->read(file, addr, count, &pos);
- set_fs(old_fs);
-fail:
- return result;
-}
-
-static int exec_mmap(void)
-{
- struct mm_struct * mm, * old_mm;
-
- old_mm = current->mm;
-
- if (old_mm && atomic_read(&old_mm->mm_users) == 1) {
- mm_release();
- down_write(&old_mm->mmap_sem);
- exit_mmap(old_mm);
- up_write(&old_mm->mmap_sem);
- return 0;
- }
-
-
- mm = mm_alloc();
- if (mm) {
- struct mm_struct *active_mm;
-
- if (init_new_context(current, mm)) {
- mmdrop(mm);
- return -ENOMEM;
- }
-
- /* Add it to the list of mm's */
- spin_lock(&mmlist_lock);
- list_add(&mm->mmlist, &init_mm.mmlist);
- mmlist_nr++;
- spin_unlock(&mmlist_lock);
-
- task_lock(current);
- active_mm = current->active_mm;
- current->mm = mm;
- current->active_mm = mm;
- task_unlock(current);
- activate_mm(active_mm, mm);
- mm_release();
- if (old_mm) {
- if (active_mm != old_mm) BUG();
- mmput(old_mm);
- return 0;
- }
- mmdrop(active_mm);
- return 0;
- }
- return -ENOMEM;
-}
-
-/*
- * This function makes sure the current process has its own signal table,
- * so that flush_signal_handlers can later reset the handlers without
- * disturbing other processes. (Other processes might share the signal
- * table via the CLONE_SIGNAL option to clone().)
- */
-
-static inline int make_private_signals(void)
-{
- struct signal_struct * newsig;
-
- if (atomic_read(&current->sig->count) <= 1)
- return 0;
- newsig = kmem_cache_alloc(sigact_cachep, GFP_KERNEL);
- if (newsig == NULL)
- return -ENOMEM;
- spin_lock_init(&newsig->siglock);
- atomic_set(&newsig->count, 1);
- memcpy(newsig->action, current->sig->action, sizeof(newsig->action));
- spin_lock_irq(&current->sigmask_lock);
- current->sig = newsig;
- spin_unlock_irq(&current->sigmask_lock);
- return 0;
-}
-
-/*
- * If make_private_signals() made a copy of the signal table, decrement the
- * refcount of the original table, and free it if necessary.
- * We don't do that in make_private_signals() so that we can back off
- * in flush_old_exec() if an error occurs after calling make_private_signals().
- */
-
-static inline void release_old_signals(struct signal_struct * oldsig)
-{
- if (current->sig == oldsig)
- return;
- if (atomic_dec_and_test(&oldsig->count))
- kmem_cache_free(sigact_cachep, oldsig);
-}
-
-/*
- * These functions flushes out all traces of the currently running executable
- * so that a new one can be started
- */
-
-static inline void flush_old_files(struct files_struct * files)
-{
- long j = -1;
-
- write_lock(&files->file_lock);
- for (;;) {
- unsigned long set, i;
-
- j++;
- i = j * __NFDBITS;
- if (i >= files->max_fds || i >= files->max_fdset)
- break;
- set = files->close_on_exec->fds_bits[j];
- if (!set)
- continue;
- files->close_on_exec->fds_bits[j] = 0;
- write_unlock(&files->file_lock);
- for ( ; set ; i++,set >>= 1) {
- if (set & 1) {
- sys_close(i);
- }
- }
- write_lock(&files->file_lock);
-
- }
- write_unlock(&files->file_lock);
-}
-
-/*
- * An execve() will automatically "de-thread" the process.
- * Note: we don't have to hold the tasklist_lock to test
- * whether we migth need to do this. If we're not part of
- * a thread group, there is no way we can become one
- * dynamically. And if we are, we only need to protect the
- * unlink - even if we race with the last other thread exit,
- * at worst the list_del_init() might end up being a no-op.
- */
-static inline void de_thread(struct task_struct *tsk)
-{
- if (!list_empty(&tsk->thread_group)) {
- write_lock_irq(&tasklist_lock);
- list_del_init(&tsk->thread_group);
- write_unlock_irq(&tasklist_lock);
- }
-
- /* Minor oddity: this might stay the same. */
- tsk->tgid = tsk->pid;
-}
-
-int flush_old_exec(struct linux_binprm * bprm)
-{
- char * name;
- int i, ch, retval;
- struct signal_struct * oldsig;
- struct files_struct * files;
-
- /*
- * Make sure we have a private signal table
- */
- oldsig = current->sig;
- retval = make_private_signals();
- if (retval) goto flush_failed;
-
- /*
- * Make sure we have private file handles. Ask the
- * fork helper to do the work for us and the exit
- * helper to do the cleanup of the old one.
- */
-
- files = current->files; /* refcounted so safe to hold */
- retval = unshare_files();
- if(retval)
- goto flush_failed;
-
- /*
- * Release all of the old mmap stuff
- */
- retval = exec_mmap();
- if (retval) goto mmap_failed;
-
- /* This is the point of no return */
- steal_locks(files);
- put_files_struct(files);
- release_old_signals(oldsig);
-
- current->sas_ss_sp = current->sas_ss_size = 0;
-
- if (current->euid == current->uid && current->egid == current->gid) {
- current->mm->dumpable = 1;
- current->task_dumpable = 1;
- }
- name = bprm->filename;
- for (i=0; (ch = *(name++)) != '\0';) {
- if (ch == '/')
- i = 0;
- else
- if (i < 15)
- current->comm[i++] = ch;
- }
- current->comm[i] = '\0';
-
- flush_thread();
-
- de_thread(current);
-
- if (bprm->e_uid != current->euid || bprm->e_gid != current->egid ||
- permission(bprm->file->f_dentry->d_inode,MAY_READ))
- current->mm->dumpable = 0;
-
- /* An exec changes our domain. We are no longer part of the thread
- group */
-
- current->self_exec_id++;
-
- flush_signal_handlers(current);
- flush_old_files(current->files);
-
- return 0;
-
-mmap_failed:
- put_files_struct(current->files);
- current->files = files;
-flush_failed:
- spin_lock_irq(&current->sigmask_lock);
- if (current->sig != oldsig) {
- kmem_cache_free(sigact_cachep, current->sig);
- current->sig = oldsig;
- }
- spin_unlock_irq(&current->sigmask_lock);
- return retval;
-}
-
-/*
- * We mustn't allow tracing of suid binaries, unless
- * the tracer has the capability to trace anything..
- */
-static inline int must_not_trace_exec(struct task_struct * p)
-{
- return (p->ptrace & PT_PTRACED) && !(p->ptrace & PT_PTRACE_CAP);
-}
-
-/*
- * Fill the binprm structure from the inode.
- * Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
- */
-int prepare_binprm(struct linux_binprm *bprm)
-{
- int mode;
- struct inode * inode = bprm->file->f_dentry->d_inode;
-
- mode = inode->i_mode;
- /*
- * Check execute perms again - if the caller has CAP_DAC_OVERRIDE,
- * vfs_permission lets a non-executable through
- */
- if (!(mode & 0111)) /* with at least _one_ execute bit set */
- return -EACCES;
- if (bprm->file->f_op == NULL)
- return -EACCES;
-
- bprm->e_uid = current->euid;
- bprm->e_gid = current->egid;
-
- if(!(bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)) {
- /* Set-uid? */
- if (mode & S_ISUID)
- bprm->e_uid = inode->i_uid;
-
- /* Set-gid? */
- /*
- * If setgid is set but no group execute bit then this
- * is a candidate for mandatory locking, not a setgid
- * executable.
- */
- if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))
- bprm->e_gid = inode->i_gid;
- }
-
- /* We don't have VFS support for capabilities yet */
- cap_clear(bprm->cap_inheritable);
- cap_clear(bprm->cap_permitted);
- cap_clear(bprm->cap_effective);
-
- /* To support inheritance of root-permissions and suid-root
- * executables under compatibility mode, we raise all three
- * capability sets for the file.
- *
- * If only the real uid is 0, we only raise the inheritable
- * and permitted sets of the executable file.
- */
-
- if (!issecure(SECURE_NOROOT)) {
- if (bprm->e_uid == 0 || current->uid == 0) {
- cap_set_full(bprm->cap_inheritable);
- cap_set_full(bprm->cap_permitted);
- }
- if (bprm->e_uid == 0)
- cap_set_full(bprm->cap_effective);
- }
-
- memset(bprm->buf,0,BINPRM_BUF_SIZE);
- return kernel_read(bprm->file,0,bprm->buf,BINPRM_BUF_SIZE);
-}
-
-/*
- * This function is used to produce the new IDs and capabilities
- * from the old ones and the file's capabilities.
- *
- * The formula used for evolving capabilities is:
- *
- * pI' = pI
- * (***) pP' = (fP & X) | (fI & pI)
- * pE' = pP' & fE [NB. fE is 0 or ~0]
- *
- * I=Inheritable, P=Permitted, E=Effective // p=process, f=file
- * ' indicates post-exec(), and X is the global 'cap_bset'.
- *
- */
-
-void compute_creds(struct linux_binprm *bprm)
-{
- kernel_cap_t new_permitted, working;
- int do_unlock = 0;
-
- new_permitted = cap_intersect(bprm->cap_permitted, cap_bset);
- working = cap_intersect(bprm->cap_inheritable,
- current->cap_inheritable);
- new_permitted = cap_combine(new_permitted, working);
-
- if (bprm->e_uid != current->uid || bprm->e_gid != current->gid ||
- !cap_issubset(new_permitted, current->cap_permitted)) {
- current->mm->dumpable = 0;
-
- lock_kernel();
- if (must_not_trace_exec(current)
- || atomic_read(&current->fs->count) > 1
- || atomic_read(&current->files->count) > 1
- || atomic_read(&current->sig->count) > 1) {
- if(!capable(CAP_SETUID)) {
- bprm->e_uid = current->uid;
- bprm->e_gid = current->gid;
- }
- if(!capable(CAP_SETPCAP)) {
- new_permitted = cap_intersect(new_permitted,
- current->cap_permitted);
- }
- }
- do_unlock = 1;
- }
-
-
- /* For init, we want to retain the capabilities set
- * in the init_task struct. Thus we skip the usual
- * capability rules */
- if (current->pid != 1) {
- current->cap_permitted = new_permitted;
- current->cap_effective =
- cap_intersect(new_permitted, bprm->cap_effective);
- }
-
- /* AUD: Audit candidate if current->cap_effective is set */
-
- current->suid = current->euid = current->fsuid = bprm->e_uid;
- current->sgid = current->egid = current->fsgid = bprm->e_gid;
-
- if(do_unlock)
- unlock_kernel();
- current->keep_capabilities = 0;
-}
-
-
-void remove_arg_zero(struct linux_binprm *bprm)
-{
- if (bprm->argc) {
- unsigned long offset;
- char * kaddr;
- struct page *page;
-
- offset = bprm->p % PAGE_SIZE;
- goto inside;
-
- while (bprm->p++, *(kaddr+offset++)) {
- if (offset != PAGE_SIZE)
- continue;
- offset = 0;
- kunmap(page);
-inside:
- page = bprm->page[bprm->p/PAGE_SIZE];
- kaddr = kmap(page);
- }
- kunmap(page);
- bprm->argc--;
- }
-}
-
-/*
- * cycle the list of binary formats handler, until one recognizes the image
- */
-int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
-{
- int try,retval=0;
- struct linux_binfmt *fmt;
-#ifdef __alpha__
- /* handle /sbin/loader.. */
- {
- struct exec * eh = (struct exec *) bprm->buf;
-
- if (!bprm->loader && eh->fh.f_magic == 0x183 &&
- (eh->fh.f_flags & 0x3000) == 0x3000)
- {
- struct file * file;
- unsigned long loader;
-
- allow_write_access(bprm->file);
- fput(bprm->file);
- bprm->file = NULL;
-
- loader = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-
- file = open_exec("/sbin/loader");
- retval = PTR_ERR(file);
- if (IS_ERR(file))
- return retval;
-
- /* Remember if the application is TASO. */
- bprm->sh_bang = eh->ah.entry < 0x100000000;
-
- bprm->file = file;
- bprm->loader = loader;
- retval = prepare_binprm(bprm);
- if (retval<0)
- return retval;
- /* should call search_binary_handler recursively here,
- but it does not matter */
- }
- }
-#endif
- /* kernel module loader fixup */
- /* so we don't try to load run modprobe in kernel space. */
- set_fs(USER_DS);
- for (try=0; try<2; try++) {
- read_lock(&binfmt_lock);
- for (fmt = formats ; fmt ; fmt = fmt->next) {
- int (*fn)(struct linux_binprm *, struct pt_regs *) = fmt->load_binary;
- if (!fn)
- continue;
- if (!try_inc_mod_count(fmt->module))
- continue;
- read_unlock(&binfmt_lock);
- retval = fn(bprm, regs);
- if (retval >= 0) {
- put_binfmt(fmt);
- allow_write_access(bprm->file);
- if (bprm->file)
- fput(bprm->file);
- bprm->file = NULL;
- current->did_exec = 1;
- return retval;
- }
- read_lock(&binfmt_lock);
- put_binfmt(fmt);
- if (retval != -ENOEXEC)
- break;
- if (!bprm->file) {
- read_unlock(&binfmt_lock);
- return retval;
- }
- }
- read_unlock(&binfmt_lock);
- if (retval != -ENOEXEC) {
- break;
-#ifdef CONFIG_KMOD
- }else{
-#define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
- char modname[20];
- if (printable(bprm->buf[0]) &&
- printable(bprm->buf[1]) &&
- printable(bprm->buf[2]) &&
- printable(bprm->buf[3]))
- break; /* -ENOEXEC */
- sprintf(modname, "binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
- request_module(modname);
-#endif
- }
- }
- return retval;
-}
-
-
-/*
- * sys_execve() executes a new program.
- */
-int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs)
-{
- struct linux_binprm bprm;
- struct file *file;
- int retval;
- int i;
-
- file = open_exec(filename);
-
- retval = PTR_ERR(file);
- if (IS_ERR(file))
- return retval;
-
- bprm.p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
- memset(bprm.page, 0, MAX_ARG_PAGES*sizeof(bprm.page[0]));
-
- bprm.file = file;
- bprm.filename = filename;
- bprm.sh_bang = 0;
- bprm.loader = 0;
- bprm.exec = 0;
- if ((bprm.argc = count(argv, bprm.p / sizeof(void *))) < 0) {
- allow_write_access(file);
- fput(file);
- return bprm.argc;
- }
-
- if ((bprm.envc = count(envp, bprm.p / sizeof(void *))) < 0) {
- allow_write_access(file);
- fput(file);
- return bprm.envc;
- }
-
- retval = prepare_binprm(&bprm);
- if (retval < 0)
- goto out;
-
- retval = copy_strings_kernel(1, &bprm.filename, &bprm);
- if (retval < 0)
- goto out;
-
- bprm.exec = bprm.p;
- retval = copy_strings(bprm.envc, envp, &bprm);
- if (retval < 0)
- goto out;
-
- retval = copy_strings(bprm.argc, argv, &bprm);
- if (retval < 0)
- goto out;
-
- retval = search_binary_handler(&bprm,regs);
- if (retval >= 0)
- /* execve success */
- return retval;
-
-out:
- /* Something went wrong, return the inode and free the argument pages*/
- allow_write_access(bprm.file);
- if (bprm.file)
- fput(bprm.file);
-
- for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
- struct page * page = bprm.page[i];
- if (page)
- __free_page(page);
- }
-
- return retval;
-}
-
-void set_binfmt(struct linux_binfmt *new)
-{
- struct linux_binfmt *old = current->binfmt;
- if (new && new->module)
- __MOD_INC_USE_COUNT(new->module);
- current->binfmt = new;
- if (old && old->module)
- __MOD_DEC_USE_COUNT(old->module);
-}
-
-#define CORENAME_MAX_SIZE 64
-
-/* format_corename will inspect the pattern parameter, and output a
- * name into corename, which must have space for at least
- * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator.
- */
-void format_corename(char *corename, const char *pattern, long signr)
-{
- const char *pat_ptr = pattern;
- char *out_ptr = corename;
- char *const out_end = corename + CORENAME_MAX_SIZE;
- int rc;
- int pid_in_pattern = 0;
-
- /* Repeat as long as we have more pattern to process and more output
- space */
- while (*pat_ptr) {
- if (*pat_ptr != '%') {
- if (out_ptr == out_end)
- goto out;
- *out_ptr++ = *pat_ptr++;
- } else {
- switch (*++pat_ptr) {
- case 0:
- goto out;
- /* Double percent, output one percent */
- case '%':
- if (out_ptr == out_end)
- goto out;
- *out_ptr++ = '%';
- break;
- /* pid */
- case 'p':
- pid_in_pattern = 1;
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%d", current->pid);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- /* uid */
- case 'u':
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%d", current->uid);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- /* gid */
- case 'g':
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%d", current->gid);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- /* signal that caused the coredump */
- case 's':
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%ld", signr);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- /* UNIX time of coredump */
- case 't': {
- struct timeval tv;
- do_gettimeofday(&tv);
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%ld", tv.tv_sec);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- }
- /* hostname */
- case 'h':
- down_read(&uts_sem);
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%s", system_utsname.nodename);
- up_read(&uts_sem);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- /* executable */
- case 'e':
- rc = snprintf(out_ptr, out_end - out_ptr,
- "%s", current->comm);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- break;
- default:
- break;
- }
- ++pat_ptr;
- }
- }
- /* Backward compatibility with core_uses_pid:
- *
- * If core_pattern does not include a %p (as is the default)
- * and core_uses_pid is set, then .%pid will be appended to
- * the filename */
- if (!pid_in_pattern
- && (core_uses_pid || atomic_read(&current->mm->mm_users) != 1)) {
- rc = snprintf(out_ptr, out_end - out_ptr,
- ".%d", current->pid);
- if (rc > out_end - out_ptr)
- goto out;
- out_ptr += rc;
- }
- out:
- *out_ptr = 0;
-}
-
-int do_coredump(long signr, struct pt_regs * regs)
-{
- struct linux_binfmt * binfmt;
- char corename[CORENAME_MAX_SIZE + 1];
- struct file * file;
- struct inode * inode;
- int retval = 0;
- int fsuid = current->fsuid;
-
- lock_kernel();
- binfmt = current->binfmt;
- if (!binfmt || !binfmt->core_dump)
- goto fail;
- if (!is_dumpable(current))
- {
- if(!core_setuid_ok || !current->task_dumpable)
- goto fail;
- current->fsuid = 0;
- }
- current->mm->dumpable = 0;
- if (current->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
- goto fail;
-
- format_corename(corename, core_pattern, signr);
- file = filp_open(corename, O_CREAT | 2 | O_NOFOLLOW, 0600);
- if (IS_ERR(file))
- goto fail;
- inode = file->f_dentry->d_inode;
- if (inode->i_nlink > 1)
- goto close_fail; /* multiple links - don't dump */
- if (d_unhashed(file->f_dentry))
- goto close_fail;
-
- if (!S_ISREG(inode->i_mode))
- goto close_fail;
- if (!file->f_op)
- goto close_fail;
- if (!file->f_op->write)
- goto close_fail;
- if (do_truncate(file->f_dentry, 0) != 0)
- goto close_fail;
-
- retval = binfmt->core_dump(signr, regs, file);
-
-close_fail:
- filp_close(file, NULL);
-fail:
- if (fsuid != current->fsuid)
- current->fsuid = fsuid;
- unlock_kernel();
- return retval;
-}
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/bugs.h b/xenolinux-2.4.25-sparse/include/asm-xen/bugs.h
deleted file mode 100644
index c46b6a0b15..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/bugs.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * include/asm-i386/bugs.h
- *
- * Copyright (C) 1994 Linus Torvalds
- *
- * Cyrix stuff, June 1998 by:
- * - Rafael R. Reilova (moved everything from head.S),
- * <rreilova@ececs.uc.edu>
- * - Channing Corn (tests & fixes),
- * - Andrew D. Balsa (code cleanup).
- *
- * Pentium III FXSR, SSE support
- * Gareth Hughes <gareth@valinux.com>, May 2000
- */
-
-/*
- * This is included by init/main.c to check for architecture-dependent bugs.
- *
- * Needs:
- * void check_bugs(void);
- */
-
-#include <linux/config.h>
-#include <asm/processor.h>
-#include <asm/i387.h>
-#include <asm/msr.h>
-
-
-static void __init check_fpu(void)
-{
- boot_cpu_data.fdiv_bug = 0;
-}
-
-static void __init check_hlt(void)
-{
- boot_cpu_data.hlt_works_ok = 1;
-}
-
-static void __init check_bugs(void)
-{
- extern void __init boot_init_fpu(void);
-
- identify_cpu(&boot_cpu_data);
- boot_init_fpu();
-#ifndef CONFIG_SMP
- printk("CPU: ");
- print_cpu_info(&boot_cpu_data);
-#endif
- check_fpu();
- check_hlt();
- system_utsname.machine[1] = '0' +
- (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
-}
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/ctrl_if.h b/xenolinux-2.4.25-sparse/include/asm-xen/ctrl_if.h
deleted file mode 100644
index 9d12487144..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/ctrl_if.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/******************************************************************************
- * ctrl_if.h
- *
- * Management functions for special interface to the domain controller.
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __ASM_XEN__CTRL_IF_H__
-#define __ASM_XEN__CTRL_IF_H__
-
-#include <asm/hypervisor.h>
-
-typedef control_msg_t ctrl_msg_t;
-
-/*
- * Callback function type. Called for asynchronous processing of received
- * request messages, and responses to previously-transmitted request messages.
- * The parameters are (@msg, @id).
- * @msg: Original request/response message (not a copy). The message can be
- * modified in-place by the handler (e.g., a response callback can
- * turn a request message into a response message in place). The message
- * is no longer accessible after the callback handler returns -- if the
- * message is required to persist for longer then it must be copied.
- * @id: (Response callbacks only) The 'id' that was specified when the
- * original request message was queued for transmission.
- */
-typedef void (*ctrl_msg_handler_t)(ctrl_msg_t *, unsigned long);
-
-/*
- * Send @msg to the domain controller. Execute @hnd when a response is
- * received, passing the response message and the specified @id. This
- * operation will not block: it will return -EAGAIN if there is no space.
- * Notes:
- * 1. The @msg is copied if it is transmitted and so can be freed after this
- * function returns.
- * 2. If @hnd is NULL then no callback is executed.
- */
-int ctrl_if_send_message_noblock(
- ctrl_msg_t *msg,
- ctrl_msg_handler_t hnd,
- unsigned long id);
-
-/*
- * Send @msg to the domain controller. Execute @hnd when a response is
- * received, passing the response message and the specified @id. This
- * operation will block until the message is sent, or a signal is received
- * for the calling process (unless @wait_state is TASK_UNINTERRUPTIBLE).
- * Notes:
- * 1. The @msg is copied if it is transmitted and so can be freed after this
- * function returns.
- * 2. If @hnd is NULL then no callback is executed.
- */
-int ctrl_if_send_message(
- ctrl_msg_t *msg,
- ctrl_msg_handler_t hnd,
- unsigned long id,
- long wait_state);
-
-/*
- * Request a callback when there is /possibly/ space to immediately send a
- * message to the domain controller. This function returns 0 if there is
- * already space to trasnmit a message --- in this case the callback task /may/
- * still be executed. If this function returns 1 then the callback /will/ be
- * executed when space becomes available.
- */
-int ctrl_if_enqueue_space_callback(struct tq_struct *task);
-
-/*
- * Send a response (@msg) to a message from the domain controller. This will
- * never block.
- * Notes:
- * 1. The @msg is copied and so can be freed after this function returns.
- * 2. The @msg may be the original request message, modified in-place.
- */
-void ctrl_if_send_response(ctrl_msg_t *msg);
-
-/*
- * Register a receiver for typed messages from the domain controller. The
- * handler (@hnd) is called for every received message of specified @type.
- * Returns TRUE (non-zero) if the handler was successfully registered.
- */
-int ctrl_if_register_receiver(u8 type, ctrl_msg_handler_t hnd);
-
-/*
- * Unregister a receiver for typed messages from the domain controller. The
- * handler (@hnd) will not be executed after this function returns.
- */
-void ctrl_if_unregister_receiver(u8 type, ctrl_msg_handler_t hnd);
-
-/* Suspend/resume notifications. */
-void ctrl_if_suspend(void);
-void ctrl_if_resume(void);
-
-/* Start-of-day setup. */
-void ctrl_if_init(void);
-
-/*
- * Returns TRUE if there are no outstanding message requests at the domain
- * controller. This can be used to ensure that messages have really flushed
- * through when it is not possible to use the response-callback interface.
- * WARNING: If other subsystems are using the control interface then this
- * function might never return TRUE!
- */
-int ctrl_if_transmitter_empty(void); /* !! DANGEROUS FUNCTION !! */
-
-/*
- * Manually discard response messages from the domain controller.
- * WARNING: This is usually done automatically -- this function should only
- * be called when normal interrupt mechanisms are disabled!
- */
-void ctrl_if_discard_responses(void); /* !! DANGEROUS FUNCTION !! */
-
-#endif /* __ASM_XEN__CONTROL_IF_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/desc.h b/xenolinux-2.4.25-sparse/include/asm-xen/desc.h
deleted file mode 100644
index 33309a9671..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/desc.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef __ARCH_DESC_H
-#define __ARCH_DESC_H
-
-#include <asm/ldt.h>
-
-#ifndef __ASSEMBLY__
-
-struct desc_struct {
- unsigned long a,b;
-};
-
-struct Xgt_desc_struct {
- unsigned short size;
- unsigned long address __attribute__((packed));
-};
-
-extern struct desc_struct default_ldt[];
-
-static inline void clear_LDT(void)
-{
- /*
- * NB. We load the default_ldt for lcall7/27 handling on demand, as
- * it slows down context switching. Noone uses it anyway.
- */
- queue_set_ldt(0, 0);
-}
-
-static inline void load_LDT(mm_context_t *pc)
-{
- void *segments = pc->ldt;
- int count = pc->size;
-
- if ( count == 0 )
- segments = NULL;
-
- queue_set_ldt((unsigned long)segments, count);
-}
-
-#endif /* __ASSEMBLY__ */
-
-#endif /* __ARCH_DESC_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/evtchn.h b/xenolinux-2.4.25-sparse/include/asm-xen/evtchn.h
deleted file mode 100644
index ececad9447..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/evtchn.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- * evtchn.h
- *
- * Communication via Xen event channels.
- * Also definitions for the device that demuxes notifications to userspace.
- *
- * Copyright (c) 2004, K A Fraser
- */
-
-#ifndef __ASM_EVTCHN_H__
-#define __ASM_EVTCHN_H__
-
-#include <linux/config.h>
-#include <asm/hypervisor.h>
-#include <asm/ptrace.h>
-#include <asm/synch_bitops.h>
-
-/*
- * LOW-LEVEL DEFINITIONS
- */
-
-/* Entry point for notifications into Linux subsystems. */
-void evtchn_do_upcall(struct pt_regs *regs);
-
-/* Entry point for notifications into the userland character device. */
-void evtchn_device_upcall(int port);
-
-static inline void mask_evtchn(int port)
-{
- shared_info_t *s = HYPERVISOR_shared_info;
- synch_set_bit(port, &s->evtchn_mask[0]);
-}
-
-static inline void unmask_evtchn(int port)
-{
- shared_info_t *s = HYPERVISOR_shared_info;
-
- synch_clear_bit(port, &s->evtchn_mask[0]);
-
- /*
- * The following is basically the equivalent of 'hw_resend_irq'. Just like
- * a real IO-APIC we 'lose the interrupt edge' if the channel is masked.
- */
- if ( synch_test_bit (port, &s->evtchn_pending[0]) &&
- !synch_test_and_set_bit(port>>5, &s->evtchn_pending_sel) )
- {
- s->vcpu_data[0].evtchn_upcall_pending = 1;
- if ( !s->vcpu_data[0].evtchn_upcall_mask )
- evtchn_do_upcall(NULL);
- }
-}
-
-static inline void clear_evtchn(int port)
-{
- shared_info_t *s = HYPERVISOR_shared_info;
- synch_clear_bit(port, &s->evtchn_pending[0]);
-}
-
-static inline void clear_evtchn_exception(int port)
-{
- shared_info_t *s = HYPERVISOR_shared_info;
- synch_clear_bit(port, &s->evtchn_exception[0]);
-}
-
-/*
- * CHARACTER-DEVICE DEFINITIONS
- */
-
-#define PORT_NORMAL 0x0000
-#define PORT_EXCEPTION 0x8000
-#define PORTIDX_MASK 0x7fff
-
-/* /dev/xen/evtchn resides at device number major=10, minor=200 */
-#define EVTCHN_MINOR 200
-
-/* /dev/xen/evtchn ioctls: */
-/* EVTCHN_RESET: Clear and reinit the event buffer. Clear error condition. */
-#define EVTCHN_RESET _IO('E', 1)
-/* EVTCHN_BIND: Bind to teh specified event-channel port. */
-#define EVTCHN_BIND _IO('E', 2)
-/* EVTCHN_UNBIND: Unbind from the specified event-channel port. */
-#define EVTCHN_UNBIND _IO('E', 3)
-
-#endif /* __ASM_EVTCHN_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/fixmap.h b/xenolinux-2.4.25-sparse/include/asm-xen/fixmap.h
deleted file mode 100644
index 338bd4ba2c..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/fixmap.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * fixmap.h: compile-time virtual memory allocation
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1998 Ingo Molnar
- *
- * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
- */
-
-#ifndef _ASM_FIXMAP_H
-#define _ASM_FIXMAP_H
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <asm/apicdef.h>
-#include <asm/page.h>
-#ifdef CONFIG_HIGHMEM
-#include <linux/threads.h>
-#include <asm/kmap_types.h>
-#endif
-
-/*
- * Here we define all the compile-time 'special' virtual
- * addresses. The point is to have a constant address at
- * compile time, but to set the physical address only
- * in the boot process. We allocate these special addresses
- * from the end of virtual memory (0xfffff000) backwards.
- * Also this lets us do fail-safe vmalloc(), we
- * can guarantee that these special addresses and
- * vmalloc()-ed addresses never overlap.
- *
- * these 'compile-time allocated' memory buffers are
- * fixed-size 4k pages. (or larger if used with an increment
- * highger than 1) use fixmap_set(idx,phys) to associate
- * physical memory with fixmap indices.
- *
- * TLB entries of such buffers will not be flushed across
- * task switches.
- */
-
-enum fixed_addresses {
-#ifdef CONFIG_HIGHMEM
- FIX_KMAP_BEGIN, /* reserved pte's for temporary kernel mappings */
- FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1,
-#endif
- FIX_BLKRING_BASE,
- FIX_NETRING0_BASE,
- FIX_NETRING1_BASE,
- FIX_NETRING2_BASE,
- FIX_NETRING3_BASE,
- FIX_SHARED_INFO,
-
-#ifdef CONFIG_VGA_CONSOLE
-#define NR_FIX_BTMAPS 32 /* 128KB For the Dom0 VGA Console A0000-C0000 */
-#else
-#define NR_FIX_BTMAPS 1 /* in case anyone wants it in future... */
-#endif
- FIX_BTMAP_END,
- FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS - 1,
- /* our bt_ioremap is permanent, unlike other architectures */
-
- __end_of_permanent_fixed_addresses,
- __end_of_fixed_addresses = __end_of_permanent_fixed_addresses
-};
-
-extern void __set_fixmap (enum fixed_addresses idx,
- unsigned long phys, pgprot_t flags);
-
-#define set_fixmap(idx, phys) \
- __set_fixmap(idx, phys, PAGE_KERNEL)
-/*
- * Some hardware wants to get fixmapped without caching.
- */
-#define set_fixmap_nocache(idx, phys) \
- __set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)
-
-extern void clear_fixmap(enum fixed_addresses idx);
-
-/*
- * used by vmalloc.c.
- *
- * Leave one empty page between vmalloc'ed areas and
- * the start of the fixmap, and leave one page empty
- * at the top of mem..
- */
-#define FIXADDR_TOP (HYPERVISOR_VIRT_START - 2*PAGE_SIZE)
-#define __FIXADDR_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
-#define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE)
-
-#define __fix_to_virt(x) (FIXADDR_TOP - ((x) << PAGE_SHIFT))
-
-/*
- * 'index to address' translation. If anyone tries to use the idx
- * directly without tranlation, we catch the bug with a NULL-deference
- * kernel oops. Illegal ranges of incoming indices are caught too.
- */
-static inline unsigned long fix_to_virt(unsigned int idx)
-{
- return __fix_to_virt(idx);
-}
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/highmem.h b/xenolinux-2.4.25-sparse/include/asm-xen/highmem.h
deleted file mode 100644
index 25ef32882c..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/highmem.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * highmem.h: virtual kernel memory mappings for high memory
- *
- * Used in CONFIG_HIGHMEM systems for memory pages which
- * are not addressable by direct kernel virtual addresses.
- *
- * Copyright (C) 1999 Gerhard Wichert, Siemens AG
- * Gerhard.Wichert@pdb.siemens.de
- *
- *
- * Redesigned the x86 32-bit VM architecture to deal with
- * up to 16 Terabyte physical memory. With current x86 CPUs
- * we now support up to 64 Gigabytes physical RAM.
- *
- * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
- */
-
-#ifndef _ASM_HIGHMEM_H
-#define _ASM_HIGHMEM_H
-
-#ifdef __KERNEL__
-
-#include <linux/config.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <asm/kmap_types.h>
-#include <asm/pgtable.h>
-
-#ifdef CONFIG_DEBUG_HIGHMEM
-#define HIGHMEM_DEBUG 1
-#else
-#define HIGHMEM_DEBUG 0
-#endif
-
-/* declarations for highmem.c */
-extern unsigned long highstart_pfn, highend_pfn;
-
-extern pte_t *kmap_pte;
-extern pgprot_t kmap_prot;
-extern pte_t *pkmap_page_table;
-
-extern void kmap_init(void) __init;
-
-/*
- * Right now we initialize only a single pte table. It can be extended
- * easily, subsequent pte tables have to be allocated in one physical
- * chunk of RAM.
- */
-#define PKMAP_BASE (HYPERVISOR_VIRT_START - (1<<23))
-#ifdef CONFIG_X86_PAE
-#define LAST_PKMAP 512
-#else
-#define LAST_PKMAP 1024
-#endif
-#define LAST_PKMAP_MASK (LAST_PKMAP-1)
-#define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT)
-#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
-
-extern void * FASTCALL(kmap_high(struct page *page, int nonblocking));
-extern void FASTCALL(kunmap_high(struct page *page));
-
-#define kmap(page) __kmap(page, 0)
-#define kmap_nonblock(page) __kmap(page, 1)
-
-static inline void *__kmap(struct page *page, int nonblocking)
-{
- if (in_interrupt())
- out_of_line_bug();
- if (page < highmem_start_page)
- return page_address(page);
- return kmap_high(page, nonblocking);
-}
-
-static inline void kunmap(struct page *page)
-{
- if (in_interrupt())
- out_of_line_bug();
- if (page < highmem_start_page)
- return;
- kunmap_high(page);
-}
-
-/*
- * The use of kmap_atomic/kunmap_atomic is discouraged - kmap/kunmap
- * gives a more generic (and caching) interface. But kmap_atomic can
- * be used in IRQ contexts, so in some (very limited) cases we need
- * it.
- */
-static inline void *kmap_atomic(struct page *page, enum km_type type)
-{
- enum fixed_addresses idx;
- unsigned long vaddr;
-
- if (page < highmem_start_page)
- return page_address(page);
-
- idx = type + KM_TYPE_NR*smp_processor_id();
- vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
-#if HIGHMEM_DEBUG
- if (!pte_none(*(kmap_pte-idx)))
- out_of_line_bug();
-#endif
- set_pte(kmap_pte-idx, mk_pte(page, kmap_prot));
- __flush_tlb_one(vaddr);
-
- return (void*) vaddr;
-}
-
-static inline void kunmap_atomic(void *kvaddr, enum km_type type)
-{
-#if HIGHMEM_DEBUG
- unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK;
- enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id();
-
- if (vaddr < FIXADDR_START) // FIXME
- return;
-
- if (vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx))
- out_of_line_bug();
-
- /*
- * force other mappings to Oops if they'll try to access
- * this pte without first remap it
- */
- pte_clear(kmap_pte-idx);
- __flush_tlb_one(vaddr);
-#endif
-}
-
-#endif /* __KERNEL__ */
-
-#endif /* _ASM_HIGHMEM_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/hw_irq.h b/xenolinux-2.4.25-sparse/include/asm-xen/hw_irq.h
deleted file mode 100644
index d99d15bd24..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/hw_irq.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef _ASM_HW_IRQ_H
-#define _ASM_HW_IRQ_H
-
-/*
- * linux/include/asm/hw_irq.h
- *
- * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
- */
-
-#include <linux/config.h>
-#include <linux/smp.h>
-#include <asm/atomic.h>
-#include <asm/irq.h>
-
-#define SYSCALL_VECTOR 0x80
-
-extern int irq_vector[NR_IRQS];
-
-extern atomic_t irq_err_count;
-extern atomic_t irq_mis_count;
-
-extern char _stext, _etext;
-
-extern unsigned long prof_cpu_mask;
-extern unsigned int * prof_buffer;
-extern unsigned long prof_len;
-extern unsigned long prof_shift;
-
-/*
- * x86 profiling function, SMP safe. We might want to do this in
- * assembly totally?
- */
-static inline void x86_do_profile (unsigned long eip)
-{
- if (!prof_buffer)
- return;
-
- /*
- * Only measure the CPUs specified by /proc/irq/prof_cpu_mask.
- * (default is all CPUs.)
- */
- if (!((1<<smp_processor_id()) & prof_cpu_mask))
- return;
-
- eip -= (unsigned long) &_stext;
- eip >>= prof_shift;
- /*
- * Don't ignore out-of-bounds EIP values silently,
- * put them into the last histogram slot, so if
- * present, they will show up as a sharp peak.
- */
- if (eip > prof_len-1)
- eip = prof_len-1;
- atomic_inc((atomic_t *)&prof_buffer[eip]);
-}
-
-static inline void hw_resend_irq(struct hw_interrupt_type *h,
- unsigned int i)
-{}
-
-#endif /* _ASM_HW_IRQ_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/hypervisor.h b/xenolinux-2.4.25-sparse/include/asm-xen/hypervisor.h
deleted file mode 100644
index e20f67e651..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/hypervisor.h
+++ /dev/null
@@ -1,462 +0,0 @@
-/******************************************************************************
- * hypervisor.h
- *
- * Linux-specific hypervisor handling.
- *
- * Copyright (c) 2002, K A Fraser
- */
-
-#ifndef __HYPERVISOR_H__
-#define __HYPERVISOR_H__
-
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-#include <asm/hypervisor-ifs/dom0_ops.h>
-#include <asm/domain_controller.h>
-#include <asm/ptrace.h>
-#include <asm/page.h>
-
-/* arch/xen/kernel/setup.c */
-union start_info_union
-{
- extended_start_info_t start_info;
- char padding[512];
-};
-extern union start_info_union start_info_union;
-#define start_info (start_info_union.start_info)
-
-/* arch/xen/mm/hypervisor.c */
-/*
- * NB. ptr values should be PHYSICAL, not MACHINE. 'vals' should be already
- * be MACHINE addresses.
- */
-
-extern unsigned int mmu_update_queue_idx;
-
-void queue_l1_entry_update(pte_t *ptr, unsigned long val);
-void queue_l2_entry_update(pmd_t *ptr, unsigned long val);
-void queue_pt_switch(unsigned long ptr);
-void queue_tlb_flush(void);
-void queue_invlpg(unsigned long ptr);
-void queue_pgd_pin(unsigned long ptr);
-void queue_pgd_unpin(unsigned long ptr);
-void queue_pte_pin(unsigned long ptr);
-void queue_pte_unpin(unsigned long ptr);
-void queue_set_ldt(unsigned long ptr, unsigned long bytes);
-#define MMU_UPDATE_DEBUG 0
-
-#if MMU_UPDATE_DEBUG > 0
-typedef struct {
- void *ptr;
- unsigned long val, pteval;
- void *ptep;
- int line; char *file;
-} page_update_debug_t;
-extern page_update_debug_t update_debug_queue[];
-#define queue_l1_entry_update(_p,_v) ({ \
- update_debug_queue[mmu_update_queue_idx].ptr = (_p); \
- update_debug_queue[mmu_update_queue_idx].val = (_v); \
- update_debug_queue[mmu_update_queue_idx].line = __LINE__; \
- update_debug_queue[mmu_update_queue_idx].file = __FILE__; \
- queue_l1_entry_update((_p),(_v)); \
-})
-#define queue_l2_entry_update(_p,_v) ({ \
- update_debug_queue[mmu_update_queue_idx].ptr = (_p); \
- update_debug_queue[mmu_update_queue_idx].val = (_v); \
- update_debug_queue[mmu_update_queue_idx].line = __LINE__; \
- update_debug_queue[mmu_update_queue_idx].file = __FILE__; \
- queue_l2_entry_update((_p),(_v)); \
-})
-#endif
-
-#if MMU_UPDATE_DEBUG > 1
-#undef queue_l1_entry_update
-#undef queue_l2_entry_update
-#define queue_l1_entry_update(_p,_v) ({ \
- update_debug_queue[mmu_update_queue_idx].ptr = (_p); \
- update_debug_queue[mmu_update_queue_idx].val = (_v); \
- update_debug_queue[mmu_update_queue_idx].line = __LINE__; \
- update_debug_queue[mmu_update_queue_idx].file = __FILE__; \
- printk("L1 %s %d: %08lx (%08lx -> %08lx)\n", __FILE__, __LINE__, \
- (_p), pte_val(_p), \
- (unsigned long)(_v)); \
- queue_l1_entry_update((_p),(_v)); \
-})
-#define queue_l2_entry_update(_p,_v) ({ \
- update_debug_queue[mmu_update_queue_idx].ptr = (_p); \
- update_debug_queue[mmu_update_queue_idx].val = (_v); \
- update_debug_queue[mmu_update_queue_idx].line = __LINE__; \
- update_debug_queue[mmu_update_queue_idx].file = __FILE__; \
- printk("L2 %s %d: %08lx (%08lx -> %08lx)\n", __FILE__, __LINE__, \
- (_p), pmd_val(_p), \
- (unsigned long)(_v)); \
- queue_l2_entry_update((_p),(_v)); \
-})
-#define queue_pt_switch(_p) ({ \
- printk("PTSWITCH %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_pt_switch(_p); \
-})
-#define queue_tlb_flush() ({ \
- printk("TLB FLUSH %s %d\n", __FILE__, __LINE__); \
- queue_tlb_flush(); \
-})
-#define queue_invlpg(_p) ({ \
- printk("INVLPG %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_invlpg(_p); \
-})
-#define queue_pgd_pin(_p) ({ \
- printk("PGD PIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_pgd_pin(_p); \
-})
-#define queue_pgd_unpin(_p) ({ \
- printk("PGD UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_pgd_unpin(_p); \
-})
-#define queue_pte_pin(_p) ({ \
- printk("PTE PIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_pte_pin(_p); \
-})
-#define queue_pte_unpin(_p) ({ \
- printk("PTE UNPIN %s %d: %08lx\n", __FILE__, __LINE__, (_p)); \
- queue_pte_unpin(_p); \
-})
-#define queue_set_ldt(_p,_l) ({ \
- printk("SETL LDT %s %d: %08lx %d\n", __FILE__, __LINE__, (_p), (_l)); \
- queue_set_ldt((_p), (_l)); \
-})
-#endif
-
-void _flush_page_update_queue(void);
-static inline int flush_page_update_queue(void)
-{
- unsigned int idx = mmu_update_queue_idx;
- if ( idx != 0 ) _flush_page_update_queue();
- return idx;
-}
-#define XEN_flush_page_update_queue() (_flush_page_update_queue())
-void MULTICALL_flush_page_update_queue(void);
-
-
-/*
- * Assembler stubs for hyper-calls.
- */
-
-static inline int HYPERVISOR_set_trap_table(trap_info_t *table)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_trap_table),
- "b" (table) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_mmu_update(mmu_update_t *req, int count)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_mmu_update),
- "b" (req), "c" (count) : "memory" );
-
- if ( unlikely(ret < 0) )
- {
- extern void show_trace(unsigned long *);
- show_trace(NULL);
- panic("Failed mmu update: %p, %d", req, count);
- }
-
- return ret;
-}
-
-static inline int HYPERVISOR_set_gdt(unsigned long *frame_list, int entries)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_gdt),
- "b" (frame_list), "c" (entries) : "memory" );
-
-
- return ret;
-}
-
-static inline int HYPERVISOR_stack_switch(unsigned long ss, unsigned long esp)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_stack_switch),
- "b" (ss), "c" (esp) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_set_callbacks(
- unsigned long event_selector, unsigned long event_address,
- unsigned long failsafe_selector, unsigned long failsafe_address)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_callbacks),
- "b" (event_selector), "c" (event_address),
- "d" (failsafe_selector), "S" (failsafe_address) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_net_io_op(netop_t *op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_net_io_op),
- "b" (op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_fpu_taskswitch(void)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_yield(void)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_sched_op),
- "b" (SCHEDOP_yield) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_block(void)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_sched_op),
- "b" (SCHEDOP_block) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_exit(void)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_sched_op),
- "b" (SCHEDOP_exit) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_stop(unsigned long srec)
-{
- int ret;
- /* NB. On suspend, control software expects a suspend record in %esi. */
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_sched_op),
- "b" (SCHEDOP_stop), "S" (srec) : "memory" );
-
- return ret;
-}
-
-static inline long HYPERVISOR_set_timer_op(u64 timeout)
-{
- int ret;
- unsigned long timeout_hi = (unsigned long)(timeout>>32);
- unsigned long timeout_lo = (unsigned long)timeout;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_timer_op),
- "b" (timeout_hi), "c" (timeout_lo) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_dom0_op(dom0_op_t *dom0_op)
-{
- int ret;
- dom0_op->interface_version = DOM0_INTERFACE_VERSION;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_dom0_op),
- "b" (dom0_op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_network_op(void *network_op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_network_op),
- "b" (network_op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_block_io_op(void *block_io_op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_block_io_op),
- "b" (block_io_op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_set_debugreg(int reg, unsigned long value)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_debugreg),
- "b" (reg), "c" (value) : "memory" );
-
- return ret;
-}
-
-static inline unsigned long HYPERVISOR_get_debugreg(int reg)
-{
- unsigned long ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_get_debugreg),
- "b" (reg) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_update_descriptor(
- unsigned long pa, unsigned long word1, unsigned long word2)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_update_descriptor),
- "b" (pa), "c" (word1), "d" (word2) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_set_fast_trap(int idx)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_set_fast_trap),
- "b" (idx) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_dom_mem_op(void *dom_mem_op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_dom_mem_op),
- "b" (dom_mem_op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_multicall(void *call_list, int nr_calls)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_multicall),
- "b" (call_list), "c" (nr_calls) : "memory" );
-
- return ret;
-}
-
-static inline long HYPERVISOR_kbd_op(unsigned char op, unsigned char val)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_kbd_op),
- "b" (op), "c" (val) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_update_va_mapping(
- unsigned long page_nr, pte_t new_val, unsigned long flags)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_update_va_mapping),
- "b" (page_nr), "c" ((new_val).pte_low), "d" (flags) : "memory" );
-
- if ( unlikely(ret < 0) )
- panic("Failed update VA mapping: %08lx, %08lx, %08lx",
- page_nr, (new_val).pte_low, flags);
-
- return ret;
-}
-
-static inline int HYPERVISOR_event_channel_op(void *op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_event_channel_op),
- "b" (op) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_xen_version(int cmd)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_xen_version),
- "b" (cmd) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_console_io(int cmd, int count, char *str)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_console_io),
- "b" (cmd), "c" (count), "d" (str) : "memory" );
-
- return ret;
-}
-
-static inline int HYPERVISOR_physdev_op(void *physdev_op)
-{
- int ret;
- __asm__ __volatile__ (
- TRAP_INSTR
- : "=a" (ret) : "0" (__HYPERVISOR_physdev_op),
- "b" (physdev_op) : "memory" );
-
- return ret;
-}
-
-#endif /* __HYPERVISOR_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/io.h b/xenolinux-2.4.25-sparse/include/asm-xen/io.h
deleted file mode 100644
index 3d78e20950..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/io.h
+++ /dev/null
@@ -1,430 +0,0 @@
-#ifndef _ASM_IO_H
-#define _ASM_IO_H
-
-#include <linux/config.h>
-
-/*
- * This file contains the definitions for the x86 IO instructions
- * inb/inw/inl/outb/outw/outl and the "string versions" of the same
- * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing"
- * versions of the single-IO instructions (inb_p/inw_p/..).
- *
- * This file is not meant to be obfuscating: it's just complicated
- * to (a) handle it all in a way that makes gcc able to optimize it
- * as well as possible and (b) trying to avoid writing the same thing
- * over and over again with slight variations and possibly making a
- * mistake somewhere.
- */
-
-/*
- * Thanks to James van Artsdalen for a better timing-fix than
- * the two short jumps: using outb's to a nonexistent port seems
- * to guarantee better timings even on fast machines.
- *
- * On the other hand, I'd like to be sure of a non-existent port:
- * I feel a bit unsafe about using 0x80 (should be safe, though)
- *
- * Linus
- */
-
- /*
- * Bit simplified and optimized by Jan Hubicka
- * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999.
- *
- * isa_memset_io, isa_memcpy_fromio, isa_memcpy_toio added,
- * isa_read[wl] and isa_write[wl] fixed
- * - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
- */
-
-#define IO_SPACE_LIMIT 0xffff
-
-#define XQUAD_PORTIO_BASE 0xfe400000
-#define XQUAD_PORTIO_QUAD 0x40000 /* 256k per quad. */
-#define XQUAD_PORTIO_LEN 0x80000 /* Only remapping first 2 quads */
-
-#ifdef __KERNEL__
-
-#include <linux/vmalloc.h>
-
-/*
- * Temporary debugging check to catch old code using
- * unmapped ISA addresses. Will be removed in 2.4.
- */
-#if CONFIG_DEBUG_IOVIRT
- extern void *__io_virt_debug(unsigned long x, const char *file, int line);
- extern unsigned long __io_phys_debug(unsigned long x, const char *file, int line);
- #define __io_virt(x) __io_virt_debug((unsigned long)(x), __FILE__, __LINE__)
-//#define __io_phys(x) __io_phys_debug((unsigned long)(x), __FILE__, __LINE__)
-#else
- #define __io_virt(x) ((void *)(x))
-//#define __io_phys(x) __pa(x)
-#endif
-
-/**
- * virt_to_phys - map virtual addresses to physical
- * @address: address to remap
- *
- * The returned physical address is the physical (CPU) mapping for
- * the memory address given. It is only valid to use this function on
- * addresses directly mapped or allocated via kmalloc.
- *
- * This function does not give bus mappings for DMA transfers. In
- * almost all conceivable cases a device driver should not be using
- * this function
- */
-
-static inline unsigned long virt_to_phys(volatile void * address)
-{
- return __pa(address);
-}
-
-/**
- * phys_to_virt - map physical address to virtual
- * @address: address to remap
- *
- * The returned virtual address is a current CPU mapping for
- * the memory address given. It is only valid to use this function on
- * addresses that have a kernel mapping
- *
- * This function does not handle bus mappings for DMA transfers. In
- * almost all conceivable cases a device driver should not be using
- * this function
- */
-
-static inline void * phys_to_virt(unsigned long address)
-{
- return __va(address);
-}
-
-/*
- * Change "struct page" to physical address.
- */
-#ifdef CONFIG_HIGHMEM64G
-#define page_to_phys(page) ((u64)(page - mem_map) << PAGE_SHIFT)
-#else
-#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
-#endif
-
-extern void * __ioremap(unsigned long offset, unsigned long size, unsigned long flags);
-
-/**
- * ioremap - map bus memory into CPU space
- * @offset: bus address of the memory
- * @size: size of the resource to map
- *
- * ioremap performs a platform specific sequence of operations to
- * make bus memory CPU accessible via the readb/readw/readl/writeb/
- * writew/writel functions and the other mmio helpers. The returned
- * address is not guaranteed to be usable directly as a virtual
- * address.
- */
-
-static inline void * ioremap (unsigned long offset, unsigned long size)
-{
- return __ioremap(offset, size, 0);
-}
-
-/**
- * ioremap_nocache - map bus memory into CPU space
- * @offset: bus address of the memory
- * @size: size of the resource to map
- *
- * ioremap_nocache performs a platform specific sequence of operations to
- * make bus memory CPU accessible via the readb/readw/readl/writeb/
- * writew/writel functions and the other mmio helpers. The returned
- * address is not guaranteed to be usable directly as a virtual
- * address.
- *
- * This version of ioremap ensures that the memory is marked uncachable
- * on the CPU as well as honouring existing caching rules from things like
- * the PCI bus. Note that there are other caches and buffers on many
- * busses. In paticular driver authors should read up on PCI writes
- *
- * It's useful if some control registers are in such an area and
- * write combining or read caching is not desirable:
- */
-
-static inline void * ioremap_nocache (unsigned long offset, unsigned long size)
-{
- return __ioremap(offset, size, _PAGE_PCD);
-}
-
-extern void iounmap(void *addr);
-
-/*
- * bt_ioremap() and bt_iounmap() are for temporary early boot-time
- * mappings, before the real ioremap() is functional.
- * A boot-time mapping is currently limited to at most 16 pages.
- */
-extern void *bt_ioremap(unsigned long offset, unsigned long size);
-extern void bt_iounmap(void *addr, unsigned long size);
-
-/*
- * IO bus memory addresses are also 1:1 with the physical address
- */
-#define virt_to_bus(_x) phys_to_machine(virt_to_phys(_x))
-#define bus_to_virt(_x) phys_to_virt(machine_to_phys(_x))
-#define page_to_bus(_x) phys_to_machine(page_to_phys(_x))
-
-/*
- * readX/writeX() are used to access memory mapped devices. On some
- * architectures the memory mapped IO stuff needs to be accessed
- * differently. On the x86 architecture, we just read/write the
- * memory location directly.
- */
-
-#define readb(addr) (*(volatile unsigned char *) __io_virt(addr))
-#define readw(addr) (*(volatile unsigned short *) __io_virt(addr))
-#define readl(addr) (*(volatile unsigned int *) __io_virt(addr))
-#define __raw_readb readb
-#define __raw_readw readw
-#define __raw_readl readl
-
-#define writeb(b,addr) (*(volatile unsigned char *) __io_virt(addr) = (b))
-#define writew(b,addr) (*(volatile unsigned short *) __io_virt(addr) = (b))
-#define writel(b,addr) (*(volatile unsigned int *) __io_virt(addr) = (b))
-#define __raw_writeb writeb
-#define __raw_writew writew
-#define __raw_writel writel
-
-#define memset_io(a,b,c) __memset(__io_virt(a),(b),(c))
-#define memcpy_fromio(a,b,c) __memcpy((a),__io_virt(b),(c))
-#define memcpy_toio(a,b,c) __memcpy(__io_virt(a),(b),(c))
-
-/*
- * ISA space is 'always mapped' on a typical x86 system, no need to
- * explicitly ioremap() it. The fact that the ISA IO space is mapped
- * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
- * are physical addresses. The following constant pointer can be
- * used as the IO-area pointer (it can be iounmapped as well, so the
- * analogy with PCI is quite large):
- */
-#define __ISA_IO_base ((char *)(PAGE_OFFSET))
-
-#define isa_readb(a) readb(__ISA_IO_base + (a))
-#define isa_readw(a) readw(__ISA_IO_base + (a))
-#define isa_readl(a) readl(__ISA_IO_base + (a))
-#define isa_writeb(b,a) writeb(b,__ISA_IO_base + (a))
-#define isa_writew(w,a) writew(w,__ISA_IO_base + (a))
-#define isa_writel(l,a) writel(l,__ISA_IO_base + (a))
-#define isa_memset_io(a,b,c) memset_io(__ISA_IO_base + (a),(b),(c))
-#define isa_memcpy_fromio(a,b,c) memcpy_fromio((a),__ISA_IO_base + (b),(c))
-#define isa_memcpy_toio(a,b,c) memcpy_toio(__ISA_IO_base + (a),(b),(c))
-
-
-/*
- * Again, i386 does not require mem IO specific function.
- */
-
-#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(b),(c),(d))
-#define isa_eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),__io_virt(__ISA_IO_base + (b)),(c),(d))
-
-/**
- * check_signature - find BIOS signatures
- * @io_addr: mmio address to check
- * @signature: signature block
- * @length: length of signature
- *
- * Perform a signature comparison with the mmio address io_addr. This
- * address should have been obtained by ioremap.
- * Returns 1 on a match.
- */
-
-static inline int check_signature(unsigned long io_addr,
- const unsigned char *signature, int length)
-{
- int retval = 0;
- do {
- if (readb(io_addr) != *signature)
- goto out;
- io_addr++;
- signature++;
- length--;
- } while (length);
- retval = 1;
-out:
- return retval;
-}
-
-/**
- * isa_check_signature - find BIOS signatures
- * @io_addr: mmio address to check
- * @signature: signature block
- * @length: length of signature
- *
- * Perform a signature comparison with the ISA mmio address io_addr.
- * Returns 1 on a match.
- *
- * This function is deprecated. New drivers should use ioremap and
- * check_signature.
- */
-
-
-static inline int isa_check_signature(unsigned long io_addr,
- const unsigned char *signature, int length)
-{
- int retval = 0;
- do {
- if (isa_readb(io_addr) != *signature)
- goto out;
- io_addr++;
- signature++;
- length--;
- } while (length);
- retval = 1;
-out:
- return retval;
-}
-
-/*
- * Cache management
- *
- * This needed for two cases
- * 1. Out of order aware processors
- * 2. Accidentally out of order processors (PPro errata #51)
- */
-
-#if defined(CONFIG_X86_OOSTORE) || defined(CONFIG_X86_PPRO_FENCE)
-
-static inline void flush_write_buffers(void)
-{
- __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory");
-}
-
-#define dma_cache_inv(_start,_size) flush_write_buffers()
-#define dma_cache_wback(_start,_size) flush_write_buffers()
-#define dma_cache_wback_inv(_start,_size) flush_write_buffers()
-
-#else
-
-/* Nothing to do */
-
-#define dma_cache_inv(_start,_size) do { } while (0)
-#define dma_cache_wback(_start,_size) do { } while (0)
-#define dma_cache_wback_inv(_start,_size) do { } while (0)
-#define flush_write_buffers()
-
-#endif
-
-#endif /* __KERNEL__ */
-
-#ifdef SLOW_IO_BY_JUMPING
-#define __SLOW_DOWN_IO "\njmp 1f\n1:\tjmp 1f\n1:"
-#else
-#define __SLOW_DOWN_IO "\noutb %%al,$0x80"
-#endif
-
-#ifdef REALLY_SLOW_IO
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO __SLOW_DOWN_IO
-#else
-#define __FULL_SLOW_DOWN_IO __SLOW_DOWN_IO
-#endif
-
-#ifdef CONFIG_MULTIQUAD
-extern void *xquad_portio; /* Where the IO area was mapped */
-#endif /* CONFIG_MULTIQUAD */
-
-/*
- * Talk about misusing macros..
- */
-#define __OUT1(s,x) \
-static inline void out##s(unsigned x value, unsigned short port) {
-
-#define __OUT2(s,s1,s2) \
-__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1"
-
-#if defined (CONFIG_MULTIQUAD) && !defined(STANDALONE)
-#define __OUTQ(s,ss,x) /* Do the equivalent of the portio op on quads */ \
-static inline void out##ss(unsigned x value, unsigned short port) { \
- if (xquad_portio) \
- write##s(value, (unsigned long) xquad_portio + port); \
- else /* We're still in early boot, running on quad 0 */ \
- out##ss##_local(value, port); \
-} \
-static inline void out##ss##_quad(unsigned x value, unsigned short port, int quad) { \
- if (xquad_portio) \
- write##s(value, (unsigned long) xquad_portio + (XQUAD_PORTIO_QUAD*quad)\
- + port); \
-}
-
-#define __INQ(s,ss) /* Do the equivalent of the portio op on quads */ \
-static inline RETURN_TYPE in##ss(unsigned short port) { \
- if (xquad_portio) \
- return read##s((unsigned long) xquad_portio + port); \
- else /* We're still in early boot, running on quad 0 */ \
- return in##ss##_local(port); \
-} \
-static inline RETURN_TYPE in##ss##_quad(unsigned short port, int quad) { \
- if (xquad_portio) \
- return read##s((unsigned long) xquad_portio + (XQUAD_PORTIO_QUAD*quad)\
- + port); \
- else\
- return 0;\
-}
-#endif /* CONFIG_MULTIQUAD && !STANDALONE */
-
-#if !defined(CONFIG_MULTIQUAD) || defined(STANDALONE)
-#define __OUT(s,s1,x) \
-__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
-__OUT1(s##_p,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));}
-#else
-/* Make the default portio routines operate on quad 0 */
-#define __OUT(s,s1,x) \
-__OUT1(s##_local,x) __OUT2(s,s1,"w") : : "a" (value), "Nd" (port)); } \
-__OUT1(s##_p_local,x) __OUT2(s,s1,"w") __FULL_SLOW_DOWN_IO : : "a" (value), "Nd" (port));} \
-__OUTQ(s,s,x) \
-__OUTQ(s,s##_p,x)
-#endif /* !CONFIG_MULTIQUAD || STANDALONE */
-
-#define __IN1(s) \
-static inline RETURN_TYPE in##s(unsigned short port) { RETURN_TYPE _v;
-
-#define __IN2(s,s1,s2) \
-__asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0"
-
-#if !defined(CONFIG_MULTIQUAD) || defined(STANDALONE)
-#define __IN(s,s1,i...) \
-__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__IN1(s##_p) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; }
-#else
-/* Make the default portio routines operate on quad 0 */
-#define __IN(s,s1,i...) \
-__IN1(s##_local) __IN2(s,s1,"w") : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__IN1(s##_p_local) __IN2(s,s1,"w") __FULL_SLOW_DOWN_IO : "=a" (_v) : "Nd" (port) ,##i ); return _v; } \
-__INQ(s,s) \
-__INQ(s,s##_p)
-#endif /* !CONFIG_MULTIQUAD || STANDALONE */
-
-#define __INS(s) \
-static inline void ins##s(unsigned short port, void * addr, unsigned long count) \
-{ __asm__ __volatile__ ("rep ; ins" #s \
-: "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
-
-#define __OUTS(s) \
-static inline void outs##s(unsigned short port, const void * addr, unsigned long count) \
-{ __asm__ __volatile__ ("rep ; outs" #s \
-: "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
-
-#define RETURN_TYPE unsigned char
-__IN(b,"")
-#undef RETURN_TYPE
-#define RETURN_TYPE unsigned short
-__IN(w,"")
-#undef RETURN_TYPE
-#define RETURN_TYPE unsigned int
-__IN(l,"")
-#undef RETURN_TYPE
-
-__OUT(b,"b",char)
-__OUT(w,"w",short)
-__OUT(l,,int)
-
-__INS(b)
-__INS(w)
-__INS(l)
-
-__OUTS(b)
-__OUTS(w)
-__OUTS(l)
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/irq.h b/xenolinux-2.4.25-sparse/include/asm-xen/irq.h
deleted file mode 100644
index 668195e9ca..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/irq.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef _ASM_IRQ_H
-#define _ASM_IRQ_H
-
-/*
- * linux/include/asm/irq.h
- *
- * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
- *
- * IRQ/IPI changes taken from work by Thomas Radke
- * <tomsoft@informatik.tu-chemnitz.de>
- */
-
-#include <linux/config.h>
-#include <asm/hypervisor.h>
-#include <asm/ptrace.h>
-
-/*
- * The flat IRQ space is divided into two regions:
- * 1. A one-to-one mapping of real physical IRQs. This space is only used
- * if we have physical device-access privilege. This region is at the
- * start of the IRQ space so that existing device drivers do not need
- * to be modified to translate physical IRQ numbers into our IRQ space.
- * 3. A dynamic mapping of inter-domain and Xen-sourced virtual IRQs. These
- * are bound using the provided bind/unbind functions.
- */
-
-#define PIRQ_BASE 0
-#define NR_PIRQS 128
-
-#define DYNIRQ_BASE (PIRQ_BASE + NR_PIRQS)
-#define NR_DYNIRQS 128
-
-#define NR_IRQS (NR_PIRQS + NR_DYNIRQS)
-
-#define pirq_to_irq(_x) ((_x) + PIRQ_BASE)
-#define irq_to_pirq(_x) ((_x) - PIRQ_BASE)
-
-#define dynirq_to_irq(_x) ((_x) + DYNIRQ_BASE)
-#define irq_to_dynirq(_x) ((_x) - DYNIRQ_BASE)
-
-/* Dynamic binding of event channels and VIRQ sources to Linux IRQ space. */
-extern int bind_virq_to_irq(int virq);
-extern void unbind_virq_from_irq(int virq);
-extern int bind_evtchn_to_irq(int evtchn);
-extern void unbind_evtchn_from_irq(int evtchn);
-
-static __inline__ int irq_cannonicalize(int irq)
-{
- return (irq == 2) ? 9 : irq;
-}
-
-extern void disable_irq(unsigned int);
-extern void disable_irq_nosync(unsigned int);
-extern void enable_irq(unsigned int);
-
-extern void irq_suspend(void);
-extern void irq_resume(void);
-
-#endif /* _ASM_IRQ_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/keyboard.h b/xenolinux-2.4.25-sparse/include/asm-xen/keyboard.h
deleted file mode 100644
index 9066a3bada..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/keyboard.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Portions copyright (c) 2003 James Scott, Intel Research Cambridge */
-/*
- * Talks to hypervisor to get PS/2 keyboard and mouse events, and send keyboard
- * and mouse commands
- */
-
-/* Based on:
- * linux/include/asm-i386/keyboard.h
- *
- * Created 3 Nov 1996 by Geert Uytterhoeven
- */
-
-#ifndef _XEN_KEYBOARD_H
-#define _XEN_KEYBOARD_H
-
-#ifdef __KERNEL__
-
-#include <linux/kernel.h>
-#include <linux/ioport.h>
-#include <linux/kd.h>
-#include <linux/pm.h>
-#include <asm/io.h>
-
-extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode);
-extern int pckbd_getkeycode(unsigned int scancode);
-extern int pckbd_translate(unsigned char scancode, unsigned char *keycode,
- char raw_mode);
-extern char pckbd_unexpected_up(unsigned char keycode);
-extern void pckbd_leds(unsigned char leds);
-extern void pckbd_init_hw(void);
-extern int pckbd_pm_resume(struct pm_dev *, pm_request_t, void *);
-
-extern pm_callback pm_kbd_request_override;
-extern unsigned char pckbd_sysrq_xlate[128];
-
-#define kbd_setkeycode pckbd_setkeycode
-#define kbd_getkeycode pckbd_getkeycode
-#define kbd_translate pckbd_translate
-#define kbd_unexpected_up pckbd_unexpected_up
-#define kbd_leds pckbd_leds
-#define kbd_init_hw pckbd_init_hw
-#define kbd_sysrq_xlate pckbd_sysrq_xlate
-
-#define SYSRQ_KEY 0x54
-
-
-/* THIS SECTION TALKS TO XEN TO DO PS2 SUPPORT */
-#include <asm/hypervisor-ifs/kbd.h>
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-
-#define kbd_controller_present xen_kbd_controller_present
-
-static inline int xen_kbd_controller_present ()
-{
- return start_info.flags & SIF_INITDOMAIN;
-}
-
-/* resource allocation */
-#define kbd_request_region() \
- do { } while (0)
-#define kbd_request_irq(handler) \
- do { \
- int irq = bind_virq_to_irq(VIRQ_PS2); \
- request_irq(irq, handler, 0, "ps/2", NULL); \
- } while ( 0 )
-
-/* could implement these with command to xen to filter mouse stuff... */
-#define aux_request_irq(hand, dev_id) 0
-#define aux_free_irq(dev_id) do { } while(0)
-
-/* Some stoneage hardware needs delays after some operations. */
-#define kbd_pause() do { } while(0)
-
-static unsigned char kbd_current_scancode = 0;
-
-static unsigned char kbd_read_input(void)
-{
- return kbd_current_scancode;
-}
-
-static unsigned char kbd_read_status(void)
-{
- long res;
- res = HYPERVISOR_kbd_op(KBD_OP_READ,0);
- if ( res<0 )
- {
- kbd_current_scancode = 0;
- return 0; /* error with our request - wrong domain? */
- }
- kbd_current_scancode = KBD_CODE_SCANCODE(res);
- return KBD_CODE_STATUS(res);
-}
-
-
-#define kbd_write_output(val) HYPERVISOR_kbd_op(KBD_OP_WRITEOUTPUT, val);
-#define kbd_write_command(val) HYPERVISOR_kbd_op(KBD_OP_WRITECOMMAND, val);
-
-
-#endif /* __KERNEL__ */
-#endif /* _XEN_KEYBOARD_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/mmu_context.h b/xenolinux-2.4.25-sparse/include/asm-xen/mmu_context.h
deleted file mode 100644
index 7972ce7d74..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/mmu_context.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef __I386_MMU_CONTEXT_H
-#define __I386_MMU_CONTEXT_H
-
-#include <linux/config.h>
-#include <asm/desc.h>
-#include <asm/atomic.h>
-#include <asm/pgalloc.h>
-
-/*
- * hooks to add arch specific data into the mm struct.
- * Note that destroy_context is called even if init_new_context
- * fails.
- */
-int init_new_context(struct task_struct *tsk, struct mm_struct *mm);
-void destroy_context(struct mm_struct *mm);
-
-#ifdef CONFIG_SMP
-
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk, unsigned cpu)
-{
- if(cpu_tlbstate[cpu].state == TLBSTATE_OK)
- cpu_tlbstate[cpu].state = TLBSTATE_LAZY;
-}
-#else
-static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk, unsigned cpu)
-{
-}
-#endif
-
-extern pgd_t *cur_pgd;
-
-static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk, unsigned cpu)
-{
- if (prev != next) {
- /* stop flush ipis for the previous mm */
- clear_bit(cpu, &prev->cpu_vm_mask);
-#ifdef CONFIG_SMP
- cpu_tlbstate[cpu].state = TLBSTATE_OK;
- cpu_tlbstate[cpu].active_mm = next;
-#endif
-
- /* Re-load page tables */
- cur_pgd = next->pgd;
- queue_pt_switch(__pa(cur_pgd));
- /* load_LDT, if either the previous or next thread
- * has a non-default LDT.
- */
- if (next->context.size+prev->context.size)
- load_LDT(&next->context);
- }
-#ifdef CONFIG_SMP
- else {
- cpu_tlbstate[cpu].state = TLBSTATE_OK;
- if(cpu_tlbstate[cpu].active_mm != next)
- out_of_line_bug();
- if(!test_and_set_bit(cpu, &next->cpu_vm_mask)) {
- /* We were in lazy tlb mode and leave_mm disabled
- * tlb flush IPI delivery. We must reload %cr3.
- */
- cur_pgd = next->pgd;
- queue_pt_switch(__pa(cur_pgd));
- load_LDT(next);
- }
- }
-#endif
-}
-
-#define activate_mm(prev, next) \
-do { \
- switch_mm((prev),(next),NULL,smp_processor_id()); \
- flush_page_update_queue(); \
-} while ( 0 )
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/msr.h b/xenolinux-2.4.25-sparse/include/asm-xen/msr.h
deleted file mode 100644
index 1a2c8765a8..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/msr.h
+++ /dev/null
@@ -1,138 +0,0 @@
-#ifndef __ASM_MSR_H
-#define __ASM_MSR_H
-
-/*
- * Access to machine-specific registers (available on 586 and better only)
- * Note: the rd* operations modify the parameters directly (without using
- * pointer indirection), this allows gcc to optimize better
- */
-
-#define rdmsr(msr,val1,val2) \
-{ \
- dom0_op_t op; \
- op.cmd = DOM0_MSR; \
- op.u.msr.write = 0; \
- op.u.msr.msr = msr; \
- op.u.msr.cpu_mask = (1 << current->processor); \
- HYPERVISOR_dom0_op(&op); \
- val1 = op.u.msr.out1; \
- val2 = op.u.msr.out2; \
-}
-
-#define wrmsr(msr,val1,val2) \
-{ \
- dom0_op_t op; \
- op.cmd = DOM0_MSR; \
- op.u.msr.write = 1; \
- op.u.msr.cpu_mask = (1 << current->processor); \
- op.u.msr.msr = msr; \
- op.u.msr.in1 = val1; \
- op.u.msr.in2 = val2; \
- HYPERVISOR_dom0_op(&op); \
-}
-
-#define rdtsc(low,high) \
- __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
-
-#define rdtscl(low) \
- __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx")
-
-#define rdtscll(val) \
- __asm__ __volatile__("rdtsc" : "=A" (val))
-
-#define write_tsc(val1,val2) wrmsr(0x10, val1, val2)
-
-#define rdpmc(counter,low,high) \
- __asm__ __volatile__("rdpmc" \
- : "=a" (low), "=d" (high) \
- : "c" (counter))
-
-/* symbolic names for some interesting MSRs */
-/* Intel defined MSRs. */
-#define MSR_IA32_P5_MC_ADDR 0
-#define MSR_IA32_P5_MC_TYPE 1
-#define MSR_IA32_PLATFORM_ID 0x17
-#define MSR_IA32_EBL_CR_POWERON 0x2a
-
-#define MSR_IA32_APICBASE 0x1b
-#define MSR_IA32_APICBASE_BSP (1<<8)
-#define MSR_IA32_APICBASE_ENABLE (1<<11)
-#define MSR_IA32_APICBASE_BASE (0xfffff<<12)
-
-#define MSR_IA32_UCODE_WRITE 0x79
-#define MSR_IA32_UCODE_REV 0x8b
-
-#define MSR_IA32_BBL_CR_CTL 0x119
-
-#define MSR_IA32_MCG_CAP 0x179
-#define MSR_IA32_MCG_STATUS 0x17a
-#define MSR_IA32_MCG_CTL 0x17b
-
-#define MSR_IA32_THERM_CONTROL 0x19a
-#define MSR_IA32_THERM_INTERRUPT 0x19b
-#define MSR_IA32_THERM_STATUS 0x19c
-#define MSR_IA32_MISC_ENABLE 0x1a0
-
-#define MSR_IA32_DEBUGCTLMSR 0x1d9
-#define MSR_IA32_LASTBRANCHFROMIP 0x1db
-#define MSR_IA32_LASTBRANCHTOIP 0x1dc
-#define MSR_IA32_LASTINTFROMIP 0x1dd
-#define MSR_IA32_LASTINTTOIP 0x1de
-
-#define MSR_IA32_MC0_CTL 0x400
-#define MSR_IA32_MC0_STATUS 0x401
-#define MSR_IA32_MC0_ADDR 0x402
-#define MSR_IA32_MC0_MISC 0x403
-
-#define MSR_P6_PERFCTR0 0xc1
-#define MSR_P6_PERFCTR1 0xc2
-#define MSR_P6_EVNTSEL0 0x186
-#define MSR_P6_EVNTSEL1 0x187
-
-#define MSR_IA32_PERF_STATUS 0x198
-#define MSR_IA32_PERF_CTL 0x199
-
-/* AMD Defined MSRs */
-#define MSR_K6_EFER 0xC0000080
-#define MSR_K6_STAR 0xC0000081
-#define MSR_K6_WHCR 0xC0000082
-#define MSR_K6_UWCCR 0xC0000085
-#define MSR_K6_EPMR 0xC0000086
-#define MSR_K6_PSOR 0xC0000087
-#define MSR_K6_PFIR 0xC0000088
-
-#define MSR_K7_EVNTSEL0 0xC0010000
-#define MSR_K7_PERFCTR0 0xC0010004
-#define MSR_K7_HWCR 0xC0010015
-#define MSR_K7_CLK_CTL 0xC001001b
-#define MSR_K7_FID_VID_CTL 0xC0010041
-#define MSR_K7_VID_STATUS 0xC0010042
-
-/* Centaur-Hauls/IDT defined MSRs. */
-#define MSR_IDT_FCR1 0x107
-#define MSR_IDT_FCR2 0x108
-#define MSR_IDT_FCR3 0x109
-#define MSR_IDT_FCR4 0x10a
-
-#define MSR_IDT_MCR0 0x110
-#define MSR_IDT_MCR1 0x111
-#define MSR_IDT_MCR2 0x112
-#define MSR_IDT_MCR3 0x113
-#define MSR_IDT_MCR4 0x114
-#define MSR_IDT_MCR5 0x115
-#define MSR_IDT_MCR6 0x116
-#define MSR_IDT_MCR7 0x117
-#define MSR_IDT_MCR_CTRL 0x120
-
-/* VIA Cyrix defined MSRs*/
-#define MSR_VIA_FCR 0x1107
-#define MSR_VIA_LONGHAUL 0x110a
-#define MSR_VIA_BCR2 0x1147
-
-/* Transmeta defined MSRs */
-#define MSR_TMTA_LONGRUN_CTRL 0x80868010
-#define MSR_TMTA_LONGRUN_FLAGS 0x80868011
-#define MSR_TMTA_LRTI_READOUT 0x80868018
-#define MSR_TMTA_LRTI_VOLT_MHZ 0x8086801a
-
-#endif /* __ASM_MSR_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/multicall.h b/xenolinux-2.4.25-sparse/include/asm-xen/multicall.h
deleted file mode 100644
index f0ea5c3a66..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/multicall.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- * multicall.h
- */
-
-#ifndef __MULTICALL_H__
-#define __MULTICALL_H__
-
-#include <asm/hypervisor.h>
-
-extern multicall_entry_t multicall_list[];
-extern int nr_multicall_ents;
-
-static inline void queue_multicall0(unsigned long op)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- nr_multicall_ents = i+1;
-}
-
-static inline void queue_multicall1(unsigned long op, unsigned long arg1)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- multicall_list[i].args[0] = arg1;
- nr_multicall_ents = i+1;
-}
-
-static inline void queue_multicall2(
- unsigned long op, unsigned long arg1, unsigned long arg2)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- multicall_list[i].args[0] = arg1;
- multicall_list[i].args[1] = arg2;
- nr_multicall_ents = i+1;
-}
-
-static inline void queue_multicall3(
- unsigned long op, unsigned long arg1, unsigned long arg2,
- unsigned long arg3)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- multicall_list[i].args[0] = arg1;
- multicall_list[i].args[1] = arg2;
- multicall_list[i].args[2] = arg3;
- nr_multicall_ents = i+1;
-}
-
-static inline void queue_multicall4(
- unsigned long op, unsigned long arg1, unsigned long arg2,
- unsigned long arg3, unsigned long arg4)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- multicall_list[i].args[0] = arg1;
- multicall_list[i].args[1] = arg2;
- multicall_list[i].args[2] = arg3;
- multicall_list[i].args[3] = arg4;
- nr_multicall_ents = i+1;
-}
-
-static inline void queue_multicall5(
- unsigned long op, unsigned long arg1, unsigned long arg2,
- unsigned long arg3, unsigned long arg4, unsigned long arg5)
-{
- int i = nr_multicall_ents;
- multicall_list[i].op = op;
- multicall_list[i].args[0] = arg1;
- multicall_list[i].args[1] = arg2;
- multicall_list[i].args[2] = arg3;
- multicall_list[i].args[3] = arg4;
- multicall_list[i].args[4] = arg5;
- nr_multicall_ents = i+1;
-}
-
-static inline void execute_multicall_list(void)
-{
- if ( unlikely(nr_multicall_ents == 0) ) return;
- (void)HYPERVISOR_multicall(multicall_list, nr_multicall_ents);
- nr_multicall_ents = 0;
-}
-
-#endif /* __MULTICALL_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/page.h b/xenolinux-2.4.25-sparse/include/asm-xen/page.h
deleted file mode 100644
index b7640a7d78..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/page.h
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef _I386_PAGE_H
-#define _I386_PAGE_H
-
-/* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT 12
-#define PAGE_SIZE (1UL << PAGE_SHIFT)
-#define PAGE_MASK (~(PAGE_SIZE-1))
-
-#ifdef __KERNEL__
-#ifndef __ASSEMBLY__
-
-#include <linux/config.h>
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-
-#ifdef CONFIG_X86_USE_3DNOW
-
-#include <asm/mmx.h>
-
-#define clear_page(page) mmx_clear_page((void *)(page))
-#define copy_page(to,from) mmx_copy_page(to,from)
-
-#else
-
-/*
- * On older X86 processors its not a win to use MMX here it seems.
- * Maybe the K6-III ?
- */
-
-#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
-#define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE)
-
-#endif
-
-#define clear_user_page(page, vaddr) clear_page(page)
-#define copy_user_page(to, from, vaddr) copy_page(to, from)
-
-/**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/
-extern unsigned long *phys_to_machine_mapping;
-#define pfn_to_mfn(_pfn) (phys_to_machine_mapping[(_pfn)])
-#define mfn_to_pfn(_mfn) (machine_to_phys_mapping[(_mfn)])
-static inline unsigned long phys_to_machine(unsigned long phys)
-{
- unsigned long machine = pfn_to_mfn(phys >> PAGE_SHIFT);
- machine = (machine << PAGE_SHIFT) | (phys & ~PAGE_MASK);
- return machine;
-}
-static inline unsigned long machine_to_phys(unsigned long machine)
-{
- unsigned long phys = mfn_to_pfn(machine >> PAGE_SHIFT);
- phys = (phys << PAGE_SHIFT) | (machine & ~PAGE_MASK);
- return phys;
-}
-
-/*
- * These are used to make use of C type-checking..
- */
-#if CONFIG_X86_PAE
-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;
-#define pte_val(x) ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
-#else
-typedef struct { unsigned long pte_low; } pte_t;
-typedef struct { unsigned long pmd; } pmd_t;
-typedef struct { unsigned long pgd; } pgd_t;
-static inline unsigned long pte_val(pte_t x)
-{
- unsigned long ret = x.pte_low;
- if ( (ret & 1) ) ret = machine_to_phys(ret);
- return ret;
-}
-#endif
-#define PTE_MASK PAGE_MASK
-
-typedef struct { unsigned long pgprot; } pgprot_t;
-
-static inline unsigned long pmd_val(pmd_t x)
-{
- unsigned long ret = x.pmd;
- if ( (ret & 1) ) ret = machine_to_phys(ret);
- return ret;
-}
-#define pgd_val(x) ({ BUG(); (unsigned long)0; })
-#define pgprot_val(x) ((x).pgprot)
-
-static inline pte_t __pte(unsigned long x)
-{
- if ( (x & 1) ) x = phys_to_machine(x);
- return ((pte_t) { (x) });
-}
-static inline pmd_t __pmd(unsigned long x)
-{
- if ( (x & 1) ) x = phys_to_machine(x);
- return ((pmd_t) { (x) });
-}
-#define __pgd(x) ({ BUG(); (pgprot_t) { 0 }; })
-#define __pgprot(x) ((pgprot_t) { (x) } )
-
-#endif /* !__ASSEMBLY__ */
-
-/* to align the pointer to the (next) page boundary */
-#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
-
-/*
- * This handles the memory map.. We could make this a config
- * option, but too many people screw it up, and too few need
- * it.
- *
- * A __PAGE_OFFSET of 0xC0000000 means that the kernel has
- * a virtual address space of one gigabyte, which limits the
- * amount of physical memory you can use to about 950MB.
- *
- * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
- * and CONFIG_HIGHMEM64G options in the kernel configuration.
- */
-
-#define __PAGE_OFFSET (0xC0000000)
-
-#ifndef __ASSEMBLY__
-
-/*
- * Tell the user there is some problem. Beep too, so we can
- * see^H^H^Hhear bugs in early bootup as well!
- * The offending file and line are encoded after the "officially
- * undefined" opcode for parsing in the trap handler.
- */
-
-#if 1 /* Set to zero for a slightly smaller kernel */
-#define BUG() \
- __asm__ __volatile__( "ud2\n" \
- "\t.word %c0\n" \
- "\t.long %c1\n" \
- : : "i" (__LINE__), "i" (__FILE__))
-#else
-#define BUG() __asm__ __volatile__("ud2\n")
-#endif
-
-#define PAGE_BUG(page) do { \
- BUG(); \
-} while (0)
-
-/* Pure 2^n version of get_order */
-static __inline__ int get_order(unsigned long size)
-{
- int order;
-
- size = (size-1) >> (PAGE_SHIFT-1);
- order = -1;
- do {
- size >>= 1;
- order++;
- } while (size);
- return order;
-}
-
-#endif /* __ASSEMBLY__ */
-
-#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
-#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
-#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
-#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT))
-#define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
-
-#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
- VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
-
-/* VIRT <-> MACHINE conversion */
-#define virt_to_machine(_a) (phys_to_machine(__pa(_a)))
-#define machine_to_virt(_m) (__va(machine_to_phys(_m)))
-
-#endif /* __KERNEL__ */
-
-#endif /* _I386_PAGE_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/pgalloc.h b/xenolinux-2.4.25-sparse/include/asm-xen/pgalloc.h
deleted file mode 100644
index 308a1b7c40..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/pgalloc.h
+++ /dev/null
@@ -1,274 +0,0 @@
-#ifndef _I386_PGALLOC_H
-#define _I386_PGALLOC_H
-
-#include <linux/config.h>
-#include <asm/processor.h>
-#include <asm/fixmap.h>
-#include <asm/hypervisor.h>
-#include <linux/threads.h>
-
-/*
- * Quick lists are aligned so that least significant bits of array pointer
- * are all zero when list is empty, and all one when list is full.
- */
-#define QUICKLIST_ENTRIES 256
-#define QUICKLIST_EMPTY(_l) !((unsigned long)(_l) & ((QUICKLIST_ENTRIES*4)-1))
-#define QUICKLIST_FULL(_l) QUICKLIST_EMPTY((_l)+1)
-#define pgd_quicklist (current_cpu_data.pgd_quick)
-#define pmd_quicklist (current_cpu_data.pmd_quick)
-#define pte_quicklist (current_cpu_data.pte_quick)
-#define pgtable_cache_size (current_cpu_data.pgtable_cache_sz)
-
-#define pmd_populate(mm, pmd, pte) \
- do { \
- set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))); \
- XEN_flush_page_update_queue(); \
- } while ( 0 )
-
-/*
- * Allocate and free page tables.
- */
-
-#if defined (CONFIG_X86_PAE)
-
-#error "no PAE support as yet"
-
-/*
- * We can't include <linux/slab.h> here, thus these uglinesses.
- */
-struct kmem_cache_s;
-
-extern struct kmem_cache_s *pae_pgd_cachep;
-extern void *kmem_cache_alloc(struct kmem_cache_s *, int);
-extern void kmem_cache_free(struct kmem_cache_s *, void *);
-
-
-static inline pgd_t *get_pgd_slow(void)
-{
- int i;
- pgd_t *pgd = kmem_cache_alloc(pae_pgd_cachep, GFP_KERNEL);
-
- if (pgd) {
- for (i = 0; i < USER_PTRS_PER_PGD; i++) {
- unsigned long pmd = __get_free_page(GFP_KERNEL);
- if (!pmd)
- goto out_oom;
- clear_page(pmd);
- set_pgd(pgd + i, __pgd(1 + __pa(pmd)));
- }
- memcpy(pgd + USER_PTRS_PER_PGD,
- swapper_pg_dir + USER_PTRS_PER_PGD,
- (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
- }
- return pgd;
-out_oom:
- for (i--; i >= 0; i--)
- free_page((unsigned long)__va(pgd_val(pgd[i])-1));
- kmem_cache_free(pae_pgd_cachep, pgd);
- return NULL;
-}
-
-#else
-
-static inline pgd_t *get_pgd_slow(void)
-{
- pgd_t *pgd = (pgd_t *)__get_free_page(GFP_KERNEL);
-
- if (pgd) {
- memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t));
- memcpy(pgd + USER_PTRS_PER_PGD,
- init_mm.pgd + USER_PTRS_PER_PGD,
- (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
- __make_page_readonly(pgd);
- queue_pgd_pin(__pa(pgd));
-
- }
- return pgd;
-}
-
-#endif /* CONFIG_X86_PAE */
-
-static inline pgd_t *get_pgd_fast(void)
-{
- unsigned long ret;
-
- if ( !QUICKLIST_EMPTY(pgd_quicklist) ) {
- ret = *(--pgd_quicklist);
- pgtable_cache_size--;
-
- } else
- ret = (unsigned long)get_pgd_slow();
- return (pgd_t *)ret;
-}
-
-static inline void free_pgd_slow(pgd_t *pgd)
-{
-#if defined(CONFIG_X86_PAE)
-#error
- int i;
-
- for (i = 0; i < USER_PTRS_PER_PGD; i++)
- free_page((unsigned long)__va(pgd_val(pgd[i])-1));
- kmem_cache_free(pae_pgd_cachep, pgd);
-#else
- queue_pgd_unpin(__pa(pgd));
- __make_page_writeable(pgd);
- free_page((unsigned long)pgd);
-#endif
-}
-
-static inline void free_pgd_fast(pgd_t *pgd)
-{
- if ( !QUICKLIST_FULL(pgd_quicklist) ) {
- *(pgd_quicklist++) = (unsigned long)pgd;
- pgtable_cache_size++;
- } else
- free_pgd_slow(pgd);
-}
-
-static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address)
-{
- pte_t *pte;
-
- pte = (pte_t *) __get_free_page(GFP_KERNEL);
- if (pte)
- {
- clear_page(pte);
- __make_page_readonly(pte);
- queue_pte_pin(__pa(pte));
- }
- return pte;
-
-}
-
-static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm,
- unsigned long address)
-{
- unsigned long ret = 0;
- if ( !QUICKLIST_EMPTY(pte_quicklist) ) {
- ret = *(--pte_quicklist);
- pgtable_cache_size--;
- }
- return (pte_t *)ret;
-}
-
-static __inline__ void pte_free_slow(pte_t *pte)
-{
- queue_pte_unpin(__pa(pte));
- __make_page_writeable(pte);
- free_page((unsigned long)pte);
-}
-
-static inline void pte_free_fast(pte_t *pte)
-{
- if ( !QUICKLIST_FULL(pte_quicklist) ) {
- *(pte_quicklist++) = (unsigned long)pte;
- pgtable_cache_size++;
- } else
- pte_free_slow(pte);
-}
-
-#define pte_free(pte) pte_free_fast(pte)
-#define pgd_free(pgd) free_pgd_fast(pgd)
-#define pgd_alloc(mm) get_pgd_fast()
-
-/*
- * allocating and freeing a pmd is trivial: the 1-entry pmd is
- * inside the pgd, so has no extra memory associated with it.
- * (In the PAE case we free the pmds as part of the pgd.)
- */
-
-#define pmd_alloc_one_fast(mm, addr) ({ BUG(); ((pmd_t *)1); })
-#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); })
-#define pmd_free_slow(x) do { } while (0)
-#define pmd_free_fast(x) do { } while (0)
-#define pmd_free(x) do { } while (0)
-#define pgd_populate(mm, pmd, pte) BUG()
-
-extern int do_check_pgt_cache(int, int);
-
-/*
- * TLB flushing:
- *
- * - flush_tlb() flushes the current mm struct TLBs
- * - flush_tlb_all() flushes all processes TLBs
- * - flush_tlb_mm(mm) flushes the specified mm context TLB's
- * - flush_tlb_page(vma, vmaddr) flushes one page
- * - flush_tlb_range(mm, start, end) flushes a range of pages
- * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
- *
- * ..but the i386 has somewhat limited tlb flushing capabilities,
- * and page-granular flushes are available only on i486 and up.
- */
-
-#ifndef CONFIG_SMP
-
-#define flush_tlb() __flush_tlb()
-#define flush_tlb_all() __flush_tlb_all()
-#define local_flush_tlb() __flush_tlb()
-
-static inline void flush_tlb_mm(struct mm_struct *mm)
-{
- if (mm == current->active_mm) queue_tlb_flush();
- XEN_flush_page_update_queue();
-}
-
-static inline void flush_tlb_page(struct vm_area_struct *vma,
- unsigned long addr)
-{
- if (vma->vm_mm == current->active_mm) queue_invlpg(addr);
- XEN_flush_page_update_queue();
-}
-
-static inline void flush_tlb_range(struct mm_struct *mm,
- unsigned long start, unsigned long end)
-{
- if (mm == current->active_mm) queue_tlb_flush();
- XEN_flush_page_update_queue();
-}
-
-#else
-#error no guestos SMP support yet...
-#include <asm/smp.h>
-
-#define local_flush_tlb() \
- __flush_tlb()
-
-extern void flush_tlb_all(void);
-extern void flush_tlb_current_task(void);
-extern void flush_tlb_mm(struct mm_struct *);
-extern void flush_tlb_page(struct vm_area_struct *, unsigned long);
-
-#define flush_tlb() flush_tlb_current_task()
-
-static inline void flush_tlb_range(struct mm_struct * mm, unsigned long start, unsigned long end)
-{
- flush_tlb_mm(mm);
-}
-
-#define TLBSTATE_OK 1
-#define TLBSTATE_LAZY 2
-
-struct tlb_state
-{
- struct mm_struct *active_mm;
- int state;
-} ____cacheline_aligned;
-extern struct tlb_state cpu_tlbstate[NR_CPUS];
-
-#endif /* CONFIG_SMP */
-
-static inline void flush_tlb_pgtables(struct mm_struct *mm,
- unsigned long start, unsigned long end)
-{
- /* i386 does not keep any page table caches in TLB */
- XEN_flush_page_update_queue();
-}
-
-extern int direct_remap_area_pages(struct mm_struct *mm,
- unsigned long address,
- unsigned long machine_addr,
- unsigned long size,
- pgprot_t prot);
-
-#endif /* _I386_PGALLOC_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/pgtable-2level.h b/xenolinux-2.4.25-sparse/include/asm-xen/pgtable-2level.h
deleted file mode 100644
index c780f644c0..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/pgtable-2level.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef _I386_PGTABLE_2LEVEL_H
-#define _I386_PGTABLE_2LEVEL_H
-
-/*
- * traditional i386 two-level paging structure:
- */
-
-#define PGDIR_SHIFT 22
-#define PTRS_PER_PGD 1024
-
-/*
- * the i386 is two-level, so we don't really have any
- * PMD directory physically.
- */
-#define PMD_SHIFT 22
-#define PTRS_PER_PMD 1
-
-#define PTRS_PER_PTE 1024
-
-#define pte_ERROR(e) \
- printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
-#define pmd_ERROR(e) \
- printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e))
-#define pgd_ERROR(e) \
- printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
-
-/*
- * 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
- * into the pgd entry)
- */
-static inline int pgd_none(pgd_t pgd) { return 0; }
-static inline int pgd_bad(pgd_t pgd) { return 0; }
-static inline int pgd_present(pgd_t pgd) { return 1; }
-#define pgd_clear(xp) do { } while (0)
-
-#define set_pte(pteptr, pteval) queue_l1_entry_update(pteptr, (pteval).pte_low)
-#define set_pte_atomic(pteptr, pteval) queue_l1_entry_update(pteptr, (pteval).pte_low)
-#define set_pmd(pmdptr, pmdval) queue_l2_entry_update((pmdptr), (pmdval).pmd)
-#define set_pgd(pgdptr, pgdval) ((void)0)
-
-#define pgd_page(pgd) \
-((unsigned long) __va(pgd_val(pgd) & PAGE_MASK))
-
-static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address)
-{
- return (pmd_t *) dir;
-}
-
-/*
- * A note on implementation of this atomic 'get-and-clear' operation.
- * This is actually very simple because XenoLinux can only run on a single
- * processor. Therefore, we cannot race other processors setting the 'accessed'
- * or 'dirty' bits on a page-table entry.
- * Even if pages are shared between domains, that is not a problem because
- * each domain will have separate page tables, with their own versions of
- * accessed & dirty state.
- */
-static inline pte_t ptep_get_and_clear(pte_t *xp)
-{
- pte_t pte = *xp;
- queue_l1_entry_update(xp, 0);
- return pte;
-}
-
-#define pte_same(a, b) ((a).pte_low == (b).pte_low)
-#define pte_page(x) (mem_map+((unsigned long)((pte_val(x) >> PAGE_SHIFT))))
-#define pte_none(x) (!(x).pte_low)
-#define __mk_pte(page_nr,pgprot) __pte(((page_nr) << PAGE_SHIFT) | pgprot_val(pgprot))
-
-#endif /* _I386_PGTABLE_2LEVEL_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/pgtable.h b/xenolinux-2.4.25-sparse/include/asm-xen/pgtable.h
deleted file mode 100644
index 38721e4cff..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/pgtable.h
+++ /dev/null
@@ -1,374 +0,0 @@
-#ifndef _I386_PGTABLE_H
-#define _I386_PGTABLE_H
-
-#include <linux/config.h>
-
-/*
- * The Linux memory management assumes a three-level page table setup. On
- * the i386, we use that, but "fold" the mid level into the top-level page
- * table, so that we physically have the same two-level page table as the
- * i386 mmu expects.
- *
- * This file contains the functions and defines necessary to modify and use
- * the i386 page table tree.
- */
-#ifndef __ASSEMBLY__
-#include <asm/processor.h>
-#include <asm/hypervisor.h>
-#include <linux/threads.h>
-#include <asm/fixmap.h>
-
-#ifndef _I386_BITOPS_H
-#include <asm/bitops.h>
-#endif
-
-#define swapper_pg_dir 0
-extern void paging_init(void);
-
-/* Caches aren't brain-dead on the intel. */
-#define flush_cache_all() do { } while (0)
-#define flush_cache_mm(mm) do { } while (0)
-#define flush_cache_range(mm, start, end) do { } while (0)
-#define flush_cache_page(vma, vmaddr) do { } while (0)
-#define flush_page_to_ram(page) do { } while (0)
-#define flush_dcache_page(page) do { } while (0)
-#define flush_icache_range(start, end) do { } while (0)
-#define flush_icache_page(vma,pg) do { } while (0)
-#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
-
-extern unsigned long pgkern_mask;
-
-#define __flush_tlb() ({ queue_tlb_flush(); XEN_flush_page_update_queue(); })
-#define __flush_tlb_global() __flush_tlb()
-#define __flush_tlb_all() __flush_tlb_global()
-#define __flush_tlb_one(addr) ({ queue_invlpg(addr); XEN_flush_page_update_queue(); })
-#define __flush_tlb_single(addr) ({ queue_invlpg(addr); XEN_flush_page_update_queue(); })
-
-/*
- * ZERO_PAGE is a global shared page that is always zero: used
- * for zero-mapped memory areas etc..
- */
-extern unsigned long empty_zero_page[1024];
-#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
-
-#endif /* !__ASSEMBLY__ */
-
-/*
- * The Linux x86 paging architecture is 'compile-time dual-mode', it
- * implements both the traditional 2-level x86 page tables and the
- * newer 3-level PAE-mode page tables.
- */
-#ifndef __ASSEMBLY__
-#if CONFIG_X86_PAE
-# include <asm/pgtable-3level.h>
-
-/*
- * Need to initialise the X86 PAE caches
- */
-extern void pgtable_cache_init(void);
-
-#else
-# include <asm/pgtable-2level.h>
-
-/*
- * No page table caches to initialise
- */
-#define pgtable_cache_init() do { } while (0)
-
-#endif
-#endif
-
-#define PMD_SIZE (1UL << PMD_SHIFT)
-#define PMD_MASK (~(PMD_SIZE-1))
-#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
-#define PGDIR_MASK (~(PGDIR_SIZE-1))
-
-#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
-#define FIRST_USER_PGD_NR 0
-
-#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)
-#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
-
-#define TWOLEVEL_PGDIR_SHIFT 22
-#define BOOT_USER_PGD_PTRS (__PAGE_OFFSET >> TWOLEVEL_PGDIR_SHIFT)
-#define BOOT_KERNEL_PGD_PTRS (1024-BOOT_USER_PGD_PTRS)
-
-
-#ifndef __ASSEMBLY__
-/* 4MB is just a nice "safety zone". Also, we align to a fresh pde. */
-#define VMALLOC_OFFSET (4*1024*1024)
-extern void * high_memory;
-#define VMALLOC_START (((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \
- ~(VMALLOC_OFFSET-1))
-#define VMALLOC_VMADDR(x) ((unsigned long)(x))
-#if CONFIG_HIGHMEM
-# define VMALLOC_END (PKMAP_BASE-2*PAGE_SIZE)
-#else
-# define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE)
-#endif
-
-#define _PAGE_BIT_PRESENT 0
-#define _PAGE_BIT_RW 1
-#define _PAGE_BIT_USER 2
-#define _PAGE_BIT_PWT 3
-#define _PAGE_BIT_PCD 4
-#define _PAGE_BIT_ACCESSED 5
-#define _PAGE_BIT_DIRTY 6
-#define _PAGE_BIT_PSE 7 /* 4 MB (or 2MB) page, Pentium+, if present.. */
-#define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */
-#define _PAGE_BIT_IO 9
-
-#define _PAGE_PRESENT 0x001
-#define _PAGE_RW 0x002
-#define _PAGE_USER 0x004
-#define _PAGE_PWT 0x008
-#define _PAGE_PCD 0x010
-#define _PAGE_ACCESSED 0x020
-#define _PAGE_DIRTY 0x040
-#define _PAGE_PSE 0x080 /* 4 MB (or 2MB) page, Pentium+, if present.. */
-#define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */
-#define _PAGE_IO 0x200
-
-#define _PAGE_PROTNONE 0x080 /* If not present */
-
-#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_KERNEL \
- (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)
-#define __PAGE_KERNEL_NOCACHE \
- (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_PCD | _PAGE_ACCESSED)
-#define __PAGE_KERNEL_RO \
- (_PAGE_PRESENT | _PAGE_DIRTY | _PAGE_ACCESSED)
-
-#if 0
-#define MAKE_GLOBAL(x) __pgprot((x) | _PAGE_GLOBAL)
-#else
-#define MAKE_GLOBAL(x) __pgprot(x)
-#endif
-
-#define PAGE_KERNEL MAKE_GLOBAL(__PAGE_KERNEL)
-#define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)
-#define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)
-
-/*
- * The i386 can't do page protection for execute, and considers that
- * the same are read. Also, write permissions imply read permissions.
- * This is the closest we can get..
- */
-#define __P000 PAGE_NONE
-#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 __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 pte_present(x) ((x).pte_low & (_PAGE_PRESENT | _PAGE_PROTNONE))
-#define pte_clear(xp) queue_l1_entry_update(xp, 0)
-
-#define pmd_none(x) (!(x).pmd)
-#define pmd_present(x) ((x).pmd & _PAGE_PRESENT)
-#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
-#define pmd_bad(x) (((x).pmd & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
-
-
-#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))
-
-/*
- * The following only work if pte_present() is true.
- * Undefined behaviour if not..
- */
-static inline int pte_read(pte_t pte) { return (pte).pte_low & _PAGE_USER; }
-static inline int pte_exec(pte_t pte) { return (pte).pte_low & _PAGE_USER; }
-static inline int pte_dirty(pte_t pte) { return (pte).pte_low & _PAGE_DIRTY; }
-static inline int pte_young(pte_t pte) { return (pte).pte_low & _PAGE_ACCESSED; }
-static inline int pte_write(pte_t pte) { return (pte).pte_low & _PAGE_RW; }
-static inline int pte_io(pte_t pte) { return (pte).pte_low & _PAGE_IO; }
-
-static inline pte_t pte_rdprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; }
-static inline pte_t pte_exprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; }
-static inline pte_t pte_mkclean(pte_t pte) { (pte).pte_low &= ~_PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkold(pte_t pte) { (pte).pte_low &= ~_PAGE_ACCESSED; return pte; }
-static inline pte_t pte_wrprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_RW; return pte; }
-static inline pte_t pte_mkread(pte_t pte) { (pte).pte_low |= _PAGE_USER; return pte; }
-static inline pte_t pte_mkexec(pte_t pte) { (pte).pte_low |= _PAGE_USER; return pte; }
-static inline pte_t pte_mkdirty(pte_t pte) { (pte).pte_low |= _PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkyoung(pte_t pte) { (pte).pte_low |= _PAGE_ACCESSED; return pte; }
-static inline pte_t pte_mkwrite(pte_t pte) { (pte).pte_low |= _PAGE_RW; return pte; }
-static inline pte_t pte_mkio(pte_t pte) { (pte).pte_low |= _PAGE_IO; return pte; }
-
-static inline int ptep_test_and_clear_dirty(pte_t *ptep)
-{
- unsigned long pteval = *(unsigned long *)ptep;
- int ret = pteval & _PAGE_DIRTY;
- if ( ret ) queue_l1_entry_update(ptep, pteval & ~_PAGE_DIRTY);
- return ret;
-}
-static inline int ptep_test_and_clear_young(pte_t *ptep)
-{
- unsigned long pteval = *(unsigned long *)ptep;
- int ret = pteval & _PAGE_ACCESSED;
- if ( ret ) queue_l1_entry_update(ptep, pteval & ~_PAGE_ACCESSED);
- return ret;
-}
-static inline void ptep_set_wrprotect(pte_t *ptep)
-{
- unsigned long pteval = *(unsigned long *)ptep;
- if ( (pteval & _PAGE_RW) )
- queue_l1_entry_update(ptep, pteval & ~_PAGE_RW);
-}
-static inline void ptep_mkdirty(pte_t *ptep)
-{
- unsigned long pteval = *(unsigned long *)ptep;
- if ( !(pteval & _PAGE_DIRTY) )
- queue_l1_entry_update(ptep, pteval | _PAGE_DIRTY);
-}
-
-/*
- * Conversion functions: convert a page and protection to a page entry,
- * and a page entry and page directory to the page they refer to.
- */
-
-#define mk_pte(page, pgprot) __mk_pte((page) - mem_map, (pgprot))
-
-/* This takes a physical page address that is used by the remapping functions */
-#define mk_pte_phys(physpage, pgprot) __mk_pte((physpage) >> PAGE_SHIFT, pgprot)
-
-static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
-{
- pte.pte_low &= _PAGE_CHG_MASK;
- pte.pte_low |= pgprot_val(newprot);
- return pte;
-}
-
-#define page_pte(page) page_pte_prot(page, __pgprot(0))
-
-#define pmd_page(pmd) \
-((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
-
-/* to find an entry in a page-table-directory. */
-#define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
-
-#define __pgd_offset(address) pgd_index(address)
-
-#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
-
-/* to find an entry in a kernel page-table-directory */
-#define pgd_offset_k(address) pgd_offset(&init_mm, address)
-
-#define __pmd_offset(address) \
- (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
-
-/* Find an entry in the third-level page table.. */
-#define __pte_offset(address) \
- ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
-#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \
- __pte_offset(address))
-
-/*
- * The i386 doesn't have any external MMU info: the kernel page
- * tables contain all the necessary information.
- */
-#define update_mmu_cache(vma,address,pte) do { } while (0)
-
-/* Encode and de-code a swap entry */
-#define SWP_TYPE(x) (((x).val >> 1) & 0x3f)
-#define SWP_OFFSET(x) ((x).val >> 8)
-#define SWP_ENTRY(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
-#define pte_to_swp_entry(pte) ((swp_entry_t) { (pte).pte_low })
-#define swp_entry_to_pte(x) ((pte_t) { (x).val })
-
-struct page;
-int change_page_attr(struct page *, int, pgprot_t prot);
-
-static inline void __make_page_readonly(void *va)
-{
- pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
- pte_t *pte = pte_offset(pmd, (unsigned long)va);
- queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
-}
-
-static inline void __make_page_writeable(void *va)
-{
- pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
- pte_t *pte = pte_offset(pmd, (unsigned long)va);
- queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
-}
-
-static inline void make_page_readonly(void *va)
-{
- pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
- pte_t *pte = pte_offset(pmd, (unsigned long)va);
- queue_l1_entry_update(pte, (*(unsigned long *)pte)&~_PAGE_RW);
- if ( (unsigned long)va >= VMALLOC_START )
- __make_page_readonly(machine_to_virt(
- *(unsigned long *)pte&PAGE_MASK));
-}
-
-static inline void make_page_writeable(void *va)
-{
- pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
- pte_t *pte = pte_offset(pmd, (unsigned long)va);
- queue_l1_entry_update(pte, (*(unsigned long *)pte)|_PAGE_RW);
- if ( (unsigned long)va >= VMALLOC_START )
- __make_page_writeable(machine_to_virt(
- *(unsigned long *)pte&PAGE_MASK));
-}
-
-static inline void make_pages_readonly(void *va, unsigned int nr)
-{
- while ( nr-- != 0 )
- {
- make_page_readonly(va);
- va = (void *)((unsigned long)va + PAGE_SIZE);
- }
-}
-
-static inline void make_pages_writeable(void *va, unsigned int nr)
-{
- while ( nr-- != 0 )
- {
- make_page_writeable(va);
- va = (void *)((unsigned long)va + PAGE_SIZE);
- }
-}
-
-static inline unsigned long arbitrary_virt_to_phys(void *va)
-{
- pgd_t *pgd = pgd_offset_k((unsigned long)va);
- pmd_t *pmd = pmd_offset(pgd, (unsigned long)va);
- pte_t *pte = pte_offset(pmd, (unsigned long)va);
- unsigned long pa = (*(unsigned long *)pte) & PAGE_MASK;
- return pa | ((unsigned long)va & (PAGE_SIZE-1));
-}
-
-#endif /* !__ASSEMBLY__ */
-
-/* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
-#define PageSkip(page) (0)
-#define kern_addr_valid(addr) (1)
-
-#define io_remap_page_range remap_page_range
-
-#endif /* _I386_PGTABLE_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/proc_cmd.h b/xenolinux-2.4.25-sparse/include/asm-xen/proc_cmd.h
deleted file mode 100644
index 4ce2930daa..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/proc_cmd.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/******************************************************************************
- * proc_cmd.h
- *
- * Interface to /proc/cmd and /proc/xen/privcmd.
- */
-
-#ifndef __PROC_CMD_H__
-#define __PROC_CMD_H__
-
-typedef struct privcmd_hypercall
-{
- unsigned long op;
- unsigned long arg[5];
-} privcmd_hypercall_t;
-
-typedef struct privcmd_blkmsg
-{
- unsigned long op;
- void *buf;
- int buf_size;
-} privcmd_blkmsg_t;
-
-#define IOCTL_PRIVCMD_HYPERCALL \
- _IOC(_IOC_NONE, 'P', 0, sizeof(privcmd_hypercall_t))
-#define IOCTL_PRIVCMD_BLKMSG \
- _IOC(_IOC_NONE, 'P', 1, sizeof(privcmd_blkmsg_t))
-
-#endif /* __PROC_CMD_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/processor.h b/xenolinux-2.4.25-sparse/include/asm-xen/processor.h
deleted file mode 100644
index 2b290252be..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/processor.h
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * include/asm-i386/processor.h
- *
- * Copyright (C) 1994 Linus Torvalds
- */
-
-#ifndef __ASM_I386_PROCESSOR_H
-#define __ASM_I386_PROCESSOR_H
-
-#include <asm/math_emu.h>
-#include <asm/segment.h>
-#include <asm/page.h>
-#include <asm/types.h>
-#include <asm/sigcontext.h>
-#include <asm/cpufeature.h>
-#include <linux/cache.h>
-#include <linux/config.h>
-#include <linux/threads.h>
-
-/*
- * Default implementation of macro that returns current
- * instruction pointer ("program counter").
- */
-#define current_text_addr() ({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; })
-
-/*
- * CPU type and hardware bug flags. Kept separately for each CPU.
- * Members of this structure are referenced in head.S, so think twice
- * before touching them. [mj]
- */
-
-struct cpuinfo_x86 {
- __u8 x86; /* CPU family */
- __u8 x86_vendor; /* CPU vendor */
- __u8 x86_model;
- __u8 x86_mask;
- char wp_works_ok; /* It doesn't on 386's */
- char hlt_works_ok; /* Problems on some 486Dx4's and old 386's */
- char hard_math;
- char rfu;
- int cpuid_level; /* Maximum supported CPUID level, -1=no CPUID */
- __u32 x86_capability[NCAPINTS];
- char x86_vendor_id[16];
- char x86_model_id[64];
- int x86_cache_size; /* in KB - valid for CPUS which support this
- call */
- int fdiv_bug;
- int f00f_bug;
- int coma_bug;
- unsigned long loops_per_jiffy;
- unsigned long *pgd_quick;
- unsigned long *pmd_quick;
- unsigned long *pte_quick;
- unsigned long pgtable_cache_sz;
-} __attribute__((__aligned__(SMP_CACHE_BYTES)));
-
-#define X86_VENDOR_INTEL 0
-#define X86_VENDOR_CYRIX 1
-#define X86_VENDOR_AMD 2
-#define X86_VENDOR_UMC 3
-#define X86_VENDOR_NEXGEN 4
-#define X86_VENDOR_CENTAUR 5
-#define X86_VENDOR_RISE 6
-#define X86_VENDOR_TRANSMETA 7
-#define X86_VENDOR_NSC 8
-#define X86_VENDOR_SIS 9
-#define X86_VENDOR_UNKNOWN 0xff
-
-/*
- * capabilities of CPUs
- */
-
-extern struct cpuinfo_x86 boot_cpu_data;
-extern struct tss_struct init_tss[NR_CPUS];
-
-#ifdef CONFIG_SMP
-extern struct cpuinfo_x86 cpu_data[];
-#define current_cpu_data cpu_data[smp_processor_id()]
-#else
-#define cpu_data (&boot_cpu_data)
-#define current_cpu_data boot_cpu_data
-#endif
-
-extern char ignore_irq13;
-
-extern void identify_cpu(struct cpuinfo_x86 *);
-extern void print_cpu_info(struct cpuinfo_x86 *);
-
-/*
- * EFLAGS bits
- */
-#define X86_EFLAGS_CF 0x00000001 /* Carry Flag */
-#define X86_EFLAGS_PF 0x00000004 /* Parity Flag */
-#define X86_EFLAGS_AF 0x00000010 /* Auxillary carry Flag */
-#define X86_EFLAGS_ZF 0x00000040 /* Zero Flag */
-#define X86_EFLAGS_SF 0x00000080 /* Sign Flag */
-#define X86_EFLAGS_TF 0x00000100 /* Trap Flag */
-#define X86_EFLAGS_IF 0x00000200 /* Interrupt Flag */
-#define X86_EFLAGS_DF 0x00000400 /* Direction Flag */
-#define X86_EFLAGS_OF 0x00000800 /* Overflow Flag */
-#define X86_EFLAGS_IOPL 0x00003000 /* IOPL mask */
-#define X86_EFLAGS_NT 0x00004000 /* Nested Task */
-#define X86_EFLAGS_RF 0x00010000 /* Resume Flag */
-#define X86_EFLAGS_VM 0x00020000 /* Virtual Mode */
-#define X86_EFLAGS_AC 0x00040000 /* Alignment Check */
-#define X86_EFLAGS_VIF 0x00080000 /* Virtual Interrupt Flag */
-#define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */
-#define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */
-
-/*
- * Generic CPUID function
- */
-static inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
-{
- __asm__("cpuid"
- : "=a" (*eax),
- "=b" (*ebx),
- "=c" (*ecx),
- "=d" (*edx)
- : "0" (op));
-}
-
-/*
- * CPUID functions returning a single datum
- */
-static inline unsigned int cpuid_eax(unsigned int op)
-{
- unsigned int eax;
-
- __asm__("cpuid"
- : "=a" (eax)
- : "0" (op)
- : "bx", "cx", "dx");
- return eax;
-}
-static inline unsigned int cpuid_ebx(unsigned int op)
-{
- unsigned int eax, ebx;
-
- __asm__("cpuid"
- : "=a" (eax), "=b" (ebx)
- : "0" (op)
- : "cx", "dx" );
- return ebx;
-}
-static inline unsigned int cpuid_ecx(unsigned int op)
-{
- unsigned int eax, ecx;
-
- __asm__("cpuid"
- : "=a" (eax), "=c" (ecx)
- : "0" (op)
- : "bx", "dx" );
- return ecx;
-}
-static inline unsigned int cpuid_edx(unsigned int op)
-{
- unsigned int eax, edx;
-
- __asm__("cpuid"
- : "=a" (eax), "=d" (edx)
- : "0" (op)
- : "bx", "cx");
- return edx;
-}
-
-/*
- * Intel CPU features in CR4
- */
-#define X86_CR4_VME 0x0001 /* enable vm86 extensions */
-#define X86_CR4_PVI 0x0002 /* virtual interrupts flag enable */
-#define X86_CR4_TSD 0x0004 /* disable time stamp at ipl 3 */
-#define X86_CR4_DE 0x0008 /* enable debugging extensions */
-#define X86_CR4_PSE 0x0010 /* enable page size extensions */
-#define X86_CR4_PAE 0x0020 /* enable physical address extensions */
-#define X86_CR4_MCE 0x0040 /* Machine check enable */
-#define X86_CR4_PGE 0x0080 /* enable global pages */
-#define X86_CR4_PCE 0x0100 /* enable performance counters at ipl 3 */
-#define X86_CR4_OSFXSR 0x0200 /* enable fast FPU save and restore */
-#define X86_CR4_OSXMMEXCPT 0x0400 /* enable unmasked SSE exceptions */
-
-#define load_cr3(pgdir) \
- asm volatile("movl %0,%%cr3": :"r" (__pa(pgdir)));
-
-extern unsigned long mmu_cr4_features;
-
-#include <asm/hypervisor.h>
-
-static inline void set_in_cr4 (unsigned long mask)
-{
- BUG();
-}
-
-static inline void clear_in_cr4 (unsigned long mask)
-{
- BUG();
-}
-
-/*
- * Cyrix CPU configuration register indexes
- */
-#define CX86_CCR0 0xc0
-#define CX86_CCR1 0xc1
-#define CX86_CCR2 0xc2
-#define CX86_CCR3 0xc3
-#define CX86_CCR4 0xe8
-#define CX86_CCR5 0xe9
-#define CX86_CCR6 0xea
-#define CX86_CCR7 0xeb
-#define CX86_DIR0 0xfe
-#define CX86_DIR1 0xff
-#define CX86_ARR_BASE 0xc4
-#define CX86_RCR_BASE 0xdc
-
-/*
- * Cyrix CPU indexed register access macros
- */
-
-#define getCx86(reg) ({ outb((reg), 0x22); inb(0x23); })
-
-#define setCx86(reg, data) do { \
- outb((reg), 0x22); \
- outb((data), 0x23); \
-} while (0)
-
-/*
- * Bus types (default is ISA, but people can check others with these..)
- */
-#ifdef CONFIG_EISA
-extern int EISA_bus;
-#else
-#define EISA_bus (0)
-#endif
-extern int MCA_bus;
-
-/* from system description table in BIOS. Mostly for MCA use, but
-others may find it useful. */
-extern unsigned int machine_id;
-extern unsigned int machine_submodel_id;
-extern unsigned int BIOS_revision;
-extern unsigned int mca_pentium_flag;
-
-/*
- * User space process size: 3GB (default).
- */
-#define TASK_SIZE (PAGE_OFFSET)
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-/*
- * Size of io_bitmap in longwords: 32 is ports 0-0x3ff.
- */
-#define IO_BITMAP_SIZE 32
-#define IO_BITMAP_BYTES (IO_BITMAP_SIZE * 4)
-#define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap)
-#define INVALID_IO_BITMAP_OFFSET 0x8000
-
-struct i387_fsave_struct {
- long cwd;
- long swd;
- long twd;
- long fip;
- long fcs;
- long foo;
- long fos;
- long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
- long status; /* software status information */
-};
-
-struct i387_fxsave_struct {
- unsigned short cwd;
- unsigned short swd;
- unsigned short twd;
- unsigned short fop;
- long fip;
- long fcs;
- long foo;
- long fos;
- long mxcsr;
- long reserved;
- long st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
- long xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
- long padding[56];
-} __attribute__ ((aligned (16)));
-
-struct i387_soft_struct {
- long cwd;
- long swd;
- long twd;
- long fip;
- long fcs;
- long foo;
- long fos;
- long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
- unsigned char ftop, changed, lookahead, no_update, rm, alimit;
- struct info *info;
- unsigned long entry_eip;
-};
-
-union i387_union {
- struct i387_fsave_struct fsave;
- struct i387_fxsave_struct fxsave;
- struct i387_soft_struct soft;
-};
-
-typedef struct {
- unsigned long seg;
-} mm_segment_t;
-
-struct tss_struct {
- unsigned short back_link,__blh;
- unsigned long esp0;
- unsigned short ss0,__ss0h;
- unsigned long esp1;
- unsigned short ss1,__ss1h;
- unsigned long esp2;
- unsigned short ss2,__ss2h;
- unsigned long __cr3;
- unsigned long eip;
- unsigned long eflags;
- unsigned long eax,ecx,edx,ebx;
- unsigned long esp;
- unsigned long ebp;
- unsigned long esi;
- unsigned long edi;
- unsigned short es, __esh;
- unsigned short cs, __csh;
- unsigned short ss, __ssh;
- unsigned short ds, __dsh;
- unsigned short fs, __fsh;
- unsigned short gs, __gsh;
- unsigned short ldt, __ldth;
- unsigned short trace, bitmap;
- unsigned long io_bitmap[IO_BITMAP_SIZE+1];
- /*
- * pads the TSS to be cacheline-aligned (size is 0x100)
- */
- unsigned long __cacheline_filler[5];
-};
-
-struct thread_struct {
- unsigned long esp0;
- unsigned long eip;
- unsigned long esp;
- unsigned long fs;
- unsigned long gs;
- unsigned int io_pl;
-/* Hardware debugging registers */
- unsigned long debugreg[8]; /* %%db0-7 debug registers */
-/* fault info */
- unsigned long cr2, trap_no, error_code;
-/* floating point info */
- union i387_union i387;
-/* virtual 86 mode info */
- struct vm86_struct * vm86_info;
- unsigned long screen_bitmap;
- unsigned long v86flags, v86mask, saved_esp0;
-};
-
-#define INIT_THREAD { sizeof(init_stack) + (long) &init_stack, \
- 0, 0, 0, 0, 0, 0, {0}, 0, 0, 0, {{0}}, 0, 0, 0, 0, 0 }
-
-#define INIT_TSS { \
- 0,0, /* back_link, __blh */ \
- sizeof(init_stack) + (long) &init_stack, /* esp0 */ \
- __KERNEL_DS, 0, /* ss0 */ \
- 0,0,0,0,0,0, /* stack1, stack2 */ \
- 0, /* cr3 */ \
- 0,0, /* eip,eflags */ \
- 0,0,0,0, /* eax,ecx,edx,ebx */ \
- 0,0,0,0, /* esp,ebp,esi,edi */ \
- 0,0,0,0,0,0, /* es,cs,ss */ \
- 0,0,0,0,0,0, /* ds,fs,gs */ \
- 0,0, /* ldt */ \
- 0, INVALID_IO_BITMAP_OFFSET, /* tace, bitmap */ \
- {~0, } /* ioperm */ \
-}
-
-#define start_thread(regs, new_eip, new_esp) do { \
- __asm__("movl %0,%%fs ; movl %0,%%gs": :"r" (0)); \
- set_fs(USER_DS); \
- regs->xds = __USER_DS; \
- regs->xes = __USER_DS; \
- regs->xss = __USER_DS; \
- regs->xcs = __USER_CS; \
- regs->eip = new_eip; \
- regs->esp = new_esp; \
-} while (0)
-
-/* Forward declaration, a strange C thing */
-struct task_struct;
-struct mm_struct;
-
-/* Free all resources held by a thread. */
-extern void release_thread(struct task_struct *);
-/*
- * create a kernel thread without removing it from tasklists
- */
-extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
-
-/* Copy and release all segment info associated with a VM
- * Unusable due to lack of error handling, use {init_new,destroy}_context
- * instead.
- */
-static inline void copy_segments(struct task_struct *p, struct mm_struct * mm) { }
-static inline void release_segments(struct mm_struct * mm) { }
-
-/*
- * Return saved PC of a blocked thread.
- */
-static inline unsigned long thread_saved_pc(struct thread_struct *t)
-{
- return ((unsigned long *)t->esp)[3];
-}
-
-unsigned long get_wchan(struct task_struct *p);
-#define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019])
-#define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022])
-
-#define THREAD_SIZE (2*PAGE_SIZE)
-#define alloc_task_struct() ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
-#define free_task_struct(p) free_pages((unsigned long) (p), 1)
-#define get_task_struct(tsk) atomic_inc(&virt_to_page(tsk)->count)
-
-#define init_task (init_task_union.task)
-#define init_stack (init_task_union.stack)
-
-struct microcode {
- unsigned int hdrver;
- unsigned int rev;
- unsigned int date;
- unsigned int sig;
- unsigned int cksum;
- unsigned int ldrver;
- unsigned int pf;
- unsigned int reserved[5];
- unsigned int bits[500];
-};
-
-/* '6' because it used to be for P6 only (but now covers Pentium 4 as well) */
-#define MICROCODE_IOCFREE _IO('6',0)
-
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static inline void rep_nop(void)
-{
- __asm__ __volatile__("rep;nop" ::: "memory");
-}
-
-#define cpu_relax() rep_nop()
-
-/* Prefetch instructions for Pentium III and AMD Athlon */
-#if defined(CONFIG_MPENTIUMIII) || defined (CONFIG_MPENTIUM4)
-
-#define ARCH_HAS_PREFETCH
-extern inline void prefetch(const void *x)
-{
- __asm__ __volatile__ ("prefetchnta (%0)" : : "r"(x));
-}
-
-#elif CONFIG_X86_USE_3DNOW
-
-#define ARCH_HAS_PREFETCH
-#define ARCH_HAS_PREFETCHW
-#define ARCH_HAS_SPINLOCK_PREFETCH
-
-extern inline void prefetch(const void *x)
-{
- __asm__ __volatile__ ("prefetch (%0)" : : "r"(x));
-}
-
-extern inline void prefetchw(const void *x)
-{
- __asm__ __volatile__ ("prefetchw (%0)" : : "r"(x));
-}
-#define spin_lock_prefetch(x) prefetchw(x)
-
-#endif
-
-#define TF_MASK 0x100
-
-#endif /* __ASM_I386_PROCESSOR_H */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/ptrace.h b/xenolinux-2.4.25-sparse/include/asm-xen/ptrace.h
deleted file mode 100644
index 4457ac0b17..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/ptrace.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef _I386_PTRACE_H
-#define _I386_PTRACE_H
-
-#define EBX 0
-#define ECX 1
-#define EDX 2
-#define ESI 3
-#define EDI 4
-#define EBP 5
-#define EAX 6
-#define DS 7
-#define ES 8
-#define FS 9
-#define GS 10
-#define ORIG_EAX 11
-#define EIP 12
-#define CS 13
-#define EFL 14
-#define UESP 15
-#define SS 16
-#define FRAME_SIZE 17
-
-/* this struct defines the way the registers are stored on the
- stack during a system call. */
-
-struct pt_regs {
- long ebx;
- long ecx;
- long edx;
- long esi;
- long edi;
- long ebp;
- long eax;
- int xds;
- int xes;
- long orig_eax;
- long eip;
- int xcs;
- long eflags;
- long esp;
- int xss;
-};
-
-/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-#define PTRACE_GETREGS 12
-#define PTRACE_SETREGS 13
-#define PTRACE_GETFPREGS 14
-#define PTRACE_SETFPREGS 15
-#define PTRACE_GETFPXREGS 18
-#define PTRACE_SETFPXREGS 19
-
-#define PTRACE_SETOPTIONS 21
-
-/* options set using PTRACE_SETOPTIONS */
-#define PTRACE_O_TRACESYSGOOD 0x00000001
-
-#ifdef __KERNEL__
-#define user_mode(regs) ((regs) && (2 & (regs)->xcs))
-#define instruction_pointer(regs) ((regs) ? (regs)->eip : NULL)
-extern void show_regs(struct pt_regs *);
-#endif
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/segment.h b/xenolinux-2.4.25-sparse/include/asm-xen/segment.h
deleted file mode 100644
index ca13028ce0..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/segment.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _ASM_SEGMENT_H
-#define _ASM_SEGMENT_H
-
-#ifndef __ASSEMBLY__
-#include <linux/types.h>
-#endif
-#include <asm/hypervisor-ifs/hypervisor-if.h>
-
-#define __KERNEL_CS FLAT_RING1_CS
-#define __KERNEL_DS FLAT_RING1_DS
-
-#define __USER_CS FLAT_RING3_CS
-#define __USER_DS FLAT_RING3_DS
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/smp.h b/xenolinux-2.4.25-sparse/include/asm-xen/smp.h
deleted file mode 100644
index 804b93c332..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/smp.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef __ASM_SMP_H
-#define __ASM_SMP_H
-
-/*
- * We need the APIC definitions automatically as part of 'smp.h'
- */
-#ifndef __ASSEMBLY__
-#include <linux/config.h>
-#include <linux/threads.h>
-#include <linux/ptrace.h>
-#endif
-
-#ifdef CONFIG_X86_LOCAL_APIC
-#ifndef __ASSEMBLY__
-#include <asm/bitops.h>
-#include <asm/mpspec.h>
-#ifdef CONFIG_X86_IO_APIC
-#include <asm/io_apic.h>
-#endif
-#include <asm/apic.h>
-#endif
-#endif
-
-#ifdef CONFIG_SMP
-#ifndef __ASSEMBLY__
-
-/*
- * Private routines/data
- */
-
-extern void smp_alloc_memory(void);
-extern unsigned long phys_cpu_present_map;
-extern unsigned long cpu_online_map;
-extern volatile unsigned long smp_invalidate_needed;
-extern int pic_mode;
-extern int smp_num_siblings;
-extern int cpu_sibling_map[];
-
-extern void smp_flush_tlb(void);
-extern void smp_message_irq(int cpl, void *dev_id, struct pt_regs *regs);
-extern void smp_send_reschedule(int cpu);
-extern void smp_invalidate_rcv(void); /* Process an NMI */
-extern void (*mtrr_hook) (void);
-extern void zap_low_mappings (void);
-
-/*
- * On x86 all CPUs are mapped 1:1 to the APIC space.
- * This simplifies scheduling and IPI sending and
- * compresses data structures.
- */
-static inline int cpu_logical_map(int cpu)
-{
- return cpu;
-}
-static inline int cpu_number_map(int cpu)
-{
- return cpu;
-}
-
-/*
- * Some lowlevel functions might want to know about
- * the real APIC ID <-> CPU # mapping.
- */
-#define MAX_APICID 256
-extern volatile int cpu_to_physical_apicid[NR_CPUS];
-extern volatile int physical_apicid_to_cpu[MAX_APICID];
-extern volatile int cpu_to_logical_apicid[NR_CPUS];
-extern volatile int logical_apicid_to_cpu[MAX_APICID];
-
-/*
- * General functions that each host system must provide.
- */
-
-extern void smp_boot_cpus(void);
-extern void smp_store_cpu_info(int id); /* Store per CPU info (like the initial udelay numbers */
-
-/*
- * This function is needed by all SMP systems. It must _always_ be valid
- * from the initial startup. We map APIC_BASE very early in page_setup(),
- * so this is correct in the x86 case.
- */
-
-#define smp_processor_id() (current->processor)
-
-#endif /* !__ASSEMBLY__ */
-
-#define NO_PROC_ID 0xFF /* No processor magic marker */
-
-/*
- * This magic constant controls our willingness to transfer
- * a process across CPUs. Such a transfer incurs misses on the L1
- * cache, and on a P6 or P5 with multiple L2 caches L2 hits. My
- * gut feeling is this will vary by board in value. For a board
- * with separate L2 cache it probably depends also on the RSS, and
- * for a board with shared L2 cache it ought to decay fast as other
- * processes are run.
- */
-
-#define PROC_CHANGE_PENALTY 15 /* Schedule penalty */
-
-#endif
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/suspend.h b/xenolinux-2.4.25-sparse/include/asm-xen/suspend.h
deleted file mode 100644
index 0a9c8e74a9..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/suspend.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/******************************************************************************
- * suspend.h
- *
- * NB. This file is part of the Xenolinux interface with Xenoserver control
- * software. It can be included in such software without invoking the GPL.
- *
- * Copyright (c) 2003, K A Fraser
- */
-
-#ifndef __ASM_XEN_SUSPEND_H__
-#define __ASM_XEN_SUSPEND_H__
-
-typedef struct suspend_record_st {
- /* To be filled in before resume. */
- extended_start_info_t resume_info;
- /*
- * The number of a machine frame containing, in sequence, the number of
- * each machine frame that contains PFN -> MFN translation table data.
- */
- unsigned long pfn_to_mfn_frame_list;
- /* Number of entries in the PFN -> MFN translation table. */
- unsigned long nr_pfns;
-} suspend_record_t;
-
-#endif /* __ASM_XEN_SUSPEND_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/synch_bitops.h b/xenolinux-2.4.25-sparse/include/asm-xen/synch_bitops.h
deleted file mode 100644
index 8093de0ac9..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/synch_bitops.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef __XEN_SYNCH_BITOPS_H__
-#define __XEN_SYNCH_BITOPS_H__
-
-/*
- * Copyright 1992, Linus Torvalds.
- * Heavily modified to provide guaranteed strong synchronisation
- * when communicating with Xen or other guest OSes running on other CPUs.
- */
-
-#include <linux/config.h>
-
-#define ADDR (*(volatile long *) addr)
-
-static __inline__ void synch_set_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__ (
- "lock btsl %1,%0"
- : "=m" (ADDR) : "Ir" (nr) : "memory" );
-}
-
-static __inline__ void synch_clear_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__ (
- "lock btrl %1,%0"
- : "=m" (ADDR) : "Ir" (nr) : "memory" );
-}
-
-static __inline__ void synch_change_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__ (
- "lock btcl %1,%0"
- : "=m" (ADDR) : "Ir" (nr) : "memory" );
-}
-
-static __inline__ int synch_test_and_set_bit(int nr, volatile void * addr)
-{
- int oldbit;
- __asm__ __volatile__ (
- "lock btsl %2,%1\n\tsbbl %0,%0"
- : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
- return oldbit;
-}
-
-static __inline__ int synch_test_and_clear_bit(int nr, volatile void * addr)
-{
- int oldbit;
- __asm__ __volatile__ (
- "lock btrl %2,%1\n\tsbbl %0,%0"
- : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
- return oldbit;
-}
-
-static __inline__ int synch_test_and_change_bit(int nr, volatile void * addr)
-{
- int oldbit;
-
- __asm__ __volatile__ (
- "lock btcl %2,%1\n\tsbbl %0,%0"
- : "=r" (oldbit), "=m" (ADDR) : "Ir" (nr) : "memory");
- return oldbit;
-}
-
-static __inline__ int synch_const_test_bit(int nr, const volatile void * addr)
-{
- return ((1UL << (nr & 31)) &
- (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
-}
-
-static __inline__ int synch_var_test_bit(int nr, volatile void * addr)
-{
- int oldbit;
- __asm__ __volatile__ (
- "btl %2,%1\n\tsbbl %0,%0"
- : "=r" (oldbit) : "m" (ADDR), "Ir" (nr) );
- return oldbit;
-}
-
-#define synch_test_bit(nr,addr) \
-(__builtin_constant_p(nr) ? \
- synch_const_test_bit((nr),(addr)) : \
- synch_var_test_bit((nr),(addr)))
-
-#endif /* __XEN_SYNCH_BITOPS_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/system.h b/xenolinux-2.4.25-sparse/include/asm-xen/system.h
deleted file mode 100644
index 6a8e352ac5..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/system.h
+++ /dev/null
@@ -1,408 +0,0 @@
-#ifndef __ASM_SYSTEM_H
-#define __ASM_SYSTEM_H
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/bitops.h>
-#include <asm/synch_bitops.h>
-#include <asm/segment.h>
-#include <asm/hypervisor.h>
-#include <asm/evtchn.h>
-
-#ifdef __KERNEL__
-
-struct task_struct;
-extern void FASTCALL(__switch_to(struct task_struct *prev,
- struct task_struct *next));
-
-#define prepare_to_switch() \
-do { \
- struct thread_struct *__t = &current->thread; \
- __asm__ __volatile__ ( "movl %%fs,%0" : "=m" (*(int *)&__t->fs) ); \
- __asm__ __volatile__ ( "movl %%gs,%0" : "=m" (*(int *)&__t->gs) ); \
-} while (0)
-#define switch_to(prev,next,last) do { \
- asm volatile("pushl %%esi\n\t" \
- "pushl %%edi\n\t" \
- "pushl %%ebp\n\t" \
- "movl %%esp,%0\n\t" /* save ESP */ \
- "movl %3,%%esp\n\t" /* restore ESP */ \
- "movl $1f,%1\n\t" /* save EIP */ \
- "pushl %4\n\t" /* restore EIP */ \
- "jmp __switch_to\n" \
- "1:\t" \
- "popl %%ebp\n\t" \
- "popl %%edi\n\t" \
- "popl %%esi\n\t" \
- :"=m" (prev->thread.esp),"=m" (prev->thread.eip), \
- "=b" (last) \
- :"m" (next->thread.esp),"m" (next->thread.eip), \
- "a" (prev), "d" (next), \
- "b" (prev)); \
-} while (0)
-
-#define _set_base(addr,base) do { unsigned long __pr; \
-__asm__ __volatile__ ("movw %%dx,%1\n\t" \
- "rorl $16,%%edx\n\t" \
- "movb %%dl,%2\n\t" \
- "movb %%dh,%3" \
- :"=&d" (__pr) \
- :"m" (*((addr)+2)), \
- "m" (*((addr)+4)), \
- "m" (*((addr)+7)), \
- "0" (base) \
- ); } while(0)
-
-#define _set_limit(addr,limit) do { unsigned long __lr; \
-__asm__ __volatile__ ("movw %%dx,%1\n\t" \
- "rorl $16,%%edx\n\t" \
- "movb %2,%%dh\n\t" \
- "andb $0xf0,%%dh\n\t" \
- "orb %%dh,%%dl\n\t" \
- "movb %%dl,%2" \
- :"=&d" (__lr) \
- :"m" (*(addr)), \
- "m" (*((addr)+6)), \
- "0" (limit) \
- ); } while(0)
-
-#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) )
-#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , ((limit)-1)>>12 )
-
-static inline unsigned long _get_base(char * addr)
-{
- unsigned long __base;
- __asm__("movb %3,%%dh\n\t"
- "movb %2,%%dl\n\t"
- "shll $16,%%edx\n\t"
- "movw %1,%%dx"
- :"=&d" (__base)
- :"m" (*((addr)+2)),
- "m" (*((addr)+4)),
- "m" (*((addr)+7)));
- return __base;
-}
-
-#define get_base(ldt) _get_base( ((char *)&(ldt)) )
-
-/*
- * Load a segment. Fall back on loading the zero
- * segment if something goes wrong..
- */
-#define loadsegment(seg,value) \
- asm volatile("\n" \
- "1:\t" \
- "movl %0,%%" #seg "\n" \
- "2:\n" \
- ".section .fixup,\"ax\"\n" \
- "3:\t" \
- "pushl $0\n\t" \
- "popl %%" #seg "\n\t" \
- "jmp 2b\n" \
- ".previous\n" \
- ".section __ex_table,\"a\"\n\t" \
- ".align 4\n\t" \
- ".long 1b,3b\n" \
- ".previous" \
- : :"m" (*(unsigned int *)&(value)))
-
-/* NB. 'clts' is done for us by Xen during virtual trap. */
-#define clts() ((void)0)
-#define stts() (HYPERVISOR_fpu_taskswitch())
-
-#endif /* __KERNEL__ */
-
-static inline unsigned long get_limit(unsigned long segment)
-{
- unsigned long __limit;
- __asm__("lsll %1,%0"
- :"=r" (__limit):"r" (segment));
- return __limit+1;
-}
-
-#define nop() __asm__ __volatile__ ("nop")
-
-#define xchg(ptr,v) ((__typeof__(*(ptr)))__xchg((unsigned long)(v),(ptr),sizeof(*(ptr))))
-
-#define tas(ptr) (xchg((ptr),1))
-
-struct __xchg_dummy { unsigned long a[100]; };
-#define __xg(x) ((struct __xchg_dummy *)(x))
-
-
-/*
- * The semantics of XCHGCMP8B are a bit strange, this is why
- * there is a loop and the loading of %%eax and %%edx has to
- * be inside. This inlines well in most cases, the cached
- * cost is around ~38 cycles. (in the future we might want
- * to do an SIMD/3DNOW!/MMX/FPU 64-bit store here, but that
- * might have an implicit FPU-save as a cost, so it's not
- * clear which path to go.)
- *
- * chmxchg8b must be used with the lock prefix here to allow
- * the instruction to be executed atomically, see page 3-102
- * of the instruction set reference 24319102.pdf. We need
- * the reader side to see the coherent 64bit value.
- */
-static inline void __set_64bit (unsigned long long * ptr,
- unsigned int low, unsigned int high)
-{
- __asm__ __volatile__ (
- "\n1:\t"
- "movl (%0), %%eax\n\t"
- "movl 4(%0), %%edx\n\t"
- "lock cmpxchg8b (%0)\n\t"
- "jnz 1b"
- : /* no outputs */
- : "D"(ptr),
- "b"(low),
- "c"(high)
- : "ax","dx","memory");
-}
-
-static inline void __set_64bit_constant (unsigned long long *ptr,
- unsigned long long value)
-{
- __set_64bit(ptr,(unsigned int)(value), (unsigned int)((value)>>32ULL));
-}
-#define ll_low(x) *(((unsigned int*)&(x))+0)
-#define ll_high(x) *(((unsigned int*)&(x))+1)
-
-static inline void __set_64bit_var (unsigned long long *ptr,
- unsigned long long value)
-{
- __set_64bit(ptr,ll_low(value), ll_high(value));
-}
-
-#define set_64bit(ptr,value) \
-(__builtin_constant_p(value) ? \
- __set_64bit_constant(ptr, value) : \
- __set_64bit_var(ptr, value) )
-
-#define _set_64bit(ptr,value) \
-(__builtin_constant_p(value) ? \
- __set_64bit(ptr, (unsigned int)(value), (unsigned int)((value)>>32ULL) ) : \
- __set_64bit(ptr, ll_low(value), ll_high(value)) )
-
-/*
- * Note: no "lock" prefix even on SMP: xchg always implies lock anyway
- * Note 2: xchg has side effect, so that attribute volatile is necessary,
- * but generally the primitive is invalid, *ptr is output argument. --ANK
- */
-static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-{
- switch (size) {
- case 1:
- __asm__ __volatile__("xchgb %b0,%1"
- :"=q" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- case 2:
- __asm__ __volatile__("xchgw %w0,%1"
- :"=r" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- case 4:
- __asm__ __volatile__("xchgl %0,%1"
- :"=r" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- }
- return x;
-}
-
-/*
- * Atomic compare and exchange. Compare OLD with MEM, if identical,
- * store NEW in MEM. Return the initial value in MEM. Success is
- * indicated by comparing RETURN with OLD.
- */
-
-#ifdef CONFIG_X86_CMPXCHG
-#define __HAVE_ARCH_CMPXCHG 1
-
-static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
- unsigned long new, int size)
-{
- unsigned long prev;
- switch (size) {
- case 1:
- __asm__ __volatile__("lock cmpxchgb %b1,%2"
- : "=a"(prev)
- : "q"(new), "m"(*__xg(ptr)), "0"(old)
- : "memory");
- return prev;
- case 2:
- __asm__ __volatile__("lock cmpxchgw %w1,%2"
- : "=a"(prev)
- : "q"(new), "m"(*__xg(ptr)), "0"(old)
- : "memory");
- return prev;
- case 4:
- __asm__ __volatile__("lock cmpxchgl %1,%2"
- : "=a"(prev)
- : "q"(new), "m"(*__xg(ptr)), "0"(old)
- : "memory");
- return prev;
- }
- return old;
-}
-
-#define cmpxchg(ptr,o,n)\
- ((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o),\
- (unsigned long)(n),sizeof(*(ptr))))
-
-#else
-/* Compiling for a 386 proper. Is it worth implementing via cli/sti? */
-#endif
-
-/*
- * Force strict CPU ordering.
- * And yes, this is required on UP too when we're talking
- * to devices.
- *
- * For now, "wmb()" doesn't actually do anything, as all
- * Intel CPU's follow what Intel calls a *Processor Order*,
- * in which all writes are seen in the program order even
- * outside the CPU.
- *
- * I expect future Intel CPU's to have a weaker ordering,
- * but I'd also expect them to finally get their act together
- * and add some real memory barriers if so.
- *
- * Some non intel clones support out of order store. wmb() ceases to be a
- * nop for these.
- */
-
-#define mb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
-#define rmb() mb()
-
-#ifdef CONFIG_X86_OOSTORE
-#define wmb() __asm__ __volatile__ ("lock; addl $0,0(%%esp)": : :"memory")
-#else
-#define wmb() __asm__ __volatile__ ("": : :"memory")
-#endif
-
-#ifdef CONFIG_SMP
-#define smp_mb() mb()
-#define smp_rmb() rmb()
-#define smp_wmb() wmb()
-#define set_mb(var, value) do { xchg(&var, value); } while (0)
-#else
-#define smp_mb() barrier()
-#define smp_rmb() barrier()
-#define smp_wmb() barrier()
-#define set_mb(var, value) do { var = value; barrier(); } while (0)
-#endif
-
-#define set_wmb(var, value) do { var = value; wmb(); } while (0)
-
-#define safe_halt() ((void)0)
-
-/*
- * The use of 'barrier' in the following reflects their use as local-lock
- * operations. Reentrancy must be prevented (e.g., __cli()) /before/ following
- * critical operations are executed. All critical operatiosn must complete
- * /before/ reentrancy is permitted (e.g., __sti()). Alpha architecture also
- * includes these barriers, for example.
- */
-
-#define __cli() \
-do { \
- HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask = 1; \
- barrier(); \
-} while (0)
-
-#define __sti() \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- barrier(); \
- _shared->vcpu_data[0].evtchn_upcall_mask = 0; \
- barrier(); /* unmask then check (avoid races) */ \
- if ( unlikely(_shared->vcpu_data[0].evtchn_upcall_pending) ) \
- evtchn_do_upcall(NULL); \
-} while (0)
-
-#define __save_flags(x) \
-do { \
- (x) = HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask; \
-} while (0)
-
-#define __restore_flags(x) \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- barrier(); \
- if ( (_shared->vcpu_data[0].evtchn_upcall_mask = x) == 0 ) { \
- barrier(); /* unmask then check (avoid races) */ \
- if ( unlikely(_shared->vcpu_data[0].evtchn_upcall_pending) ) \
- evtchn_do_upcall(NULL); \
- } \
-} while (0)
-
-#define __save_and_cli(x) \
-do { \
- (x) = HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask; \
- HYPERVISOR_shared_info->vcpu_data[0].evtchn_upcall_mask = 1; \
- barrier(); \
-} while (0)
-
-#define __save_and_sti(x) \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- barrier(); \
- (x) = _shared->vcpu_data[0].evtchn_upcall_mask; \
- _shared->vcpu_data[0].evtchn_upcall_mask = 0; \
- barrier(); /* unmask then check (avoid races) */ \
- if ( unlikely(_shared->vcpu_data[0].evtchn_upcall_pending) ) \
- evtchn_do_upcall(NULL); \
-} while (0)
-
-#define local_irq_save(x) __save_and_cli(x)
-#define local_irq_set(x) __save_and_sti(x)
-#define local_irq_restore(x) __restore_flags(x)
-#define local_irq_disable() __cli()
-#define local_irq_enable() __sti()
-
-
-#ifdef CONFIG_SMP
-#error no SMP
-extern void __global_cli(void);
-extern void __global_sti(void);
-extern unsigned long __global_save_flags(void);
-extern void __global_restore_flags(unsigned long);
-#define cli() __global_cli()
-#define sti() __global_sti()
-#define save_flags(x) ((x)=__global_save_flags())
-#define restore_flags(x) __global_restore_flags(x)
-#define save_and_cli(x) do { save_flags(x); cli(); } while(0);
-#define save_and_sti(x) do { save_flags(x); sti(); } while(0);
-
-#else
-
-#define cli() __cli()
-#define sti() __sti()
-#define save_flags(x) __save_flags(x)
-#define restore_flags(x) __restore_flags(x)
-#define save_and_cli(x) __save_and_cli(x)
-#define save_and_sti(x) __save_and_sti(x)
-
-#endif
-
-/*
- * disable hlt during certain critical i/o operations
- */
-#define HAVE_DISABLE_HLT
-void disable_hlt(void);
-void enable_hlt(void);
-
-extern unsigned long dmi_broken;
-extern int is_sony_vaio_laptop;
-
-#define BROKEN_ACPI_Sx 0x0001
-#define BROKEN_INIT_AFTER_S1 0x0002
-#define BROKEN_PNP_BIOS 0x0004
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/vga.h b/xenolinux-2.4.25-sparse/include/asm-xen/vga.h
deleted file mode 100644
index d0624cf480..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/vga.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Access to VGA videoram
- *
- * (c) 1998 Martin Mares <mj@ucw.cz>
- */
-
-#ifndef _LINUX_ASM_VGA_H_
-#define _LINUX_ASM_VGA_H_
-
-#include <asm/io.h>
-
-extern unsigned char *vgacon_mmap;
-
-static unsigned long VGA_MAP_MEM(unsigned long x)
-{
- if( vgacon_mmap == NULL )
- {
- /* This is our first time in this function. This whole thing
- is a rather grim hack. We know we're going to get asked
- to map a 32KB region between 0xb0000 and 0xb8000 because
- that's what VGAs are. We used the boot time permanent
- fixed map region, and map it to machine pages.
- */
- if( x != 0xb8000 )
- panic("Argghh! VGA Console is weird. 1:%08lx\n",x);
-
- vgacon_mmap = (unsigned char*) bt_ioremap( 0xa0000, 128*1024 );
- return (unsigned long) (vgacon_mmap+x-0xa0000);
- }
- else
- {
- if( x != 0xc0000 && x != 0xa0000 ) /* vidmem_end or charmap fonts */
- panic("Argghh! VGA Console is weird. 2:%08lx\n",x);
- return (unsigned long) (vgacon_mmap+x-0xa0000);
- }
- return 0;
-}
-
-static inline unsigned char vga_readb(unsigned char * x) { return (*(x)); }
-static inline void vga_writeb(unsigned char x, unsigned char *y) { *(y) = (x); }
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/xen_proc.h b/xenolinux-2.4.25-sparse/include/asm-xen/xen_proc.h
deleted file mode 100644
index d62791e95c..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/xen_proc.h
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#ifndef __ASM_XEN_PROC_H__
-#define __ASM_XEN_PROC_H__
-
-#include <linux/config.h>
-#include <linux/proc_fs.h>
-
-extern struct proc_dir_entry *create_xen_proc_entry(
- const char *name, mode_t mode);
-extern void remove_xen_proc_entry(
- const char *name);
-
-#endif /* __ASM_XEN_PROC_H__ */
diff --git a/xenolinux-2.4.25-sparse/include/asm-xen/xor.h b/xenolinux-2.4.25-sparse/include/asm-xen/xor.h
deleted file mode 100644
index 9e6cca8a8a..0000000000
--- a/xenolinux-2.4.25-sparse/include/asm-xen/xor.h
+++ /dev/null
@@ -1,879 +0,0 @@
-/*
- * include/asm-i386/xor.h
- *
- * Optimized RAID-5 checksumming functions for MMX and SSE.
- *
- * 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.
- *
- * You should have received a copy of the GNU General Public License
- * (for example /usr/src/linux/COPYING); if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- * High-speed RAID5 checksumming functions utilizing MMX instructions.
- * Copyright (C) 1998 Ingo Molnar.
- */
-
-#define FPU_SAVE \
- do { \
- if (!(current->flags & PF_USEDFPU)) \
- clts(); \
- __asm__ __volatile__ ("fsave %0; fwait": "=m"(fpu_save[0])); \
- } while (0)
-
-#define FPU_RESTORE \
- do { \
- __asm__ __volatile__ ("frstor %0": : "m"(fpu_save[0])); \
- if (!(current->flags & PF_USEDFPU)) \
- stts(); \
- } while (0)
-
-#define LD(x,y) " movq 8*("#x")(%1), %%mm"#y" ;\n"
-#define ST(x,y) " movq %%mm"#y", 8*("#x")(%1) ;\n"
-#define XO1(x,y) " pxor 8*("#x")(%2), %%mm"#y" ;\n"
-#define XO2(x,y) " pxor 8*("#x")(%3), %%mm"#y" ;\n"
-#define XO3(x,y) " pxor 8*("#x")(%4), %%mm"#y" ;\n"
-#define XO4(x,y) " pxor 8*("#x")(%5), %%mm"#y" ;\n"
-
-
-static void
-xor_pII_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
- unsigned long lines = bytes >> 7;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- XO1(i,0) \
- ST(i,0) \
- XO1(i+1,1) \
- ST(i+1,1) \
- XO1(i+2,2) \
- ST(i+2,2) \
- XO1(i+3,3) \
- ST(i+3,3)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $128, %1 ;\n"
- " addl $128, %2 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2)
- :
- : "memory");
-
- FPU_RESTORE;
-}
-
-static void
-xor_pII_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3)
-{
- unsigned long lines = bytes >> 7;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- XO2(i,0) \
- ST(i,0) \
- XO2(i+1,1) \
- ST(i+1,1) \
- XO2(i+2,2) \
- ST(i+2,2) \
- XO2(i+3,3) \
- ST(i+3,3)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $128, %1 ;\n"
- " addl $128, %2 ;\n"
- " addl $128, %3 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3)
- :
- : "memory");
-
- FPU_RESTORE;
-}
-
-static void
-xor_pII_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4)
-{
- unsigned long lines = bytes >> 7;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- XO2(i,0) \
- XO2(i+1,1) \
- XO2(i+2,2) \
- XO2(i+3,3) \
- XO3(i,0) \
- ST(i,0) \
- XO3(i+1,1) \
- ST(i+1,1) \
- XO3(i+2,2) \
- ST(i+2,2) \
- XO3(i+3,3) \
- ST(i+3,3)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $128, %1 ;\n"
- " addl $128, %2 ;\n"
- " addl $128, %3 ;\n"
- " addl $128, %4 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4)
- :
- : "memory");
-
- FPU_RESTORE;
-}
-
-
-static void
-xor_pII_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
- unsigned long lines = bytes >> 7;
- char fpu_save[108];
-
- FPU_SAVE;
-
- /* need to save/restore p4/p5 manually otherwise gcc's 10 argument
- limit gets exceeded (+ counts as two arguments) */
- __asm__ __volatile__ (
- " pushl %4\n"
- " pushl %5\n"
-#undef BLOCK
-#define BLOCK(i) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- XO2(i,0) \
- XO2(i+1,1) \
- XO2(i+2,2) \
- XO2(i+3,3) \
- XO3(i,0) \
- XO3(i+1,1) \
- XO3(i+2,2) \
- XO3(i+3,3) \
- XO4(i,0) \
- ST(i,0) \
- XO4(i+1,1) \
- ST(i+1,1) \
- XO4(i+2,2) \
- ST(i+2,2) \
- XO4(i+3,3) \
- ST(i+3,3)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $128, %1 ;\n"
- " addl $128, %2 ;\n"
- " addl $128, %3 ;\n"
- " addl $128, %4 ;\n"
- " addl $128, %5 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- " popl %5\n"
- " popl %4\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3)
- : "r" (p4), "r" (p5)
- : "memory");
-
- FPU_RESTORE;
-}
-
-#undef LD
-#undef XO1
-#undef XO2
-#undef XO3
-#undef XO4
-#undef ST
-#undef BLOCK
-
-static void
-xor_p5_mmx_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
- unsigned long lines = bytes >> 6;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
- " .align 32 ;\n"
- " 1: ;\n"
- " movq (%1), %%mm0 ;\n"
- " movq 8(%1), %%mm1 ;\n"
- " pxor (%2), %%mm0 ;\n"
- " movq 16(%1), %%mm2 ;\n"
- " movq %%mm0, (%1) ;\n"
- " pxor 8(%2), %%mm1 ;\n"
- " movq 24(%1), %%mm3 ;\n"
- " movq %%mm1, 8(%1) ;\n"
- " pxor 16(%2), %%mm2 ;\n"
- " movq 32(%1), %%mm4 ;\n"
- " movq %%mm2, 16(%1) ;\n"
- " pxor 24(%2), %%mm3 ;\n"
- " movq 40(%1), %%mm5 ;\n"
- " movq %%mm3, 24(%1) ;\n"
- " pxor 32(%2), %%mm4 ;\n"
- " movq 48(%1), %%mm6 ;\n"
- " movq %%mm4, 32(%1) ;\n"
- " pxor 40(%2), %%mm5 ;\n"
- " movq 56(%1), %%mm7 ;\n"
- " movq %%mm5, 40(%1) ;\n"
- " pxor 48(%2), %%mm6 ;\n"
- " pxor 56(%2), %%mm7 ;\n"
- " movq %%mm6, 48(%1) ;\n"
- " movq %%mm7, 56(%1) ;\n"
-
- " addl $64, %1 ;\n"
- " addl $64, %2 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2)
- :
- : "memory");
-
- FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3)
-{
- unsigned long lines = bytes >> 6;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
- " .align 32,0x90 ;\n"
- " 1: ;\n"
- " movq (%1), %%mm0 ;\n"
- " movq 8(%1), %%mm1 ;\n"
- " pxor (%2), %%mm0 ;\n"
- " movq 16(%1), %%mm2 ;\n"
- " pxor 8(%2), %%mm1 ;\n"
- " pxor (%3), %%mm0 ;\n"
- " pxor 16(%2), %%mm2 ;\n"
- " movq %%mm0, (%1) ;\n"
- " pxor 8(%3), %%mm1 ;\n"
- " pxor 16(%3), %%mm2 ;\n"
- " movq 24(%1), %%mm3 ;\n"
- " movq %%mm1, 8(%1) ;\n"
- " movq 32(%1), %%mm4 ;\n"
- " movq 40(%1), %%mm5 ;\n"
- " pxor 24(%2), %%mm3 ;\n"
- " movq %%mm2, 16(%1) ;\n"
- " pxor 32(%2), %%mm4 ;\n"
- " pxor 24(%3), %%mm3 ;\n"
- " pxor 40(%2), %%mm5 ;\n"
- " movq %%mm3, 24(%1) ;\n"
- " pxor 32(%3), %%mm4 ;\n"
- " pxor 40(%3), %%mm5 ;\n"
- " movq 48(%1), %%mm6 ;\n"
- " movq %%mm4, 32(%1) ;\n"
- " movq 56(%1), %%mm7 ;\n"
- " pxor 48(%2), %%mm6 ;\n"
- " movq %%mm5, 40(%1) ;\n"
- " pxor 56(%2), %%mm7 ;\n"
- " pxor 48(%3), %%mm6 ;\n"
- " pxor 56(%3), %%mm7 ;\n"
- " movq %%mm6, 48(%1) ;\n"
- " movq %%mm7, 56(%1) ;\n"
-
- " addl $64, %1 ;\n"
- " addl $64, %2 ;\n"
- " addl $64, %3 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3)
- :
- : "memory" );
-
- FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4)
-{
- unsigned long lines = bytes >> 6;
- char fpu_save[108];
-
- FPU_SAVE;
-
- __asm__ __volatile__ (
- " .align 32,0x90 ;\n"
- " 1: ;\n"
- " movq (%1), %%mm0 ;\n"
- " movq 8(%1), %%mm1 ;\n"
- " pxor (%2), %%mm0 ;\n"
- " movq 16(%1), %%mm2 ;\n"
- " pxor 8(%2), %%mm1 ;\n"
- " pxor (%3), %%mm0 ;\n"
- " pxor 16(%2), %%mm2 ;\n"
- " pxor 8(%3), %%mm1 ;\n"
- " pxor (%4), %%mm0 ;\n"
- " movq 24(%1), %%mm3 ;\n"
- " pxor 16(%3), %%mm2 ;\n"
- " pxor 8(%4), %%mm1 ;\n"
- " movq %%mm0, (%1) ;\n"
- " movq 32(%1), %%mm4 ;\n"
- " pxor 24(%2), %%mm3 ;\n"
- " pxor 16(%4), %%mm2 ;\n"
- " movq %%mm1, 8(%1) ;\n"
- " movq 40(%1), %%mm5 ;\n"
- " pxor 32(%2), %%mm4 ;\n"
- " pxor 24(%3), %%mm3 ;\n"
- " movq %%mm2, 16(%1) ;\n"
- " pxor 40(%2), %%mm5 ;\n"
- " pxor 32(%3), %%mm4 ;\n"
- " pxor 24(%4), %%mm3 ;\n"
- " movq %%mm3, 24(%1) ;\n"
- " movq 56(%1), %%mm7 ;\n"
- " movq 48(%1), %%mm6 ;\n"
- " pxor 40(%3), %%mm5 ;\n"
- " pxor 32(%4), %%mm4 ;\n"
- " pxor 48(%2), %%mm6 ;\n"
- " movq %%mm4, 32(%1) ;\n"
- " pxor 56(%2), %%mm7 ;\n"
- " pxor 40(%4), %%mm5 ;\n"
- " pxor 48(%3), %%mm6 ;\n"
- " pxor 56(%3), %%mm7 ;\n"
- " movq %%mm5, 40(%1) ;\n"
- " pxor 48(%4), %%mm6 ;\n"
- " pxor 56(%4), %%mm7 ;\n"
- " movq %%mm6, 48(%1) ;\n"
- " movq %%mm7, 56(%1) ;\n"
-
- " addl $64, %1 ;\n"
- " addl $64, %2 ;\n"
- " addl $64, %3 ;\n"
- " addl $64, %4 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4)
- :
- : "memory");
-
- FPU_RESTORE;
-}
-
-static void
-xor_p5_mmx_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
- unsigned long lines = bytes >> 6;
- char fpu_save[108];
-
- FPU_SAVE;
-
- /* need to save p4/p5 manually to not exceed gcc's 10 argument limit */
- __asm__ __volatile__ (
- " pushl %4\n"
- " pushl %5\n"
- " .align 32,0x90 ;\n"
- " 1: ;\n"
- " movq (%1), %%mm0 ;\n"
- " movq 8(%1), %%mm1 ;\n"
- " pxor (%2), %%mm0 ;\n"
- " pxor 8(%2), %%mm1 ;\n"
- " movq 16(%1), %%mm2 ;\n"
- " pxor (%3), %%mm0 ;\n"
- " pxor 8(%3), %%mm1 ;\n"
- " pxor 16(%2), %%mm2 ;\n"
- " pxor (%4), %%mm0 ;\n"
- " pxor 8(%4), %%mm1 ;\n"
- " pxor 16(%3), %%mm2 ;\n"
- " movq 24(%1), %%mm3 ;\n"
- " pxor (%5), %%mm0 ;\n"
- " pxor 8(%5), %%mm1 ;\n"
- " movq %%mm0, (%1) ;\n"
- " pxor 16(%4), %%mm2 ;\n"
- " pxor 24(%2), %%mm3 ;\n"
- " movq %%mm1, 8(%1) ;\n"
- " pxor 16(%5), %%mm2 ;\n"
- " pxor 24(%3), %%mm3 ;\n"
- " movq 32(%1), %%mm4 ;\n"
- " movq %%mm2, 16(%1) ;\n"
- " pxor 24(%4), %%mm3 ;\n"
- " pxor 32(%2), %%mm4 ;\n"
- " movq 40(%1), %%mm5 ;\n"
- " pxor 24(%5), %%mm3 ;\n"
- " pxor 32(%3), %%mm4 ;\n"
- " pxor 40(%2), %%mm5 ;\n"
- " movq %%mm3, 24(%1) ;\n"
- " pxor 32(%4), %%mm4 ;\n"
- " pxor 40(%3), %%mm5 ;\n"
- " movq 48(%1), %%mm6 ;\n"
- " movq 56(%1), %%mm7 ;\n"
- " pxor 32(%5), %%mm4 ;\n"
- " pxor 40(%4), %%mm5 ;\n"
- " pxor 48(%2), %%mm6 ;\n"
- " pxor 56(%2), %%mm7 ;\n"
- " movq %%mm4, 32(%1) ;\n"
- " pxor 48(%3), %%mm6 ;\n"
- " pxor 56(%3), %%mm7 ;\n"
- " pxor 40(%5), %%mm5 ;\n"
- " pxor 48(%4), %%mm6 ;\n"
- " pxor 56(%4), %%mm7 ;\n"
- " movq %%mm5, 40(%1) ;\n"
- " pxor 48(%5), %%mm6 ;\n"
- " pxor 56(%5), %%mm7 ;\n"
- " movq %%mm6, 48(%1) ;\n"
- " movq %%mm7, 56(%1) ;\n"
-
- " addl $64, %1 ;\n"
- " addl $64, %2 ;\n"
- " addl $64, %3 ;\n"
- " addl $64, %4 ;\n"
- " addl $64, %5 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- " popl %5\n"
- " popl %4\n"
- : "+g" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3)
- : "r" (p4), "r" (p5)
- : "memory");
-
- FPU_RESTORE;
-}
-
-static struct xor_block_template xor_block_pII_mmx = {
- name: "pII_mmx",
- do_2: xor_pII_mmx_2,
- do_3: xor_pII_mmx_3,
- do_4: xor_pII_mmx_4,
- do_5: xor_pII_mmx_5,
-};
-
-static struct xor_block_template xor_block_p5_mmx = {
- name: "p5_mmx",
- do_2: xor_p5_mmx_2,
- do_3: xor_p5_mmx_3,
- do_4: xor_p5_mmx_4,
- do_5: xor_p5_mmx_5,
-};
-
-#undef FPU_SAVE
-#undef FPU_RESTORE
-
-/*
- * Cache avoiding checksumming functions utilizing KNI instructions
- * Copyright (C) 1999 Zach Brown (with obvious credit due Ingo)
- */
-
-#define XMMS_SAVE \
- if (!(current->flags & PF_USEDFPU)) \
- clts(); \
- __asm__ __volatile__ ( \
- "movups %%xmm0,(%1) ;\n\t" \
- "movups %%xmm1,0x10(%1) ;\n\t" \
- "movups %%xmm2,0x20(%1) ;\n\t" \
- "movups %%xmm3,0x30(%1) ;\n\t" \
- : "=&r" (cr0) \
- : "r" (xmm_save) \
- : "memory")
-
-#define XMMS_RESTORE \
- __asm__ __volatile__ ( \
- "sfence ;\n\t" \
- "movups (%1),%%xmm0 ;\n\t" \
- "movups 0x10(%1),%%xmm1 ;\n\t" \
- "movups 0x20(%1),%%xmm2 ;\n\t" \
- "movups 0x30(%1),%%xmm3 ;\n\t" \
- : \
- : "r" (cr0), "r" (xmm_save) \
- : "memory"); \
- if (!(current->flags & PF_USEDFPU)) \
- stts()
-
-#define ALIGN16 __attribute__((aligned(16)))
-
-#define OFFS(x) "16*("#x")"
-#define PF_OFFS(x) "256+16*("#x")"
-#define PF0(x) " prefetchnta "PF_OFFS(x)"(%1) ;\n"
-#define LD(x,y) " movaps "OFFS(x)"(%1), %%xmm"#y" ;\n"
-#define ST(x,y) " movaps %%xmm"#y", "OFFS(x)"(%1) ;\n"
-#define PF1(x) " prefetchnta "PF_OFFS(x)"(%2) ;\n"
-#define PF2(x) " prefetchnta "PF_OFFS(x)"(%3) ;\n"
-#define PF3(x) " prefetchnta "PF_OFFS(x)"(%4) ;\n"
-#define PF4(x) " prefetchnta "PF_OFFS(x)"(%5) ;\n"
-#define PF5(x) " prefetchnta "PF_OFFS(x)"(%6) ;\n"
-#define XO1(x,y) " xorps "OFFS(x)"(%2), %%xmm"#y" ;\n"
-#define XO2(x,y) " xorps "OFFS(x)"(%3), %%xmm"#y" ;\n"
-#define XO3(x,y) " xorps "OFFS(x)"(%4), %%xmm"#y" ;\n"
-#define XO4(x,y) " xorps "OFFS(x)"(%5), %%xmm"#y" ;\n"
-#define XO5(x,y) " xorps "OFFS(x)"(%6), %%xmm"#y" ;\n"
-
-
-static void
-xor_sse_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
-{
- unsigned long lines = bytes >> 8;
- char xmm_save[16*4] ALIGN16;
- int cr0;
-
- XMMS_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- LD(i,0) \
- LD(i+1,1) \
- PF1(i) \
- PF1(i+2) \
- LD(i+2,2) \
- LD(i+3,3) \
- PF0(i+4) \
- PF0(i+6) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- ST(i,0) \
- ST(i+1,1) \
- ST(i+2,2) \
- ST(i+3,3) \
-
-
- PF0(0)
- PF0(2)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $256, %1 ;\n"
- " addl $256, %2 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2)
- :
- : "memory");
-
- XMMS_RESTORE;
-}
-
-static void
-xor_sse_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3)
-{
- unsigned long lines = bytes >> 8;
- char xmm_save[16*4] ALIGN16;
- int cr0;
-
- XMMS_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- PF1(i) \
- PF1(i+2) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- PF2(i) \
- PF2(i+2) \
- PF0(i+4) \
- PF0(i+6) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- XO2(i,0) \
- XO2(i+1,1) \
- XO2(i+2,2) \
- XO2(i+3,3) \
- ST(i,0) \
- ST(i+1,1) \
- ST(i+2,2) \
- ST(i+3,3) \
-
-
- PF0(0)
- PF0(2)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $256, %1 ;\n"
- " addl $256, %2 ;\n"
- " addl $256, %3 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r"(p2), "+r"(p3)
- :
- : "memory" );
-
- XMMS_RESTORE;
-}
-
-static void
-xor_sse_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4)
-{
- unsigned long lines = bytes >> 8;
- char xmm_save[16*4] ALIGN16;
- int cr0;
-
- XMMS_SAVE;
-
- __asm__ __volatile__ (
-#undef BLOCK
-#define BLOCK(i) \
- PF1(i) \
- PF1(i+2) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- PF2(i) \
- PF2(i+2) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- PF3(i) \
- PF3(i+2) \
- PF0(i+4) \
- PF0(i+6) \
- XO2(i,0) \
- XO2(i+1,1) \
- XO2(i+2,2) \
- XO2(i+3,3) \
- XO3(i,0) \
- XO3(i+1,1) \
- XO3(i+2,2) \
- XO3(i+3,3) \
- ST(i,0) \
- ST(i+1,1) \
- ST(i+2,2) \
- ST(i+3,3) \
-
-
- PF0(0)
- PF0(2)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $256, %1 ;\n"
- " addl $256, %2 ;\n"
- " addl $256, %3 ;\n"
- " addl $256, %4 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3), "+r" (p4)
- :
- : "memory" );
-
- XMMS_RESTORE;
-}
-
-static void
-xor_sse_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- unsigned long *p3, unsigned long *p4, unsigned long *p5)
-{
- unsigned long lines = bytes >> 8;
- char xmm_save[16*4] ALIGN16;
- int cr0;
-
- XMMS_SAVE;
-
- /* need to save p4/p5 manually to not exceed gcc's 10 argument limit */
- __asm__ __volatile__ (
- " pushl %4\n"
- " pushl %5\n"
-#undef BLOCK
-#define BLOCK(i) \
- PF1(i) \
- PF1(i+2) \
- LD(i,0) \
- LD(i+1,1) \
- LD(i+2,2) \
- LD(i+3,3) \
- PF2(i) \
- PF2(i+2) \
- XO1(i,0) \
- XO1(i+1,1) \
- XO1(i+2,2) \
- XO1(i+3,3) \
- PF3(i) \
- PF3(i+2) \
- XO2(i,0) \
- XO2(i+1,1) \
- XO2(i+2,2) \
- XO2(i+3,3) \
- PF4(i) \
- PF4(i+2) \
- PF0(i+4) \
- PF0(i+6) \
- XO3(i,0) \
- XO3(i+1,1) \
- XO3(i+2,2) \
- XO3(i+3,3) \
- XO4(i,0) \
- XO4(i+1,1) \
- XO4(i+2,2) \
- XO4(i+3,3) \
- ST(i,0) \
- ST(i+1,1) \
- ST(i+2,2) \
- ST(i+3,3) \
-
-
- PF0(0)
- PF0(2)
-
- " .align 32 ;\n"
- " 1: ;\n"
-
- BLOCK(0)
- BLOCK(4)
- BLOCK(8)
- BLOCK(12)
-
- " addl $256, %1 ;\n"
- " addl $256, %2 ;\n"
- " addl $256, %3 ;\n"
- " addl $256, %4 ;\n"
- " addl $256, %5 ;\n"
- " decl %0 ;\n"
- " jnz 1b ;\n"
- " popl %5\n"
- " popl %4\n"
- : "+r" (lines),
- "+r" (p1), "+r" (p2), "+r" (p3)
- : "r" (p4), "r" (p5)
- : "memory");
-
- XMMS_RESTORE;
-}
-
-static struct xor_block_template xor_block_pIII_sse = {
- name: "pIII_sse",
- do_2: xor_sse_2,
- do_3: xor_sse_3,
- do_4: xor_sse_4,
- do_5: xor_sse_5,
-};
-
-/* Also try the generic routines. */
-#include <asm-generic/xor.h>
-
-#undef XOR_TRY_TEMPLATES
-#define XOR_TRY_TEMPLATES \
- do { \
- xor_speed(&xor_block_8regs); \
- xor_speed(&xor_block_32regs); \
- if (cpu_has_xmm) \
- xor_speed(&xor_block_pIII_sse); \
- if (md_cpu_has_mmx()) { \
- xor_speed(&xor_block_pII_mmx); \
- xor_speed(&xor_block_p5_mmx); \
- } \
- } while (0)
-
-/* We force the use of the SSE xor block because it can write around L2.
- We may also be able to load into the L1 only depending on how the cpu
- deals with a load to a line that is being prefetched. */
-#define XOR_SELECT_TEMPLATE(FASTEST) \
- (cpu_has_xmm ? &xor_block_pIII_sse : FASTEST)
diff --git a/xenolinux-2.4.25-sparse/include/linux/blk.h b/xenolinux-2.4.25-sparse/include/linux/blk.h
deleted file mode 100644
index e7c7575454..0000000000
--- a/xenolinux-2.4.25-sparse/include/linux/blk.h
+++ /dev/null
@@ -1,409 +0,0 @@
-#ifndef _BLK_H
-#define _BLK_H
-
-#include <linux/blkdev.h>
-#include <linux/locks.h>
-#include <linux/config.h>
-#include <linux/spinlock.h>
-
-/*
- * Spinlock for protecting the request queue which
- * is mucked around with in interrupts on potentially
- * multiple CPU's..
- */
-extern spinlock_t io_request_lock;
-
-/*
- * Initialization functions.
- */
-extern int isp16_init(void);
-extern int cdu31a_init(void);
-extern int acsi_init(void);
-extern int mcd_init(void);
-extern int mcdx_init(void);
-extern int sbpcd_init(void);
-extern int aztcd_init(void);
-extern int sony535_init(void);
-extern int gscd_init(void);
-extern int cm206_init(void);
-extern int optcd_init(void);
-extern int sjcd_init(void);
-extern int cdi_init(void);
-extern int hd_init(void);
-extern int ide_init(void);
-extern int xd_init(void);
-extern int mfm_init(void);
-extern int loop_init(void);
-extern int md_init(void);
-extern int ap_init(void);
-extern int ddv_init(void);
-extern int z2_init(void);
-extern int swim3_init(void);
-extern int swimiop_init(void);
-extern int amiga_floppy_init(void);
-extern int atari_floppy_init(void);
-extern int ez_init(void);
-extern int bpcd_init(void);
-extern int ps2esdi_init(void);
-extern int jsfd_init(void);
-extern int viodasd_init(void);
-extern int viocd_init(void);
-
-#if defined(CONFIG_ARCH_S390)
-extern int dasd_init(void);
-extern int xpram_init(void);
-extern int tapeblock_init(void);
-#endif /* CONFIG_ARCH_S390 */
-
-#if defined(CONFIG_XEN_VBD)
-extern int xlblk_init(void);
-#endif /* CONFIG_XEN_VBD */
-
-extern void set_device_ro(kdev_t dev,int flag);
-void add_blkdev_randomness(int major);
-
-extern int floppy_init(void);
-extern int rd_doload; /* 1 = load ramdisk, 0 = don't load */
-extern int rd_prompt; /* 1 = prompt for ramdisk, 0 = don't prompt */
-extern int rd_image_start; /* starting block # of image */
-
-#ifdef CONFIG_BLK_DEV_INITRD
-
-#define INITRD_MINOR 250 /* shouldn't collide with /dev/ram* too soon ... */
-
-extern unsigned long initrd_start,initrd_end;
-extern int initrd_below_start_ok; /* 1 if it is not an error if initrd_start < memory_start */
-void initrd_init(void);
-
-#endif
-
-
-/*
- * end_request() and friends. Must be called with the request queue spinlock
- * acquired. All functions called within end_request() _must_be_ atomic.
- *
- * Several drivers define their own end_request and call
- * end_that_request_first() and end_that_request_last()
- * for parts of the original function. This prevents
- * code duplication in drivers.
- */
-
-static inline void blkdev_dequeue_request(struct request * req)
-{
- list_del(&req->queue);
-}
-
-int end_that_request_first(struct request *req, int uptodate, char *name);
-void end_that_request_last(struct request *req);
-
-#if defined(MAJOR_NR) || defined(IDE_DRIVER)
-
-#undef DEVICE_ON
-#undef DEVICE_OFF
-
-/*
- * Add entries as needed.
- */
-
-#ifdef IDE_DRIVER
-
-#define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS)
-#define DEVICE_NAME "ide"
-
-#elif (MAJOR_NR == RAMDISK_MAJOR)
-
-/* ram disk */
-#define DEVICE_NAME "ramdisk"
-#define DEVICE_NR(device) (MINOR(device))
-#define DEVICE_NO_RANDOM
-
-#elif (MAJOR_NR == Z2RAM_MAJOR)
-
-/* Zorro II Ram */
-#define DEVICE_NAME "Z2RAM"
-#define DEVICE_REQUEST do_z2_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == FLOPPY_MAJOR)
-
-static void floppy_off(unsigned int nr);
-
-#define DEVICE_NAME "floppy"
-#define DEVICE_INTR do_floppy
-#define DEVICE_REQUEST do_fd_request
-#define DEVICE_NR(device) ( (MINOR(device) & 3) | ((MINOR(device) & 0x80 ) >> 5 ))
-#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device))
-
-#elif (MAJOR_NR == HD_MAJOR)
-
-/* Hard disk: timeout is 6 seconds. */
-#define DEVICE_NAME "hard disk"
-#define DEVICE_INTR do_hd
-#define TIMEOUT_VALUE (6*HZ)
-#define DEVICE_REQUEST do_hd_request
-#define DEVICE_NR(device) (MINOR(device)>>6)
-
-#elif (SCSI_DISK_MAJOR(MAJOR_NR))
-
-#define DEVICE_NAME "scsidisk"
-#define TIMEOUT_VALUE (2*HZ)
-#define DEVICE_NR(device) (((MAJOR(device) & SD_MAJOR_MASK) << (8 - 4)) + (MINOR(device) >> 4))
-
-/* Kludge to use the same number for both char and block major numbers */
-#elif (MAJOR_NR == MD_MAJOR) && defined(MD_DRIVER)
-
-#define DEVICE_NAME "Multiple devices driver"
-#define DEVICE_REQUEST do_md_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == SCSI_TAPE_MAJOR)
-
-#define DEVICE_NAME "scsitape"
-#define DEVICE_INTR do_st
-#define DEVICE_NR(device) (MINOR(device) & 0x7f)
-
-#elif (MAJOR_NR == OSST_MAJOR)
-
-#define DEVICE_NAME "onstream"
-#define DEVICE_INTR do_osst
-#define DEVICE_NR(device) (MINOR(device) & 0x7f)
-#define DEVICE_ON(device)
-#define DEVICE_OFF(device)
-
-#elif (MAJOR_NR == SCSI_CDROM_MAJOR)
-
-#define DEVICE_NAME "CD-ROM"
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == XT_DISK_MAJOR)
-
-#define DEVICE_NAME "xt disk"
-#define DEVICE_REQUEST do_xd_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == PS2ESDI_MAJOR)
-
-#define DEVICE_NAME "PS/2 ESDI"
-#define DEVICE_REQUEST do_ps2esdi_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == CDU31A_CDROM_MAJOR)
-
-#define DEVICE_NAME "CDU31A"
-#define DEVICE_REQUEST do_cdu31a_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == ACSI_MAJOR) && (defined(CONFIG_ATARI_ACSI) || defined(CONFIG_ATARI_ACSI_MODULE))
-
-#define DEVICE_NAME "ACSI"
-#define DEVICE_INTR do_acsi
-#define DEVICE_REQUEST do_acsi_request
-#define DEVICE_NR(device) (MINOR(device) >> 4)
-
-#elif (MAJOR_NR == MITSUMI_CDROM_MAJOR)
-
-#define DEVICE_NAME "Mitsumi CD-ROM"
-/* #define DEVICE_INTR do_mcd */
-#define DEVICE_REQUEST do_mcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MITSUMI_X_CDROM_MAJOR)
-
-#define DEVICE_NAME "Mitsumi CD-ROM"
-/* #define DEVICE_INTR do_mcdx */
-#define DEVICE_REQUEST do_mcdx_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #1"
-#define DEVICE_REQUEST do_sbpcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM2_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #2"
-#define DEVICE_REQUEST do_sbpcd2_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM3_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #3"
-#define DEVICE_REQUEST do_sbpcd3_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MATSUSHITA_CDROM4_MAJOR)
-
-#define DEVICE_NAME "Matsushita CD-ROM controller #4"
-#define DEVICE_REQUEST do_sbpcd4_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == AZTECH_CDROM_MAJOR)
-
-#define DEVICE_NAME "Aztech CD-ROM"
-#define DEVICE_REQUEST do_aztcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == CDU535_CDROM_MAJOR)
-
-#define DEVICE_NAME "SONY-CDU535"
-#define DEVICE_INTR do_cdu535
-#define DEVICE_REQUEST do_cdu535_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == GOLDSTAR_CDROM_MAJOR)
-
-#define DEVICE_NAME "Goldstar R420"
-#define DEVICE_REQUEST do_gscd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == CM206_CDROM_MAJOR)
-#define DEVICE_NAME "Philips/LMS CD-ROM cm206"
-#define DEVICE_REQUEST do_cm206_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == OPTICS_CDROM_MAJOR)
-
-#define DEVICE_NAME "DOLPHIN 8000AT CD-ROM"
-#define DEVICE_REQUEST do_optcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == SANYO_CDROM_MAJOR)
-
-#define DEVICE_NAME "Sanyo H94A CD-ROM"
-#define DEVICE_REQUEST do_sjcd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == APBLOCK_MAJOR)
-
-#define DEVICE_NAME "apblock"
-#define DEVICE_REQUEST ap_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == DDV_MAJOR)
-
-#define DEVICE_NAME "ddv"
-#define DEVICE_REQUEST ddv_request
-#define DEVICE_NR(device) (MINOR(device)>>PARTN_BITS)
-
-#elif (MAJOR_NR == MFM_ACORN_MAJOR)
-
-#define DEVICE_NAME "mfm disk"
-#define DEVICE_INTR do_mfm
-#define DEVICE_REQUEST do_mfm_request
-#define DEVICE_NR(device) (MINOR(device) >> 6)
-
-#elif (MAJOR_NR == NBD_MAJOR)
-
-#define DEVICE_NAME "nbd"
-#define DEVICE_REQUEST do_nbd_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == MDISK_MAJOR)
-
-#define DEVICE_NAME "mdisk"
-#define DEVICE_REQUEST mdisk_request
-#define DEVICE_NR(device) (MINOR(device))
-
-#elif (MAJOR_NR == DASD_MAJOR)
-
-#define DEVICE_NAME "dasd"
-#define DEVICE_REQUEST do_dasd_request
-#define DEVICE_NR(device) (MINOR(device) >> PARTN_BITS)
-
-#elif (MAJOR_NR == I2O_MAJOR)
-
-#define DEVICE_NAME "I2O block"
-#define DEVICE_REQUEST i2ob_request
-#define DEVICE_NR(device) (MINOR(device)>>4)
-
-#elif (MAJOR_NR == COMPAQ_SMART2_MAJOR)
-
-#define DEVICE_NAME "ida"
-#define TIMEOUT_VALUE (25*HZ)
-#define DEVICE_REQUEST do_ida_request
-#define DEVICE_NR(device) (MINOR(device) >> 4)
-
-#endif /* MAJOR_NR == whatever */
-
-/* provide DEVICE_xxx defaults, if not explicitly defined
- * above in the MAJOR_NR==xxx if-elif tree */
-#ifndef DEVICE_ON
-#define DEVICE_ON(device) do {} while (0)
-#endif
-#ifndef DEVICE_OFF
-#define DEVICE_OFF(device) do {} while (0)
-#endif
-
-#if (MAJOR_NR != SCSI_TAPE_MAJOR) && (MAJOR_NR != OSST_MAJOR)
-#if !defined(IDE_DRIVER)
-
-#ifndef CURRENT
-#define CURRENT blkdev_entry_next_request(&blk_dev[MAJOR_NR].request_queue.queue_head)
-#endif
-#ifndef QUEUE_EMPTY
-#define QUEUE_EMPTY list_empty(&blk_dev[MAJOR_NR].request_queue.queue_head)
-#endif
-
-#ifndef DEVICE_NAME
-#define DEVICE_NAME "unknown"
-#endif
-
-#define CURRENT_DEV DEVICE_NR(CURRENT->rq_dev)
-
-#ifdef DEVICE_INTR
-static void (*DEVICE_INTR)(void) = NULL;
-#endif
-
-#define SET_INTR(x) (DEVICE_INTR = (x))
-
-#ifdef DEVICE_REQUEST
-static void (DEVICE_REQUEST)(request_queue_t *);
-#endif
-
-#ifdef DEVICE_INTR
-#define CLEAR_INTR SET_INTR(NULL)
-#else
-#define CLEAR_INTR
-#endif
-
-#define INIT_REQUEST \
- if (QUEUE_EMPTY) {\
- CLEAR_INTR; \
- return; \
- } \
- if (MAJOR(CURRENT->rq_dev) != MAJOR_NR) \
- panic(DEVICE_NAME ": request list destroyed"); \
- if (CURRENT->bh) { \
- if (!buffer_locked(CURRENT->bh)) \
- panic(DEVICE_NAME ": block not locked"); \
- }
-
-#endif /* !defined(IDE_DRIVER) */
-
-
-#ifndef LOCAL_END_REQUEST /* If we have our own end_request, we do not want to include this mess */
-
-#if ! SCSI_BLK_MAJOR(MAJOR_NR) && (MAJOR_NR != COMPAQ_SMART2_MAJOR)
-
-static inline void end_request(int uptodate) {
- struct request *req = CURRENT;
-
- if (end_that_request_first(req, uptodate, DEVICE_NAME))
- return;
-
-#ifndef DEVICE_NO_RANDOM
- add_blkdev_randomness(MAJOR(req->rq_dev));
-#endif
- DEVICE_OFF(req->rq_dev);
- blkdev_dequeue_request(req);
- end_that_request_last(req);
-}
-
-#endif /* ! SCSI_BLK_MAJOR(MAJOR_NR) */
-#endif /* LOCAL_END_REQUEST */
-
-#endif /* (MAJOR_NR != SCSI_TAPE_MAJOR) */
-#endif /* defined(MAJOR_NR) || defined(IDE_DRIVER) */
-
-#endif /* _BLK_H */
diff --git a/xenolinux-2.4.25-sparse/include/linux/major.h b/xenolinux-2.4.25-sparse/include/linux/major.h
deleted file mode 100644
index f311bd4a9d..0000000000
--- a/xenolinux-2.4.25-sparse/include/linux/major.h
+++ /dev/null
@@ -1,206 +0,0 @@
-#ifndef _LINUX_MAJOR_H
-#define _LINUX_MAJOR_H
-
-/*
- * This file has definitions for major device numbers.
- * For the device number assignments, see Documentation/devices.txt.
- */
-
-/* limits */
-
-/*
- * Important: Don't change this to 256. Major number 255 is and must be
- * reserved for future expansion into a larger dev_t space.
- */
-#define MAX_CHRDEV 255
-#define MAX_BLKDEV 255
-
-#define UNNAMED_MAJOR 0
-#define MEM_MAJOR 1
-#define RAMDISK_MAJOR 1
-#define FLOPPY_MAJOR 2
-#define PTY_MASTER_MAJOR 2
-#define IDE0_MAJOR 3
-#define PTY_SLAVE_MAJOR 3
-#define HD_MAJOR IDE0_MAJOR
-#define TTY_MAJOR 4
-#define TTYAUX_MAJOR 5
-#define LP_MAJOR 6
-#define VCS_MAJOR 7
-#define LOOP_MAJOR 7
-#define SCSI_DISK0_MAJOR 8
-#define SCSI_TAPE_MAJOR 9
-#define MD_MAJOR 9
-#define MISC_MAJOR 10
-#define SCSI_CDROM_MAJOR 11
-#define MUX_MAJOR 11 /* PA-RISC only */
-#define QIC02_TAPE_MAJOR 12
-#define XT_DISK_MAJOR 13
-#define SOUND_MAJOR 14
-#define CDU31A_CDROM_MAJOR 15
-#define JOYSTICK_MAJOR 15
-#define GOLDSTAR_CDROM_MAJOR 16
-#define OPTICS_CDROM_MAJOR 17
-#define SANYO_CDROM_MAJOR 18
-#define CYCLADES_MAJOR 19
-#define CYCLADESAUX_MAJOR 20
-#define MITSUMI_X_CDROM_MAJOR 20
-#define MFM_ACORN_MAJOR 21 /* ARM Linux /dev/mfm */
-#define SCSI_GENERIC_MAJOR 21
-#define Z8530_MAJOR 34
-#define DIGI_MAJOR 23
-#define IDE1_MAJOR 22
-#define DIGICU_MAJOR 22
-#define MITSUMI_CDROM_MAJOR 23
-#define CDU535_CDROM_MAJOR 24
-#define STL_SERIALMAJOR 24
-#define MATSUSHITA_CDROM_MAJOR 25
-#define STL_CALLOUTMAJOR 25
-#define MATSUSHITA_CDROM2_MAJOR 26
-#define QIC117_TAPE_MAJOR 27
-#define MATSUSHITA_CDROM3_MAJOR 27
-#define MATSUSHITA_CDROM4_MAJOR 28
-#define STL_SIOMEMMAJOR 28
-#define ACSI_MAJOR 28
-#define AZTECH_CDROM_MAJOR 29
-#define GRAPHDEV_MAJOR 29 /* SparcLinux & Linux/68k /dev/fb */
-#define SHMIQ_MAJOR 85 /* Linux/mips, SGI /dev/shmiq */
-#define CM206_CDROM_MAJOR 32
-#define IDE2_MAJOR 33
-#define IDE3_MAJOR 34
-#define XPRAM_MAJOR 35 /* expanded storage on S/390 = "slow ram" */
- /* proposed by Peter */
-#define NETLINK_MAJOR 36
-#define PS2ESDI_MAJOR 36
-#define IDETAPE_MAJOR 37
-#define Z2RAM_MAJOR 37
-#define APBLOCK_MAJOR 38 /* AP1000 Block device */
-#define DDV_MAJOR 39 /* AP1000 DDV block device */
-#define NBD_MAJOR 43 /* Network block device */
-#define RISCOM8_NORMAL_MAJOR 48
-#define DAC960_MAJOR 48 /* 48..55 */
-#define RISCOM8_CALLOUT_MAJOR 49
-#define MKISS_MAJOR 55
-#define DSP56K_MAJOR 55 /* DSP56001 processor device */
-
-#define IDE4_MAJOR 56
-#define IDE5_MAJOR 57
-
-#define LVM_BLK_MAJOR 58 /* Logical Volume Manager */
-
-#define SCSI_DISK1_MAJOR 65
-#define SCSI_DISK2_MAJOR 66
-#define SCSI_DISK3_MAJOR 67
-#define SCSI_DISK4_MAJOR 68
-#define SCSI_DISK5_MAJOR 69
-#define SCSI_DISK6_MAJOR 70
-#define SCSI_DISK7_MAJOR 71
-
-
-#define COMPAQ_SMART2_MAJOR 72
-#define COMPAQ_SMART2_MAJOR1 73
-#define COMPAQ_SMART2_MAJOR2 74
-#define COMPAQ_SMART2_MAJOR3 75
-#define COMPAQ_SMART2_MAJOR4 76
-#define COMPAQ_SMART2_MAJOR5 77
-#define COMPAQ_SMART2_MAJOR6 78
-#define COMPAQ_SMART2_MAJOR7 79
-
-#define SPECIALIX_NORMAL_MAJOR 75
-#define SPECIALIX_CALLOUT_MAJOR 76
-
-#define COMPAQ_CISS_MAJOR 104
-#define COMPAQ_CISS_MAJOR1 105
-#define COMPAQ_CISS_MAJOR2 106
-#define COMPAQ_CISS_MAJOR3 107
-#define COMPAQ_CISS_MAJOR4 108
-#define COMPAQ_CISS_MAJOR5 109
-#define COMPAQ_CISS_MAJOR6 110
-#define COMPAQ_CISS_MAJOR7 111
-
-#define ATARAID_MAJOR 114
-
-#define DASD_MAJOR 94 /* Official assignations from Peter */
-
-#define MDISK_MAJOR 95 /* Official assignations from Peter */
-
-#define I2O_MAJOR 80 /* 80->87 */
-
-#define IDE6_MAJOR 88
-#define IDE7_MAJOR 89
-#define IDE8_MAJOR 90
-#define IDE9_MAJOR 91
-
-#define UBD_MAJOR 98
-
-#define AURORA_MAJOR 79
-
-#define JSFD_MAJOR 99
-
-#define PHONE_MAJOR 100
-
-#define LVM_CHAR_MAJOR 109 /* Logical Volume Manager */
-
-#define UMEM_MAJOR 116 /* http://www.umem.com/ Battery Backed RAM */
-
-#define UMEM_MAJOR 116 /* http://www.umem.com/ Battery Backed RAM */
-
-/*
- * XLVIRT supports 16 devices of <= 16 partitions each.
- * eg. xvda == (125, 0), xvdb == (125, 16), ...
- */
-#define XLVIRT_MAJOR 125
-
-#define RTF_MAJOR 150
-#define RAW_MAJOR 162
-
-#define USB_ACM_MAJOR 166
-#define USB_ACM_AUX_MAJOR 167
-#define USB_CHAR_MAJOR 180
-
-#define UNIX98_PTY_MASTER_MAJOR 128
-#define UNIX98_PTY_MAJOR_COUNT 8
-#define UNIX98_PTY_SLAVE_MAJOR (UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
-
-#define VXVM_MAJOR 199 /* VERITAS volume i/o driver */
-#define VXSPEC_MAJOR 200 /* VERITAS volume config driver */
-#define VXDMP_MAJOR 201 /* VERITAS volume multipath driver */
-
-#define MSR_MAJOR 202
-#define CPUID_MAJOR 203
-
-#define OSST_MAJOR 206 /* OnStream-SCx0 SCSI tape */
-
-#define IBM_TTY3270_MAJOR 227 /* Official allocations now */
-#define IBM_FS3270_MAJOR 228
-
-/*
- * Tests for SCSI devices.
- */
-
-#define SCSI_DISK_MAJOR(M) ((M) == SCSI_DISK0_MAJOR || \
- ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR))
-
-#define SCSI_BLK_MAJOR(M) \
- (SCSI_DISK_MAJOR(M) \
- || (M) == SCSI_CDROM_MAJOR)
-
-static __inline__ int scsi_blk_major(int m) {
- return SCSI_BLK_MAJOR(m);
-}
-
-/*
- * Tests for IDE devices
- */
-#define IDE_DISK_MAJOR(M) ((M) == IDE0_MAJOR || (M) == IDE1_MAJOR || \
- (M) == IDE2_MAJOR || (M) == IDE3_MAJOR || \
- (M) == IDE4_MAJOR || (M) == IDE5_MAJOR || \
- (M) == IDE6_MAJOR || (M) == IDE7_MAJOR || \
- (M) == IDE8_MAJOR || (M) == IDE9_MAJOR)
-
-static __inline__ int ide_blk_major(int m)
-{
- return IDE_DISK_MAJOR(m);
-}
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/linux/sched.h b/xenolinux-2.4.25-sparse/include/linux/sched.h
deleted file mode 100644
index 1ac29aa143..0000000000
--- a/xenolinux-2.4.25-sparse/include/linux/sched.h
+++ /dev/null
@@ -1,968 +0,0 @@
-#ifndef _LINUX_SCHED_H
-#define _LINUX_SCHED_H
-
-#include <asm/param.h> /* for HZ */
-
-extern unsigned long event;
-
-#include <linux/config.h>
-#include <linux/binfmts.h>
-#include <linux/threads.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/times.h>
-#include <linux/timex.h>
-#include <linux/rbtree.h>
-
-#include <asm/system.h>
-#include <asm/semaphore.h>
-#include <asm/page.h>
-#include <asm/ptrace.h>
-#include <asm/mmu.h>
-
-#include <linux/smp.h>
-#include <linux/tty.h>
-#include <linux/sem.h>
-#include <linux/signal.h>
-#include <linux/securebits.h>
-#include <linux/fs_struct.h>
-
-struct exec_domain;
-
-/*
- * cloning flags:
- */
-#define CSIGNAL 0x000000ff /* signal mask to be sent at exit */
-#define CLONE_VM 0x00000100 /* set if VM shared between processes */
-#define CLONE_FS 0x00000200 /* set if fs info shared between processes */
-#define CLONE_FILES 0x00000400 /* set if open files shared between processes */
-#define CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
-#define CLONE_PID 0x00001000 /* set if pid shared */
-#define CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */
-#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
-#define CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
-#define CLONE_THREAD 0x00010000 /* Same thread group? */
-#define CLONE_NEWNS 0x00020000 /* New namespace group? */
-
-#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)
-
-/*
- * These are the constant used to fake the fixed-point load-average
- * counting. Some notes:
- * - 11 bit fractions expand to 22 bits by the multiplies: this gives
- * a load-average precision of 10 bits integer + 11 bits fractional
- * - if you want to count load-averages more often, you need more
- * precision, or rounding will get you. With 2-second counting freq,
- * the EXP_n values would be 1981, 2034 and 2043 if still using only
- * 11 bit fractions.
- */
-extern unsigned long avenrun[]; /* Load averages */
-
-#define FSHIFT 11 /* nr of bits of precision */
-#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
-#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
-#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
-#define EXP_5 2014 /* 1/exp(5sec/5min) */
-#define EXP_15 2037 /* 1/exp(5sec/15min) */
-
-#define CALC_LOAD(load,exp,n) \
- load *= exp; \
- load += n*(FIXED_1-exp); \
- load >>= FSHIFT;
-
-#define CT_TO_SECS(x) ((x) / HZ)
-#define CT_TO_USECS(x) (((x) % HZ) * 1000000/HZ)
-
-extern int nr_running, nr_threads;
-extern int last_pid;
-
-#include <linux/fs.h>
-#include <linux/time.h>
-#include <linux/param.h>
-#include <linux/resource.h>
-#ifdef __KERNEL__
-#include <linux/timer.h>
-#endif
-
-#include <asm/processor.h>
-
-#define TASK_RUNNING 0
-#define TASK_INTERRUPTIBLE 1
-#define TASK_UNINTERRUPTIBLE 2
-#define TASK_ZOMBIE 4
-#define TASK_STOPPED 8
-
-#define __set_task_state(tsk, state_value) \
- do { (tsk)->state = (state_value); } while (0)
-#define set_task_state(tsk, state_value) \
- set_mb((tsk)->state, (state_value))
-
-#define __set_current_state(state_value) \
- do { current->state = (state_value); } while (0)
-#define set_current_state(state_value) \
- set_mb(current->state, (state_value))
-
-/*
- * Scheduling policies
- */
-#define SCHED_OTHER 0
-#define SCHED_FIFO 1
-#define SCHED_RR 2
-
-/*
- * This is an additional bit set when we want to
- * yield the CPU for one re-schedule..
- */
-#define SCHED_YIELD 0x10
-
-struct sched_param {
- int sched_priority;
-};
-
-struct completion;
-
-#ifdef __KERNEL__
-
-#include <linux/spinlock.h>
-
-/*
- * This serializes "schedule()" and also protects
- * the run-queue from deletions/modifications (but
- * _adding_ to the beginning of the run-queue has
- * a separate lock).
- */
-extern rwlock_t tasklist_lock;
-extern spinlock_t runqueue_lock;
-extern spinlock_t mmlist_lock;
-
-extern void sched_init(void);
-extern void init_idle(void);
-extern void show_state(void);
-extern void cpu_init (void);
-extern void trap_init(void);
-extern void update_process_times(int user);
-#ifdef CONFIG_NO_IDLE_HZ
-extern void update_process_times_us(int user, int system);
-#endif
-extern void update_one_process(struct task_struct *p, unsigned long user,
- unsigned long system, int cpu);
-
-#define MAX_SCHEDULE_TIMEOUT LONG_MAX
-extern signed long FASTCALL(schedule_timeout(signed long timeout));
-asmlinkage void schedule(void);
-
-extern int schedule_task(struct tq_struct *task);
-extern void flush_scheduled_tasks(void);
-extern int start_context_thread(void);
-extern int current_is_keventd(void);
-
-#if CONFIG_SMP
-extern void set_cpus_allowed(struct task_struct *p, unsigned long new_mask);
-#else
-# define set_cpus_allowed(p, new_mask) do { } while (0)
-#endif
-
-/*
- * The default fd array needs to be at least BITS_PER_LONG,
- * as this is the granularity returned by copy_fdset().
- */
-#define NR_OPEN_DEFAULT BITS_PER_LONG
-
-struct namespace;
-/*
- * Open file table structure
- */
-struct files_struct {
- atomic_t count;
- rwlock_t file_lock; /* Protects all the below members. Nests inside tsk->alloc_lock */
- int max_fds;
- int max_fdset;
- int next_fd;
- struct file ** fd; /* current fd array */
- fd_set *close_on_exec;
- fd_set *open_fds;
- fd_set close_on_exec_init;
- fd_set open_fds_init;
- struct file * fd_array[NR_OPEN_DEFAULT];
-};
-
-#define INIT_FILES \
-{ \
- count: ATOMIC_INIT(1), \
- file_lock: RW_LOCK_UNLOCKED, \
- max_fds: NR_OPEN_DEFAULT, \
- max_fdset: __FD_SETSIZE, \
- next_fd: 0, \
- fd: &init_files.fd_array[0], \
- close_on_exec: &init_files.close_on_exec_init, \
- open_fds: &init_files.open_fds_init, \
- close_on_exec_init: { { 0, } }, \
- open_fds_init: { { 0, } }, \
- fd_array: { NULL, } \
-}
-
-/* Maximum number of active map areas.. This is a random (large) number */
-#define DEFAULT_MAX_MAP_COUNT (65536)
-
-extern int max_map_count;
-
-struct mm_struct {
- struct vm_area_struct * mmap; /* list of VMAs */
- rb_root_t mm_rb;
- struct vm_area_struct * mmap_cache; /* last find_vma result */
- pgd_t * pgd;
- atomic_t mm_users; /* How many users with user space? */
- atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
- int map_count; /* number of VMAs */
- struct rw_semaphore mmap_sem;
- spinlock_t page_table_lock; /* Protects task page tables and mm->rss */
-
- struct list_head mmlist; /* List of all active mm's. These are globally strung
- * together off init_mm.mmlist, and are protected
- * by mmlist_lock
- */
-
- unsigned long start_code, end_code, start_data, end_data;
- unsigned long start_brk, brk, start_stack;
- unsigned long arg_start, arg_end, env_start, env_end;
- unsigned long rss, total_vm, locked_vm;
- unsigned long def_flags;
- unsigned long cpu_vm_mask;
- unsigned long swap_address;
-
- unsigned dumpable:1;
-
- /* Architecture-specific MM context */
- mm_context_t context;
-};
-
-extern int mmlist_nr;
-
-#define INIT_MM(name) \
-{ \
- mm_rb: RB_ROOT, \
- pgd: swapper_pg_dir, \
- mm_users: ATOMIC_INIT(2), \
- mm_count: ATOMIC_INIT(1), \
- mmap_sem: __RWSEM_INITIALIZER(name.mmap_sem), \
- page_table_lock: SPIN_LOCK_UNLOCKED, \
- mmlist: LIST_HEAD_INIT(name.mmlist), \
-}
-
-struct signal_struct {
- atomic_t count;
- struct k_sigaction action[_NSIG];
- spinlock_t siglock;
-};
-
-
-#define INIT_SIGNALS { \
- count: ATOMIC_INIT(1), \
- action: { {{0,}}, }, \
- siglock: SPIN_LOCK_UNLOCKED \
-}
-
-/*
- * Some day this will be a full-fledged user tracking system..
- */
-struct user_struct {
- atomic_t __count; /* reference count */
- atomic_t processes; /* How many processes does this user have? */
- atomic_t files; /* How many open files does this user have? */
-
- /* Hash table maintenance information */
- struct user_struct *next, **pprev;
- uid_t uid;
-};
-
-#define get_current_user() ({ \
- struct user_struct *__user = current->user; \
- atomic_inc(&__user->__count); \
- __user; })
-
-extern struct user_struct root_user;
-#define INIT_USER (&root_user)
-
-struct task_struct {
- /*
- * offsets of these are hardcoded elsewhere - touch with care
- */
- volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
- unsigned long flags; /* per process flags, defined below */
- int sigpending;
- mm_segment_t addr_limit; /* thread address space:
- 0-0xBFFFFFFF for user-thead
- 0-0xFFFFFFFF for kernel-thread
- */
- struct exec_domain *exec_domain;
- volatile long need_resched;
- unsigned long ptrace;
-
- int lock_depth; /* Lock depth */
-
-/*
- * offset 32 begins here on 32-bit platforms. We keep
- * all fields in a single cacheline that are needed for
- * the goodness() loop in schedule().
- */
- long counter;
- long nice;
- unsigned long policy;
- struct mm_struct *mm;
- int processor;
- /*
- * cpus_runnable is ~0 if the process is not running on any
- * CPU. It's (1 << cpu) if it's running on a CPU. This mask
- * is updated under the runqueue lock.
- *
- * To determine whether a process might run on a CPU, this
- * mask is AND-ed with cpus_allowed.
- */
- unsigned long cpus_runnable, cpus_allowed;
- /*
- * (only the 'next' pointer fits into the cacheline, but
- * that's just fine.)
- */
- struct list_head run_list;
- unsigned long sleep_time;
-
- struct task_struct *next_task, *prev_task;
- struct mm_struct *active_mm;
- struct list_head local_pages;
- unsigned int allocation_order, nr_local_pages;
-
-/* task state */
- struct linux_binfmt *binfmt;
- int exit_code, exit_signal;
- int pdeath_signal; /* The signal sent when the parent dies */
- /* ??? */
- unsigned long personality;
- int did_exec:1;
- unsigned task_dumpable:1;
- pid_t pid;
- pid_t pgrp;
- pid_t tty_old_pgrp;
- pid_t session;
- pid_t tgid;
- /* boolean value for session group leader */
- int leader;
- /*
- * pointers to (original) parent process, youngest child, younger sibling,
- * older sibling, respectively. (p->father can be replaced with
- * p->p_pptr->pid)
- */
- struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr;
- struct list_head thread_group;
-
- /* PID hash table linkage. */
- struct task_struct *pidhash_next;
- struct task_struct **pidhash_pprev;
-
- wait_queue_head_t wait_chldexit; /* for wait4() */
- struct completion *vfork_done; /* for vfork() */
- unsigned long rt_priority;
- unsigned long it_real_value, it_prof_value, it_virt_value;
- unsigned long it_real_incr, it_prof_incr, it_virt_incr;
- struct timer_list real_timer;
- struct tms times;
- unsigned long start_time;
- long per_cpu_utime[NR_CPUS], per_cpu_stime[NR_CPUS];
-/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
- unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;
- int swappable:1;
-/* process credentials */
- uid_t uid,euid,suid,fsuid;
- gid_t gid,egid,sgid,fsgid;
- int ngroups;
- gid_t groups[NGROUPS];
- kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
- int keep_capabilities:1;
- struct user_struct *user;
-/* limits */
- struct rlimit rlim[RLIM_NLIMITS];
- unsigned short used_math;
- char comm[16];
-/* file system info */
- int link_count, total_link_count;
- struct tty_struct *tty; /* NULL if no tty */
- unsigned int locks; /* How many file locks are being held */
-/* ipc stuff */
- struct sem_undo *semundo;
- struct sem_queue *semsleeping;
-/* CPU-specific state of this task */
- struct thread_struct thread;
-/* filesystem information */
- struct fs_struct *fs;
-/* open file information */
- struct files_struct *files;
-/* namespace */
- struct namespace *namespace;
-/* signal handlers */
- spinlock_t sigmask_lock; /* Protects signal and blocked */
- struct signal_struct *sig;
-
- sigset_t blocked;
- struct sigpending pending;
-
- unsigned long sas_ss_sp;
- size_t sas_ss_size;
- int (*notifier)(void *priv);
- void *notifier_data;
- sigset_t *notifier_mask;
-
-/* Thread group tracking */
- u32 parent_exec_id;
- u32 self_exec_id;
-/* Protection of (de-)allocation: mm, files, fs, tty */
- spinlock_t alloc_lock;
-
-/* journalling filesystem info */
- void *journal_info;
-};
-
-/*
- * Per process flags
- */
-#define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */
- /* Not implemented yet, only for 486*/
-#define PF_STARTING 0x00000002 /* being created */
-#define PF_EXITING 0x00000004 /* getting shut down */
-#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */
-#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
-#define PF_DUMPCORE 0x00000200 /* dumped core */
-#define PF_SIGNALED 0x00000400 /* killed by a signal */
-#define PF_MEMALLOC 0x00000800 /* Allocating memory */
-#define PF_MEMDIE 0x00001000 /* Killed for out-of-memory */
-#define PF_FREE_PAGES 0x00002000 /* per process page freeing */
-#define PF_NOIO 0x00004000 /* avoid generating further I/O */
-#define PF_FSTRANS 0x00008000 /* inside a filesystem transaction */
-
-#define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */
-
-/*
- * Ptrace flags
- */
-
-#define PT_PTRACED 0x00000001
-#define PT_TRACESYS 0x00000002
-#define PT_DTRACE 0x00000004 /* delayed trace (used on m68k, i386) */
-#define PT_TRACESYSGOOD 0x00000008
-#define PT_PTRACE_CAP 0x00000010 /* ptracer can follow suid-exec */
-
-#define is_dumpable(tsk) ((tsk)->task_dumpable && (tsk)->mm && (tsk)->mm->dumpable)
-
-/*
- * Limit the stack by to some sane default: root can always
- * increase this limit if needed.. 8MB seems reasonable.
- */
-#define _STK_LIM (8*1024*1024)
-
-#define DEF_COUNTER (10*HZ/100) /* 100 ms time slice */
-#define MAX_COUNTER (20*HZ/100)
-#define DEF_NICE (0)
-
-extern void yield(void);
-
-/*
- * The default (Linux) execution domain.
- */
-extern struct exec_domain default_exec_domain;
-
-/*
- * INIT_TASK is used to set up the first task table, touch at
- * your own risk!. Base=0, limit=0x1fffff (=2MB)
- */
-#define INIT_TASK(tsk) \
-{ \
- state: 0, \
- flags: 0, \
- sigpending: 0, \
- addr_limit: KERNEL_DS, \
- exec_domain: &default_exec_domain, \
- lock_depth: -1, \
- counter: DEF_COUNTER, \
- nice: DEF_NICE, \
- policy: SCHED_OTHER, \
- mm: NULL, \
- active_mm: &init_mm, \
- cpus_runnable: ~0UL, \
- cpus_allowed: ~0UL, \
- run_list: LIST_HEAD_INIT(tsk.run_list), \
- next_task: &tsk, \
- prev_task: &tsk, \
- p_opptr: &tsk, \
- p_pptr: &tsk, \
- thread_group: LIST_HEAD_INIT(tsk.thread_group), \
- wait_chldexit: __WAIT_QUEUE_HEAD_INITIALIZER(tsk.wait_chldexit),\
- real_timer: { \
- function: it_real_fn \
- }, \
- cap_effective: CAP_INIT_EFF_SET, \
- cap_inheritable: CAP_INIT_INH_SET, \
- cap_permitted: CAP_FULL_SET, \
- keep_capabilities: 0, \
- rlim: INIT_RLIMITS, \
- user: INIT_USER, \
- comm: "swapper", \
- thread: INIT_THREAD, \
- fs: &init_fs, \
- files: &init_files, \
- sigmask_lock: SPIN_LOCK_UNLOCKED, \
- sig: &init_signals, \
- pending: { NULL, &tsk.pending.head, {{0}}}, \
- blocked: {{0}}, \
- alloc_lock: SPIN_LOCK_UNLOCKED, \
- journal_info: NULL, \
-}
-
-
-#ifndef INIT_TASK_SIZE
-# define INIT_TASK_SIZE 2048*sizeof(long)
-#endif
-
-union task_union {
- struct task_struct task;
- unsigned long stack[INIT_TASK_SIZE/sizeof(long)];
-};
-
-extern union task_union init_task_union;
-
-extern struct mm_struct init_mm;
-extern struct task_struct *init_tasks[NR_CPUS];
-
-/* PID hashing. (shouldnt this be dynamic?) */
-#define PIDHASH_SZ (4096 >> 2)
-extern struct task_struct *pidhash[PIDHASH_SZ];
-
-#define pid_hashfn(x) ((((x) >> 8) ^ (x)) & (PIDHASH_SZ - 1))
-
-static inline void hash_pid(struct task_struct *p)
-{
- struct task_struct **htable = &pidhash[pid_hashfn(p->pid)];
-
- if((p->pidhash_next = *htable) != NULL)
- (*htable)->pidhash_pprev = &p->pidhash_next;
- *htable = p;
- p->pidhash_pprev = htable;
-}
-
-static inline void unhash_pid(struct task_struct *p)
-{
- if(p->pidhash_next)
- p->pidhash_next->pidhash_pprev = p->pidhash_pprev;
- *p->pidhash_pprev = p->pidhash_next;
-}
-
-static inline struct task_struct *find_task_by_pid(int pid)
-{
- struct task_struct *p, **htable = &pidhash[pid_hashfn(pid)];
-
- for(p = *htable; p && p->pid != pid; p = p->pidhash_next)
- ;
-
- return p;
-}
-
-#define task_has_cpu(tsk) ((tsk)->cpus_runnable != ~0UL)
-
-static inline void task_set_cpu(struct task_struct *tsk, unsigned int cpu)
-{
- tsk->processor = cpu;
- tsk->cpus_runnable = 1UL << cpu;
-}
-
-static inline void task_release_cpu(struct task_struct *tsk)
-{
- tsk->cpus_runnable = ~0UL;
-}
-
-/* per-UID process charging. */
-extern struct user_struct * alloc_uid(uid_t);
-extern void free_uid(struct user_struct *);
-extern void switch_uid(struct user_struct *);
-
-#include <asm/current.h>
-
-extern unsigned long volatile jiffies;
-extern unsigned long itimer_ticks;
-extern unsigned long itimer_next;
-extern struct timeval xtime;
-extern void do_timer(struct pt_regs *);
-#ifdef CONFIG_NO_IDLE_HZ
-extern void do_timer_ticks(int ticks);
-#endif
-
-extern unsigned int * prof_buffer;
-extern unsigned long prof_len;
-extern unsigned long prof_shift;
-
-#define CURRENT_TIME (xtime.tv_sec)
-
-extern void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr));
-extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr));
-extern void FASTCALL(sleep_on(wait_queue_head_t *q));
-extern long FASTCALL(sleep_on_timeout(wait_queue_head_t *q,
- signed long timeout));
-extern void FASTCALL(interruptible_sleep_on(wait_queue_head_t *q));
-extern long FASTCALL(interruptible_sleep_on_timeout(wait_queue_head_t *q,
- signed long timeout));
-extern int FASTCALL(wake_up_process(struct task_struct * tsk));
-
-#define wake_up(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1)
-#define wake_up_nr(x, nr) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr)
-#define wake_up_all(x) __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0)
-#define wake_up_sync(x) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1)
-#define wake_up_sync_nr(x, nr) __wake_up_sync((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr)
-#define wake_up_interruptible(x) __wake_up((x),TASK_INTERRUPTIBLE, 1)
-#define wake_up_interruptible_nr(x, nr) __wake_up((x),TASK_INTERRUPTIBLE, nr)
-#define wake_up_interruptible_all(x) __wake_up((x),TASK_INTERRUPTIBLE, 0)
-#define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1)
-#define wake_up_interruptible_sync_nr(x, nr) __wake_up_sync((x),TASK_INTERRUPTIBLE, nr)
-asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru);
-
-extern int in_group_p(gid_t);
-extern int in_egroup_p(gid_t);
-
-extern void proc_caches_init(void);
-extern void flush_signals(struct task_struct *);
-extern void flush_signal_handlers(struct task_struct *);
-extern void sig_exit(int, int, struct siginfo *);
-extern int dequeue_signal(sigset_t *, siginfo_t *);
-extern void block_all_signals(int (*notifier)(void *priv), void *priv,
- sigset_t *mask);
-extern void unblock_all_signals(void);
-extern int send_sig_info(int, struct siginfo *, struct task_struct *);
-extern int force_sig_info(int, struct siginfo *, struct task_struct *);
-extern int kill_pg_info(int, struct siginfo *, pid_t);
-extern int kill_sl_info(int, struct siginfo *, pid_t);
-extern int kill_proc_info(int, struct siginfo *, pid_t);
-extern void notify_parent(struct task_struct *, int);
-extern void do_notify_parent(struct task_struct *, int);
-extern void force_sig(int, struct task_struct *);
-extern int send_sig(int, struct task_struct *, int);
-extern int kill_pg(pid_t, int, int);
-extern int kill_sl(pid_t, int, int);
-extern int kill_proc(pid_t, int, int);
-extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *);
-extern int do_sigaltstack(const stack_t *, stack_t *, unsigned long);
-
-static inline int signal_pending(struct task_struct *p)
-{
- return (p->sigpending != 0);
-}
-
-/*
- * Re-calculate pending state from the set of locally pending
- * signals, globally pending signals, and blocked signals.
- */
-static inline int has_pending_signals(sigset_t *signal, sigset_t *blocked)
-{
- unsigned long ready;
- long i;
-
- switch (_NSIG_WORDS) {
- default:
- for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
- ready |= signal->sig[i] &~ blocked->sig[i];
- break;
-
- case 4: ready = signal->sig[3] &~ blocked->sig[3];
- ready |= signal->sig[2] &~ blocked->sig[2];
- ready |= signal->sig[1] &~ blocked->sig[1];
- ready |= signal->sig[0] &~ blocked->sig[0];
- break;
-
- case 2: ready = signal->sig[1] &~ blocked->sig[1];
- ready |= signal->sig[0] &~ blocked->sig[0];
- break;
-
- case 1: ready = signal->sig[0] &~ blocked->sig[0];
- }
- return ready != 0;
-}
-
-/* Reevaluate whether the task has signals pending delivery.
- This is required every time the blocked sigset_t changes.
- All callers should have t->sigmask_lock. */
-
-static inline void recalc_sigpending(struct task_struct *t)
-{
- t->sigpending = has_pending_signals(&t->pending.signal, &t->blocked);
-}
-
-/* True if we are on the alternate signal stack. */
-
-static inline int on_sig_stack(unsigned long sp)
-{
- return (sp - current->sas_ss_sp < current->sas_ss_size);
-}
-
-static inline int sas_ss_flags(unsigned long sp)
-{
- return (current->sas_ss_size == 0 ? SS_DISABLE
- : on_sig_stack(sp) ? SS_ONSTACK : 0);
-}
-
-extern int request_irq(unsigned int,
- void (*handler)(int, void *, struct pt_regs *),
- unsigned long, const char *, void *);
-extern void free_irq(unsigned int, void *);
-
-/*
- * This has now become a routine instead of a macro, it sets a flag if
- * it returns true (to do BSD-style accounting where the process is flagged
- * if it uses root privs). The implication of this is that you should do
- * normal permissions checks first, and check suser() last.
- *
- * [Dec 1997 -- Chris Evans]
- * For correctness, the above considerations need to be extended to
- * fsuser(). This is done, along with moving fsuser() checks to be
- * last.
- *
- * These will be removed, but in the mean time, when the SECURE_NOROOT
- * flag is set, uids don't grant privilege.
- */
-static inline int suser(void)
-{
- if (!issecure(SECURE_NOROOT) && current->euid == 0) {
- current->flags |= PF_SUPERPRIV;
- return 1;
- }
- return 0;
-}
-
-static inline int fsuser(void)
-{
- if (!issecure(SECURE_NOROOT) && current->fsuid == 0) {
- current->flags |= PF_SUPERPRIV;
- return 1;
- }
- return 0;
-}
-
-/*
- * capable() checks for a particular capability.
- * New privilege checks should use this interface, rather than suser() or
- * fsuser(). See include/linux/capability.h for defined capabilities.
- */
-
-static inline int capable(int cap)
-{
-#if 1 /* ok now */
- if (cap_raised(current->cap_effective, cap))
-#else
- if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
-#endif
- {
- current->flags |= PF_SUPERPRIV;
- return 1;
- }
- return 0;
-}
-
-/*
- * Routines for handling mm_structs
- */
-extern struct mm_struct * mm_alloc(void);
-
-extern struct mm_struct * start_lazy_tlb(void);
-extern void end_lazy_tlb(struct mm_struct *mm);
-
-/* mmdrop drops the mm and the page tables */
-extern inline void FASTCALL(__mmdrop(struct mm_struct *));
-static inline void mmdrop(struct mm_struct * mm)
-{
- if (atomic_dec_and_test(&mm->mm_count))
- __mmdrop(mm);
-}
-
-/* mmput gets rid of the mappings and all user-space */
-extern void mmput(struct mm_struct *);
-/* Remove the current tasks stale references to the old mm_struct */
-extern void mm_release(void);
-
-/*
- * Routines for handling the fd arrays
- */
-extern struct file ** alloc_fd_array(int);
-extern int expand_fd_array(struct files_struct *, int nr);
-extern void free_fd_array(struct file **, int);
-
-extern fd_set *alloc_fdset(int);
-extern int expand_fdset(struct files_struct *, int nr);
-extern void free_fdset(fd_set *, int);
-
-extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
-extern void flush_thread(void);
-extern void exit_thread(void);
-
-extern void exit_mm(struct task_struct *);
-extern void exit_files(struct task_struct *);
-extern void exit_sighand(struct task_struct *);
-
-extern void reparent_to_init(void);
-extern void daemonize(void);
-
-extern int do_execve(char *, char **, char **, struct pt_regs *);
-extern int do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long);
-
-extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
-extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
-extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
-
-extern long kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
-
-#define __wait_event(wq, condition) \
-do { \
- wait_queue_t __wait; \
- init_waitqueue_entry(&__wait, current); \
- \
- add_wait_queue(&wq, &__wait); \
- for (;;) { \
- set_current_state(TASK_UNINTERRUPTIBLE); \
- if (condition) \
- break; \
- schedule(); \
- } \
- current->state = TASK_RUNNING; \
- remove_wait_queue(&wq, &__wait); \
-} while (0)
-
-#define wait_event(wq, condition) \
-do { \
- if (condition) \
- break; \
- __wait_event(wq, condition); \
-} while (0)
-
-#define __wait_event_interruptible(wq, condition, ret) \
-do { \
- wait_queue_t __wait; \
- init_waitqueue_entry(&__wait, current); \
- \
- add_wait_queue(&wq, &__wait); \
- for (;;) { \
- set_current_state(TASK_INTERRUPTIBLE); \
- if (condition) \
- break; \
- if (!signal_pending(current)) { \
- schedule(); \
- continue; \
- } \
- ret = -ERESTARTSYS; \
- break; \
- } \
- current->state = TASK_RUNNING; \
- remove_wait_queue(&wq, &__wait); \
-} while (0)
-
-#define wait_event_interruptible(wq, condition) \
-({ \
- int __ret = 0; \
- if (!(condition)) \
- __wait_event_interruptible(wq, condition, __ret); \
- __ret; \
-})
-
-#define REMOVE_LINKS(p) do { \
- (p)->next_task->prev_task = (p)->prev_task; \
- (p)->prev_task->next_task = (p)->next_task; \
- if ((p)->p_osptr) \
- (p)->p_osptr->p_ysptr = (p)->p_ysptr; \
- if ((p)->p_ysptr) \
- (p)->p_ysptr->p_osptr = (p)->p_osptr; \
- else \
- (p)->p_pptr->p_cptr = (p)->p_osptr; \
- } while (0)
-
-#define SET_LINKS(p) do { \
- (p)->next_task = &init_task; \
- (p)->prev_task = init_task.prev_task; \
- init_task.prev_task->next_task = (p); \
- init_task.prev_task = (p); \
- (p)->p_ysptr = NULL; \
- if (((p)->p_osptr = (p)->p_pptr->p_cptr) != NULL) \
- (p)->p_osptr->p_ysptr = p; \
- (p)->p_pptr->p_cptr = p; \
- } while (0)
-
-#define for_each_task(p) \
- for (p = &init_task ; (p = p->next_task) != &init_task ; )
-
-#define for_each_thread(task) \
- for (task = next_thread(current) ; task != current ; task = next_thread(task))
-
-#define next_thread(p) \
- list_entry((p)->thread_group.next, struct task_struct, thread_group)
-
-#define thread_group_leader(p) (p->pid == p->tgid)
-
-static inline void del_from_runqueue(struct task_struct * p)
-{
- nr_running--;
- p->sleep_time = jiffies;
- list_del(&p->run_list);
- p->run_list.next = NULL;
-}
-
-static inline int task_on_runqueue(struct task_struct *p)
-{
- return (p->run_list.next != NULL);
-}
-
-static inline void unhash_process(struct task_struct *p)
-{
- if (task_on_runqueue(p))
- out_of_line_bug();
- write_lock_irq(&tasklist_lock);
- nr_threads--;
- unhash_pid(p);
- REMOVE_LINKS(p);
- list_del(&p->thread_group);
- write_unlock_irq(&tasklist_lock);
-}
-
-/* Protects ->fs, ->files, ->mm, and synchronises with wait4(). Nests inside tasklist_lock */
-static inline void task_lock(struct task_struct *p)
-{
- spin_lock(&p->alloc_lock);
-}
-
-static inline void task_unlock(struct task_struct *p)
-{
- spin_unlock(&p->alloc_lock);
-}
-
-/* write full pathname into buffer and return start of pathname */
-static inline char * d_path(struct dentry *dentry, struct vfsmount *vfsmnt,
- char *buf, int buflen)
-{
- char *res;
- struct vfsmount *rootmnt;
- struct dentry *root;
- read_lock(&current->fs->lock);
- rootmnt = mntget(current->fs->rootmnt);
- root = dget(current->fs->root);
- read_unlock(&current->fs->lock);
- spin_lock(&dcache_lock);
- res = __d_path(dentry, vfsmnt, root, rootmnt, buf, buflen);
- spin_unlock(&dcache_lock);
- dput(root);
- mntput(rootmnt);
- return res;
-}
-
-static inline int need_resched(void)
-{
- return (unlikely(current->need_resched));
-}
-
-extern void __cond_resched(void);
-static inline void cond_resched(void)
-{
- if (need_resched())
- __cond_resched();
-}
-
-#endif /* __KERNEL__ */
-#endif
diff --git a/xenolinux-2.4.25-sparse/include/linux/sunrpc/debug.h b/xenolinux-2.4.25-sparse/include/linux/sunrpc/debug.h
deleted file mode 100644
index 67dbfb887e..0000000000
--- a/xenolinux-2.4.25-sparse/include/linux/sunrpc/debug.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * linux/include/linux/sunrpc/debug.h
- *
- * Debugging support for sunrpc module
- *
- * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
- */
-
-#ifndef _LINUX_SUNRPC_DEBUG_H_
-#define _LINUX_SUNRPC_DEBUG_H_
-
-#include <linux/config.h>
-
-#include <linux/timer.h>
-#include <linux/tqueue.h>
-
-/*
- * Enable RPC debugging/profiling.
- */
-/*#ifdef CONFIG_SYSCTL*/
-/*#define RPC_DEBUG*/
-/*#endif*/
-/* #define RPC_PROFILE */
-
-/*
- * RPC debug facilities
- */
-#define RPCDBG_XPRT 0x0001
-#define RPCDBG_CALL 0x0002
-#define RPCDBG_DEBUG 0x0004
-#define RPCDBG_NFS 0x0008
-#define RPCDBG_AUTH 0x0010
-#define RPCDBG_PMAP 0x0020
-#define RPCDBG_SCHED 0x0040
-#define RPCDBG_SVCSOCK 0x0100
-#define RPCDBG_SVCDSP 0x0200
-#define RPCDBG_MISC 0x0400
-#define RPCDBG_ALL 0x7fff
-
-#ifdef __KERNEL__
-
-/*
- * Debugging macros etc
- */
-#ifdef RPC_DEBUG
-extern unsigned int rpc_debug;
-extern unsigned int nfs_debug;
-extern unsigned int nfsd_debug;
-extern unsigned int nlm_debug;
-#endif
-
-#define dprintk(args...) dfprintk(FACILITY, ## args)
-
-#undef ifdebug
-#ifdef RPC_DEBUG
-# define ifdebug(fac) if (rpc_debug & RPCDBG_##fac)
-# define dfprintk(fac, args...) do { ifdebug(fac) printk(args); } while(0)
-# define RPC_IFDEBUG(x) x
-#else
-# define dfprintk(fac, args...) do ; while (0)
-# define RPC_IFDEBUG(x)
-#endif
-
-#ifdef RPC_PROFILE
-# define pprintk(args...) printk(## args)
-#else
-# define pprintk(args...) do ; while (0)
-#endif
-
-/*
- * Sysctl interface for RPC debugging
- */
-#ifdef RPC_DEBUG
-void rpc_register_sysctl(void);
-void rpc_unregister_sysctl(void);
-#endif
-
-#endif /* __KERNEL__ */
-
-/*
- * Declarations for the sysctl debug interface, which allows to read or
- * change the debug flags for rpc, nfs, nfsd, and lockd. Since the sunrpc
- * module currently registers its sysctl table dynamically, the sysctl path
- * for module FOO is <CTL_SUNRPC, CTL_FOODEBUG>.
- */
-#define CTL_SUNRPC 7249 /* arbitrary and hopefully unused */
-
-enum {
- CTL_RPCDEBUG = 1,
- CTL_NFSDEBUG,
- CTL_NFSDDEBUG,
- CTL_NLMDEBUG,
-};
-
-#endif /* _LINUX_SUNRPC_DEBUG_H_ */
diff --git a/xenolinux-2.4.25-sparse/include/linux/timer.h b/xenolinux-2.4.25-sparse/include/linux/timer.h
deleted file mode 100644
index 238083218f..0000000000
--- a/xenolinux-2.4.25-sparse/include/linux/timer.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef _LINUX_TIMER_H
-#define _LINUX_TIMER_H
-
-#include <linux/config.h>
-#include <linux/list.h>
-
-/*
- * In Linux 2.4, static timers have been removed from the kernel.
- * Timers may be dynamically created and destroyed, and should be initialized
- * by a call to init_timer() upon creation.
- *
- * The "data" field enables use of a common timeout function for several
- * timeouts. You can use this field to distinguish between the different
- * invocations.
- */
-struct timer_list {
- struct list_head list;
- unsigned long expires;
- unsigned long data;
- void (*function)(unsigned long);
-};
-
-extern void add_timer(struct timer_list * timer);
-extern int del_timer(struct timer_list * timer);
-#ifdef CONFIG_NO_IDLE_HZ
-extern struct timer_list *next_timer_event(void);
-#endif
-
-#ifdef CONFIG_SMP
-extern int del_timer_sync(struct timer_list * timer);
-extern void sync_timers(void);
-#else
-#define del_timer_sync(t) del_timer(t)
-#define sync_timers() do { } while (0)
-#endif
-
-/*
- * mod_timer is a more efficient way to update the expire field of an
- * active timer (if the timer is inactive it will be activated)
- * mod_timer(a,b) is equivalent to del_timer(a); a->expires = b; add_timer(a).
- * If the timer is known to be not pending (ie, in the handler), mod_timer
- * is less efficient than a->expires = b; add_timer(a).
- */
-int mod_timer(struct timer_list *timer, unsigned long expires);
-
-extern void it_real_fn(unsigned long);
-
-static inline void init_timer(struct timer_list * timer)
-{
- timer->list.next = timer->list.prev = NULL;
-}
-
-static inline int timer_pending (const struct timer_list * timer)
-{
- return timer->list.next != NULL;
-}
-
-/*
- * These inlines deal with timer wrapping correctly. You are
- * strongly encouraged to use them
- * 1. Because people otherwise forget
- * 2. Because if the timer wrap changes in future you wont have to
- * alter your driver code.
- *
- * time_after(a,b) returns true if the time a is after time b.
- *
- * Do this with "<0" and ">=0" to only test the sign of the result. A
- * good compiler would generate better code (and a really good compiler
- * wouldn't care). Gcc is currently neither.
- */
-#define time_after(a,b) ((long)(b) - (long)(a) < 0)
-#define time_before(a,b) time_after(b,a)
-
-#define time_after_eq(a,b) ((long)(a) - (long)(b) >= 0)
-#define time_before_eq(a,b) time_after_eq(b,a)
-
-#endif
diff --git a/xenolinux-2.4.25-sparse/init/do_mounts.c b/xenolinux-2.4.25-sparse/init/do_mounts.c
deleted file mode 100644
index 6d09888fc8..0000000000
--- a/xenolinux-2.4.25-sparse/init/do_mounts.c
+++ /dev/null
@@ -1,1084 +0,0 @@
-#define __KERNEL_SYSCALLS__
-#include <linux/config.h>
-#include <linux/slab.h>
-#include <linux/devfs_fs_kernel.h>
-#include <linux/unistd.h>
-#include <linux/ctype.h>
-#include <linux/blk.h>
-#include <linux/fd.h>
-#include <linux/tty.h>
-#include <linux/init.h>
-
-#include <linux/nfs_fs.h>
-#include <linux/nfs_fs_sb.h>
-#include <linux/nfs_mount.h>
-#include <linux/minix_fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/romfs_fs.h>
-#include <linux/cramfs_fs.h>
-
-#define BUILD_CRAMDISK
-
-extern int get_filesystem_list(char * buf);
-
-extern asmlinkage long sys_mount(char *dev_name, char *dir_name, char *type,
- unsigned long flags, void *data);
-extern asmlinkage long sys_mkdir(const char *name, int mode);
-extern asmlinkage long sys_chdir(const char *name);
-extern asmlinkage long sys_fchdir(int fd);
-extern asmlinkage long sys_chroot(const char *name);
-extern asmlinkage long sys_unlink(const char *name);
-extern asmlinkage long sys_symlink(const char *old, const char *new);
-extern asmlinkage long sys_mknod(const char *name, int mode, dev_t dev);
-extern asmlinkage long sys_umount(char *name, int flags);
-extern asmlinkage long sys_ioctl(int fd, int cmd, unsigned long arg);
-
-#ifdef CONFIG_BLK_DEV_INITRD
-unsigned int real_root_dev; /* do_proc_dointvec cannot handle kdev_t */
-static int __initdata mount_initrd = 1;
-
-static int __init no_initrd(char *str)
-{
- mount_initrd = 0;
- return 1;
-}
-
-__setup("noinitrd", no_initrd);
-#else
-static int __initdata mount_initrd = 0;
-#endif
-
-int __initdata rd_doload; /* 1 = load RAM disk, 0 = don't load */
-
-int root_mountflags = MS_RDONLY | MS_VERBOSE;
-static char root_device_name[64];
-
-/* this is initialized in init/main.c */
-kdev_t ROOT_DEV;
-
-static int do_devfs = 0;
-
-static int __init load_ramdisk(char *str)
-{
- rd_doload = simple_strtol(str,NULL,0) & 3;
- return 1;
-}
-__setup("load_ramdisk=", load_ramdisk);
-
-static int __init readonly(char *str)
-{
- if (*str)
- return 0;
- root_mountflags |= MS_RDONLY;
- return 1;
-}
-
-static int __init readwrite(char *str)
-{
- if (*str)
- return 0;
- root_mountflags &= ~MS_RDONLY;
- return 1;
-}
-
-__setup("ro", readonly);
-__setup("rw", readwrite);
-
-static struct dev_name_struct {
- const char *name;
- const int num;
-} root_dev_names[] __initdata = {
- { "nfs", MKDEV(NFS_MAJOR, NFS_MINOR) },
- { "hda", 0x0300 },
- { "hdb", 0x0340 },
- { "loop", 0x0700 },
- { "hdc", 0x1600 },
- { "hdd", 0x1640 },
- { "hde", 0x2100 },
- { "hdf", 0x2140 },
- { "hdg", 0x2200 },
- { "hdh", 0x2240 },
- { "hdi", 0x3800 },
- { "hdj", 0x3840 },
- { "hdk", 0x3900 },
- { "hdl", 0x3940 },
- { "hdm", 0x5800 },
- { "hdn", 0x5840 },
- { "hdo", 0x5900 },
- { "hdp", 0x5940 },
- { "hdq", 0x5A00 },
- { "hdr", 0x5A40 },
- { "hds", 0x5B00 },
- { "hdt", 0x5B40 },
- { "sda", 0x0800 },
- { "sdb", 0x0810 },
- { "sdc", 0x0820 },
- { "sdd", 0x0830 },
- { "sde", 0x0840 },
- { "sdf", 0x0850 },
- { "sdg", 0x0860 },
- { "sdh", 0x0870 },
- { "sdi", 0x0880 },
- { "sdj", 0x0890 },
- { "sdk", 0x08a0 },
- { "sdl", 0x08b0 },
- { "sdm", 0x08c0 },
- { "sdn", 0x08d0 },
- { "sdo", 0x08e0 },
- { "sdp", 0x08f0 },
- { "ada", 0x1c00 },
- { "adb", 0x1c10 },
- { "adc", 0x1c20 },
- { "add", 0x1c30 },
- { "ade", 0x1c40 },
- { "fd", 0x0200 },
- { "md", 0x0900 },
- { "xda", 0x0d00 },
- { "xdb", 0x0d40 },
- { "ram", 0x0100 },
- { "scd", 0x0b00 },
- { "mcd", 0x1700 },
- { "cdu535", 0x1800 },
- { "sonycd", 0x1800 },
- { "aztcd", 0x1d00 },
- { "cm206cd", 0x2000 },
- { "gscd", 0x1000 },
- { "sbpcd", 0x1900 },
- { "eda", 0x2400 },
- { "edb", 0x2440 },
- { "pda", 0x2d00 },
- { "pdb", 0x2d10 },
- { "pdc", 0x2d20 },
- { "pdd", 0x2d30 },
- { "pcd", 0x2e00 },
- { "pf", 0x2f00 },
- { "apblock", APBLOCK_MAJOR << 8},
- { "ddv", DDV_MAJOR << 8},
- { "jsfd", JSFD_MAJOR << 8},
-#if defined(CONFIG_ARCH_S390)
- { "dasda", (DASD_MAJOR << MINORBITS) },
- { "dasdb", (DASD_MAJOR << MINORBITS) + (1 << 2) },
- { "dasdc", (DASD_MAJOR << MINORBITS) + (2 << 2) },
- { "dasdd", (DASD_MAJOR << MINORBITS) + (3 << 2) },
- { "dasde", (DASD_MAJOR << MINORBITS) + (4 << 2) },
- { "dasdf", (DASD_MAJOR << MINORBITS) + (5 << 2) },
- { "dasdg", (DASD_MAJOR << MINORBITS) + (6 << 2) },
- { "dasdh", (DASD_MAJOR << MINORBITS) + (7 << 2) },
-#endif
- { "ida/c0d0p",0x4800 },
- { "ida/c0d1p",0x4810 },
- { "ida/c0d2p",0x4820 },
- { "ida/c0d3p",0x4830 },
- { "ida/c0d4p",0x4840 },
- { "ida/c0d5p",0x4850 },
- { "ida/c0d6p",0x4860 },
- { "ida/c0d7p",0x4870 },
- { "ida/c0d8p",0x4880 },
- { "ida/c0d9p",0x4890 },
- { "ida/c0d10p",0x48A0 },
- { "ida/c0d11p",0x48B0 },
- { "ida/c0d12p",0x48C0 },
- { "ida/c0d13p",0x48D0 },
- { "ida/c0d14p",0x48E0 },
- { "ida/c0d15p",0x48F0 },
- { "ida/c1d0p",0x4900 },
- { "ida/c2d0p",0x4A00 },
- { "ida/c3d0p",0x4B00 },
- { "ida/c4d0p",0x4C00 },
- { "ida/c5d0p",0x4D00 },
- { "ida/c6d0p",0x4E00 },
- { "ida/c7d0p",0x4F00 },
- { "cciss/c0d0p",0x6800 },
- { "cciss/c0d1p",0x6810 },
- { "cciss/c0d2p",0x6820 },
- { "cciss/c0d3p",0x6830 },
- { "cciss/c0d4p",0x6840 },
- { "cciss/c0d5p",0x6850 },
- { "cciss/c0d6p",0x6860 },
- { "cciss/c0d7p",0x6870 },
- { "cciss/c0d8p",0x6880 },
- { "cciss/c0d9p",0x6890 },
- { "cciss/c0d10p",0x68A0 },
- { "cciss/c0d11p",0x68B0 },
- { "cciss/c0d12p",0x68C0 },
- { "cciss/c0d13p",0x68D0 },
- { "cciss/c0d14p",0x68E0 },
- { "cciss/c0d15p",0x68F0 },
- { "cciss/c1d0p",0x6900 },
- { "cciss/c2d0p",0x6A00 },
- { "cciss/c3d0p",0x6B00 },
- { "cciss/c4d0p",0x6C00 },
- { "cciss/c5d0p",0x6D00 },
- { "cciss/c6d0p",0x6E00 },
- { "cciss/c7d0p",0x6F00 },
- { "ataraid/d0p",0x7200 },
- { "ataraid/d1p",0x7210 },
- { "ataraid/d2p",0x7220 },
- { "ataraid/d3p",0x7230 },
- { "ataraid/d4p",0x7240 },
- { "ataraid/d5p",0x7250 },
- { "ataraid/d6p",0x7260 },
- { "ataraid/d7p",0x7270 },
- { "ataraid/d8p",0x7280 },
- { "ataraid/d9p",0x7290 },
- { "ataraid/d10p",0x72A0 },
- { "ataraid/d11p",0x72B0 },
- { "ataraid/d12p",0x72C0 },
- { "ataraid/d13p",0x72D0 },
- { "ataraid/d14p",0x72E0 },
- { "ataraid/d15p",0x72F0 },
- { "rd/c0d0p",0x3000 },
- { "rd/c0d0p1",0x3001 },
- { "rd/c0d0p2",0x3002 },
- { "rd/c0d0p3",0x3003 },
- { "rd/c0d0p4",0x3004 },
- { "rd/c0d0p5",0x3005 },
- { "rd/c0d0p6",0x3006 },
- { "rd/c0d0p7",0x3007 },
- { "rd/c0d0p8",0x3008 },
- { "rd/c0d1p",0x3008 },
- { "rd/c0d1p1",0x3009 },
- { "rd/c0d1p2",0x300a },
- { "rd/c0d1p3",0x300b },
- { "rd/c0d1p4",0x300c },
- { "rd/c0d1p5",0x300d },
- { "rd/c0d1p6",0x300e },
- { "rd/c0d1p7",0x300f },
- { "rd/c0d1p8",0x3010 },
- { "nftla", 0x5d00 },
- { "nftlb", 0x5d10 },
- { "nftlc", 0x5d20 },
- { "nftld", 0x5d30 },
- { "ftla", 0x2c00 },
- { "ftlb", 0x2c08 },
- { "ftlc", 0x2c10 },
- { "ftld", 0x2c18 },
- { "mtdblock", 0x1f00 },
- { "nb", 0x2b00 },
-#if defined(CONFIG_XEN_VBD)
- { "xvda", 0x7D00 }, { "xvdb", 0x7D10 },
- { "xvdc", 0x7D20 }, { "xvdd", 0x7D30 },
- { "xvde", 0x7D40 }, { "xvdf", 0x7D50 },
- { "xvdg", 0x7D60 }, { "xvdh", 0x7D70 },
- { "xvdi", 0x7D80 }, { "xvdj", 0x7D90 },
- { "xvdk", 0x7DA0 }, { "xvdl", 0x7DB0 },
- { "xvdm", 0x7DC0 }, { "xvdn", 0x7DD0 },
- { "xvdo", 0x7DE0 }, { "xvdp", 0x7DF0 },
-#endif
- { NULL, 0 }
-};
-
-kdev_t __init name_to_kdev_t(char *line)
-{
- int base = 0, offs;
- char *end;
-
- if (strncmp(line,"/dev/",5) == 0) {
- struct dev_name_struct *dev = root_dev_names;
- line += 5;
- do {
- int len = strlen(dev->name);
- if (strncmp(line,dev->name,len) == 0) {
- line += len;
- base = dev->num;
- break;
- }
- dev++;
- } while (dev->name);
- }
- offs = simple_strtoul(line, &end, base?10:16);
- if (*end)
- offs = 0;
- return to_kdev_t(base + offs);
-}
-
-static int __init root_dev_setup(char *line)
-{
- int i;
- char ch;
-
- ROOT_DEV = name_to_kdev_t(line);
- memset (root_device_name, 0, sizeof root_device_name);
- if (strncmp (line, "/dev/", 5) == 0) line += 5;
- for (i = 0; i < sizeof root_device_name - 1; ++i)
- {
- ch = line[i];
- if ( isspace (ch) || (ch == ',') || (ch == '\0') ) break;
- root_device_name[i] = ch;
- }
- return 1;
-}
-
-__setup("root=", root_dev_setup);
-
-static char * __initdata root_mount_data;
-static int __init root_data_setup(char *str)
-{
- root_mount_data = str;
- return 1;
-}
-
-static char * __initdata root_fs_names;
-static int __init fs_names_setup(char *str)
-{
- root_fs_names = str;
- return 1;
-}
-
-__setup("rootflags=", root_data_setup);
-__setup("rootfstype=", fs_names_setup);
-
-static void __init get_fs_names(char *page)
-{
- char *s = page;
-
- if (root_fs_names) {
- strcpy(page, root_fs_names);
- while (*s++) {
- if (s[-1] == ',')
- s[-1] = '\0';
- }
- } else {
- int len = get_filesystem_list(page);
- char *p, *next;
-
- page[len] = '\0';
- for (p = page-1; p; p = next) {
- next = strchr(++p, '\n');
- if (*p++ != '\t')
- continue;
- while ((*s++ = *p++) != '\n')
- ;
- s[-1] = '\0';
- }
- }
- *s = '\0';
-}
-static void __init mount_block_root(char *name, int flags)
-{
- char *fs_names = __getname();
- char *p;
-
- get_fs_names(fs_names);
-retry:
- for (p = fs_names; *p; p += strlen(p)+1) {
- int err = sys_mount(name, "/root", p, flags, root_mount_data);
- switch (err) {
- case 0:
- goto out;
- case -EACCES:
- flags |= MS_RDONLY;
- goto retry;
- case -EINVAL:
- case -EBUSY:
- continue;
- }
- /*
- * Allow the user to distinguish between failed open
- * and bad superblock on root device.
- */
- printk ("VFS: Cannot open root device \"%s\" or %s\n",
- root_device_name, kdevname (ROOT_DEV));
- printk ("Please append a correct \"root=\" boot option\n");
- panic("VFS: Unable to mount root fs on %s",
- kdevname(ROOT_DEV));
- }
- panic("VFS: Unable to mount root fs on %s", kdevname(ROOT_DEV));
-out:
- putname(fs_names);
- sys_chdir("/root");
- ROOT_DEV = current->fs->pwdmnt->mnt_sb->s_dev;
- printk("VFS: Mounted root (%s filesystem)%s.\n",
- current->fs->pwdmnt->mnt_sb->s_type->name,
- (current->fs->pwdmnt->mnt_sb->s_flags & MS_RDONLY) ? " readonly" : "");
-}
-
-#ifdef CONFIG_ROOT_NFS
-static int __init mount_nfs_root(void)
-{
- void *data = nfs_root_data();
-
- if (data && sys_mount("/dev/root","/root","nfs",root_mountflags,data) == 0)
- return 1;
- return 0;
-}
-#endif
-
-static int __init create_dev(char *name, kdev_t dev, char *devfs_name)
-{
- void *handle;
- char path[64];
- int n;
-
- sys_unlink(name);
- if (!do_devfs)
- return sys_mknod(name, S_IFBLK|0600, kdev_t_to_nr(dev));
-
- handle = devfs_find_handle(NULL, dev ? NULL : devfs_name,
- MAJOR(dev), MINOR(dev), DEVFS_SPECIAL_BLK, 1);
- if (!handle)
- return -1;
- n = devfs_generate_path(handle, path + 5, sizeof (path) - 5);
- if (n < 0)
- return -1;
- return sys_symlink(path + n + 5, name);
-}
-
-#if defined(CONFIG_BLK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
-static void __init change_floppy(char *fmt, ...)
-{
- struct termios termios;
- char buf[80];
- char c;
- int fd;
- va_list args;
- va_start(args, fmt);
- vsprintf(buf, fmt, args);
- va_end(args);
- fd = open("/dev/root", O_RDWR | O_NDELAY, 0);
- if (fd >= 0) {
- sys_ioctl(fd, FDEJECT, 0);
- close(fd);
- }
- printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
- fd = open("/dev/console", O_RDWR, 0);
- if (fd >= 0) {
- sys_ioctl(fd, TCGETS, (long)&termios);
- termios.c_lflag &= ~ICANON;
- sys_ioctl(fd, TCSETSF, (long)&termios);
- read(fd, &c, 1);
- termios.c_lflag |= ICANON;
- sys_ioctl(fd, TCSETSF, (long)&termios);
- close(fd);
- }
-}
-#endif
-
-#ifdef CONFIG_BLK_DEV_RAM
-
-int __initdata rd_prompt = 1; /* 1 = prompt for RAM disk, 0 = don't prompt */
-
-static int __init prompt_ramdisk(char *str)
-{
- rd_prompt = simple_strtol(str,NULL,0) & 1;
- return 1;
-}
-__setup("prompt_ramdisk=", prompt_ramdisk);
-
-int __initdata rd_image_start; /* starting block # of image */
-
-static int __init ramdisk_start_setup(char *str)
-{
- rd_image_start = simple_strtol(str,NULL,0);
- return 1;
-}
-__setup("ramdisk_start=", ramdisk_start_setup);
-
-static int __init crd_load(int in_fd, int out_fd);
-
-/*
- * This routine tries to find a RAM disk image to load, and returns the
- * number of blocks to read for a non-compressed image, 0 if the image
- * is a compressed image, and -1 if an image with the right magic
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
- * minix
- * ext2
- * romfs
- * cramfs
- * gzip
- */
-static int __init
-identify_ramdisk_image(int fd, int start_block)
-{
- const int size = 512;
- struct minix_super_block *minixsb;
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
- int nblocks = -1;
- unsigned char *buf;
-
- buf = kmalloc(size, GFP_KERNEL);
- if (buf == 0)
- return -1;
-
- minixsb = (struct minix_super_block *) buf;
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
- memset(buf, 0xe5, size);
-
- /*
- * Read block 0 to test for gzipped kernel
- */
- lseek(fd, start_block * BLOCK_SIZE, 0);
- read(fd, buf, size);
-
- /*
- * If it matches the gzip magic numbers, return -1
- */
- if (buf[0] == 037 && ((buf[1] == 0213) || (buf[1] == 0236))) {
- printk(KERN_NOTICE
- "RAMDISK: Compressed image found at block %d\n",
- start_block);
- nblocks = 0;
- goto done;
- }
-
- /* romfs is at block zero too */
- if (romfsb->word0 == ROMSB_WORD0 &&
- romfsb->word1 == ROMSB_WORD1) {
- printk(KERN_NOTICE
- "RAMDISK: romfs filesystem found at block %d\n",
- start_block);
- nblocks = (ntohl(romfsb->size)+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
- goto done;
- }
-
- if (cramfsb->magic == CRAMFS_MAGIC) {
- printk(KERN_NOTICE
- "RAMDISK: cramfs filesystem found at block %d\n",
- start_block);
- nblocks = (cramfsb->size + BLOCK_SIZE - 1) >> BLOCK_SIZE_BITS;
- goto done;
- }
-
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
- lseek(fd, (start_block+1) * BLOCK_SIZE, 0);
- read(fd, buf, size);
-
- /* Try minix */
- if (minixsb->s_magic == MINIX_SUPER_MAGIC ||
- minixsb->s_magic == MINIX_SUPER_MAGIC2) {
- printk(KERN_NOTICE
- "RAMDISK: Minix filesystem found at block %d\n",
- start_block);
- nblocks = minixsb->s_nzones << minixsb->s_log_zone_size;
- goto done;
- }
-
- /* Try ext2 */
- if (ext2sb->s_magic == cpu_to_le16(EXT2_SUPER_MAGIC)) {
- printk(KERN_NOTICE
- "RAMDISK: ext2 filesystem found at block %d\n",
- start_block);
- nblocks = le32_to_cpu(ext2sb->s_blocks_count);
- goto done;
- }
-
- printk(KERN_NOTICE
- "RAMDISK: Couldn't find valid RAM disk image starting at %d.\n",
- start_block);
-
-done:
- lseek(fd, start_block * BLOCK_SIZE, 0);
- kfree(buf);
- return nblocks;
-}
-#endif
-
-static int __init rd_load_image(char *from)
-{
- int res = 0;
-
-#ifdef CONFIG_BLK_DEV_RAM
- int in_fd, out_fd;
- unsigned long rd_blocks, devblocks;
- int nblocks, i;
- char *buf;
- unsigned short rotate = 0;
-#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC_ISERIES)
- char rotator[4] = { '|' , '/' , '-' , '\\' };
-#endif
-
- out_fd = open("/dev/ram", O_RDWR, 0);
- if (out_fd < 0)
- goto out;
-
- in_fd = open(from, O_RDONLY, 0);
- if (in_fd < 0)
- goto noclose_input;
-
- nblocks = identify_ramdisk_image(in_fd, rd_image_start);
- if (nblocks < 0)
- goto done;
-
- if (nblocks == 0) {
-#ifdef BUILD_CRAMDISK
- if (crd_load(in_fd, out_fd) == 0)
- goto successful_load;
-#else
- printk(KERN_NOTICE
- "RAMDISK: Kernel does not support compressed "
- "RAM disk images\n");
-#endif
- goto done;
- }
-
- /*
- * NOTE NOTE: nblocks suppose that the blocksize is BLOCK_SIZE, so
- * rd_load_image will work only with filesystem BLOCK_SIZE wide!
- * So make sure to use 1k blocksize while generating ext2fs
- * ramdisk-images.
- */
- if (sys_ioctl(out_fd, BLKGETSIZE, (unsigned long)&rd_blocks) < 0)
- rd_blocks = 0;
- else
- rd_blocks >>= 1;
-
- if (nblocks > rd_blocks) {
- printk("RAMDISK: image too big! (%d/%lu blocks)\n",
- nblocks, rd_blocks);
- goto done;
- }
-
- /*
- * OK, time to copy in the data
- */
- buf = kmalloc(BLOCK_SIZE, GFP_KERNEL);
- if (buf == 0) {
- printk(KERN_ERR "RAMDISK: could not allocate buffer\n");
- goto done;
- }
-
- if (sys_ioctl(in_fd, BLKGETSIZE, (unsigned long)&devblocks) < 0)
- devblocks = 0;
- else
- devblocks >>= 1;
-
- if (strcmp(from, "/dev/initrd") == 0)
- devblocks = nblocks;
-
- if (devblocks == 0) {
- printk(KERN_ERR "RAMDISK: could not determine device size\n");
- goto done;
- }
-
- printk(KERN_NOTICE "RAMDISK: Loading %d blocks [%ld disk%s] into ram disk... ",
- nblocks, ((nblocks-1)/devblocks)+1, nblocks>devblocks ? "s" : "");
- for (i=0; i < nblocks; i++) {
- if (i && (i % devblocks == 0)) {
- printk("done disk #%ld.\n", i/devblocks);
- rotate = 0;
- if (close(in_fd)) {
- printk("Error closing the disk.\n");
- goto noclose_input;
- }
- change_floppy("disk #%d", i/devblocks+1);
- in_fd = open(from, O_RDONLY, 0);
- if (in_fd < 0) {
- printk("Error opening disk.\n");
- goto noclose_input;
- }
- printk("Loading disk #%ld... ", i/devblocks+1);
- }
- read(in_fd, buf, BLOCK_SIZE);
- write(out_fd, buf, BLOCK_SIZE);
-#if !defined(CONFIG_ARCH_S390) && !defined(CONFIG_PPC_ISERIES)
- if (!(i % 16)) {
- printk("%c\b", rotator[rotate & 0x3]);
- rotate++;
- }
-#endif
- }
- printk("done.\n");
- kfree(buf);
-
-successful_load:
- res = 1;
-done:
- close(in_fd);
-noclose_input:
- close(out_fd);
-out:
- sys_unlink("/dev/ram");
-#endif
- return res;
-}
-
-static int __init rd_load_disk(int n)
-{
-#ifdef CONFIG_BLK_DEV_RAM
- if (rd_prompt)
- change_floppy("root floppy disk to be loaded into RAM disk");
- create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, n), NULL);
-#endif
- return rd_load_image("/dev/root");
-}
-
-#ifdef CONFIG_DEVFS_FS
-
-static void __init convert_name(char *prefix, char *name, char *p, int part)
-{
- int host, bus, target, lun;
- char dest[64];
- char src[64];
- char *base = p - 1;
-
- /* Decode "c#b#t#u#" */
- if (*p++ != 'c')
- return;
- host = simple_strtol(p, &p, 10);
- if (*p++ != 'b')
- return;
- bus = simple_strtol(p, &p, 10);
- if (*p++ != 't')
- return;
- target = simple_strtol(p, &p, 10);
- if (*p++ != 'u')
- return;
- lun = simple_strtol(p, &p, 10);
- if (!part)
- sprintf(dest, "%s/host%d/bus%d/target%d/lun%d",
- prefix, host, bus, target, lun);
- else if (*p++ == 'p')
- sprintf(dest, "%s/host%d/bus%d/target%d/lun%d/part%s",
- prefix, host, bus, target, lun, p);
- else
- sprintf(dest, "%s/host%d/bus%d/target%d/lun%d/disc",
- prefix, host, bus, target, lun);
- *base = '\0';
- sprintf(src, "/dev/%s", name);
- sys_mkdir(src, 0755);
- *base = '/';
- sprintf(src, "/dev/%s", name);
- sys_symlink(dest, src);
-}
-
-static void __init devfs_make_root(char *name)
-{
-
- if (!strncmp(name, "sd/", 3))
- convert_name("../scsi", name, name+3, 1);
- else if (!strncmp(name, "sr/", 3))
- convert_name("../scsi", name, name+3, 0);
- else if (!strncmp(name, "ide/hd/", 7))
- convert_name("..", name, name + 7, 1);
- else if (!strncmp(name, "ide/cd/", 7))
- convert_name("..", name, name + 7, 0);
-}
-#else
-static void __init devfs_make_root(char *name)
-{
-}
-#endif
-
-static void __init mount_root(void)
-{
-#ifdef CONFIG_ROOT_NFS
- if (MAJOR(ROOT_DEV) == NFS_MAJOR
- && MINOR(ROOT_DEV) == NFS_MINOR) {
- if (mount_nfs_root()) {
- sys_chdir("/root");
- ROOT_DEV = current->fs->pwdmnt->mnt_sb->s_dev;
- printk("VFS: Mounted root (nfs filesystem).\n");
- return;
- }
- printk(KERN_ERR "VFS: Unable to mount root fs via NFS, trying floppy.\n");
- ROOT_DEV = MKDEV(FLOPPY_MAJOR, 0);
- }
-#endif
-printk("root_device_name = %s\n",root_device_name);
- devfs_make_root(root_device_name);
- create_dev("/dev/root", ROOT_DEV, root_device_name);
-#ifdef CONFIG_BLK_DEV_FD
- if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) {
- /* rd_doload is 2 for a dual initrd/ramload setup */
- if (rd_doload==2) {
- if (rd_load_disk(1)) {
- ROOT_DEV = MKDEV(RAMDISK_MAJOR, 1);
- create_dev("/dev/root", ROOT_DEV, NULL);
- }
- } else
- change_floppy("root floppy");
- }
-#endif
- mount_block_root("/dev/root", root_mountflags);
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-static int old_fd, root_fd;
-static int do_linuxrc(void * shell)
-{
- static char *argv[] = { "linuxrc", NULL, };
- extern char * envp_init[];
-
- close(old_fd);
- close(root_fd);
- close(0);
- close(1);
- close(2);
- setsid();
- (void) open("/dev/console",O_RDWR,0);
- (void) dup(0);
- (void) dup(0);
- return execve(shell, argv, envp_init);
-}
-
-#endif
-
-static void __init handle_initrd(void)
-{
-#ifdef CONFIG_BLK_DEV_INITRD
- int ram0 = kdev_t_to_nr(MKDEV(RAMDISK_MAJOR,0));
- int error;
- int i, pid;
-
- create_dev("/dev/root.old", ram0, NULL);
- /* mount initrd on rootfs' /root */
- mount_block_root("/dev/root.old", root_mountflags & ~MS_RDONLY);
- sys_mkdir("/old", 0700);
- root_fd = open("/", 0, 0);
- old_fd = open("/old", 0, 0);
- /* move initrd over / and chdir/chroot in initrd root */
- sys_chdir("/root");
- sys_mount(".", "/", NULL, MS_MOVE, NULL);
- sys_chroot(".");
- mount_devfs_fs ();
-
- pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
- if (pid > 0) {
- while (pid != wait(&i))
- yield();
- }
-
- /* move initrd to rootfs' /old */
- sys_fchdir(old_fd);
- sys_mount("/", ".", NULL, MS_MOVE, NULL);
- /* switch root and cwd back to / of rootfs */
- sys_fchdir(root_fd);
- sys_chroot(".");
- sys_umount("/old/dev", 0);
- close(old_fd);
- close(root_fd);
-
- if (real_root_dev == ram0) {
- sys_chdir("/old");
- return;
- }
-
- ROOT_DEV = real_root_dev;
- mount_root();
-
- printk(KERN_NOTICE "Trying to move old root to /initrd ... ");
- error = sys_mount("/old", "/root/initrd", NULL, MS_MOVE, NULL);
- if (!error)
- printk("okay\n");
- else {
- int fd = open("/dev/root.old", O_RDWR, 0);
- printk("failed\n");
- printk(KERN_NOTICE "Unmounting old root\n");
- sys_umount("/old", MNT_DETACH);
- printk(KERN_NOTICE "Trying to free ramdisk memory ... ");
- if (fd < 0) {
- error = fd;
- } else {
- error = sys_ioctl(fd, BLKFLSBUF, 0);
- close(fd);
- }
- printk(!error ? "okay\n" : "failed\n");
- }
-#endif
-}
-
-static int __init initrd_load(void)
-{
-#ifdef CONFIG_BLK_DEV_INITRD
- create_dev("/dev/ram", MKDEV(RAMDISK_MAJOR, 0), NULL);
- create_dev("/dev/initrd", MKDEV(RAMDISK_MAJOR, INITRD_MINOR), NULL);
-#endif
- return rd_load_image("/dev/initrd");
-}
-
-/*
- * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
- */
-void prepare_namespace(void)
-{
- int is_floppy = MAJOR(ROOT_DEV) == FLOPPY_MAJOR;
-#ifdef CONFIG_ALL_PPC
- extern void arch_discover_root(void);
- arch_discover_root();
-#endif /* CONFIG_ALL_PPC */
-#ifdef CONFIG_BLK_DEV_INITRD
- if (!initrd_start)
- mount_initrd = 0;
- real_root_dev = ROOT_DEV;
-#endif
- sys_mkdir("/dev", 0700);
- sys_mkdir("/root", 0700);
- sys_mknod("/dev/console", S_IFCHR|0600, MKDEV(TTYAUX_MAJOR, 1));
-#ifdef CONFIG_DEVFS_FS
- sys_mount("devfs", "/dev", "devfs", 0, NULL);
- do_devfs = 1;
-#endif
-
- create_dev("/dev/root", ROOT_DEV, NULL);
- if (mount_initrd) {
- if (initrd_load() && ROOT_DEV != MKDEV(RAMDISK_MAJOR, 0)) {
- handle_initrd();
- goto out;
- }
- } else if (is_floppy && rd_doload && rd_load_disk(0))
- ROOT_DEV = MKDEV(RAMDISK_MAJOR, 0);
- mount_root();
-out:
- sys_umount("/dev", 0);
- sys_mount(".", "/", NULL, MS_MOVE, NULL);
- sys_chroot(".");
- mount_devfs_fs ();
-}
-
-#ifdef CONFIG_BLK_DEV_RAM
-
-#if defined(BUILD_CRAMDISK) && defined(CONFIG_BLK_DEV_RAM)
-
-/*
- * gzip declarations
- */
-
-#define OF(args) args
-
-#ifndef memzero
-#define memzero(s, n) memset ((s), 0, (n))
-#endif
-
-typedef unsigned char uch;
-typedef unsigned short ush;
-typedef unsigned long ulg;
-
-#define INBUFSIZ 4096
-#define WSIZE 0x8000 /* window size--must be a power of two, and */
- /* at least 32K for zip's deflate method */
-
-static uch *inbuf;
-static uch *window;
-
-static unsigned insize; /* valid bytes in inbuf */
-static unsigned inptr; /* index of next byte to be processed in inbuf */
-static unsigned outcnt; /* bytes in output buffer */
-static int exit_code;
-static long bytes_out;
-static int crd_infd, crd_outfd;
-
-#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-
-/* Diagnostic functions (stubbed out) */
-#define Assert(cond,msg)
-#define Trace(x)
-#define Tracev(x)
-#define Tracevv(x)
-#define Tracec(c,x)
-#define Tracecv(c,x)
-
-#define STATIC static
-
-static int fill_inbuf(void);
-static void flush_window(void);
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-#include "../lib/inflate.c"
-
-static void __init *malloc(int size)
-{
- return kmalloc(size, GFP_KERNEL);
-}
-
-static void __init free(void *where)
-{
- kfree(where);
-}
-
-static void __init gzip_mark(void **ptr)
-{
-}
-
-static void __init gzip_release(void **ptr)
-{
-}
-
-
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-static int __init fill_inbuf(void)
-{
- if (exit_code) return -1;
-
- insize = read(crd_infd, inbuf, INBUFSIZ);
- if (insize == 0) return -1;
-
- inptr = 1;
-
- return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-static void __init flush_window(void)
-{
- ulg c = crc; /* temporary variable */
- unsigned n;
- uch *in, ch;
-
- write(crd_outfd, window, outcnt);
- in = window;
- for (n = 0; n < outcnt; n++) {
- ch = *in++;
- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
- }
- crc = c;
- bytes_out += (ulg)outcnt;
- outcnt = 0;
-}
-
-static void __init error(char *x)
-{
- printk(KERN_ERR "%s", x);
- exit_code = 1;
-}
-
-static int __init crd_load(int in_fd, int out_fd)
-{
- int result;
-
- insize = 0; /* valid bytes in inbuf */
- inptr = 0; /* index of next byte to be processed in inbuf */
- outcnt = 0; /* bytes in output buffer */
- exit_code = 0;
- bytes_out = 0;
- crc = (ulg)0xffffffffL; /* shift register contents */
-
- crd_infd = in_fd;
- crd_outfd = out_fd;
- inbuf = kmalloc(INBUFSIZ, GFP_KERNEL);
- if (inbuf == 0) {
- printk(KERN_ERR "RAMDISK: Couldn't allocate gzip buffer\n");
- return -1;
- }
- window = kmalloc(WSIZE, GFP_KERNEL);
- if (window == 0) {
- printk(KERN_ERR "RAMDISK: Couldn't allocate gzip window\n");
- kfree(inbuf);
- return -1;
- }
- makecrc();
- result = gunzip();
- kfree(inbuf);
- kfree(window);
- return result;
-}
-
-#endif /* BUILD_CRAMDISK && CONFIG_BLK_DEV_RAM */
-#endif /* CONFIG_BLK_DEV_RAM */
diff --git a/xenolinux-2.4.25-sparse/kernel/time.c b/xenolinux-2.4.25-sparse/kernel/time.c
deleted file mode 100644
index b4f8b55e8a..0000000000
--- a/xenolinux-2.4.25-sparse/kernel/time.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * linux/kernel/time.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * This file contains the interface functions for the various
- * time related system calls: time, stime, gettimeofday, settimeofday,
- * adjtime
- */
-/*
- * Modification history kernel/time.c
- *
- * 1993-09-02 Philip Gladstone
- * Created file with time related functions from sched.c and adjtimex()
- * 1993-10-08 Torsten Duwe
- * adjtime interface update and CMOS clock write code
- * 1995-08-13 Torsten Duwe
- * kernel PLL updated to 1994-12-13 specs (rfc-1589)
- * 1999-01-16 Ulrich Windl
- * Introduced error checking for many cases in adjtimex().
- * Updated NTP code according to technical memorandum Jan '96
- * "A Kernel Model for Precision Timekeeping" by Dave Mills
- * Allow time_constant larger than MAXTC(6) for NTP v4 (MAXTC == 10)
- * (Even though the technical memorandum forbids it)
- */
-
-#include <linux/mm.h>
-#include <linux/timex.h>
-#include <linux/smp_lock.h>
-
-#include <asm/uaccess.h>
-
-/*
- * The timezone where the local system is located. Used as a default by some
- * programs who obtain this value by using gettimeofday.
- */
-struct timezone sys_tz;
-
-/* The xtime_lock is not only serializing the xtime read/writes but it's also
- serializing all accesses to the global NTP variables now. */
-extern rwlock_t xtime_lock;
-
-#if !defined(__alpha__) && !defined(__ia64__)
-
-/*
- * sys_time() can be implemented in user-level using
- * sys_gettimeofday(). Is this for backwards compatibility? If so,
- * why not move it into the appropriate arch directory (for those
- * architectures that need it).
- *
- * XXX This function is NOT 64-bit clean!
- */
-asmlinkage long sys_time(int * tloc)
-{
- struct timeval now;
- int i;
-
- do_gettimeofday(&now);
- i = now.tv_sec;
- if (tloc) {
- if (put_user(i,tloc))
- i = -EFAULT;
- }
- return i;
-}
-
-#if !defined(CONFIG_XEN)
-
-/*
- * sys_stime() can be implemented in user-level using
- * sys_settimeofday(). Is this for backwards compatibility? If so,
- * why not move it into the appropriate arch directory (for those
- * architectures that need it).
- */
-
-asmlinkage long sys_stime(int * tptr)
-{
- int value;
-
- if (!capable(CAP_SYS_TIME))
- return -EPERM;
- if (get_user(value, tptr))
- return -EFAULT;
- write_lock_irq(&xtime_lock);
- vxtime_lock();
- xtime.tv_sec = value;
- xtime.tv_usec = 0;
- vxtime_unlock();
- time_adjust = 0; /* stop active adjtime() */
- time_status |= STA_UNSYNC;
- time_maxerror = NTP_PHASE_LIMIT;
- time_esterror = NTP_PHASE_LIMIT;
- write_unlock_irq(&xtime_lock);
- return 0;
-}
-
-#endif
-
-#endif
-
-asmlinkage long sys_gettimeofday(struct timeval *tv, struct timezone *tz)
-{
- if (tv) {
- struct timeval ktv;
- do_gettimeofday(&ktv);
- if (copy_to_user(tv, &ktv, sizeof(ktv)))
- return -EFAULT;
- }
- if (tz) {
- if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
- return -EFAULT;
- }
- return 0;
-}
-
-/*
- * Adjust the time obtained from the CMOS to be UTC time instead of
- * local time.
- *
- * This is ugly, but preferable to the alternatives. Otherwise we
- * would either need to write a program to do it in /etc/rc (and risk
- * confusion if the program gets run more than once; it would also be
- * hard to make the program warp the clock precisely n hours) or
- * compile in the timezone information into the kernel. Bad, bad....
- *
- * - TYT, 1992-01-01
- *
- * The best thing to do is to keep the CMOS clock in universal time (UTC)
- * as real UNIX machines always do it. This avoids all headaches about
- * daylight saving times and warping kernel clocks.
- */
-inline static void warp_clock(void)
-{
- write_lock_irq(&xtime_lock);
- vxtime_lock();
- xtime.tv_sec += sys_tz.tz_minuteswest * 60;
- vxtime_unlock();
- write_unlock_irq(&xtime_lock);
-}
-
-/*
- * In case for some reason the CMOS clock has not already been running
- * in UTC, but in some local time: The first time we set the timezone,
- * we will warp the clock so that it is ticking UTC time instead of
- * local time. Presumably, if someone is setting the timezone then we
- * are running in an environment where the programs understand about
- * timezones. This should be done at boot time in the /etc/rc script,
- * as soon as possible, so that the clock can be set right. Otherwise,
- * various programs will get confused when the clock gets warped.
- */
-
-int do_sys_settimeofday(struct timeval *tv, struct timezone *tz)
-{
- static int firsttime = 1;
-
- if (!capable(CAP_SYS_TIME))
- return -EPERM;
-
- if (tz) {
- /* SMP safe, global irq locking makes it work. */
- sys_tz = *tz;
- if (firsttime) {
- firsttime = 0;
- if (!tv)
- warp_clock();
- }
- }
- if (tv)
- {
- /* SMP safe, again the code in arch/foo/time.c should
- * globally block out interrupts when it runs.
- */
- do_settimeofday(tv);
- }
- return 0;
-}
-
-asmlinkage long sys_settimeofday(struct timeval *tv, struct timezone *tz)
-{
- struct timeval new_tv;
- struct timezone new_tz;
-
- if (tv) {
- if (copy_from_user(&new_tv, tv, sizeof(*tv)))
- return -EFAULT;
- }
- if (tz) {
- if (copy_from_user(&new_tz, tz, sizeof(*tz)))
- return -EFAULT;
- }
-
- return do_sys_settimeofday(tv ? &new_tv : NULL, tz ? &new_tz : NULL);
-}
-
-long pps_offset; /* pps time offset (us) */
-long pps_jitter = MAXTIME; /* time dispersion (jitter) (us) */
-
-long pps_freq; /* frequency offset (scaled ppm) */
-long pps_stabil = MAXFREQ; /* frequency dispersion (scaled ppm) */
-
-long pps_valid = PPS_VALID; /* pps signal watchdog counter */
-
-int pps_shift = PPS_SHIFT; /* interval duration (s) (shift) */
-
-long pps_jitcnt; /* jitter limit exceeded */
-long pps_calcnt; /* calibration intervals */
-long pps_errcnt; /* calibration errors */
-long pps_stbcnt; /* stability limit exceeded */
-
-/* hook for a loadable hardpps kernel module */
-void (*hardpps_ptr)(struct timeval *);
-
-/* adjtimex mainly allows reading (and writing, if superuser) of
- * kernel time-keeping variables. used by xntpd.
- */
-int do_adjtimex(struct timex *txc)
-{
- long ltemp, mtemp, save_adjust;
- int result;
-
- /* In order to modify anything, you gotta be super-user! */
- if (txc->modes && !capable(CAP_SYS_TIME))
- return -EPERM;
-
- /* Now we validate the data before disabling interrupts */
-
- if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
- /* singleshot must not be used with any other mode bits */
- if (txc->modes != ADJ_OFFSET_SINGLESHOT)
- return -EINVAL;
-
- if (txc->modes != ADJ_OFFSET_SINGLESHOT && (txc->modes & ADJ_OFFSET))
- /* adjustment Offset limited to +- .512 seconds */
- if (txc->offset <= - MAXPHASE || txc->offset >= MAXPHASE )
- return -EINVAL;
-
- /* if the quartz is off by more than 10% something is VERY wrong ! */
- if (txc->modes & ADJ_TICK)
- if (txc->tick < 900000/HZ || txc->tick > 1100000/HZ)
- return -EINVAL;
-
- write_lock_irq(&xtime_lock);
- result = time_state; /* mostly `TIME_OK' */
-
- /* Save for later - semantics of adjtime is to return old value */
- save_adjust = time_adjust;
-
-#if 0 /* STA_CLOCKERR is never set yet */
- time_status &= ~STA_CLOCKERR; /* reset STA_CLOCKERR */
-#endif
- /* If there are input parameters, then process them */
- if (txc->modes)
- {
- if (txc->modes & ADJ_STATUS) /* only set allowed bits */
- time_status = (txc->status & ~STA_RONLY) |
- (time_status & STA_RONLY);
-
- if (txc->modes & ADJ_FREQUENCY) { /* p. 22 */
- if (txc->freq > MAXFREQ || txc->freq < -MAXFREQ) {
- result = -EINVAL;
- goto leave;
- }
- time_freq = txc->freq - pps_freq;
- }
-
- if (txc->modes & ADJ_MAXERROR) {
- if (txc->maxerror < 0 || txc->maxerror >= NTP_PHASE_LIMIT) {
- result = -EINVAL;
- goto leave;
- }
- time_maxerror = txc->maxerror;
- }
-
- if (txc->modes & ADJ_ESTERROR) {
- if (txc->esterror < 0 || txc->esterror >= NTP_PHASE_LIMIT) {
- result = -EINVAL;
- goto leave;
- }
- time_esterror = txc->esterror;
- }
-
- if (txc->modes & ADJ_TIMECONST) { /* p. 24 */
- if (txc->constant < 0) { /* NTP v4 uses values > 6 */
- result = -EINVAL;
- goto leave;
- }
- time_constant = txc->constant;
- }
-
- if (txc->modes & ADJ_OFFSET) { /* values checked earlier */
- if (txc->modes == ADJ_OFFSET_SINGLESHOT) {
- /* adjtime() is independent from ntp_adjtime() */
- time_adjust = txc->offset;
- }
- else if ( time_status & (STA_PLL | STA_PPSTIME) ) {
- ltemp = (time_status & (STA_PPSTIME | STA_PPSSIGNAL)) ==
- (STA_PPSTIME | STA_PPSSIGNAL) ?
- pps_offset : txc->offset;
-
- /*
- * Scale the phase adjustment and
- * clamp to the operating range.
- */
- if (ltemp > MAXPHASE)
- time_offset = MAXPHASE << SHIFT_UPDATE;
- else if (ltemp < -MAXPHASE)
- time_offset = -(MAXPHASE << SHIFT_UPDATE);
- else
- time_offset = ltemp << SHIFT_UPDATE;
-
- /*
- * Select whether the frequency is to be controlled
- * and in which mode (PLL or FLL). Clamp to the operating
- * range. Ugly multiply/divide should be replaced someday.
- */
-
- if (time_status & STA_FREQHOLD || time_reftime == 0)
- time_reftime = xtime.tv_sec;
- mtemp = xtime.tv_sec - time_reftime;
- time_reftime = xtime.tv_sec;
- if (time_status & STA_FLL) {
- if (mtemp >= MINSEC) {
- ltemp = (time_offset / mtemp) << (SHIFT_USEC -
- SHIFT_UPDATE);
- if (ltemp < 0)
- time_freq -= -ltemp >> SHIFT_KH;
- else
- time_freq += ltemp >> SHIFT_KH;
- } else /* calibration interval too short (p. 12) */
- result = TIME_ERROR;
- } else { /* PLL mode */
- if (mtemp < MAXSEC) {
- ltemp *= mtemp;
- if (ltemp < 0)
- time_freq -= -ltemp >> (time_constant +
- time_constant +
- SHIFT_KF - SHIFT_USEC);
- else
- time_freq += ltemp >> (time_constant +
- time_constant +
- SHIFT_KF - SHIFT_USEC);
- } else /* calibration interval too long (p. 12) */
- result = TIME_ERROR;
- }
- if (time_freq > time_tolerance)
- time_freq = time_tolerance;
- else if (time_freq < -time_tolerance)
- time_freq = -time_tolerance;
- } /* STA_PLL || STA_PPSTIME */
- } /* txc->modes & ADJ_OFFSET */
- if (txc->modes & ADJ_TICK) {
- /* if the quartz is off by more than 10% something is
- VERY wrong ! */
- if (txc->tick < 900000/HZ || txc->tick > 1100000/HZ) {
- result = -EINVAL;
- goto leave;
- }
- tick = txc->tick;
- }
- } /* txc->modes */
-leave: if ((time_status & (STA_UNSYNC|STA_CLOCKERR)) != 0
- || ((time_status & (STA_PPSFREQ|STA_PPSTIME)) != 0
- && (time_status & STA_PPSSIGNAL) == 0)
- /* p. 24, (b) */
- || ((time_status & (STA_PPSTIME|STA_PPSJITTER))
- == (STA_PPSTIME|STA_PPSJITTER))
- /* p. 24, (c) */
- || ((time_status & STA_PPSFREQ) != 0
- && (time_status & (STA_PPSWANDER|STA_PPSERROR)) != 0))
- /* p. 24, (d) */
- result = TIME_ERROR;
-
- if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
- txc->offset = save_adjust;
- else {
- if (time_offset < 0)
- txc->offset = -(-time_offset >> SHIFT_UPDATE);
- else
- txc->offset = time_offset >> SHIFT_UPDATE;
- }
- txc->freq = time_freq + pps_freq;
- txc->maxerror = time_maxerror;
- txc->esterror = time_esterror;
- txc->status = time_status;
- txc->constant = time_constant;
- txc->precision = time_precision;
- txc->tolerance = time_tolerance;
- txc->tick = tick;
- txc->ppsfreq = pps_freq;
- txc->jitter = pps_jitter >> PPS_AVG;
- txc->shift = pps_shift;
- txc->stabil = pps_stabil;
- txc->jitcnt = pps_jitcnt;
- txc->calcnt = pps_calcnt;
- txc->errcnt = pps_errcnt;
- txc->stbcnt = pps_stbcnt;
- write_unlock_irq(&xtime_lock);
- do_gettimeofday(&txc->time);
- return(result);
-}
-
-asmlinkage long sys_adjtimex(struct timex *txc_p)
-{
- struct timex txc; /* Local copy of parameter */
- int ret;
-
- /* Copy the user data space into the kernel copy
- * structure. But bear in mind that the structures
- * may change
- */
- if(copy_from_user(&txc, txc_p, sizeof(struct timex)))
- return -EFAULT;
- ret = do_adjtimex(&txc);
- return copy_to_user(txc_p, &txc, sizeof(struct timex)) ? -EFAULT : ret;
-}
diff --git a/xenolinux-2.4.25-sparse/kernel/timer.c b/xenolinux-2.4.25-sparse/kernel/timer.c
deleted file mode 100644
index 567794ab26..0000000000
--- a/xenolinux-2.4.25-sparse/kernel/timer.c
+++ /dev/null
@@ -1,968 +0,0 @@
-/*
- * linux/kernel/timer.c
- *
- * Kernel internal timers, kernel timekeeping, basic process system calls
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better.
- *
- * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
- * "A Kernel Model for Precision Timekeeping" by Dave Mills
- * 1998-12-24 Fixed a xtime SMP race (we need the xtime_lock rw spinlock to
- * serialize accesses to xtime/lost_ticks).
- * Copyright (C) 1998 Andrea Arcangeli
- * 1999-03-10 Improved NTP compatibility by Ulrich Windl
- */
-
-#include <linux/config.h>
-#include <linux/mm.h>
-#include <linux/timex.h>
-#include <linux/delay.h>
-#include <linux/smp_lock.h>
-#include <linux/interrupt.h>
-#include <linux/kernel_stat.h>
-
-#include <asm/uaccess.h>
-
-/*
- * Timekeeping variables
- */
-
-long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
-
-/* The current time */
-struct timeval xtime __attribute__ ((aligned (16)));
-
-/* Don't completely fail for HZ > 500. */
-int tickadj = 500/HZ ? : 1; /* microsecs */
-
-DECLARE_TASK_QUEUE(tq_timer);
-DECLARE_TASK_QUEUE(tq_immediate);
-
-/*
- * phase-lock loop variables
- */
-/* TIME_ERROR prevents overwriting the CMOS clock */
-int time_state = TIME_OK; /* clock synchronization status */
-int time_status = STA_UNSYNC; /* clock status bits */
-long time_offset; /* time adjustment (us) */
-long time_constant = 2; /* pll time constant */
-long time_tolerance = MAXFREQ; /* frequency tolerance (ppm) */
-long time_precision = 1; /* clock precision (us) */
-long time_maxerror = NTP_PHASE_LIMIT; /* maximum error (us) */
-long time_esterror = NTP_PHASE_LIMIT; /* estimated error (us) */
-long time_phase; /* phase offset (scaled us) */
-long time_freq = ((1000000 + HZ/2) % HZ - HZ/2) << SHIFT_USEC;
- /* frequency offset (scaled ppm)*/
-long time_adj; /* tick adjust (scaled 1 / HZ) */
-long time_reftime; /* time at last adjustment (s) */
-
-long time_adjust;
-long time_adjust_step;
-
-unsigned long event;
-
-extern int do_setitimer(int, struct itimerval *, struct itimerval *);
-
-unsigned long volatile jiffies;
-
-unsigned int * prof_buffer;
-unsigned long prof_len;
-unsigned long prof_shift;
-
-/*
- * Event timer code
- */
-#define TVN_BITS 6
-#define TVR_BITS 8
-#define TVN_SIZE (1 << TVN_BITS)
-#define TVR_SIZE (1 << TVR_BITS)
-#define TVN_MASK (TVN_SIZE - 1)
-#define TVR_MASK (TVR_SIZE - 1)
-
-struct timer_vec {
- int index;
- struct list_head vec[TVN_SIZE];
-};
-
-struct timer_vec_root {
- int index;
- struct list_head vec[TVR_SIZE];
-};
-
-static struct timer_vec tv5;
-static struct timer_vec tv4;
-static struct timer_vec tv3;
-static struct timer_vec tv2;
-static struct timer_vec_root tv1;
-
-static struct timer_vec * const tvecs[] = {
- (struct timer_vec *)&tv1, &tv2, &tv3, &tv4, &tv5
-};
-
-static struct list_head * run_timer_list_running;
-
-#define NOOF_TVECS (sizeof(tvecs) / sizeof(tvecs[0]))
-
-void init_timervecs (void)
-{
- int i;
-
- for (i = 0; i < TVN_SIZE; i++) {
- INIT_LIST_HEAD(tv5.vec + i);
- INIT_LIST_HEAD(tv4.vec + i);
- INIT_LIST_HEAD(tv3.vec + i);
- INIT_LIST_HEAD(tv2.vec + i);
- }
- for (i = 0; i < TVR_SIZE; i++)
- INIT_LIST_HEAD(tv1.vec + i);
-}
-
-static unsigned long timer_jiffies;
-
-static inline void internal_add_timer(struct timer_list *timer)
-{
- /*
- * must be cli-ed when calling this
- */
- unsigned long expires = timer->expires;
- unsigned long idx = expires - timer_jiffies;
- struct list_head * vec;
-
- if (run_timer_list_running)
- vec = run_timer_list_running;
- else if (idx < TVR_SIZE) {
- int i = expires & TVR_MASK;
- vec = tv1.vec + i;
- } else if (idx < 1 << (TVR_BITS + TVN_BITS)) {
- int i = (expires >> TVR_BITS) & TVN_MASK;
- vec = tv2.vec + i;
- } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) {
- int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK;
- vec = tv3.vec + i;
- } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) {
- int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK;
- vec = tv4.vec + i;
- } else if ((signed long) idx < 0) {
- /* can happen if you add a timer with expires == jiffies,
- * or you set a timer to go off in the past
- */
- vec = tv1.vec + tv1.index;
- } else if (idx <= 0xffffffffUL) {
- int i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
- vec = tv5.vec + i;
- } else {
- /* Can only get here on architectures with 64-bit jiffies */
- INIT_LIST_HEAD(&timer->list);
- return;
- }
- /*
- * Timers are FIFO!
- */
- list_add(&timer->list, vec->prev);
-}
-
-/* Initialize both explicitly - let's try to have them in the same cache line */
-spinlock_t timerlist_lock = SPIN_LOCK_UNLOCKED;
-
-#ifdef CONFIG_SMP
-volatile struct timer_list * volatile running_timer;
-#define timer_enter(t) do { running_timer = t; mb(); } while (0)
-#define timer_exit() do { running_timer = NULL; } while (0)
-#define timer_is_running(t) (running_timer == t)
-#define timer_synchronize(t) while (timer_is_running(t)) barrier()
-#else
-#define timer_enter(t) do { } while (0)
-#define timer_exit() do { } while (0)
-#endif
-
-void add_timer(struct timer_list *timer)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&timerlist_lock, flags);
- if (timer_pending(timer))
- goto bug;
- internal_add_timer(timer);
- spin_unlock_irqrestore(&timerlist_lock, flags);
- return;
-bug:
- spin_unlock_irqrestore(&timerlist_lock, flags);
- printk("bug: kernel timer added twice at %p.\n",
- __builtin_return_address(0));
-}
-
-static inline int detach_timer (struct timer_list *timer)
-{
- if (!timer_pending(timer))
- return 0;
- list_del(&timer->list);
- return 1;
-}
-
-int mod_timer(struct timer_list *timer, unsigned long expires)
-{
- int ret;
- unsigned long flags;
-
- spin_lock_irqsave(&timerlist_lock, flags);
- timer->expires = expires;
- ret = detach_timer(timer);
- internal_add_timer(timer);
- spin_unlock_irqrestore(&timerlist_lock, flags);
- return ret;
-}
-
-int del_timer(struct timer_list * timer)
-{
- int ret;
- unsigned long flags;
-
- spin_lock_irqsave(&timerlist_lock, flags);
- ret = detach_timer(timer);
- timer->list.next = timer->list.prev = NULL;
- spin_unlock_irqrestore(&timerlist_lock, flags);
- return ret;
-}
-
-#ifdef CONFIG_SMP
-void sync_timers(void)
-{
- spin_unlock_wait(&global_bh_lock);
-}
-
-/*
- * SMP specific function to delete periodic timer.
- * Caller must disable by some means restarting the timer
- * for new. Upon exit the timer is not queued and handler is not running
- * on any CPU. It returns number of times, which timer was deleted
- * (for reference counting).
- */
-
-int del_timer_sync(struct timer_list * timer)
-{
- int ret = 0;
-
- for (;;) {
- unsigned long flags;
- int running;
-
- spin_lock_irqsave(&timerlist_lock, flags);
- ret += detach_timer(timer);
- timer->list.next = timer->list.prev = 0;
- running = timer_is_running(timer);
- spin_unlock_irqrestore(&timerlist_lock, flags);
-
- if (!running)
- break;
-
- timer_synchronize(timer);
- }
-
- return ret;
-}
-#endif
-
-
-static inline void cascade_timers(struct timer_vec *tv)
-{
- /* cascade all the timers from tv up one level */
- struct list_head *head, *curr, *next;
-
- head = tv->vec + tv->index;
- curr = head->next;
- /*
- * We are removing _all_ timers from the list, so we don't have to
- * detach them individually, just clear the list afterwards.
- */
- while (curr != head) {
- struct timer_list *tmp;
-
- tmp = list_entry(curr, struct timer_list, list);
- next = curr->next;
- list_del(curr); // not needed
- internal_add_timer(tmp);
- curr = next;
- }
- INIT_LIST_HEAD(head);
- tv->index = (tv->index + 1) & TVN_MASK;
-}
-
-static inline void run_timer_list(void)
-{
- spin_lock_irq(&timerlist_lock);
- while ((long)(jiffies - timer_jiffies) >= 0) {
- LIST_HEAD(queued);
- struct list_head *head, *curr;
- if (!tv1.index) {
- int n = 1;
- do {
- cascade_timers(tvecs[n]);
- } while (tvecs[n]->index == 1 && ++n < NOOF_TVECS);
- }
- run_timer_list_running = &queued;
-repeat:
- head = tv1.vec + tv1.index;
- curr = head->next;
- if (curr != head) {
- struct timer_list *timer;
- void (*fn)(unsigned long);
- unsigned long data;
-
- timer = list_entry(curr, struct timer_list, list);
- fn = timer->function;
- data= timer->data;
-
- detach_timer(timer);
- timer->list.next = timer->list.prev = NULL;
- timer_enter(timer);
- spin_unlock_irq(&timerlist_lock);
- fn(data);
- spin_lock_irq(&timerlist_lock);
- timer_exit();
- goto repeat;
- }
- run_timer_list_running = NULL;
- ++timer_jiffies;
- tv1.index = (tv1.index + 1) & TVR_MASK;
-
- curr = queued.next;
- while (curr != &queued) {
- struct timer_list *timer;
-
- timer = list_entry(curr, struct timer_list, list);
- curr = curr->next;
- internal_add_timer(timer);
- }
- }
- spin_unlock_irq(&timerlist_lock);
-}
-
-#ifdef CONFIG_NO_IDLE_HZ
-/*
- * Find out when the next timer event is due to happen. This
- * is used on S/390 to stop all activity when all cpus are idle.
- * And in XenoLinux to achieve the same.
- * The timerlist_lock must be acquired before calling this function.
- */
-struct timer_list *next_timer_event(void)
-{
- struct timer_list *nte, *tmp;
- struct list_head *lst;
- int i, j;
-
- /* Look for the next timer event in tv1. */
- i = 0;
- j = tvecs[0]->index;
- do {
- struct list_head *head = tvecs[0]->vec + j;
- if (!list_empty(head)) {
- nte = list_entry(head->next, struct timer_list, list);
- goto found;
- }
- j = (j + 1) & TVR_MASK;
- } while (j != tv1.index);
-
- /* No event found in tv1. Check tv2-tv5. */
- for (i = 1; i < NOOF_TVECS; i++) {
- j = tvecs[i]->index;
- do {
- nte = NULL;
- list_for_each(lst, tvecs[i]->vec + j) {
- tmp = list_entry(lst, struct timer_list, list);
- if (nte == NULL ||
- time_before(tmp->expires, nte->expires))
- nte = tmp;
- }
- if (nte)
- goto found;
- j = (j + 1) & TVN_MASK;
- } while (j != tvecs[i]->index);
- }
- return NULL;
-found:
- /* Found timer event in tvecs[i]->vec[j] */
- if (j < tvecs[i]->index && i < NOOF_TVECS-1) {
- /*
- * The search wrapped. We need to look at the next list
- * from tvecs[i+1] that would cascade into tvecs[i].
- */
- list_for_each(lst, tvecs[i+1]->vec+tvecs[i+1]->index) {
- tmp = list_entry(lst, struct timer_list, list);
- if (time_before(tmp->expires, nte->expires))
- nte = tmp;
- }
- }
- return nte;
-}
-#endif
-
-spinlock_t tqueue_lock = SPIN_LOCK_UNLOCKED;
-
-void tqueue_bh(void)
-{
- run_task_queue(&tq_timer);
-}
-
-void immediate_bh(void)
-{
- run_task_queue(&tq_immediate);
-}
-
-/*
- * this routine handles the overflow of the microsecond field
- *
- * The tricky bits of code to handle the accurate clock support
- * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
- * They were originally developed for SUN and DEC kernels.
- * All the kudos should go to Dave for this stuff.
- *
- */
-static void second_overflow(void)
-{
- long ltemp;
-
- /* Bump the maxerror field */
- time_maxerror += time_tolerance >> SHIFT_USEC;
- if ( time_maxerror > NTP_PHASE_LIMIT ) {
- time_maxerror = NTP_PHASE_LIMIT;
- time_status |= STA_UNSYNC;
- }
-
- /*
- * Leap second processing. If in leap-insert state at
- * the end of the day, the system clock is set back one
- * second; if in leap-delete state, the system clock is
- * set ahead one second. The microtime() routine or
- * external clock driver will insure that reported time
- * is always monotonic. The ugly divides should be
- * replaced.
- */
- switch (time_state) {
-
- case TIME_OK:
- if (time_status & STA_INS)
- time_state = TIME_INS;
- else if (time_status & STA_DEL)
- time_state = TIME_DEL;
- break;
-
- case TIME_INS:
- if (xtime.tv_sec % 86400 == 0) {
- xtime.tv_sec--;
- time_state = TIME_OOP;
- printk(KERN_NOTICE "Clock: inserting leap second 23:59:60 UTC\n");
- }
- break;
-
- case TIME_DEL:
- if ((xtime.tv_sec + 1) % 86400 == 0) {
- xtime.tv_sec++;
- time_state = TIME_WAIT;
- printk(KERN_NOTICE "Clock: deleting leap second 23:59:59 UTC\n");
- }
- break;
-
- case TIME_OOP:
- time_state = TIME_WAIT;
- break;
-
- case TIME_WAIT:
- if (!(time_status & (STA_INS | STA_DEL)))
- time_state = TIME_OK;
- }
-
- /*
- * Compute the phase adjustment for the next second. In
- * PLL mode, the offset is reduced by a fixed factor
- * times the time constant. In FLL mode the offset is
- * used directly. In either mode, the maximum phase
- * adjustment for each second is clamped so as to spread
- * the adjustment over not more than the number of
- * seconds between updates.
- */
- if (time_offset < 0) {
- ltemp = -time_offset;
- if (!(time_status & STA_FLL))
- ltemp >>= SHIFT_KG + time_constant;
- if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
- ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
- time_offset += ltemp;
- time_adj = -ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
- } else {
- ltemp = time_offset;
- if (!(time_status & STA_FLL))
- ltemp >>= SHIFT_KG + time_constant;
- if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
- ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
- time_offset -= ltemp;
- time_adj = ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
- }
-
- /*
- * Compute the frequency estimate and additional phase
- * adjustment due to frequency error for the next
- * second. When the PPS signal is engaged, gnaw on the
- * watchdog counter and update the frequency computed by
- * the pll and the PPS signal.
- */
- pps_valid++;
- if (pps_valid == PPS_VALID) { /* PPS signal lost */
- pps_jitter = MAXTIME;
- pps_stabil = MAXFREQ;
- time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER |
- STA_PPSWANDER | STA_PPSERROR);
- }
- ltemp = time_freq + pps_freq;
- if (ltemp < 0)
- time_adj -= -ltemp >>
- (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);
- else
- time_adj += ltemp >>
- (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);
-
-#if HZ == 100
- /* Compensate for (HZ==100) != (1 << SHIFT_HZ).
- * Add 25% and 3.125% to get 128.125; => only 0.125% error (p. 14)
- */
- if (time_adj < 0)
- time_adj -= (-time_adj >> 2) + (-time_adj >> 5);
- else
- time_adj += (time_adj >> 2) + (time_adj >> 5);
-#endif
-}
-
-/* in the NTP reference this is called "hardclock()" */
-static void update_wall_time_one_tick(void)
-{
- if ( (time_adjust_step = time_adjust) != 0 ) {
- /* We are doing an adjtime thing.
- *
- * Prepare time_adjust_step to be within bounds.
- * Note that a positive time_adjust means we want the clock
- * to run faster.
- *
- * Limit the amount of the step to be in the range
- * -tickadj .. +tickadj
- */
- if (time_adjust > tickadj)
- time_adjust_step = tickadj;
- else if (time_adjust < -tickadj)
- time_adjust_step = -tickadj;
-
- /* Reduce by this step the amount of time left */
- time_adjust -= time_adjust_step;
- }
- xtime.tv_usec += tick + time_adjust_step;
- /*
- * Advance the phase, once it gets to one microsecond, then
- * advance the tick more.
- */
- time_phase += time_adj;
- if (time_phase <= -FINEUSEC) {
- long ltemp = -time_phase >> SHIFT_SCALE;
- time_phase += ltemp << SHIFT_SCALE;
- xtime.tv_usec -= ltemp;
- }
- else if (time_phase >= FINEUSEC) {
- long ltemp = time_phase >> SHIFT_SCALE;
- time_phase -= ltemp << SHIFT_SCALE;
- xtime.tv_usec += ltemp;
- }
-}
-
-/*
- * Using a loop looks inefficient, but "ticks" is
- * usually just one (we shouldn't be losing ticks,
- * we're doing this this way mainly for interrupt
- * latency reasons, not because we think we'll
- * have lots of lost timer ticks
- */
-static void update_wall_time(unsigned long ticks)
-{
- do {
- ticks--;
- update_wall_time_one_tick();
- } while (ticks);
-
- while (xtime.tv_usec >= 1000000) {
- xtime.tv_usec -= 1000000;
- xtime.tv_sec++;
- second_overflow();
- }
-}
-
-static inline void do_process_times(struct task_struct *p,
- unsigned long user, unsigned long system)
-{
- unsigned long psecs;
-
- psecs = (p->times.tms_utime += user);
- psecs += (p->times.tms_stime += system);
- if (psecs / HZ > p->rlim[RLIMIT_CPU].rlim_cur) {
- /* Send SIGXCPU every second.. */
- if (!(psecs % HZ))
- send_sig(SIGXCPU, p, 1);
- /* and SIGKILL when we go over max.. */
- if (psecs / HZ > p->rlim[RLIMIT_CPU].rlim_max)
- send_sig(SIGKILL, p, 1);
- }
-}
-
-static inline void do_it_virt(struct task_struct * p, unsigned long ticks)
-{
- unsigned long it_virt = p->it_virt_value;
-
- if (it_virt) {
- it_virt -= ticks;
- if (!it_virt) {
- it_virt = p->it_virt_incr;
- send_sig(SIGVTALRM, p, 1);
- }
- p->it_virt_value = it_virt;
- }
-}
-
-static inline void do_it_prof(struct task_struct *p)
-{
- unsigned long it_prof = p->it_prof_value;
-
- if (it_prof) {
- if (--it_prof == 0) {
- it_prof = p->it_prof_incr;
- send_sig(SIGPROF, p, 1);
- }
- p->it_prof_value = it_prof;
- }
-}
-
-void update_one_process(struct task_struct *p, unsigned long user,
- unsigned long system, int cpu)
-{
- p->per_cpu_utime[cpu] += user;
- p->per_cpu_stime[cpu] += system;
- do_process_times(p, user, system);
- do_it_virt(p, user);
- do_it_prof(p);
-}
-
-/*
- * Called from the timer interrupt handler to charge one tick to the current
- * process. user_tick is 1 if the tick is user time, 0 for system.
- */
-void update_process_times(int user_tick)
-{
- struct task_struct *p = current;
- int cpu = smp_processor_id(), system = user_tick ^ 1;
-
- update_one_process(p, user_tick, system, cpu);
- if (p->pid) {
- if (--p->counter <= 0) {
- p->counter = 0;
- /*
- * SCHED_FIFO is priority preemption, so this is
- * not the place to decide whether to reschedule a
- * SCHED_FIFO task or not - Bhavesh Davda
- */
- if (p->policy != SCHED_FIFO) {
- p->need_resched = 1;
- }
- }
- if (p->nice > 0)
- kstat.per_cpu_nice[cpu] += user_tick;
- else
- kstat.per_cpu_user[cpu] += user_tick;
- kstat.per_cpu_system[cpu] += system;
- } else if (local_bh_count(cpu) || local_irq_count(cpu) > 1)
- kstat.per_cpu_system[cpu] += system;
-}
-
-/*
- * Called from the timer interrupt handler to charge a couple of ticks
- * to the current process.
- */
-void update_process_times_us(int user_ticks, int system_ticks)
-{
- struct task_struct *p = current;
- int cpu = smp_processor_id();
-
- update_one_process(p, user_ticks, system_ticks, cpu);
- if (p->pid) {
- p->counter -= user_ticks + system_ticks;
- if (p->counter <= 0) {
- p->counter = 0;
- p->need_resched = 1;
- }
- if (p->nice > 0)
- kstat.per_cpu_nice[cpu] += user_ticks;
- else
- kstat.per_cpu_user[cpu] += user_ticks;
- kstat.per_cpu_system[cpu] += system_ticks;
- } else if (local_bh_count(cpu) || local_irq_count(cpu) > 1)
- kstat.per_cpu_system[cpu] += system_ticks;
-}
-
-/*
- * Nr of active tasks - counted in fixed-point numbers
- */
-static unsigned long count_active_tasks(void)
-{
- struct task_struct *p;
- unsigned long nr = 0;
-
- read_lock(&tasklist_lock);
- for_each_task(p) {
- if ((p->state == TASK_RUNNING ||
- (p->state & TASK_UNINTERRUPTIBLE)))
- nr += FIXED_1;
- }
- read_unlock(&tasklist_lock);
- return nr;
-}
-
-/*
- * Hmm.. Changed this, as the GNU make sources (load.c) seems to
- * imply that avenrun[] is the standard name for this kind of thing.
- * Nothing else seems to be standardized: the fractional size etc
- * all seem to differ on different machines.
- */
-unsigned long avenrun[3];
-
-static inline void calc_load(unsigned long ticks)
-{
- unsigned long active_tasks; /* fixed-point */
- static int count = LOAD_FREQ;
-
- count -= ticks;
- while (count < 0) {
- count += LOAD_FREQ;
- active_tasks = count_active_tasks();
- CALC_LOAD(avenrun[0], EXP_1, active_tasks);
- CALC_LOAD(avenrun[1], EXP_5, active_tasks);
- CALC_LOAD(avenrun[2], EXP_15, active_tasks);
- }
-}
-
-/* jiffies at the most recent update of wall time */
-unsigned long wall_jiffies;
-
-/*
- * This spinlock protect us from races in SMP while playing with xtime. -arca
- */
-rwlock_t xtime_lock = RW_LOCK_UNLOCKED;
-
-static inline void update_times(void)
-{
- unsigned long ticks;
-
- /*
- * update_times() is run from the raw timer_bh handler so we
- * just know that the irqs are locally enabled and so we don't
- * need to save/restore the flags of the local CPU here. -arca
- */
- write_lock_irq(&xtime_lock);
- vxtime_lock();
-
- ticks = jiffies - wall_jiffies;
- if (ticks) {
- wall_jiffies += ticks;
- update_wall_time(ticks);
- }
- vxtime_unlock();
- write_unlock_irq(&xtime_lock);
- calc_load(ticks);
-}
-
-void timer_bh(void)
-{
- update_times();
- run_timer_list();
-}
-
-void do_timer(struct pt_regs *regs)
-{
- (*(unsigned long *)&jiffies)++;
-#ifndef CONFIG_SMP
- /* SMP process accounting uses the local APIC timer */
-
- update_process_times(user_mode(regs));
-#endif
- mark_bh(TIMER_BH);
- if (TQ_ACTIVE(tq_timer))
- mark_bh(TQUEUE_BH);
-}
-
-void do_timer_ticks(int ticks)
-{
- (*(unsigned long *)&jiffies) += ticks;
- mark_bh(TIMER_BH);
- if (TQ_ACTIVE(tq_timer))
- mark_bh(TQUEUE_BH);
-}
-
-#if !defined(__alpha__) && !defined(__ia64__)
-
-/*
- * For backwards compatibility? This can be done in libc so Alpha
- * and all newer ports shouldn't need it.
- */
-asmlinkage unsigned long sys_alarm(unsigned int seconds)
-{
- struct itimerval it_new, it_old;
- unsigned int oldalarm;
-
- it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0;
- it_new.it_value.tv_sec = seconds;
- it_new.it_value.tv_usec = 0;
- do_setitimer(ITIMER_REAL, &it_new, &it_old);
- oldalarm = it_old.it_value.tv_sec;
- /* ehhh.. We can't return 0 if we have an alarm pending.. */
- /* And we'd better return too much than too little anyway */
- if (it_old.it_value.tv_usec)
- oldalarm++;
- return oldalarm;
-}
-
-#endif
-
-#ifndef __alpha__
-
-/*
- * The Alpha uses getxpid, getxuid, and getxgid instead. Maybe this
- * should be moved into arch/i386 instead?
- */
-
-/**
- * sys_getpid - return the thread group id of the current process
- *
- * Note, despite the name, this returns the tgid not the pid. The tgid and
- * the pid are identical unless CLONE_THREAD was specified on clone() in
- * which case the tgid is the same in all threads of the same group.
- *
- * This is SMP safe as current->tgid does not change.
- */
-asmlinkage long sys_getpid(void)
-{
- return current->tgid;
-}
-
-/*
- * This is not strictly SMP safe: p_opptr could change
- * from under us. However, rather than getting any lock
- * we can use an optimistic algorithm: get the parent
- * pid, and go back and check that the parent is still
- * the same. If it has changed (which is extremely unlikely
- * indeed), we just try again..
- *
- * NOTE! This depends on the fact that even if we _do_
- * get an old value of "parent", we can happily dereference
- * the pointer: we just can't necessarily trust the result
- * until we know that the parent pointer is valid.
- *
- * The "mb()" macro is a memory barrier - a synchronizing
- * event. It also makes sure that gcc doesn't optimize
- * away the necessary memory references.. The barrier doesn't
- * have to have all that strong semantics: on x86 we don't
- * really require a synchronizing instruction, for example.
- * The barrier is more important for code generation than
- * for any real memory ordering semantics (even if there is
- * a small window for a race, using the old pointer is
- * harmless for a while).
- */
-asmlinkage long sys_getppid(void)
-{
- int pid;
- struct task_struct * me = current;
- struct task_struct * parent;
-
- parent = me->p_opptr;
- for (;;) {
- pid = parent->pid;
-#if CONFIG_SMP
-{
- struct task_struct *old = parent;
- mb();
- parent = me->p_opptr;
- if (old != parent)
- continue;
-}
-#endif
- break;
- }
- return pid;
-}
-
-asmlinkage long sys_getuid(void)
-{
- /* Only we change this so SMP safe */
- return current->uid;
-}
-
-asmlinkage long sys_geteuid(void)
-{
- /* Only we change this so SMP safe */
- return current->euid;
-}
-
-asmlinkage long sys_getgid(void)
-{
- /* Only we change this so SMP safe */
- return current->gid;
-}
-
-asmlinkage long sys_getegid(void)
-{
- /* Only we change this so SMP safe */
- return current->egid;
-}
-
-#endif
-
-/* Thread ID - the internal kernel "pid" */
-asmlinkage long sys_gettid(void)
-{
- return current->pid;
-}
-
-asmlinkage long sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)
-{
- struct timespec t;
- unsigned long expire;
-
- if(copy_from_user(&t, rqtp, sizeof(struct timespec)))
- return -EFAULT;
-
- if (t.tv_nsec >= 1000000000L || t.tv_nsec < 0 || t.tv_sec < 0)
- return -EINVAL;
-
-
- if (t.tv_sec == 0 && t.tv_nsec <= 2000000L &&
- current->policy != SCHED_OTHER)
- {
- /*
- * Short delay requests up to 2 ms will be handled with
- * high precision by a busy wait for all real-time processes.
- *
- * Its important on SMP not to do this holding locks.
- */
- udelay((t.tv_nsec + 999) / 1000);
- return 0;
- }
-
- expire = timespec_to_jiffies(&t) + (t.tv_sec || t.tv_nsec);
-
- current->state = TASK_INTERRUPTIBLE;
- expire = schedule_timeout(expire);
-
- if (expire) {
- if (rmtp) {
- jiffies_to_timespec(expire, &t);
- if (copy_to_user(rmtp, &t, sizeof(struct timespec)))
- return -EFAULT;
- }
- return -EINTR;
- }
- return 0;
-}
-
diff --git a/xenolinux-2.4.25-sparse/mkbuildtree b/xenolinux-2.4.25-sparse/mkbuildtree
deleted file mode 100755
index 46fe4784ad..0000000000
--- a/xenolinux-2.4.25-sparse/mkbuildtree
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/bin/sh
-
-# mkbuildtree <build tree>
-#
-# Creates symbolic links in <build tree> for the sparse tree
-# in the current directory.
-
-# Script to determine the relative path between two directories.
-# Copyright (c) D. J. Hawkey Jr. 2002
-# Fixed for Xen project by K. Fraser in 2003.
-abs_to_rel ()
-{
- local CWD SRCPATH
-
- if [ "$1" != "/" -a "${1##*[^/]}" = "/" ]; then
- SRCPATH=${1%?}
- else
- SRCPATH=$1
- fi
- if [ "$2" != "/" -a "${2##*[^/]}" = "/" ]; then
- DESTPATH=${2%?}
- else
- DESTPATH=$2
- fi
-
- CWD=$PWD
- [ "${1%%[^/]*}" != "/" ] && cd $1 && SRCPATH=$PWD
- [ "${2%%[^/]*}" != "/" ] && cd $2 && DESTPATH=$PWD
- [ "$CWD" != "$PWD" ] && cd $CWD
-
- BASEPATH=$SRCPATH
-
- [ "$SRCPATH" = "$DESTPATH" ] && DESTPATH="." && return
- [ "$SRCPATH" = "/" ] && DESTPATH=${DESTPATH#?} && return
-
- while [ "$BASEPATH/" != "${DESTPATH%${DESTPATH#$BASEPATH/}}" ]; do
- BASEPATH=${BASEPATH%/*}
- done
-
- SRCPATH=${SRCPATH#$BASEPATH}
- DESTPATH=${DESTPATH#$BASEPATH}
- DESTPATH=${DESTPATH#?}
- while [ -n "$SRCPATH" ]; do
- SRCPATH=${SRCPATH%/*}
- DESTPATH="../$DESTPATH"
- done
-
- [ -z "$BASEPATH" ] && BASEPATH="/"
- [ "${DESTPATH##*[^/]}" = "/" ] && DESTPATH=${DESTPATH%?}
-}
-
-# relative_lndir <target_dir>
-# Creates a tree of symlinks in the current working directory that mirror
-# real files in <target_dir>. <target_dir> should be relative to the current
-# working directory. Symlinks in <target_dir> are ignored. Source-control files
-# are ignored.
-relative_lndir ()
-{
- local SYMLINK_DIR REAL_DIR pref i j
- SYMLINK_DIR=$PWD
- REAL_DIR=$1
- (
- cd $REAL_DIR
- for i in `find . -type d | grep -v SCCS`; do
- [ -d $SYMLINK_DIR/$i ] || mkdir -p $SYMLINK_DIR/$i
- (
- cd $i
- pref=`echo $i | sed -e 's#/[^/]*#../#g' -e 's#^\.##'`
- for j in `find . -type f -o -type l -maxdepth 1`; do
- ln -sf ${pref}${REAL_DIR}/$i/$j ${SYMLINK_DIR}/$i/$j
- done
- )
- done
- )
-}
-
-[ "$1" == "" ] && { echo "Syntax: $0 <linux tree to xenify>"; exit 1; }
-
-# Get absolute path to the destination directory
-pushd . >/dev/null
-cd ${1}
-AD=$PWD
-popd >/dev/null
-
-# Get absolute path to the source directory
-AS=`pwd`
-
-# Get path to source, relative to destination
-abs_to_rel ${AD} ${AS}
-RS=$DESTPATH
-
-# Remove old copies of files and directories at the destination
-for i in `find . -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done
-
-# We now work from the destination directory
-cd ${AD}
-
-# Remove old symlinks
-for i in `find . -type l`; do rm -f $i; done
-
-# Create symlinks of files and directories which exist in the sparse source
-relative_lndir ${RS}
-rm -f mkbuildtree
-
-## There are a whole bunch of special symlinks, mostly for files
-## which are identical in the i386 and xen-i386 architecture-dependent
-## subdirectories.
-
-# This first symlink is special: it links to shared files in Xen's source tree
-rm -rf ${AD}/include/asm-xen/hypervisor-ifs
-mkdir ${AD}/include/asm-xen/hypervisor-ifs
-cd ${AD}/include/asm-xen/hypervisor-ifs
-relative_lndir ../../../${RS}/../xen/include/hypervisor-ifs
-
-# Another special symlink: to the shared definitions for the control interface
-cd ..
-ln -sf ../../${RS}/../tools/xend/lib/domain_controller.h
-
-# The remainder are the i386 -> xen-i386 links
-ln -sf ../asm-i386/a.out.h
-ln -sf ../asm-i386/apicdef.h
-ln -sf ../asm-i386/apic.h
-ln -sf ../asm-i386/atomic.h
-ln -sf ../asm-i386/bitops.h
-ln -sf ../asm-i386/boot.h
-ln -sf ../asm-i386/byteorder.h
-ln -sf ../asm-i386/cache.h
-ln -sf ../asm-i386/checksum.h
-ln -sf ../asm-i386/cpufeature.h
-ln -sf ../asm-i386/current.h
-ln -sf ../asm-i386/debugreg.h
-ln -sf ../asm-i386/delay.h
-ln -sf ../asm-i386/div64.h
-ln -sf ../asm-i386/dma.h
-ln -sf ../asm-i386/elf.h
-ln -sf ../asm-i386/errno.h
-ln -sf ../asm-i386/fcntl.h
-ln -sf ../asm-i386/floppy.h
-ln -sf ../asm-i386/hardirq.h
-ln -sf ../asm-i386/hdreg.h
-ln -sf ../asm-i386/i387.h
-ln -sf ../asm-i386/ide.h
-ln -sf ../asm-i386/init.h
-ln -sf ../asm-i386/io_apic.h
-ln -sf ../asm-i386/ioctl.h
-ln -sf ../asm-i386/ioctls.h
-ln -sf ../asm-i386/ipcbuf.h
-ln -sf ../asm-i386/ipc.h
-ln -sf ../asm-i386/kmap_types.h
-ln -sf ../asm-i386/ldt.h
-ln -sf ../asm-i386/linux_logo.h
-ln -sf ../asm-i386/locks.h
-ln -sf ../asm-i386/math_emu.h
-ln -sf ../asm-i386/mc146818rtc.h
-ln -sf ../asm-i386/mca_dma.h
-ln -sf ../asm-i386/mman.h
-ln -sf ../asm-i386/mmu.h
-ln -sf ../asm-i386/mmx.h
-ln -sf ../asm-i386/module.h
-ln -sf ../asm-i386/mpspec.h
-ln -sf ../asm-i386/msgbuf.h
-ln -sf ../asm-i386/mtrr.h
-ln -sf ../asm-i386/namei.h
-ln -sf ../asm-i386/param.h
-ln -sf ../asm-i386/parport.h
-ln -sf ../asm-i386/pci.h
-ln -sf ../asm-i386/pgtable-3level.h
-ln -sf ../asm-i386/poll.h
-ln -sf ../asm-i386/posix_types.h
-ln -sf ../asm-i386/resource.h
-ln -sf ../asm-i386/rwlock.h
-ln -sf ../asm-i386/rwsem.h
-ln -sf ../asm-i386/scatterlist.h
-ln -sf ../asm-i386/semaphore.h
-ln -sf ../asm-i386/sembuf.h
-ln -sf ../asm-i386/serial.h
-ln -sf ../asm-i386/setup.h
-ln -sf ../asm-i386/shmbuf.h
-ln -sf ../asm-i386/shmparam.h
-ln -sf ../asm-i386/sigcontext.h
-ln -sf ../asm-i386/siginfo.h
-ln -sf ../asm-i386/signal.h
-ln -sf ../asm-i386/smplock.h
-ln -sf ../asm-i386/socket.h
-ln -sf ../asm-i386/sockios.h
-ln -sf ../asm-i386/softirq.h
-ln -sf ../asm-i386/spinlock.h
-ln -sf ../asm-i386/statfs.h
-ln -sf ../asm-i386/stat.h
-ln -sf ../asm-i386/string-486.h
-ln -sf ../asm-i386/string.h
-ln -sf ../asm-i386/termbits.h
-ln -sf ../asm-i386/termios.h
-ln -sf ../asm-i386/timex.h
-ln -sf ../asm-i386/tlb.h
-ln -sf ../asm-i386/types.h
-ln -sf ../asm-i386/uaccess.h
-ln -sf ../asm-i386/ucontext.h
-ln -sf ../asm-i386/unaligned.h
-ln -sf ../asm-i386/unistd.h
-ln -sf ../asm-i386/user.h
-
-cd ../../arch/xen/kernel
-ln -sf ../../i386/kernel/i387.c
-ln -sf ../../i386/kernel/init_task.c
-ln -sf ../../i386/kernel/pci-dma.c
-ln -sf ../../i386/kernel/pci-i386.c
-ln -sf ../../i386/kernel/pci-i386.h
-ln -sf ../../i386/kernel/ptrace.c
-ln -sf ../../i386/kernel/semaphore.c
-ln -sf ../../i386/kernel/sys_i386.c
-cd ../lib
-ln -sf ../../i386/lib/checksum.S
-ln -sf ../../i386/lib/dec_and_lock.c
-ln -sf ../../i386/lib/getuser.S
-ln -sf ../../i386/lib/iodebug.c
-ln -sf ../../i386/lib/memcpy.c
-ln -sf ../../i386/lib/mmx.c
-ln -sf ../../i386/lib/old-checksum.c
-ln -sf ../../i386/lib/strstr.c
-ln -sf ../../i386/lib/usercopy.c
-cd ../mm
-ln -sf ../../i386/mm/extable.c
-ln -sf ../../i386/mm/pageattr.c
diff --git a/xenolinux-2.4.25-sparse/mm/highmem.c b/xenolinux-2.4.25-sparse/mm/highmem.c
deleted file mode 100644
index a68937452c..0000000000
--- a/xenolinux-2.4.25-sparse/mm/highmem.c
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * High memory handling common code and variables.
- *
- * (C) 1999 Andrea Arcangeli, SuSE GmbH, andrea@suse.de
- * Gerhard Wichert, Siemens AG, Gerhard.Wichert@pdb.siemens.de
- *
- *
- * Redesigned the x86 32-bit VM architecture to deal with
- * 64-bit physical space. With current x86 CPUs this
- * means up to 64 Gigabytes physical RAM.
- *
- * Rewrote high memory support to move the page cache into
- * high memory. Implemented permanent (schedulable) kmaps
- * based on Linus' idea.
- *
- * Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
- */
-
-#include <linux/mm.h>
-#include <linux/pagemap.h>
-#include <linux/highmem.h>
-#include <linux/swap.h>
-#include <linux/slab.h>
-
-/*
- * Virtual_count is not a pure "count".
- * 0 means that it is not mapped, and has not been mapped
- * since a TLB flush - it is usable.
- * 1 means that there are no users, but it has been mapped
- * since the last TLB flush - so we can't use it.
- * n means that there are (n-1) current users of it.
- */
-static int pkmap_count[LAST_PKMAP];
-static unsigned int last_pkmap_nr;
-static spinlock_cacheline_t kmap_lock_cacheline = {SPIN_LOCK_UNLOCKED};
-#define kmap_lock kmap_lock_cacheline.lock
-
-pte_t * pkmap_page_table;
-
-static DECLARE_WAIT_QUEUE_HEAD(pkmap_map_wait);
-
-static void flush_all_zero_pkmaps(void)
-{
- int i;
-
- flush_cache_all();
-
- for (i = 0; i < LAST_PKMAP; i++) {
- struct page *page;
-
- /*
- * zero means we don't have anything to do,
- * >1 means that it is still in use. Only
- * a count of 1 means that it is free but
- * needs to be unmapped
- */
- if (pkmap_count[i] != 1)
- continue;
- pkmap_count[i] = 0;
-
- /* sanity check */
- if (pte_none(pkmap_page_table[i]))
- BUG();
-
- /*
- * Don't need an atomic fetch-and-clear op here;
- * no-one has the page mapped, and cannot get at
- * its virtual address (and hence PTE) without first
- * getting the kmap_lock (which is held here).
- * So no dangers, even with speculative execution.
- */
- page = pte_page(pkmap_page_table[i]);
- pte_clear(&pkmap_page_table[i]);
-
- page->virtual = NULL;
- }
- flush_tlb_all();
-}
-
-static inline unsigned long map_new_virtual(struct page *page, int nonblocking)
-{
- unsigned long vaddr;
- int count;
-
-start:
- count = LAST_PKMAP;
- /* Find an empty entry */
- for (;;) {
- last_pkmap_nr = (last_pkmap_nr + 1) & LAST_PKMAP_MASK;
- if (!last_pkmap_nr) {
- flush_all_zero_pkmaps();
- count = LAST_PKMAP;
- }
- if (!pkmap_count[last_pkmap_nr])
- break; /* Found a usable entry */
- if (--count)
- continue;
-
- if (nonblocking)
- return 0;
-
- /*
- * Sleep for somebody else to unmap their entries
- */
- {
- DECLARE_WAITQUEUE(wait, current);
-
- current->state = TASK_UNINTERRUPTIBLE;
- add_wait_queue(&pkmap_map_wait, &wait);
- spin_unlock(&kmap_lock);
- schedule();
- remove_wait_queue(&pkmap_map_wait, &wait);
- spin_lock(&kmap_lock);
-
- /* Somebody else might have mapped it while we slept */
- if (page->virtual)
- return (unsigned long) page->virtual;
-
- /* Re-start */
- goto start;
- }
- }
- vaddr = PKMAP_ADDR(last_pkmap_nr);
- set_pte(&(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));
- XEN_flush_page_update_queue();
-
- pkmap_count[last_pkmap_nr] = 1;
- page->virtual = (void *) vaddr;
-
- return vaddr;
-}
-
-void *kmap_high(struct page *page, int nonblocking)
-{
- unsigned long vaddr;
-
- /*
- * For highmem pages, we can't trust "virtual" until
- * after we have the lock.
- *
- * We cannot call this from interrupts, as it may block
- */
- spin_lock(&kmap_lock);
- vaddr = (unsigned long) page->virtual;
- if (!vaddr) {
- vaddr = map_new_virtual(page, nonblocking);
- if (!vaddr)
- goto out;
- }
- pkmap_count[PKMAP_NR(vaddr)]++;
- if (pkmap_count[PKMAP_NR(vaddr)] < 2)
- BUG();
- out:
- spin_unlock(&kmap_lock);
- return (void*) vaddr;
-}
-
-void kunmap_high(struct page *page)
-{
- unsigned long vaddr;
- unsigned long nr;
- int need_wakeup;
-
- spin_lock(&kmap_lock);
- vaddr = (unsigned long) page->virtual;
- if (!vaddr)
- BUG();
- nr = PKMAP_NR(vaddr);
-
- /*
- * A count must never go down to zero
- * without a TLB flush!
- */
- need_wakeup = 0;
- switch (--pkmap_count[nr]) {
- case 0:
- BUG();
- case 1:
- /*
- * Avoid an unnecessary wake_up() function call.
- * The common case is pkmap_count[] == 1, but
- * no waiters.
- * The tasks queued in the wait-queue are guarded
- * by both the lock in the wait-queue-head and by
- * the kmap_lock. As the kmap_lock is held here,
- * no need for the wait-queue-head's lock. Simply
- * test if the queue is empty.
- */
- need_wakeup = waitqueue_active(&pkmap_map_wait);
- }
- spin_unlock(&kmap_lock);
-
- /* do wake-up, if needed, race-free outside of the spin lock */
- if (need_wakeup)
- wake_up(&pkmap_map_wait);
-}
-
-#define POOL_SIZE 32
-
-/*
- * This lock gets no contention at all, normally.
- */
-static spinlock_t emergency_lock = SPIN_LOCK_UNLOCKED;
-
-int nr_emergency_pages;
-static LIST_HEAD(emergency_pages);
-
-int nr_emergency_bhs;
-static LIST_HEAD(emergency_bhs);
-
-/*
- * Simple bounce buffer support for highmem pages.
- * This will be moved to the block layer in 2.5.
- */
-
-static inline void copy_from_high_bh (struct buffer_head *to,
- struct buffer_head *from)
-{
- struct page *p_from;
- char *vfrom;
-
- p_from = from->b_page;
-
- vfrom = kmap_atomic(p_from, KM_USER0);
- memcpy(to->b_data, vfrom + bh_offset(from), to->b_size);
- kunmap_atomic(vfrom, KM_USER0);
-}
-
-static inline void copy_to_high_bh_irq (struct buffer_head *to,
- struct buffer_head *from)
-{
- struct page *p_to;
- char *vto;
- unsigned long flags;
-
- p_to = to->b_page;
- __save_flags(flags);
- __cli();
- vto = kmap_atomic(p_to, KM_BOUNCE_READ);
- memcpy(vto + bh_offset(to), from->b_data, to->b_size);
- kunmap_atomic(vto, KM_BOUNCE_READ);
- __restore_flags(flags);
-}
-
-static inline void bounce_end_io (struct buffer_head *bh, int uptodate)
-{
- struct page *page;
- struct buffer_head *bh_orig = (struct buffer_head *)(bh->b_private);
- unsigned long flags;
-
- bh_orig->b_end_io(bh_orig, uptodate);
-
- page = bh->b_page;
-
- spin_lock_irqsave(&emergency_lock, flags);
- if (nr_emergency_pages >= POOL_SIZE)
- __free_page(page);
- else {
- /*
- * We are abusing page->list to manage
- * the highmem emergency pool:
- */
- list_add(&page->list, &emergency_pages);
- nr_emergency_pages++;
- }
-
- if (nr_emergency_bhs >= POOL_SIZE) {
-#ifdef HIGHMEM_DEBUG
- /* Don't clobber the constructed slab cache */
- init_waitqueue_head(&bh->b_wait);
-#endif
- kmem_cache_free(bh_cachep, bh);
- } else {
- /*
- * Ditto in the bh case, here we abuse b_inode_buffers:
- */
- list_add(&bh->b_inode_buffers, &emergency_bhs);
- nr_emergency_bhs++;
- }
- spin_unlock_irqrestore(&emergency_lock, flags);
-}
-
-static __init int init_emergency_pool(void)
-{
- struct sysinfo i;
- si_meminfo(&i);
- si_swapinfo(&i);
-
- if (!i.totalhigh)
- return 0;
-
- spin_lock_irq(&emergency_lock);
- while (nr_emergency_pages < POOL_SIZE) {
- struct page * page = alloc_page(GFP_ATOMIC);
- if (!page) {
- printk("couldn't refill highmem emergency pages");
- break;
- }
- list_add(&page->list, &emergency_pages);
- nr_emergency_pages++;
- }
- while (nr_emergency_bhs < POOL_SIZE) {
- struct buffer_head * bh = kmem_cache_alloc(bh_cachep, SLAB_ATOMIC);
- if (!bh) {
- printk("couldn't refill highmem emergency bhs");
- break;
- }
- list_add(&bh->b_inode_buffers, &emergency_bhs);
- nr_emergency_bhs++;
- }
- spin_unlock_irq(&emergency_lock);
- printk("allocated %d pages and %d bhs reserved for the highmem bounces\n",
- nr_emergency_pages, nr_emergency_bhs);
-
- return 0;
-}
-
-__initcall(init_emergency_pool);
-
-static void bounce_end_io_write (struct buffer_head *bh, int uptodate)
-{
- bounce_end_io(bh, uptodate);
-}
-
-static void bounce_end_io_read (struct buffer_head *bh, int uptodate)
-{
- struct buffer_head *bh_orig = (struct buffer_head *)(bh->b_private);
-
- if (uptodate)
- copy_to_high_bh_irq(bh_orig, bh);
- bounce_end_io(bh, uptodate);
-}
-
-struct page *alloc_bounce_page (void)
-{
- struct list_head *tmp;
- struct page *page;
-
- page = alloc_page(GFP_NOHIGHIO);
- if (page)
- return page;
- /*
- * No luck. First, kick the VM so it doesn't idle around while
- * we are using up our emergency rations.
- */
- wakeup_bdflush();
-
-repeat_alloc:
- /*
- * Try to allocate from the emergency pool.
- */
- tmp = &emergency_pages;
- spin_lock_irq(&emergency_lock);
- if (!list_empty(tmp)) {
- page = list_entry(tmp->next, struct page, list);
- list_del(tmp->next);
- nr_emergency_pages--;
- }
- spin_unlock_irq(&emergency_lock);
- if (page)
- return page;
-
- /* we need to wait I/O completion */
- run_task_queue(&tq_disk);
-
- yield();
- goto repeat_alloc;
-}
-
-struct buffer_head *alloc_bounce_bh (void)
-{
- struct list_head *tmp;
- struct buffer_head *bh;
-
- bh = kmem_cache_alloc(bh_cachep, SLAB_NOHIGHIO);
- if (bh)
- return bh;
- /*
- * No luck. First, kick the VM so it doesn't idle around while
- * we are using up our emergency rations.
- */
- wakeup_bdflush();
-
-repeat_alloc:
- /*
- * Try to allocate from the emergency pool.
- */
- tmp = &emergency_bhs;
- spin_lock_irq(&emergency_lock);
- if (!list_empty(tmp)) {
- bh = list_entry(tmp->next, struct buffer_head, b_inode_buffers);
- list_del(tmp->next);
- nr_emergency_bhs--;
- }
- spin_unlock_irq(&emergency_lock);
- if (bh)
- return bh;
-
- /* we need to wait I/O completion */
- run_task_queue(&tq_disk);
-
- yield();
- goto repeat_alloc;
-}
-
-struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig)
-{
- struct page *page;
- struct buffer_head *bh;
-
- if (!PageHighMem(bh_orig->b_page))
- return bh_orig;
-
- bh = alloc_bounce_bh();
- /*
- * This is wasteful for 1k buffers, but this is a stopgap measure
- * and we are being ineffective anyway. This approach simplifies
- * things immensly. On boxes with more than 4GB RAM this should
- * not be an issue anyway.
- */
- page = alloc_bounce_page();
-
- set_bh_page(bh, page, 0);
-
- bh->b_next = NULL;
- bh->b_blocknr = bh_orig->b_blocknr;
- bh->b_size = bh_orig->b_size;
- bh->b_list = -1;
- bh->b_dev = bh_orig->b_dev;
- bh->b_count = bh_orig->b_count;
- bh->b_rdev = bh_orig->b_rdev;
- bh->b_state = bh_orig->b_state;
-#ifdef HIGHMEM_DEBUG
- bh->b_flushtime = jiffies;
- bh->b_next_free = NULL;
- bh->b_prev_free = NULL;
- /* bh->b_this_page */
- bh->b_reqnext = NULL;
- bh->b_pprev = NULL;
-#endif
- /* bh->b_page */
- if (rw == WRITE) {
- bh->b_end_io = bounce_end_io_write;
- copy_from_high_bh(bh, bh_orig);
- } else
- bh->b_end_io = bounce_end_io_read;
- bh->b_private = (void *)bh_orig;
- bh->b_rsector = bh_orig->b_rsector;
-#ifdef HIGHMEM_DEBUG
- memset(&bh->b_wait, -1, sizeof(bh->b_wait));
-#endif
-
- return bh;
-}
-
diff --git a/xenolinux-2.4.25-sparse/mm/memory.c b/xenolinux-2.4.25-sparse/mm/memory.c
deleted file mode 100644
index 312dbfa7c0..0000000000
--- a/xenolinux-2.4.25-sparse/mm/memory.c
+++ /dev/null
@@ -1,1549 +0,0 @@
-/*
- * linux/mm/memory.c
- *
- * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
- */
-
-/*
- * demand-loading started 01.12.91 - seems it is high on the list of
- * things wanted, and it should be easy to implement. - Linus
- */
-
-/*
- * Ok, demand-loading was easy, shared pages a little bit tricker. Shared
- * pages started 02.12.91, seems to work. - Linus.
- *
- * Tested sharing by executing about 30 /bin/sh: under the old kernel it
- * would have taken more than the 6M I have free, but it worked well as
- * far as I could see.
- *
- * Also corrected some "invalidate()"s - I wasn't doing enough of them.
- */
-
-/*
- * Real VM (paging to/from disk) started 18.12.91. Much more work and
- * thought has to go into this. Oh, well..
- * 19.12.91 - works, somewhat. Sometimes I get faults, don't know why.
- * Found it. Everything seems to work now.
- * 20.12.91 - Ok, making the swap-device changeable like the root.
- */
-
-/*
- * 05.04.94 - Multi-page memory management added for v1.1.
- * Idea by Alex Bligh (alex@cconcepts.co.uk)
- *
- * 16.07.99 - Support of BIGMEM added by Gerhard Wichert, Siemens AG
- * (Gerhard.Wichert@pdb.siemens.de)
- */
-
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-#include <linux/smp_lock.h>
-#include <linux/swapctl.h>
-#include <linux/iobuf.h>
-#include <linux/highmem.h>
-#include <linux/pagemap.h>
-#include <linux/module.h>
-
-#include <asm/pgalloc.h>
-#include <asm/uaccess.h>
-#include <asm/tlb.h>
-
-unsigned long max_mapnr;
-unsigned long num_physpages;
-unsigned long num_mappedpages;
-void * high_memory;
-struct page *highmem_start_page;
-
-/*
- * We special-case the C-O-W ZERO_PAGE, because it's such
- * a common occurrence (no need to read the page to know
- * that it's zero - better for the cache and memory subsystem).
- */
-static inline void copy_cow_page(struct page * from, struct page * to, unsigned long address)
-{
- if (from == ZERO_PAGE(address)) {
- clear_user_highpage(to, address);
- return;
- }
- copy_user_highpage(to, from, address);
-}
-
-mem_map_t * mem_map;
-
-/*
- * Called by TLB shootdown
- */
-void __free_pte(pte_t pte)
-{
- struct page *page = pte_page(pte);
- if ((!VALID_PAGE(page)) || PageReserved(page))
- return;
- if (pte_dirty(pte))
- set_page_dirty(page);
- free_page_and_swap_cache(page);
-}
-
-
-/*
- * Note: this doesn't free the actual pages themselves. That
- * has been handled earlier when unmapping all the memory regions.
- */
-static inline void free_one_pmd(pmd_t * dir)
-{
- pte_t * pte;
-
- if (pmd_none(*dir))
- return;
- if (pmd_bad(*dir)) {
- pmd_ERROR(*dir);
- pmd_clear(dir);
- return;
- }
- pte = pte_offset(dir, 0);
- pmd_clear(dir);
- pte_free(pte);
-}
-
-static inline void free_one_pgd(pgd_t * dir)
-{
- int j;
- pmd_t * pmd;
-
- if (pgd_none(*dir))
- return;
- if (pgd_bad(*dir)) {
- pgd_ERROR(*dir);
- pgd_clear(dir);
- return;
- }
- pmd = pmd_offset(dir, 0);
- pgd_clear(dir);
- for (j = 0; j < PTRS_PER_PMD ; j++) {
- prefetchw(pmd+j+(PREFETCH_STRIDE/16));
- free_one_pmd(pmd+j);
- }
- pmd_free(pmd);
-}
-
-/* Low and high watermarks for page table cache.
- The system should try to have pgt_water[0] <= cache elements <= pgt_water[1]
- */
-int pgt_cache_water[2] = { 25, 50 };
-
-/* Returns the number of pages freed */
-int check_pgt_cache(void)
-{
- return do_check_pgt_cache(pgt_cache_water[0], pgt_cache_water[1]);
-}
-
-
-/*
- * This function clears all user-level page tables of a process - this
- * is needed by execve(), so that old pages aren't in the way.
- */
-void clear_page_tables(struct mm_struct *mm, unsigned long first, int nr)
-{
- pgd_t * page_dir = mm->pgd;
-
- spin_lock(&mm->page_table_lock);
- page_dir += first;
- do {
- free_one_pgd(page_dir);
- page_dir++;
- } while (--nr);
- XEN_flush_page_update_queue();
- spin_unlock(&mm->page_table_lock);
-
- /* keep the page table cache within bounds */
- check_pgt_cache();
-}
-
-#define PTE_TABLE_MASK ((PTRS_PER_PTE-1) * sizeof(pte_t))
-#define PMD_TABLE_MASK ((PTRS_PER_PMD-1) * sizeof(pmd_t))
-
-/*
- * copy one vm_area from one task to the other. Assumes the page tables
- * already present in the new task to be cleared in the whole range
- * covered by this vma.
- *
- * 08Jan98 Merged into one routine from several inline routines to reduce
- * variable count and make things faster. -jj
- *
- * dst->page_table_lock is held on entry and exit,
- * but may be dropped within pmd_alloc() and pte_alloc().
- */
-int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
- struct vm_area_struct *vma)
-{
- pgd_t * src_pgd, * dst_pgd;
- unsigned long address = vma->vm_start;
- unsigned long end = vma->vm_end;
- unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
-
- src_pgd = pgd_offset(src, address)-1;
- dst_pgd = pgd_offset(dst, address)-1;
-
- for (;;) {
- pmd_t * src_pmd, * dst_pmd;
-
- src_pgd++; dst_pgd++;
-
- /* copy_pmd_range */
-
- if (pgd_none(*src_pgd))
- goto skip_copy_pmd_range;
- if (pgd_bad(*src_pgd)) {
- pgd_ERROR(*src_pgd);
- pgd_clear(src_pgd);
-skip_copy_pmd_range: address = (address + PGDIR_SIZE) & PGDIR_MASK;
- if (!address || (address >= end))
- goto out;
- continue;
- }
-
- src_pmd = pmd_offset(src_pgd, address);
- dst_pmd = pmd_alloc(dst, dst_pgd, address);
- if (!dst_pmd)
- goto nomem;
-
- do {
- pte_t * src_pte, * dst_pte;
-
- /* copy_pte_range */
-
- if (pmd_none(*src_pmd))
- goto skip_copy_pte_range;
- if (pmd_bad(*src_pmd)) {
- pmd_ERROR(*src_pmd);
- pmd_clear(src_pmd);
-skip_copy_pte_range: address = (address + PMD_SIZE) & PMD_MASK;
- if (address >= end)
- goto out;
- goto cont_copy_pmd_range;
- }
-
- src_pte = pte_offset(src_pmd, address);
- dst_pte = pte_alloc(dst, dst_pmd, address);
- if (!dst_pte)
- goto nomem;
-
- spin_lock(&src->page_table_lock);
- do {
- pte_t pte = *src_pte;
- struct page *ptepage;
-
- /* copy_one_pte */
-
- if (pte_none(pte))
- goto cont_copy_pte_range_noset;
- if (!pte_present(pte)) {
- swap_duplicate(pte_to_swp_entry(pte));
- goto cont_copy_pte_range;
- }
- ptepage = pte_page(pte);
- if ((!VALID_PAGE(ptepage)) ||
- PageReserved(ptepage))
- goto cont_copy_pte_range;
-
- /* If it's a COW mapping, write protect it both in the parent and the child */
- if (cow && pte_write(pte)) {
- /* XEN modification: modified ordering here to avoid RaW hazard. */
- pte = *src_pte;
- pte = pte_wrprotect(pte);
- ptep_set_wrprotect(src_pte);
- }
-
- /* If it's a shared mapping, mark it clean in the child */
- if (vma->vm_flags & VM_SHARED)
- pte = pte_mkclean(pte);
- pte = pte_mkold(pte);
- get_page(ptepage);
- dst->rss++;
-
-cont_copy_pte_range: set_pte(dst_pte, pte);
-cont_copy_pte_range_noset: address += PAGE_SIZE;
- if (address >= end)
- goto out_unlock;
- src_pte++;
- dst_pte++;
- } while ((unsigned long)src_pte & PTE_TABLE_MASK);
- spin_unlock(&src->page_table_lock);
-
-cont_copy_pmd_range: src_pmd++;
- dst_pmd++;
- } while ((unsigned long)src_pmd & PMD_TABLE_MASK);
- }
-out_unlock:
- spin_unlock(&src->page_table_lock);
-out:
- return 0;
-nomem:
- return -ENOMEM;
-}
-
-/*
- * Return indicates whether a page was freed so caller can adjust rss
- */
-static inline void forget_pte(pte_t page)
-{
- if (!pte_none(page)) {
- printk("forget_pte: old mapping existed!\n");
- BUG();
- }
-}
-
-static inline int zap_pte_range(mmu_gather_t *tlb, pmd_t * pmd, unsigned long address, unsigned long size)
-{
- unsigned long offset;
- pte_t * ptep;
- int freed = 0;
-
- if (pmd_none(*pmd))
- return 0;
- if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
- return 0;
- }
- ptep = pte_offset(pmd, address);
- offset = address & ~PMD_MASK;
- if (offset + size > PMD_SIZE)
- size = PMD_SIZE - offset;
- size &= PAGE_MASK;
- for (offset=0; offset < size; ptep++, offset += PAGE_SIZE) {
- pte_t pte = *ptep;
- if (pte_none(pte))
- continue;
- if (pte_present(pte)) {
- struct page *page = pte_page(pte);
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- if (pte_io(pte)) {
- queue_l1_entry_update(ptep, 0);
- continue;
- }
-#endif
- if (VALID_PAGE(page) && !PageReserved(page))
- freed ++;
- /* This will eventually call __free_pte on the pte. */
- tlb_remove_page(tlb, ptep, address + offset);
- } else {
- free_swap_and_cache(pte_to_swp_entry(pte));
- pte_clear(ptep);
- }
- }
-
- return freed;
-}
-
-static inline int zap_pmd_range(mmu_gather_t *tlb, pgd_t * dir, unsigned long address, unsigned long size)
-{
- pmd_t * pmd;
- unsigned long end;
- int freed;
-
- if (pgd_none(*dir))
- return 0;
- if (pgd_bad(*dir)) {
- pgd_ERROR(*dir);
- pgd_clear(dir);
- return 0;
- }
- pmd = pmd_offset(dir, address);
- end = address + size;
- if (end > ((address + PGDIR_SIZE) & PGDIR_MASK))
- end = ((address + PGDIR_SIZE) & PGDIR_MASK);
- freed = 0;
- do {
- freed += zap_pte_range(tlb, pmd, address, end - address);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address < end);
- return freed;
-}
-
-/*
- * remove user pages in a given range.
- */
-void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
-{
- mmu_gather_t *tlb;
- pgd_t * dir;
- unsigned long start = address, end = address + size;
- int freed = 0;
-
- dir = pgd_offset(mm, address);
-
- /*
- * This is a long-lived spinlock. That's fine.
- * There's no contention, because the page table
- * lock only protects against kswapd anyway, and
- * even if kswapd happened to be looking at this
- * process we _want_ it to get stuck.
- */
- if (address >= end)
- BUG();
- spin_lock(&mm->page_table_lock);
- flush_cache_range(mm, address, end);
- tlb = tlb_gather_mmu(mm);
-
- do {
- freed += zap_pmd_range(tlb, dir, address, end - address);
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
-
- /* this will flush any remaining tlb entries */
- tlb_finish_mmu(tlb, start, end);
-
- /*
- * Update rss for the mm_struct (not necessarily current->mm)
- * Notice that rss is an unsigned long.
- */
- if (mm->rss > freed)
- mm->rss -= freed;
- else
- mm->rss = 0;
- spin_unlock(&mm->page_table_lock);
-}
-
-/*
- * Do a quick page-table lookup for a single page.
- */
-static struct page * follow_page(struct mm_struct *mm, unsigned long address, int write)
-{
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *ptep, pte;
-
- pgd = pgd_offset(mm, address);
- if (pgd_none(*pgd) || pgd_bad(*pgd))
- goto out;
-
- pmd = pmd_offset(pgd, address);
- if (pmd_none(*pmd) || pmd_bad(*pmd))
- goto out;
-
- ptep = pte_offset(pmd, address);
- if (!ptep)
- goto out;
-
- pte = *ptep;
- if (pte_present(pte)) {
- if (!write ||
- (pte_write(pte) && pte_dirty(pte)))
- return pte_page(pte);
- }
-
-out:
- return 0;
-}
-
-/*
- * 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
- * with IO-aperture pages in kiobufs.
- */
-
-static inline struct page * get_page_map(struct page *page)
-{
- if (!VALID_PAGE(page))
- return 0;
- return page;
-}
-
-/*
- * Please read Documentation/cachetlb.txt before using this function,
- * accessing foreign memory spaces can cause cache coherency problems.
- *
- * Accessing a VM_IO area is even more dangerous, therefore the function
- * fails if pages is != NULL and a VM_IO area is found.
- */
-int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
- int len, int write, int force, struct page **pages, struct vm_area_struct **vmas)
-{
- int i;
- unsigned int flags;
-
- /*
- * Require read or write permissions.
- * If 'force' is set, we only require the "MAY" flags.
- */
- flags = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
- flags &= force ? (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
- i = 0;
-
- do {
- struct vm_area_struct * vma;
-
- vma = find_extend_vma(mm, start);
-
- if ( !vma || (pages && vma->vm_flags & VM_IO) || !(flags & vma->vm_flags) )
- return i ? : -EFAULT;
-
- spin_lock(&mm->page_table_lock);
- do {
- struct page *map;
- while (!(map = follow_page(mm, start, write))) {
- spin_unlock(&mm->page_table_lock);
- switch (handle_mm_fault(mm, vma, start, write)) {
- case 1:
- tsk->min_flt++;
- break;
- case 2:
- tsk->maj_flt++;
- break;
- case 0:
- if (i) return i;
- return -EFAULT;
- default:
- if (i) return i;
- return -ENOMEM;
- }
- spin_lock(&mm->page_table_lock);
- }
- if (pages) {
- pages[i] = get_page_map(map);
- /* FIXME: call the correct function,
- * depending on the type of the found page
- */
- if (!pages[i])
- goto bad_page;
- page_cache_get(pages[i]);
- }
- if (vmas)
- vmas[i] = vma;
- i++;
- start += PAGE_SIZE;
- len--;
- } while(len && start < vma->vm_end);
- spin_unlock(&mm->page_table_lock);
- } while(len);
-out:
- return i;
-
- /*
- * We found an invalid page in the VMA. Release all we have
- * so far and fail.
- */
-bad_page:
- spin_unlock(&mm->page_table_lock);
- while (i--)
- page_cache_release(pages[i]);
- i = -EFAULT;
- goto out;
-}
-
-EXPORT_SYMBOL(get_user_pages);
-
-/*
- * Force in an entire range of pages from the current process's user VA,
- * and pin them in physical memory.
- */
-#define dprintk(x...)
-
-int map_user_kiobuf(int rw, struct kiobuf *iobuf, unsigned long va, size_t len)
-{
- int pgcount, err;
- struct mm_struct * mm;
-
- /* Make sure the iobuf is not already mapped somewhere. */
- if (iobuf->nr_pages)
- return -EINVAL;
-
- mm = current->mm;
- dprintk ("map_user_kiobuf: begin\n");
-
- pgcount = (va + len + PAGE_SIZE - 1)/PAGE_SIZE - va/PAGE_SIZE;
- /* mapping 0 bytes is not permitted */
- if (!pgcount) BUG();
- err = expand_kiobuf(iobuf, pgcount);
- if (err)
- return err;
-
- iobuf->locked = 0;
- iobuf->offset = va & (PAGE_SIZE-1);
- iobuf->length = len;
-
- /* Try to fault in all of the necessary pages */
- down_read(&mm->mmap_sem);
- /* rw==READ means read from disk, write into memory area */
- err = get_user_pages(current, mm, va, pgcount,
- (rw==READ), 0, iobuf->maplist, NULL);
- up_read(&mm->mmap_sem);
- if (err < 0) {
- unmap_kiobuf(iobuf);
- dprintk ("map_user_kiobuf: end %d\n", err);
- return err;
- }
- iobuf->nr_pages = err;
- while (pgcount--) {
- /* FIXME: flush superflous for rw==READ,
- * probably wrong function for rw==WRITE
- */
- flush_dcache_page(iobuf->maplist[pgcount]);
- }
- dprintk ("map_user_kiobuf: end OK\n");
- return 0;
-}
-
-/*
- * Mark all of the pages in a kiobuf as dirty
- *
- * We need to be able to deal with short reads from disk: if an IO error
- * occurs, the number of bytes read into memory may be less than the
- * size of the kiobuf, so we have to stop marking pages dirty once the
- * requested byte count has been reached.
- *
- * Must be called from process context - set_page_dirty() takes VFS locks.
- */
-
-void mark_dirty_kiobuf(struct kiobuf *iobuf, int bytes)
-{
- int index, offset, remaining;
- struct page *page;
-
- index = iobuf->offset >> PAGE_SHIFT;
- offset = iobuf->offset & ~PAGE_MASK;
- remaining = bytes;
- if (remaining > iobuf->length)
- remaining = iobuf->length;
-
- while (remaining > 0 && index < iobuf->nr_pages) {
- page = iobuf->maplist[index];
-
- if (!PageReserved(page))
- set_page_dirty(page);
-
- remaining -= (PAGE_SIZE - offset);
- offset = 0;
- index++;
- }
-}
-
-/*
- * Unmap all of the pages referenced by a kiobuf. We release the pages,
- * and unlock them if they were locked.
- */
-
-void unmap_kiobuf (struct kiobuf *iobuf)
-{
- int i;
- struct page *map;
-
- for (i = 0; i < iobuf->nr_pages; i++) {
- map = iobuf->maplist[i];
- if (map) {
- if (iobuf->locked)
- UnlockPage(map);
- /* FIXME: cache flush missing for rw==READ
- * FIXME: call the correct reference counting function
- */
- page_cache_release(map);
- }
- }
-
- iobuf->nr_pages = 0;
- iobuf->locked = 0;
-}
-
-
-/*
- * Lock down all of the pages of a kiovec for IO.
- *
- * If any page is mapped twice in the kiovec, we return the error -EINVAL.
- *
- * The optional wait parameter causes the lock call to block until all
- * pages can be locked if set. If wait==0, the lock operation is
- * aborted if any locked pages are found and -EAGAIN is returned.
- */
-
-int lock_kiovec(int nr, struct kiobuf *iovec[], int wait)
-{
- struct kiobuf *iobuf;
- int i, j;
- struct page *page, **ppage;
- int doublepage = 0;
- int repeat = 0;
-
- repeat:
-
- for (i = 0; i < nr; i++) {
- iobuf = iovec[i];
-
- if (iobuf->locked)
- continue;
-
- ppage = iobuf->maplist;
- for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
- page = *ppage;
- if (!page)
- continue;
-
- if (TryLockPage(page)) {
- while (j--) {
- struct page *tmp = *--ppage;
- if (tmp)
- UnlockPage(tmp);
- }
- goto retry;
- }
- }
- iobuf->locked = 1;
- }
-
- return 0;
-
- retry:
-
- /*
- * We couldn't lock one of the pages. Undo the locking so far,
- * wait on the page we got to, and try again.
- */
-
- unlock_kiovec(nr, iovec);
- if (!wait)
- return -EAGAIN;
-
- /*
- * Did the release also unlock the page we got stuck on?
- */
- if (!PageLocked(page)) {
- /*
- * If so, we may well have the page mapped twice
- * in the IO address range. Bad news. Of
- * course, it _might_ just be a coincidence,
- * but if it happens more than once, chances
- * are we have a double-mapped page.
- */
- if (++doublepage >= 3)
- return -EINVAL;
-
- /* Try again... */
- wait_on_page(page);
- }
-
- if (++repeat < 16)
- goto repeat;
- return -EAGAIN;
-}
-
-/*
- * Unlock all of the pages of a kiovec after IO.
- */
-
-int unlock_kiovec(int nr, struct kiobuf *iovec[])
-{
- struct kiobuf *iobuf;
- int i, j;
- struct page *page, **ppage;
-
- for (i = 0; i < nr; i++) {
- iobuf = iovec[i];
-
- if (!iobuf->locked)
- continue;
- iobuf->locked = 0;
-
- ppage = iobuf->maplist;
- for (j = 0; j < iobuf->nr_pages; ppage++, j++) {
- page = *ppage;
- if (!page)
- continue;
- UnlockPage(page);
- }
- }
- return 0;
-}
-
-static inline void zeromap_pte_range(pte_t * pte, unsigned long address,
- unsigned long size, pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- pte_t zero_pte = pte_wrprotect(mk_pte(ZERO_PAGE(address), prot));
- pte_t oldpage = ptep_get_and_clear(pte);
- set_pte(pte, zero_pte);
- forget_pte(oldpage);
- address += PAGE_SIZE;
- pte++;
- } while (address && (address < end));
-}
-
-static inline int zeromap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address,
- unsigned long size, pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- do {
- pte_t * pte = pte_alloc(mm, pmd, address);
- if (!pte)
- return -ENOMEM;
- zeromap_pte_range(pte, address, end - address, prot);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
- return 0;
-}
-
-int zeromap_page_range(unsigned long address, unsigned long size, pgprot_t prot)
-{
- int error = 0;
- pgd_t * dir;
- unsigned long beg = address;
- unsigned long end = address + size;
- struct mm_struct *mm = current->mm;
-
- dir = pgd_offset(mm, address);
- flush_cache_range(mm, beg, end);
- if (address >= end)
- BUG();
-
- spin_lock(&mm->page_table_lock);
- do {
- pmd_t *pmd = pmd_alloc(mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
- error = zeromap_pmd_range(mm, pmd, address, end - address, prot);
- if (error)
- break;
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
- spin_unlock(&mm->page_table_lock);
- flush_tlb_range(mm, beg, end);
- return error;
-}
-
-/*
- * maps a range of physical memory into the requested pages. the old
- * mappings are removed. any references to nonexistent pages results
- * in null mappings (currently treated as "copy-on-access")
- */
-static inline void remap_pte_range(pte_t * pte, unsigned long address, unsigned long size,
- unsigned long phys_addr, pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- struct page *page;
- pte_t oldpage;
- oldpage = ptep_get_and_clear(pte);
-
- page = virt_to_page(__va(phys_addr));
- if ((!VALID_PAGE(page)) || PageReserved(page))
- set_pte(pte, mk_pte_phys(phys_addr, prot));
- forget_pte(oldpage);
- address += PAGE_SIZE;
- phys_addr += PAGE_SIZE;
- pte++;
- } while (address && (address < end));
-}
-
-static inline int remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned long address, unsigned long size,
- unsigned long phys_addr, pgprot_t prot)
-{
- unsigned long end;
-
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- phys_addr -= address;
- do {
- pte_t * pte = pte_alloc(mm, pmd, address);
- if (!pte)
- return -ENOMEM;
- remap_pte_range(pte, address, end - address, address + phys_addr, prot);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
- return 0;
-}
-
-/* Note: this is only safe if the mm semaphore is held when called. */
-int remap_page_range(unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot)
-{
- int error = 0;
- pgd_t * dir;
- unsigned long beg = from;
- unsigned long end = from + size;
- struct mm_struct *mm = current->mm;
-
- phys_addr -= from;
- dir = pgd_offset(mm, from);
- flush_cache_range(mm, beg, end);
- if (from >= end)
- BUG();
-
- spin_lock(&mm->page_table_lock);
- do {
- pmd_t *pmd = pmd_alloc(mm, dir, from);
- error = -ENOMEM;
- if (!pmd)
- break;
- error = remap_pmd_range(mm, pmd, from, end - from, phys_addr + from, prot);
- if (error)
- break;
- from = (from + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (from && (from < end));
- spin_unlock(&mm->page_table_lock);
- flush_tlb_range(mm, beg, end);
- return error;
-}
-
-/*
- * Establish a new mapping:
- * - flush the old one
- * - update the page tables
- * - inform the TLB about the new one
- *
- * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
- */
-static inline void establish_pte(struct vm_area_struct * vma, unsigned long address, pte_t *page_table, pte_t entry)
-{
-#ifdef CONFIG_XEN
- if ( likely(vma->vm_mm == current->mm) ) {
- XEN_flush_page_update_queue();
- HYPERVISOR_update_va_mapping(address>>PAGE_SHIFT, entry, UVMF_INVLPG);
- } else {
- set_pte(page_table, entry);
- flush_tlb_page(vma, address);
- }
-#else
- set_pte(page_table, entry);
- flush_tlb_page(vma, address);
-#endif
- update_mmu_cache(vma, address, entry);
-}
-
-/*
- * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock
- */
-static inline void break_cow(struct vm_area_struct * vma, struct page * new_page, unsigned long address,
- pte_t *page_table)
-{
- flush_page_to_ram(new_page);
- flush_cache_page(vma, address);
- establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
-}
-
-/*
- * This routine handles present pages, when users try to write
- * to a shared page. It is done by copying the page to a new address
- * and decrementing the shared-page counter for the old page.
- *
- * Goto-purists beware: the only reason for goto's here is that it results
- * in better assembly code.. The "default" path will see no jumps at all.
- *
- * Note that this routine assumes that the protection checks have been
- * done by the caller (the low-level page fault routine in most cases).
- * Thus we can safely just mark it writable once we've done any necessary
- * COW.
- *
- * We also mark the page dirty at this point even though the page will
- * change only once the write actually happens. This avoids a few races,
- * and potentially makes it more efficient.
- *
- * We hold the mm semaphore and the page_table_lock on entry and exit
- * with the page_table_lock released.
- */
-static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma,
- unsigned long address, pte_t *page_table, pte_t pte)
-{
- struct page *old_page, *new_page;
-
- old_page = pte_page(pte);
- if (!VALID_PAGE(old_page))
- goto bad_wp_page;
-
- if (!TryLockPage(old_page)) {
- int reuse = can_share_swap_page(old_page);
- unlock_page(old_page);
- if (reuse) {
- flush_cache_page(vma, address);
- establish_pte(vma, address, page_table, pte_mkyoung(pte_mkdirty(pte_mkwrite(pte))));
- spin_unlock(&mm->page_table_lock);
- return 1; /* Minor fault */
- }
- }
-
- /*
- * Ok, we need to copy. Oh, well..
- */
- page_cache_get(old_page);
- spin_unlock(&mm->page_table_lock);
-
- new_page = alloc_page(GFP_HIGHUSER);
- if (!new_page)
- goto no_mem;
- copy_cow_page(old_page,new_page,address);
-
- /*
- * Re-check the pte - we dropped the lock
- */
- spin_lock(&mm->page_table_lock);
- if (pte_same(*page_table, pte)) {
- if (PageReserved(old_page))
- ++mm->rss;
- break_cow(vma, new_page, address, page_table);
- lru_cache_add(new_page);
-
- /* Free the old page.. */
- new_page = old_page;
- }
- spin_unlock(&mm->page_table_lock);
- page_cache_release(new_page);
- page_cache_release(old_page);
- return 1; /* Minor fault */
-
-bad_wp_page:
- spin_unlock(&mm->page_table_lock);
- printk("do_wp_page: bogus page at address %08lx (page 0x%lx)\n",address,(unsigned long)old_page);
- return -1;
-no_mem:
- page_cache_release(old_page);
- return -1;
-}
-
-static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long pgoff)
-{
- do {
- struct mm_struct *mm = mpnt->vm_mm;
- unsigned long start = mpnt->vm_start;
- unsigned long end = mpnt->vm_end;
- unsigned long len = end - start;
- unsigned long diff;
-
- /* mapping wholly truncated? */
- if (mpnt->vm_pgoff >= pgoff) {
- zap_page_range(mm, start, len);
- continue;
- }
-
- /* mapping wholly unaffected? */
- len = len >> PAGE_SHIFT;
- diff = pgoff - mpnt->vm_pgoff;
- if (diff >= len)
- continue;
-
- /* Ok, partially affected.. */
- start += diff << PAGE_SHIFT;
- len = (len - diff) << PAGE_SHIFT;
- zap_page_range(mm, start, len);
- } while ((mpnt = mpnt->vm_next_share) != NULL);
-}
-
-/*
- * Handle all mappings that got truncated by a "truncate()"
- * system call.
- *
- * NOTE! We have to be ready to update the memory sharing
- * between the file and the memory map for a potential last
- * incomplete page. Ugly, but necessary.
- */
-int vmtruncate(struct inode * inode, loff_t offset)
-{
- unsigned long pgoff;
- struct address_space *mapping = inode->i_mapping;
- unsigned long limit;
-
- if (inode->i_size < offset)
- goto do_expand;
- inode->i_size = offset;
- spin_lock(&mapping->i_shared_lock);
- if (!mapping->i_mmap && !mapping->i_mmap_shared)
- goto out_unlock;
-
- pgoff = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
- if (mapping->i_mmap != NULL)
- vmtruncate_list(mapping->i_mmap, pgoff);
- if (mapping->i_mmap_shared != NULL)
- vmtruncate_list(mapping->i_mmap_shared, pgoff);
-
-out_unlock:
- spin_unlock(&mapping->i_shared_lock);
- truncate_inode_pages(mapping, offset);
- goto out_truncate;
-
-do_expand:
- limit = current->rlim[RLIMIT_FSIZE].rlim_cur;
- if (limit != RLIM_INFINITY && offset > limit)
- goto out_sig;
- if (offset > inode->i_sb->s_maxbytes)
- goto out;
- inode->i_size = offset;
-
-out_truncate:
- if (inode->i_op && inode->i_op->truncate) {
- lock_kernel();
- inode->i_op->truncate(inode);
- unlock_kernel();
- }
- return 0;
-out_sig:
- send_sig(SIGXFSZ, current, 0);
-out:
- return -EFBIG;
-}
-
-/*
- * Primitive swap readahead code. We simply read an aligned block of
- * (1 << page_cluster) entries in the swap area. This method is chosen
- * because it doesn't cost us any seek time. We also make sure to queue
- * the 'original' request together with the readahead ones...
- */
-void swapin_readahead(swp_entry_t entry)
-{
- int i, num;
- struct page *new_page;
- unsigned long offset;
-
- /*
- * Get the number of handles we should do readahead io to.
- */
- num = valid_swaphandles(entry, &offset);
- for (i = 0; i < num; offset++, i++) {
- /* Ok, do the async read-ahead now */
- new_page = read_swap_cache_async(SWP_ENTRY(SWP_TYPE(entry), offset));
- if (!new_page)
- break;
- page_cache_release(new_page);
- }
- return;
-}
-
-/*
- * We hold the mm semaphore and the page_table_lock on entry and
- * should release the pagetable lock on exit..
- */
-static int do_swap_page(struct mm_struct * mm,
- struct vm_area_struct * vma, unsigned long address,
- pte_t * page_table, pte_t orig_pte, int write_access)
-{
- struct page *page;
- swp_entry_t entry = pte_to_swp_entry(orig_pte);
- pte_t pte;
- int ret = 1;
-
- spin_unlock(&mm->page_table_lock);
- page = lookup_swap_cache(entry);
- if (!page) {
- swapin_readahead(entry);
- page = read_swap_cache_async(entry);
- if (!page) {
- /*
- * Back out if somebody else faulted in this pte while
- * we released the page table lock.
- */
- int retval;
- spin_lock(&mm->page_table_lock);
- retval = pte_same(*page_table, orig_pte) ? -1 : 1;
- spin_unlock(&mm->page_table_lock);
- return retval;
- }
-
- /* Had to read the page from swap area: Major fault */
- ret = 2;
- }
-
- mark_page_accessed(page);
-
- lock_page(page);
-
- /*
- * Back out if somebody else faulted in this pte while we
- * released the page table lock.
- */
- spin_lock(&mm->page_table_lock);
- if (!pte_same(*page_table, orig_pte)) {
- spin_unlock(&mm->page_table_lock);
- unlock_page(page);
- page_cache_release(page);
- return 1;
- }
-
- /* The page isn't present yet, go ahead with the fault. */
-
- swap_free(entry);
- if (vm_swap_full())
- remove_exclusive_swap_page(page);
-
- mm->rss++;
- pte = mk_pte(page, vma->vm_page_prot);
- if (write_access && can_share_swap_page(page))
- pte = pte_mkdirty(pte_mkwrite(pte));
- unlock_page(page);
-
- flush_page_to_ram(page);
- flush_icache_page(vma, page);
-#ifdef CONFIG_XEN
- if ( likely(vma->vm_mm == current->mm) ) {
- XEN_flush_page_update_queue();
- HYPERVISOR_update_va_mapping(address>>PAGE_SHIFT, pte, 0);
- } else {
- set_pte(page_table, pte);
- XEN_flush_page_update_queue();
- }
-#else
- set_pte(page_table, pte);
-#endif
-
- /* No need to invalidate - it was non-present before */
- update_mmu_cache(vma, address, pte);
- spin_unlock(&mm->page_table_lock);
- return ret;
-}
-
-/*
- * We are called with the MM semaphore and page_table_lock
- * spinlock held to protect against concurrent faults in
- * multithreaded programs.
- */
-static int do_anonymous_page(struct mm_struct * mm, struct vm_area_struct * vma, pte_t *page_table, int write_access, unsigned long addr)
-{
- pte_t entry;
-
- /* Read-only mapping of ZERO_PAGE. */
- entry = pte_wrprotect(mk_pte(ZERO_PAGE(addr), vma->vm_page_prot));
-
- /* ..except if it's a write access */
- if (write_access) {
- struct page *page;
-
- /* Allocate our own private page. */
- spin_unlock(&mm->page_table_lock);
-
- page = alloc_page(GFP_HIGHUSER);
- if (!page)
- goto no_mem;
- clear_user_highpage(page, addr);
-
- spin_lock(&mm->page_table_lock);
- if (!pte_none(*page_table)) {
- page_cache_release(page);
- spin_unlock(&mm->page_table_lock);
- return 1;
- }
- mm->rss++;
- flush_page_to_ram(page);
- entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
- lru_cache_add(page);
- mark_page_accessed(page);
- }
-
-#ifdef CONFIG_XEN
- if ( likely(vma->vm_mm == current->mm) ) {
- XEN_flush_page_update_queue();
- HYPERVISOR_update_va_mapping(addr>>PAGE_SHIFT, entry, 0);
- } else {
- set_pte(page_table, entry);
- XEN_flush_page_update_queue();
- }
-#else
- set_pte(page_table, entry);
-#endif
-
- /* No need to invalidate - it was non-present before */
- update_mmu_cache(vma, addr, entry);
- spin_unlock(&mm->page_table_lock);
- return 1; /* Minor fault */
-
-no_mem:
- return -1;
-}
-
-/*
- * do_no_page() tries to create a new page mapping. It aggressively
- * tries to share with existing pages, but makes a separate copy if
- * the "write_access" parameter is true in order to avoid the next
- * page fault.
- *
- * As this is called only for pages that do not currently exist, we
- * do not need to flush old virtual caches or the TLB.
- *
- * This is called with the MM semaphore held and the page table
- * spinlock held. Exit with the spinlock released.
- */
-static int do_no_page(struct mm_struct * mm, struct vm_area_struct * vma,
- unsigned long address, int write_access, pte_t *page_table)
-{
- struct page * new_page;
- pte_t entry;
-
- if (!vma->vm_ops || !vma->vm_ops->nopage)
- return do_anonymous_page(mm, vma, page_table, write_access, address);
- spin_unlock(&mm->page_table_lock);
-
- new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0);
-
- if (new_page == NULL) /* no page was available -- SIGBUS */
- return 0;
- if (new_page == NOPAGE_OOM)
- return -1;
-
- /*
- * Should we do an early C-O-W break?
- */
- if (write_access && !(vma->vm_flags & VM_SHARED)) {
- struct page * page = alloc_page(GFP_HIGHUSER);
- if (!page) {
- page_cache_release(new_page);
- return -1;
- }
- copy_user_highpage(page, new_page, address);
- page_cache_release(new_page);
- lru_cache_add(page);
- new_page = page;
- }
-
- spin_lock(&mm->page_table_lock);
- /*
- * This silly early PAGE_DIRTY setting removes a race
- * due to the bad i386 page protection. But it's valid
- * for other architectures too.
- *
- * Note that if write_access is true, we either now have
- * an exclusive copy of the page, or this is a shared mapping,
- * so we can make it writable and dirty to avoid having to
- * handle that later.
- */
- /* Only go through if we didn't race with anybody else... */
- if (pte_none(*page_table)) {
- if (!PageReserved(new_page))
- ++mm->rss;
- flush_page_to_ram(new_page);
- flush_icache_page(vma, new_page);
- entry = mk_pte(new_page, vma->vm_page_prot);
- if (write_access)
- entry = pte_mkwrite(pte_mkdirty(entry));
-#ifdef CONFIG_XEN
- if ( likely(vma->vm_mm == current->mm) ) {
- XEN_flush_page_update_queue();
- HYPERVISOR_update_va_mapping(address>>PAGE_SHIFT, entry, 0);
- } else {
- set_pte(page_table, entry);
- XEN_flush_page_update_queue();
- }
-#else
- set_pte(page_table, entry);
-#endif
- } else {
- /* One of our sibling threads was faster, back out. */
- page_cache_release(new_page);
- spin_unlock(&mm->page_table_lock);
- return 1;
- }
-
- /* no need to invalidate: a not-present page shouldn't be cached */
- update_mmu_cache(vma, address, entry);
- spin_unlock(&mm->page_table_lock);
- return 2; /* Major fault */
-}
-
-/*
- * These routines also need to handle stuff like marking pages dirty
- * and/or accessed for architectures that don't do it in hardware (most
- * RISC architectures). The early dirtying is also good on the i386.
- *
- * There is also a hook called "update_mmu_cache()" that architectures
- * with external mmu caches can use to update those (ie the Sparc or
- * PowerPC hashed page tables that act as extended TLBs).
- *
- * Note the "page_table_lock". It is to protect against kswapd removing
- * pages from under us. Note that kswapd only ever _removes_ pages, never
- * adds them. As such, once we have noticed that the page is not present,
- * we can drop the lock early.
- *
- * The adding of pages is protected by the MM semaphore (which we hold),
- * so we don't need to worry about a page being suddenly been added into
- * our VM.
- *
- * We enter with the pagetable spinlock held, we are supposed to
- * release it when done.
- */
-static inline int handle_pte_fault(struct mm_struct *mm,
- struct vm_area_struct * vma, unsigned long address,
- int write_access, pte_t * pte)
-{
- pte_t entry;
-
- entry = *pte;
- if (!pte_present(entry)) {
- /*
- * If it truly wasn't present, we know that kswapd
- * and the PTE updates will not touch it later. So
- * drop the lock.
- */
- if (pte_none(entry))
- return do_no_page(mm, vma, address, write_access, pte);
- return do_swap_page(mm, vma, address, pte, entry, write_access);
- }
-
- if (write_access) {
- if (!pte_write(entry))
- return do_wp_page(mm, vma, address, pte, entry);
-
- entry = pte_mkdirty(entry);
- }
- entry = pte_mkyoung(entry);
- establish_pte(vma, address, pte, entry);
- spin_unlock(&mm->page_table_lock);
- return 1;
-}
-
-/*
- * By the time we get here, we already hold the mm semaphore
- */
-int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct * vma,
- unsigned long address, int write_access)
-{
- pgd_t *pgd;
- pmd_t *pmd;
-
- current->state = TASK_RUNNING;
- pgd = pgd_offset(mm, address);
-
- /*
- * We need the page table lock to synchronize with kswapd
- * and the SMP-safe atomic PTE updates.
- */
- spin_lock(&mm->page_table_lock);
- pmd = pmd_alloc(mm, pgd, address);
-
- if (pmd) {
- pte_t * pte = pte_alloc(mm, pmd, address);
- if (pte)
- return handle_pte_fault(mm, vma, address, write_access, pte);
- }
- spin_unlock(&mm->page_table_lock);
- return -1;
-}
-
-/*
- * Allocate page middle directory.
- *
- * We've already handled the fast-path in-line, and we own the
- * page table lock.
- *
- * On a two-level page table, this ends up actually being entirely
- * optimized away.
- */
-pmd_t *__pmd_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-{
- pmd_t *new;
-
- /* "fast" allocation can happen without dropping the lock.. */
- new = pmd_alloc_one_fast(mm, address);
- if (!new) {
- spin_unlock(&mm->page_table_lock);
- new = pmd_alloc_one(mm, address);
- spin_lock(&mm->page_table_lock);
- if (!new)
- return NULL;
-
- /*
- * Because we dropped the lock, we should re-check the
- * entry, as somebody else could have populated it..
- */
- if (!pgd_none(*pgd)) {
- pmd_free(new);
- check_pgt_cache();
- goto out;
- }
- }
- pgd_populate(mm, pgd, new);
-out:
- return pmd_offset(pgd, address);
-}
-
-/*
- * Allocate the page table directory.
- *
- * We've already handled the fast-path in-line, and we own the
- * page table lock.
- */
-pte_t *pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-{
- if (pmd_none(*pmd)) {
- pte_t *new;
-
- /* "fast" allocation can happen without dropping the lock.. */
- new = pte_alloc_one_fast(mm, address);
- if (!new) {
- XEN_flush_page_update_queue();
- spin_unlock(&mm->page_table_lock);
- new = pte_alloc_one(mm, address);
- spin_lock(&mm->page_table_lock);
- if (!new)
- return NULL;
-
- /*
- * Because we dropped the lock, we should re-check the
- * entry, as somebody else could have populated it..
- */
- if (!pmd_none(*pmd)) {
- pte_free(new);
- check_pgt_cache();
- goto out;
- }
- }
- pmd_populate(mm, pmd, new);
- }
-out:
- return pte_offset(pmd, address);
-}
-
-int make_pages_present(unsigned long addr, unsigned long end)
-{
- int ret, len, write;
- struct vm_area_struct * vma;
-
- vma = find_vma(current->mm, addr);
- write = (vma->vm_flags & VM_WRITE) != 0;
- if (addr >= end)
- BUG();
- if (end > vma->vm_end)
- BUG();
- len = (end+PAGE_SIZE-1)/PAGE_SIZE-addr/PAGE_SIZE;
- ret = get_user_pages(current, current->mm, addr,
- len, write, 0, NULL, NULL);
- return ret == len ? 0 : -1;
-}
-
-struct page * vmalloc_to_page(void * vmalloc_addr)
-{
- unsigned long addr = (unsigned long) vmalloc_addr;
- struct page *page = NULL;
- pmd_t *pmd;
- pte_t *pte;
- pgd_t *pgd;
-
- pgd = pgd_offset_k(addr);
- if (!pgd_none(*pgd)) {
- pmd = pmd_offset(pgd, addr);
- if (!pmd_none(*pmd)) {
- pte = pte_offset(pmd, addr);
- if (pte_present(*pte)) {
- page = pte_page(*pte);
- }
- }
- }
- return page;
-}
diff --git a/xenolinux-2.4.25-sparse/mm/mprotect.c b/xenolinux-2.4.25-sparse/mm/mprotect.c
deleted file mode 100644
index 9d2ed3c24c..0000000000
--- a/xenolinux-2.4.25-sparse/mm/mprotect.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * linux/mm/mprotect.c
- *
- * (C) Copyright 1994 Linus Torvalds
- */
-#include <linux/slab.h>
-#include <linux/smp_lock.h>
-#include <linux/shm.h>
-#include <linux/mman.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-#include <asm/pgtable.h>
-
-static inline void change_pte_range(pmd_t * pmd, unsigned long address,
- unsigned long size, pgprot_t newprot)
-{
- pte_t * pte;
- unsigned long end;
-
- if (pmd_none(*pmd))
- return;
- if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
- return;
- }
- pte = pte_offset(pmd, address);
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- if (pte_present(*pte)) {
- pte_t entry;
-
- /* Avoid an SMP race with hardware updated dirty/clean
- * bits by wiping the pte and then setting the new pte
- * into place.
- */
- entry = ptep_get_and_clear(pte);
- set_pte(pte, pte_modify(entry, newprot));
- }
- address += PAGE_SIZE;
- pte++;
- } while (address && (address < end));
-}
-
-static inline void change_pmd_range(pgd_t * pgd, unsigned long address,
- unsigned long size, pgprot_t newprot)
-{
- pmd_t * pmd;
- unsigned long end;
-
- if (pgd_none(*pgd))
- return;
- if (pgd_bad(*pgd)) {
- pgd_ERROR(*pgd);
- pgd_clear(pgd);
- return;
- }
- pmd = pmd_offset(pgd, address);
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- do {
- change_pte_range(pmd, address, end - address, newprot);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
-}
-
-static void change_protection(unsigned long start, unsigned long end, pgprot_t newprot)
-{
- pgd_t *dir;
- unsigned long beg = start;
-
- dir = pgd_offset(current->mm, start);
- flush_cache_range(current->mm, beg, end);
- if (start >= end)
- BUG();
- spin_lock(&current->mm->page_table_lock);
- do {
- change_pmd_range(dir, start, end - start, newprot);
- start = (start + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (start && (start < end));
- spin_unlock(&current->mm->page_table_lock);
- flush_tlb_range(current->mm, beg, end);
- return;
-}
-
-static inline int mprotect_fixup_all(struct vm_area_struct * vma, struct vm_area_struct ** pprev,
- int newflags, pgprot_t prot)
-{
- struct vm_area_struct * prev = *pprev;
- struct mm_struct * mm = vma->vm_mm;
-
- if (prev && prev->vm_end == vma->vm_start && can_vma_merge(prev, newflags) &&
- !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
- spin_lock(&mm->page_table_lock);
- prev->vm_end = vma->vm_end;
- __vma_unlink(mm, vma, prev);
- spin_unlock(&mm->page_table_lock);
-
- kmem_cache_free(vm_area_cachep, vma);
- mm->map_count--;
-
- return 0;
- }
-
- spin_lock(&mm->page_table_lock);
- vma->vm_flags = newflags;
- vma->vm_page_prot = prot;
- spin_unlock(&mm->page_table_lock);
-
- *pprev = vma;
-
- return 0;
-}
-
-static inline int mprotect_fixup_start(struct vm_area_struct * vma, struct vm_area_struct ** pprev,
- unsigned long end,
- int newflags, pgprot_t prot)
-{
- struct vm_area_struct * n, * prev = *pprev;
-
- *pprev = vma;
-
- if (prev && prev->vm_end == vma->vm_start && can_vma_merge(prev, newflags) &&
- !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
- spin_lock(&vma->vm_mm->page_table_lock);
- prev->vm_end = end;
- vma->vm_start = end;
- spin_unlock(&vma->vm_mm->page_table_lock);
-
- return 0;
- }
- n = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
- if (!n)
- return -ENOMEM;
- *n = *vma;
- n->vm_end = end;
- n->vm_flags = newflags;
- n->vm_raend = 0;
- n->vm_page_prot = prot;
- if (n->vm_file)
- get_file(n->vm_file);
- if (n->vm_ops && n->vm_ops->open)
- n->vm_ops->open(n);
- vma->vm_pgoff += (end - vma->vm_start) >> PAGE_SHIFT;
- lock_vma_mappings(vma);
- spin_lock(&vma->vm_mm->page_table_lock);
- vma->vm_start = end;
- __insert_vm_struct(current->mm, n);
- spin_unlock(&vma->vm_mm->page_table_lock);
- unlock_vma_mappings(vma);
-
- return 0;
-}
-
-static inline int mprotect_fixup_end(struct vm_area_struct * vma, struct vm_area_struct ** pprev,
- unsigned long start,
- int newflags, pgprot_t prot)
-{
- struct vm_area_struct * n;
-
- n = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
- if (!n)
- return -ENOMEM;
- *n = *vma;
- n->vm_start = start;
- n->vm_pgoff += (n->vm_start - vma->vm_start) >> PAGE_SHIFT;
- n->vm_flags = newflags;
- n->vm_raend = 0;
- n->vm_page_prot = prot;
- if (n->vm_file)
- get_file(n->vm_file);
- if (n->vm_ops && n->vm_ops->open)
- n->vm_ops->open(n);
- lock_vma_mappings(vma);
- spin_lock(&vma->vm_mm->page_table_lock);
- vma->vm_end = start;
- __insert_vm_struct(current->mm, n);
- spin_unlock(&vma->vm_mm->page_table_lock);
- unlock_vma_mappings(vma);
-
- *pprev = n;
-
- return 0;
-}
-
-static inline int mprotect_fixup_middle(struct vm_area_struct * vma, struct vm_area_struct ** pprev,
- unsigned long start, unsigned long end,
- int newflags, pgprot_t prot)
-{
- struct vm_area_struct * left, * right;
-
- left = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
- if (!left)
- return -ENOMEM;
- right = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
- if (!right) {
- kmem_cache_free(vm_area_cachep, left);
- return -ENOMEM;
- }
- *left = *vma;
- *right = *vma;
- left->vm_end = start;
- right->vm_start = end;
- right->vm_pgoff += (right->vm_start - left->vm_start) >> PAGE_SHIFT;
- left->vm_raend = 0;
- right->vm_raend = 0;
- if (vma->vm_file)
- atomic_add(2,&vma->vm_file->f_count);
- if (vma->vm_ops && vma->vm_ops->open) {
- vma->vm_ops->open(left);
- vma->vm_ops->open(right);
- }
- vma->vm_pgoff += (start - vma->vm_start) >> PAGE_SHIFT;
- vma->vm_raend = 0;
- vma->vm_page_prot = prot;
- lock_vma_mappings(vma);
- spin_lock(&vma->vm_mm->page_table_lock);
- vma->vm_start = start;
- vma->vm_end = end;
- vma->vm_flags = newflags;
- __insert_vm_struct(current->mm, left);
- __insert_vm_struct(current->mm, right);
- spin_unlock(&vma->vm_mm->page_table_lock);
- unlock_vma_mappings(vma);
-
- *pprev = right;
-
- return 0;
-}
-
-static int mprotect_fixup(struct vm_area_struct * vma, struct vm_area_struct ** pprev,
- unsigned long start, unsigned long end, unsigned int newflags)
-{
- pgprot_t newprot;
- int error;
-
- if (newflags == vma->vm_flags) {
- *pprev = vma;
- return 0;
- }
- newprot = protection_map[newflags & 0xf];
- if (start == vma->vm_start) {
- if (end == vma->vm_end)
- error = mprotect_fixup_all(vma, pprev, newflags, newprot);
- else
- error = mprotect_fixup_start(vma, pprev, end, newflags, newprot);
- } else if (end == vma->vm_end)
- error = mprotect_fixup_end(vma, pprev, start, newflags, newprot);
- else
- error = mprotect_fixup_middle(vma, pprev, start, end, newflags, newprot);
-
- if (error)
- return error;
-
- change_protection(start, end, newprot);
- return 0;
-}
-
-asmlinkage long sys_mprotect(unsigned long start, size_t len, unsigned long prot)
-{
- unsigned long nstart, end, tmp;
- struct vm_area_struct * vma, * next, * prev;
- int error = -EINVAL;
-
- if (start & ~PAGE_MASK)
- return -EINVAL;
- len = PAGE_ALIGN(len);
- end = start + len;
- if (end < start)
- return -ENOMEM;
- if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC))
- return -EINVAL;
- if (end == start)
- return 0;
-
- down_write(&current->mm->mmap_sem);
-
- vma = find_vma_prev(current->mm, start, &prev);
- error = -ENOMEM;
- if (!vma || vma->vm_start > start)
- goto out;
-
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- /* mprotect() unsupported for I/O mappings in Xenolinux. */
- error = -EINVAL;
- if (vma->vm_flags & VM_IO)
- goto out;
-#endif
-
- for (nstart = start ; ; ) {
- unsigned int newflags;
- int last = 0;
-
- /* Here we know that vma->vm_start <= nstart < vma->vm_end. */
-
- newflags = prot | (vma->vm_flags & ~(PROT_READ | PROT_WRITE | PROT_EXEC));
- if ((newflags & ~(newflags >> 4)) & 0xf) {
- error = -EACCES;
- goto out;
- }
-
- if (vma->vm_end > end) {
- error = mprotect_fixup(vma, &prev, nstart, end, newflags);
- goto out;
- }
- if (vma->vm_end == end)
- last = 1;
-
- tmp = vma->vm_end;
- next = vma->vm_next;
- error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
- if (error)
- goto out;
- if (last)
- break;
- nstart = tmp;
- vma = next;
- if (!vma || vma->vm_start != nstart) {
- error = -ENOMEM;
- goto out;
- }
- }
- if (next && prev->vm_end == next->vm_start && can_vma_merge(next, prev->vm_flags) &&
- !prev->vm_file && !(prev->vm_flags & VM_SHARED)) {
- spin_lock(&prev->vm_mm->page_table_lock);
- prev->vm_end = next->vm_end;
- __vma_unlink(prev->vm_mm, next, prev);
- spin_unlock(&prev->vm_mm->page_table_lock);
-
- kmem_cache_free(vm_area_cachep, next);
- prev->vm_mm->map_count--;
- }
-out:
- up_write(&current->mm->mmap_sem);
- return error;
-}
diff --git a/xenolinux-2.4.25-sparse/mm/mremap.c b/xenolinux-2.4.25-sparse/mm/mremap.c
deleted file mode 100644
index 517854c86c..0000000000
--- a/xenolinux-2.4.25-sparse/mm/mremap.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * linux/mm/remap.c
- *
- * (C) Copyright 1996 Linus Torvalds
- */
-
-#include <linux/slab.h>
-#include <linux/smp_lock.h>
-#include <linux/shm.h>
-#include <linux/mman.h>
-#include <linux/swap.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-
-extern int vm_enough_memory(long pages);
-
-static inline pte_t *get_one_pte(struct mm_struct *mm, unsigned long addr)
-{
- pgd_t * pgd;
- pmd_t * pmd;
- pte_t * pte = NULL;
-
- pgd = pgd_offset(mm, addr);
- if (pgd_none(*pgd))
- goto end;
- if (pgd_bad(*pgd)) {
- pgd_ERROR(*pgd);
- pgd_clear(pgd);
- goto end;
- }
-
- pmd = pmd_offset(pgd, addr);
- if (pmd_none(*pmd))
- goto end;
- if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
- goto end;
- }
-
- pte = pte_offset(pmd, addr);
- if (pte_none(*pte))
- pte = NULL;
-end:
- return pte;
-}
-
-static inline pte_t *alloc_one_pte(struct mm_struct *mm, unsigned long addr)
-{
- pmd_t * pmd;
- pte_t * pte = NULL;
-
- pmd = pmd_alloc(mm, pgd_offset(mm, addr), addr);
- if (pmd)
- pte = pte_alloc(mm, pmd, addr);
- return pte;
-}
-
-static inline int copy_one_pte(struct mm_struct *mm, pte_t * src, pte_t * dst)
-{
- int error = 0;
- pte_t pte;
-
- if (!pte_none(*src)) {
- pte = ptep_get_and_clear(src);
- if (!dst) {
- /* No dest? We must put it back. */
- dst = src;
- error++;
- }
- set_pte(dst, pte);
- }
- return error;
-}
-
-static int move_one_page(struct mm_struct *mm, unsigned long old_addr, unsigned long new_addr)
-{
- int error = 0;
- pte_t * src;
-
- spin_lock(&mm->page_table_lock);
- src = get_one_pte(mm, old_addr);
- if (src)
- error = copy_one_pte(mm, src, alloc_one_pte(mm, new_addr));
- spin_unlock(&mm->page_table_lock);
- return error;
-}
-
-static int move_page_tables(struct mm_struct * mm,
- unsigned long new_addr, unsigned long old_addr, unsigned long len)
-{
- unsigned long offset = len;
-
- flush_cache_range(mm, old_addr, old_addr + len);
-
- /*
- * This is not the clever way to do this, but we're taking the
- * easy way out on the assumption that most remappings will be
- * only a few pages.. This also makes error recovery easier.
- */
- while (offset) {
- offset -= PAGE_SIZE;
- if (move_one_page(mm, old_addr + offset, new_addr + offset))
- goto oops_we_failed;
- }
- flush_tlb_range(mm, old_addr, old_addr + len);
- return 0;
-
- /*
- * Ok, the move failed because we didn't have enough pages for
- * the new page table tree. This is unlikely, but we have to
- * take the possibility into account. In that case we just move
- * all the pages back (this will work, because we still have
- * the old page tables)
- */
-oops_we_failed:
- XEN_flush_page_update_queue();
- flush_cache_range(mm, new_addr, new_addr + len);
- while ((offset += PAGE_SIZE) < len)
- move_one_page(mm, new_addr + offset, old_addr + offset);
- XEN_flush_page_update_queue();
- zap_page_range(mm, new_addr, len);
- return -1;
-}
-
-static inline unsigned long move_vma(struct vm_area_struct * vma,
- unsigned long addr, unsigned long old_len, unsigned long new_len,
- unsigned long new_addr)
-{
- struct mm_struct * mm = vma->vm_mm;
- struct vm_area_struct * new_vma, * next, * prev;
- int allocated_vma;
-
- new_vma = NULL;
- next = find_vma_prev(mm, new_addr, &prev);
- if (next) {
- if (prev && prev->vm_end == new_addr &&
- can_vma_merge(prev, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
- spin_lock(&mm->page_table_lock);
- prev->vm_end = new_addr + new_len;
- spin_unlock(&mm->page_table_lock);
- new_vma = prev;
- if (next != prev->vm_next)
- BUG();
- if (prev->vm_end == next->vm_start && can_vma_merge(next, prev->vm_flags)) {
- spin_lock(&mm->page_table_lock);
- prev->vm_end = next->vm_end;
- __vma_unlink(mm, next, prev);
- spin_unlock(&mm->page_table_lock);
-
- mm->map_count--;
- kmem_cache_free(vm_area_cachep, next);
- }
- } else if (next->vm_start == new_addr + new_len &&
- can_vma_merge(next, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
- spin_lock(&mm->page_table_lock);
- next->vm_start = new_addr;
- spin_unlock(&mm->page_table_lock);
- new_vma = next;
- }
- } else {
- prev = find_vma(mm, new_addr-1);
- if (prev && prev->vm_end == new_addr &&
- can_vma_merge(prev, vma->vm_flags) && !vma->vm_file && !(vma->vm_flags & VM_SHARED)) {
- spin_lock(&mm->page_table_lock);
- prev->vm_end = new_addr + new_len;
- spin_unlock(&mm->page_table_lock);
- new_vma = prev;
- }
- }
-
- allocated_vma = 0;
- if (!new_vma) {
- new_vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
- if (!new_vma)
- goto out;
- allocated_vma = 1;
- }
-
- if (!move_page_tables(current->mm, new_addr, addr, old_len)) {
- unsigned long vm_locked = vma->vm_flags & VM_LOCKED;
-
- if (allocated_vma) {
- *new_vma = *vma;
- new_vma->vm_start = new_addr;
- new_vma->vm_end = new_addr+new_len;
- new_vma->vm_pgoff += (addr-vma->vm_start) >> PAGE_SHIFT;
- new_vma->vm_raend = 0;
- if (new_vma->vm_file)
- get_file(new_vma->vm_file);
- if (new_vma->vm_ops && new_vma->vm_ops->open)
- new_vma->vm_ops->open(new_vma);
- insert_vm_struct(current->mm, new_vma);
- }
-
- do_munmap(current->mm, addr, old_len);
-
- current->mm->total_vm += new_len >> PAGE_SHIFT;
- if (vm_locked) {
- current->mm->locked_vm += new_len >> PAGE_SHIFT;
- if (new_len > old_len)
- make_pages_present(new_addr + old_len,
- new_addr + new_len);
- }
- return new_addr;
- }
- if (allocated_vma)
- kmem_cache_free(vm_area_cachep, new_vma);
- out:
- return -ENOMEM;
-}
-
-/*
- * Expand (or shrink) an existing mapping, potentially moving it at the
- * same time (controlled by the MREMAP_MAYMOVE flag and available VM space)
- *
- * MREMAP_FIXED option added 5-Dec-1999 by Benjamin LaHaise
- * This option implies MREMAP_MAYMOVE.
- */
-unsigned long do_mremap(unsigned long addr,
- unsigned long old_len, unsigned long new_len,
- unsigned long flags, unsigned long new_addr)
-{
- struct vm_area_struct *vma;
- unsigned long ret = -EINVAL;
-
- if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
- goto out;
-
- if (addr & ~PAGE_MASK)
- goto out;
-
- old_len = PAGE_ALIGN(old_len);
- new_len = PAGE_ALIGN(new_len);
-
- /* new_addr is only valid if MREMAP_FIXED is specified */
- if (flags & MREMAP_FIXED) {
- if (new_addr & ~PAGE_MASK)
- goto out;
- if (!(flags & MREMAP_MAYMOVE))
- goto out;
-
- if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
- goto out;
- /*
- * Allow new_len == 0 only if new_addr == addr
- * to preserve truncation in place (that was working
- * safe and some app may depend on it).
- */
- if (unlikely(!new_len && new_addr != addr))
- goto out;
-
- /* Check if the location we're moving into overlaps the
- * old location at all, and fail if it does.
- */
- if ((new_addr <= addr) && (new_addr+new_len) > addr)
- goto out;
-
- if ((addr <= new_addr) && (addr+old_len) > new_addr)
- goto out;
-
- ret = do_munmap(current->mm, new_addr, new_len);
- if (ret && new_len)
- goto out;
- }
-
- /*
- * Always allow a shrinking remap: that just unmaps
- * the unnecessary pages..
- */
- if (old_len >= new_len) {
- ret = do_munmap(current->mm, addr+new_len, old_len - new_len);
- if (ret && old_len != new_len)
- goto out;
- ret = addr;
- if (!(flags & MREMAP_FIXED) || (new_addr == addr))
- goto out;
- }
-
- /*
- * Ok, we need to grow.. or relocate.
- */
- ret = -EFAULT;
- vma = find_vma(current->mm, addr);
- if (!vma || vma->vm_start > addr)
- goto out;
- /* We can't remap across vm area boundaries */
- if (old_len > vma->vm_end - addr)
- goto out;
- if (vma->vm_flags & VM_DONTEXPAND) {
- if (new_len > old_len)
- goto out;
- }
- if (vma->vm_flags & VM_LOCKED) {
- unsigned long locked = current->mm->locked_vm << PAGE_SHIFT;
- locked += new_len - old_len;
- ret = -EAGAIN;
- if (locked > current->rlim[RLIMIT_MEMLOCK].rlim_cur)
- goto out;
- }
- ret = -ENOMEM;
- if ((current->mm->total_vm << PAGE_SHIFT) + (new_len - old_len)
- > current->rlim[RLIMIT_AS].rlim_cur)
- goto out;
- /* Private writable mapping? Check memory availability.. */
- if ((vma->vm_flags & (VM_SHARED | VM_WRITE)) == VM_WRITE &&
- !(flags & MAP_NORESERVE) &&
- !vm_enough_memory((new_len - old_len) >> PAGE_SHIFT))
- goto out;
-
-#if defined(CONFIG_XEN_PRIVILEGED_GUEST)
- /* mremap() unsupported for I/O mappings in Xenolinux. */
- ret = -EINVAL;
- if (vma->vm_flags & VM_IO)
- goto out;
-#endif
-
- /* old_len exactly to the end of the area..
- * And we're not relocating the area.
- */
- if (old_len == vma->vm_end - addr &&
- !((flags & MREMAP_FIXED) && (addr != new_addr)) &&
- (old_len != new_len || !(flags & MREMAP_MAYMOVE))) {
- unsigned long max_addr = TASK_SIZE;
- if (vma->vm_next)
- max_addr = vma->vm_next->vm_start;
- /* can we just expand the current mapping? */
- if (max_addr - addr >= new_len) {
- int pages = (new_len - old_len) >> PAGE_SHIFT;
- spin_lock(&vma->vm_mm->page_table_lock);
- vma->vm_end = addr + new_len;
- spin_unlock(&vma->vm_mm->page_table_lock);
- current->mm->total_vm += pages;
- if (vma->vm_flags & VM_LOCKED) {
- current->mm->locked_vm += pages;
- make_pages_present(addr + old_len,
- addr + new_len);
- }
- ret = addr;
- goto out;
- }
- }
-
- /*
- * We weren't able to just expand or shrink the area,
- * we need to create a new one and move it..
- */
- ret = -ENOMEM;
- if (flags & MREMAP_MAYMOVE) {
- if (!(flags & MREMAP_FIXED)) {
- unsigned long map_flags = 0;
- if (vma->vm_flags & VM_SHARED)
- map_flags |= MAP_SHARED;
-
- new_addr = get_unmapped_area(vma->vm_file, 0, new_len, vma->vm_pgoff, map_flags);
- ret = new_addr;
- if (new_addr & ~PAGE_MASK)
- goto out;
- }
- ret = move_vma(vma, addr, old_len, new_len, new_addr);
- }
-out:
- return ret;
-}
-
-asmlinkage unsigned long sys_mremap(unsigned long addr,
- unsigned long old_len, unsigned long new_len,
- unsigned long flags, unsigned long new_addr)
-{
- unsigned long ret;
-
- down_write(&current->mm->mmap_sem);
- ret = do_mremap(addr, old_len, new_len, flags, new_addr);
- up_write(&current->mm->mmap_sem);
- return ret;
-}
diff --git a/xenolinux-2.4.25-sparse/mm/swapfile.c b/xenolinux-2.4.25-sparse/mm/swapfile.c
deleted file mode 100644
index 8345e27146..0000000000
--- a/xenolinux-2.4.25-sparse/mm/swapfile.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/*
- * linux/mm/swapfile.c
- *
- * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
- * Swap reorganised 29.12.95, Stephen Tweedie
- */
-
-#include <linux/slab.h>
-#include <linux/smp_lock.h>
-#include <linux/kernel_stat.h>
-#include <linux/swap.h>
-#include <linux/swapctl.h>
-#include <linux/blkdev.h> /* for blk_size */
-#include <linux/vmalloc.h>
-#include <linux/pagemap.h>
-#include <linux/shm.h>
-
-#include <asm/pgtable.h>
-
-spinlock_t swaplock = SPIN_LOCK_UNLOCKED;
-unsigned int nr_swapfiles;
-int total_swap_pages;
-static int swap_overflow;
-
-static const char Bad_file[] = "Bad swap file entry ";
-static const char Unused_file[] = "Unused swap file entry ";
-static const char Bad_offset[] = "Bad swap offset entry ";
-static const char Unused_offset[] = "Unused swap offset entry ";
-
-struct swap_list_t swap_list = {-1, -1};
-
-struct swap_info_struct swap_info[MAX_SWAPFILES];
-
-#define SWAPFILE_CLUSTER 256
-
-static inline int scan_swap_map(struct swap_info_struct *si)
-{
- unsigned long offset;
- /*
- * We try to cluster swap pages by allocating them
- * sequentially in swap. Once we've allocated
- * SWAPFILE_CLUSTER pages this way, however, we resort to
- * first-free allocation, starting a new cluster. This
- * prevents us from scattering swap pages all over the entire
- * swap partition, so that we reduce overall disk seek times
- * between swap pages. -- sct */
- if (si->cluster_nr) {
- while (si->cluster_next <= si->highest_bit) {
- offset = si->cluster_next++;
- if (si->swap_map[offset])
- continue;
- si->cluster_nr--;
- goto got_page;
- }
- }
- si->cluster_nr = SWAPFILE_CLUSTER;
-
- /* try to find an empty (even not aligned) cluster. */
- offset = si->lowest_bit;
- check_next_cluster:
- if (offset+SWAPFILE_CLUSTER-1 <= si->highest_bit)
- {
- int nr;
- for (nr = offset; nr < offset+SWAPFILE_CLUSTER; nr++)
- if (si->swap_map[nr])
- {
- offset = nr+1;
- goto check_next_cluster;
- }
- /* We found a completly empty cluster, so start
- * using it.
- */
- goto got_page;
- }
- /* No luck, so now go finegrined as usual. -Andrea */
- for (offset = si->lowest_bit; offset <= si->highest_bit ; offset++) {
- if (si->swap_map[offset])
- continue;
- si->lowest_bit = offset+1;
- got_page:
- if (offset == si->lowest_bit)
- si->lowest_bit++;
- if (offset == si->highest_bit)
- si->highest_bit--;
- if (si->lowest_bit > si->highest_bit) {
- si->lowest_bit = si->max;
- si->highest_bit = 0;
- }
- si->swap_map[offset] = 1;
- nr_swap_pages--;
- si->cluster_next = offset+1;
- return offset;
- }
- si->lowest_bit = si->max;
- si->highest_bit = 0;
- return 0;
-}
-
-swp_entry_t get_swap_page(void)
-{
- struct swap_info_struct * p;
- unsigned long offset;
- swp_entry_t entry;
- int type, wrapped = 0;
-
- entry.val = 0; /* Out of memory */
- swap_list_lock();
- type = swap_list.next;
- if (type < 0)
- goto out;
- if (nr_swap_pages <= 0)
- goto out;
-
- while (1) {
- p = &swap_info[type];
- if ((p->flags & SWP_WRITEOK) == SWP_WRITEOK) {
- swap_device_lock(p);
- offset = scan_swap_map(p);
- swap_device_unlock(p);
- if (offset) {
- entry = SWP_ENTRY(type,offset);
- type = swap_info[type].next;
- if (type < 0 ||
- p->prio != swap_info[type].prio) {
- swap_list.next = swap_list.head;
- } else {
- swap_list.next = type;
- }
- goto out;
- }
- }
- type = p->next;
- if (!wrapped) {
- if (type < 0 || p->prio != swap_info[type].prio) {
- type = swap_list.head;
- wrapped = 1;
- }
- } else
- if (type < 0)
- goto out; /* out of swap space */
- }
-out:
- swap_list_unlock();
- return entry;
-}
-
-static struct swap_info_struct * swap_info_get(swp_entry_t entry)
-{
- struct swap_info_struct * p;
- unsigned long offset, type;
-
- if (!entry.val)
- goto out;
- type = SWP_TYPE(entry);
- if (type >= nr_swapfiles)
- goto bad_nofile;
- p = & swap_info[type];
- if (!(p->flags & SWP_USED))
- goto bad_device;
- offset = SWP_OFFSET(entry);
- if (offset >= p->max)
- goto bad_offset;
- if (!p->swap_map[offset])
- goto bad_free;
- swap_list_lock();
- if (p->prio > swap_info[swap_list.next].prio)
- swap_list.next = type;
- swap_device_lock(p);
- return p;
-
-bad_free:
- printk(KERN_ERR "swap_free: %s%08lx\n", Unused_offset, entry.val);
- goto out;
-bad_offset:
- printk(KERN_ERR "swap_free: %s%08lx\n", Bad_offset, entry.val);
- goto out;
-bad_device:
- printk(KERN_ERR "swap_free: %s%08lx\n", Unused_file, entry.val);
- goto out;
-bad_nofile:
- printk(KERN_ERR "swap_free: %s%08lx\n", Bad_file, entry.val);
-out:
- return NULL;
-}
-
-static void swap_info_put(struct swap_info_struct * p)
-{
- swap_device_unlock(p);
- swap_list_unlock();
-}
-
-static int swap_entry_free(struct swap_info_struct *p, unsigned long offset)
-{
- int count = p->swap_map[offset];
-
- if (count < SWAP_MAP_MAX) {
- count--;
- p->swap_map[offset] = count;
- if (!count) {
- if (offset < p->lowest_bit)
- p->lowest_bit = offset;
- if (offset > p->highest_bit)
- p->highest_bit = offset;
- nr_swap_pages++;
- }
- }
- return count;
-}
-
-/*
- * Caller has made sure that the swapdevice corresponding to entry
- * is still around or has not been recycled.
- */
-void swap_free(swp_entry_t entry)
-{
- struct swap_info_struct * p;
-
- p = swap_info_get(entry);
- if (p) {
- swap_entry_free(p, SWP_OFFSET(entry));
- swap_info_put(p);
- }
-}
-
-/*
- * Check if we're the only user of a swap page,
- * when the page is locked.
- */
-static int exclusive_swap_page(struct page *page)
-{
- int retval = 0;
- struct swap_info_struct * p;
- swp_entry_t entry;
-
- entry.val = page->index;
- p = swap_info_get(entry);
- if (p) {
- /* Is the only swap cache user the cache itself? */
- if (p->swap_map[SWP_OFFSET(entry)] == 1) {
- /* Recheck the page count with the pagecache lock held.. */
- spin_lock(&pagecache_lock);
- if (page_count(page) - !!page->buffers == 2)
- retval = 1;
- spin_unlock(&pagecache_lock);
- }
- swap_info_put(p);
- }
- return retval;
-}
-
-/*
- * We can use this swap cache entry directly
- * if there are no other references to it.
- *
- * Here "exclusive_swap_page()" does the real
- * work, but we opportunistically check whether
- * we need to get all the locks first..
- */
-int can_share_swap_page(struct page *page)
-{
- int retval = 0;
-
- if (!PageLocked(page))
- BUG();
- switch (page_count(page)) {
- case 3:
- if (!page->buffers)
- break;
- /* Fallthrough */
- case 2:
- if (!PageSwapCache(page))
- break;
- retval = exclusive_swap_page(page);
- break;
- case 1:
- if (PageReserved(page))
- break;
- retval = 1;
- }
- return retval;
-}
-
-/*
- * Work out if there are any other processes sharing this
- * swap cache page. Free it if you can. Return success.
- */
-int remove_exclusive_swap_page(struct page *page)
-{
- int retval;
- struct swap_info_struct * p;
- swp_entry_t entry;
-
- if (!PageLocked(page))
- BUG();
- if (!PageSwapCache(page))
- return 0;
- if (page_count(page) - !!page->buffers != 2) /* 2: us + cache */
- return 0;
-
- entry.val = page->index;
- p = swap_info_get(entry);
- if (!p)
- return 0;
-
- /* Is the only swap cache user the cache itself? */
- retval = 0;
- if (p->swap_map[SWP_OFFSET(entry)] == 1) {
- /* Recheck the page count with the pagecache lock held.. */
- spin_lock(&pagecache_lock);
- if (page_count(page) - !!page->buffers == 2) {
- __delete_from_swap_cache(page);
- SetPageDirty(page);
- retval = 1;
- }
- spin_unlock(&pagecache_lock);
- }
- swap_info_put(p);
-
- if (retval) {
- block_flushpage(page, 0);
- swap_free(entry);
- page_cache_release(page);
- }
-
- return retval;
-}
-
-/*
- * Free the swap entry like above, but also try to
- * free the page cache entry if it is the last user.
- */
-void free_swap_and_cache(swp_entry_t entry)
-{
- struct swap_info_struct * p;
- struct page *page = NULL;
-
- p = swap_info_get(entry);
- if (p) {
- if (swap_entry_free(p, SWP_OFFSET(entry)) == 1)
- page = find_trylock_page(&swapper_space, entry.val);
- swap_info_put(p);
- }
- if (page) {
- page_cache_get(page);
- /* Only cache user (+us), or swap space full? Free it! */
- if (page_count(page) - !!page->buffers == 2 || vm_swap_full()) {
- delete_from_swap_cache(page);
- SetPageDirty(page);
- }
- UnlockPage(page);
- page_cache_release(page);
- }
-}
-
-/*
- * The swap entry has been read in advance, and we return 1 to indicate
- * that the page has been used or is no longer needed.
- *
- * Always set the resulting pte to be nowrite (the same as COW pages
- * after one process has exited). We don't know just how many PTEs will
- * share this swap entry, so be cautious and let do_wp_page work out
- * what to do if a write is requested later.
- */
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pte(struct vm_area_struct * vma, unsigned long address,
- pte_t *dir, swp_entry_t entry, struct page* page)
-{
- pte_t pte = *dir;
-
- if (likely(pte_to_swp_entry(pte).val != entry.val))
- return;
- if (unlikely(pte_none(pte) || pte_present(pte)))
- return;
- get_page(page);
- set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot)));
- swap_free(entry);
- ++vma->vm_mm->rss;
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pmd(struct vm_area_struct * vma, pmd_t *dir,
- unsigned long address, unsigned long size, unsigned long offset,
- swp_entry_t entry, struct page* page)
-{
- pte_t * pte;
- unsigned long end;
-
- if (pmd_none(*dir))
- return;
- if (pmd_bad(*dir)) {
- pmd_ERROR(*dir);
- pmd_clear(dir);
- return;
- }
- pte = pte_offset(dir, address);
- offset += address & PMD_MASK;
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- unuse_pte(vma, offset+address-vma->vm_start, pte, entry, page);
- address += PAGE_SIZE;
- pte++;
- } while (address && (address < end));
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static inline void unuse_pgd(struct vm_area_struct * vma, pgd_t *dir,
- unsigned long address, unsigned long size,
- swp_entry_t entry, struct page* page)
-{
- pmd_t * pmd;
- unsigned long offset, end;
-
- if (pgd_none(*dir))
- return;
- if (pgd_bad(*dir)) {
- pgd_ERROR(*dir);
- pgd_clear(dir);
- return;
- }
- pmd = pmd_offset(dir, address);
- offset = address & PGDIR_MASK;
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- if (address >= end)
- BUG();
- do {
- unuse_pmd(vma, pmd, address, end - address, offset, entry,
- page);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
-}
-
-/* mmlist_lock and vma->vm_mm->page_table_lock are held */
-static void unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir,
- swp_entry_t entry, struct page* page)
-{
- unsigned long start = vma->vm_start, end = vma->vm_end;
-
- if (start >= end)
- BUG();
- do {
- unuse_pgd(vma, pgdir, start, end - start, entry, page);
- start = (start + PGDIR_SIZE) & PGDIR_MASK;
- pgdir++;
- } while (start && (start < end));
-}
-
-static void unuse_process(struct mm_struct * mm,
- swp_entry_t entry, struct page* page)
-{
- struct vm_area_struct* vma;
-
- /*
- * Go through process' page directory.
- */
- spin_lock(&mm->page_table_lock);
- for (vma = mm->mmap; vma; vma = vma->vm_next) {
- pgd_t * pgd = pgd_offset(mm, vma->vm_start);
- unuse_vma(vma, pgd, entry, page);
- }
- XEN_flush_page_update_queue();
- spin_unlock(&mm->page_table_lock);
- return;
-}
-
-/*
- * Scan swap_map from current position to next entry still in use.
- * Recycle to start on reaching the end, returning 0 when empty.
- */
-static int find_next_to_unuse(struct swap_info_struct *si, int prev)
-{
- int max = si->max;
- int i = prev;
- int count;
-
- /*
- * No need for swap_device_lock(si) here: we're just looking
- * for whether an entry is in use, not modifying it; false
- * hits are okay, and sys_swapoff() has already prevented new
- * allocations from this area (while holding swap_list_lock()).
- */
- for (;;) {
- if (++i >= max) {
- if (!prev) {
- i = 0;
- break;
- }
- /*
- * No entries in use at top of swap_map,
- * loop back to start and recheck there.
- */
- max = prev + 1;
- prev = 0;
- i = 1;
- }
- count = si->swap_map[i];
- if (count && count != SWAP_MAP_BAD)
- break;
- }
- return i;
-}
-
-/*
- * We completely avoid races by reading each swap page in advance,
- * and then search for the process using it. All the necessary
- * page table adjustments can then be made atomically.
- */
-static int try_to_unuse(unsigned int type)
-{
- struct swap_info_struct * si = &swap_info[type];
- struct mm_struct *start_mm;
- unsigned short *swap_map;
- unsigned short swcount;
- struct page *page;
- swp_entry_t entry;
- int i = 0;
- int retval = 0;
- int reset_overflow = 0;
- int shmem;
-
- /*
- * When searching mms for an entry, a good strategy is to
- * start at the first mm we freed the previous entry from
- * (though actually we don't notice whether we or coincidence
- * freed the entry). Initialize this start_mm with a hold.
- *
- * A simpler strategy would be to start at the last mm we
- * freed the previous entry from; but that would take less
- * advantage of mmlist ordering (now preserved by swap_out()),
- * which clusters forked address spaces together, most recent
- * child immediately after parent. If we race with dup_mmap(),
- * we very much want to resolve parent before child, otherwise
- * we may miss some entries: using last mm would invert that.
- */
- start_mm = &init_mm;
- atomic_inc(&init_mm.mm_users);
-
- /*
- * Keep on scanning until all entries have gone. Usually,
- * one pass through swap_map is enough, but not necessarily:
- * mmput() removes mm from mmlist before exit_mmap() and its
- * zap_page_range(). That's not too bad, those entries are
- * on their way out, and handled faster there than here.
- * do_munmap() behaves similarly, taking the range out of mm's
- * vma list before zap_page_range(). But unfortunately, when
- * unmapping a part of a vma, it takes the whole out first,
- * then reinserts what's left after (might even reschedule if
- * open() method called) - so swap entries may be invisible
- * to swapoff for a while, then reappear - but that is rare.
- */
- while ((i = find_next_to_unuse(si, i))) {
- /*
- * Get a page for the entry, using the existing swap
- * cache page if there is one. Otherwise, get a clean
- * page and read the swap into it.
- */
- swap_map = &si->swap_map[i];
- entry = SWP_ENTRY(type, i);
- page = read_swap_cache_async(entry);
- if (!page) {
- /*
- * Either swap_duplicate() failed because entry
- * has been freed independently, and will not be
- * reused since sys_swapoff() already disabled
- * allocation from here, or alloc_page() failed.
- */
- if (!*swap_map)
- continue;
- retval = -ENOMEM;
- break;
- }
-
- /*
- * Don't hold on to start_mm if it looks like exiting.
- */
- if (atomic_read(&start_mm->mm_users) == 1) {
- mmput(start_mm);
- start_mm = &init_mm;
- atomic_inc(&init_mm.mm_users);
- }
-
- /*
- * Wait for and lock page. When do_swap_page races with
- * try_to_unuse, do_swap_page can handle the fault much
- * faster than try_to_unuse can locate the entry. This
- * apparently redundant "wait_on_page" lets try_to_unuse
- * defer to do_swap_page in such a case - in some tests,
- * do_swap_page and try_to_unuse repeatedly compete.
- */
- wait_on_page(page);
- lock_page(page);
-
- /*
- * Remove all references to entry, without blocking.
- * Whenever we reach init_mm, there's no address space
- * to search, but use it as a reminder to search shmem.
- */
- shmem = 0;
- swcount = *swap_map;
- if (swcount > 1) {
- flush_page_to_ram(page);
- if (start_mm == &init_mm)
- shmem = shmem_unuse(entry, page);
- else
- unuse_process(start_mm, entry, page);
- }
- if (*swap_map > 1) {
- int set_start_mm = (*swap_map >= swcount);
- struct list_head *p = &start_mm->mmlist;
- struct mm_struct *new_start_mm = start_mm;
- struct mm_struct *mm;
-
- spin_lock(&mmlist_lock);
- while (*swap_map > 1 &&
- (p = p->next) != &start_mm->mmlist) {
- mm = list_entry(p, struct mm_struct, mmlist);
- swcount = *swap_map;
- if (mm == &init_mm) {
- set_start_mm = 1;
- spin_unlock(&mmlist_lock);
- shmem = shmem_unuse(entry, page);
- spin_lock(&mmlist_lock);
- } else
- unuse_process(mm, entry, page);
- if (set_start_mm && *swap_map < swcount) {
- new_start_mm = mm;
- set_start_mm = 0;
- }
- }
- atomic_inc(&new_start_mm->mm_users);
- spin_unlock(&mmlist_lock);
- mmput(start_mm);
- start_mm = new_start_mm;
- }
-
- /*
- * How could swap count reach 0x7fff when the maximum
- * pid is 0x7fff, and there's no way to repeat a swap
- * page within an mm (except in shmem, where it's the
- * shared object which takes the reference count)?
- * We believe SWAP_MAP_MAX cannot occur in Linux 2.4.
- *
- * If that's wrong, then we should worry more about
- * exit_mmap() and do_munmap() cases described above:
- * we might be resetting SWAP_MAP_MAX too early here.
- * We know "Undead"s can happen, they're okay, so don't
- * report them; but do report if we reset SWAP_MAP_MAX.
- */
- if (*swap_map == SWAP_MAP_MAX) {
- swap_list_lock();
- swap_device_lock(si);
- nr_swap_pages++;
- *swap_map = 1;
- swap_device_unlock(si);
- swap_list_unlock();
- reset_overflow = 1;
- }
-
- /*
- * If a reference remains (rare), we would like to leave
- * the page in the swap cache; but try_to_swap_out could
- * then re-duplicate the entry once we drop page lock,
- * so we might loop indefinitely; also, that page could
- * not be swapped out to other storage meanwhile. So:
- * delete from cache even if there's another reference,
- * after ensuring that the data has been saved to disk -
- * since if the reference remains (rarer), it will be
- * read from disk into another page. Splitting into two
- * pages would be incorrect if swap supported "shared
- * private" pages, but they are handled by tmpfs files.
- *
- * Note shmem_unuse already deleted swappage from cache,
- * unless corresponding filepage found already in cache:
- * in which case it left swappage in cache, lowered its
- * swap count to pass quickly through the loops above,
- * and now we must reincrement count to try again later.
- */
- if ((*swap_map > 1) && PageDirty(page) && PageSwapCache(page)) {
- rw_swap_page(WRITE, page);
- lock_page(page);
- }
- if (PageSwapCache(page)) {
- if (shmem)
- swap_duplicate(entry);
- else
- delete_from_swap_cache(page);
- }
-
- /*
- * So we could skip searching mms once swap count went
- * to 1, we did not mark any present ptes as dirty: must
- * mark page dirty so try_to_swap_out will preserve it.
- */
- SetPageDirty(page);
- UnlockPage(page);
- page_cache_release(page);
-
- /*
- * Make sure that we aren't completely killing
- * interactive performance. Interruptible check on
- * signal_pending() would be nice, but changes the spec?
- */
- if (current->need_resched)
- schedule();
- }
-
- mmput(start_mm);
- if (reset_overflow) {
- printk(KERN_WARNING "swapoff: cleared swap entry overflow\n");
- swap_overflow = 0;
- }
- return retval;
-}
-
-asmlinkage long sys_swapoff(const char * specialfile)
-{
- struct swap_info_struct * p = NULL;
- unsigned short *swap_map;
- struct nameidata nd;
- int i, type, prev;
- int err;
-
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
-
- err = user_path_walk(specialfile, &nd);
- if (err)
- goto out;
-
- lock_kernel();
- prev = -1;
- swap_list_lock();
- for (type = swap_list.head; type >= 0; type = swap_info[type].next) {
- p = swap_info + type;
- if ((p->flags & SWP_WRITEOK) == SWP_WRITEOK) {
- if (p->swap_file == nd.dentry)
- break;
- }
- prev = type;
- }
- err = -EINVAL;
- if (type < 0) {
- swap_list_unlock();
- goto out_dput;
- }
-
- if (prev < 0) {
- swap_list.head = p->next;
- } else {
- swap_info[prev].next = p->next;
- }
- if (type == swap_list.next) {
- /* just pick something that's safe... */
- swap_list.next = swap_list.head;
- }
- nr_swap_pages -= p->pages;
- total_swap_pages -= p->pages;
- p->flags = SWP_USED;
- swap_list_unlock();
- unlock_kernel();
- err = try_to_unuse(type);
- lock_kernel();
- if (err) {
- /* re-insert swap space back into swap_list */
- swap_list_lock();
- for (prev = -1, i = swap_list.head; i >= 0; prev = i, i = swap_info[i].next)
- if (p->prio >= swap_info[i].prio)
- break;
- p->next = i;
- if (prev < 0)
- swap_list.head = swap_list.next = p - swap_info;
- else
- swap_info[prev].next = p - swap_info;
- nr_swap_pages += p->pages;
- total_swap_pages += p->pages;
- p->flags = SWP_WRITEOK;
- swap_list_unlock();
- goto out_dput;
- }
- if (p->swap_device)
- blkdev_put(p->swap_file->d_inode->i_bdev, BDEV_SWAP);
- path_release(&nd);
-
- swap_list_lock();
- swap_device_lock(p);
- nd.mnt = p->swap_vfsmnt;
- nd.dentry = p->swap_file;
- p->swap_vfsmnt = NULL;
- p->swap_file = NULL;
- p->swap_device = 0;
- p->max = 0;
- swap_map = p->swap_map;
- p->swap_map = NULL;
- p->flags = 0;
- swap_device_unlock(p);
- swap_list_unlock();
- vfree(swap_map);
- err = 0;
-
-out_dput:
- unlock_kernel();
- path_release(&nd);
-out:
- return err;
-}
-
-int get_swaparea_info(char *buf)
-{
- char * page = (char *) __get_free_page(GFP_KERNEL);
- struct swap_info_struct *ptr = swap_info;
- int i, j, len = 0, usedswap;
-
- if (!page)
- return -ENOMEM;
-
- len += sprintf(buf, "Filename\t\t\tType\t\tSize\tUsed\tPriority\n");
- for (i = 0 ; i < nr_swapfiles ; i++, ptr++) {
- if ((ptr->flags & SWP_USED) && ptr->swap_map) {
- char * path = d_path(ptr->swap_file, ptr->swap_vfsmnt,
- page, PAGE_SIZE);
-
- len += sprintf(buf + len, "%-31s ", path);
-
- if (!ptr->swap_device)
- len += sprintf(buf + len, "file\t\t");
- else
- len += sprintf(buf + len, "partition\t");
-
- usedswap = 0;
- for (j = 0; j < ptr->max; ++j)
- switch (ptr->swap_map[j]) {
- case SWAP_MAP_BAD:
- case 0:
- continue;
- default:
- usedswap++;
- }
- len += sprintf(buf + len, "%d\t%d\t%d\n", ptr->pages << (PAGE_SHIFT - 10),
- usedswap << (PAGE_SHIFT - 10), ptr->prio);
- }
- }
- free_page((unsigned long) page);
- return len;
-}
-
-int is_swap_partition(kdev_t dev) {
- struct swap_info_struct *ptr = swap_info;
- int i;
-
- for (i = 0 ; i < nr_swapfiles ; i++, ptr++) {
- if (ptr->flags & SWP_USED)
- if (ptr->swap_device == dev)
- return 1;
- }
- return 0;
-}
-
-/*
- * Written 01/25/92 by Simmule Turner, heavily changed by Linus.
- *
- * The swapon system call
- */
-asmlinkage long sys_swapon(const char * specialfile, int swap_flags)
-{
- struct swap_info_struct * p;
- struct nameidata nd;
- struct inode * swap_inode;
- unsigned int type;
- int i, j, prev;
- int error;
- static int least_priority = 0;
- union swap_header *swap_header = 0;
- int swap_header_version;
- int nr_good_pages = 0;
- unsigned long maxpages = 1;
- int swapfilesize;
- struct block_device *bdev = NULL;
- unsigned short *swap_map;
-
- if (!capable(CAP_SYS_ADMIN))
- return -EPERM;
- lock_kernel();
- swap_list_lock();
- p = swap_info;
- for (type = 0 ; type < nr_swapfiles ; type++,p++)
- if (!(p->flags & SWP_USED))
- break;
- error = -EPERM;
- if (type >= MAX_SWAPFILES) {
- swap_list_unlock();
- goto out;
- }
- if (type >= nr_swapfiles)
- nr_swapfiles = type+1;
- p->flags = SWP_USED;
- p->swap_file = NULL;
- p->swap_vfsmnt = NULL;
- p->swap_device = 0;
- p->swap_map = NULL;
- p->lowest_bit = 0;
- p->highest_bit = 0;
- p->cluster_nr = 0;
- p->sdev_lock = SPIN_LOCK_UNLOCKED;
- p->next = -1;
- if (swap_flags & SWAP_FLAG_PREFER) {
- p->prio =
- (swap_flags & SWAP_FLAG_PRIO_MASK)>>SWAP_FLAG_PRIO_SHIFT;
- } else {
- p->prio = --least_priority;
- }
- swap_list_unlock();
- error = user_path_walk(specialfile, &nd);
- if (error)
- goto bad_swap_2;
-
- p->swap_file = nd.dentry;
- p->swap_vfsmnt = nd.mnt;
- swap_inode = nd.dentry->d_inode;
- error = -EINVAL;
-
- if (S_ISBLK(swap_inode->i_mode)) {
- kdev_t dev = swap_inode->i_rdev;
- struct block_device_operations *bdops;
- devfs_handle_t de;
-
- if (is_mounted(dev)) {
- error = -EBUSY;
- goto bad_swap_2;
- }
-
- p->swap_device = dev;
- set_blocksize(dev, PAGE_SIZE);
-
- bd_acquire(swap_inode);
- bdev = swap_inode->i_bdev;
- de = devfs_get_handle_from_inode(swap_inode);
- bdops = devfs_get_ops(de); /* Increments module use count */
- if (bdops) bdev->bd_op = bdops;
-
- error = blkdev_get(bdev, FMODE_READ|FMODE_WRITE, 0, BDEV_SWAP);
- devfs_put_ops(de);/*Decrement module use count now we're safe*/
- if (error)
- goto bad_swap_2;
- set_blocksize(dev, PAGE_SIZE);
- error = -ENODEV;
- if (!dev || (blk_size[MAJOR(dev)] &&
- !blk_size[MAJOR(dev)][MINOR(dev)]))
- goto bad_swap;
- swapfilesize = 0;
- if (blk_size[MAJOR(dev)])
- swapfilesize = blk_size[MAJOR(dev)][MINOR(dev)]
- >> (PAGE_SHIFT - 10);
- } else if (S_ISREG(swap_inode->i_mode))
- swapfilesize = swap_inode->i_size >> PAGE_SHIFT;
- else
- goto bad_swap;
-
- error = -EBUSY;
- for (i = 0 ; i < nr_swapfiles ; i++) {
- struct swap_info_struct *q = &swap_info[i];
- if (i == type || !q->swap_file)
- continue;
- if (swap_inode->i_mapping == q->swap_file->d_inode->i_mapping)
- goto bad_swap;
- }
-
- swap_header = (void *) __get_free_page(GFP_USER);
- if (!swap_header) {
- printk("Unable to start swapping: out of memory :-)\n");
- error = -ENOMEM;
- goto bad_swap;
- }
-
- lock_page(virt_to_page(swap_header));
- rw_swap_page_nolock(READ, SWP_ENTRY(type,0), (char *) swap_header);
-
- if (!memcmp("SWAP-SPACE",swap_header->magic.magic,10))
- swap_header_version = 1;
- else if (!memcmp("SWAPSPACE2",swap_header->magic.magic,10))
- swap_header_version = 2;
- else {
- printk("Unable to find swap-space signature\n");
- error = -EINVAL;
- goto bad_swap;
- }
-
- switch (swap_header_version) {
- case 1:
- memset(((char *) swap_header)+PAGE_SIZE-10,0,10);
- j = 0;
- p->lowest_bit = 0;
- p->highest_bit = 0;
- for (i = 1 ; i < 8*PAGE_SIZE ; i++) {
- if (test_bit(i,(char *) swap_header)) {
- if (!p->lowest_bit)
- p->lowest_bit = i;
- p->highest_bit = i;
- maxpages = i+1;
- j++;
- }
- }
- nr_good_pages = j;
- p->swap_map = vmalloc(maxpages * sizeof(short));
- if (!p->swap_map) {
- error = -ENOMEM;
- goto bad_swap;
- }
- for (i = 1 ; i < maxpages ; i++) {
- if (test_bit(i,(char *) swap_header))
- p->swap_map[i] = 0;
- else
- p->swap_map[i] = SWAP_MAP_BAD;
- }
- break;
-
- case 2:
- /* Check the swap header's sub-version and the size of
- the swap file and bad block lists */
- if (swap_header->info.version != 1) {
- printk(KERN_WARNING
- "Unable to handle swap header version %d\n",
- swap_header->info.version);
- error = -EINVAL;
- goto bad_swap;
- }
-
- p->lowest_bit = 1;
- maxpages = SWP_OFFSET(SWP_ENTRY(0,~0UL)) - 1;
- if (maxpages > swap_header->info.last_page)
- maxpages = swap_header->info.last_page;
- p->highest_bit = maxpages - 1;
-
- error = -EINVAL;
- if (swap_header->info.nr_badpages > MAX_SWAP_BADPAGES)
- goto bad_swap;
-
- /* OK, set up the swap map and apply the bad block list */
- if (!(p->swap_map = vmalloc(maxpages * sizeof(short)))) {
- error = -ENOMEM;
- goto bad_swap;
- }
-
- error = 0;
- memset(p->swap_map, 0, maxpages * sizeof(short));
- for (i=0; i<swap_header->info.nr_badpages; i++) {
- int page = swap_header->info.badpages[i];
- if (page <= 0 || page >= swap_header->info.last_page)
- error = -EINVAL;
- else
- p->swap_map[page] = SWAP_MAP_BAD;
- }
- nr_good_pages = swap_header->info.last_page -
- swap_header->info.nr_badpages -
- 1 /* header page */;
- if (error)
- goto bad_swap;
- }
-
- if (swapfilesize && maxpages > swapfilesize) {
- printk(KERN_WARNING
- "Swap area shorter than signature indicates\n");
- error = -EINVAL;
- goto bad_swap;
- }
- if (!nr_good_pages) {
- printk(KERN_WARNING "Empty swap-file\n");
- error = -EINVAL;
- goto bad_swap;
- }
- p->swap_map[0] = SWAP_MAP_BAD;
- swap_list_lock();
- swap_device_lock(p);
- p->max = maxpages;
- p->flags = SWP_WRITEOK;
- p->pages = nr_good_pages;
- nr_swap_pages += nr_good_pages;
- total_swap_pages += nr_good_pages;
- printk(KERN_INFO "Adding Swap: %dk swap-space (priority %d)\n",
- nr_good_pages<<(PAGE_SHIFT-10), p->prio);
-
- /* insert swap space into swap_list: */
- prev = -1;
- for (i = swap_list.head; i >= 0; i = swap_info[i].next) {
- if (p->prio >= swap_info[i].prio) {
- break;
- }
- prev = i;
- }
- p->next = i;
- if (prev < 0) {
- swap_list.head = swap_list.next = p - swap_info;
- } else {
- swap_info[prev].next = p - swap_info;
- }
- swap_device_unlock(p);
- swap_list_unlock();
- error = 0;
- goto out;
-bad_swap:
- if (bdev)
- blkdev_put(bdev, BDEV_SWAP);
-bad_swap_2:
- swap_list_lock();
- swap_map = p->swap_map;
- nd.mnt = p->swap_vfsmnt;
- nd.dentry = p->swap_file;
- p->swap_device = 0;
- p->swap_file = NULL;
- p->swap_vfsmnt = NULL;
- p->swap_map = NULL;
- p->flags = 0;
- if (!(swap_flags & SWAP_FLAG_PREFER))
- ++least_priority;
- swap_list_unlock();
- if (swap_map)
- vfree(swap_map);
- path_release(&nd);
-out:
- if (swap_header)
- free_page((long) swap_header);
- unlock_kernel();
- return error;
-}
-
-void si_swapinfo(struct sysinfo *val)
-{
- unsigned int i;
- unsigned long nr_to_be_unused = 0;
-
- swap_list_lock();
- for (i = 0; i < nr_swapfiles; i++) {
- unsigned int j;
- if (swap_info[i].flags != SWP_USED)
- continue;
- for (j = 0; j < swap_info[i].max; ++j) {
- switch (swap_info[i].swap_map[j]) {
- case 0:
- case SWAP_MAP_BAD:
- continue;
- default:
- nr_to_be_unused++;
- }
- }
- }
- val->freeswap = nr_swap_pages + nr_to_be_unused;
- val->totalswap = total_swap_pages + nr_to_be_unused;
- swap_list_unlock();
-}
-
-/*
- * Verify that a swap entry is valid and increment its swap map count.
- *
- * Note: if swap_map[] reaches SWAP_MAP_MAX the entries are treated as
- * "permanent", but will be reclaimed by the next swapoff.
- */
-int swap_duplicate(swp_entry_t entry)
-{
- struct swap_info_struct * p;
- unsigned long offset, type;
- int result = 0;
-
- type = SWP_TYPE(entry);
- if (type >= nr_swapfiles)
- goto bad_file;
- p = type + swap_info;
- offset = SWP_OFFSET(entry);
-
- swap_device_lock(p);
- if (offset < p->max && p->swap_map[offset]) {
- if (p->swap_map[offset] < SWAP_MAP_MAX - 1) {
- p->swap_map[offset]++;
- result = 1;
- } else if (p->swap_map[offset] <= SWAP_MAP_MAX) {
- if (swap_overflow++ < 5)
- printk(KERN_WARNING "swap_dup: swap entry overflow\n");
- p->swap_map[offset] = SWAP_MAP_MAX;
- result = 1;
- }
- }
- swap_device_unlock(p);
-out:
- return result;
-
-bad_file:
- printk(KERN_ERR "swap_dup: %s%08lx\n", Bad_file, entry.val);
- goto out;
-}
-
-/*
- * Prior swap_duplicate protects against swap device deletion.
- */
-void get_swaphandle_info(swp_entry_t entry, unsigned long *offset,
- kdev_t *dev, struct inode **swapf)
-{
- unsigned long type;
- struct swap_info_struct *p;
-
- type = SWP_TYPE(entry);
- if (type >= nr_swapfiles) {
- printk(KERN_ERR "rw_swap_page: %s%08lx\n", Bad_file, entry.val);
- return;
- }
-
- p = &swap_info[type];
- *offset = SWP_OFFSET(entry);
- if (*offset >= p->max && *offset != 0) {
- printk(KERN_ERR "rw_swap_page: %s%08lx\n", Bad_offset, entry.val);
- return;
- }
- if (p->swap_map && !p->swap_map[*offset]) {
- printk(KERN_ERR "rw_swap_page: %s%08lx\n", Unused_offset, entry.val);
- return;
- }
- if (!(p->flags & SWP_USED)) {
- printk(KERN_ERR "rw_swap_page: %s%08lx\n", Unused_file, entry.val);
- return;
- }
-
- if (p->swap_device) {
- *dev = p->swap_device;
- } else if (p->swap_file) {
- *swapf = p->swap_file->d_inode;
- } else {
- printk(KERN_ERR "rw_swap_page: no swap file or device\n");
- }
- return;
-}
-
-/*
- * swap_device_lock prevents swap_map being freed. Don't grab an extra
- * reference on the swaphandle, it doesn't matter if it becomes unused.
- */
-int valid_swaphandles(swp_entry_t entry, unsigned long *offset)
-{
- int ret = 0, i = 1 << page_cluster;
- unsigned long toff;
- struct swap_info_struct *swapdev = SWP_TYPE(entry) + swap_info;
-
- if (!page_cluster) /* no readahead */
- return 0;
- toff = (SWP_OFFSET(entry) >> page_cluster) << page_cluster;
- if (!toff) /* first page is swap header */
- toff++, i--;
- *offset = toff;
-
- swap_device_lock(swapdev);
- do {
- /* Don't read-ahead past the end of the swap area */
- if (toff >= swapdev->max)
- break;
- /* Don't read in free or bad pages */
- if (!swapdev->swap_map[toff])
- break;
- if (swapdev->swap_map[toff] == SWAP_MAP_BAD)
- break;
- toff++;
- ret++;
- } while (--i);
- swap_device_unlock(swapdev);
- return ret;
-}
diff --git a/xenolinux-2.4.25-sparse/mm/vmalloc.c b/xenolinux-2.4.25-sparse/mm/vmalloc.c
deleted file mode 100644
index dc1c7fe550..0000000000
--- a/xenolinux-2.4.25-sparse/mm/vmalloc.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * linux/mm/vmalloc.c
- *
- * Copyright (C) 1993 Linus Torvalds
- * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
- * SMP-safe vmalloc/vfree/ioremap, Tigran Aivazian <tigran@veritas.com>, May 2000
- */
-
-#include <linux/config.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-#include <linux/spinlock.h>
-#include <linux/highmem.h>
-#include <linux/smp_lock.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
-
-rwlock_t vmlist_lock = RW_LOCK_UNLOCKED;
-struct vm_struct * vmlist;
-
-static inline void free_area_pte(pmd_t * pmd, unsigned long address, unsigned long size)
-{
- pte_t * pte;
- unsigned long end;
-
- if (pmd_none(*pmd))
- return;
- if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
- return;
- }
- pte = pte_offset(pmd, address);
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- pte_t page;
- page = ptep_get_and_clear(pte);
- address += PAGE_SIZE;
- pte++;
- if (pte_none(page))
- continue;
- if (pte_present(page)) {
- struct page *ptpage = pte_page(page);
- if (VALID_PAGE(ptpage) && (!PageReserved(ptpage)))
- __free_page(ptpage);
- continue;
- }
- printk(KERN_CRIT "Whee.. Swapped out page in kernel page table\n");
- } while (address < end);
-}
-
-static inline void free_area_pmd(pgd_t * dir, unsigned long address, unsigned long size)
-{
- pmd_t * pmd;
- unsigned long end;
-
- if (pgd_none(*dir))
- return;
- if (pgd_bad(*dir)) {
- pgd_ERROR(*dir);
- pgd_clear(dir);
- return;
- }
- pmd = pmd_offset(dir, address);
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- do {
- free_area_pte(pmd, address, end - address);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address < end);
-}
-
-void vmfree_area_pages(unsigned long address, unsigned long size)
-{
- pgd_t * dir;
- unsigned long end = address + size;
-
- dir = pgd_offset_k(address);
- flush_cache_all();
- do {
- free_area_pmd(dir, address, end - address);
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
- flush_tlb_all();
-}
-
-static inline int alloc_area_pte (pte_t * pte, unsigned long address,
- unsigned long size, int gfp_mask,
- pgprot_t prot, struct page ***pages)
-{
- unsigned long end;
-
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- do {
- struct page * page;
-
- if (!pages) {
- spin_unlock(&init_mm.page_table_lock);
- page = alloc_page(gfp_mask);
- spin_lock(&init_mm.page_table_lock);
- } else {
- page = (**pages);
- (*pages)++;
-
- /* Add a reference to the page so we can free later */
- if (page)
- atomic_inc(&page->count);
-
- }
- if (!pte_none(*pte))
- printk(KERN_ERR "alloc_area_pte: page already exists\n");
- if (!page)
- return -ENOMEM;
- set_pte(pte, mk_pte(page, prot));
- address += PAGE_SIZE;
- pte++;
- } while (address < end);
- return 0;
-}
-
-static inline int alloc_area_pmd(pmd_t * pmd, unsigned long address,
- unsigned long size, int gfp_mask,
- pgprot_t prot, struct page ***pages)
-{
- unsigned long end;
-
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- do {
- pte_t * pte = pte_alloc(&init_mm, pmd, address);
- if (!pte)
- return -ENOMEM;
- if (alloc_area_pte(pte, address, end - address,
- gfp_mask, prot, pages))
- return -ENOMEM;
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address < end);
- return 0;
-}
-
-static inline int __vmalloc_area_pages (unsigned long address,
- unsigned long size,
- int gfp_mask,
- pgprot_t prot,
- struct page ***pages)
-{
- pgd_t * dir;
- unsigned long end = address + size;
- int ret;
-
- dir = pgd_offset_k(address);
- spin_lock(&init_mm.page_table_lock);
- do {
- pmd_t *pmd;
-
- pmd = pmd_alloc(&init_mm, dir, address);
- ret = -ENOMEM;
- if (!pmd)
- break;
-
- ret = -ENOMEM;
- if (alloc_area_pmd(pmd, address, end - address, gfp_mask, prot, pages))
- break;
-
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
-
- ret = 0;
- } while (address && (address < end));
- spin_unlock(&init_mm.page_table_lock);
- flush_cache_all();
- return ret;
-}
-
-int vmalloc_area_pages(unsigned long address, unsigned long size,
- int gfp_mask, pgprot_t prot)
-{
- return __vmalloc_area_pages(address, size, gfp_mask, prot, NULL);
-}
-
-struct vm_struct * get_vm_area(unsigned long size, unsigned long flags)
-{
- unsigned long addr, next;
- struct vm_struct **p, *tmp, *area;
-
- area = (struct vm_struct *) kmalloc(sizeof(*area), GFP_KERNEL);
- if (!area)
- return NULL;
-
- size += PAGE_SIZE;
- if (!size) {
- kfree (area);
- return NULL;
- }
-
- addr = VMALLOC_START;
- write_lock(&vmlist_lock);
- for (p = &vmlist; (tmp = *p) ; p = &tmp->next) {
- if ((size + addr) < addr)
- goto out;
- if (size + addr <= (unsigned long) tmp->addr)
- break;
- next = tmp->size + (unsigned long) tmp->addr;
- if (next > addr)
- addr = next;
- if (addr > VMALLOC_END-size)
- goto out;
- }
- area->flags = flags;
- area->addr = (void *)addr;
- area->size = size;
- area->next = *p;
- *p = area;
- write_unlock(&vmlist_lock);
- return area;
-
-out:
- write_unlock(&vmlist_lock);
- kfree(area);
- return NULL;
-}
-
-void vfree(void * addr)
-{
- struct vm_struct **p, *tmp;
-
- if (!addr)
- return;
- if ((PAGE_SIZE-1) & (unsigned long) addr) {
- printk(KERN_ERR "Trying to vfree() bad address (%p)\n", addr);
- return;
- }
- write_lock(&vmlist_lock);
- for (p = &vmlist ; (tmp = *p) ; p = &tmp->next) {
- if (tmp->addr == addr) {
- *p = tmp->next;
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
- if (tmp->flags & VM_IOREMAP)
- zap_page_range(&init_mm, VMALLOC_VMADDR(tmp->addr), tmp->size);
- else
-#endif
- vmfree_area_pages(VMALLOC_VMADDR(tmp->addr), tmp->size);
- write_unlock(&vmlist_lock);
- kfree(tmp);
- return;
- }
- }
- write_unlock(&vmlist_lock);
- printk(KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n", addr);
-}
-
-void * __vmalloc (unsigned long size, int gfp_mask, pgprot_t prot)
-{
- void * addr;
- struct vm_struct *area;
-
- size = PAGE_ALIGN(size);
- if (!size || (size >> PAGE_SHIFT) > num_physpages)
- return NULL;
- area = get_vm_area(size, VM_ALLOC);
- if (!area)
- return NULL;
- addr = area->addr;
- if (__vmalloc_area_pages(VMALLOC_VMADDR(addr), size, gfp_mask,
- prot, NULL)) {
- vfree(addr);
- return NULL;
- }
- return addr;
-}
-
-void * vmap(struct page **pages, int count,
- unsigned long flags, pgprot_t prot)
-{
- void * addr;
- struct vm_struct *area;
- unsigned long size = count << PAGE_SHIFT;
-
- if (!size || size > (max_mapnr << PAGE_SHIFT))
- return NULL;
- area = get_vm_area(size, flags);
- if (!area) {
- return NULL;
- }
- addr = area->addr;
- if (__vmalloc_area_pages(VMALLOC_VMADDR(addr), size, 0,
- prot, &pages)) {
- vfree(addr);
- return NULL;
- }
- return addr;
-}
-
-long vread(char *buf, char *addr, unsigned long count)
-{
- struct vm_struct *tmp;
- char *vaddr, *buf_start = buf;
- unsigned long n;
-
- /* Don't allow overflow */
- if ((unsigned long) addr + count < count)
- count = -(unsigned long) addr;
-
- read_lock(&vmlist_lock);
- for (tmp = vmlist; tmp; tmp = tmp->next) {
- vaddr = (char *) tmp->addr;
- if (addr >= vaddr + tmp->size - PAGE_SIZE)
- continue;
- while (addr < vaddr) {
- if (count == 0)
- goto finished;
- *buf = '\0';
- buf++;
- addr++;
- count--;
- }
- n = vaddr + tmp->size - PAGE_SIZE - addr;
- do {
- if (count == 0)
- goto finished;
- *buf = *addr;
- buf++;
- addr++;
- count--;
- } while (--n > 0);
- }
-finished:
- read_unlock(&vmlist_lock);
- return buf - buf_start;
-}
-
-long vwrite(char *buf, char *addr, unsigned long count)
-{
- struct vm_struct *tmp;
- char *vaddr, *buf_start = buf;
- unsigned long n;
-
- /* Don't allow overflow */
- if ((unsigned long) addr + count < count)
- count = -(unsigned long) addr;
-
- read_lock(&vmlist_lock);
- for (tmp = vmlist; tmp; tmp = tmp->next) {
- vaddr = (char *) tmp->addr;
- if (addr >= vaddr + tmp->size - PAGE_SIZE)
- continue;
- while (addr < vaddr) {
- if (count == 0)
- goto finished;
- buf++;
- addr++;
- count--;
- }
- n = vaddr + tmp->size - PAGE_SIZE - addr;
- do {
- if (count == 0)
- goto finished;
- *addr = *buf;
- buf++;
- addr++;
- count--;
- } while (--n > 0);
- }
-finished:
- read_unlock(&vmlist_lock);
- return buf - buf_start;
-}