diff -urN linux-2.4.19/CREDITS linux-2.4.20/CREDITS --- linux-2.4.19/CREDITS Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/CREDITS Thu Nov 28 15:53:08 2002 @@ -704,6 +704,11 @@ S: Warrendale, Pennsylvania 15086 S: USA +N: Martin Devera +E: devik@cdi.cz +W: http://luxik.cdi.cz/~devik/qos/ +D: HTB qdisc and random networking hacks + N: Alex deVries E: adevries@thepuffingroup.com D: Various SGI parts, bits of HAL2 and Newport, PA-RISC Linux. @@ -1258,7 +1263,7 @@ S: Germany N: David Hinds -E: dhinds@zen.stanford.edu +E: dahinds@users.sourceforge.net W: http://tao.stanford.edu/~dhinds D: PCMCIA and CardBus stuff, PCMCIA-HOWTO, PCMCIA client drivers S: 2019 W. Middlefield Rd #1 @@ -1329,6 +1334,12 @@ S: Provo, Utah 84606-5607 S: USA +N: Marcel Holtmann +E: marcel@holtmann.org +W: http://www.holtmann.org +D: Author of the Linux Bluetooth Subsystem PC Card drivers +S: Germany + N: Rob W. W. Hooft E: hooft@EMBL-Heidelberg.DE D: Shared libs for graphics-tools and for the f2c compiler @@ -2154,7 +2165,7 @@ S: South Australia N. Wolfgang Muees -E: wmues@nexgo.de +E: wolfgang@iksw-muees.de D: Auerswald USB driver N: Ian A. Murdock @@ -2335,8 +2346,8 @@ D: modularized BSD Unix domain sockets N: Martin Kasper Petersen -E: mkp@linuxcare.com E: mkp@mkp.net +D: forte FM801 audio driver D: PA-RISC port D: XFS file system D: kiobuf based block I/O work @@ -3311,14 +3322,10 @@ S: Germany N: Leonard N. Zubkoff -E: lnz@dandelion.com W: http://www.dandelion.com/Linux/ D: BusLogic SCSI driver D: Mylex DAC960 PCI RAID driver D: Miscellaneous kernel fixes -S: 3078 Sulphur Spring Court -S: San Jose, California 95148 -S: USA N: Alessandro Zummo E: azummo@ita.flashnet.it diff -urN linux-2.4.19/Documentation/BK-usage/bk-kernel-howto.txt linux-2.4.20/Documentation/BK-usage/bk-kernel-howto.txt --- linux-2.4.19/Documentation/BK-usage/bk-kernel-howto.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/bk-kernel-howto.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,275 @@ + + Doing the BK Thing, Penguin-Style + + + + +This set of notes is intended mainly for kernel developers, occasional +or full-time, but sysadmins and power users may find parts of it useful +as well. It assumes at least a basic familiarity with CVS, both at a +user level (use on the cmd line) and at a higher level (client-server model). +Due to the author's background, an operation may be described in terms +of CVS, or in terms of how that operation differs from CVS. + +This is -not- intended to be BitKeeper documentation. Always run +"bk help " or in X "bk helptool " for reference +documentation. + + +BitKeeper Concepts +------------------ + +In the true nature of the Internet itself, BitKeeper is a distributed +system. When applied to revision control, this means doing away with +client-server, and changing to a parent-child model... essentially +peer-to-peer. On the developer's end, this also represents a +fundamental disruption in the standard workflow of changes, commits, +and merges. You will need to take a few minutes to think about +how to best work under BitKeeper, and re-optimize things a bit. +In some sense it is a bit radical, because it might described as +tossing changes out into a maelstrom and having them magically +land at the right destination... but I'm getting ahead of myself. + +Let's start with this progression: +Each BitKeeper source tree on disk is a repository unto itself. +Each repository has a parent. +Each repository contains a set of a changesets ("csets"). +Each cset is one or more changed files, bundled together. + +Each tree is a repository, so all changes are checked into the local +tree. When a change is checked in, all modified files are grouped +into a logical unit, the changeset. Internally, BK links these +changesets in a tree, representing various converging and diverging +lines of development. These changesets are the bread and butter of +the BK system. + +After the concept of changesets, the next thing you need to get used +to is having multiple copies of source trees lying around. This -really- +takes some getting used to, for some people. Separate source trees +are the means in BitKeeper by which you delineate parallel lines +of development, both minor and major. What would be branches in +CVS become separate source trees, or "clones" in BitKeeper [heh, +or Star Wars] terminology. + +Clones and changesets are the tools from which most of the power of +BitKeeper is derived. As mentioned earlier, each clone has a parent, +the tree used as the source when the new clone was created. In a +CVS-like setup, the parent would be a remote server on the Internet, +and the child is your local clone of that tree. + +Once you have established a common baseline between two source trees -- +a common parent -- then you can merge changesets between those two +trees with ease. Merging changes into a tree is called a "pull", and +is analagous to 'cvs update'. A pull downloads all the changesets in +the remote tree you do not have, and merges them. Sending changes in +one tree to another tree is called a "push". Push sends all changes +in the local tree the remote does not yet have, and merges them. + +From these concepts come some initial command examples: + +1) bk clone -q http://linux.bkbits.net/linux-2.5 linus-2.5 +Download a 2.5 stock kernel tree, naming it "linus-2.5" in the local dir. +The "-q" disables listing every single file as it is downloaded. + +2) bk clone -ql linus-2.5 alpha-2.5 +Create a separate source tree for the Alpha AXP architecture. +The "-l" uses hard links instead of copying data, since both trees are +on the local disk. You can also replace the above with "bk lclone -q ..." + +You only clone a tree -once-. After cloning the tree lives a long time +on disk, being updating by pushes and pulls. + +3) cd alpha-2.5 ; bk pull http://gkernel.bkbits.net/alpha-2.5 +Download changes in "alpha-2.5" repository which are not present +in the local repository, and merge them into the source tree. + +4) bk -r co -q +Because every tree is a repository, files must be checked out before +they will be in their standard places in the source tree. + +5) bk vi fs/inode.c # example change... + bk citool # checkin, using X tool + bk push bk://gkernel@bkbits.net/alpha-2.5 # upload change +Typical example of a BK sequence that would replace the analagous CVS +situation, + vi fs/inode.c + cvs commit + +As this is just supposed to be a quick BK intro, for more in-depth +tutorials, live working demos, and docs, see http://www.bitkeeper.com/ + + + +BK and Kernel Development Workflow +---------------------------------- +Currently the latest 2.5 tree is available via "bk clone $URL" +and "bk pull $URL" at http://linux.bkbits.net/linux-2.5 +This should change in a few weeks to a kernel.org URL. + + +A big part of using BitKeeper is organizing the various trees you have +on your local disk, and organizing the flow of changes among those +trees, and remote trees. If one were to graph the relationships between +a desired BK setup, you are likely to see a few-many-few graph, like +this: + + linux-2.5 + | + merge-to-linus-2.5 + / | | + / | | + vm-hacks bugfixes filesys personal-hacks + \ | | / + \ | | / + \ | | / + testing-and-validation + +Since a "bk push" sends all changes not in the target tree, and +since a "bk pull" receives all changes not in the source tree, you want +to make sure you are only pushing specific changes to the desired tree, +not all changes from "peer parent" trees. For example, pushing a change +from the testing-and-validation tree would probably be a bad idea, +because it will push all changes from vm-hacks, bugfixes, filesys, and +personal-hacks trees into the target tree. + +One would typically work on only one "theme" at a time, either +vm-hacks or bugfixes or filesys, keeping those changes isolated in +their own tree during development, and only merge the isolated with +other changes when going upstream (to Linus or other maintainers) or +downstream (to your "union" trees, like testing-and-validation above). + +It should be noted that some of this separation is not just recommended +practice, it's actually [for now] -enforced- by BitKeeper. BitKeeper +requires that changesets maintain a certain order, which is the reason +that "bk push" sends all local changesets the remote doesn't have. This +separation may look like a lot of wasted disk space at first, but it +helps when two unrelated changes may "pollute" the same area of code, or +don't follow the same pace of development, or any other of the standard +reasons why one creates a development branch. + +Small development branches (clones) will appear and disappear: + + -------- A --------- B --------- C --------- D ------- + \ / + -----short-term devel branch----- + +While long-term branches will parallel a tree (or trees), with period +merge points. In this first example, we pull from a tree (pulls, +"\") periodically, such as what occurs when tracking changes in a +vendor tree, never pushing changes back up the line: + + -------- A --------- B --------- C --------- D ------- + \ \ \ + ----long-term devel branch----------------- + +And then a more common case in Linux kernel development, a long term +branch with periodic merges back into the tree (pushes, "/"): + + -------- A --------- B --------- C --------- D ------- + \ \ / \ + ----long-term devel branch----------------- + + + + + +Submitting Changes to Linus +--------------------------- +There's a bit of an art, or style, of submitting changes to Linus. +Since Linus's tree is now (you might say) fully integrated into the +distributed BitKeeper system, there are several prerequisites to +properly submitting a BitKeeper change. All these prereq's are just +general cleanliness of BK usage, so as people become experts at BK, feel +free to optimize this process further (assuming Linus agrees, of +course). + + + +0) Make sure your tree was originally cloned from the linux-2.5 tree +created by Linus. If your tree does not have this as its ancestor, it +is impossible to reliably exchange changesets. + + + +1) Pay attention to your commit text. The commit message that +accompanies each changeset you submit will live on forever in history, +and is used by Linus to accurately summarize the changes in each +pre-patch. Remember that there is no context, so + "fix for new scheduler changes" +would be too vague, but + "fix mips64 arch for new scheduler switch_to(), TIF_xxx semantics" +would be much better. + +You can and should use the command "bk comment -C" to update the +commit text, and improve it after the fact. This is very useful for +development: poor, quick descriptions during development, which get +cleaned up using "bk comment" before issuing the "bk push" to submit the +changes. + + + +2) Include an Internet-available URL for Linus to pull from, such as + + Pull from: http://gkernel.bkbits.net/net-drivers-2.5 + + + +3) Include a summary and "diffstat -p1" of each changeset that will be +downloaded, when Linus issues a "bk pull". The author auto-generates +these summaries using "bk push -nl 2>&1", to obtain a listing +of all the pending-to-send changesets, and their commit messages. + +It is important to show Linus what he will be downloading when he issues +a "bk pull", to reduce the time required to sift the changes once they +are downloaded to Linus's local machine. + +IMPORTANT NOTE: One of the features of BK is that your repository does +not have to be up to date, in order for Linus to receive your changes. +It is considered a courtesy to keep your repository fairly recent, to +lessen any potential merge work Linus may need to do. + + +4) Split up your changes. Each maintainer<->Linus situation is likely +to be slightly different here, so take this just as general advice. The +author splits up changes according to "themes" when merging with Linus. +Simultaneous pushes from local development go to special trees which +exist solely to house changes "queued" for Linus. Example of the trees: + + net-drivers-2.5 -- on-going net driver maintenance + vm-2.5 -- VM-related changes + fs-2.5 -- filesystem-related changes + +Linus then has much more freedom for pulling changes. He could (for +example) issue a "bk pull" on vm-2.5 and fs-2.5 trees, to merge their +changes, but hold off net-drivers-2.5 because of a change that needs +more discussion. + +Other maintainers may find that a single linus-pull-from tree is +adequate for passing BK changesets to him. + + + +Frequently Answered Questions +----------------------------- +1) How do I change the e-mail address shown in the changelog? +A. When you run "bk citool" or "bk commit", set environment + variables BK_USER and BK_HOST to the desired username + and host/domain name. + + +2) How do I use tags / get a diff between two kernel versions? +A. Pass the tags Linus uses to 'bk export'. + +ChangeSets are in a forward-progressing order, so it's pretty easy +to get a snapshot starting and ending at any two points in time. +Linus puts tags on each release and pre-release, so you could use +these two examples: + + bk export -tpatch -hdu -rv2.5.4,v2.5.5 | less + # creates patch-2.5.5 essentially + bk export -tpatch -du -rv2.5.5-pre1,v2.5.5 | less + # changes from pre1 to final + +A tag is just an alias for a specific changeset... and since changesets +are ordered, a tag is thus a marker for a specific point in time (or +specific state of the tree). diff -urN linux-2.4.19/Documentation/BK-usage/bk-make-sum linux-2.4.20/Documentation/BK-usage/bk-make-sum --- linux-2.4.19/Documentation/BK-usage/bk-make-sum Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/bk-make-sum Thu Nov 28 15:53:08 2002 @@ -0,0 +1,37 @@ +#!/bin/sh -e +# DIR=$HOME/BK/axp-2.5 +# cd $DIR + +LINUS_REPO=$1 +DIRBASE=`basename $PWD` + +{ +cat </dev/null + +cat < (:D: :I:)\n$each(:C:){ (:C:)\n}\n}' - + +} > /tmp/linus.txt + +cat < 13/02/2002 +# +# Add diffstat output after Changelog 21/02/2002 + +PROG=bksend + +usage() { + echo "usage: $PROG -r" + echo -e "\twhere is of the form '1.23', '1.23..', '1.23..1.27'," + echo -e "\tor '+' to indicate the most recent revision" + + exit 1 +} + +case $1 in +-r) REV=$2; shift ;; +-r*) REV=`echo $1 | sed 's/^-r//'` ;; +*) echo "$PROG: no revision given, you probably don't want that";; +esac + +[ -z "$REV" ] && usage + +echo "You can import this changeset into BK by piping this whole message to:" +echo "'| bk receive [path to repository]' or apply the patch as usual." + +SEP="\n===================================================================\n\n" +echo -e $SEP +bk changes -r$REV +echo +bk export -tpatch -du -h -r$REV | diffstat +echo; echo +bk export -tpatch -du -h -r$REV +echo -e $SEP +bk send -wgzip_uu -r$REV - diff -urN linux-2.4.19/Documentation/BK-usage/bz64wrap linux-2.4.20/Documentation/BK-usage/bz64wrap --- linux-2.4.19/Documentation/BK-usage/bz64wrap Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/bz64wrap Thu Nov 28 15:53:08 2002 @@ -0,0 +1,41 @@ +#!/bin/sh + +# bz64wrap - the sending side of a bzip2 | base64 stream +# Andreas Dilger Jan 2002 + + +PATH=$PATH:/usr/bin:/usr/local/bin:/usr/freeware/bin + +# A program to generate base64 encoding on stdout +BASE64_ENCODE="uuencode -m /dev/stdout" +BASE64_BEGIN= +BASE64_END= + +BZIP=NO +BASE64=NO + +# Test if we have the bzip program installed +bzip2 -c /dev/null > /dev/null 2>&1 && BZIP=YES + +# Test if uuencode can handle the -m (MIME) encoding option +$BASE64_ENCODE < /dev/null > /dev/null 2>&1 && BASE64=YES + +if [ $BASE64 = NO ]; then + BASE64_ENCODE=mimencode + BASE64_BEGIN="begin-base64 644 -" + BASE64_END="====" + + $BASE64_ENCODE < /dev/null > /dev/null 2>&1 && BASE64=YES +fi + +if [ $BZIP = NO -o $BASE64 = NO ]; then + echo "$0: can't use bz64 encoding: bzip2=$BZIP, $BASE64_ENCODE=$BASE64" + exit 1 +fi + +# Sadly, mimencode does not appear to have good "begin" and "end" markers +# like uuencode does, and it is picky about getting the right start/end of +# the base64 stream, so we handle this internally. +echo "$BASE64_BEGIN" +bzip2 -9 | $BASE64_ENCODE +echo "$BASE64_END" diff -urN linux-2.4.19/Documentation/BK-usage/cset-to-linus linux-2.4.20/Documentation/BK-usage/cset-to-linus --- linux-2.4.19/Documentation/BK-usage/cset-to-linus Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/cset-to-linus Thu Nov 28 15:53:08 2002 @@ -0,0 +1,49 @@ +#!/usr/bin/perl -w + +use strict; + +my ($lhs, $rev, $tmp, $rhs, $s); +my @cset_text = (); +my @pipe_text = (); +my $have_cset = 0; + +while (<>) { + next if /^---/; + + if (($lhs, $tmp, $rhs) = (/^(ChangeSet\@)([^,]+)(, .*)$/)) { + &cset_rev if ($have_cset); + + $rev = $tmp; + $have_cset = 1; + + push(@cset_text, $_); + } + + elsif ($have_cset) { + push(@cset_text, $_); + } +} +&cset_rev if ($have_cset); +exit(0); + + +sub cset_rev { + my $empty_cset = 0; + + open PIPE, "bk export -tpatch -hdu -r $rev | diffstat -p1 2>/dev/null |" or die; + while ($s = ) { + $empty_cset = 1 if ($s =~ /0 files changed/); + push(@pipe_text, $s); + } + close(PIPE); + + if (! $empty_cset) { + print @cset_text; + print @pipe_text; + print "\n\n"; + } + + @pipe_text = (); + @cset_text = (); +} + diff -urN linux-2.4.19/Documentation/BK-usage/csets-to-patches linux-2.4.20/Documentation/BK-usage/csets-to-patches --- linux-2.4.19/Documentation/BK-usage/csets-to-patches Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/csets-to-patches Thu Nov 28 15:53:08 2002 @@ -0,0 +1,44 @@ +#!/usr/bin/perl -w + +use strict; + +my ($lhs, $rev, $tmp, $rhs, $s); +my @cset_text = (); +my @pipe_text = (); +my $have_cset = 0; + +while (<>) { + next if /^---/; + + if (($lhs, $tmp, $rhs) = (/^(ChangeSet\@)([^,]+)(, .*)$/)) { + &cset_rev if ($have_cset); + + $rev = $tmp; + $have_cset = 1; + + push(@cset_text, $_); + } + + elsif ($have_cset) { + push(@cset_text, $_); + } +} +&cset_rev if ($have_cset); +exit(0); + + +sub cset_rev { + my $empty_cset = 0; + + system("bk export -tpatch -du -r $rev > /tmp/rev-$rev.patch"); + + if (! $empty_cset) { + print @cset_text; + print @pipe_text; + print "\n\n"; + } + + @pipe_text = (); + @cset_text = (); +} + diff -urN linux-2.4.19/Documentation/BK-usage/unbz64wrap linux-2.4.20/Documentation/BK-usage/unbz64wrap --- linux-2.4.19/Documentation/BK-usage/unbz64wrap Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/BK-usage/unbz64wrap Thu Nov 28 15:53:08 2002 @@ -0,0 +1,25 @@ +#!/bin/sh + +# unbz64wrap - the receiving side of a bzip2 | base64 stream +# Andreas Dilger Jan 2002 + +# Sadly, mimencode does not appear to have good "begin" and "end" markers +# like uuencode does, and it is picky about getting the right start/end of +# the base64 stream, so we handle this explicitly here. + +PATH=$PATH:/usr/bin:/usr/local/bin:/usr/freeware/bin + +if mimencode -u < /dev/null > /dev/null 2>&1 ; then + SHOW= + while read LINE; do + case $LINE in + begin-base64*) SHOW=YES ;; + ====) SHOW= ;; + *) [ "$SHOW" ] && echo "$LINE" ;; + esac + done | mimencode -u | bunzip2 + exit $? +else + cat - | uudecode -o /dev/stdout | bunzip2 + exit $? +fi diff -urN linux-2.4.19/Documentation/Changes linux-2.4.20/Documentation/Changes --- linux-2.4.19/Documentation/Changes Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/Changes Thu Nov 28 15:53:08 2002 @@ -55,7 +55,7 @@ o modutils 2.4.2 # insmod -V o e2fsprogs 1.25 # tune2fs o jfsutils 1.0.12 # fsck.jfs -V -o reiserfsprogs 3.x.1b # reiserfsck 2>&1|grep reiserfsprogs +o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs o pcmcia-cs 3.1.21 # cardmgr -V o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version @@ -225,7 +225,6 @@ version v0.99.0 or higher. Running old versions may cause problems with programs using shared memory. - Networking ========== @@ -326,7 +325,7 @@ Reiserfsprogs ------------- -o +o LVM toolset ----------- diff -urN linux-2.4.19/Documentation/Configure.help linux-2.4.20/Documentation/Configure.help --- linux-2.4.19/Documentation/Configure.help Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/Configure.help Thu Nov 28 15:53:08 2002 @@ -2,10 +2,7 @@ # Eric S. Raymond # Steven Cole # -# Version 3.00: current with 2.4.19 -# -# This version of the Linux kernel configuration help texts -# corresponds to kernel versions 2.4.x and 2.5.x. +# Version 3.01: current with 2.4.19+ # # Translations of this file available on the WWW: # @@ -233,6 +230,22 @@ network and embedded applications. For more information see the Axis Communication site, . +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 NUMA systems CONFIG_MULTIQUAD This option is used for getting Linux to run on a (IBM/Sequent) NUMA @@ -376,6 +389,12 @@ 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. + Normal floppy disk support CONFIG_BLK_DEV_FD If you want to use the floppy disk drive(s) of your PC under Linux, @@ -494,7 +513,7 @@ 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. @@ -534,6 +553,17 @@ If unsure, say N. +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 @@ -671,6 +701,12 @@ 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 + . 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 @@ -817,6 +853,12 @@ 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 + . 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, @@ -1004,6 +1046,11 @@ Please read the comments at the top of . + 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 . 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 @@ -1067,10 +1114,10 @@ This effect can be also invoked by calling "idex=ata66" If unsure, say N. -CMD64X chipset support +CMD64X and CMD680 chipset support CONFIG_BLK_DEV_CMD64X Say Y here if you have an IDE controller which uses any of these - chipsets: CMD643, CMD646, or CMD648. + chipsets: CMD643, CMD646, CMD648, CMD649 or CMD680. CY82C693 chipset support CONFIG_BLK_DEV_CY82C693 @@ -1796,6 +1843,12 @@ . 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 + . The module will be called + md.o + If unsure, say N. Linear (append) mode @@ -1885,6 +1938,12 @@ 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 + . The module will be called + multipath.o + If unsure, say N. Support for IDE Raid controllers @@ -1899,6 +1958,12 @@ 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 + . 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 @@ -2493,6 +2558,17 @@ If you want to compile it as a module, say M here and read . 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 @@ -2543,6 +2619,28 @@ 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 @@ -2551,6 +2649,18 @@ If you want to compile it as a module, say M here and read . 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 @@ -2610,7 +2720,7 @@ 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. + See for download instructions. If unsure, say 'N'. @@ -2668,6 +2778,36 @@ If you want to compile it as a module, say M here and read . 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 @@ -2714,6 +2854,14 @@ If you want to compile it as a module, say M here and read . 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 @@ -2731,7 +2879,7 @@ 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'. @@ -2766,6 +2914,15 @@ If you want to compile it as a module, say M here and read . 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 @@ -2774,6 +2931,14 @@ If you want to compile it as a module, say M here and read . 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 @@ -3278,6 +3443,16 @@ a module, say M here and read . 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 @@ -3511,6 +3686,16 @@ 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 . + MCA support CONFIG_MCA MicroChannel Architecture is found in some IBM PS/2 machines and @@ -5007,6 +5192,12 @@ 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 + . 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 @@ -5311,6 +5502,12 @@ 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 + . The module will be called + ipip.o + GRE tunnels over IP CONFIG_NET_IPGRE Tunneling means encapsulating data of one protocol type within @@ -5323,6 +5520,12 @@ 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 + . 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 @@ -5404,14 +5607,6 @@ It is safe to say N here for now. -# 2.5 tree only -IPv6: routing messages via old netlink -CONFIG_IPV6_NETLINK - You can say Y here to receive routing messages from the IPv6 code - through the old netlink interface. However, a better option is to - say Y to "Kernel/User network link driver" and to "Routing - messages" instead. - Kernel httpd acceleration CONFIG_KHTTPD The kernel httpd acceleration daemon (kHTTPd) is a (limited) web @@ -5653,6 +5848,12 @@ This driver is experimental, which means that it may not work. See the file . + 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 + . 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 @@ -5662,6 +5863,12 @@ networking support, above. Please read the file . + 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 + . The module will be called + cops.o + Dayna firmware support CONFIG_COPS_DAYNA Support COPS compatible cards with Dayna style firmware (Dayna @@ -5810,6 +6017,11 @@ 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 . 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 @@ -5874,9 +6086,10 @@ 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 this as a module ( = code which can be + 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 . + say M here and read . The module + will be called yam.o. BAYCOM picpar and par96 driver for AX.25 CONFIG_BAYCOM_PAR @@ -6166,34 +6379,6 @@ If unsure, say N. -# 2.5 tree only -Kernel/User network link driver -CONFIG_NETLINK - This driver allows for two-way communication between the kernel and - user processes. It does so by creating a new socket family, - PF_NETLINK. Over this socket, the kernel can send and receive - datagrams carrying information. It is documented on many systems in - netlink(7). - - So far, the kernel uses this feature to publish some network related - information if you say Y to "Routing messages", below. You also need - to say Y here if you want to use arpd, a daemon that helps keep the - internal ARP cache (a mapping between IP addresses and hardware - addresses on the local network) small. The ethertap device, which - lets user space programs read and write raw Ethernet frames, also - needs the network link driver. - - If unsure, say Y. - -# 2.5 tree only -Routing messages -CONFIG_RTNETLINK - If you say Y here, user space programs can receive some network - related routing information over the netlink. 'rtmon', supplied - with the iproute2 package (), can read and - interpret this data. Information sent to the kernel over this link - is ignored. - Netlink device emulation CONFIG_NETLINK_DEV This option will be removed soon. Any programs that want to use @@ -6202,6 +6387,12 @@ 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 + . 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 @@ -6540,6 +6731,12 @@ 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 + . 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 @@ -7048,6 +7245,11 @@ intended to replace the previous aic7xxx driver maintained by Doug Ledford since Doug is no longer maintaining that 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 . The module + will be called aic7xxx.o. + Adaptec I2O RAID support CONFIG_SCSI_DPT_I2O This driver supports all of Adaptec's I2O based RAID controllers as @@ -7244,6 +7446,11 @@ 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 . The module + will be called cpqfc.o. + DMX3191D SCSI support CONFIG_SCSI_DMX3191D This is support for Domex DMX3191D SCSI Host Adapters. @@ -7401,6 +7608,11 @@ 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 . 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 @@ -7469,6 +7681,11 @@ Please read 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 . The module + will be called sym53c8xx.o. + PCI DMA addressing mode CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE This option only applies to PCI-SCSI chip that are PCI DAC capable @@ -7531,6 +7748,11 @@ Please read 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 . 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 @@ -7556,6 +7778,11 @@ Please read 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 . 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 @@ -8128,10 +8355,10 @@ in the kernel source in and - 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 - . + 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 . The module + will be called gdth.o. IOMEGA parallel port (ppa - older drives) CONFIG_SCSI_PPA @@ -8221,6 +8448,11 @@ 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 . 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 @@ -8648,9 +8880,10 @@ a modem (not a synchronous or ISDN modem) to contact your ISP, you need this option. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read . + 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 . The module + will be called ppp_async.o. If unsure, say Y. @@ -8660,10 +8893,10 @@ (HDLC) tty devices, such as the SyncLink adapter. These devices are often used for high-speed leased lines like T1/E1. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read - . + 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 . The module + will be called ppp_synctty.o. PPP Deflate compression CONFIG_PPP_DEFLATE @@ -8674,10 +8907,10 @@ Deflate compression method as well for this to be useful. Even if they don't support it, it is safe to say Y here. - This code is also available as a module (code which can be inserted - into and removed from the running kernel). If you want to compile - it as a module, say M here and read - . + 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 . The module + will be called ppp_deflate.o. PPP BSD-Compress compression CONFIG_PPP_BSDCOMP @@ -9096,6 +9329,11 @@ configure your card and that /etc/pcmcia/wireless.opts works : + 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 . 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 @@ -9134,6 +9372,11 @@ configure your card and that /etc/pcmcia/wireless.opts works: . + 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 . 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 @@ -9168,6 +9411,11 @@ for location). You also want to check out the PCMCIA-HOWTO, available from . + 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 . 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 @@ -9353,6 +9601,11 @@ 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 . 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 @@ -9558,6 +9811,20 @@ whenever you want). If you want to compile it as a module, say M here and read . +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 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 . + CSZ packet scheduler CONFIG_NET_SCH_CSZ Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet @@ -9839,6 +10106,11 @@ 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 . 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 @@ -10133,7 +10405,7 @@ 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 . + can be found at or . Support for HDLC and syncPPP protocols on MultiGate boards CONFIG_COMX_PROTO_PPP @@ -10207,6 +10479,11 @@ 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 . The module + will be called hdlc.o. + If unsure, say N here. Raw HDLC support @@ -10259,6 +10536,11 @@ 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 . The module + will be called n2.o. + If unsure, say N here. Moxa C101 support @@ -10267,6 +10549,11 @@ Technologies Co., Ltd. If you have such a card, say Y here and see + 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 . The module + will be called c101.o. + If unsure, say N here. Ethernet (10 or 100Mbit) @@ -10474,12 +10761,14 @@ in case your mainboard has memory consistency issues. If unsure, say N. -Support for automatic channel equalization +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 tries to match the transceiver - to the cable characteristics. This is experimental since hardly - documented by the manufacturer. If unsure, say N. + 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 @@ -10488,6 +10777,14 @@ 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 @@ -10609,6 +10906,16 @@ Support for the Sun GEM chip, aka Sun GigabitEthernet/P 2.0. See also . + 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 . The module + will be called sungem.o. + Broadcom Tigon3 support CONFIG_TIGON3 This driver supports Broadcom Tigon3 based gigabit Ethernet cards. @@ -10639,6 +10946,123 @@ say M here and read . 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 + . + + 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 as well + as . + +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 + 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: + + + + For general information and support, go to the Intel support + website at: + + + + More specific information on configuring the driver is in + . + + 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 as well + as . + AMD LANCE and PCnet (AT1500 and NE2100) support CONFIG_LANCE If you have a network (Ethernet) card of this type, say Y and read @@ -10798,10 +11222,10 @@ and in the comments at the beginning of . - If you want to compile this as a module ( = code which can be + 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 as well as - . + say M here and read . The module + will be called 3c59x.o. Other ISA cards CONFIG_NET_ISA @@ -10852,6 +11276,11 @@ documentation in 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 . 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 @@ -10861,12 +11290,22 @@ ARCnet documentation in 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 . 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 . 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 @@ -11115,6 +11554,11 @@ More specific information and updates are available from . + 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 . 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 @@ -11171,6 +11615,11 @@ 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 . 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 @@ -11340,12 +11789,22 @@ cards. Specifications and data at . + 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 . 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 . 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 @@ -11431,6 +11890,11 @@ More specific information and updates are available from . + 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 . 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 @@ -11448,6 +11912,19 @@ More specific information and updates are available from . + 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 . 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) @@ -11795,6 +12272,11 @@ 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 . The module + will be called defxx.o. + SysKonnect FDDI PCI support CONFIG_SKFP Say Y here if you have a SysKonnect FDDI PCI adapter. @@ -12181,6 +12663,12 @@ 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 + . 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. @@ -12193,6 +12681,12 @@ 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 + . 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. @@ -12213,6 +12707,12 @@ 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 + . The module will be called + redboot.o + Compaq bootldr partition table parsing CONFIG_MTD_BOOTLDR_PARTS The Compaq bootldr deals with multiple 'images' in flash devices @@ -12254,6 +12754,12 @@ 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 + . 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 @@ -12274,6 +12780,12 @@ 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 + . 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) @@ -12283,6 +12795,12 @@ 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 + . 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 @@ -12297,6 +12815,12 @@ 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 + . 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 @@ -12311,6 +12835,12 @@ 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 + . 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 @@ -12327,6 +12857,12 @@ option. Visit 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 + . 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 @@ -12419,6 +12955,12 @@ 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 + . 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 @@ -12427,16 +12969,34 @@ 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 + . The module will be called + amd_flash.o + 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 + . 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 + . The module will be called + map_rom.o + JEDEC device support CONFIG_MTD_JEDEC Enable older older JEDEC flash interface devices for self @@ -12446,6 +13006,12 @@ 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 + . 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 @@ -12476,6 +13042,12 @@ 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 + . 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 @@ -12529,6 +13101,12 @@ 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 + . 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 @@ -12626,6 +13204,12 @@ Computer. More information on the board is available at . + 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 + . 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 @@ -12633,11 +13217,23 @@ Board Computer. More information on the board is available at . + 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 + . 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 + . 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 @@ -12663,6 +13259,12 @@ 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 + . 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 @@ -12678,6 +13280,12 @@ 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 + . 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 @@ -12692,6 +13300,12 @@ 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 + . The module will be called + doc2001.o + Probe for DiskOnChip devices CONFIG_MTD_DOCPROBE This isn't a real config option, it's derived. @@ -12751,6 +13365,12 @@ 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 + . 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 @@ -12769,12 +13389,24 @@ 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 + . The module will be called + slram.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 + . 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 @@ -12817,6 +13449,12 @@ 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 + . 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 @@ -12827,6 +13465,12 @@ 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 + . 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. @@ -12844,6 +13488,12 @@ 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 + . 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 @@ -12851,6 +13501,12 @@ 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 + . 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 @@ -13108,9 +13764,9 @@ The module will be called wacom.o. If you want to compile it as a module, say M here and read . -Aiptek 8000U tablet support +Aiptek 6000U/8000U tablet support CONFIG_USB_AIPTEK - Say Y here if you want to use the USB version of the Aiptek 8000U + Say Y here if you want to use the USB version of the Aiptek 6000U/8000U tablet. Make sure to say Y to "Event interface support" (CONFIG_INPUT_EVDEV) as well. @@ -13242,7 +13898,6 @@ 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 . - USB Modem (CDC ACM) support CONFIG_USB_ACM @@ -13418,6 +14073,14 @@ 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. @@ -13710,7 +14373,7 @@ 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/ + You can also check for updates at This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). @@ -13761,6 +14424,7 @@ 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 @@ -13940,6 +14604,11 @@ 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 @@ -13949,7 +14618,7 @@ 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 . + a module, say M here and read . USB Auerswald ISDN device support CONFIG_USB_AUERSWALD @@ -13959,7 +14628,26 @@ 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 . + a module, say M here and read + +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. Tieman Voyager USB Braille display support CONFIG_USB_BRLVOYAGER @@ -13972,6 +14660,18 @@ The module will be called brlvger.o. If you want to compile it as a module, say M here and read . +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 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 . + D-Link DSB-R100 FM radio support CONFIG_USB_DSBR Say Y here if you want to connect this type of radio to your @@ -14257,6 +14957,27 @@ The module will be called bluetooth.o. If you want to compile it as a module, say M here and read . +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 . + Minix fs support CONFIG_MINIX_FS Minix is a simple operating system used in many classes about OS's. @@ -14314,12 +15035,13 @@ Publish some reiserfs-specific info under /proc/fs/reiserfs CONFIG_REISERFS_PROC_INFO - Create under /proc/fs/reiserfs hierarchy of files, displaying - various ReiserFS statistics and internal data on the expense of - making your kernel or module slightly larger (+8 KB). This also - increases amount of kernel memory required for each mount. Almost - everyone but ReiserFS developers and people fine-tuning reiserfs or - tracing problems should say N. + 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 @@ -14441,6 +15163,35 @@ 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 @@ -14884,13 +15635,10 @@ 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 DEVELOPER ONLY +Provide NFS over TCP server support EXPERIMENTAL CONFIG_NFSD_TCP - If you are a developer and want to work on fixing problems with - NFS server over TCP support, say Y here. If unsure, say N. - - Some problems can be found by looking for FIXME in - . + 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 @@ -15331,12 +16079,6 @@ were partitioned using EFI GPT. Presently only useful on the IA-64 platform. -/dev/guid support (EXPERIMENTAL) -CONFIG_DEVFS_GUID - Say Y here if you would like to access disks and partitions by - their Globally Unique Identifiers (GUIDs) which will appear as - symbolic links in /dev/guid. - Ultrix partition table support CONFIG_ULTRIX_PARTITION Say Y here if you would like to be able to read the hard disk @@ -15345,9 +16087,11 @@ IBM disk label and partition support CONFIG_IBM_PARTITION - Say Y here if you would like to be able to read the hard disk - partition table format used by IBM DASD disks operating under CMS. - Otherwise, say N. + 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 @@ -15375,6 +16119,25 @@ 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. @@ -16487,6 +17250,17 @@ 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 @@ -17929,20 +18703,6 @@ computer, say `Y' here to support its built-in watchdog timer feature. See the help for CONFIG_WATCHDOG for discussion. -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 likely 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 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 . Most - people will say N. - ALi M7101 Watchdog Timer CONFIG_ALIM7101_WDT This is the driver for the hardware watchdog on the ALi M7101 PMU @@ -18007,11 +18767,11 @@ module, say M here and read . Most people will say N. -SuperH 3/4 Watchdog +SuperH Watchdog CONFIG_SH_WDT This driver adds watchdog support for the integrated watchdog in the - SuperH 3 and 4 processors. If you have one of these processors, say Y, - otherwise say N. + 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). @@ -18051,6 +18811,12 @@ Toshiba Linux utilities web site at: . + 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 + . The module will be called + toshiba.o + Say Y if you intend to run this kernel on a Toshiba portable. Say N otherwise. @@ -18067,6 +18833,12 @@ 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 + . 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: . @@ -18102,6 +18874,12 @@ 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 + . 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 @@ -18109,6 +18887,12 @@ 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 + . The module will be called + cpuid.o + SBC-60XX Watchdog Timer CONFIG_60XX_WDT This driver can be used with the watchdog timer found on some @@ -18187,9 +18971,10 @@ 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 50 bytes of non-volatile memory - in the real time clock (RTC), which is contained in every PC and - most Ataris. + 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 @@ -19406,6 +20191,12 @@ 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 @@ -19581,16 +20372,6 @@ hardware debugging with a logic analyzer and need to see all traffic on the bus. -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. - -AU1000 serial 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. - AU1000 ethernet controller on SGI MIPS system CONFIG_MIPS_AU1000_ENET If you have an Alchemy Semi AU1000 ethernet controller @@ -19671,6 +20452,11 @@ 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 . 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 @@ -19705,6 +20491,11 @@ Please read the file . + 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 . 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 @@ -19729,6 +20520,11 @@ 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 . 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 @@ -19794,7 +20590,6 @@ Enable this if you like to use ISDN in US on a NI1 basic rate interface. -# 2.4 tree only Maximum number of cards supported by HiSax CONFIG_HISAX_MAX_CARDS This is used to allocate a driver-internal structure array with one @@ -20024,15 +20819,30 @@ 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 . 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 . 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 . 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, @@ -20074,6 +20884,11 @@ 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 . 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 @@ -20096,6 +20911,11 @@ 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 . 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 @@ -20124,6 +20944,11 @@ 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 . 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 @@ -20146,12 +20971,22 @@ 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 . 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 . The module + will be called b1isa.o. + AVM B1 PCI support -CONFIG_ISDN_DRV_AVMB1_B1PCI +CONFIG_ISDN_DRV_AVMB1_B1CICI Enable support for the PCI version of the AVM B1 card. AVM B1 PCI V4 support @@ -20163,25 +20998,50 @@ 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 . 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 . 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 . 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 . 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 . 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 @@ -20196,6 +21056,11 @@ isdn4k-utils package. Please read the file 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 . The module + will be called act2000.o. + Auvertech TurboPAM support CONFIG_ISDN_DRV_TPAM This enables support for the Auvertech TurboPAM ISDN-card. @@ -20217,6 +21082,11 @@ Please read the file 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 . 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. @@ -20283,7 +21153,7 @@ Kernel support for 32-bit ELF binaries CONFIG_BINFMT_ELF32 - This allows you to run 32-bit Linux/ELF binaries on your Ultra. + 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 @@ -20369,7 +21239,7 @@ DBRI Lowlevel Driver CONFIG_SPARCAUDIO_DBRI This driver supports the DBRI audio interface found on the SS10, - SS20, Sparcbook 3, and Voyager systems. + SS20, LX, Sparcbook 3, and Voyager systems. Dummy Lowlevel Driver CONFIG_SPARCAUDIO_DUMMY @@ -20436,6 +21306,19 @@ Say Y here to compile SCO support into the kernel or say M to compile it as module (sco.o). +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 . + + Say Y here to compile BNEP support into the kernel or say M to + compile it as module (bnep.o). + HCI UART driver CONFIG_BLUEZ_HCIUART Bluetooth HCI UART driver. @@ -20464,18 +21347,9 @@ 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 firmware download support -CONFIG_BLUEZ_USB_FW_LOAD - Firmware download support for Bluetooth USB devices. - This support is required for devices like Broadcom BCM2033. - - HCI USB driver uses external firmware downloader program provided - in BlueFW package. - For more information, see . - HCI USB zero packet support CONFIG_BLUEZ_USB_ZERO_PACKET - Support for USB zero packets. + Support for USB zero packets. This option is provided only as a work around for buggy Bluetooth USB devices. Do _not_ enable it unless you know for sure that your device requires zero packets. @@ -20494,11 +21368,37 @@ Bluetooth HCI DTL1 (PC Card) driver. This driver provides support for Bluetooth PCMCIA devices with Nokia DTL1 interface: - Nokia Bluetooth PC Card, Socketcom Bluetooth CF module + 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 . + + 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). + # The following options are for Linux when running on the Hitachi # SuperH family of RISC microprocessors. @@ -20527,6 +21427,11 @@ "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 et al. @@ -20931,12 +21836,6 @@ Hades. This increases the SCSI transfer rates at least ten times compared to PIO transfers. -Sun3 NCR5380 OBIO 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. Note that this - driver does not provide support for VME SCSI boards. - Sun3x ESP SCSI CONFIG_SUN3X_ESP This option will enable support for the ESP SCSI controller found @@ -20990,11 +21889,6 @@ General Linux information on the Sun 3 series (now discontinued) is at . -Sun3x ESP SCSI driver -CONFIG_SUN3X_ESP - The ESP was an on-board SCSI controller used on Sun 3/80 - machines. Say Y here to compile in support for it. - PCMCIA NE2000 and compatibles support CONFIG_APNE If you have a PCMCIA NE2000 compatible adapter, say Y. Otherwise, @@ -21005,19 +21899,6 @@ want). The module is called apne.o. If you want to compile it as a module, say M here and read . -Sun3/Sun3x on-board LANCE support -CONFIG_SUN3LANCE - This driver enables support for the on-board LANCE ethernet adapter - found on the Sun 3/50, 3/60, and 3/80 workstations. If you have - one of these workstations, and would like Ethernet, say Y. - Otherwise, 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. - Atari Lance support CONFIG_ATARILANCE Say Y to include support for several Atari Ethernet adapters based @@ -21354,6 +22235,8 @@ Select APUS if configuring for a PowerUP Amiga. More information is available at: . + Note that Total Impact briQ is handled as a CHRP machine. + Synergy-Gemini CONFIG_GEMINI Select Gemini if configuring for a Synergy Microsystems' Gemini @@ -21712,7 +22595,7 @@ CU824: VMEBus Board with PCI extension with MPC8240 CPU - Manufacturer: MicroSys GmbH, http://www.microsys.de/ + Manufacturer: MicroSys GmbH, Date of Release: early 2001 (?) End of life: - URL: @@ -22398,7 +23281,7 @@ IPL device on another question, that pops up, when you select CONFIG_IPL. -IPL from a /390 tape unit +IPL from a S/390 tape unit CONFIG_IPL_TAPE Select this option if you want to IPL the image from a Tape. @@ -22407,18 +23290,22 @@ Select this option if you are running under VM/ESA and want to IPL the image from the emulated card reader. -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. +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. -Enable DASD fast write -CONFIG_DASD_FAST_IO - Enable fast I/O for DASDs. That means that the next I/O command - is already issued at interrupt time, if an I/O request is pending. - This option gives significant speedup of I/O, because we don't - schedule the bottom-halves as often as Intel. +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 @@ -22427,18 +23314,40 @@ 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 devices are the most commonly used devices. You should enable - this option unless you are very sure you have no ECKD device. + 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. -CKD devices -CONFIG_DASD_CKD - CKD devices are currently unsupported. +ECKD demand loading +CONFIG_DASD_AUTO_ECKD + This option enables demand loading of the ECKD module. Support for FBA hard disks CONFIG_DASD_FBA - FBA devices are currently unsupported. + 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 @@ -22476,6 +23385,16 @@ 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 @@ -22484,8 +23403,9 @@ 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 and - hardware drivers. + 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 @@ -22506,14 +23426,23 @@ Support for 3490 tape hardware CONFIG_S390_TAPE_3490 - Select this option if you want to access IBM 3480 magnetic + 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 3490 magnetic + 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 @@ -22524,12 +23453,6 @@ 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". -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". - XPRAM disk support CONFIG_BLK_DEV_XPRAM Select this option if you want to use your expanded storage on S/390 @@ -22552,6 +23475,20 @@ 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". + Kernel support for 31 bit ELF binaries CONFIG_S390_SUPPORT Select this option if you want to enable your system kernel to @@ -22608,6 +23545,12 @@ 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 + . 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 @@ -23014,6 +23957,11 @@ 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. @@ -23222,13 +24170,24 @@ SRM environment variables in procfs CONFIG_SRM_ENV - If you enable this option, a subdirectory called srm_environment - will give you access to the most important SRM environment - variables. If you've got an Alpha style system supporting - SRC, then it is a good idea to say Yes or Module to this driver. + 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 if you build it as a module. + srm_env.o then. Footbridge internal watchdog CONFIG_21285_WATCHDOG @@ -23449,6 +24408,11 @@ 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 . The module + will be called ns83820.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 @@ -23505,6 +24469,11 @@ 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 . 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 @@ -23515,6 +24484,11 @@ 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 . 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 @@ -23524,6 +24498,11 @@ 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 . 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 @@ -23533,6 +24512,11 @@ 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 . 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 @@ -23542,6 +24526,23 @@ 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 . 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 + . 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: + + Old Belkin dongle CONFIG_OLD_BELKIN_DONGLE Say Y here if you want to build support for the Adaptec Airport 1000 @@ -23549,6 +24550,30 @@ and read . The module will be called old_belkin.o. Some information is contained in the comments at the top of . + +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 + . 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 + VME (Motorola and BVM) support CONFIG_VME @@ -24400,15 +25425,19 @@ As of the time of this writing, most hardware is DIG compliant, so the "DIG-compliant" option is usually the right choice. - HP-simulator For the HP simulator - (). + HP-simulator For the HP simulator (). + HP-zx1 For HP zx1 Platforms. SN1 For SGI SN1 Platforms. SN2 For SGI SN2 Platforms. - DIG-compliant For DIG ("Developer's Interface Guide") compliant - system. + DIG-compliant For DIG ("Developer's Interface Guide") compliant systems. 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). + CONFIG_IA64_SGI_SN_SIM Build a kernel that runs on both the SGI simulator AND on hardware. There is a very slight performance penalty on hardware for including this @@ -24456,16 +25485,6 @@ can select this option to disable the VHPT for debugging. If you're unsure, answer N. -Enable McKinley A-step specific code -CONFIG_MCKINLEY_ASTEP_SPECIFIC - Select this option to build a kernel for an IA64 McKinley system - with any A-stepping CPU. - -Enable McKinley A0/A1-step specific code -CONFIG_MCKINLEY_A0_SPECIFIC - Select this option to build a kernel for an IA64 McKinley system - with an A0 or A1 stepping CPU. - Turn on compare-and-exchange bug checking (slow!) CONFIG_IA64_DEBUG_CMPXCHG Selecting this option turns on bug checking for the IA64 @@ -24490,9 +25509,7 @@ 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. This option is ignored if you are compiling - for an Itanium A step processor (CONFIG_ITANIUM_ASTEP_SPECIFIC). If - you're unsure, select Y. + after Read violations. If you're unsure, select Y. Performance monitor support CONFIG_PERFMON @@ -24526,15 +25543,6 @@ the IA32 instruction set. Say Y here to build in kernel support for this. If in doubt, say Y. -/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. - Physical memory granularity (16 MB) CONFIG_IA64_GRANULE_16MB IA64 identity-mapped regions use a large page size. We'll call such @@ -24642,6 +25650,18 @@ 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 + . + +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 @@ -24998,7 +26018,7 @@ 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, + information: If unsure, you can safely say 'N'. ARC console support @@ -25020,14 +26040,6 @@ ; picture of the board at . -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". - Support ARM926T processor CONFIG_CPU_ARM926T This is a variant of the ARM920. It has slightly different @@ -25047,21 +26059,6 @@ written) to implement the policy. If you don't understand what this is all about, it's safe to say 'N'. -Automatic activation of DIAG module -CONFIG_DASD_AUTO_DIAG - Enable this option if you want your DIAG discipline module loaded - on DASD driver startup. - -Automatic activation of ECKD module -CONFIG_DASD_AUTO_ECKD - Enable this option if you want your ECKD discipline module loaded - on DASD driver startup. - -Automatic activation of FBA module -CONFIG_DASD_AUTO_FBA - Enable this option if you want your FBA discipline module loaded - on DASD driver startup. - SiS CONFIG_DRM_SIS Choose this option if you have a SIS graphics card. AGP support is @@ -25155,16 +26152,6 @@ When in doubt, say N. -Control-Program Identification -CONFIG_HWC_CPI - This option enables the hardware console interface for system - identification This is commonly used for workload management and - gives you a nice name for the system on the service element. - Please select this option as a module since built-in operation is - completely untested. - You should only select this option if you know what you are doing, - need this feature and intend to run your kernel in LPAR. - 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 @@ -25240,37 +26227,12 @@ 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. -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". - -Pseudo page fault support -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. - 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. -VM shared kernel support -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. - New bus configuration (EXPERIMENTAL) CONFIG_TULIP_MWI This configures your Tulip card specifically for the card and diff -urN linux-2.4.19/Documentation/DocBook/Makefile linux-2.4.20/Documentation/DocBook/Makefile --- linux-2.4.19/Documentation/DocBook/Makefile Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/DocBook/Makefile Thu Nov 28 15:53:08 2002 @@ -1,7 +1,8 @@ BOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml \ kernel-api.sgml parportbook.sgml kernel-hacking.sgml \ kernel-locking.sgml via-audio.sgml mousedrivers.sgml sis900.sgml \ - deviceiobook.sgml procfs-guide.sgml tulip-user.sgml + deviceiobook.sgml procfs-guide.sgml tulip-user.sgml \ + journal-api.sgml PS := $(patsubst %.sgml, %.ps, $(BOOKS)) PDF := $(patsubst %.sgml, %.pdf, $(BOOKS)) @@ -138,6 +139,17 @@ parportbook.sgml: parportbook.tmpl $(TOPDIR)/drivers/parport/init.c $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/parport/init.c <$< >$@ + +JBDSOURCES := $(TOPDIR)/include/linux/jbd.h \ + $(TOPDIR)/fs/jbd/journal.c \ + $(TOPDIR)/fs/jbd/recovery.c \ + $(TOPDIR)/fs/jbd/transaction.c + +journal-api.sgml: journal-api.tmpl $(JBDSOURCES) + $(TOPDIR)/scripts/docgen $(JBDSOURCES) \ + journal-api.sgml + + DVI := $(patsubst %.sgml, %.dvi, $(BOOKS)) AUX := $(patsubst %.sgml, %.aux, $(BOOKS)) TEX := $(patsubst %.sgml, %.tex, $(BOOKS)) diff -urN linux-2.4.19/Documentation/DocBook/journal-api.tmpl linux-2.4.20/Documentation/DocBook/journal-api.tmpl --- linux-2.4.19/Documentation/DocBook/journal-api.tmpl Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/DocBook/journal-api.tmpl Thu Nov 28 15:53:08 2002 @@ -0,0 +1,297 @@ + + + + The Linux Journalling API + + + Roger + Gammans + +
+ rgammans@computer-surgery.co.uk +
+
+
+
+ + + + Stephen + Tweedie + +
+ sct@redhat.com +
+
+
+
+ + + 2002 + Roger Gammans + + + + + This documentation is free software; you can redistribute + it and/or modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later + version. + + + + This program is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, + MA 02111-1307 USA + + + + For more details see the file COPYING in the source + distribution of Linux. + + +
+ + + + + Overview + + Details + +The journalling layer is easy to use. You need to +first of all create a journal_t data structure. There are +two calls to do this dependent on how you decide to allocate the physical +media on which the journal resides. The journal_init_inode() call +is for journals stored in filesystem inodes, or the journal_init_dev() +call can be use for journal stored on a raw device (in a continuous range +of blocks). A journal_t is a typedef for a struct pointer, so when +you are finally finished make sure you call journal_destroy() on it +to free up any used kernel memory. + + + +Once you have got your journal_t object you need to 'mount' or load the journal +file, unless of course you haven't initialised it yet - in which case you +need to call journal_create(). + + + +Most of the time however your journal file will already have been created, but +before you load it you must call journal_wipe() to empty the journal file. +Hang on, you say , what if the filesystem wasn't cleanly umount()'d . Well, it is the +job of the client file system to detect this and skip the call to journal_wipe(). + + + +In either case the next call should be to journal_load() which prepares the +journal file for use. Note that journal_wipe(..,0) calls journal_skip_recovery() +for you if it detects any outstanding transactions in the journal and similarly +journal_load() will call journal_recover() if necessary. +I would advise reading fs/ext3/super.c for examples on this stage. +[RGG: Why is the journal_wipe() call necessary - doesn't this needlessly +complicate the API. Or isn't a good idea for the journal layer to hide +dirty mounts from the client fs] + + + +Now you can go ahead and start modifying the underlying +filesystem. Almost. + + + + + +You still need to actually journal your filesystem changes, this +is done by wrapping them into transactions. Additionally you +also need to wrap the modification of each of the the buffers +with calls to the journal layer, so it knows what the modifications +you are actually making are. To do this use journal_start() which +returns a transaction handle. + + + +journal_start() +and its counterpart journal_stop(), which indicates the end of a transaction +are nestable calls, so you can reenter a transaction if necessary, +but remember you must call journal_stop() the same number of times as +journal_start() before the transaction is completed (or more accurately +leaves the the update phase). Ext3/VFS makes use of this feature to simplify +quota support. + + + +Inside each transaction you need to wrap the modifications to the +individual buffers (blocks). Before you start to modify a buffer you +need to call journal_get_{create,write,undo}_access() as appropriate, +this allows the journalling layer to copy the unmodified data if it +needs to. After all the buffer may be part of a previously uncommitted +transaction. +At this point you are at last ready to modify a buffer, and once +you are have done so you need to call journal_dirty_{meta,}data(). +Or if you've asked for access to a buffer you now know is now longer +required to be pushed back on the device you can call journal_forget() +in much the same way as you might have used bforget() in the past. + + + + + + +A journal_flush() may be called at any time to commit and checkpoint +all your transactions. + + + +Then at umount time , in your put_super() (2.4) or write_super() (2.5) +you can then call journal_destroy() to clean up your in-core journal object. + + + + +Unfortunately there a couple of ways the journal layer can cause a deadlock. +The first thing to note is that each task can only have +a single outstanding transaction at any one time, remember nothing +commits until the outermost journal_stop(). This means +you must complete the transaction at the end of each file/inode/address +etc. operation you perform, so that the journalling system isn't re-entered +on another journal. Since transactions can't be nested/batched +across differing journals, and another filesystem other than +yours (say ext3) may be modified in a later syscall. + + + +The second case to bear in mind is that journal_start() can +block if there isn't enough space in the journal for your transaction +(based on the passed nblocks param) - when it blocks it merely(!) needs to +wait for transactions to complete and be committed from other tasks, +so essentially we are waiting for journal_stop(). So to avoid +deadlocks you must treat journal_start/stop() as if they +were semaphores and include them in your semaphore ordering rules to prevent +deadlocks. Note that journal_extend() has similar blocking behaviour to +journal_start() so you can deadlock here just as easily as on journal_start(). + + + +Try to reserve the right number of blocks the first time. ;-). + + +Another wriggle to watch out for is your on-disk block allocation strategy. +why? Because, if you undo a delete, you need to ensure you haven't reused any +of the freed blocks in a later transaction. One simple way of doing this +is make sure any blocks you allocate only have checkpointed transactions +listed against them. Ext3 does this in ext3_test_allocatable(). + + + +Lock is also providing through journal_{un,}lock_updates(), +ext3 uses this when it wants a window with a clean and stable fs for a moment. +eg. + + + journal_lock_updates() //stop new stuff happening.. + journal_flush() // checkpoint everything. + ..do stuff on stable fs + journal_unlock_updates() // carry on with filesystem use. + + +The opportunities for abuse and DOS attacks with this should be obvious, +if you allow unprivileged userspace to trigger codepaths containing these +calls. + + + + +Summary + +Using the journal is a matter of wrapping the different context changes, +being each mount, each modification (transaction) and each changed buffer +to tell the journalling layer about them. + +Here is a some pseudo code to give you an idea of how it works, as +an example. + + journal_t* my_jnrl = journal_create(); + journal_init_{dev,inode}(jnrl,...) + if (clean) journal_wipe(); + journal_load(); + + foreach(transaction) { /*transactions must be + completed before + a syscall returns to + userspace*/ + + handle_t * xct=journal_start(my_jnrl); + foreach(bh) { + journal_get_{create,write,undo}_access(xact,bh); + if ( myfs_modify(bh) ) { /* returns true + if makes changes */ + journal_dirty_{meta,}data(xact,bh); + } else { + journal_forget(bh); + } + } + journal_stop(xct); + } + journal_destroy(my_jrnl); + + + + + + Data Types + + The journalling layer uses typedefs to 'hide' the concrete definitions + of the structures used. As a client of the JBD layer you can + just rely on the using the pointer as a magic cookie of some sort. + + Obviously the hiding is not enforced as this is 'C'. + + Structures +!Iinclude/linux/jbd.h + + + + + Functions + + The functions here are split into two groups those that + affect a journal as a whole, and those which are used to + manage transactions + + Journal Level +!Efs/jbd/journal.c +!Efs/jbd/recovery.c + + Transasction Level +!Efs/jbd/transaction.c + + + + See also + + + + Journaling the Linux ext2fs Filesystem,LinuxExpo 98, Stephen Tweedie + + + + + + + Ext3 Journalling FileSystem , OLS 2000, Dr. Stephen Tweedie + + + + + +
diff -urN linux-2.4.19/Documentation/DocBook/kernel-hacking.tmpl linux-2.4.20/Documentation/DocBook/kernel-hacking.tmpl --- linux-2.4.19/Documentation/DocBook/kernel-hacking.tmpl Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/DocBook/kernel-hacking.tmpl Thu Nov 28 15:53:08 2002 @@ -1091,18 +1091,17 @@ Initializing structure members - The preferred method of initializing structures is to use the - gcc Labeled Elements extension, eg: + The preferred method of initializing structures is to use + designated initialisers, as defined by ISO C99, eg: static struct block_device_operations opt_fops = { - open: opt_open, - release: opt_release, - ioctl: opt_ioctl, - check_media_change: opt_media_change, + .open = opt_open, + .release = opt_release, + .ioctl = opt_ioctl, + .check_media_change = opt_media_change, }; - This makes it easy to grep for, and makes it clear which structure fields are set. You should do this because it looks diff -urN linux-2.4.19/Documentation/DocBook/parportbook.tmpl linux-2.4.20/Documentation/DocBook/parportbook.tmpl --- linux-2.4.19/Documentation/DocBook/parportbook.tmpl Thu Oct 25 00:07:40 2001 +++ linux-2.4.20/Documentation/DocBook/parportbook.tmpl Thu Nov 28 15:53:08 2002 @@ -595,7 +595,7 @@ So, the first thing for the device driver to do is tell parport that it wants to know what parallel ports are on the system. To do this, it uses the - parport_register_device function: + parport_register_driver function: diff -urN linux-2.4.19/Documentation/SubmittingDrivers linux-2.4.20/Documentation/SubmittingDrivers --- linux-2.4.19/Documentation/SubmittingDrivers Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/SubmittingDrivers Thu Nov 28 15:53:08 2002 @@ -2,9 +2,8 @@ --------------------------------------- This document is intended to explain how to submit device drivers to the -Linux 2.2 and 2.4 kernel trees. Note that if you are interested in video -card drivers you should probably talk to XFree86 (http://www.xfree86.org) -instead. +various kernel trees. Note that if you are interested in video card drivers +you should probably talk to XFree86 (http://www.xfree86.org) instead. Also read the Documentation/SubmittingPatches document. @@ -35,21 +34,22 @@ maintainer then please contact Alan Cox Linux 2.4: - This kernel tree is under active development. The same rules apply - as 2.2 but you may wish to submit your driver via linux-kernel (see - resources) and follow that list to track changes in API's. These - should no longer be occuring as we are now in a code freeze. - The final contact point for Linux 2.4 submissions is - . + The same rules apply as 2.2. The final contact point for Linux 2.4 + submissions is Marcelo Tosatti . + +Linux 2.5: + The same rules apply as 2.4 except that you should follow linux-kernel + to track changes in API's. The final contact point for Linux 2.5 + submissions is Linus Torvalds . What Criteria Determine Acceptance ---------------------------------- -Licensing: The code must be released to us under the GNU General Public License. - We don't insist on any kind of exclusively GPL licensing, - and if you wish the driver to be useful to other communities - such as BSD you may well wish to release under multiple - licenses. +Licensing: The code must be released to us under the + GNU General Public License. We don't insist on any kind + of exclusively GPL licensing, and if you wish the driver + to be useful to other communities such as BSD you may well + wish to release under multiple licenses. Interfaces: If your driver uses existing interfaces and behaves like other drivers in the same class it will be much more likely @@ -64,12 +64,13 @@ maintain them just once seperate them out nicely and note this fact. -Portability: Pointers are not always 32bits, people do not all have - floating point and you shouldn't use inline x86 assembler in - your driver without careful thought. Pure x86 drivers - generally are not popular. If you only have x86 hardware it - is hard to test portability but it is easy to make sure the - code can easily be made portable. +Portability: Pointers are not always 32bits, not all computers are little + endian, people do not all have floating point and you + shouldn't use inline x86 assembler in your driver without + careful thought. Pure x86 drivers generally are not popular. + If you only have x86 hardware it is hard to test portability + but it is easy to make sure the code can easily be made + portable. Clarity: It helps if anyone can see how to fix the driver. It helps you because you get patches not bug reports. If you submit a diff -urN linux-2.4.19/Documentation/SubmittingPatches linux-2.4.20/Documentation/SubmittingPatches --- linux-2.4.19/Documentation/SubmittingPatches Sun Dec 3 17:48:18 2000 +++ linux-2.4.20/Documentation/SubmittingPatches Thu Nov 28 15:53:08 2002 @@ -161,7 +161,7 @@ When sending patches to Linus, always follow step #6. Large changes are not appropriate for mailing lists, and some -maintainers. If your patch, uncompressed, exceeds 40Kb in size, +maintainers. If your patch, uncompressed, exceeds 40 kB in size, it is preferred that you store your patch on an Internet-accessible server, and provide instead a URL (link) pointing to your patch. diff -urN linux-2.4.19/Documentation/cdrom/sonycd535 linux-2.4.20/Documentation/cdrom/sonycd535 --- linux-2.4.19/Documentation/cdrom/sonycd535 Wed May 20 18:54:34 1998 +++ linux-2.4.20/Documentation/cdrom/sonycd535 Thu Nov 28 15:53:08 2002 @@ -63,8 +63,8 @@ Thanks also to Eberhard Moenkeberg (emoenke@gwdg.de) for prodding me to place this code into the mainstream Linux source tree (as of Linux version 1.1.91), as well as some patches to make -it a better device citizen. Further thanks to "S. Joel Katz" - for his MODULE patches (see details below), +it a better device citizen. Further thanks to Joel Katz + for his MODULE patches (see details below), Porfiri Claudio for patches to make the driver work with the older CDU-510/515 series, and Heiko Eissfeldt for pointing out that @@ -79,7 +79,7 @@ ken@halcyon.com ------------------------------------------------------------------------------ -(The following is from Joel Katz .) +(The following is from Joel Katz .) To build a version of sony535.o that can be installed as a module, use the following command: @@ -103,7 +103,7 @@ I have an external drive, and I usually leave it powered off. I used to have to reboot if I needed to use the CDROM drive. Now I don't. - Even if you have an internal drive, why waste the 268K of memory + Even if you have an internal drive, why waste the 96K of memory (unswappable) that the driver uses if you use your CD-ROM drive infrequently? This driver will not install (whether compiled in or loaded as a diff -urN linux-2.4.19/Documentation/filesystems/00-INDEX linux-2.4.20/Documentation/filesystems/00-INDEX --- linux-2.4.19/Documentation/filesystems/00-INDEX Wed Jun 20 11:10:27 2001 +++ linux-2.4.20/Documentation/filesystems/00-INDEX Thu Nov 28 15:53:08 2002 @@ -6,6 +6,8 @@ - info and mount options for the Acorn Advanced Disc Filing System. affs.txt - info and mount options for the Amiga Fast File System. +befs.txt + - info for the BeOS file system (BFS) bfs.txt - info for the SCO UnixWare Boot Filesystem (BFS). coda.txt @@ -22,6 +24,8 @@ - info and mount options for the OS/2 HPFS. isofs.txt - info and mount options for the ISO 9660 (CDROM) filesystem. +jfs.txt + - info and mount options for the JFS filesystem. ncpfs.txt - info on Novell Netware(tm) filesystem using NCP protocol. ntfs.txt diff -urN linux-2.4.19/Documentation/filesystems/Locking linux-2.4.20/Documentation/filesystems/Locking --- linux-2.4.19/Documentation/filesystems/Locking Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/filesystems/Locking Thu Nov 28 15:53:08 2002 @@ -45,6 +45,10 @@ int (*revalidate) (struct dentry *); int (*setattr) (struct dentry *, struct iattr *); int (*getattr) (struct dentry *, struct iattr *); + int (*setxattr) (struct dentry *, const char *, void *, size_t, int); + ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t); + ssize_t (*listxattr) (struct dentry *, char *, size_t); + int (*removexattr) (struct dentry *, const char *); locking rules: all may block @@ -61,9 +65,13 @@ follow_link: no no no truncate: yes yes no (see below) setattr: yes if ATTR_SIZE no -permssion: yes no no +permission: yes no no getattr: (see below) revalidate: no (see below) +setxattr: yes yes no +getxattr: yes yes no +listxattr: yes yes no +removexattr: yes yes no Additionally, ->rmdir() has i_zombie on victim and so does ->rename() in case when target exists and is a directory. ->rename() on directories has (per-superblock) ->s_vfs_rename_sem. diff -urN linux-2.4.19/Documentation/filesystems/befs.txt linux-2.4.20/Documentation/filesystems/befs.txt --- linux-2.4.19/Documentation/filesystems/befs.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/filesystems/befs.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,111 @@ +BeOS filesystem for Linux + +Document last updated: Dec 6, 2001 + +WARNING +======= +Make sure you understand that this is alpha software. This means that the +implementation is neither complete nor well-tested. + +I DISCLAIM ALL RESPONSIBILTY FOR ANY POSSIBLE BAD EFFECTS OF THIS CODE! + +LICENSE +===== +This software is covered by the GNU General Public License. +See the file COPYING for the complete text of the license. +Or the GNU website: + +AUTHOR +===== +Current maintainer: Will Dyson +Has been working on the code since Aug 13, 2001. See the changelog for details. + +Original Author: Makoto Kato +His orriginal code can still be found at: +Does anyone know of a more current email address for Makoto? He doesn't respond +to the address given above... + +WHAT IS THIS DRIVER? +================== +This module implements the native filesystem of BeOS +for the linux 2.4.1 and later kernels. Currently it is a read-only implementation. + +Which is it, BFS or BEFS? +================ +Be, Inc said, "BeOS Filesystem is officially called BFS, not BeFS". +But Unixware Boot Filesystem is called bfs, too. And they are already in the +kernel. +Because of this nameing conflict, on Linux the BeOS filesystem is called befs. + +HOW TO INSTALL +============== +step 1. Install the BeFS patch into the source code tree of linux. + +Apply the patchfile to your kernel source tree. +Assuming that your kernel source is in /foo/bar/linux and the patchfile is called +patch-befs-xxx, you would do the following: + + cd /foo/bar/linux + patch -p1 < /path/to/patch-befs-xxx + +if the patching step fails (i.e. there are rejected hunks), you can try to +figure it out yourself (it shouldn't be hard), or mail the maintainer +(Will Dyson ) for help. + +step 2. Configuretion & make kernel + +The linux kernel has many compile-time options. Most of them are beyond the +scope of this document. I suggest the Kernel-HOWTO document as a good general +reference on this topic. + +However, to use the BeFS module, you must enable it at configure time. + + cd /foo/bar/linux + make menuconfig (or xconfig) + +The BeFS module is not a standard part of the linux kernel, so you must first +enable support for experimental code under the "Code maturity level" menu. + +Then, under the "Filesystems" menu will be an option called "BeFS filesystem (experimental)", +or something like that. Enable that option (it is fine to make it a module). + +Save your kernel configuration and then build your kernel. + +step 3. Install + +See the kernel howto for +instructions on this critical step. + +USING BFS +========= +To use the BeOS filesystem, use filesystem type 'befs'. + +ex) + mount -t befs /dev/fd0 /beos + +MOUNT OPTIONS +============= +uid=nnn All files in the partition will be owned by user id nnn. +gid=nnn All files in the partition will be in group nnn. +iocharset=xxx Use xxx as the name of the NLS translation table. +debug The driver will output debugging information to the syslog. + +HOW TO GET LASTEST VERSION +========================== + +The latest version is currently available at: + + +ANY KNOWN BUGS? +=========== +As of Jan 20, 2002: + + None + +SPECIAL THANKS +============== +Dominic Giampalo ... Writing "Practical file system design with Be filesystem" +Hiroyuki Yamada ... Testing LinuxPPC. + + + diff -urN linux-2.4.19/Documentation/filesystems/devfs/ChangeLog linux-2.4.20/Documentation/filesystems/devfs/ChangeLog --- linux-2.4.19/Documentation/filesystems/devfs/ChangeLog Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/filesystems/devfs/ChangeLog Thu Nov 28 15:53:08 2002 @@ -1936,3 +1936,17 @@ - Protected and from changing directory contents +=============================================================================== +Changes for patch v199.15 + +- Switched to ISO C structure field initialisers + +- Switch to set_current_state() and move before add_wait_queue() + +- Updated README from master HTML file + +- Fixed devfs entry leak in when *readdir fails +=============================================================================== +Changes for patch v199.16 + +- Fixed module unload race in diff -urN linux-2.4.19/Documentation/filesystems/devfs/README linux-2.4.20/Documentation/filesystems/devfs/README --- linux-2.4.19/Documentation/filesystems/devfs/README Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/filesystems/devfs/README Thu Nov 28 15:53:08 2002 @@ -3,7 +3,7 @@ Linux Devfs (Device File System) FAQ Richard Gooch -7-APR-2002 +21-JUL-2002 Document languages: @@ -788,6 +788,9 @@ make sure the kernel does not mount devfs at boot time +make sure you have a correct /dev/console entry in your +root file-system (where your disc-based /dev lives) + create the /dev-state directory @@ -1288,9 +1291,10 @@ SCSI Generic Devices -All SCSI CD-ROMs are placed under /dev/sg. A similar naming -scheme is used as for SCSI discs. A SCSI generic device with the -parameters:c=1,b=2,t=3,u=4 would appear as: +The generic (aka. raw) interface for all SCSI devices are placed under +/dev/sg. A similar naming scheme is used as for SCSI discs. A +SCSI generic device with the parameters:c=1,b=2,t=3,u=4 would appear +as: /dev/sg/c1b2t3u4 @@ -1605,6 +1609,23 @@ do that. +I have extra or incorrect entries in /dev + +You may have stale entries in your dev-state area. Check for a +RESTORE configuration line in your devfsd configuration +(typically /etc/devfsd.conf). If you have this line, check +the contents of the specified directory for stale entries. Remove +any entries which are incorrect, then reboot. + + +I get "Unable to open initial console" messages at boot + +This usually happens when you don't have devfs automounted onto +/dev at boot time, and there is no valid +/dev/console entry on your root file-system. Create a valid +/dev/console device node. + + @@ -1756,7 +1777,7 @@ First, remember that no naming scheme will please everybody. You hate the scheme, others love it. Who's to say who's right and who's wrong? Ultimately, the person who writes the code gets to choose, and what -exists now is a combination of the the choices made by the +exists now is a combination of the choices made by the devfs author and the kernel maintainer (Linus). diff -urN linux-2.4.19/Documentation/filesystems/isofs.txt linux-2.4.20/Documentation/filesystems/isofs.txt --- linux-2.4.19/Documentation/filesystems/isofs.txt Wed May 26 10:01:43 1999 +++ linux-2.4.20/Documentation/filesystems/isofs.txt Thu Nov 28 15:53:08 2002 @@ -29,3 +29,10 @@ unhide Show hidden files. session=x Select number of session on multisession CD sbsector=xxx Session begins from sector xxx + +Recommended documents about ISO 9660 standard are located at: +http://www.y-adagio.com/public/standards/iso_cdromr/tocont.htm +ftp://ftp.ecma.ch/ecma-st/Ecma-119.pdf +Quoting from the PDF "This 2nd Edition of Standard ECMA-119 is technically +identical with ISO 9660.", so it is a valid and gratis substitute of the +official ISO specification. diff -urN linux-2.4.19/Documentation/filesystems/jfs.txt linux-2.4.20/Documentation/filesystems/jfs.txt --- linux-2.4.19/Documentation/filesystems/jfs.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/filesystems/jfs.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,43 @@ +IBM's Journaled File System (JFS) for Linux + +JFS Homepage: http://oss.software.ibm.com/jfs/ + +Team members +------------ +Steve Best sbest@us.ibm.com +Dave Kleikamp shaggy@austin.ibm.com +Barry Arndt barndt@us.ibm.com +Christoph Hellwig hch@infradead.org + +The following mount options are supported: + +iocharset=name Character set to use for converting from Unicode to + ASCII. The default is compiled into the kernel as + CONFIG_NLS_DEFAULT. Use iocharset=utf8 for UTF8 + translations. This requires CONFIG_NLS_UTF8 to be set + in the kernel .config file. + +resize=value Resize the volume to blocks. JFS only supports + growing a volume, not shrinking it. This option is only + valid during a remount, when the volume is mounted + read-write. The resize keyword with no value will grow + the volume to the full size of the partition. + +JFS TODO list: + +Plans for our near term development items + + - enhance support for logfile on dedicated partition + - get access control list functionality operational + - get extended attributes functionality operational + +Longer term work items + + - implement defrag utility, for online defragmenting + - add quota support + - add support for block sizes (512,1024,2048) + +Please send bugs, comments, cards and letters to linuxjfs@us.ibm.com. + +The JFS mailing list can be subscribed to by using the link labeled +"Mail list Subscribe" at our web page http://oss.software.ibm.com/jfs/. diff -urN linux-2.4.19/Documentation/filesystems/proc.txt linux-2.4.20/Documentation/filesystems/proc.txt --- linux-2.4.19/Documentation/filesystems/proc.txt Wed Nov 7 14:39:36 2001 +++ linux-2.4.20/Documentation/filesystems/proc.txt Thu Nov 28 15:53:08 2002 @@ -708,36 +708,26 @@ used ones is far behind, you've encountered a peak in your usage of file handles and you don't need to increase the maximum. -inode-state, inode-nr and inode-max ------------------------------------ - -As with file handles, the kernel allocates the inode structures dynamically, -but can't free them yet. - -The value in inode-max denotes the maximum number of inode handlers. This -value should be 3 to 4 times larger than the value in file-max, since stdin, -stdout, and network sockets also need an inode struct to handle them. If you -regularly run out of inodes, you should increase this value. +inode-state and inode-nr +------------------------ The file inode-nr contains the first two items from inode-state, so we'll skip to that file... -inode-state contains three actual numbers and four dummy values. The numbers -are nr_inodes, nr_free_inodes, and preshrink (in order of appearance). +inode-state contains two actual numbers and five dummy values. The numbers +are nr_inodes and nr_free_inodes (in order of appearance). nr_inodes ~~~~~~~~~ -Denotes the number of inodes the system has allocated. This can be slightly -more than inode-max because Linux allocates them one pageful at a time. +Denotes the number of inodes the system has allocated. This number will +grow and shrink dynamically. nr_free_inodes -------------- -Represents the number of free inodes and preshrink is nonzero when nr_inodes -is greater than inode-max and the system needs to prune the inode list instead -of allocating more. - +Represents the number of free inodes. Ie. The number of inuse inodes is +(nr_inodes - nr_free_inodes). super-nr and super-max ---------------------- diff -urN linux-2.4.19/Documentation/ide.txt linux-2.4.20/Documentation/ide.txt --- linux-2.4.19/Documentation/ide.txt Fri Sep 7 09:28:38 2001 +++ linux-2.4.20/Documentation/ide.txt Thu Nov 28 15:53:08 2002 @@ -306,6 +306,9 @@ "idex=serialize" : do not overlap operations on idex and ide(x^1) "idex=reset" : reset interface after probe "idex=dma" : automatically configure/use DMA if possible. + "idex=nohighio" : don't use i/o to high memory addresses on this + interface. i/o to memory locations higher + than ~860MiB will be bounced. The following are valid ONLY on ide0, and the defaults for the base,ctl ports must not be altered. diff -urN linux-2.4.19/Documentation/initrd.txt linux-2.4.20/Documentation/initrd.txt --- linux-2.4.19/Documentation/initrd.txt Sun Dec 3 17:48:18 2000 +++ linux-2.4.20/Documentation/initrd.txt Thu Nov 28 15:53:08 2002 @@ -115,8 +115,12 @@ 1) make sure loopback block devices are configured into the kernel 2) create an empty file system of the appropriate size, e.g. # dd if=/dev/zero of=initrd bs=300k count=1 - # mke2fs -F -m0 initrd + # mke2fs -F -m0 -b 1024 initrd (if space is critical, you may want to use the Minix FS instead of Ext2) + (Note that due to a problem elsewhere in the kernel, you _must_ use a + 1024-byte blocksize when creating your file system. If any other + value is used, the kernel will be unable to mount the initrd at boot + time, causing a kernel panic.) 3) mount the file system, e.g. # mount -t ext2 -o loop initrd /mnt 4) create the console device (not necessary if using devfs, but it can't diff -urN linux-2.4.19/Documentation/isapnp.txt linux-2.4.20/Documentation/isapnp.txt --- linux-2.4.19/Documentation/isapnp.txt Wed Apr 18 11:49:11 2001 +++ linux-2.4.20/Documentation/isapnp.txt Thu Nov 28 15:53:08 2002 @@ -29,6 +29,7 @@ poke - poke configuration byte to selected register pokew - poke configuration word to selected register poked - poke configuration dword to selected register +allow_dma0 - allow dma channel 0 during auto activation: 0=off, 1=on Explanation: - variable begins with zero diff -urN linux-2.4.19/Documentation/isdn/README.HiSax linux-2.4.20/Documentation/isdn/README.HiSax --- linux-2.4.19/Documentation/isdn/README.HiSax Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/isdn/README.HiSax Thu Nov 28 15:53:08 2002 @@ -41,9 +41,10 @@ ELSA Quickstep 3000PCI ELSA PCMCIA ITK ix1-micro Rev.2 -Eicon.Diehl Diva 2.0 ISA and PCI (S0 and U interface, no PRO version) -Eicon.Diehl Diva 2.01 ISA and PCI -Eicon.Diehl Diva Piccola +Eicon Diva 2.0 ISA and PCI (S0 and U interface, no PRO version) +Eicon Diva 2.01 ISA and PCI +Eicon Diva 2.02 PCI +Eicon Diva Piccola ASUSCOM NETWORK INC. ISDNLink 128K PC adapter (order code I-IN100-ST-D) Dynalink IS64PH (OEM version of ASUSCOM NETWORK INC. ISDNLink 128K adapter) PCBIT-DP (OEM version of ASUSCOM NETWORK INC. ISDNLink) @@ -67,13 +68,14 @@ HFC-PCI based cards Winbond W6692 based cards HFC-S+, HFC-SP/PCMCIA cards +formula-n enternow +Gerdes Power ISDN Note: PCF, PCF-Pro: up to now, only the ISDN part is supported PCC-8: not tested yet Eicon.Diehl Diva U interface not tested If you know other passive cards with the Siemens chipset, please let me know. -To use the PNP cards you need the isapnptools. You can combine any card, if there is no conflict between the resources (io, mem, irq). @@ -89,8 +91,15 @@ modules. It is included in the normal "make [menu]config" target at the kernel. Don't forget it, especially to select the right D-channel protocol. -Please note: All PnP cards need to be configured with isapnp and will work -only with the HiSax driver used as a module. +Please note: In older versions of the HiSax driver, all PnP cards +needed to be configured with isapnp and worked only with the HiSax +driver used as a module. + +In the current version, HiSax will automatically use the in-kernel +ISAPnP support, provided you selected it during kernel configuration +(CONFIG_ISAPNP), if you don't give the io=, irq= command line parameters. + +The affected card types are: 4,7,12,14,19,27-30 a) when built as a module ------------------------- @@ -191,6 +200,8 @@ 37 HFC 2BDS0 S+, SP irq,io 38 NETspider U PCI card none 39 HFC 2BDS0 SP/PCMCIA irq,io (set with cardmgr) + 40 hotplug interface + 41 Formula-n enter:now PCI none At the moment IRQ sharing is only possible with PCI cards. Please make sure that your IRQ is free and enabled for ISA use. @@ -216,6 +227,13 @@ (IO 1 (BASE 0x0180)) modprobe hisax type=4 protocol=2 irq=10 io0=0x580 io1=0x180 + In the current version of HiSax, you can instead simply use + + modprobe hisax type=4 protocol=2 + + if you configured your kernel for ISAPnP. Don't run isapnp in + this case! + 6. Teles 16.3, Euro ISDN, I/O base 280 hex, IRQ 12 and Teles 16.0, 1TR6, IRQ 5, Memory d0000 hex modprobe hisax type=3,1 protocol=2,1 io=0x280 mem=0,0xd0000 @@ -296,7 +314,9 @@ 36 W6692 based PCI cards none 37 HFC 2BDS0 S+,SP/PCMCIA ONLY WORKS AS A MODULE ! 38 NETspider U PCI card none - + 39 HFC 2BDS0 SP/PCMCIA ONLY WORKS AS A MODULE ! + 40 hotplug interface ONLY WORKS AS A MODULE ! + 41 Formula-n enter:now PCI none Running the driver ------------------ diff -urN linux-2.4.19/Documentation/kbuild/makefiles.txt linux-2.4.20/Documentation/kbuild/makefiles.txt --- linux-2.4.19/Documentation/kbuild/makefiles.txt Tue Feb 13 14:13:42 2001 +++ linux-2.4.20/Documentation/kbuild/makefiles.txt Thu Nov 28 15:53:08 2002 @@ -20,9 +20,8 @@ 6 The structure of a subdirectory Makefile 6.1 Comments 6.2 Goal definitions - 6.3 Adapter section - 6.4 Rules.make section - 6.5 Special rules + 6.3 Rules.make section + 6.4 Special rules 7 Rules.make variables 7.1 Subdirectories 7.2 Object file goals @@ -34,8 +33,7 @@ 8 New-style variables 8.1 New variables 8.2 Converting to old-style - 9 Compatibility with Linux Kernel 2.2 - 10 Credits + 9 Credits === 1 Overview @@ -100,15 +98,15 @@ === 3 Makefile language -The kernel Makefiles are designed to run with Gnu Make. The Makefiles -use only the documented features of Gnu Make, but they do use many -Gnu extensions. +The kernel Makefiles are designed to run with GNU Make. The Makefiles +use only the documented features of GNU Make, but they do use many +GNU extensions. -Gnu Make supports elementary list-processing functions. The kernel +GNU Make supports elementary list-processing functions. The kernel Makefiles use a novel style of list building and manipulation with few "if" statements. -Gnu Make has two assignment operators, ":=" and "=". ":=" performs +GNU Make has two assignment operators, ":=" and "=". ":=" performs immediate evaluation of the right-hand side and stores an actual string into the left-hand side. "=" is like a formula definition; it stores the right-hand side in an unevaluated form and then evaluates this form each @@ -192,7 +190,7 @@ $(DRIVERS), and $(LIBS). The arch Makefile defines $(HEAD) and $(LINKFLAGS), and extends $(CORE_FILES) and $(LIBS). - Note: there are more names here than necessary. $(NETWORKS), + Note: there are more variables here than necessary. $(NETWORKS), $(DRIVERS), and even $(LIBS) could be subsumed into $(CORE_FILES). CPP, CC, AS, LD, AR, NM, STRIP, OBJCOPY, OBJDUMP @@ -290,12 +288,12 @@ MAKE, MAKEFILES - Some variables internal to Gnu Make. + Some variables internal to GNU Make. $(MAKEFILES) in particular is used to force the arch Makefiles and subdirectory Makefiles to read $(TOPDIR)/.config without - including it explicitly. (This was an implementation hack and - could be fixed). + including it explicitly. (This was an implementational hack + and could be fixed). @@ -339,7 +337,7 @@ extends them. Many arch Makefiles dynamically run the target C compiler to - probe what options it supports: + probe supported options: # arch/i386/Makefile @@ -376,7 +374,7 @@ --- 5.2 Vmlinux build variables -An arch Makefile co-operates with the top Makefile to define variables +An arch Makefile cooperates with the top Makefile to define variables which specify how to build the vmlinux file. Note that there is no corresponding arch-specific section for modules; the module-building machinery is all architecture-independent. @@ -466,17 +464,15 @@ === 6 The structure of a subdirectory Makefile -A subdirectory Makefile has five sections. +A subdirectory Makefile has four sections. --- 6.1 Comments -The first section is a comment header. Just write what you would -write if you were editing a C source file, but use "# ..." instead of -"/* ... */". Historically, many anonymous people have edited kernel -Makefiles without leaving any change histories in the header; comments -from them would have been valuable. +The first section is a comment header. Historically, many anonymous +people have edited kernel Makefiles without leaving any change +histories in the header; comments from them would have been valuable. @@ -488,20 +484,7 @@ entered. The declarations in these lines depend heavily on the kernel configuration variables (CONFIG_* symbols). -In some Makefiles ("old-style Makefiles"), the second section looks -like this: - - # drivers/parport/Makefile - ifeq ($(CONFIG_PARPORT_PC),y) - LX_OBJS += parport_pc.o - else - ifeq ($(CONFIG_PARPORT_PC),m) - MX_OBJS += parport_pc.o - endif - endif - -In most Makefiles ("new-style Makefiles"), the second section looks -like this: +The second section looks like this: # drivers/block/Makefile obj-$(CONFIG_MAC_FLOPPY) += swim3.o @@ -509,35 +492,18 @@ obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o -The new-style Makefiles are more compact and easier to get correct -for certain features (such as CONFIG_* options that enable more than -one file). If you have a choice, please write a new-style Makefile. - - - ---- 6.3 Adapter section -The third section is an adapter section. In old-style Makefiles, this -third section is not present. In new-style Makefiles, the third section -contains boilerplate code which converts from new-style variables to -old-style variables. This is because Rules.make processes only the -old-style variables. +--- 6.3 Rules.make section -See section 8.2 ("Converting to old-style") for examples. - - - ---- 6.4 Rules.make section - -The fourth section is the single line: +The third section is the single line: include $(TOPDIR)/Rules.make ---- 6.5 Special rules +--- 6.4 Special rules -The fifth section contains any special Makefile rules needed that are +The fourth section contains any special Makefile rules needed that are not available through the common rules in Rules.make. @@ -550,352 +516,166 @@ --- 7.1 Subdirectories - ALL_SUB_DIRS, SUB_DIRS, MOD_IN_SUB_DIRS, MOD_SUB_DIRS +A Makefile is only responsible for building objects in its own +directory. Files in subdirectories should be taken care of by +Makefiles in the these subdirs. The build system will automatically +invoke make recursively in subdirectories, provided you let it know of +them. - $(ALL_SUB_DIRS) is an unconditional list of *all* the - subdirectories in a given directory. This list should not depend - on the kernel configuration. - - $(SUB_DIRS) is a list of subdirectories which may contribute code - to vmlinux. This list may depend on the kernel configuration. - - $(MOD_SUB_DIRS) and $(MOD_IN_SUB_DIRS) are lists of subdirectories - which may build kernel modules. Both names have exactly the - same meaning. (In version 2.2 and earlier kernels, these - variables had different meanings -- hence the different names). +To do so, use the subdir-{y,m,n,} variables: - For new code, $(MOD_SUB_DIRS) is recommended and $(MOD_IN_SUB_DIRS) - is deprecated. + subdir-$(CONFIG_ISDN) += i4l + subdir-$(CONFIG_ISDN_CAPI) += capi - Example: +When building the actual kernel, i.e. vmlinux ("make +{vmlinux,bzImage,...}"), make will recursively descend into +directories listed in $(subdir-y). - # fs/Makefile - ALL_SUB_DIRS = coda minix ext2 fat msdos vfat proc isofs nfs \ - umsdos ntfs hpfs sysv smbfs ncpfs ufs efs affs \ - romfs autofs hfs lockd nfsd nls devpts devfs \ - adfs partitions qnx4 udf bfs cramfs openpromfs \ - autofs4 ramfs jffs - SUB_DIRS := +When building modules ("make modules"), make will recursively descend +into directories listed in $(subdir-m). - ... +When building the dependencies ("make dep") make needs to visit every +subdir, so it'll descend into every directory listed in +$(subdir-y), $(subdir-m), $(subdir-n), $(subdir-). - ifeq ($(CONFIG_EXT2_FS),y) - SUB_DIRS += ext2 - else - ifeq ($(CONFIG_EXT2_FS),m) - MOD_SUB_DIRS += ext2 - endif - endif +You may encounter the case where a config option may be set to "y", but +you still want to possibly build modules in that subdirectory. - ifeq ($(CONFIG_CRAMFS),y) - SUB_DIRS += cramfs - else - ifeq ($(CONFIG_CRAMFS),m) - MOD_SUB_DIRS += cramfs - endif - endif - - Example: +For example, drivers/isdn/capi/Makefile has - # drivers/net/Makefile - SUB_DIRS := - MOD_SUB_DIRS := - MOD_IN_SUB_DIRS := - ALL_SUB_DIRS := $(SUB_DIRS) fc hamradio irda pcmcia tokenring \ - wan sk98lin arcnet skfp tulip appletalk + obj-$(CONFIG_ISDN_CAPI) += kernelcapi.o capiutil.o + obj-$(CONFIG_ISDN_CAPI_CAPI20) += capi.o - ... +where it's possible that CONFIG_ISDN_CAPI=y, but +CONFIG_ISDN_CAPI_CAPI20=m. - ifeq ($(CONFIG_IRDA),y) - SUB_DIRS += irda - MOD_IN_SUB_DIRS += irda - else - ifeq ($(CONFIG_IRDA),m) - MOD_IN_SUB_DIRS += irda - endif - endif +This is expressed by the following construct in the parent Makefile +drivers/isdn/Makefile: - ifeq ($(CONFIG_TR),y) - SUB_DIRS += tokenring - MOD_IN_SUB_DIRS += tokenring - else - ifeq ($(CONFIG_TR),m) - MOD_IN_SUB_DIRS += tokenring - endif - endif + mod-subdirs := i4l hisax capi eicon + subdir-$(CONFIG_ISDN_CAPI) += capi +Having a subdir ("capi") listed in the variable $(mod-subdirs) will +make the build system enter the specified subdirectory during "make +modules" also, even though the subdir ("capi") is listed only in +$(subdir-y), not $(subdir-m). --- 7.2 Object file goals - O_TARGET, O_OBJS, OX_OBJS + O_TARGET, obj-y - The subdirectory Makefile specifies object files for vmlinux in - the lists $(O_OBJS) and $(OX_OBJS). These lists depend on the - kernel configuration. - - The "X" in "OX_OBJS" stands for "eXport". Files in $(OX_OBJS) - may use the EXPORT_SYMBOL macro to define public symbols which - loadable kernel modules can see. Files in $(O_OBJS) may not use - EXPORT_SYMBOL (and you will get a funky error message if you try). - - [Yes, it's kludgy to do this by hand. Yes, you can define all - your objects as $(OX_OBJS) whether they define symbols or not; - but then you will notice a lot of extra compiles when you edit - any source file. Blame CONFIG_MODVERSIONS for this.] - - Data that is passed to other objects via registration functions - (e.g. pci_register_driver, pm_register) does not need to be marked - as EXPORT_SYMBOL. The objects that pass data via registration - functions do not need to be marked as OX_OBJS, unless they also have - exported symbols. - - Rules.make compiles all the $(O_OBJS) and $(OX_OBJS) files. - It then calls "$(LD) -r" to merge these files into one .o file - with the name $(O_TARGET). This $(O_TARGET) name also appears - in the top Makefile. - - The order of files in $(O_OBJS) and $(OX_OBJS) is significant. - All $(OX_OBJS) files come first, in the order listed, followed by - all $(O_OBJS) files, in the order listed. Duplicates in the lists - are allowed: the first instance will be linked into $(O_TARGET) - and succeeding instances will be ignored. (Note: Rules.make may - emit warning messages for duplicates, but this is harmless). + The subdirectory Makefile specifies object files for vmlinux + in the lists $(obj-y). These lists depend on the kernel + configuration. - Example: + Rules.make compiles all the $(obj-y) files. It then calls + "$(LD) -r" to merge these files into one .o file with the name + $(O_TARGET). This $(O_TARGET) is later linked into vmlinux by + a parent Makefile. - # arch/alpha/kernel/Makefile - O_TARGET := kernel.o - O_OBJS := entry.o traps.o process.o osf_sys.o irq.o \ - irq_alpha.o signal.o setup.o ptrace.o time.o \ - semaphore.o - OX_OBJS := alpha_ksyms.o + The order of files in $(obj-y) is significant. Duplicates in + the lists are allowed: the first instance will be linked into + $(O_TARGET) and succeeding instances will be ignored. - ifdef CONFIG_SMP - O_OBJS += smp.o irq_smp.o - endif + Link order is significant, because certain functions + (module_init() / __initcall) will be called during boot in the + order they appear. So keep in mind that changing the link + order may e.g. change the order in which your SCSI + controllers are detected, and thus you disks are renumbered. - ifdef CONFIG_PCI - O_OBJS += pci.o pci_iommu.o - endif - - Even if a subdirectory Makefile has an $(O_TARGET), the .config - options still control whether or not its $(O_TARGET) goes into - vmlinux. See the $(M_OBJS) example below. - - Sometimes the ordering of all $(OX_OBJS) files before all - $(O_OBJS) files can be a problem, particularly if both - $(O_OBJS) files and $(OX_OBJS) files contain __initcall - declarations where order is important. To avoid this imposed - ordering, the use of $(OX_OBJS) can be dropped altogether and - $(MIX_OBJS) used instead. - - If this approach is used, then: - - All objects to be linked into vmlinux should be listed in - $(O_OBJS) in the desired order. - - All objects to be created as modules should be listed in - $(M_OBJS) - - All objects that export symbols should also be listed in - $(MIX_OBJS). - - This has the same effect as maintaining the - exported/non-exported split, except that there is more control - over the ordering of object files in vmlinux. - + Example: + # Makefile for the kernel ISDN subsystem and device drivers. ---- 7.3 Library file goals + # The target object and module list name. - L_TARGET, L_OBJS, LX_OBJS + O_TARGET := vmlinux-obj.o - These names are similar to the O_* names. Once again, $(L_OBJS) - and $(LX_OBJS) specify object files for the resident kernel; - once again, the lists depend on the current configuration; and - once again, the files that call EXPORT_SYMBOL go on the "X" list. - - The difference is that "L" stands for "Library". After making - $(L_OBJS) and $(LX_OBJS), Rules.make uses the "$(AR) rcs" command - to put these files into an archive file (a library) with the - name $(L_TARGET). This name also appears in the top Makefile. + # Each configuration option enables a list of files. - Example: + obj-$(CONFIG_ISDN) += isdn.o + obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o - # arch/i386/lib/Makefile - L_TARGET = lib.a - L_OBJS = checksum.o old-checksum.o delay.o \ - usercopy.o getuser.o putuser.o iodebug.o + # The global Rules.make. - ifdef CONFIG_X86_USE_3DNOW - L_OBJS += mmx.o - endif + include $(TOPDIR)/Rules.make - ifdef CONFIG_HAVE_DEC_LOCK - L_OBJS += dec_and_lock.o - endif +--- 7.3 Library file goals - The order of files in $(L_OBJS) and $(LX_OBJS) is not significant. - Duplicates in the lists are allowed. (Note: Rules.make may emit - warning messages for duplicates, but this is harmless). - - A subdirectory Makefile can specify either an $(O_TARGET), - an $(L_TARGET), or both. Here is a discussion of the differences. - - All of the files in an $(O_TARGET) are guaranteed to appear in - the resident vmlinux image. In an $(L_TARGET), only the files - that satisfy undefined symbol references from other files will - appear in vmlinux. - - In a conventional link process, the linker processes some - object files and creates a list of unresolved external symbols. - The linker then looks in a set of libraries to resolve these - symbols. Indeed, the Linux kernel used to be linked this way, - with the bulk of the code stored in libraries. - - But vmlinux contains two types of object files that cannot be - fetched out of libraries this way: - - (1) object files that are purely EXPORT_SYMBOL definitions - (2) object files that use module_init or __initcall initializers - (instead of an initialization routine called externally) - - These files contain autonomous initializer sections which provide - code and data without being explicitly called. If these files - were stored in $(L_TARGET) libraries, the linker would fail - to include them in vmlinux. Thus, most subdirectory Makefiles - specify an $(O_TARGET) and do not use $(L_TARGET). - - Other considerations: $(O_TARGET) leads to faster re-link times - during development activity, but $(L_TARGET) gives better error - messages for unresolved symbols. + L_TARGET + Instead of building an O_TARGET object file, you may also + build an archive which again contains objects listed in + $(obj-y). This is normally not necessary and only used in + the lib, arch/$(ARCH)/lib directories. --- 7.4 Loadable module goals - M_OBJS, MX_OBJS + obj-m - $(M_OBJS) and $(MX_OBJS) specify object files which are built - as loadable kernel modules. As usual, the "X" in $(MX_OBJS) - stands for "eXport"; source files that use EXPORT_SYMBOL must - appear on an $(MX_OBJS) list. + $(obj-m) specify object files which are built as loadable + kernel modules. A module may be built from one source file or several source - files. In the case of one source file, the subdirectory - Makefile simply adds the file to either $(M_OBJS) or $(MX_OBJS), - as appropriate. + files. In the case of one source file, the subdirectory + Makefile simply adds the file to $(obj-m) Example: - # drivers/net/irda/Makefile - ifeq ($(CONFIG_IRTTY_SIR),y) - L_OBJS += irtty.o - else - ifeq ($(CONFIG_IRTTY_SIR),m) - M_OBJS += irtty.o - endif - endif + obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o - ifeq ($(CONFIG_IRPORT_SIR),y) - LX_OBJS += irport.o - else - ifeq ($(CONFIG_IRPORT_SIR),m) - MX_OBJS += irport.o - endif - endif + If a kernel module is built from several source files, you specify + that you want to build a module in the same way as above. - If a kernel module is built from several source files, there - are two ways to specify the set of source files. One way is to - build a single module for the entire subdirectory. This way is - popular in the file system and network protocol stacks. + However, the build system of course needs to know which the parts + are that you want to build your module of, so you have to tell it + by setting an $(-objs) variable. Example: - # fs/ext2/Makefile - O_TARGET := ext2.o - O_OBJS := acl.o balloc.o bitmap.o dir.o file.o fsync.o \ - ialloc.o inode.o ioctl.o namei.o super.o symlink.o \ - truncate.o - M_OBJS := $(O_TARGET) - - In this example, the module name will be ext2.o. Because this - file has the same name has $(O_TARGET), Rules.make will use - the $(O_TARGET) rule to build ext2.o: it will run "$(LD) -r" - on the list of $(O_OBJS) files. - - Note that this subdirectory Makefile defines both an $(O_TARGET) - and an $(M_OBJS). The control code, up in fs/Makefile, will - select between these two. If CONFIG_EXT2_FS=y, then fs/Makefile - will build $(O_TARGET); and if CONFIG_EXT_FS=m, then fs/Makefile - will build $(M_OBJS) instead. (Yes, this is a little delicate - and a little confusing). + obj-$(CONFIG_ISDN) += isdn.o + + isdn-objs := isdn_net.o isdn_tty.o isdn_v110.o isdn_common.o + + In this example, the module name will be isdn.o. Rules.make + will compile the objects listed in $(isdn-objs) and then run + "$(LD) -r" on the list of these files to generate isdn.o + + Note: Of course, when you are building objects into the kernel, + the syntax above will also work. So, if you have CONFIG_ISDN=y, + the build system will build an isdn.o for you out of the individual + parts and then link this into the $(O_TARGET), as you'd expect. + +--- 7.5 Objects which export symbols + export-objs + + When using loadable modules, not every global symbol in the + kernel / other modules is automatically available, only those + explicitly exported are available for your module. ---- 7.5 Multi-part modules - - MI_OBJS, MIX_OBJS - - Some kernel modules are composed of several object files - linked together, but do not include every object file in their - subdirectory. $(MI_OBJS) and $(MIX_OBJS) are for this case. - - "M" stands for Module. - "I" stands for Intermediate. - "X", as usual, stands for "eXport symbol". + To make a symbol available for use in modules, to "export" it, + use the EXPORT_SYMBOL() directive in your source. In + addition, you need to list all object files which export symbols + (i.e. their source contains an EXPORT_SYMBOL() directive) in the + Makefile variable $(export-objs). Example: - # drivers/sound/Makefile - gus-objs := gus_card.o gus_midi.o gus_vol.o gus_wave.o ics2101.o - pas2-objs := pas2_card.o pas2_midi.o pas2_mixer.o pas2_pcm.o - sb-objs := sb_card.o - - gus.o: $(gus-objs) - $(LD) -r -o $@ $(gus-objs) - - pas2.o: $(pas2-objs) - $(LD) -r -o $@ $(pas2-objs) - - sb.o: $(sb-objs) - $(LD) -r -o $@ $(sb-objs) - - The kernel modules gus.o, pas2.o, and sb.o are the *composite - files*. The object files gus_card.o, gus_midi.o, gus_vol.o, - gus_wave.o, ics2101.o, pas2_card.o, pas2_midi.o, pas2_mixer.o, - pas2_pcm.o, and sb_card.o are *component files*. The component - files are also called *intermediate files*. - - In another part of drivers/sound/Makefile (not shown), all of - the component files are split out. For the resident drivers: - the component object files go onto $(O_OBJS) and $(OX_OBJS) - lists, depending on whether they export symbols or not; and the - composite files are never built. For the kernel modules: the - component object files go onto $(MI_OBJS) and $(MIX_OBJS); - the composite files go onto $(M_OBJS). - - The subdirectory Makefile must also specify the linking rule - for a multi-object-file module: - - # drivers/sound/Makefile - - gus.o: $(gus-objs) - $(LD) -r -o $@ $(gus-objs) - - pas2.o: $(pas2-objs) - $(LD) -r -o $@ $(pas2-objs) - - sb.o: $(sb-objs) - $(LD) -r -o $@ $(sb-objs) - - - As is mentioned in section 7.2 ("Object file goals"), - $(MIX_OBJS) can also be used simply to list all objects that - export any symbols. If this approach is taken, then - $(O_OBJS), $(L_OBJS), $(M_OBJS) and $(MI_OBJS) should simply - lists all of the vmlinux object files, library object files, - module object files and intermediate module files - respectively. Duplication between $(MI_OBJS) and $(MIX_OBJS) - is not a problem. + # Objects that export symbols. + + export-objs := isdn_common.o + + since isdn_common.c contains + + EXPORT_SYMBOL(register_isdn); + + which makes the function register_isdn available to + low-level ISDN drivers. + --- 7.6 Compilation flags @@ -1013,6 +793,10 @@ === 8 New-style variables +[ This sections dates back from a time where the way to write Makefiles + described above was "new-style". I'm leaving it in as it describes the + same thing in other words, so it may be of some use ] + The "new-style variables" are simpler and more powerful than the "old-style variables". As a result, many subdirectory Makefiles shrank more than 60%. This author hopes that, in time, all arch Makefiles and @@ -1040,7 +824,7 @@ obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o Notice the use of $(CONFIG_...) substitutions on the left hand - side of an assignment operator. This gives Gnu Make the power + side of an assignment operator. This gives GNU Make the power of associative indexing! Each of these assignments replaces eight lines of code in an old-style Makefile. @@ -1053,9 +837,8 @@ $(obj-n) and $(obj-) are ignored. Each list may contain duplicates items; duplicates are - automatically removed later. Also, if a file appears in both - $(obj-y) and $(obj-m), it will automatically be removed from - the $(obj-m) list. + automatically removed later. Duplicates in both $(obj-y) and + $(obj-m) will automatically be removed from the $(obj-m) list. Example: @@ -1099,16 +882,14 @@ $(export-objs) list in a new-style Makefile is simpler and easier to audit. - list-multi $(foo)-objs Some kernel modules are composed of multiple object files linked - together. $(list-multi) is a list of such kernel modules. - This is a static list; it does not depend on the configuration. + together. - For each kernel module in $(list-multi) there is another list - of all the object files which make up that module. For a kernel - module named foo.o, its object file list is foo-objs. + For each multi-part kernel modul there is a list of all the + object files which make up that module. For a kernel module + named foo.o, its object file list is foo-objs. Example: @@ -1135,44 +916,16 @@ obj-$(CONFIG_SCSI_INIA100) += a100u2w.o Suppose that CONFIG_SCSI=y. Then vmlinux needs to link in all - 14 components of scsi_mod.o, so these components will go onto - $(O_OBJS) and $(OX_OBJS). The composite file scsi_mod.o will - never be created. The boilerplate conversion code produces this - result with a few lines of list processing commands. + 14 components of scsi_mod.o. Suppose that CONFIG_BLK_DEV_SR=m. Then the 3 components - of sr_mod.o will linked together with "$(LD) -r" to make the - kernel module sr_mod.o, so these 3 components need to go onto - the $(MI_OBJS) and $(MIX_OBJS) lists; the composite file sr_mod.o - goes onto $(M_OBJS). The boilerplate conversion code takes care - of this, too. - - And suppose CONFIG_SCSI_INITIO=n. Then initio.o goes onto the - $(obj-n) list and that's the end of it. Its component files - are not compiled, and the composite file is not created. + of sr_mod.o will be linked together with "$(LD) -r" to make the + kernel module sr_mod.o. - Finally, the subdirectory Makefile needs to define rules to - build each multi-object kernel module from its component list. - Example: - - # drivers/scsi/Makefile + Also suppose CONFIG_SCSI_INITIO=n. Then initio.o goes onto + the $(obj-n) list and that's the end of it. Its component + files are not compiled, and the composite file is not created. - scsi_mod.o: $(scsi_mod-objs) - $(LD) -r -o $@ $(scsi_mod-objs) - - sr_mod.o: $(sr_mod-objs) - $(LD) -r -o $@ $(sr_mod-objs) - - initio.o: $(initio-objs) - $(LD) -r -o $@ $(initio-objs) - - a100u2w.o: $(a100u2w-objs) - $(LD) -r -o $@ $(a100u2w-objs) - - These rules are very regular; it would be nice for the boilerplate - code or Rules.make to synthesize these rules automatically. - But until that happens, the subdirectory Makefile needs to define - these rules explicitly. subdir-y subdir-m subdir-n subdir- @@ -1190,9 +943,9 @@ These variables work similar to obj-*, but are used for subdirectories instead of object files. - After executing all of the assignments, the subdirectory - Makefile has built up four lists: $(subdir-y), $(subdir-m), - $(subdir-n), and $(subdir-). + After executing all assignments, the subdirectory Makefile has + built up four lists: $(subdir-y), $(subdir-m), $(subdir-n), + and $(subdir-). $(subdir-y) is a list of directories that should be entered for making vmlinux. @@ -1217,72 +970,7 @@ This means nls should be added to (subdir-y) and $(subdir-m) if CONFIG_NFS = y. ---- 8.2 Converting to old-style - - The following example is taken from drivers/usb/Makefile. - Note that this uses MIX_OBJS to avoid the need for OX_OBJS and - MX_OBJS and thus to maintain the ordering of objects in $(obj-y) - - # Translate to Rules.make lists. - multi-used := $(filter $(list-multi), $(obj-y) $(obj-m)) - multi-objs := $(foreach m, $(multi-used), $($(basename $(m))-objs)) - active-objs := $(sort $(multi-objs) $(obj-y) $(obj-m)) - - O_OBJS := $(obj-y) - M_OBJS := $(obj-m) - MIX_OBJS := $(filter $(export-objs), $(active-objs)) - - An example for libraries from drivers/acorn/scsi/Makefile: - - # Translate to Rules.make lists. - - L_OBJS := $(filter-out $(export-objs), $(obj-y)) - LX_OBJS := $(filter $(export-objs), $(obj-y)) - M_OBJS := $(sort $(filter-out $(export-objs), $(obj-m))) - MX_OBJS := $(sort $(filter $(export-objs), $(obj-m))) - - As ordering is not so important in libraries, this still uses - LX_OBJS and MX_OBJS, though (presumably) it could be changed to - use MIX_OBJS as follows: - - active-objs := $(sort $(obj-y) $(obj-m)) - L_OBJS := $(obj-y) - M_OBJS := $(obj-m) - MIX_OBJS := $(filter $(export-objs), $(active-objs)) - - - which is clearly shorted and arguably clearer. - -=== 9 Compatibility with Linux Kernel 2.2 - -Most of the information in this document also applies to 2.2, although -there is no indication of which things have changed when. Here are some -hints for writing subdirectory Makefiles that are compatible with Linux -kernel 2.2. - -You can write either an old-style Makefile or a new-style Makefile -with a boilerplate adapter section. See the 2.2 version of -drivers/sound/Makefile for a copy of the boilerplate code. - -In 2.2, Rules.make makes a distinction between $(MOD_SUB_DIRS) -and $(MOD_IN_SUB_DIRS). If you have a single directory with no -subdirectories, this will not matter to you. If you have a whole -tree, then you need to know the difference between $(MOD_SUB_DIRS) -and $(MOD_IN_SUB_DIRS). For example code: $(MOD_SUB_DIRS) is used -extensively in fs/Makefile; $(MOD_IN_SUB_DIRS) is used extensively in -drivers/net/Makefile. - -If you are already using MOD_LIST_NAME, go ahead and keep using it. -If you don't already have a MOD_LIST_NAME, go ahead and keep not using -one; your module will be a 'misc' module in 2.2. - -Assembly language rules were a mess in 2.2. If you have assembly language -files, this author recommends that you write your own explicit rules -for each file by name. - - - -=== 10 Credits +=== 9 Credits Thanks to the members of the linux-kbuild mailing list for reviewing drafts of this document, with particular thanks to Peter Samuelson diff -urN linux-2.4.19/Documentation/kernel-parameters.txt linux-2.4.20/Documentation/kernel-parameters.txt --- linux-2.4.19/Documentation/kernel-parameters.txt Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/kernel-parameters.txt Thu Nov 28 15:53:08 2002 @@ -23,6 +23,7 @@ HW Appropriate hardware is enabled. IA-32 IA-32 aka i386 architecture is enabled. IA-64 IA-64 architecture is enabled. + IP_PNP IP DCHP, BOOTP, or RARP is enabled. ISAPNP ISA PnP code is enabled. ISDN Appropriate ISDN support is enabled. JOY Appropriate joystick support is enabled. @@ -251,7 +252,7 @@ initrd= [BOOT] Specify the location of the initial ramdisk. - ip= [PNP] + ip= [IP_PNP] isapnp= [ISAPNP] Specify RDP, reset, pci_scan and verbosity. @@ -273,10 +274,14 @@ kbd-reset [VT] - keep_initrd [HW, ARM] + keepinitrd [HW, ARM] load_ramdisk= [RAM] List of ramdisks to load from floppy. + lockd.udpport= [NFS] + + lockd.tcpport= [NFS] + logi_busmouse= [HW, MOUSE] lp=0 [LP] Specify parallel ports to use, e.g, @@ -313,7 +318,7 @@ max_scsi_luns= [SCSI] - mca-pentium [BUGS=ix86] + mca-pentium [BUGS=IA-32] mcd= [HW,CD] @@ -327,6 +332,11 @@ megaraid= [HW,SCSI] + mem=exactmap [KNL,BOOT,IA-32] enable setting of an exact + e820 memory map, as specified by the user. + Such mem=exactmap lines can be constructed + based on BIOS output or other requirements. + mem=nn[KMG] [KNL,BOOT] force use of a specific amount of memory; to be used when the kernel is not able to see the whole system memory or for test. @@ -359,9 +369,9 @@ nfsroot= [NFS] nfs root filesystem for disk-less boxes. - nmi_watchdog= [KNL,BUGS=ix86] debugging features for SMP kernels. + nmi_watchdog= [KNL,BUGS=IA-32] debugging features for SMP kernels. - no387 [BUGS=ix86] Tells the kernel to use the 387 maths + no387 [BUGS=IA-32] Tells the kernel to use the 387 maths emulation library even if a 387 maths coprocessor is present. @@ -379,7 +389,9 @@ nohlt [BUGS=ARM] - no-hlt [BUGS=ix86] + no-hlt [BUGS=IA-32] Tells the kernel that the hlt + instruction doesn't work correctly and not to + use it. noht [SMP,IA-32] Disables P4 Xeon(tm) HyperThreading. @@ -396,7 +408,7 @@ nosync [HW, M68K] Disables sync negotiation for all devices. - notsc [BUGS=ix86] Disable Time Stamp Counter + notsc [BUGS=IA-32] Disable Time Stamp Counter nowb [ARM] @@ -504,7 +516,7 @@ ramdisk_start= [RAM] Starting block of RAM disk image (so you can place it after the kernel image on a boot floppy). - reboot= [BUGS=ix86] + reboot= [BUGS=IA-32] reserve= [KNL,BUGS] force the kernel to ignore some iomem area. @@ -514,6 +526,10 @@ root= [KNL] root filesystem. + rootflags= [KNL] set root filesystem mount option string + + rootfstype= [KNL] set root filesystem type + rw [KNL] Mount root device read-write on boot. S [KNL] run init in single mode. diff -urN linux-2.4.19/Documentation/ldm.txt linux-2.4.20/Documentation/ldm.txt --- linux-2.4.19/Documentation/ldm.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/ldm.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,102 @@ + + LDM - Logical Disk Manager (Dynamic Disks) + ------------------------------------------ + +Overview +-------- + +Windows 2000 and XP use a new partitioning scheme. It is a complete +replacement for the MSDOS style partitions. It stores its information in a +1MiB journalled database at the end of the physical disk. The size of +partitions is limited only by disk space. The maximum number of partitions is +nearly 2000. + +Any partitions created under the LDM are called "Dynamic Disks". There are no +longer any primary or extended partitions. Normal MSDOS style partitions are +now known as Basic Disks. + +If you wish to use Spanned, Striped, Mirrored or RAID 5 Volumes, you must use +Dynamic Disks. The journalling allows Windows to make changes to these +partitions and filesystems without the need to reboot. + +Once the LDM driver has divided up the disk, you can use the MD driver to +assemble any multi-partition volumes, e.g. Stripes, RAID5. + +To prevent legacy applications from repartitioning the disk, the LDM creates a +dummy MSDOS partition containing one disk-sized partition. + + +Example +------- + +Below we have a 50MiB disk, divided into seven partitions. +N.B. The missing 1MiB at the end of the disk is where the LDM database is + stored. + + Device | Offset Bytes Sectors MiB | Size Bytes Sectors MiB + -------+----------------------------+--------------------------- + hda | 0 0 0 | 52428800 102400 50 + hda1 | 51380224 100352 49 | 1048576 2048 1 + hda2 | 16384 32 0 | 6979584 13632 6 + hda3 | 6995968 13664 6 | 10485760 20480 10 + hda4 | 17481728 34144 16 | 4194304 8192 4 + hda5 | 21676032 42336 20 | 5242880 10240 5 + hda6 | 26918912 52576 25 | 10485760 20480 10 + hda7 | 37404672 73056 35 | 13959168 27264 13 + +The LDM Database may not store the partitions in the order that they appear on +disk, but the driver will sort them. + +When Linux boots, you will see something like: + +Partition check: + hda: [LDM] hda1 hda2 hda3 hda4 hda5 hda6 hda7 + + +Compiling LDM Support +--------------------- + +To enable LDM, choose the following two options: + + "Advanced partition selection" CONFIG_PARTITION_ADVANCED + "Windows Logical Disk Manager (Dynamic Disk) support" CONFIG_LDM_PARTITION + +If you believe the driver isn't working as it should, you can enable the extra +debugging code. This will produce a LOT of output. The option is: + + "Windows LDM extra logging" CONFIG_LDM_DEBUG + +N.B. The partition code cannot be compiled as a module. + +As with all the partition code, if the driver doesn't see signs of its type of +partition, it will pass control to another driver, so there is no harm in +enabling it. + +If you have Dynamic Disks but don't enable the driver, then all you will see +is a dummy MSDOS partition filling the whole disk. You won't be able to mount +any of the volumes on the disk. + + +Booting +------- + +If you enable LDM support, then lilo is capable of booting from any of the +discovered partitions. However, grub does not understand the LDM partitioning +and cannot boot from a Dynamic Disk. + + +More Documentation +------------------ + +There is an Overview of the LDM online together with complete Technical +Documentation. It can also be downloaded in html. + + http://linux-ntfs.sourceforge.net/ldm/index.html + http://linux-ntfs.sourceforge.net/downloads.html + +If you have any LDM questions that aren't answered on the website, email me. + +Cheers, + FlatCap - Richard Russon + ldm@flatcap.org + diff -urN linux-2.4.19/Documentation/networking/00-INDEX linux-2.4.20/Documentation/networking/00-INDEX --- linux-2.4.19/Documentation/networking/00-INDEX Thu Feb 8 16:32:44 2001 +++ linux-2.4.20/Documentation/networking/00-INDEX Thu Nov 28 15:53:08 2002 @@ -44,6 +44,10 @@ - the Digi International RightSwitch SE-X Ethernet driver dmfe.txt - info on the Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver. +e100.txt + - info on Intel's EtherExpress PRO/100 line of 10/100 boards +e1000.txt + - info on Intel's E1000 line of gigabit ethernet boards eql.txt - serial IP load balancing ethertap.txt diff -urN linux-2.4.19/Documentation/networking/8139too.txt linux-2.4.20/Documentation/networking/8139too.txt --- linux-2.4.19/Documentation/networking/8139too.txt Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/networking/8139too.txt Thu Nov 28 15:53:08 2002 @@ -185,9 +185,22 @@ Change History -------------- -Version 0.9.23 - January 16, 2002 +Version 0.9.26 - August 9, 2002 -* New, compile-time conditional for testing better RX reset +* Fix MII ioctl phy id corruption. +* Fix big-endian multicast bug. +* Support register dumps via ethtool. +* Fix several uses of 'len' after potential skb free, in dev->hard_start_xmit +* Replace several "magic numbers" with their proper representation + constants in linux/mii.h. +* Support ethtool media interface via generic kernel MII API +* Export NIC-specific statistics via ethtool. +* Proper support for RTL8139 rev K. (can be disabled via + compile-time conditional) +* Add PCI ids for new 8139 boards. +* Use ethernet crc via generic linux/crc32.h kernel API. +* Better RX reset. Old rx-reset method still available via + a compile-time conditional. * Only account specific RX errors if rx_status is !OK diff -urN linux-2.4.19/Documentation/networking/NAPI_HOWTO.txt linux-2.4.20/Documentation/networking/NAPI_HOWTO.txt --- linux-2.4.19/Documentation/networking/NAPI_HOWTO.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/networking/NAPI_HOWTO.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,749 @@ +HISTORY: +February 16/2002 -- revision 0.2.1: +COR typo corrected +February 10/2002 -- revision 0.2: +some spell checking ;-> +January 12/2002 -- revision 0.1 +This is still work in progress so may change. +To keep up to date please watch this space. + +Introduction to NAPI +==================== + +NAPI is a proven (www.cyberus.ca/~hadi/usenix-paper.tgz) technique +to improve network performance on Linux. For more details please +read that paper. +NAPI provides a "inherent mitigation" which is bound by system capacity +as can be seen from the following data collected by Robert on Gigabit +ethernet (e1000): + + Psize Ipps Tput Rxint Txint Done Ndone + --------------------------------------------------------------- + 60 890000 409362 17 27622 7 6823 + 128 758150 464364 21 9301 10 7738 + 256 445632 774646 42 15507 21 12906 + 512 232666 994445 241292 19147 241192 1062 + 1024 119061 1000003 872519 19258 872511 0 + 1440 85193 1000003 946576 19505 946569 0 + + +Legend: +"Ipps" stands for input packets per second. +"Tput" == packets out of total 1M that made it out. +"txint" == transmit completion interrupts seen +"Done" == The number of times that the poll() managed to pull all +packets out of the rx ring. Note from this that the lower the +load the more we could clean up the rxring +"Ndone" == is the converse of "Done". Note again, that the higher +the load the more times we couldnt clean up the rxring. + +Observe that: +when the NIC receives 890Kpackets/sec only 17 rx interrupts are generated. +The system cant handle the processing at 1 interrupt/packet at that load level. +At lower rates on the other hand, rx interrupts go up and therefore the +interrupt/packet ratio goes up (as observable from that table). So there is +possibility that under low enough input, you get one poll call for each +input packet caused by a single interrupt each time. And if the system +cant handle interrupt per packet ratio of 1, then it will just have to +chug along .... + + +0) Prerequisites: +================== +A driver MAY continue using the old 2.4 technique for interfacing +to the network stack and not benefit from the NAPI changes. +NAPI additions to the kernel do not break backward compatibility. +NAPI, however, requires the following features to be available: + +A) DMA ring or enough RAM to store packets in software devices. + +B) Ability to turn off interrupts or maybe events that send packets up +the stack. + +NAPI processes packet events in what is known as dev->poll() method. +Typically, only packet receive events are processed in dev->poll(). +The rest of the events MAY be processed by the regular interrupt handler +to reduce processing latency (justified also because there are not that +many of them). +Note, however, NAPI does not enforce that dev->poll() only processes +receive events. +Tests with the tulip driver indicated slightly increased latency if +all of the interrupt handler is moved to dev->poll(). Also MII handling +gets a little trickier. +The example used in this document is to move the receive processing only +to dev->poll(); this is shown with the patch for the tulip driver. +For an example of code that moves all the interrupt driver to +dev->poll() look at the ported e1000 code. + +There are caveats that might force you to go with moving everything to +dev->poll(). Different NICs work differently depending on their status/event +acknowledgement setup. +There are two types of event register ACK mechanisms. + I) what is known as Clear-on-read (COR). + when you read the status/event register, it clears everything! + The natsemi and sunbmac NICs are known to do this. + In this case your only choice is to move all to dev->poll() + + II) Clear-on-write (COW) + i) you clear the status by writting a 1 in the bit-location you want. + These are the majority of the NICs and work the best with NAPI. + Put only receive events in dev->poll(); leave the rest in + the old interrupt handler. + ii) whatever you write in the status register clears every thing ;-> + Cant seem to find any supported by Linux which do this. If + someone knows such a chip email us please. + Move all to dev->poll() + +C) Ability to detect new work correctly. +NAPI works by shutting down event interrupts when theres work and +turning them on when theres none. +New packets might show up in the small window while interrupts were being +re-enabled (refer to appendix 2). A packet might sneak in during the period +we are enabling interrupts. We only get to know about such a packet when the +next new packet arrives and generates an interrupt. +Essentially, there is a small window of opportunity for a race condition +which for clarity we'll refer to as the "rotting packet". + +This is a very important topic and appendix 2 is dedicated for more +discussion. + +Locking rules and environmental guarantees +========================================== + +-Guarantee: Only one CPU at any time can call dev->poll(); this is because +only one CPU can pick the initial interrupt and hence the initial +netif_rx_schedule(dev); +- The core layer invokes devices to send packets in a round robin format. +This implies receive is totaly lockless because of the guarantee only that +one CPU is executing it. +- contention can only be the result of some other CPU accessing the rx +ring. This happens only in close() and suspend() (when these methods +try to clean the rx ring); +****guarantee: driver authors need not worry about this; synchronization +is taken care for them by the top net layer. +-local interrupts are enabled (if you dont move all to dev->poll()). For +example link/MII and txcomplete continue functioning just same old way. +This improves the latency of processing these events. It is also assumed that +the receive interrupt is the largest cause of noise. Note this might not +always be true. +[according to Manfred Spraul, the winbond insists on sending one +txmitcomplete interrupt for each packet (although this can be mitigated)]. +For these broken drivers, move all to dev->poll(). + +For the rest of this text, we'll assume that dev->poll() only +processes receive events. + +new methods introduce by NAPI +============================= + +a) netif_rx_schedule(dev) +Called by an IRQ handler to schedule a poll for device + +b) netif_rx_schedule_prep(dev) +puts the device in a state which allows for it to be added to the +CPU polling list if it is up and running. You can look at this as +the first half of netif_rx_schedule(dev) above; the second half +being c) below. + +c) __netif_rx_schedule(dev) +Add device to the poll list for this CPU; assuming that _prep above +has already been called and returned 1. + +d) netif_rx_reschedule(dev, undo) +Called to reschedule polling for device specifically for some +deficient hardware. Read Appendix 2 for more details. + +e) netif_rx_complete(dev) + +Remove interface from the CPU poll list: it must be in the poll list +on current cpu. This primitive is called by dev->poll(), when +it completes its work. The device cannot be out of poll list at this +call, if it is then clearly it is a BUG(). You'll know ;-> + +All these above nethods are used below. So keep reading for clarity. + +Device driver changes to be made when porting NAPI +================================================== + +Below we describe what kind of changes are required for NAPI to work. + +1) introduction of dev->poll() method +===================================== + +This is the method that is invoked by the network core when it requests +for new packets from the driver. A driver is allowed to send upto +dev->quota packets by the current CPU before yielding to the network +subsystem (so other devices can also get opportunity to send to the stack). + +dev->poll() prototype looks as follows: +int my_poll(struct net_device *dev, int *budget) + +budget is the remaining number of packets the network subsystem on the +current CPU can send up the stack before yielding to other system tasks. +*Each driver is responsible for decrementing budget by the total number of +packets sent. + Total number of packets cannot exceed dev->quota. + +dev->poll() method is invoked by the top layer, the driver just sends if it +can to the stack the packet quantity requested. + +more on dev->poll() below after the interrupt changes are explained. + +2) registering dev->poll() method +=================================== + +dev->poll should be set in the dev->probe() method. +e.g: +dev->open = my_open; +. +. +/* two new additions */ +/* first register my poll method */ +dev->poll = my_poll; +/* next register my weight/quanta; can be overriden in /proc */ +dev->weight = 16; +. +. +dev->stop = my_close; + + + +3) scheduling dev->poll() +============================= +This involves modifying the interrupt handler and the code +path which takes the packet off the NIC and sends them to the +stack. + +it's important at this point to introduce the classical D Becker +interrupt processor: + +------------------ +static void +netdevice_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + + struct net_device *dev = (struct net_device *)dev_instance; + struct my_private *tp = (struct my_private *)dev->priv; + + int work_count = my_work_count; + status = read_interrupt_status_reg(); + if (status == 0) + return; /* Shared IRQ: not us */ + if (status == 0xffff) + return; /* Hot unplug */ + if (status & error) + do_some_error_handling() + + do { + acknowledge_ints_ASAP(); + + if (status & link_interrupt) { + spin_lock(&tp->link_lock); + do_some_link_stat_stuff(); + spin_unlock(&tp->link_lock); + } + + if (status & rx_interrupt) { + receive_packets(dev); + } + + if (status & rx_nobufs) { + make_rx_buffs_avail(); + } + + if (status & tx_related) { + spin_lock(&tp->lock); + tx_ring_free(dev); + if (tx_died) + restart_tx(); + spin_unlock(&tp->lock); + } + + status = read_interrupt_status_reg(); + + } while (!(status & error) || more_work_to_be_done); + +} + +---------------------------------------------------------------------- + +We now change this to what is shown below to NAPI-enable it: + +---------------------------------------------------------------------- +static void +netdevice_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct net_device *dev = (struct net_device *)dev_instance; + struct my_private *tp = (struct my_private *)dev->priv; + + status = read_interrupt_status_reg(); + if (status == 0) + return; /* Shared IRQ: not us */ + if (status == 0xffff) + return; /* Hot unplug */ + if (status & error) + do_some_error_handling(); + + do { +/************************ start note *********************************/ + acknowledge_ints_ASAP(); // dont ack rx and rxnobuff here +/************************ end note *********************************/ + + if (status & link_interrupt) { + spin_lock(&tp->link_lock); + do_some_link_stat_stuff(); + spin_unlock(&tp->link_lock); + } +/************************ start note *********************************/ + if (status & rx_interrupt || (status & rx_nobuffs)) { + if (netif_rx_schedule_prep(dev)) { + + /* disable interrupts caused + * by arriving packets */ + disable_rx_and_rxnobuff_ints(); + /* tell system we have work to be done. */ + __netif_rx_schedule(dev); + } else { + printk("driver bug! interrupt while in poll\n"); + /* FIX by disabling interrupts */ + disable_rx_and_rxnobuff_ints(); + } + } +/************************ end note note *********************************/ + + if (status & tx_related) { + spin_lock(&tp->lock); + tx_ring_free(dev); + + if (tx_died) + restart_tx(); + spin_unlock(&tp->lock); + } + + status = read_interrupt_status_reg(); + +/************************ start note *********************************/ + } while (!(status & error) || more_work_to_be_done(status)); +/************************ end note note *********************************/ + +} + +--------------------------------------------------------------------- + + +We note several things from above: + +I) Any interrupt source which is caused by arriving packets is now +turned off when it occurs. Depending on the hardware, there could be +several reasons that arriving packets would cause interrupts; these are the +interrupt sources we wish to avoid. The two common ones are a) a packet +arriving (rxint) b) a packet arriving and finding no DMA buffers available +(rxnobuff) . +This means also acknowledge_ints_ASAP() will not clear the status +register for those two items above; clearing is done in the place where +proper work is done within NAPI; at the poll() and refill_rx_ring() +discussed further below. +netif_rx_schedule_prep() returns 1 if device is in running state and +gets successfully added to the core poll list. If we get a zero value +we can _almost_ assume are already added to the list (instead of not running. +Logic based on the fact that you shouldnt get interrupt if not running) +We rectify this by disabling rx and rxnobuf interrupts. + +II) that receive_packets(dev) and make_rx_buffs_avail() may have dissapeared. +These functionalities are still around actually...... + +infact, receive_packets(dev) is very close to my_poll() and +make_rx_buffs_avail() is invoked from my_poll() + +4) converting receive_packets() to dev->poll() +=============================================== + +We need to convert the classical D Becker receive_packets(dev) to my_poll() + +First the typical receive_packets() below: +------------------------------------------------------------------- + +/* this is called by interrupt handler */ +static void receive_packets (struct net_device *dev) +{ + + struct my_private *tp = (struct my_private *)dev->priv; + rx_ring = tp->rx_ring; + cur_rx = tp->cur_rx; + int entry = cur_rx % RX_RING_SIZE; + int received = 0; + int rx_work_limit = tp->dirty_rx + RX_RING_SIZE - tp->cur_rx; + + while (rx_ring_not_empty) { + u32 rx_status; + unsigned int rx_size; + unsigned int pkt_size; + struct sk_buff *skb; + /* read size+status of next frame from DMA ring buffer */ + /* the number 16 and 4 are just examples */ + rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset)); + rx_size = rx_status >> 16; + pkt_size = rx_size - 4; + + /* process errors */ + if ((rx_size > (MAX_ETH_FRAME_SIZE+4)) || + (!(rx_status & RxStatusOK))) { + netdrv_rx_err (rx_status, dev, tp, ioaddr); + return; + } + + if (--rx_work_limit < 0) + break; + + /* grab a skb */ + skb = dev_alloc_skb (pkt_size + 2); + if (skb) { + . + . + netif_rx (skb); + . + . + } else { /* OOM */ + /*seems very driver specific ... some just pass + whatever is on the ring already. */ + } + + /* move to the next skb on the ring */ + entry = (++tp->cur_rx) % RX_RING_SIZE; + received++ ; + + } + + /* store current ring pointer state */ + tp->cur_rx = cur_rx; + + /* Refill the Rx ring buffers if they are needed */ + refill_rx_ring(); + . + . + +} +------------------------------------------------------------------- +We change it to a new one below; note the additional parameter in +the call. + +------------------------------------------------------------------- + +/* this is called by the network core */ +static void my_poll (struct net_device *dev, int *budget) +{ + + struct my_private *tp = (struct my_private *)dev->priv; + rx_ring = tp->rx_ring; + cur_rx = tp->cur_rx; + int entry = cur_rx % RX_BUF_LEN; + /* maximum packets to send to the stack */ +/************************ note note *********************************/ + int rx_work_limit = dev->quota; + +/************************ end note note *********************************/ + do { // outer beggining loop starts here + + clear_rx_status_register_bit(); + + while (rx_ring_not_empty) { + u32 rx_status; + unsigned int rx_size; + unsigned int pkt_size; + struct sk_buff *skb; + /* read size+status of next frame from DMA ring buffer */ + /* the number 16 and 4 are just examples */ + rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset)); + rx_size = rx_status >> 16; + pkt_size = rx_size - 4; + + /* process errors */ + if ((rx_size > (MAX_ETH_FRAME_SIZE+4)) || + (!(rx_status & RxStatusOK))) { + netdrv_rx_err (rx_status, dev, tp, ioaddr); + return; + } + +/************************ note note *********************************/ + if (--rx_work_limit < 0) { /* we got packets, but no quota */ + /* store current ring pointer state */ + tp->cur_rx = cur_rx; + + /* Refill the Rx ring buffers if they are needed */ + refill_rx_ring(dev); + goto not_done; + } +/********************** end note **********************************/ + + /* grab a skb */ + skb = dev_alloc_skb (pkt_size + 2); + if (skb) { + . + . +/************************ note note *********************************/ + netif_receive_skb (skb); +/********************** end note **********************************/ + . + . + } else { /* OOM */ + /*seems very driver specific ... common is just pass + whatever is on the ring already. */ + } + + /* move to the next skb on the ring */ + entry = (++tp->cur_rx) % RX_RING_SIZE; + received++ ; + + } + + /* store current ring pointer state */ + tp->cur_rx = cur_rx; + + /* Refill the Rx ring buffers if they are needed */ + refill_rx_ring(dev); + + /* no packets on ring; but new ones can arrive since we last + checked */ + status = read_interrupt_status_reg(); + if (rx status is not set) { + /* If something arrives in this narrow window, + an interrupt will be generated */ + goto done; + } + /* done! at least thats what it looks like ;-> + if new packets came in after our last check on status bits + they'll be caught by the while check and we go back and clear them + since we havent exceeded our quota */ + } while (rx_status_is_set); + +done: + +/************************ note note *********************************/ + dev->quota -= received; + *budget -= received; + + /* If RX ring is not full we are out of memory. */ + if (tp->rx_buffers[tp->dirty_rx % RX_RING_SIZE].skb == NULL) + goto oom; + + /* we are happy/done, no more packets on ring; put us back + to where we can start processing interrupts again */ + netif_rx_complete(dev); + enable_rx_and_rxnobuf_ints(); + + /* The last op happens after poll completion. Which means the following: + * 1. it can race with disabling irqs in irq handler (which are done to + * schedule polls) + * 2. it can race with dis/enabling irqs in other poll threads + * 3. if an irq raised after the begining of the outer beginning + * loop(marked in the code above), it will be immediately + * triggered here. + * + * Summarizing: the logic may results in some redundant irqs both + * due to races in masking and due to too late acking of already + * processed irqs. The good news: no events are ever lost. + */ + + return 0; /* done */ + +not_done: + if (tp->cur_rx - tp->dirty_rx > RX_RING_SIZE/2 || + tp->rx_buffers[tp->dirty_rx % RX_RING_SIZE].skb == NULL) + refill_rx_ring(dev); + + if (!received) { + printk("received==0\n"); + received = 1; + } + dev->quota -= received; + *budget -= received; + return 1; /* not_done */ + +oom: + /* Start timer, stop polling, but do not enable rx interrupts. */ + start_poll_timer(dev); + return 0; /* we'll take it from here so tell core "done"*/ + +/************************ End note note *********************************/ +} +------------------------------------------------------------------- + +From above we note that: +0) rx_work_limit = dev->quota +1) refill_rx_ring() is in charge of clearing the bit for rxnobuff when +it does the work. +2) We have a done and not_done state. +3) instead of netif_rx() we call netif_receive_skb() to pass the skb. +4) we have a new way of handling oom condition +5) A new outer for (;;) loop has been added. This serves the purpose of +ensuring that if a new packet has come in, after we are all set and done, +and we have not exceeded our quota that we continue sending packets up. + + +----------------------------------------------------------- +Poll timer code will need to do the following: + +a) + + if (tp->cur_rx - tp->dirty_rx > RX_RING_SIZE/2 || + tp->rx_buffers[tp->dirty_rx % RX_RING_SIZE].skb == NULL) + refill_rx_ring(dev); + + /* If RX ring is not full we are still out of memory. + Restart the timer again. Else we re-add ourselves + to the master poll list. + */ + + if (tp->rx_buffers[tp->dirty_rx % RX_RING_SIZE].skb == NULL) + restart_timer(); + + else netif_rx_schedule(dev); /* we are back on the poll list */ + +5) dev->close() and dev->suspend() issues +========================================== +The driver writter neednt worry about this. The top net layer takes +care of it. + +6) Adding new Stats to /proc +============================= +In order to debug some of the new features, we introduce new stats +that need to be collected. +TODO: Fill this later. + +APPENDIX 1: discussion on using ethernet HW FC +============================================== +Most chips with FC only send a pause packet when they run out of Rx buffers. +Since packets are pulled off the DMA ring by a softirq in NAPI, +if the system is slow in grabbing them and we have a high input +rate (faster than the system's capacity to remove packets), then theoretically +there will only be one rx interrupt for all packets during a given packetstorm. +Under low load, we might have a single interrupt per packet. +FC should be programmed to apply in the case when the system cant pull out +packets fast enough i.e send a pause only when you run out of rx buffers. +Note FC in itself is a good solution but we have found it to not be +much of a commodity feature (both in NICs and switches) and hence falls +under the same category as using NIC based mitigation. Also experiments +indicate that its much harder to resolve the resource allocation +issue (aka lazy receiving that NAPI offers) and hence quantify its usefullness +proved harder. In any case, FC works even better with NAPI but is not +necessary. + + +APPENDIX 2: the "rotting packet" race-window avoidance scheme +============================================================= + +There are two types of associations seen here + +1) status/int which honors level triggered IRQ + +If a status bit for receive or rxnobuff is set and the corresponding +interrupt-enable bit is not on, then no interrupts will be generated. However, +as soon as the "interrupt-enable" bit is unmasked, an immediate interrupt is +generated. [assuming the status bit was not turned off]. +Generally the concept of level triggered IRQs in association with a status and +interrupt-enable CSR register set is used to avoid the race. + +If we take the example of the tulip: +"pending work" is indicated by the status bit(CSR5 in tulip). +the corresponding interrupt bit (CSR7 in tulip) might be turned off (but +the CSR5 will continue to be turned on with new packet arrivals even if +we clear it the first time) +Very important is the fact that if we turn on the interrupt bit on when +status is set that an immediate irq is triggered. + +If we cleared the rx ring and proclaimed there was "no more work +to be done" and then went on to do a few other things; then when we enable +interrupts, there is a possibility that a new packet might sneak in during +this phase. It helps to look at the pseudo code for the tulip poll +routine: + +-------------------------- + do { + ACK; + while (ring_is_not_empty()) { + work-work-work + if quota is exceeded: exit, no touching irq status/mask + } + /* No packets, but new can arrive while we are doing this*/ + CSR5 := read + if (CSR5 is not set) { + /* If something arrives in this narrow window here, + * where the comments are ;-> irq will be generated */ + unmask irqs; + exit poll; + } + } while (rx_status_is_set); +------------------------ + +CSR5 bit of interest is only the rx status. +If you look at the last if statement: +you just finished grabbing all the packets from the rx ring .. you check if +status bit says theres more packets just in ... it says none; you then +enable rx interrupts again; if a new packet just came in during this check, +we are counting that CSR5 will be set in that small window of opportunity +and that by re-enabling interrupts, we would actually triger an interrupt +to register the new packet for processing. + +[The above description nay be very verbose, if you have better wording +that will make this more understandable, please suggest it.] + +2) non-capable hardware + +These do not generally respect level triggered IRQs. Normally, +irqs may be lost while being masked and the only way to leave poll is to do +a double check for new input after netif_rx_complete() is invoked +and re-enable polling (after seeing this new input). + +Sample code: + +--------- + . + . +restart_poll: + while (ring_is_not_empty()) { + work-work-work + if quota is exceeded: exit, not touching irq status/mask + } + . + . + . + enable_rx_interrupts() + netif_rx_complete(dev); + if (ring_has_new_packet() && netif_rx_reschedule(dev, received)) { + disable_rx_and_rxnobufs() + goto restart_poll + } while (rx_status_is_set); +--------- + +Basically netif_rx_complete() removes us from the poll list, but because a +new packet which will never be caught due to the possibility of a race +might come in, we attempt to re-add ourselves to the poll list. + + + +-------------------------------------------------------------------- + +relevant sites: +================== +ftp://robur.slu.se/pub/Linux/net-development/NAPI/ + + +-------------------------------------------------------------------- +TODO: Write net-skeleton.c driver. +------------------------------------------------------------- + +Authors: +======== +Alexey Kuznetsov +Jamal Hadi Salim +Robert Olsson + +Acknowledgements: +================ +People who made this document better: + +Lennert Buytenhek +Andrew Morton +Manfred Spraul +Donald Becker +Jeff Garzik diff -urN linux-2.4.19/Documentation/networking/dl2k.txt linux-2.4.20/Documentation/networking/dl2k.txt --- linux-2.4.19/Documentation/networking/dl2k.txt Fri Aug 2 17:39:42 2002 +++ linux-2.4.20/Documentation/networking/dl2k.txt Thu Nov 28 15:53:08 2002 @@ -1,7 +1,7 @@ D-Link DL2000-based Gigabit Ethernet Adapter Installation for Linux - Jan 29, 2002 + May 23, 2002 Contents ======== @@ -202,7 +202,7 @@ 1000mbps_fd and 1000mbps_hd types are only available for fiber adapter. -vlan=[0|1] - Specifies the VLAN ID. If vlan=0, the +vlan=n - Specifies the VLAN ID. If vlan=0, the Virtual Local Area Network (VLAN) function is disable. @@ -211,24 +211,34 @@ function is disabled. Jumbo frame usually improve the performance int gigabit. + This feature need jumbo frame compatible + remote. -rx_coalesce=n - Rx frame count each interrupt. -rx_timeout=n - Rx DMA wait time for an interrupt. Proper - values of rx_coalesce and rx_timeout bring - a conspicuous performance in the fast machine. - Ex. rx_coalesce=5 and rx_timeout=750 - -tx_coalesce=n - Tx transmit count each TxComp interrupt. - Setting value larger than 1 will improve - performance, but this is possible to lower - stability in slow UP machines. By default, - tx_coalesce=1. (dl2k) +rx_coalesce=m - Number of rx frame handled each interrupt. +rx_timeout=n - Rx DMA wait time for an interrupt. + If set rx_coalesce > 0, hardware only assert + an interrupt for m frames. Hardware won't + assert rx interrupt until m frames received or + reach timeout of n * 640 nano seconds. + Set proper rx_coalesce and rx_timeout can + reduce congestion collapse and overload which + has been a bottlenect for high speed network. -tx_flow=[1|0] - Specifies the Tx flow control. If tx_flow=1, - the Tx flow control enable. + For example, rx_coalesce=10 rx_timeout=800. + that is, hardware assert only 1 interrupt + for 10 frames received or timeout of 512 us. + +tx_coalesce=n - Number of tx frame handled each interrupt. + Set n > 1 can reduce the interrupts + congestion usually lower performance of + high speed network card. Default is 16. -rx_flow=[1|0] - Specifies the Rx flow control. If rx_flow=1, - the Rx flow control enable. +tx_flow=[1|0] - Specifies the Tx flow control. If tx_flow=0, + the Tx flow control disable else driver + autodetect. +rx_flow=[1|0] - Specifies the Rx flow control. If rx_flow=0, + the Rx flow control enable else driver + autodetect. Configuration Script Sample diff -urN linux-2.4.19/Documentation/networking/e100.txt linux-2.4.20/Documentation/networking/e100.txt --- linux-2.4.19/Documentation/networking/e100.txt Wed Dec 31 16:00:00 1969 +++ linux-2.4.20/Documentation/networking/e100.txt Thu Nov 28 15:53:08 2002 @@ -0,0 +1,253 @@ +Linux* Base Driver for the Intel(R) PRO/100 Family of Adapters +============================================================== + +September 16, 2002 + + +Contents +======== + +- In This Release +- Supported Adapters +- Command Line Parameters +- CPU Cycle Saver +- Additional Configurations +- Support + + +In This Release +=============== + +This file describes the Linux* Base Driver for the Intel(R) PRO/100 Family of +Adapters, version 2.1.x. This driver includes support for Itanium(TM)-based +systems. + + +Supported Adapters +================== + +The following Intel network adapters are compatible with the drivers +in this release: + +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 (82550) +82559 A56831-xxx, A10563-xxx, + A12171-xxx, A12321-xxx, + A12320-xxx, A12170-xxx + 748568-xxx (82559) + 748565-xxx (82559) + + +82550 PRO/100 S Desktop Adapter 751767-xxx (82550) +82559 748592-xxx, A12167-xxx, + A12318-xxx, A12317-xxx, + A12165-xxx + 748569-xxx (82559) + + + +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 +A12345-001. 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://downloadfinder.intel.com/scripts-df/support_intel.asp + + +Command Line Parameters +======================= + +The following optional parameters are used by entering them on the command +line with the modprobe or insmod command using this syntax: + + modprobe e100 [