diff -u --recursive --new-file v2.4.0-test1/linux/CREDITS linux/CREDITS
--- v2.4.0-test1/linux/CREDITS Mon Jun 19 16:31:56 2000
+++ linux/CREDITS Mon Jun 19 12:56:07 2000
@@ -38,10 +38,11 @@
S: Ireland
N: Tigran A. Aivazian
-E: tigran@ocston.org
+E: tigran@veritas.com
W: http://www.ocston.org/~tigran
D: BFS filesystem
D: Intel P6 CPU microcode update support
+D: Various kernel patches
S: United Kingdom
N: Werner Almesberger
@@ -291,8 +292,9 @@
D: m68k port to HP9000/300
D: AUN network protocols
D: Co-architect of the parallel port sharing system
-S: Nexus Electronics Ltd
-S: 10 St Barnabas Road, Cambridge CB1 2BY
+D: IPv6 netfilter
+S: FutureTV Labs Ltd
+S: Brunswick House, 61-69 Newmarket Rd, Cambridge CB5 8EG
S: United Kingdom
N: Thomas Bogendörfer
@@ -407,8 +409,8 @@
N: Lennert Buytenhek
E: buytenh@gnu.org
D: Rewrite of the ethernet bridging code
-S: Handelstraat 35
-S: 3131 EK Vlaardingen
+S: Ravenhorst 58B
+S: 2317 AK Leiden
S: The Netherlands
N: Michael Callahan
@@ -970,7 +972,8 @@
D: Random SMP kernel hacker...
D: Uniform Multi-Platform E-IDE driver
D: Active-ATA-Chipset maddness..........
-D: Ultra DMA 66/33
+D: Ultra DMA 100/66/33
+D: ATA-Disconnect
D: ATA-Smart Kernel Daemon
S: Linux ATA Development (LAD)
S: Concord, CA
@@ -1109,6 +1112,14 @@
S: D-71679 Asperg
S: Germany
+N: Gareth Hughes
+E: gareth@valinux.com
+E: gareth@precisioninsight.com
+D: Pentium III FXSR, SSE support
+S: 11/187 West Street
+S: Crows Nest NSW 2065
+S: Australia
+
N: Kenn Humborg
E: kenn@wombat.ie
D: Mods to loop device to support sparse backing files
@@ -2102,6 +2113,15 @@
S: 9725 GA Groningen
S: The Netherlands
+N: Pekka Riikonen
+E: priikone@poseidon.pspt.fi
+E: priikone@ssh.com
+D: Random kernel hacking and bug fixes
+D: International kernel patch project
+S: Kasarmikatu 11 A4
+S: 70110 Kuopio
+S: Finland
+
N: William E. Roadcap
E: roadcapw@cfw.com
W: http://www.cfw.com/~roadcapw
@@ -2155,6 +2175,14 @@
S: The Australian National University, ACT 0200
S: Australia
+N: Aristeu Sergio Rozanski Filho
+E: aris@conectiva.com.br
+D: Support for EtherExpress 10 ISA (i82595) in eepro driver
+S: Conectiva S.A.
+S: R. Tocantins, 89 - Cristo Rei
+S: 80050-430 - Curitiba - Paraná
+S: Brazil
+
N: Alessandro Rubini
E: rubini@ipvvis.unipv.it
D: the gpm mouse server and kernel support for it
@@ -2168,7 +2196,7 @@
N: Paul `Rusty' Russell
E: rusty@linuxcare.com
-W: http://www.rustcorp.com
+W: http://www.samba.org/netfilter
D: Ruggedly handsome.
D: netfilter, ipchains with Michael Neuling.
S: 301/222 City Walk
@@ -2779,15 +2807,15 @@
S: The Netherlands
N: David Woodhouse
-E: David.Woodhouse@mvhi.com
-E: Dave@imladris.demon.co.uk
-D: Extensive ARCnet rewrite
-D: ARCnet COM20020, COM90xx IO-MAP drivers
-D: SO_BINDTODEVICE in 2.1.x (from Elliot Poger's code in 2.0.31)
-D: Contributed to NCPFS rewrite for 2.1.x dcache
-D: Alpha platforms: SX164, LX164 and Ruffian ported to 2.1.x
-S: 29, David Bull Way
-S: Milton, Cambridge. CB4 6DP
+E: dwmw2@infradead.org
+E: dwmw2@redhat.com
+D: ARCnet stuff, Applicom board driver, SO_BINDTODEVICE,
+D: some Alpha platform porting from 2.0, Memory Technology Devices,
+D: Acquire watchdog timer, PC speaker driver maintenance,
+D: various other stuff that annoyed me by not working.
+S: c/o Red Hat UK Limited
+S: 35-36 Cambridge Place
+S: Cambridge. CB2 1NS
S: England
N: Frank Xia
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/Changes linux/Documentation/Changes
--- v2.4.0-test1/linux/Documentation/Changes Fri May 12 14:18:55 2000
+++ linux/Documentation/Changes Mon Jun 19 12:56:07 2000
@@ -2,7 +2,7 @@
=====
This document is designed to provide a list of the minimum levels of
-software necessary to run the 2.3 kernels, as well as provide brief
+software necessary to run the 2.4 kernels, as well as provide brief
instructions regarding any other "Gotchas" users may encounter when
trying life on the Bleeding Edge. If upgrading from a pre-2.2.x
kernel, please consult the Changes file included with 2.2.x kernels for
@@ -10,861 +10,327 @@
here. Basically, this document assumes that your system is already
functional and running at least 2.2.x kernels.
- It is originally based on my "Changes" file for 2.2.x kernels and
-therefore owes credit to the same people as that file (Jared Mauch,
+This document is originally based on my "Changes" file for 2.0.x kernels
+and therefore owes credit to the same people as that file (Jared Mauch,
Axel Boldt, Alessandro Sigala, and countless other users all over the
-'net). Please feel free to submit changes, corrections, gripes,
-flames, money, etc. to me (kaboom@gatech.edu). If you do so, you don't
-need to bother doing so in the form of a diff, as this is generated by
-texinfo so a diff is useless anyway (though I can incorporate one by
-hand if you insist upon sending it that way ;-).
-
- For those of you in Europe,
-http://www.datanet.hu/generations/linux/Changes2.html is an
-English-language HTML version.
-
- The most current version should always be available from
-http://cyberbuzz.gatech.edu/kaboom/linux/ as well.
-
- Voir
-http://www.linux-france.com/article/sys/Changes-2.2/Changes-2.2.1.html
-pour la traduction français.
+'net).
- Also, don't forget http://www.linuxhq.com/ for all your Linux kernel
-needs.
+The latest revision of this document, in various formats, can always
+be found at http://cyberbuzz.gatech.edu/kaboom/linux/Changes-2.4/
+.
-Last updated: Feb 21, 2000
-Current Author: Chris Ricker (kaboom@gatech.edu or chris.ricker@m.cc.utah.edu).
+Feel free to translate this document. If you do so, please send me a
+URL to your translation for inclusion in future revisions of this
+document.
+
+Last updated: June 11, 2000
+
+Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu).
Current Minimal Requirements
-****************************
+============================
- Upgrade to at *least* these software revisions before thinking you've
+Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
-- Kernel modutils 2.3.10 ; insmod -V
-- Gnu C 2.7.2.3 ; gcc --version
-- Binutils 2.9.1.0.7 ; ld -v
-- Linux libc5 C Library 5.4.46 ; ls -l /lib/libc*
-- Linux libc6 C Library 2.0.7pre6 ; ls -l /lib/libc*
-- Dynamic Linker (ld.so) 1.9.9 ; ldd --version or ldd -v
-- Linux C++ Library 2.7.2.8 ; ls -l /usr/lib/libg++.so.*
-- Procps 1.2.9 ; ps --version
-- Procinfo 16 ; procinfo -v
-- Psmisc 17 ; pstree -V
-- Net-tools 1.50 ; hostname -V
-- Loadlin 1.6a
-- Sh-utils 1.16 ; basename --v
-- Autofs 3.1.1 ; automount --version
-- NFS (client) 2.2beta40 ; showmount --version
-- nfs-utils (server) 0.1.4
-- Bash 1.14.7 ; bash -version
-- Ncpfs 2.2.0 ; ncpmount -v
-- Pcmcia-cs 3.1.2 ; cardmgr -V
-- PPP 2.4.0b1 ; pppd --version
-- Util-linux 2.9i ; chsh -v
-- isdn4k-utils v3.1beta7 ; isdnctrl 2>&1|grep version
-
-Upgrade notes
-*************
-
-General Information
-===================
-
- To use System V shared memory, you have to mount the shm filesystem
-somewhere. You can do that automatically by adding this line to /etc/fstab:
-
-none /var/shm shm defaults 0 0
-
-Remember to create the mountpoint directory; it does not have to be /var/shm.
-
- now performs a cold reboot instead of a warm reboot
-for increased hardware compatibility. If you want a warm reboot and
-know it works on your hardware, add a "reboot=warm" command line option
-in LILO. A small number of machines need "reboot=bios" to reboot via
-the BIOS.
-
- Also, please remember that cua* devices are now obsolete. Switch to
-the corresponding ttyS* device instead (e.g., cua0 -> ttyS0, cua1 ->
-ttyS1, etc.).
-
- In addition, some software still works, but needs to be compiled
-against 2.2 headers for complete functionality. Fdutils binaries
-compiled under 2.0 or earlier kernels should be replaced with ones
-compiled under 2.2, for example.
-
- As of 2.1.115, support for the deprecated major 4 /dev/ttyp* devices
-was removed. If necessary (eg, you get "out of pty" error messages when
-you obviously are not out of pty's), create major 3 /dev/tty* and major
-2 /dev/pty* devices (see Documentation/devices.txt for more
-information). In general, you should make sure that your /dev
-directory is up-to-date if you are experiencing any problems.
-
- Optional support for Unix98 pty devices has also been added. If you
-want to use the Unix98 ptys, you should be running at least
-glibc-2.0.9x, and you must switch completely to Unix98 pty's. The
-general procedure for configuring Unix98 pty support is:
-
-- Compile your kernel with CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS.
-- mknod /dev/ptmx c 5 2
- chmod 666 /dev/ptmx
- mkdir /dev/pts
-- Add to /etc/fstab:
-
- none /dev/pts devpts gid=5,mode=620 0 0
-
- (Note: gid=5 is applicable for Red Hat systems for which group "tty" has
- gid 5. Adjust according to your distribution. Use mode=600 if you want
- "mesg n" to be default.)
-- Mount /dev/pts
-
- Frame buffer consoles ("fbcon") are now in the kernel for all
-platforms, not just those non-Intel ones for which VGA text mode is
-impossible. VGAcon is still available for those who want it, but fbcon
-has the advantage of providing a uniform graphical subsystem across all
-Linux ports, and it displays a spiffy penguin logo on boot-up ;-). For
-more information, see the files in Documentation/fb/ ; you may also
-need to download the fbset utilities.
-
-Libc (libc5)
-============
-
- Linux-2.2 is ELF-only. You can still compile a.out apps if you
-really want, but your kernel must be compiled ELF. If you can't
-currently compile ELF, consult the ELF howto at
-http://metalab.unc.edu/mdw/HOWTO/ELF-HOWTO.html and upgrade your system
-accordingly.
-
- For modules to work, you need to be running libc-5.4.x or greater.
-Since updates to libc fix other problems as well (security flaws, for
-example) and since 5.4.7 is missing a few needed symbols, try to get
-the latest 5.4.x you can. Currently, libc-5.4.46 is the latest public
-release.
-
- If you upgrade to libc-5.4.x, you also have to upgrade your dynamic
-linker (ld.so) to at least 1.9.9, or all sorts of weirdness will
-happen. Actually, ld.so-1.8.2 and later will work, but 1.9.9 is widely
-available, so if you need to upgrade, use it. If you get a release
-later than 1.8.5, avoid 1.8.10 as it introduces a few bugs that are
-fixed in later releases. Please make sure you don't install ld.so-2.x
-unless you're running glibc2 / libc6.
-
- If you upgrade to libc-5.4.x, you may also need to upgrade ypbind if
-you're using NIS. For ypbind and glibc, you'll probably need the
-ypbind-3.3-glibc5.diff patch available in the same place as the ypbind
-source.
-
- If you upgrade to libc-5.4.46, please read and pay attention to its
-accompanying release notes. The section about it breaking make is not a
-joke.
-
-GNU libc (libc6)
-================
-
- Older versions of GNU libc (libc6) have a bug in the dynamic linker.
-/etc/ld.so.cache gets mapped into memory and is never unmapped. If one
-of your boot scripts calls ldconfig, /etc/ld.so.cache is deleted. Init,
-however, still references that file; as of 2.1.122, the kernel will
-consequently not be able to remount the root file system r/o at system
-shutdown. To fix this, upgrade to at least the pre6 release of GNU
-libc 2.0.7. As a temporary workaround, modify your boot scripts to do
-the following before calling ldconfig:
-
- ln -f /etc/ld.so.cache /etc/ld.so.cache.old
-
-Modules
-=======
-
- You need to upgrade to the latest version of modutils for the Linux
-2.3 kernel. This version can also be built to work with your 2.0 kernel.
-
- As of 2.1.90-pre1, kerneld has been replaced by a kernel thread,
-kmod. See Documentation/kmod.txt for more information. The main
-user-level change this requires is modification to your init scripts to
-check for the absence of /proc/sys/kernel/modprobe before starting
-kerneld.
-
-Binutils
-========
-
- If you upgrade binutils, please read its accompanying release notes
-to find out the proper way to upgrade it. No, the instruction to "rm
-`which encaps`" is not a joke.
-
- You must use binutils 2.9.1.0.7 or later. Latest release is 2.9.1.0.25.
-Beware that binutils 2.9.1 (note the absence of a suffix) from the FSF
-does not work. If you are upgrading from earlier versions, you should
-consider upgrading to the latest 2.9.5.0.x (beta) release.
-
-Gnu C
-=====
-
- You need at least GCC 2.7.2 to compile the kernel. If you're
-upgrading from an earlier release, you might as well get GCC 2.7.2.3,
-the latest stable public release. If you already have GCC 2.7.2 on
-your system, you don't have to upgrade just so the kernel will work
-(though feel free to upgrade if you want the gcc bug fixes).
-
- Note that the latest compilers (egcs, pgcc, gcc 2.8) may do Bad
-Things while compiling your kernel, particularly if absurd
-optimizations (like -O9) are used. Caveat emptor. Currently, the only
-C compiler available in a binary distribution is egcs. Version 1.0.3
-seems okay; if you have to have a binary, you may be successful using
-that. In general, however, gcc-2.7.2.3 is known to be stable, while
-egcs and others have not been as thoroughly tested yet.
-
-Networking Changes
+Again, keep in mind that this list assumes you are already
+functionally running a Linux 2.2 kernel. Also, not all tools are
+necessary on all systems; obviously, if you don't have any PCMCIA (PC
+Card) hardware, for example, you probably needn't concern yourself
+with pcmcia-cs.
+
+o Gnu C 2.7.2.3 # gcc --version
+o binutils 2.9.1.0.7 # ld -v
+o util-linux 2.10g # chsh -v
+o modutils 2.3.10 # insmod -V
+o e2fsprogs 1.18 # /sbin/tune2fs --version
+o pcmcia-cs 3.1.13 # cardmgr -V
+o PPP 2.4.0b1 # pppd --version
+o isdn4k-utils 3.1beta7 # isdnctrl 2>&1|grep version
+
+Kernel compilation
==================
- Please read Documentation/networking/routing.txt and
-Documentation/networking/policy-routing.txt for more information about
-changes in routing code. OSPF classes have been added, and interface
-routes are generated automatically.
-
- If for some reason you need to override this automatic default
-routing, you have to specify the complete route specification (netmask,
-device, etc.) for the kernel to accept it. Consequently, you need to
-either remove interface routes from your init scripts or add missing
-information to them if you need to replace the automatic routes.
-
- Also note that some routes, such as loopback routes, do not show up
-in some standard tools. Check in /proc/net/rt_local to verify their
-presence.
-
- To turn on IP forwarding, issue the following command: echo 1 >
-/proc/sys/net/ipv4/ip_forward
-
- Similar procedures are necessary to turn on other features. If
-something appears broken, check the /proc/sys/net/ipv4/ directory. "1"
-generally denotes enabled, while "0" generally denotes disabled.
-
- If you're experiencing reports of lots of network errors, chances
-are you need to upgrade to a more recent net-tools that understands the
-new /proc/net/dev format. This will also provide support for new
-features like IPv6.
-
- The IP firewalling and NAT code has been replaced again. The
-userspace tool `iptables' is distributed at:
- http://antarctica.penguincomputing.com/~netfilter/
- http://www.samba.org/netfilter/
- http://netfilter.kernelnotes.org
-
- DHCP clients for 2.0 do not work with the new networking code in the
-2.2 kernel. You will need to upgrade your dhcpcd / dhcpclient.
-
- In 2.0.x the kernel could be configured to drop source routed IP
-packets via a compile time configuration option. In 2.2.x, this has
-been replaced by a sysctl. See Documentation/networking/ip-sysctl.txt
-for more information.
-
-Memory
-======
-
- As of 2.1.41, the format of /proc/meminfo has changed. This broke
-many memory utils, which have to be upgraded. Get the new procps-1.2
-and you should be set.
-
-Network File System
-===================
-
- The NFS code in the kernel is currently being revised, resulting in
-much-improved performance. Also, amd is being phased out in favor of
-the much better autofs. You'll also have to get the appropriate utils
-to use autofs as well as the new NFS utils. In addition, you have the
-choice of user-land NFS or kernel-level NFS (knfs).
-
-Util-linux (including mount)
-============================
-
- Among other changes made in the development of Linux kernel 2.2, the
-128 meg limit on IA32 swap partition sizes has been eliminated. To use
-larger swap spaces, you need the new mkswap found in util-linux. You
-also need to upgrade util-linux to get the latest version of mount.
+GCC
+---
- Partitions on 2048 byte sectored media (certain magneto opticals
-most prominently) were broken throughout the whole of 2.1 kernel
-series, meaning that you will be unable to use 2.1-partitioned media on
-Linux 2.2. This is not a 2.2 bug - 2.2 finally does the right thing!
-[If you have to interchange media between Linux 2.1 and 2.2, your best
-bet is to not use partitions at all but create the filesystem on the
-raw device (e.g. /dev/sda) instead. This is also known as the
-superfloppy format.]
+You will need at least gcc 2.7.2 to compile the kernel. You currently
+have several options for gcc-derived compilers: gcc 2.7.2.3, various
+versions of egcs, the new gcc 2.95 and upcoming gcc 3.0, and experimental
+compilers like pgcc. For absolute stability, it is still recommended
+that gcc 2.7.2.3 be used to compile your kernel. egcs 1.12 should also
+work. gcc 2.95 is known to have problems, and using pgcc for your kernel
+is just asking for trouble.
+
+In addition, please pay attention to compiler optimization. Anything
+greater than -O2 may not be wise. Similarly, if you choose to use gcc-2.95
+or derivatives, be sure not to use -fstrict-aliasing (which, depending on
+your version of gcc 2.95, may necessitate using -fno-strict-aliasing).
- To properly create partitions on 2048 byte sectored media with Linux
-2.2, be sure to use no less than fdisk version 2.9i and invoke fdisk
-using '-b 2048' as an option.
-
-
-RPM
-===
+Binutils
+--------
- If you run Red Hat Linux or any other distribution that uses RPM,
-you need to upgrade RPM to a 2.5.x or later version.
+Linux on IA/32 has recently switched from using as86 to using gas for
+assembling the 16-bit boot code, removing the need for as86 to compile
+your kernel. This change does, however, mean that you need a recent
+release of binutils.
+
+If you can, upgrade to the latest 2.9.5 binutils release. Older
+releases such as 2.8, 2.8.xx, and the FSF's 2.9.1 should be avoided if
+at all possible. The later releases of 2.9.1.0.x (anything where x >= 7)
+can and do compile the kernel properly, but there are many benefits
+to upgrading to 2.9.5 if you're up to it.
-DOSEMU
-======
+System utils
+============
- A new "stable" version of DOSEMU is available for 2.2 kernels.
-Upgrade to 0.98.4 or later.
+Architectural changes
+---------------------
-Loadlin
-=======
+DevFS is now in the kernel. See Documentation/filesystems/devfs/* in
+the kernel source tree for all the gory details.
- Linux 2.1.22 and later releases use a new method of memory size
-detection, requiring loadlin users to upgrade to loadlin-1.6a.
+System V shared memory is now implemented via a virtual filesystem.
+You do not have to mount it to use it as long as you can live with the
+default maxima for shared memory and segments. If you wish to change
+these variables, you have to mount it with the options nr_blocks
+and/or nr_inodes. POSIX shared memory is also now implemented via a
+virtual filesystem. If you want to use it, you'll need to mount the
+filesystem. The recommended mount location is /dev/shm, and adding the
+following line to /etc/fstab should take care of things:
+
+none /dev/shm shm defaults 0 0
+
+Remember to create the directory that you intend to mount shm on if
+necessary.
+
+The Logical Volume Manager (LVM) is now in the kernel. If you want to
+use this, you'll need to install the necessary LVM toolset.
+
+32-bit UID support is now in place. Have fun!
+
+Linux documentation for functions is transitioning to inline
+documentation via specially-formatted comments near their
+definitions in the source. These comments can be combined with the
+SGML templates in the Documentation/DocBook directory to make DocBook
+files, which can then be converted by DocBook stylesheets to PostScript,
+HTML, PDF files, and several other formats. In order to convert from
+DocBook format to a format of your choice, you'll need to install Jade as
+well as the desired DocBook stylesheets.
-Sh-utils
-========
+Util-linux
+----------
- As of Linux-2.1.26, the Configure script ("make config") has been
-updated to be POSIX-compliant. As a result, your expr needs to be
-updated. Use sh-utils 1.16 or later.
+New versions of util-linux provide *fdisk support for larger disks,
+support new options to mount, recognize more supported partition
+types, and similar goodies. You'll probably want to upgrade.
-Parallel Ports
-==============
+Ksymoops
+--------
- As of 2.1.33, parallel port support can now by handled by the parport
-driver. Be aware that your parallel port may no longer be where you
-expect it; for example, LPT1 (under DOS) was sometimes /dev/lp1 in
-Linux, but will probably be /dev/lp0 with the new parport driver. If
-printing breaks with the new driver, try checking your lpd
-configuration. A good source of more information is the
-Documentation/parport.txt file included with the kernel.
+If the unthinkable happens and your kernel oopses, you'll need a 2.3
+version of ksymoops to decode the report; see REPORTING-BUGS in the
+root of the Linux source for more information.
-Setserial
-=========
+Modutils
+--------
- If you experience random problems (stuck lines, lost characters,
-etc.) with serial lines under recent kernels, upgrading setserial
-should help.
+Upgrade to recent modutils to fix various outstanding bugs which are
+seen more frequently under 2.3.x, and to enable auto-loading of USB
+modules.
-Syncookies
-==========
+E2fsprogs
+---------
- When you build your kernel with Syncookie support
-(CONFIG_SYN_COOKIES) the syncookie code still defaults to off (unlike
-the 2.0.30+ behavior). You have to explicitly enable it by issuing the
-following command: echo 1 > /proc/sys/net/ipv4/tcp_syncookies
-
-Bash
-====
-
- Old versions of Bash fail to properly handle symlinks, which can
-cause problems when compiling modules. Upgrade to at least 1.14 to fix
-this problem.
-
-Sysklogd
-========
-
- Older versions of sysklogd sometimes segfault under 2.2 kernels.
-Upgrading to the latest release fixes that problem as well as adding
-support for new features like system power-off on halt (with
-appropriate incantations of halt; see the man page) and automatic
-decoding of kernel oopses.
-
-Ncpfs
-=====
-
- To mount NetWare shares, you'll need to upgrade to a more recent
-version of the ncpfs utils.
-
-SMBfs
-=====
-
- To mount SMB (Samba / Windows) shares, you'll need to use the
-smbmount utility included with release 2.0 of Samba.
-Documentation/filesystems/smbfs.txt has more information about this.
-Note that smbmount must have been built against 2.2 headers to work
-with 2.2; if all else fails, recompile it and hope it works ;-). In
-addition, Mike Warfield has a script and some information at
-http://www.wittsend.com/mhw/smbmount.html that you will probably find
-useful.
+The latest version of e2fsprogs fixes several bugs in fsck and
+debugfs. Obviously, it's a good idea to upgrade.
Pcmcia-cs
-=========
-
- If you use pcmcia cards, you'll need to upgrade the daemon and
-support utils to the latest release of pcmcia-cs.
-
-PPP
-===
-
- The PPP driver has been restructured to support multilink and
-to enable it to operate over diverse kinds of media. Those of you
-using PPP networking will need to upgrade your pppd to at least
-version 2.4.0b1. See ftp://linuxcare.com.au/pub/ppp/ for the latest
-version.
-
- If you are not using devfs, you must make sure that the special
-device file /dev/ppp exists. It can be made by executing this command
-as root:
-
- mknod /dev/ppp c 108 0
-
- If you have built ppp support as modules, you should put the lines
-below in your /etc/modules.conf file.
-
- alias char-major-108 ppp_generic
- alias /dev/ppp ppp_generic
- alias tty-ldisc-3 ppp_async
- alias tty-ldisc-14 ppp_synctty
- alias ppp-compress-21 bsd_comp
- alias ppp-compress-24 ppp_deflate
- alias ppp-compress-26 ppp_deflate
-
-If you are using devfsd and you have ppp_generic as a module, put the
-following line in your /etc/devfsd.conf:
-
- LOOKUP ppp MODLOAD
-
-iBCS
-====
-
- A new version of iBCS is necessary for 2.2 kernels.
-
-AppleTalk
-=========
-
- Use the Asun version of netatalk for AppleTalk support, as Umich's
-version is not compatible with 2.2 kernels.
+---------
-Psmisc
-======
+PCMCIA (PC Card) support is now partially implemented in the main
+kernel source. Pay attention when you recompile your kernel ;-).
+Also, be sure to upgrade to the latest pcmcia-cs release.
- fuser, which comes with psmisc, reads /proc/*/fd/* to do its job.
-Upgrade psmisc if 2.2 changes to /proc broke the version you're using.
+Intel P6 microcode
+------------------
-PCI utils
-=========
+A driver has been added to allow updating of Intel P6 microcode,
+accessible as both a devfs regular file and as a normal (misc)
+character device. If you are not using devfs you may need to:
- Linux PCI utils are available; these include lspci, which displays
-detailed information about your system's PCI devices (much more than
-the basic things in /proc/pci), and setpci, which allows you to read
-and write PCI configuration registers of your devices.
+mkdir /dev/cpu
+mknod /dev/cpu/microcode c 10 184
+chmod 0644 /dev/cpu/microcode
-Powertweak
-==========
-
- The PCI Bridge Optimization has been removed from the kernel. If you
-think your BIOS does a poor job when setting up your chipset, there
-is a utility called PowerTweak whose job is to tune chipset parameters.
-
-Xosview
-=======
+as root before you can use this. You'll probably also want to
+get the user-space microcode_ctl utility to use with this.
- Changes to the /proc interface require a recent xosview.
-
-RealPlayer
+Networking
==========
- Current releases of Real Player 5.0 depend on a bug in the sound
-sub-system which is no longer there. Consequently, they don't work.
-Real is aware of the problem and should have an updated version of the
-software available shortly. In the mean time, you can always try
-backing up your copy of rvplayer, and then editing it by:
-
- dd if=/dev/zero of=rvplayer bs=1 count=1 seek=657586 conv=notrunc
- dd if=/dev/zero of=rvplayer bs=1 count=1 seek=665986 conv=notrunc
-
- If you're lucky, you'll then have sound....
-
- You may also need to edit it with
-
- dd if=/dev/zero of=rvplayer bs=1 count=1 seek=702554 conv=notrunc
-
- as well. Alternately, download rpopen from
-http://onramp.i2k.com/~jeffd/rpopen/ and pre-load it before you run
-rvplayer (it's a shared object which blocks rvplayer from doing the
-NONBLOCKing open of /dev/dsp).
-
-Quotas
-======
-
- If you are using large quotas, you should upgrade your quota utils;
-newer versions count file sizes in blocks instead of bytes, providing
-an upper limit of terabytes instead of 4 GB.
-
-Ping
-====
-
- Most distributed ping clients are buggy. Get an updated one from the
-iputils package.
-
-Patch
-=====
-
- Really old versions of patch cannot delete files. This can be a
-problem if you try to upgrade via patches. If, for example, you are
-unable to compile Linux 2.2, you may have an outdated version of patch.
-Upgrade, re-patch the kernel, and try again.
-
-Process accounting
-==================
+General changes
+---------------
- If you use process accounting, you need to recompile the package
-against 2.2 kernel includes for it to work properly. Furthermore, when
-you do so, watch out for a quirky configure script. Your generated
-config.h file needs to
+The IP firewalling and NAT code has been replaced again. The new
+netfilter software (including ipfwadm and ipchains backwards-
+compatible modules) is currently distributed separately.
- #define HAVE_LINUX_ACCT_H
-
- but instead it often has
-
- /* #undef HAVE_LINUX_ACCT_H */
-
- so be sure to check that when you recompile.
-
-ISDN4Linux
-==========
-Since 2.3.27 here is a new length of the phonenumber field, old utils
-have to recompile, a upgrade to isdn4k-utils.v3.1beta7 or later is
-recomented.
-Older isdn4k-utils versions don't support EXTRAVERSION into kernel version
-string.
-
-Logical Volume Manager
-======================
-Since 2.3.47 the kernel contains the Logical Volume Manager aka LVM. To use it,
-you need to install the LVM tools. More information can be found at the home page
-of the LVM project at http://linux.msede.com/lvm/.
-
-Inline Documentation
-====================
-Many of the functions available for modules to use are now documented
-with specially-formatted comments near their definitions. These
-comments can be combined with the SGML templates in the
-Documentation/DocBook directory to make DocBook files, which can then
-be combined with DocBook stylesheets to make PostScript documents,
-HTML pages, PDF files, and so on. In order to convert from DocBook
-format to a format of your choice, you'll need to install jade, as
-well as some stylesheets.
+If you have advanced network configuration needs, you should probably
+consider using the network tools from ip-route2.
+PPP
+---
-Where to get the files
-**********************
+The PPP driver has been restructured to support multilink and to
+enable it to operate over diverse media layers. If you use PPP,
+upgrade pppd to at least 2.4.0b1.
+
+If you are not using devfs, you must have the device file /dev/ppp
+which can be made by:
+
+mknod /dev/ppp c 108 0
+
+as root.
+
+If you build ppp support as modules, you will need the following in
+your /etc/modules.conf file:
+
+alias char-major-108 ppp_generic
+alias /dev/ppp ppp_generic
+alias tty-ldisc-3 ppp_async
+alias tty-ldisc-14 ppp_synctty
+alias ppp-compress-21 bsd_comp
+alias ppp-compress-24 ppp_deflate
+alias ppp-compress-26 ppp_deflate
+
+If you use devfsd and build ppp support as modules, you will need
+the following in your /etc/devfsd.conf file:
+
+LOOKUP PPP MODLOAD
+
+Isdn4k-utils
+------------
+
+Due to changes in the length of the phone number field, isdn4k-utils
+needs to be recompiled or (preferably) upgraded.
+
+Getting updated software
+========================
+
+Compilers
+*********
+
+gcc 2.7.2.3
+-----------
+o ftp://ftp.gnu.org/gnu/gcc/gcc-2.7.2.3.tar.gz
+
+o ftp://metalab.unc.edu/pub/gnu/gcc-2.7.2.3.tar.gz
+
+
+egcs 1.12
+---------
+o ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-glibc.x86.tar.bz2
+
+o ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-libc5.x86.tar.bz2
+
+o ftp://ftp.varesearch.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-alpha.tar.bz2
+
Binutils
-========
-
-The 2.9.1.0.25 release:
-ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/binutils-2.9.1.0.25-glibc.x86.tar.gz
-ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/binutils-2.9.1.0.25.tar.gz
-Installation notes:
-ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/release.binutils-2.9.1.0.25
-
-The 2.9.5.0.22 release:
-ftp://ftp.varesearch.com/pub/support/hjl/binutils/binutils-2.9.5.0.22.tar.bz2
-Installation notes:
-ftp://ftp.varesearch.com/pub/support/hjl/binutils/release.binutils-2.9.5.0.22
-
-Gnu C
-=====
-
-The egcs-1.0.3 release:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/egcs-1.0.3-glibc.x86.tar.bz2
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/egcs-1.0.3-libc5.x86.tar.bz2
-ftp://metalab.unc.edu/pub/Linux/GCC/egcs-1.0.3-glibc.x86.tar.bz2
-ftp://metalab.unc.edu/pub/Linux/GCC/egcs-1.0.3-libc5.x86.tar.bz2
-Installation notes:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/release.egcs-1.0.3
-ftp://metalab.unc.edu/pub/Linux/GCC/release.egcs-1.0.3
-
-Gnu C 2.7.2.3 source:
-ftp://ftp.gnu.org/gnu/gcc/gcc-2.7.2.3.tar.gz
-ftp://metalab.unc.edu/pub/gnu/gcc-2.7.2.3.tar.gz
-
-Linux C Library
-===============
-
-The (libc5) 5.4.46 release:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/libc-5.4.46.bin.tar.gz
-ftp://metalab.unc.edu/pub/Linux/GCC/libc-5.4.46.bin.tar.gz
-Installation notes for 5.4.46:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/release.libc-5.4.46
-ftp://metalab.unc.edu/pub/Linux/GCC/release.libc-5.4.46
-
-The (libc6) GNU libc 2.0.7pre6 release:
-ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.gz
-ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.bz2
-
-Linux C++ Library
-=================
-
-The 2.7.2 release:
-ftp://ftp.gnu.org/gnu/libg++/libg++-2.7.2.tar.gz
-
-Dynamic Linker
-==============
-
-The 1.9.9 release:
-ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.9.9.tar.gz
-ftp://metalab.unc.edu/pub/Linux/GCC/ld.so-1.9.9.tar.gz
-
-Modules utilities
-=================
-
-The 2.3.10 release:
-ftp://ftp.ocs.com.au/pub/modutils/v2.3/modutils-2.3.10.tar.gz
-
-Procps utilities
-================
-
-The 1.2 release:
-ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin/procps-1.2.9.tar.gz
-ftp://metalab.unc.edu/pub/Linux/system/status/ps/procps-1.2.9.tgz
-
-Procinfo utilities
-==================
-
-The 16 release:
-ftp://ftp.cistron.nl/pub/people/svm/procinfo-16.tar.gz
-
-Psmisc utilities
-================
-
-The 17 release:
-ftp://lrcftp.epfl.ch/pub/linux/local/psmisc/psmisc-17.tar.gz
-ftp://metalab.unc.edu/pub/Linux/system/status/ps/psmisc-17.tar.gz
-
-RPM utilities
-=============
-
-The 2.5.1 source release:
-ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1-1.src.rpm
-ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1.tar.gz
-
-DOSEMU
-======
-
-The 0.98.1 release:
-ftp://tsx-11.mit.edu/pub/linux/ALPHA/dosemu/dosemu-0.98.4.tgz
-ftp://ftp.dosemu.org/dosemu/dosemu-0.98.4.tgz
+********
-Loadlin
-=======
+2.9.1 series
+------------
+o ftp://ftp.varesearch.com/pub/support/hjl/binutils/2.9.1/binutils-2.9.1.0.25.tar.gz
+
+
+2.9.5 series
+------------
+o ftp://ftp.varesearch.com/pub/support/hjl/binutils/binutils-2.9.5.0.29.tar.gz
+
-The 1.6a release:
-ftp://ftp.suse.com/pub/loadlin/update-1.6a/loadlin.exe.gz
-ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/update-1.6a/loadlin.exe.gz
-
-Sh-utils
-========
-
-The 1.16 release:
-ftp://metalab.unc.edu/pub/gnu/sh-utils-1.16.tar.gz
-ftp://ftp.gnu.org/gnu/sh-utils/sh-utils-1.16.tar.gz
+System utilities
+****************
Util-linux
-==========
-
-The 2.9 release:
-ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/util-linux-2.9i.tar.gz
-
-Autofs
-======
-
-The 3.1.3 release:
-ftp://ftp.kernel.org/pub/linux/daemons/autofs/autofs-3.1.3.tar.gz
-
-NFS
-===
-
-The user-land 2.2beta40 release:
-ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz
-ftp://linux.nrao.edu/mirrors/fb0429.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz
-
-The kernel-level nfs-utils-0.1.4 release:
-ftp://nfs.sourceforge.net/pub/nfs/nfs-utils-0.1.4.tar.gz
-
-Net-tools
-=========
-
-The 1.50 release:
-ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/net-tools-1.50.tar.gz
-http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.50.tar.gz
-
-Ypbind
-======
-
-The 3.3 release:
-ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3.tar.gz
-
-Sysklogd
-========
-
-The 1.3-31 release:
-ftp://metalab.unc.edu/pub/Linux/system/daemons/sysklogd-1.3-31.tar.gz
-
-Bash
-====
-
-The 1.14.7 release:
-ftp://ftp.gnu.org/gnu/bash/bash-1.14.7.tar.gz
-
-The 2.02.1 release:
-ftp://ftp.gnu.org/gnu/bash/bash-2.02.1.tar.gz
-
-Ncpfs
-=====
-
-The 2.2.0 release:
-ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/ncpfs-2.2.0.tgz
-
-SMBfs
-=====
-
-The 2.0.0 release of Samba:
-ftp://ftp.samba.org/pub/samba/samba-2.0.0.tar.gz
+----------
+o ftp://ftp.cwi.nl/pub/aeb/util-linux/util-linux-2.10g.tar.gz
+
+
+Ksymoops
+--------
+o ftp://ftp.kernel.org/pub/linux/utils/kernel/ksymoops/v2.3
+
+
+Modutils
+--------
+o ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils/v2.3/modutils-2.3.9.tar.gz
+
+
+E2fsprogs
+---------
+o http://web.mit.edu/tytso/www/linux/dist/e2fsprogs-1.18.tar.gz
+
+o http://web.mit.edu/tytso/www/linux/dist/e2fsprogs-1.18.src.rpm
+
+
+LVM toolset
+-----------
+o http://linux.msede.com/lvm/
Pcmcia-cs
-=========
-
-The 3.1.2 release:
-ftp://sourceforge.org/pcmcia/pcmcia-cs-3.1.2.tar.gz
-
-Setserial
-=========
-
-The 2.15 release:
-ftp://tsx-11.mit.edu/pub/linux/sources/sbin/setserial-2.15.tar.gz
-ftp://metalab.unc.edu/pub/Linux/system/serial/setserial-2.15.tar.gz
-
-PPP
-===
-
-The 2.4.0b1 release:
-ftp://linuxcare.com.au/pub/ppp/ppp-2.4.0b1.tar.gz
-
-iptables
-=========
-
-The 1.1.0 release:
-http://antarctica.penguincomputing.com/~netfilter/iptables-1.1.0.tar.bz2
-http://www.samba.org/netfilter/iptables-1.1.0.tar.bz2
-http://netfilter.kernelnotes.org/iptables-1.1.0.tar.bz2
-
-IP Masq Adm
-===========
-
-The 0.4.2 release:
-http://juanjox.linuxhq.com/ipmasqadm-0.4.2.tar.gz
-
-DHCP clients
-============
-
-The 2.0b1p18 ISC dhcpclient release:
-ftp://ftp.isc.org/isc/dhcp/test/dhcp-2.0b1pl8.tar.gz
-
-The 1.3.17-pl2 PhysTech dhcpcd release:
-ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl2.tar.gz
-
-iBCS
-====
-
-The 11/05/98 release:
-ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2/ibcs-2.1-981105-ALPHA.tar.gz
-
-Asun netatalk
-=============
-
-The 2.0a18.2 release:
-ftp://ftp.u.washington.edu/pub/user-supported/asun/netatalk-1.4b2+asun2.0a18.2.tar.gz
-
-Fbset
-=====
-
-The 11/04/98 release:
-http://www.cs.kuleuven.ac.be/~geert/bin/fbset-2.0-pre-19981104.tar.gz
-
-PCI utils
-=========
-
-The 2.1.5 release:
-ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/pciutils-2.1.5.tar.gz
-ftp://metalab.unc.edu/pub/Linux/hardware/pciutils-2.1.5.tar.gz
-
-Powertweak
-==========
-
-The 0.1.13 release:
-http://linux.powertweak.com/files/powertweak-0.1.13.tgz
-ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/powertweak/powertweak-0.1.13.tgz
-
-Xosview
-=======
-
-The 1.6.1 release:
-ftp://metalab.unc.edu/pub/Linux/system/status/xstatus/xosview-1.6.1.tar.gz
-
-Quota utils
-===========
-
-The 1.55 release:
-ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.i386.rpm
-ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.src.rpm
-
-IP utils
-========
-
-The 03/01/99 release:
-ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.1.99-now-ss990301.tar.gz
-
-Patch
-=====
-
-The 2.5 release:
-ftp://ftp.gnu.org/gnu/patch/patch-2.5.tar.gz
-
-ISDN4Linux
-==========
-
-The v3.1beta7 release:
-ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/testing/isdn4k-utils.v3.1beta7.tar.gz
-
-Logical Volume Manager
-======================
-
-The 0.7 release:
-ftp://linux.msede.com/lvm/v0.7/lvm_0.7.tar.gz
+---------
+o ftp://sourceforge.org/pcmcia/pcmcia-cs-3.1.13.tar.gz
+
Jade
-====
-
-The 1.2.1 release:
-ftp://ftp.jclark.com/pub/jade/jade-1.2.1.tar.gz
+----
+o ftp://ftp.jclark.com/pub/jade/jade-1.2.1.tar.gz
+
+
+DocBook Stylesheets
+-------------------
+o http://nwalsh.com/docbook/dsssl/
+
+
+Intel P6 microcode
+------------------
+o http://www.urbanmyth.org/microcode/
+
-DSSSL Stylesheets for the DocBook DTD
-=====================================
+Network
+*******
-http://nwalsh.com/docbook/dsssl/
-
-
-Other Info
-==========
+PPP
+---
+o ftp://linuxcare.com.au/pub/ppp/ppp-2.4.0b1.tar.gz
+
+
+Isdn4k-utils
+------------
+o ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/testing/isdn4k-
+ utils.v3.1beta7.tar.gz
+
+
+Netfilter
+---------
+o http://netfilter.filewatcher.org/iptables-1.1.0.tar.bz2
+
+o http://www.samba.org/netfilter/iptables-1.1.0.tar.bz2
+
+o http://netfilter.kernelnotes.org/iptables-1.1.0.tar.bz2
+
+
+Ip-route2
+---------
+o ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.2.4-now-ss991023.tar.gz
+
- Please remember that most of these utils are available on your
-favorite local linux mirror. If you can, please get them from a closer
-site before checking metalab or tsx-11.
-
- You may also want to check for updated versions of this software in a
-package format for the distribution you use.
-
- For those of you running Red Hat (or RPM on a different
-distribution), most of these are available in RPM format. Check around
-your favorite Red Hat mirror site before installing the non-RPM
-version. Remember, you might need to use the --force option to get the
-upgrade to install. ftp://contrib.redhat.com/ ,
-ftp://developer.redhat.com/ , or ftp://updates.redhat.com/ will have
-almost everything you need, and Red Hat 6.1 ships with most necessary
-software.
-
- Those of you running Debian (or a different distribution that
-supports .deb packages) can look in the "unstable" and
-"project/experimental" directories of your favorite Debian mirror. The
-Debian 2.2 release will ship with most packages you need as well.
-
-Please send info about any other packages that 2.3 "broke" or about any
-new features of 2.3 that require extra or new packages for use to Chris
-Ricker (kaboom@gatech.edu or chris.ricker@m.cc.utah.edu).
+Suggestions and corrections
+===========================
+Please feel free to submit changes, corrections, gripes, flames,
+money, etc. to me . Happy Linuxing!
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v2.4.0-test1/linux/Documentation/Configure.help Mon Jun 19 16:31:56 2000
+++ linux/Documentation/Configure.help Thu Jun 22 07:21:12 2000
@@ -9,8 +9,8 @@
# http://www.linux.or.jp/JF/JFdocs/Configure.help/
# - Russian, by kaf@linux.nevod.perm.su, at
# http://nevod.perm.su/service/linux/doc/kernel/Configure.help
-# - French, by Tane Pierre (tanep@bigfoot.com), at
-# http://www.kernelfr.org
+# - French, by Pierre Tane (tanep@bigfoot.com), at
+# http://www.traduc.org/kernelfr
# - Spanish, by Carlos Perelló Marín (fperllo@ehome.encis.es), at
# http://visar.csustan.edu/~carlos/
# - Italian, by Alessandro Rubini (rubini@linux.it), at
@@ -125,7 +125,7 @@
used on systems with several CPU's. If you have a single-CPU system
which uses APIC, you can say Y here to use it. If you say Y here
even though your machine doesn't have APIC, then the kernel will
- still run with now slowdown at all.
+ still run with no slowdown at all.
If you have system with several CPU's, you do not need to say Y
here: APIC will be used automatically.
@@ -161,17 +161,22 @@
If you are compiling a kernel for a NetWinder or EBSA-285, you will
be able to select which LEDs are active using the options below. If
- you are compiling a kernel for the EBSA-110 however, the red LED
- will simply flash regularly to indicate that the system is still
- functional. It is safe to say Y here if you have a CATS system, but
- the driver will do nothing.
+ you are compiling a kernel for the EBSA-110 or the LART however, the
+ red LED will simply flash regularly to indicate that the system is
+ still functional. It is safe to say Y here if you have a CATS
+ system, but the driver will do nothing.
Timer LED
CONFIG_LEDS_TIMER
If you say Y here, one of the system LEDs (the green one on the
- NetWinder or the amber one on the EBSA285) will flash regularly to
- indicate that the system is still operational. This is mainly
- useful to kernel hackers who are debugging unstable kernels.
+ NetWinder, the amber one on the EBSA285, or the red one on the LART)
+ will flash regularly to indicate that the system is still
+ operational. This is mainly useful to kernel hackers who are
+ debugging unstable kernels.
+
+ The LART uses the same LED for both Timer LED and CPU usage LED
+ functions. You may choose to use both, but the Timer LED function
+ will overrule the CPU usage LED.
CPU usage LED
CONFIG_LEDS_CPU
@@ -179,6 +184,10 @@
time indication of CPU usage, by lighting whenever the idle task
is not currently executing.
+ The LART uses the same LED for both Timer LED and CPU usage LED
+ functions. You may choose to use both, but the Timer LED function
+ will overrule the CPU usage LED.
+
Kernel FP software completion (EXPERIMENTAL)
CONFIG_MATHEMU
This option is required for IEEE compliant floating point arithmetic
@@ -358,7 +367,7 @@
Western Digital and Compaq Computer in 1984. It was then named
ST506. Quite a number of disks use the IDE interface.
- AT Attachment (ATA) is a subset of the IDE specifications.
+ AT Attachment (ATA) is the superset of the IDE specifications.
ST506 was also called ATA-1.
Fast-IDE is ATA-2 (also named Fast ATA), Enhanced IDE (EIDE) is
@@ -699,6 +708,14 @@
It is normally safe to answer Y to this question unless your
motherboard uses a VIA VP2 chipset, in which case you should say N.
+IGNORE word93 Validation BITS
+CONFIG_IDEDMA_IVB
+ Since various rules were applied and created ... et al. as it relates
+ the detection of vaild cable signals. This is a result of unclear terms
+ in ATA-4 and ATA-5 standards.
+
+ It is normally safe to answer Y; however, the default is N.
+
Various ATA, Work(s) In Progress (EXPERIMENTAL)
CONFIG_IDEDMA_PCI_WIP
If you enable this you will be able to use and test highly
@@ -733,7 +750,7 @@
If you say Y here, then say Y to "Use DMA by default when available" as
well.
-AEC62XX Tuning support (WIP)
+AEC62XX Tuning support
CONFIG_AEC62XX_TUNING
Please read the comments at the top of drivers/ide/aec62xx.c
If unsure, say N.
@@ -763,7 +780,7 @@
SAY NO!
-AMD7409 chipset support (EXPERIMENTAL)
+AMD7409 chipset support
CONFIG_BLK_DEV_AMD7409
This driver ensures (U)DMA support for the AMD756 Viper chipset.
@@ -784,12 +801,7 @@
Say Y here if you have an IDE controller which uses any of these
chipsets: CMD643, CMD646, or CMD648.
-CMD64X chipset RAID support (WIP)
-CONFIG_CMD64X_RAID
- Work in progress for hardware raid ata-33/66..........rev 7 minimum.
- Say N for now.
-
-CY82C693 chipset support (EXPERIMENTAL)
+CY82C693 chipset support
CONFIG_BLK_DEV_CY82C693
This driver adds detection and support for the CY82C693 chipset
used on Digital's PC-Alpha 164SX boards.
@@ -826,11 +838,13 @@
HPT366 chipset support
CONFIG_BLK_DEV_HPT366
HPT366 is an Ultra DMA chipset for ATA-66.
-
+ HPT368 is an Ultra DMA chipset for ATA-66 RAID Based.
+ HPT370 is an Ultra DMA chipset for ATA-100.
+
This driver adds up to 4 more EIDE devices sharing a single
interrupt.
- The HPT366 chipset in its current form is non-bootable. One solution
+ The HPT366 chipset in its current form is bootable. One solution
for this problem are special LILO commands for redirecting the
reference to device 0x80. The other solution is to say Y to "Boot
off-board chipsets first support" (CONFIG_BLK_DEV_OFFBOARD) unless
@@ -842,15 +856,6 @@
ide-probe at boot. It is reported to support DVD II drives, by the
manufacturer.
-HPT366 Fast Interrupts (WIP)
-CONFIG_HPT366_FIP
- If unsure, say N.
-
-HPT366 mode three unsupported (EXPERIMENTAL) (WIP)
-CONFIG_HPT366_MODE3
- This is an undocumented mode that the HA366 can default to in many
- cases. If unsure, say N.
-
NS87415 support (EXPERIMENTAL)
CONFIG_BLK_DEV_NS87415
This driver adds detection and support for the NS87415 chip
@@ -877,7 +882,7 @@
If unsure, say N.
-PIIXn Tuning support (EXPERIMENTAL)
+PIIXn Tuning support
CONFIG_PIIX_TUNING
This driver extension adds DMA mode setting and tuning for all PIIX
IDE controllers by Intel. Since the BIOS can sometimes improperly
@@ -889,9 +894,11 @@
If unsure, say N.
-PROMISE PDC20246/PDC20262 support
+PROMISE PDC20246/PDC20262/PDC20267 support
CONFIG_BLK_DEV_PDC202XX
Promise Ultra33 or PDC20246
+ Promise Ultra66 or PDC20262
+ Promise Ultra100 or PDC20267
This driver adds up to 4 more EIDE devices sharing a single
interrupt. This add-on card is a bootable PCI UDMA controller. Since
@@ -902,14 +909,6 @@
for more than one card. This card may require that you say Y to
"Special UDMA Feature (EXPERIMENTAL)".
- Promise Ultra66 or PDC20262
-
- This driver adds up to 4 more EIDE devices sharing a single
- interrupt. This add-on card is a bootable PCI UDMA ATA-66
- controller. The driver attempts to dynamic tuning of the chipset at
- boot-time for max-speed. Note tested limits are UDMA-2. Ultra66 BIOS
- 1.11 or newer required.
-
If you say Y here, you need to say Y to "Use DMA by default when
available" as well.
@@ -919,21 +918,16 @@
Special UDMA Feature (EXPERIMENTAL)
CONFIG_PDC202XX_BURST
- For PDC20246 and PDC20262 Ultra DMA chipsets. Designed originally
- for PDC20246/Ultra33 that has BIOS setup failures when using 3 or
- more cards.
+ For PDC20246, PDC20262 and PDC20267 Ultra DMA chipsets. Designed
+ originally for PDC20246/Ultra33 that has BIOS setup failures when
+ using 3 or more cards.
+
+ Unknown for PDC20267 Ultra DMA 100.
Please read the comments at the top of drivers/ide/pdc202xx.c
If unsure, say N.
-Special Mode Feature (WIP)
-CONFIG_PDC202XX_MASTER
- For PDC20246 and PDC20262 Ultra DMA chipsets. This is reserved for
- possible Hardware RAID 0,1 for the FastTrak Series.
-
- Say N.
-
SiS5513 chipset support
CONFIG_BLK_DEV_SIS5513
This driver ensures (U)DMA support for SIS5513 chipset based
@@ -958,7 +952,7 @@
needed for further tweaking and development.
Please read the comments at the top of drivers/ide/trm290.c.
-VIA82CXXX chipset support (EXPERIMENTAL)
+VIA82CXXX chipset support
CONFIG_BLK_DEV_VIA82CXXX
This allows you to to configure your chipset for a better use while
running (U)DMA: it will allow you to enable efficiently the second
@@ -1551,11 +1545,19 @@
If unsure, say Y.
-Boot support (linear, striped)
+RAID Boot support
CONFIG_MD_BOOT
- To boot with an initial linear or striped md device you have to
- answer Y here. For lilo and loadlin options see the file
- Documentation/md.txt.
+ To boot with an initial raid volume (any type) you can select
+ autodetect, or answer Y here and appropriate options to the kernel
+ at boot time.
+ For lilo and loadlin options see the file Documentation/md.txt.
+
+RAID AutoDetect support
+CONFIG_AUTODETECT_RAID
+ An alternative to "Raid Boot support" is autodetect support.
+ With this selected, any partitons of type 0xFD will be considered for
+ inclusion in a RAID array. Information in the RAID-superblock on
+ the partition will determine how it is included.
Support for Acer PICA 1 chipset
CONFIG_ACER_PICA_61
@@ -1781,7 +1783,8 @@
Various modules exist for netfilter which replace the previous
masquerading (ipmasqadm), packet filtering (ipchains), transparent
proxying, and portforwarding mechanisms. Please see
- Documentation/Changes for the location of these packages.
+ Documentation/Changes under "iptables" for the location of these
+ packages.
Make sure to say N to "Fast switching" below if you intend to say Y
here, as Fast switching currently bypasses netfilter.
@@ -2089,6 +2092,8 @@
SX164 AlphaPC164-SX
Sable AS 2000, AS 2100
Takara Takara
+ Titan Privateer
+ Wildfire AlphaServer GS 40/80/160/320
If you don't know what to do, choose "generic".
@@ -2571,11 +2576,10 @@
http://www.linuxdoc.org/docs.html#guide .
Shared memory is now implemented using a new (minimal) virtual file
- system, which you need to mount before programs can use shared
- memory. To do this automatically at system startup just add the
+ system. To mount it automatically at system startup just add the
following line to your /etc/fstab:
- none /var/shm shm defaults 0 0
+ none /dev/shm shm defaults 0 0
Saying Y here enlarges your kernel by about 18 KB. Just say Y.
@@ -2729,25 +2733,27 @@
all x86 CPU types (albeit not optimally fast), you can specify
"386" here.
- If you specify one of "486" or "586" or "Pentium" or "PPro" or
- "Athlon", then the kernel will not necessarily run on earlier
- architectures (e.g. a Pentium optimized kernel will run on a PPro,
- but not necessarily on a i486).
+ The kernel will not necessarily run on earlier architectures than
+ the one you have chosen, e.g. a Pentium optimized kernel will run on
+ a PPro, but not necessarily on a i486.
Here are the settings recommended for greatest speed:
- "386" for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI
- 486DLC/DLC2 and UMC 486SX-S. Only "386" kernels will run on a 386
- class machine.
+ 486DLC/DLC2, UMC 486SX-S and NexGen Nx586. Only "386" kernels will
+ run on a 386 class machine.
- "486" for the AMD/Cyrix/IBM/Intel 486DX/DX2/DX4 or
- SL/SLC/SLC2/SLC3/SX/SX2, AMD/Cyrix 5x86, NexGen Nx586 and
- UMC U5D or U5S.
+ SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S.
- "586" for generic Pentium CPUs, possibly lacking the TSC
(time stamp counter) register.
- - "Pentium" for the Intel Pentium/Pentium MMX, and AMD K5.
- - "PPro" for the Cyrix/IBM/National Semiconductor 6x86MX, MII and
- Intel Pentium Pro/Celeron/Pentium II/Pentium III.
- - "K6/II/III" for the AMD K6, K6-II and K6-III (aka K6-3D).
+ - "Pentium" for the Intel Pentium/Pentium MMX.
+ - "Pentium-Pro" for the Intel Pentium Pro/Celeron/Pentium II.
+ - "Pentium-III" for the Intel Pentium III.
+ - "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
- "Athlon" for the AMD Athlon (K7).
+ - "Crusoe" for the Transmeta Crusoe series.
+ - "Winchip-C6" for original IDT Winchip.
+ - "Winchip-2" for IDT Winchip 2.
+ - "Winchip-2A/3" for IDT Winchips with 3dNow! capabilities.
If you don't know what to do, choose "386".
@@ -3067,7 +3073,7 @@
(XF68_FBDev).
HGA monochrome support (EXPERIMENTAL)
-CONFIG_FBCON_HGA
+CONFIG_FB_HGA
Say Y here if you have a Hercules mono graphics card.
This driver is also available as a module ( = code which can be
@@ -3335,6 +3341,11 @@
bits per pixel packed pixels on Mac. It supports variable font
widths for low resolution screens.
+HGA monochrome support (EXPERIMENTAL)
+CONFIG_FBCON_HGA
+ This is the low level frame buffer console driver for Hercules mono
+ graphics cards.
+
VGA characters/attributes support
CONFIG_FBCON_VGA
This is the low level frame buffer console driver for VGA text mode;
@@ -4609,11 +4620,6 @@
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.
-
- This driver is also available as a module called netlink_dev.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 Documentation/modules.txt.
If unsure, say Y.
@@ -5616,8 +5622,8 @@
synchronous data transfers frequency
CONFIG_SCSI_NCR53C8XX_SYNC
- The SCSI Parallel Interface-2 Standard defines 4 classes of transfer
- rates: FAST-5, FAST-10, FAST-20 and FAST-40. The numbers are
+ The SCSI Parallel Interface-2 Standard defines 5 classes of transfer
+ rates: FAST-5, FAST-10, FAST-20, FAST-40 and FAST-80. The numbers are
respectively the maximum data transfer rates in mega-transfers per
second for each class. For example, a FAST-20 Wide 16 device is able
to transfer data at 20 million 16 bit packets per second for a total
@@ -5625,9 +5631,9 @@
You may specify 0 if you want to only use asynchronous data
transfers. This is the safest and slowest option. Otherwise, specify
- a value between 5 and 40, depending on the capability of your SCSI
+ a value between 5 and 80, depending on the capability of your SCSI
controller. The higher the number, the faster the data transfer.
- Note that 40 should normally be ok since the driver decreases the
+ Note that 80 should normally be ok since the driver decreases the
value automatically according to the controller's capabilities.
Your answer to this question is ignored for controllers with NVRAM,
@@ -5638,7 +5644,7 @@
second).
The normal answer therefore is not to go with the default but to
- select the maximum value 40 allowing the driver to use the maximum
+ select the maximum value 80 allowing the driver to use the maximum
value supported by each controller. If this causes problems with
your SCSI devices, you should come back and decrease the value.
@@ -8527,9 +8533,10 @@
EtherExpress PRO support
CONFIG_EEXPRESS_PRO
- If you have a network (Ethernet) card of this type, say Y. Note
- however that the EtherExpress PRO/100 Ethernet card has its own
- separate driver. Please read the Ethernet-HOWTO, available from
+ If you have a network (Ethernet) card of this type, say Y. This
+ driver supports intel i82595{FX,TX} based boards. Note however
+ that the EtherExpress PRO/100 Ethernet card has its own separate
+ driver. Please read the Ethernet-HOWTO, available from
http://www.linuxdoc.org/docs.html#howto .
This driver is also available as a module ( = code which can be
@@ -8641,6 +8648,22 @@
module, say M here and read Documentation/modules.txt as well as
Documentation/networking/net-modules.txt.
+IBM LAN Adapter/A support
+CONFIG_IBMLANA
+ This is a Micro Channel ethernet adapter. You need to set CONFIG_MCA
+ to use this driver. It is both available as an in-kernel driver and
+ as a module ( = code which can be inserted in and removed from the
+ running kernel whenever you want). If you want to compile it as a module,
+ say M here and read Documentation/modules.txt as well as
+ Documentation/networking/net-modules.txt. If you plan to use more than
+ one network card under linux, read the Multiple-Ethernet-mini-HOWTO,
+ available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. The only
+ currently supported card is the IBM LAN Adapter/A for Ethernet. It will
+ both support 16K and 32K memory windows, however a 32K window gives
+ a better security against packet losses. Usage of multiple boards with
+ this driver should be possible, but has not been tested up to now due
+ to lack of hardware.
+
EISA, VLB, PCI and on board controllers
CONFIG_NET_PCI
This is another class of network cards which attach directly to the
@@ -9584,7 +9607,7 @@
USB Human Interface Device (HID) support
CONFIG_USB_HID
Say Y here if you want to connect keyboards, mice, joysticks,
- graphic tablets, UPS's or any other HID based devices to your
+ graphic tablets, or any other HID based devices to your
computer via USB. More information is available:
Documentation/usb/input.txt.
@@ -9616,16 +9639,16 @@
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called usbmouse.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt.
+ The module will be called usbmouse.o. If you want to compile it as
+ a module, say M here and read Documentation/modules.txt.
If unsure, say N.
Wacom Intuos/Graphire tablet support
CONFIG_USB_WACOM
- Say Y here if you want to use the USB version of the Wacom Intuos or
- Graphire tablet. Make sure to say Y to "Mouse support"
- (CONFIG_INPUT_MOUSEDEV) and "Event interface support"
+ Say Y here if you want to use the USB version of the Wacom Intuos
+ or Graphire tablet. Make sure to say Y to "Mouse support"
+ (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
(CONFIG_INPUT_EVDEV) as well.
This driver is also available as a module ( = code which can be
@@ -9636,7 +9659,7 @@
Logitech WingMan Force joystick support
CONFIG_USB_WMFORCE
Say Y here if you want to use the Logitech WingMan Force with Linux
- on the USB port. No force-feedback support yet, but other than that,
+ on the USB port. No force-feedback support yet, but other than that
it should work like a normal joystick.
This driver is also available as a module ( = code which can be
@@ -9657,31 +9680,35 @@
Mouse support
CONFIG_INPUT_MOUSEDEV
Say Y here if you want your USB HID mouse to be accessible as
- misc devices 32+ under /dev/, as an emulated PS/2 mouse. That way,
- all user space programs will be able to use your mouse.
+ char devices 13:32+ - /dev/input/mouseX and 13:63 - /dev/input/mice
+ as an emulated PS/2 mouse. That way, all user space programs will
+ be able to use your mouse.
If unsure, say Y.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called mousedev.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt.
+ The module will be called mousedev.o. If you want to compile it as
+ a module, say M here and read Documentation/modules.txt.
Horizontal screen resolution
CONFIG_INPUT_MOUSEDEV_SCREEN_X
- For the mouse emulation to be correct, the mousedev driver needs to
- know the screen resolution you are using (in the X window system).
+ If you're using a digitizer, or a graphic tablet, and want to use
+ it as a mouse then the mousedev driver needs to know the X window
+ screen resolution you are using to correctly scale the data. If
+ you're not using a digitizer, this value is ignored.
Vertical screen resolution
CONFIG_INPUT_MOUSEDEV_SCREEN_Y
- For the mouse emulation to be correct, the mousedev driver needs to
- know the screen resolution you are using (in the X window system).
+ If you're using a digitizer, or a graphic tablet, and want to use
+ it as a mouse then the mousedev driver needs to know the X window
+ screen resolution you are using to correctly scale the data. If
+ you're not using a digitizer, this value is ignored.
Joystick support
CONFIG_INPUT_JOYDEV
Say Y here if you want your USB HID joystick or gamepad to be
- accessible as a /dev/js device. You can't use a normal (non-USB)
- joystick if you say Y here.
+ accessible as char device 13:0+ - /dev/input/jsX device.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
@@ -9691,7 +9718,7 @@
Event interface support
CONFIG_INPUT_EVDEV
Say Y here if you want your USB HID device events be accessible
- under /dev/inputX (misc 64+) in a generic way.
+ under char device 13:64+ - /dev/inputX in a generic way.
This is the future ...
USB Scanner support
@@ -9943,6 +9970,17 @@
Most users want to say Y here.
+USB Bandwidth allocation
+CONFIG_USB_BANDWIDTH
+ If you say Y here, the USB subsystem enforces USB bandwidth
+ allocation and will prevent some device opens from succeeding
+ if they would cause USB bandwidth usage to go above 90% of
+ the bus bandwidth.
+
+ If you say N here, these conditions will cause warning messages
+ about USB bandwidth usage to be logged and some devices or
+ drivers may not work correctly.
+
DABUSB driver
CONFIG_USB_DABUSB
A Digital Audio Broadcasting (DAB) Receiver for USB and Linux
@@ -9998,6 +10036,15 @@
The module will be called dsbr100.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
+Microtek USB scanner support
+CONFIG_USB_MICROTEK
+ Say Y here if you want support for the Microtek X6USB and possibly
+ some other scanners. The scanner will appear as a scsi device to the
+ rest of the system. A patched version of SANE is necessary to use the
+ scanner. It's available at
+ http://fachschaft.cup.uni-muenchen.de/~neukum/scanner.html
+ This driver can be compiled as a module.
+
Minix fs support
CONFIG_MINIX_FS
Minix is a simple operating system used in many classes about OS's.
@@ -10438,6 +10485,13 @@
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
+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 net/sunrpc/svcsock.c
+
OS/2 HPFS file system support
CONFIG_HPFS_FS
OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
@@ -11661,7 +11715,7 @@
If you want kernel messages to be printed out as they occur, you
can have a console on the printer. This option adds support for
doing that; to actually get it to happen you need to pass the
- option "console=lp" to the kernel at boot time.
+ option "console=lp0" to the kernel at boot time.
Note that kernel messages can get lost if the printer is out of
paper (or off, or unplugged, or too busy..), but this behaviour
@@ -12316,6 +12370,22 @@
If unsure, say N.
+Intel Random Number Generator support
+CONFIG_INTEL_RNG
+ This driver provides kernel-side support for the Random Number
+ Generator hardware found on Intel i8xx-based motherboards.
+
+ Both a character driver, used to read() entropy data, and a timer
+ function which automatically adds entropy directly into the
+ kernel pool, are exported by this driver.
+
+ To compile this driver as a module ( = code which can be inserted in
+ and removed from the running kernel whenever you want), say M here
+ and read Documentation/modules.txt. The module will be called
+ i810_rng.o.
+
+ If unsure, say N.
+
Power Management support
CONFIG_PM
"Power Management" means that parts of your computer are shut
@@ -12640,7 +12710,7 @@
For latest news and information on obtaining all the required
ingredients for this driver, check:
- http://www.ocston.org/~tigran/patches/microcode .
+ http://www.urbanmyth.org/microcode/
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
@@ -12731,143 +12801,183 @@
weapon control system or something like that you can say Y here to
enable generic support for these controllers. You will also need to
say Y or M to at least one of the hardware specific drivers. This
- will make the controllers available as /dev/jsX devices. Please read
- the file Documentation/joystick.txt which contains more information
- and the location of the joystick package that you'll need.
+ will make the controllers available as /dev/input/jsX devices.
+ Please read the file Documentation/joystick.txt which contains more
+ information and the location of the joystick package that you'll
+ need.
+
+ns558 gameports
+CONFIG_INPUT_NS558
+ Say Y here if you have an ISA, ISAPnP or PCI standard gameport.
+ For more information on how to use the driver please read
+ Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joystick.o. If you want to compile it as a
- module, say M here and read Documentation/modules.txt.
+ The module will be called ns558.o. If you want to compile
+ it as a module, say M here and read Documentation/modules.txt.
+
+PDPI Lightning 4 gamecard
+CONFIG_INPUT_LIGHTNING
+ Say Y here if you have a PDPI Lightning 4 gamecard. For more
+ information on how to use the driver please read
+ Documentation/joystick.txt
+
+ This driver is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called lightning.o. If you want to compile
+ it as a module, say M here and read Documentation/modules.txt.
+
+Aureal Vortex and Trident 4DWave gameports
+CONFIG_INPUT_PCIGAME
+ Say Y here if you have a Trident 4DWave DX/NX or Aureal Vortex 1/2
+ card. For more information on how to use the driver please read
+ Documentation/joystick.txt
-Classic PC analog
-CONFIG_JOY_ANALOG
+ This driver is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called pcigame.o. If you want to compile
+ it as a module, say M here and read Documentation/modules.txt.
+
+Classic PC analog joysticks and gamepads
+CONFIG_INPUT_ANALOG
Say Y here if you have a controller that connects to the PC
gameport. This supports many different types, including joysticks
with throttle control, with rudders, or with extensions like
additional hats and buttons compatible with CH Flightstick Pro,
- ThrustMaster FCS or 6 and 8 button gamepads. For more information on
- how to use the driver please read Documentation/joystick.txt
+ ThrustMaster FCS, 6 and 8 button gamepads, or Saitek Cyborg
+ joysticks. For more information on how to use the driver please read
+ Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-analog.o. If you want to compile
+ The module will be called analog.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-FPGaming and MadCatz A3D
-CONFIG_JOY_ASSASSIN
+Assasin 3D and MadCatz Panther devices
+CONFIG_INPUT_A3D
Say Y here if you have an FPGaming or MadCatz controller using the
A3D protocol over the PC gameport. For more information on how to
use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-assasin.o. If you want to compile
+ The module will be called a3d.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Gravis GrIP
-CONFIG_JOY_GRAVIS
- Say Y here if you have a Gravis controller using the GrIP protocol
- over the PC gameport. For more information on how to use the driver
- please read Documentation/joystick.txt
+Logitech ADI digital joysticks and gamepads
+CONFIG_INPUT_ADI
+ Say Y here if you have a Logitech controller using the ADI
+ protocol over the PC gameport. For more information on how to use
+ the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-gravis.o. If you want to compile
+ The module will be called adi.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Logitech ADI
-CONFIG_JOY_LOGITECH
- Say Y here if you have a Logitech controller using the ADI
- protocol over the PC gameport. For more information on how to use
- the driver please read Documentation/joystick.txt
+Creative Labs Blaster Cobra gamepad
+CONFIG_INPUT_COBRA
+ Say Y here if you have a Creative Labs Blaster Cobra gamepad.
+ For more information on how to use the driver please read
+ Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-logitech.o. If you want to compile
+ The module will be called cobra.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Microsoft SideWinder
-CONFIG_JOY_SIDEWINDER
- Say Y here if you have a Microsoft controller using the Digital
- Overdrive protocol over PC gameport. For more information on how to
- use the driver please read Documentation/joystick.txt
+Genius Flight2000 Digital joysticks and gamepads
+CONFIG_INPUT_GF2K
+ Say Y here if you have a Genius Flight2000 or MaxFighter
+ digitally communicating joystick or gamepad. For more information
+ on how to use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-sidewinder.o. If you want to compile
+ The module will be called gf2k.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-ThrustMaster DirectConnect
-CONFIG_JOY_THRUSTMASTER
- Say Y here if you have a ThrustMaster controller using the
- DirectConnect (BSP) protocol over the PC gameport. For more
- information on how to use the driver please read
- Documentation/joystick.txt
+Gravis GrIP joysticks and gamepads
+CONFIG_INPUT_GRIP
+ Say Y here if you have a Gravis controller using the GrIP protocol
+ over the PC gameport. For more information on how to use the driver
+ please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-thrustmaster.o. If you want to compile
+ The module will be called grip.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Creative Labs Blaster
-CONFIG_JOY_CREATIVE
- Say Y here if you have a Creative Labs controller using the
- Blaster protocol over the PC gameport. For more information on how
- to use the driver please read Documentation/joystick.txt
+InterAct digital joysticks and gamepads
+CONFIG_INPUT_INTERACT
+ Say Y hereif you have an InterAct gameport or joystick
+ communicating digitally over the gameport. For more information on
+ how to use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-creative.o. If you want to compile
+ The module will be called interact.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-PDPI Lightning 4 cards
-CONFIG_JOY_LIGHTNING
- Say Y here if you have a PDPI Lightning 4 gamecard and an analog
- joystick or gamepad connected to it. For more information on how to
+ThrustMaster DirectConnect joysticks and gamepads
+CONFIG_INPUT_TMDC
+ Say Y here if you have a ThrustMaster controller using the
+ DirectConnect (BSP) protocol over the PC gameport. For more
+ information on how to use the driver please read
+ Documentation/joystick.txt
+
+ This driver is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called tmdc.o. If you want to compile
+ it as a module, say M here and read Documentation/modules.txt.
+
+Microsoft SideWinder digital joysticks and gamepads
+CONFIG_INPUT_SIDEWINDER
+ Say Y here if you have a Microsoft controller using the Digital
+ Overdrive protocol over PC gameport. For more information on how to
use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-lightning.o. If you want to compile
+ The module will be called sidewinder.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Logitech WingMan Warrior
-CONFIG_JOY_WARRIOR
- Say Y here if you have a Logitech WingMan Warrior controller
- connected to your computer's serial port. For more information on
- how to use the driver please read Documentation/joystick.txt
+Serial port input line discipline
+CONFIG_INPUT_SERPORT
+ Say Y hereif you plan to use a joystick that communicates over the
+ serial (COM) port. For more information on how to use the driver
+ please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-warrior.o. If you want to compile
+ The module will be called serport.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Trident 4DWave and Aureal Vortex gameport
-CONFIG_JOY_PCI
- Say Y here if you have a Trident 4DWave DX/NX or Aureal Vortex 1/2
- card and want to use its gameport in its enhanced digital mode
- with and ordinary analog joystick. For more information on how to
- use the driver please read Documentation/joystick.txt
+Logitech WingMan Warrior joystick
+CONFIG_INPUT_WARRIOR
+ Say Y here if you have a Logitech WingMan Warrior joystick
+ connected to your computer's serial port. For more information on
+ how to use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-pci.o. If you want to compile
+ The module will be called warrior.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-Magellan and Space Mouse
-CONFIG_JOY_MAGELLAN
+LogiCad3d Magellan/SpaceMouse 6dof controller
+CONFIG_INPUT_MAGELLAN
Say Y here if you have a Magellan or Space Mouse 6DOF controller
connected to your computer's serial port. For more information on
how to use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-magellan.o. If you want to compile
+ The module will be called magellan.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-SpaceTec SpaceOrb 360 and SpaceBall Avenger
-CONFIG_JOY_SPACEORB
+SpaceTec SpaceOrb/Avenger 6dof controller
+CONFIG_INPUT_SPACEORB
Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF
controller connected to your computer's serial port. For more
information on how to use the driver please read
@@ -12875,37 +12985,39 @@
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-spaceorb.o. If you want to compile
+ The module will be called spaceorb.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-SpaceTec SpaceBall 4000 FLX
-CONFIG_JOY_SPACEBALL
- Say Y here if you have a SpaceTec SpaceBall 4000 FLX
- controller connected to your computer's serial port. For more
- information on how to use the driver please read
- Documentation/joystick.txt
+SpaceTec SpaceBall 4000 FLX 6dof controller
+CONFIG_INPUT_SPACEBALL
+ Say Y here if you have a SpaceTec SpaceBall 4000 FLX controller
+ connected to your computer's serial port. For more information on
+ how to use the driver please read Documentation/joystick.txt
+
+I-Force joysticks/wheels
+CONFIG_INPUT_IFORCE_232
+ Say Y here if you have an I-Force joystick or steering wheel
+ connected to your serial (COM) port. For more information on
+ how to use the driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-spaceball.o. If you want to compile
+ The module will be called iforce.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-
-NES, SNES, N64, PSX, Multi
-CONFIG_JOY_CONSOLE
- Say Y here if you have a Nintendo Entertainment System gamepad,
- Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad,
- Sony PlayStation gamepad or a Multisystem -- Atari, Amiga,
- Commodore, Amstrad CPC joystick connected to your parallel port.
- For more information on how to use the driver please read
- Documentation/joystick.txt and Documentation/joystick-parport.txt
+
+I-Force joysticks/wheels
+CONFIG_INPUT_IFORCE_USB
+ Say Y here if you have an I-Force joystick or steering wheel
+ connected to your USB port. For more information on how to use the
+ driver please read Documentation/joystick.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-console.o. If you want to compile
+ The module will be called iforce.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-
-Sega, Multi
-CONFIG_JOY_DB9
+
+Multisystem, Sega Genesis, Saturn joysticks and gamepads
+CONFIG_INPUT_DB9
Say Y here if you have a Sega Master System gamepad, Sega Genesis
gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga,
Commodore, Amstrad CPC joystick connected to your parallel port.
@@ -12914,24 +13026,38 @@
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-db9.o. If you want to compile
+ The module will be called db9.o. If you want to compile
+ it as a module, say M here and read Documentation/modules.txt.
+
+Multisystem, NES, SNES, N64, PSX joysticks and gamepads
+CONFIG_INPUT_GAMECON
+ Say Y here if you have a Nintendo Entertainment System gamepad,
+ Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad,
+ Sony PlayStation gamepad or a Multisystem -- Atari, Amiga,
+ Commodore, Amstrad CPC joystick connected to your parallel port.
+ For more information on how to use the driver please read
+ Documentation/joystick.txt and Documentation/joystick-parport.txt
+
+ This driver is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called gamecon.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
-TurboGraFX Multisystem interface
-CONFIG_JOY_TURBOGRAFX
- Say Y here if you have the TurboGraFX interface by Steffen Schwenke,
- and want to use it with Multiststem -- Atari, Amiga, Commodore,
- Amstrad CPC joystick. For more information on how to use the driver
- please read Documentation/joystick.txt and
+Multisystem joysticks via TurboGraFX device
+CONFIG_INPUT_TURBOGRAFX
+ Say Y here if you have the TurboGraFX interface by Steffen
+ Schwenke, and want to use it with Multiststem -- Atari, Amiga,
+ Commodore, Amstrad CPC joystick. For more information on how to use
+ the driver please read Documentation/joystick.txt and
Documentation/joystick-parport.txt
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
- The module will be called joy-turbografx.o. If you want to compile
+ The module will be called turbografx.o. If you want to compile
it as a module, say M here and read Documentation/modules.txt.
Amiga joysticks
-CONFIG_JOY_AMIGA
+CONFIG_INPUT_AMIJOY
Say Y here if you have an Amiga with a digital joystick connected
to it. For more information on how to use the driver please read
Documentation/joystick.txt
@@ -13525,16 +13651,19 @@
differs slightly from OSS/Free, so PLEASE READ
Documentation/sound/sonicvibes.
-Trident 4DWave DX/NX or SiS 7018 PCI Audio Core
+Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core
CONFIG_SOUND_TRIDENT
Say Y or M if you have a PCI sound card utilizing the Trident
4DWave-DX/NX chipset or your mother board chipset has SiS 7018
- built-in. The SiS 7018 PCI Audio Core is embedded in SiS960
- Super South Bridge and SiS540/630 Single Chipset.
+ or ALi 5451 built-in. The SiS 7018 PCI Audio Core is embedded
+ in SiS960 Super South Bridge and SiS540/630 Single Chipset.
+ The ALi 5451 PCI Audio Core is embedded in ALi M1535, M1535D,
+ M1535+ or M1535D+ South Bridge.
Use lspci -n to find out if your sound card or chipset uses
Trident 4DWave or SiS 7018. PCI ID 1023:2000 or 1023:2001 stands
- for Trident 4Dwave. PCI ID 1039:7018 stands for SiS7018.
+ for Trident 4Dwave. PCI ID 1039:7018 stands for SiS7018. PCI ID
+ 10B9:5451 stands for ALi5451.
This driver differs slightly from OSS/Free, so PLEASE READ the
comments at the top of driver/sound/trident.c
@@ -13598,7 +13727,9 @@
if the system crashes for example during kernel debugging (e.g., you
will be able to flush the buffer cache to disk, reboot the system
immediately or dump some status information). This is accomplished
- by pressing various keys while holding SysRq (Alt+PrintScreen). The
+ by pressing various keys while holding SysRq (Alt+PrintScreen). It
+ also works on a serial console (on PC hardware at least), if you
+ send a BREAK and then within 5 seconds a command keypress. The
keys are documented in Documentation/sysrq.txt. Don't say Y unless
you really know what this hack does.
@@ -14159,7 +14290,7 @@
The OpenBoot PROM on Ultra systems is flashable. If you want to be
able to upgrade the OBP firmware, say Y here.
-JavaStation OS Flash SIMM (EXPERIMENTAL)
+JavaStation OS Flash SIMM
CONFIG_SUN_JSFLASH
If you say Y here, you will be able to boot from your JavaStation's
Flash memory.
@@ -14724,11 +14855,19 @@
Processor Type
CONFIG_6xx
- There are three types of PowerPC chips supported. The more common
+ There are four types of PowerPC chips supported. The more common
types (601, 603, 604, 740, 750), the Motorola embedded versions
- (821, 823, 850, 855, 860), and the IBM embedded versions (403 and
- 405). Unless you are building a kernel for one of the embedded
- processor systems, choose 6xx.
+ (821, 823, 850, 855, 860), the IBM embedded versions (403 and
+ 405) and the high end 64 bit Power processors (Power 3, Power 4).
+ Unless you are building a kernel for one of the embedded
+ processor systems, or a 64 bit IBM RS/6000, choose 6xx.
+
+CONFIG_PPC64BRIDGE
+ Currently there is not a 64 bit PowerPC Linux kernel. As a result
+ if you choose the CONFIG_POWER3 or CONFIG_POWER4 options you
+ must choose this option as well. This enables gcc to emit
+ both 32 and 64 bit instructions as well as cause your kernel
+ to be built as a 32 bit kernel.
Machine Type
CONFIG_PMAC
@@ -14740,6 +14879,22 @@
only supports one type or the other. However, there is very early
work on support for CHRP, PReP and PowerMac's from a single binary.
+Power management support for PowerBooks
+CONFIG_PMAC_PBOOK
+ This provides support for putting a PowerBook to sleep; it also
+ enables media bay support. Power management works on the
+ PB2400/3400/3500, Wallstreet, Lombard, and Bronze PowerBook G3. You
+ must get the power management daemon, pmud, to make it work and you
+ must have the /dev/pmu device (see the pmud README).
+
+ Get pmud from ftp://linuxcare.com.au/pub/ppclinux/pmud/
+
+ If you have a PowerBook, you should say Y.
+
+ You may also want to compile the dma sound driver as a module and
+ have it autoloaded. The act of removing the module shuts down the
+ sound hardware for more power savings.
+
Support for Open Firmware device tree in /proc
CONFIG_PROC_DEVICETREE
This option adds a device-tree directory under /proc which contains
@@ -15213,6 +15368,11 @@
from the running kernel whenever you want). If you want to compile
it as a module, say M here and read Documentation/modules.txt.
+SAB3036 tuner support
+CONFIG_TUNER_3036
+ Say Y here to include support for Philips SAB3036 compatible tuners.
+ If in doubt, say N.
+
Compaq SMART2 support
CONFIG_BLK_CPQ_DA
This is the driver for Compaq Smart Array controllers.
@@ -15231,15 +15391,46 @@
to set this option to, please consult any information supplied with
your system.
+Include support for the CATS
+CONFIG_ARCH_CATS
+ Say Y here if you intend to run this kernel on the CATS.
+
+ Saying N will reduce the size of the Footbridge kernel.
+
+Include support for the EBSA285
+CONFIG_ARCH_EBSA285
+ Say Y here if you intend to run this kernel on the EBSA285 card
+ in host ("central function") mode.
+
+ Saying N will reduce the size of the Footbridge kernel.
+
+Include support for the LinkUp Systems L7200 SDB
+CONFIG_ARCH_L7200
+ Say Y here if you intend to run this kernel on a LinkUp Systems
+ L7200 Software Development Board which uses an ARM720T processor.
+ Information on this board can be obtained at:
+
+ http://www.linkupsys.com/
+
+ If you have any questions or comments about the Linux kernel port
+ to this board, send e-mail to sjhill@cotw.com
+
Include support for the NetWinder
CONFIG_ARCH_NETWINDER
- Say Y here if you intend to run this kernel on the NetWinder.
+ Say Y here if you intend to run this kernel on the Rebel.COM
+ NetWinder. Information about this machine can be found at:
+
+ http://www.netwinder.org/
+
+ Saying N will reduce the size of the Footbridge kernel.
Include support for the Compaq Personal Server
CONFIG_ARCH_PERSONAL_SERVER
Say Y here if you intend to run this kernel on the Compaq
Personal Server.
+ Saying N will reduce the size of the Footbridge kernel.
+
The Compaq Personal Server is not available for purchase.
There are no product plans beyond the current research
prototypes at this time. Information is available at:
@@ -15249,17 +15440,6 @@
If you have any questions or comments about the Compaq Personal
Server, send e-mail to skiff@crl.dec.com
-Include support for the LinkUp Systems L7200 SDB
-CONFIG_ARCH_L7200
- Say Y here if you intend to run this kernel on a LinkUp Systems
- L7200 Software Development Board which uses an ARM720T processor.
- Information on this board can be obtained at:
-
- http://www.linkupsys.com/
-
- If you have any questions or comments about the Linux kernel port
- to this board, send e-mail to sjhill@cotw.com
-
Math emulation
CONFIG_NWFPE
Say Y to include the NWFPE floating point emulator in the kernel.
@@ -15411,6 +15591,41 @@
the cylinders/heads/sectors count on your hard drive. WARNING: This
sometimes doesn't work and it also does some dodgy stuff which
potentially might damage your drive.
+
+NetWinder /dev/flash support
+CONFIG_NWFLASH
+ If you say Y here and create a character device /dev/flash with
+ major 10 and minor 160 you can manipulate the flash ROM containing
+ the NetWinder firmware. Be careful as accidentally overwriting the
+ flash contents can render your computer unbootable. On no account
+ allow random users access to this device. :-)
+
+ This driver is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called nwflash.o. If you want to compile it as a
+ module, say M here and read Documentation/modules.txt.
+
+ If you're not sure, say N.
+
+Footbridge internal watchdog
+CONFIG_21285_WATCHDOG
+ The Intel Footbridge chip contains a builtin watchdog circuit. Say Y
+ here if you wish to use this. Alternatively say M to compile the
+ driver as a module, which will be called wdt285.o.
+
+ This driver does not work on all machines. In particular, early CATS
+ boards have hardware problems that will cause the machine to simply
+ lock up if the watchdog fires.
+
+ "If in doubt, leave it out" - say N.
+
+NetWinder WB977 watchdog
+CONFIG_977_WATCHDOG
+ Say Y here to include support for the WB977 watchdog included in
+ NetWinder machines. Alternatively say M to compile the driver as
+ a module, which will be called wdt977.o.
+
+ Not sure? It's safe to say N.
IrDA subsystem support
CONFIG_IRDA
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/DocBook/Makefile linux/Documentation/DocBook/Makefile
--- v2.4.0-test1/linux/Documentation/DocBook/Makefile Mon Jun 19 16:31:56 2000
+++ linux/Documentation/DocBook/Makefile Mon Jun 19 12:56:07 2000
@@ -1,11 +1,17 @@
-BOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml kernel-api.sgml parportbook.sgml kernel-hacking.sgml kernel-locking.sgml
+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
PS := $(patsubst %.sgml, %.ps, $(BOOKS))
PDF := $(patsubst %.sgml, %.pdf, $(BOOKS))
+HTML := $(patsubst %.sgml, %, $(BOOKS))
+IMG-parportbook := parport-share.fig parport-multi.fig parport-structure.fig
+EPS-parportbook := $(patsubst %.fig, %.eps, $(IMG-parportbook))
+JPG-parportbook := $(patsubst %.fig, %.jpeg, $(IMG-parportbook))
$(BOOKS): $(TOPDIR)/scripts/docproc
-.PHONY: books ps pdf clean mrproper db2ps db2pdf
+.PHONY: books ps pdf html clean mrproper db2ps db2pdf db2html
books: $(BOOKS)
@@ -13,7 +19,9 @@
pdf: $(PDF)
-db2ps db2pdf:
+html: $(HTML)
+
+db2ps db2pdf db2html:
@(which $@ > /dev/null 2>&1) || \
(echo "*** You need to install DocBook stylesheets ***"; \
exit 1)
@@ -21,37 +29,45 @@
%.eps: %.fig
-fig2dev -Leps $< $@
+%.jpeg: %.fig
+ -fig2dev -Ljpeg $< $@
+
$(TOPDIR)/scripts/docproc:
$(MAKE) -C $(TOPDIR)/scripts docproc
+mousedrivers.sgml: mousedrivers.tmpl
+ $(TOPDIR)/scripts/docgen <$< >$@
+
kernel-hacking.sgml: kernel-hacking.tmpl
$(TOPDIR)/scripts/docgen <$< >$@
kernel-locking.sgml: kernel-locking.tmpl
$(TOPDIR)/scripts/docgen <$< >$@
-wanbook.sgml: wanbook.tmpl
+wanbook.sgml: wanbook.tmpl $(TOPDIR)/drivers/net/wan/syncppp.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/net/wan/syncppp.c \
wanbook.sgml
-z8530book.sgml: z8530book.tmpl
+z8530book.sgml: z8530book.tmpl $(TOPDIR)/drivers/net/wan/z85230.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/net/wan/z85230.c \
z8530book.sgml
-mcabook.sgml: mcabook.tmpl
+via-audio.sgml: via-audio.tmpl $(TOPDIR)/drivers/sound/via82cxxx_audio.c
+ $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/sound/via82cxxx_audio.c \
+ via-audio.sgml
+
+mcabook.sgml: mcabook.tmpl $(TOPDIR)/arch/i386/kernel/mca.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/arch/i386/kernel/mca.c \
mcabook.sgml
-videobook.sgml: videobook.tmpl
+videobook.sgml: videobook.tmpl $(TOPDIR)/drivers/char/videodev.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/char/videodev.c \
videobook.sgml
-kernel-api.sgml: kernel-api.tmpl
- $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/char/videodev.c \
+APISOURCES := $(TOPDIR)/drivers/char/videodev.c \
$(TOPDIR)/arch/i386/kernel/mca.c \
$(TOPDIR)/arch/i386/kernel/mtrr.c \
$(TOPDIR)/drivers/char/misc.c \
- $(TOPDIR)/drivers/char/videodev.c \
$(TOPDIR)/drivers/net/net_init.c \
$(TOPDIR)/drivers/net/8390.c \
$(TOPDIR)/drivers/char/serial.c \
@@ -63,10 +79,15 @@
$(TOPDIR)/fs/devfs/base.c \
$(TOPDIR)/kernel/pm.c \
$(TOPDIR)/kernel/ksyms.c \
- $(TOPDIR)/net/netsyms.c \
+ $(TOPDIR)/net/netsyms.c
+
+kernel-api.sgml: kernel-api.tmpl $(APISOURCES)
+ $(TOPDIR)/scripts/docgen $(APISOURCES) \
kernel-api.sgml
-parportbook.sgml: parportbook.tmpl
+parportbook: $(JPG-parportbook)
+parportbook.ps: $(EPS-parportbook)
+parportbook.sgml: parportbook.tmpl $(TOPDIR)/drivers/parport/init.c
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/parport/init.c \
parportbook.sgml
@@ -74,23 +95,28 @@
AUX := $(patsubst %.sgml, %.aux, $(BOOKS))
TEX := $(patsubst %.sgml, %.tex, $(BOOKS))
LOG := $(patsubst %.sgml, %.log, $(BOOKS))
+OUT := $(patsubst %.sgml, %.out, $(BOOKS))
clean:
-$(RM) core *~
-$(RM) $(BOOKS)
- -$(RM) $(DVI) $(AUX) $(TEX) $(LOG)
- -$(RM) parport-share.eps parport-multi.eps parport-structure.eps
+ -$(RM) $(DVI) $(AUX) $(TEX) $(LOG) $(OUT)
+ -$(RM) $(JPG-parportbook) $(EPS-parportbook)
mrproper: clean
-$(RM) $(PS) $(PDF)
-
-parportbook.ps: parport-share.eps parport-multi.eps parport-structure.eps
+ -$(RM) -r $(HTML)
%.ps : %.sgml db2ps
db2ps $<
-%.pdf : %.sgml
+%.pdf : %.sgml db2pdf
db2pdf $<
+
+%: %.sgml db2html
+ -$(RM) -r $@
+ db2html $<
+ if [ ! -z "$(JPG-$@)" ]; then cp $(JPG-$@) $@; fi
include $(TOPDIR)/Rules.make
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/DocBook/kernel-api.tmpl linux/Documentation/DocBook/kernel-api.tmpl
--- v2.4.0-test1/linux/Documentation/DocBook/kernel-api.tmpl Tue May 23 15:31:32 2000
+++ linux/Documentation/DocBook/kernel-api.tmpl Mon Jun 19 12:56:07 2000
@@ -34,6 +34,20 @@
+
+ Data Types
+ Doubly Linked Lists
+!Iinclude/linux/list.h
+
+
+
+
+ Memory Management in Linux
+ The Slab Cache
+!Emm/slab.c
+
+
+
The Linux VFS
The Directory Cache
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/DocBook/kernel-locking.tmpl linux/Documentation/DocBook/kernel-locking.tmpl
--- v2.4.0-test1/linux/Documentation/DocBook/kernel-locking.tmpl Tue May 23 15:31:32 2000
+++ linux/Documentation/DocBook/kernel-locking.tmpl Mon Jun 19 12:56:07 2000
@@ -208,7 +208,12 @@
your task will put itself on the queue, and be woken up when the
semaphore is released. This means the CPU will do something
else while you are waiting, but there are many cases when you
- simply can't sleep, and so have to use a spinlock instead.
+ simply can't sleep (see ), and so
+ have to use a spinlock instead.
+
+
+ Neither type of lock is recursive: see
+ .
@@ -430,7 +435,7 @@
Hardware interrupts usually communicate with a bottom half,
- tasklet or softirq. Frequently this involved putting work in a
+ tasklet or softirq. Frequently this involves putting work in a
queue, which the BH/softirq will take out.
@@ -522,8 +527,8 @@
There is a coding bug where a piece of code tries to grab a
spinlock twice: it will spin forever, waiting for the lock to
- be released (spinlocks and writelocks are not re-entrant in
- Linux). This is trivial to diagnose: not a
+ be released (spinlocks, rwlocks and semaphores are not
+ recursive in Linux). This is trivial to diagnose: not a
stay-up-five-nights-talk-to-fluffy-code-bunnies kind of
problem.
@@ -754,37 +759,15 @@
- Dropping or gaining a spinlock, and any atomic operation are
- all defined to act as memory barriers (ie. as per the
- mb() macro).
-
-
-
- There is a similar, but unrelated, problem with code like the
- following:
-
-
-
- if (!(ctrack->status & IPS_CONFIRMED)) {
- spin_lock_bh(&ip_conntrack_lock);
- if (!(ctrack->status & IPS_CONFIRMED)) {
- clean_from_lists(h->ctrack);
- h->ctrack->status |= IPS_CONFIRMED;
- }
- spin_unlock_bh(&ip_conntrack_lock);
- }
-
-
-
- In this case, the author has tried to be tricky: knowing that
- the CONFIRMED bit is set and never reset in the status word,
- you can test it outside the lock, and frequently avoid
- grabbing the lock at all. However, the compiler could cache
- the value in a register, rather than rereading it once the
- lock is obtained, creating a subtle race. The way to get
- around this is to declare the status field `volatile', or use
- a temporary volatile pointer to achieve the same effect in
- this one place.
+ Any atomic operation is defined to act as a memory barrier
+ (ie. as per the mb() macro). Also,
+ spinlock operations act as partial barriers: operations after
+ gaining a spinlock will never be moved to precede the
+ spin_lock() call, and operations before
+ releasing a spinlock will never be moved after the
+ spin_unlock() call.
+
@@ -911,7 +894,8 @@
You can never call the following routines while holding a
- spinlock, as they may sleep:
+ spinlock, as they may sleep. This also means you need to be in
+ user context.
@@ -952,11 +936,19 @@
- printk(), which can be called from
- user context, interestingly enough.
+ down_interruptible() and
+ down()
+
+
+ There is a down_trylock() which can be
+ used inside interrupt context, as it will not sleep.
+ up() will also never sleep.
+
+ printk() can be called in
+ any context, interestingly enough.
@@ -1047,9 +1039,11 @@
Another common problem is deleting timers which restart
themselves (by calling add_timer() at the end
of their timer function). Because this is a fairly common case
- which is prone to races, the function del_timer_sync()
- () is
- provided to handle this case. It returns the number of times the timer
+ which is prone to races, you can put a call to
+ timer_exit() at the very end of your timer function,
+ and user del_timer_sync()
+ ()
+ to handle this case. It returns the number of times the timer
had to be deleted before we finally stopped it from adding itself back
in.
@@ -1093,8 +1087,8 @@
Thanks to Martin Pool, Philipp Rumpf, Stephen Rothwell, Paul
- Mackerras, Ruedi Aschwanden, Alan Cox for proofreading,
- correcting, flaming, commenting.
+ Mackerras, Ruedi Aschwanden, Alan Cox, Manfred Spraul and Tim
+ Waugh for proofreading, correcting, flaming, commenting.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/DocBook/mousedrivers.tmpl linux/Documentation/DocBook/mousedrivers.tmpl
--- v2.4.0-test1/linux/Documentation/DocBook/mousedrivers.tmpl Wed Dec 31 16:00:00 1969
+++ linux/Documentation/DocBook/mousedrivers.tmpl Mon Jun 19 12:56:07 2000
@@ -0,0 +1,1022 @@
+
+
+
+
+ Mouse Drivers
+
+
+
+ Alan
+ Cox
+
+
+ alan@redhat.com
+
+
+
+
+
+
+ 2000
+ Alan Cox
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+ Introduction
+
+ Earlier publication
+
+ Parts of this document first appeared in Linux Magazine under a
+ ninety day exclusivity.
+
+
+
+
+ Mice are conceptually one of the simplest device interfaces in the
+ Linux operating system. Not all mice are handled by the kernel.
+ Instead there is a two layer abstraction.
+
+
+
+ The kernel mouse drivers and userspace drivers for the serial mice are
+ all managed by a system daemon called gpm
+ - the general purpose mouse driver. gpm
+ handles cutting and pasting on the text consoles. It provides a
+ general library for mouse-aware applications and it handles the
+ sharing of mouse services with the
+ X Window System user interface.
+
+
+ Sometimes a mouse speaks a sufficiently convoluted protocol that the
+ protocol is handled by Gpm itself. Most
+ of the mouse drivers follow a common interface called the bus mouse
+ protocol.
+
+
+ Each read from a bus mouse interface device returns a block of data.
+ The first three bytes of each read are defined as follows:
+
+
+ Mouse Data Encoding
+
+
+
+ Byte 0
+ 0x80 + the buttons currently down.
+
+
+ Byte 1
+ A signed value for the shift in X position
+
+
+ Byte 2
+ A signed value for the shift in Y position
+
+
+
+
+
+ An application can choose to read more than 3 bytes. The rest of the
+ bytes will be zero, or may optionally return some additional
+ device-specific information.
+
+
+ The position values are truncated if they exceed the 8bit range (that
+ is -127 <= delta <= 127). While the value -128 does fit into a
+ byte is not allowed.
+
+
+ The buttons are numbered left to right as
+ 0, 1, 2, 3.. and each button sets the relevant bit. So a user pressing
+ the left and right button of a three button mouse will set bits 0 and 2.
+
+
+ All mice are required to support the poll
+ operation. Indeed pretty much every user of a mouse device uses
+ poll to wait for mouse events to occur.
+
+
+ Finally the mice support asynchronous I/O. This is a topic we have not
+ yet covered but which I will explain after looking at a simple mouse
+ driver.
+
+
+
+
+ A simple mouse driver
+
+ First we will need the set up functions for our mouse device. To keep
+ this simple our imaginary mouse device has three I/O ports fixed at I/O
+ address 0x300 and always lives on interrupt 5. The ports will be the X
+ position, the Y position and the buttons in that order.
+
+
+
+#define OURMOUSE_BASE 0x300
+
+static struct miscdevice our_mouse = {
+ OURMOUSE_MINOR, "ourmouse", &our_mouse_fops
+};
+
+__init ourmouse_init(void)
+{
+
+ if(check_region(OURMOUSE_BASE, 3))
+ return -ENODEV;
+ request_region(OURMOUSE_BASE, 3, "ourmouse");
+
+ misc_register(&our_mouse);
+ return 0;
+}
+
+
+
+ The miscdevice is new here. Linux normally
+ parcels devices out by major number, and each device has 256 units.
+ For things like mice this is extremely wasteful so a device exists
+ which is used to accumulate all the odd individual devices that
+ computers tend to have.
+
+
+ Minor numbers in this space are allocated by a central source, although
+ you can look in the kernel Documentation/devices.txt
+ file and pick a free one for development use. This kernel file also
+ carries instructions for registering a device. This may change over time
+ so it is a good idea to obtain a current copy of this file first.
+
+
+ Our code then is fairly simple. We check nobody else has taken our
+ address space. Having done so we reserve it to ensure nobody stamps
+ on our device while probing for other ISA bus devices. Such a probe
+ might confuse our device.
+
+
+ Then we tell the misc driver that we wish to own a minor number. We also
+ hand it our name (which is used in
+ /proc/misc) and a set of file
+ operations that are to be used. The file operations work exactly like the
+ file operations you would register for a normal character device. The misc
+ device itself is simply acting as a redirector for requests.
+
+
+ Next, in order to be able to use and test our code we need to add some
+ module code to support it. This too is fairly simple:
+
+
+#ifdef MODULE
+
+int init_module(void)
+{
+ if(ourmouse_init()<0)
+ return -ENODEV:
+ return 0;
+}
+
+void cleanup_module(void)
+{
+ misc_deregister(&our_mouse);
+ free_region(OURMOUSE_BASE, 3);
+}
+
+
+#endif
+
+
+
+ The module code provides the normal two functions. The
+ init_module function is called when the module is
+ loaded. In our case it simply calls the initialising function we wrote
+ and returns an error if this fails. This ensures the module will only
+ be loaded if it was successfully set up.
+
+
+ The cleanup_module function is called when the
+ module is unloaded. We give the miscellaneous device entry back, and
+ then free our I/O resources. If we didn't free the I/O resources then
+ the next time the module loaded it would think someone else had its I/O
+ space.
+
+
+ Once the misc_deregister has been called any
+ attempts to open the mouse device will fail with the error
+ ENODEV (No such device).
+
+
+ Next we need to fill in our file operations. A mouse doesn't need many
+ of these. We need to provide open, release, read and poll. That makes
+ for a nice simple structure:
+
+
+
+struct file_operations our_mouse_fops = {
+ NULL, /* Mice don't seek */
+ read_mouse, /* You can read a mouse */
+ write_mouse, /* This won't do a lot */
+ NULL, /* No readdir - not a directory */
+ poll_mouse, /* Poll */
+ NULL, /* No ioctl calls */
+ NULL, /* No mmap */
+ open_mouse, /* Called on open */
+ NULL, /* Flush - 2.2+ only */
+ close_mouse, /* Called on close */
+};
+
+
+
+ There is nothing particularly special needed here. We provide functions
+ for all the relevant or required operations and little else. There is
+ nothing stopping us providing an ioctl function for this mouse. Indeed
+ if you have a configurable mouse it may be very appropriate to provide
+ configuration interfaces via ioctl calls.
+
+
+ The open and close routines need to manage enabling and disabling the
+ interrupts for the mouse as well as stopping the mouse being unloaded
+ when it is no longer required.
+
+
+
+static int mouse_users = 0; /* User count */
+static int mouse_dx = 0; /* Position changes */
+static int mouse_dy = 0;
+static int mouse_event = 0; /* Mouse has moved */
+
+static int open_mouse(struct inode *inode, struct file *file)
+{
+ if(mouse_users++)
+ return 0;
+
+ MOD_INC_USE_COUNT;
+
+ if(request_irq(mouse_intr, OURMOUSE_IRQ, 0, "ourmouse", NULL))
+ {
+ mouse_users--;
+ MOD_DEC_USE_COUNT;
+ return -EBUSY;
+ }
+ mouse_dx = 0;
+ mouse_dy = 0;
+ mouse_event = 0;
+ mouse_buttons = 0;
+ return 0;
+}
+
+
+ The open function has to do a small amount of housework. We keep a count
+ of the number of times the mouse is open. This is because we do not want
+ to request the interrupt multiple times. If the mouse has at least one
+ user then it is set up and we simply add to the user count and return
+ 0 for success.
+
+
+ Firstly we use MOD_INC_USE_COUNT to ensure that
+ while the mouse is open nobody will unload it and cause a nasty crash.
+ We must do this before we sleep - and grabbing the interrupt might sleep.
+
+
+ We grab the interrupt and thus start mouse interrupts. If the interrupt
+ has been borrowed by some other driver then request_irq
+ will fail and we will return an error. If we were capable of sharing an
+ interrupt line we would specify SA_SHIRQ instead of
+ zero. Provided that everyone claiming an interrupt
+ sets this flag, they get to share the line. PCI can
+ share interrupts, ISA normally however cannot.
+
+
+ We do the housekeeping. We make the current mouse position the starting
+ point for accumulated changes and declare that nothing has happened
+ since the mouse driver was opened.
+
+
+ The release function needs to unwind all these:
+
+
+static int close_mouse(struct inode *inode, struct file *file)
+{
+ if(--mouse_users)
+ return 0;
+ free_irq(OURMOUSE_IRQ, NULL);
+ MOD_DEC_USE_COUNT;
+ return 0;
+}
+
+
+ We count off a user and provided that there are still other users need
+ take no further action. The last person closing the mouse causes us to
+ free up the interrupt. This stopps interrupts from the mouse from using
+ our CPU time, and lets us use MOD_DEC_USE_COUNT so
+ that the mouse can now be unloaded.
+
+
+ We can fill in the write handler at this point as the write function for
+ our mouse simply declines to allow writes:
+
+
+
+static ssize_t write_mouse(struct file *file, const char *buffer, size_t
+ count, loff_t *ppos)
+{
+ return -EINVAL;
+}
+
+
+
+ This is pretty much self-explanatory. Whenever you write you get told
+ it was an invalid function.
+
+
+ To make the poll and read functions work we have to consider how we
+ handle the mouse interrupt.
+
+
+
+static struct wait_queue *mouse_wait;
+static spinlock_t mouse_lock = SPIN_LOCK_UNLOCKED;
+
+static void ourmouse_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ char delta_x;
+ char delta_y;
+ unsigned char new_buttons;
+
+ delta_x = inb(OURMOUSE_BASE);
+ delta_y = inb(OURMOUSE_BASE+1);
+ new_buttons = inb(OURMOUSE_BASE+2);
+
+ if(delta_x || delta_y || new_buttons != mouse_buttons)
+ {
+ /* Something happened */
+
+ spin_lock(&mouse_lock);
+ mouse_event = 1;
+ mouse_dx += delta_x;
+ mouse_dy += delta_y;
+ mouse_buttons = new_buttons;
+ spin_unlock(&mouse_lock);
+
+ wake_up_interruptible(&mouse_wait);
+ }
+}
+
+
+
+ The interrupt handler reads the mouse status. The next thing we do is
+ to check whether something has changed. If the mouse was smart it would
+ only interrupt us if something had changed, but let's assume our mouse
+ is stupid as most mice actually tend to be.
+
+
+ If the mouse has changed we need to update the status variables. What we
+ don't want is the mouse functions reading these variables to read them
+ during a change. We add a spinlock that protects these variables while we
+ play with them.
+
+
+ If a change has occured we also need to wake sleeping processes, so we
+ add a wakeup call and a wait_queue to use when
+ we wish to await a mouse event.
+
+
+ Now we have the wait queue we can implement the poll function for the
+ mouse relatively easily:
+
+
+
+static unsigned int mouse_poll(struct file *file, poll_table *wait)
+{
+ poll_wait(file, &mouse_wait, wait);
+ if(mouse_event)
+ return POLLIN | POLLRDNORM;
+ return 0;
+}
+
+
+
+ This is fairly standard poll code. First we add the wait queue to the
+ list of queues we want to monitor for an event. Secondly we check if an
+ event has occured. We only have one kind of event - the
+ mouse_event flag tells us that something happened.
+ We know that this something can only be mouse data. We return the flags
+ indicating input and normal reading will succeed.
+
+
+ You may be wondering what happens if the function returns saying 'no
+ event yet'. In this case the wake up from the wait queue we added to
+ the poll table will cause the function to be called again. Eventually
+ we will be woken up and have an event ready. At this point the
+ poll call will exit back to the user.
+
+
+ After the poll completes the user will want to read the data. We now
+ need to think about how our mouse_read function
+ will work:
+
+
+static ssize_t mouse_read(struct file *file, char *buffer,
+ size_t count, loff_t *pos)
+{
+ int dx, dy;
+ unsigned char button;
+ unsigned long flags;
+ int n;
+
+ if(count<3)
+ return -EINVAL;
+
+ /*
+ * Wait for an event
+ */
+
+ while(!mouse_event)
+ {
+ if(file->f_flags&O_NDELAY)
+ return -EAGAIN;
+ interruptible_sleep_on(&mouse_wait);
+ if(signal_pending(current))
+ return -ERESTARTSYS;
+ }
+
+
+
+ We start by validating that the user is reading enough data. We could
+ handle partial reads if we wanted but it isn't terribly useful and the
+ mouse drivers don't bother to try.
+
+
+ Next we wait for an event to occur. The loop is fairly standard event
+ waiting in Linux. Having checked that the event has not yet occured, we
+ then check if an event is pending and if not we need to sleep.
+
+
+ A user process can set the O_NDELAY flag on a file
+ to indicate that it wishes to be told immediately if no event is
+ pending. We check this and give the appropriate error if so.
+
+
+ Next we sleep until the mouse or a signal awakens us. A signal will
+ awaken us as we have used wakeup_interruptible.
+ This is important as it means a user can kill processes waiting for
+ the mouse - clearly a desireable property. If we are interrupted we
+ exit the call and the kernel will then process signals and maybe
+ restart the call again - from the beginning.
+
+
+ This code contains a classic Linux bug. All will be revealed later in this
+ article as well as explanations for how to avoid it.
+
+
+ /* Grab the event */
+
+ spinlock_irqsave(&mouse_lock, flags);
+
+ dx = mouse_dx;
+ dy = mouse_dy;
+ button = mouse_buttons;
+
+ if(dx<=-127)
+ dx=-127;
+ if(dx>=127)
+ dx=127;
+ if(dy<=-127)
+ dy=-127;
+ if(dy>=127)
+ dy=127;
+
+ mouse_dx -= dx;
+ mouse_dy -= dy;
+
+ if(mouse_dx == 0 && mouse_dy == 0)
+ mouse_event = 0;
+
+ spin_unlock_irqrestore(&mouse_lock, flags);
+
+
+ This is the next stage. Having established that there is an event
+ going, we capture it. To be sure that the event is not being updated
+ as we capture it we also take the spinlock and thus prevent parallel
+ updates. Note here we use spinlock_irqsave. We
+ need to disable interrupts on the local processor otherwise bad things
+ will happen.
+
+
+ What will occur is that we take the spinlock. While we hold the lock
+ an interrupt will occur. At this point our interrupt handler will try
+ and take the spinlock. It will sit in a loop waiting for the read
+ routine to release the lock. However because we are sitting in a loop
+ in the interrupt handler we will never release the lock. The machine
+ hangs and the user gets upset.
+
+
+ By blocking the interrupt on this processor we ensure that the lock
+ holder will always give the lock back without deadlocking.
+
+
+ There is a little cleverness in the reporting mechanism too. We can
+ only report a move of 127 per read. We don't however want to lose
+ information by throwing away further movement. Instead we keep
+ returning as much information as possible. Each time we return a
+ report we remove the amount from the pending movement in
+ mouse_dx and mouse_dy. Eventually
+ when these counts hit zero we clear the mouse_event
+ flag as there is nothing else left to report.
+
+
+
+ if(put_user(button|0x80, buffer))
+ return -EFAULT;
+ if(put_user((char)dx, buffer+1))
+ return -EFAULT;
+ if(put_user((char)dy, buffer+2))
+ return -EFAULT;
+
+ for(n=3; n < count; n++)
+ if(put_user(0x00, buffer+n))
+ return -EFAULT;
+
+ return count;
+}
+
+
+
+ Finally we must put the results in the user supplied buffer. We cannot
+ do this while holding the lock as a write to user memory may sleep.
+ For example the user memory may be residing on disk at this instant.
+ Thus we did our computation beforehand and now copy the data. Each
+ put_user call is filling in one byte of the buffer.
+ If it returns an error we inform the program that it passed us an
+ invalid buffer and abort.
+
+
+ Having written the data we blank the rest of the buffer that was read
+ and report the read as being successful.
+
+
+
+
+ Debugging the mouse driver
+
+
+ We now have an almost perfectly usable mouse driver. If you were to
+ actually try and use it however you would eventually find a couple of
+ problems with it. A few programs will also not work with as it does not
+ yet support asynchronous I/O.
+
+
+ First let us look at the bugs. The most obvious one isn't really a driver
+ bug but a failure to consider the consequences. Imagine you bumped the
+ mouse hard by accident and sent it skittering across the desk. The mouse
+ interrupt routine will add up all that movement and report it in steps of
+ 127 until it has reported all of it. Clearly there is a point beyond
+ which mouse movement isn't worth reporting. We need to add this as a
+ limit to the interrupt handler:
+
+
+
+static void ourmouse_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ char delta_x;
+ char delta_y;
+ unsigned char new_buttons;
+
+ delta_x = inb(OURMOUSE_BASE);
+ delta_y = inb(OURMOUSE_BASE+1);
+ new_buttons = inb(OURMOUSE_BASE+2);
+
+ if(delta_x || delta_y || new_buttons != mouse_buttons)
+ {
+ /* Something happened */
+
+ spin_lock(&mouse_lock);
+ mouse_event = 1;
+ mouse_dx += delta_x;
+ mouse_dy += delta_y;
+
+ if(mouse_dx < -4096)
+ mouse_dx = -4096;
+ if(mouse_dx > 4096)
+ mouse_dx = 4096;
+
+ if(mouse_dy < -4096)
+ mouse_dy = -4096;
+ if(mouse_dy > 4096)
+ mouse_dy = 4096;
+
+ mouse_buttons = new_buttons;
+ spin_unlock(&mouse_lock);
+
+ wake_up_interruptible(&mouse_wait);
+ }
+}
+
+
+
+ By adding these checks we limit the range of accumulated movement to
+ something sensible.
+
+
+ The second bug is a bit more subtle, and that is perhaps why this is
+ such a common mistake. Remember, I said the waiting loop for the read
+ handler had a bug in it. Think about what happens when we execute:
+
+
+
+ while(!mouse_event)
+ {
+
+
+
+ and an interrupt occurs at this point here. This causes a mouse movement
+ and wakes up the queue.
+
+
+
+ interruptible_sleep_on(&mouse_wait);
+
+
+
+ Now we sleep on the queue. We missed the wake up and the application
+ will not see an event until the next mouse event occurs. This will
+ lead to just the odd instance when a mouse button gets delayed. The
+ consequences to the user will probably be almost undetectable with a
+ mouse driver. With other drivers this bug could be a lot more severe.
+
+
+ There are two ways to solve this. The first is to disable interrupts
+ during the testing and the sleep. This works because when a task sleeps
+ it ceases to disable interrupts, and when it resumes it disables them
+ again. Our code thus becomes:
+
+
+
+ save_flags(flags);
+ cli();
+
+ while(!mouse_event)
+ {
+ if(file->f_flags&O_NDELAY)
+ {
+ restore_flags(flags);
+ return -EAGAIN;
+ }
+ interruptible_sleep_on(&mouse_wait);
+ if(signal_pending(current))
+ {
+ restore_flags(flags);
+ return -ERESTARTSYS;
+ }
+ }
+ restore_flags(flags);
+
+
+
+ This is the sledgehammer approach. It works but it means we spend a
+ lot more time turning interrupts on and off. It also affects
+ interrupts globally and has bad properties on multiprocessor machines
+ where turning interrupts off globally is not a simple operation, but
+ instead involves kicking each processor, waiting for them to disable
+ interrupts and reply.
+
+
+ The real problem is the race between the event testing and the sleeping.
+ We can avoid that by using the scheduling functions more directly.
+ Indeed this is the way they generally should be used for an interrupt.
+
+
+
+ struct wait_queue wait = { current, NULL };
+
+ add_wait_queue(&mouse_wait, &wait);
+ current->state = TASK_INTERRUPTIBLE;
+
+ while(!mouse_event)
+ {
+ if(file->f_flags&O_NDELAY)
+ {
+ remove_wait_queue(&mouse_wait, &wait);
+ current->state = TASK_RUNNING;
+ return -EWOULDBLOCK;
+ }
+ if(signal_pending(current))
+ {
+ remove_wait_queue(&mouse_wait, &wait);
+ current->state = TASK_RUNNING;
+ return -ERESTARTSYS;
+ }
+ schedule();
+ current->state = TASK_INTERRUPTIBLE;
+ }
+
+ remove_wait_wait(&mouse_wait, &wait);
+ current->state = TASK_RUNNING;
+
+
+
+ At first sight this probably looks like deep magic. To understand how
+ this works you need to understand how scheduling and events work on
+ Linux. Having a good grasp of this is one of the keys to writing clean
+ efficient device drivers.
+
+
+ add_wait_queue does what its name suggests. It adds
+ an entry to the mouse_wait list. The entry in this
+ case is the entry for our current process (current
+ is the current task pointer).
+
+
+ So we start by adding an entry for ourself onto the
+ mouse_wait list. This does not put us to sleep
+ however. We are merely tagged onto the list.
+
+
+ Next we set our status to TASK_INTERRUPTIBLE. Again
+ this does not mean we are now asleep. This flag says what should happen
+ next time the process sleeps. TASK_INTERRUPTIBLE says
+ that the process should not be rescheduled. It will run from now until it
+ sleeps and then will need to be woken up.
+
+
+ The wakeup_interruptible call in the interrupt
+ handler can now be explained in more detail. This function is also very
+ simple. It goes along the list of processes on the queue it is given and
+ any that are marked as TASK_INTERRUPTIBLE it changes
+ to TASK_RUNNING and tells the kernel that new
+ processes are runnable.
+
+
+ Behind all the wrappers in the original code what is happening is this
+
+
+
+
+
+ We add ourself to the mouse wait queue
+
+
+
+
+ We mark ourself as sleeping
+
+
+
+
+ We ask the kernel to schedule tasks again
+
+
+
+
+ The kernel sees we are asleep and schedules someone else.
+
+
+
+
+ The mouse interrupt sets our state to TASK_RUNNING
+ and makes a note that the kernel should reschedule tasks
+
+
+
+
+ The kernel sees we are running again and continues our execution
+
+
+
+
+ This is why the apparent magic works. Because we mark ourself as
+ TASK_INTERRUPTIBLE and as we add ourselves
+ to the queue before we check if there are events pending, the race
+ condition is removed.
+
+
+ Now if an interrupt occurs after we check the queue status and before
+ we call the schedule function in order to sleep,
+ things work out. Instead of missing an event, we are set back to
+ TASK_RUNNING by the mouse interrupt. We still call
+ schedule but it will continue running our task.
+ We go back around the loop and this time there may be an event.
+
+
+ There will not always be an event. Thus we set ourselves back to
+ TASK_INTERRUPTIBLE before resuming the loop.
+ Another process doing a read may already have cleared the event flag,
+ and if so we will need to go back to sleep again. Eventually we will
+ get our event and escape.
+
+
+ Finally when we exit the loop we remove ourselves from the
+ mouse_wait queue as we are no longer interested
+ in mouse events, and we set ourself back to
+ TASK_RUNNABLE as we do not wish to go to sleep
+ again just yet.
+
+
+ Note
+
+ This isn't an easy topic. Don't be afraid to reread the description a
+ few times and also look at other device drivers to see how it works.
+ Finally if you can't grasp it just yet, you can use the code as
+ boilerplate to write other drivers and trust me instead.
+
+
+
+
+
+ Asynchronous I/O
+
+ This leaves the missing feature - Asynchronous I/O. Normally UNIX
+ programs use the poll call (or its variant form
+ select) to wait for an event to occur on one of
+ multiple input or output devices. This model works well for most tasks
+ but because poll and select
+ wait for an event isn't suitable for tasks that are also continually
+ doing computation work. Such programs really want the kernel to kick
+ them when something happens rather than watch for events.
+
+
+ Poll is akin to having a row of lights in front of you. You can see at a
+ glance which ones if any are lit. You cannot however get anything useful
+ done while watching them. Asynchronous I/O uses signals which work more
+ like a door bell. Instead of you watching, it tells you that something
+ is up.
+
+
+ Asynchronous I/O sends the signal SIGIO to a user process when the I/O
+ events occur. In this case that means when people move the mouse. The
+ SIGIO signal causes the user process to jump to its signal handler and
+ execute code in that handler before returning to whatever was going on
+ previously. It is the application equivalent of an interrupt handler.
+
+
+ Most of the code needed for this operation is common to all its users.
+ The kernel provides a simple set of functions for managing asynchronous
+ I/O.
+
+
+ Our first job is to allow users to set asynchronous I/O on file handles.
+ To do that we need to add a new function to the file operations table for
+ our mouse:
+
+
+
+struct file_operations our_mouse_fops = {
+ NULL, /* Mice don't seek */
+ read_mouse, /* You can read a mouse */
+ write_mouse, /* This won't do a lot */
+ NULL, /* No readdir - not a directory */
+ poll_mouse, /* Poll */
+ NULL, /* No ioctl calls */
+ NULL, /* No mmap */
+ open_mouse, /* Called on open */
+ NULL, /* Flush */
+ close_mouse, /* Called on close */
+ NULL, /* No fsync on a mouse */
+ fasync_mouse, /* Asynchronous I/O */
+};
+
+
+
+ Once we have installed this entry the kernel knows we support
+ asynchronous I/O and will allow all the relevant operations on the
+ device. Whenever a user adds or removes asynchronous I/O notification
+ on a file handle it calls our fasync_mouse routine
+ we just added. This routine uses the helper functions to keep the queue
+ of handles up to date:
+
+
+
+static struct fasync_struct *mouse_fasync = NULL;
+
+static int fasync_mouse(int fd, struct file *filp, int on)
+{
+ int retval = fasync_helper(fd, filp, on, &mouse_fasync);
+
+ if (retval < 0)
+ return retval;
+ return 0;
+}
+
+
+
+ The fasync helper adds and deletes entries by managing the supplied
+ list. We also need to remove entries from this list when the file is
+ closed. This requires we add one line to our close function:
+
+
+
+static int close_mouse(struct inode *inode, struct file *file)
+{
+ fasync_mouse(-1, file, 0)
+ if(--mouse_users)
+ return 0;
+ free_irq(OURMOUSE_IRQ, NULL);
+ MOD_DEC_USE_COUNT;
+ return 0;
+}
+
+
+
+ When we close the file we now call our own fasync handler as if the
+ user had requested that this file cease to be used for asynchronous
+ I/O. This rather neatly cleans up any loose ends. We certainly don't
+ wait to deliver a signal for a file that no longer exists.
+
+
+ At this point the mouse driver supports all the asynchronous I/O
+ operations, and applications using them will not error. They won't
+ however work yet. We need to actually send the signals. Again the
+ kernel provides a function for handling this.
+
+
+ We update our interrupt handler a little:
+
+
+
+static void ourmouse_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ char delta_x;
+ char delta_y;
+ unsigned char new_buttons;
+
+ delta_x = inb(OURMOUSE_BASE);
+ delta_y = inb(OURMOUSE_BASE+1);
+ new_buttons = inb(OURMOUSE_BASE+2);
+
+ if(delta_x || delta_y || new_buttons != mouse_buttons)
+ {
+ /* Something happened */
+
+ spin_lock(&mouse_lock);
+ mouse_event = 1;
+ mouse_dx += delta_x;
+ mouse_dy += delta_y;
+
+ if(mouse_dx < -4096)
+ mouse_dx = -4096;
+ if(mouse_dx > 4096)
+ mouse_dx = 4096;
+
+ if(mouse_dy < -4096)
+ mouse_dy = -4096;
+ if(mouse_dy > 4096)
+ mouse_dy = 4096;
+
+ mouse_buttons = new_buttons;
+ spin_unlock(&mouse_lock);
+
+ /* Now we do asynchronous I/O */
+ kill_fasync(&mouse_fasync, SIGIO);
+
+ wake_up_interruptible(&mouse_wait);
+ }
+}
+
+
+
+ The new code simply calls the kill_fasync routine
+ provided by the kernel if the queue is non-empty. This sends the
+ required signal (SIGIO in this case) to the process each file handle
+ says should be informed about the exciting new mouse movement that
+ just happened.
+
+
+ With this in place and the bugs in the original version fixed, you now
+ have a fully functional mouse driver using the bus mouse protocol. It
+ will work with the X window system, will work
+ with GPM and should work with every other
+ application you need. Doom is of course the
+ ideal way to test your new mouse driver is functioning properly. Be sure
+ to test it thoroughly.
+
+
+
+
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/DocBook/via-audio.tmpl linux/Documentation/DocBook/via-audio.tmpl
--- v2.4.0-test1/linux/Documentation/DocBook/via-audio.tmpl Wed Dec 31 16:00:00 1969
+++ linux/Documentation/DocBook/via-audio.tmpl Mon Jun 19 12:56:07 2000
@@ -0,0 +1,383 @@
+
+
+
+
+ Via 686 Audio Driver for Linux
+
+
+
+ Jeff
+ Garzik
+
+
+ jgarzik@mandrakesoft.com
+
+
+
+
+
+
+ 2000
+ Jeff Garzik
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+ Introduction
+
+ The Via VT82C686A and VT82C686A "super southbridge" chips contain
+ AC97-compatible audio logic which features dual full-duplex 16-bit stereo
+ PCM sound channels, plus a third PCM channel intended for use
+ in hardware-assisted FM synthesis.
+
+
+ The current Linux kernel audio driver for this family of chips
+ supports audio playback, but recording and hardware-assisted
+ FM support features are not yet available.
+
+
+ This driver supports any Linux kernel version after 2.3.50.
+
+
+ Please send bug reports to the mailing list linux-via@gtf.org.
+ To subscribe, e-mail majordomo@gtf.org with
+
+
+ subscribe linux-via
+
+
+ in the body of the message.
+
+
+
+
+ Driver Installation
+
+ To use this audio driver, select the
+ CONFIG_SOUND_VIA82CXXX option in the section Sound during kernel configuration.
+ Follow the usual kernel procedures for rebuilding the kernel,
+ or building and installing driver modules.
+
+
+ To make this driver the default audio driver, you can add the
+ following to your /etc/conf.modules file:
+
+
+ alias sound via82cxxx_audio
+
+
+ Note that soundcore and ac97_codec support modules
+ are also required for working audio, in addition to
+ the via82cxxx_audio module itself.
+
+
+
+
+ Submitting a bug report
+ Description of problem
+
+ Describe the application you were using to play/record sound, and how
+ to reproduce the problem.
+
+
+ Diagnostic output
+
+ Obtain the via-audio-diag diagnostics program from
+ http://gtf.org/garzik/drivers/via82cxxx/ and provide a dump of the
+ audio chip's registers while the problem is occurring. Sample command line:
+
+
+ ./via-audio-diag -aps > diag-output.txt
+
+
+ Driver debug output
+
+ Define VIA_DEBUG at the beginning of the driver, then capture and email
+ the kernel log output. This can be viewed in the system kernel log (if
+ enabled), or via the dmesg program. Sample command line:
+
+
+ dmesg > /tmp/dmesg-output.txt
+
+
+ Bigger kernel message buffer
+
+ If you wish to increase the size of the buffer displayed by dmesg, then
+ change the LOG_BUF_LEN macro at the top of linux/kernel/printk.c, recompile
+ your kernel, and pass the LOG_BUF_LEN value to dmesg. Sample command line with
+ LOG_BUF_LEN == 32768:
+
+
+ dmesg -s 32768 > /tmp/dmesg-output.txt
+
+
+
+
+
+ Known Bugs And Assumptions
+
+
+ Recording support
+
+
+ Recording support is currently missing.
+
+
+
+ MMAP support
+
+
+ MMAP support is currently missing. Make sure to
+ test with Quake.
+
+
+
+ AC97 codec timeout during init
+
+
+ A warning message "via82cxxx: timeout while reading AC97
+ codec" is printed during driver initialization. This
+ message can safely be ignored.
+
+
+
+ Low volume
+
+
+ Volume too low on many systems. Workaround: use mixer program
+ such as xmixer to increase volume.
+
+
+
+ RealPlayer trouble
+
+
+ RealPlayer output very scratchy. Workaround: use esd, and
+ configure RealPlayer to output to esd.
+
+
+
+ Broken apps
+
+
+ Applications which attempt to open the sound device in read/write
+ mode (O_RDWR) will fail. This is incorrect OSS behavior, but since
+ this driver will eventually support recording as well as playback,
+ we will be able to (in the future) support even broken programs which
+ unconditionally use O_RDWR.
+
+
+
+
+
+
+
+
+
+ Thanks
+
+ Via for providing e-mail support, specs, and NDA'd source code.
+
+
+ MandrakeSoft for providing hacking time.
+
+
+ AC97 mixer interface fixes and debugging by Ron Cemer roncemer@gte.net.
+
+
+
+
+ Random Notes
+
+ Two /proc pseudo-files provide diagnostic information. This is generally
+ not useful to most users. Power users can disable VIA_PROC_FS macro in the
+ driver source code, and remove the /proc support code. In any case, once
+ version 2.0.0 is released, the /proc support code will be disabled by
+ default. Available /proc pseudo-files:
+
+
+ /proc/driver/via/0/info
+ /proc/driver/via/0/ac97
+
+
+ This driver by default supports all PCI audio devices which report
+ a vendor id of 0x1106, and a device id of 0x3058. Subsystem vendor
+ and device ids are not examined.
+
+
+ Only supports a single sound chip, as this is a motherboard chipset.
+ Some architecture remains for multiple cards, feel free to submit
+ a patch to clean some of that up.
+
+
+ No consideration for SMP, this chipset is not known to be found on
+ any SMP motherboards. However, spin_locks must be used anyway in order
+ to handle interrupts correctly.
+
+
+ GNU indent formatting options: -kr -i8 -pcs
+
+
+ Via has graciously donated e-mail support and source code to help further
+ the development of this driver. Their assistance has been invaluable
+ in the design and coding of the next major version of this driver.
+
+
+ The Via audio chip apparently provides a second PCM scatter-gather
+ DMA channel just for FM data, but does not have a full hardware MIDI
+ processor. I haven't put much thought towards a solution here, but it
+ might involve using SoftOSS midi wave table, or simply disabling MIDI
+ support altogether and using the FM PCM channel as a second (input? output?)
+
+
+
+
+ Driver ChangeLog
+
+
+Version 1.1.8
+
+
+
+
+ Clean up interrupt handler output. Fixes the following kernel error message:
+
+
+ unhandled interrupt ...
+
+
+
+
+
+ Convert documentation to DocBook, so that PDF, HTML and PostScript (.ps) output is readily
+ available.
+
+
+
+
+
+
+
+Version 1.1.7
+
+
+
+
+ Fix module unload bug where mixer device left registered
+ after driver exit
+
+
+
+
+
+
+Version 1.1.6
+
+
+
+
+ Rewrite via_set_rate to mimic ALSA basic AC97 rate setting
+
+
+
+
+ Remove much dead code
+
+
+
+
+ Complete spin_lock_irqsave -> spin_lock_irq conversion in via_dsp_ioctl
+
+
+
+
+ Fix build problem in via_dsp_ioctl
+
+
+
+
+ Optimize included headers to eliminate headers found in linux/drivers/sound
+
+
+
+
+
+
+Version 1.1.5
+
+
+
+
+ Disable some overly-verbose debugging code
+
+
+
+
+ Remove unnecessary sound locks
+
+
+
+
+ Fix some ioctls for better time resolution
+
+
+
+
+ Begin spin_lock_irqsave -> spin_lock_irq conversion in via_dsp_ioctl
+
+
+
+
+
+
+Version 1.1.4
+
+
+
+
+ Completed rewrite of driver. Eliminated SoundBlaster compatibility
+ completely, and now uses the much-faster scatter-gather DMA engine.
+
+
+
+
+
+
+
+
+ Internal Functions
+!Idrivers/sound/via82cxxx_audio.c
+
+
+
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/arm/README linux/Documentation/arm/README
--- v2.4.0-test1/linux/Documentation/arm/README Sun May 2 09:51:16 1999
+++ linux/Documentation/arm/README Mon Jun 19 17:59:33 2000
@@ -1,9 +1,7 @@
- ARM Linux 2.2.3
- ===============
+ ARM Linux 2.4.0test1
+ ====================
- * NOTE * The ARM support in the mainstream Linux kernel sources
- is not up to date. Please check ftp.arm.uk.linux.org:/pub/armlinux
- for latest updates.
+ Please check ftp.arm.linux.org.uk:/pub/armlinux for latest updates.
Compilation of kernel
---------------------
@@ -13,10 +11,10 @@
and EGCS are good compilers. Note that GCC-2.7.2.2 ELF is rare, and
you probably don't have it.
- To build ARM Linux natively, you shouldn't have to alter the ARCH = line in
- the top level Makefile. However, if you don't have the ARM Linux ELF tools
- installed as default, then you should change the CROSS_COMPILE line as
- detailed below.
+ To build ARM Linux natively, you shouldn't have to alter the ARCH = line
+ in the top level Makefile. However, if you don't have the ARM Linux ELF
+ tools installed as default, then you should change the CROSS_COMPILE
+ line as detailed below.
If you wish to cross-compile, then alter the following lines in the top
level make file:
@@ -41,27 +39,28 @@
Bug reports etc
---------------
- Please send patches, bug reports and code for the ARM Linux project
- to linux@arm.linux.org.uk Patches will not be included into future
- kernels unless they come to me (or the relevant person concerned).
+ Please send patches to the patch system. For more information, see
+ http://www.arm.linux.org.uk/patches/info.html Always include some
+ explanation as to what the patch does and why it is needed.
+
+ Bug reports should be sent to linux-arm-kernel@lists.arm.linux.org.uk,
+ or submitted through the web form at
+ http://www.arm.linux.org.uk/forms/solution.shtml
When sending bug reports, please ensure that they contain all relevant
information, eg. the kernel messages that were printed before/during
the problem, what you were doing, etc.
- For patches, please include some explanation as to what the patch does
- and why (if relevant).
-
Modules
-------
Although modularisation is supported (and required for the FP emulator),
- each module on an arm2/arm250/arm3 machine when is loaded will take
- memory up to the next 32k boundary due to the size of the pages. Hence is
- modularisation on these machines really worth it?
+ each module on an ARM2/ARM250/ARM3 machine when is loaded will take
+ memory up to the next 32k boundary due to the size of the pages.
+ Therefore, modularisation on these machines really worth it?
- However, arm6 and up machines allow modules to take multiples of 4k, and
+ However, ARM6 and up machines allow modules to take multiples of 4k, and
as such Acorn RiscPCs and other architectures using these processors can
make good use of modularisation.
@@ -124,7 +123,7 @@
The initial entry into the kernel made via head-armv.S uses architecture
independent code. The architecture is selected by the value of 'r1' on
entry, which must be kept unique. You can register a new architecture
- by mailing the following details to rmk@arm.uk.linux.org. Please give
+ by mailing the following details to rmk@arm.linux.org.uk Please give
the mail a subject of 'Register new architecture':
Name:
@@ -133,7 +132,7 @@
Please follow this format - it is an automated system. You should
- receive a reply the next day.
+ receive a reply within one day.
---
-Russell King (27/03/1999)
+Russell King (12/06/2000)
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/arm/SA1100/LART linux/Documentation/arm/SA1100/LART
--- v2.4.0-test1/linux/Documentation/arm/SA1100/LART Fri May 12 14:18:55 2000
+++ linux/Documentation/arm/SA1100/LART Mon Jun 19 17:59:33 2000
@@ -10,6 +10,5 @@
is under development, with plenty of others in different stages of
planning.
-The designs for this board have been released under a GPL-like license;
-
-For lot more info, see the LART page at http://www.lart.tudelft.nl.
+The hardware designs for this board have been released under an open license;
+see the LART page at http://www.lart.tudelft.nl/ for more information.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/cpqarray.txt linux/Documentation/cpqarray.txt
--- v2.4.0-test1/linux/Documentation/cpqarray.txt Mon Jul 5 19:52:13 1999
+++ linux/Documentation/cpqarray.txt Fri Jun 23 21:04:36 2000
@@ -1,11 +1,5 @@
This driver is for Compaq's SMART2 Intellegent Disk Array Controllers.
-WARNING:
---------
-
-This driver comes with NO WARRANTY. It is not officially supported by
-Compaq. Do not call technical support. Use at your own risk.
-
Supported Cards:
----------------
@@ -22,6 +16,7 @@
* Integrated Smart Array Controller
* SA 4200
* SA 4250ES
+ * SA 431
It should also work with some really old Disk array adapters, but I am
unable to test against these cards:
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/filesystems/bfs.txt linux/Documentation/filesystems/bfs.txt
--- v2.4.0-test1/linux/Documentation/filesystems/bfs.txt Thu Feb 10 17:11:02 2000
+++ linux/Documentation/filesystems/bfs.txt Mon Jun 19 12:56:07 2000
@@ -54,4 +54,4 @@
If you have any patches, questions or suggestions regarding this BFS
implementation please contact the author:
-Tigran A. Aivazian .
+Tigran A. Aivazian
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/filesystems/devfs/ChangeLog linux/Documentation/filesystems/devfs/ChangeLog
--- v2.4.0-test1/linux/Documentation/filesystems/devfs/ChangeLog Thu May 11 15:30:05 2000
+++ linux/Documentation/filesystems/devfs/ChangeLog Wed Jun 21 22:30:59 2000
@@ -1533,3 +1533,46 @@
- Updated Documentation/filesystems/devfs/README
- Updated sample modules.conf
+===============================================================================
+Changes for patch v168
+
+Work sponsored by SGI
+
+- Disabled multi-mount capability (use VFS bindings instead)
+
+- Updated README from master HTML file
+===============================================================================
+Changes for patch v169
+
+Work sponsored by SGI
+
+- Removed multi-mount code
+
+- Removed compatibility macros: VFS has changed too much
+===============================================================================
+Changes for patch v170
+
+Work sponsored by SGI
+
+- Updated README from master HTML file
+
+- Merged devfs inode into devfs entry
+===============================================================================
+Changes for patch v171
+
+Work sponsored by SGI
+
+- Updated sample modules.conf
+
+- Removed dead code in which used to call
+
+
+- Ported to kernel 2.4.0-test2-pre3
+===============================================================================
+Changes for patch v172
+
+Work sponsored by SGI
+
+- Changed interface to
+
+- Changed interface to
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/filesystems/devfs/README linux/Documentation/filesystems/devfs/README
--- v2.4.0-test1/linux/Documentation/filesystems/devfs/README Thu May 11 15:30:05 2000
+++ linux/Documentation/filesystems/devfs/README Wed Jun 21 08:29:00 2000
@@ -3,7 +3,7 @@
Linux Devfs (Device File System) FAQ
Richard Gooch
-1-MAY-2000
+14-JUN-2000
-----------------------------------------------------------------------------
@@ -797,13 +797,15 @@
mount devfs and then create the named pipe *before* init
starts.
-The default behaviour now is not to mount devfs onto /dev at boot time.
-You can correct this with the "devfs=mount" boot option. This solves
-any problems with init, and also prevents the dreaded:
+The default behaviour now is not to mount devfs onto /dev at boot time
+for 2.3.x and later kernels. You can correct this with the
+"devfs=mount" boot option. This solves any problems with init,
+and also prevents the dreaded:
Cannot open initial console
-message.
+message. For 2.2.x kernels where you need to apply the devfs patch,
+the default is to mount.
If you have automatic mounting of devfs onto /dev then you may need to
create /dev/initctl in your boot scripts. The following lines should
@@ -1460,9 +1462,19 @@
Douglas Gilbert has written a useful document at
http://www.torque.net/sg/devfs_scsi.html which
-explores the SCSI subsystem and how it interacts with devfs.
+explores the SCSI subsystem and how it interacts with devfs
+Douglas Gilbert has written another useful document at
+
+http://www.torque.net/scsi/scsihosts.html which
+discusses the scsihosts= boot option
+
+
+Douglas Gilbert has written yet another useful document at
+
+http://www.torque.net/scsi/linux_scsi_24 which
+discusses the Linux SCSI subsystem in 2.4.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/filesystems/devfs/modules.conf linux/Documentation/filesystems/devfs/modules.conf
--- v2.4.0-test1/linux/Documentation/filesystems/devfs/modules.conf Thu May 11 15:30:05 2000
+++ linux/Documentation/filesystems/devfs/modules.conf Wed Jun 21 08:29:00 2000
@@ -1,7 +1,7 @@
# Sample entries for /etc/modules.conf for devfs
###############################################################################
-# Configuration section: change to suit
+# Configuration section: change to suit your hardware
#
alias /dev/sound sb
alias /dev/v4l bttv
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/floppy.txt linux/Documentation/floppy.txt
--- v2.4.0-test1/linux/Documentation/floppy.txt Sat Feb 26 22:31:37 2000
+++ linux/Documentation/floppy.txt Mon Jun 19 12:56:07 2000
@@ -201,11 +201,10 @@
The latest version can be found at fdutils homepage:
http://fdutils.linux.lu
-The fdutils-5.3 release can be found at:
- http://fdutils.linux.lu/fdutils-5.3.src.tar.gz
- http://www.tux.org/pub/knaff/fdutils/fdutils-5.3.src.tar.gz
- ftp://tsx-11.mit.edu/pub/linux/sources/sbin/fdutils-5.3.src.tar.gz
- ftp://metalab.unc.edu/pub/Linux/utils/disk-management/fdutils-5.3.src.tar.gz
+The fdutils-5.4 release can be found at:
+ http://fdutils.linux.lu/fdutils-5.4.src.tar.gz
+ http://www.tux.org/pub/knaff/fdutils/fdutils-5.4.src.tar.gz
+ ftp://metalab.unc.edu/pub/Linux/utils/disk-management/fdutils-5.4.src.tar.gz
Reporting problems about the floppy driver
==========================================
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/ioctl-number.txt linux/Documentation/ioctl-number.txt
--- v2.4.0-test1/linux/Documentation/ioctl-number.txt Thu May 11 15:30:05 2000
+++ linux/Documentation/ioctl-number.txt Mon Jun 19 12:56:07 2000
@@ -74,6 +74,8 @@
0x22 all scsi/sg.h
'1' 00-1F PPS kit from Ulrich Windl
+'6' 00-10 Intel P6 microcode update driver
+
'8' all SNP8023 advanced NIC card
'A' 00-1F linux/apm_bios.h
@@ -101,6 +103,7 @@
'V' all linux/vt.h
'W' 00-1F linux/watchdog.h conflict!
'W' 00-1F linux/wanrouter.h conflict!
+'X' all linux/xfs_fs.h
'Y' all linux/cyclades.h
'a' all ATM on linux
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/joystick-parport.txt linux/Documentation/joystick-parport.txt
--- v2.4.0-test1/linux/Documentation/joystick-parport.txt Wed Dec 8 14:11:24 1999
+++ linux/Documentation/joystick-parport.txt Wed Jun 21 08:22:21 2000
@@ -1,5 +1,5 @@
- Linux Joystick parport drivers v1.2 BETA
- (c) 1998-1999 Vojtech Pavlik
+ Linux Joystick parport drivers v2.0
+ (c) 1998-2000 Vojtech Pavlik
(c) 1998 Andree Borrmann
Sponsored by SuSE
----------------------------------------------------------------------------
@@ -39,7 +39,7 @@
lines of the parallel port are shared, while one of 5 available input lines
is assigned to each gamepad.
- This protocol is handled by the joy-console.c driver, so that's the one
+ This protocol is handled by the gamecon.c driver, so that's the one
you'll use for NES and SNES gamepads.
The main problem with PC parallel ports is that they don't have +5V power
@@ -199,9 +199,9 @@
And there were many others.
-2.2.1 Multisystem joysticks using joy-db9.c
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- For the Multisystem joysticks, and their derivatives, the joy-db9.c driver
+2.2.1 Multisystem joysticks using db9.c
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ For the Multisystem joysticks, and their derivatives, the db9.c driver
was written. It allows only one joystick / gamepad per parallel port, but
the interface is easy to build and works with almost anything.
@@ -236,25 +236,25 @@
And that's it.
On a side note, if you have already built a different adapter for use with
-the digital joystick driver 0.8.0.2, this is also supported by the joy-db9.c
+the digital joystick driver 0.8.0.2, this is also supported by the db9.c
driver, as device type 8. (See section 3.2)
-2.2.2 Multisystem joysticks using joy-console.c
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.2.2 Multisystem joysticks using gamecon.c
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For some people just one joystick per parallel port is not enough, and/or
-want to use them on one parallel port together with NES/SNES/PSX pads. This
-is possible using the joy-console.c. It supports up to 5 devices of the
-above types, including 1 and 2 buttons Multisystem joysticks.
+want to use them on one parallel port together with NES/SNES/PSX pads. This is
+possible using the gamecon.c. It supports up to 5 devices of the above types,
+including 1 and 2 buttons Multisystem joysticks.
However, there is nothing for free. To allow more sticks to be used at
once, you need the sticks to be purely switch based (that is non-TTL), and
not to need power. Just a plain simple six switches inside. If your
joystick can do more (eg. turbofire) you'll need to disable it totally first
-if you want to use joy-console.c.
+if you want to use gamecon.c.
Also, the connection is a bit more complex. You'll need a bunch of diodes,
and one pullup resistor. First, you connect the Directions and the button
-the same as for joy-db9, however with the diodes inbetween.
+the same as for db9, however with the diodes inbetween.
Diodes
(pin 2) -----|<|----> Up
@@ -278,17 +278,17 @@
And that's all, here we go!
-2.2.3 Multisystem joysticks using joy-turbografx.c
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+2.2.3 Multisystem joysticks using turbografx.c
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The TurboGraFX interface, designed by
Steffen Schwenke
allows up to 7 Multisystem joysticks connected to the parallel port. In
-Steffen's version, there is support for up to 5 buttons per joystick.
-However, since this doesn't work reliably on all parallel ports, the
-joy-turbografx.c driver supports only one button per joystick. For more
-information on how to build the interface, see
+Steffen's version, there is support for up to 5 buttons per joystick. However,
+since this doesn't work reliably on all parallel ports, the turbografx.c driver
+supports only one button per joystick. For more information on how to build the
+interface, see
http://www2.burg-halle.de/~schwenke/parport.html
@@ -298,7 +298,7 @@
WARNING: PSX support is experimental, and at the moment doesn't seem to
work for most people. If you like adventure, you can try yourself.
- The PSX controller is supported by the joy-console.c.
+ The PSX controller is supported by the gamecon.c.
Pinout of the PSX controller (compatible with DirectPadPro):
@@ -328,7 +328,7 @@
~~~~~~~~
All the Sega controllers are more or less based on the standard 2-button
Multisystem joystick. However, since they don't use switches and use TTL
-logic, the only driver useable with them is the joy-db9.c driver.
+logic, the only driver useable with them is the db9.c driver.
2.4.1 Sega Master System
~~~~~~~~~~~~~~~~~~~~~~~~
@@ -377,13 +377,13 @@
(pin 14) -----> Select
- The rest is the same as for Multi2 joysticks using joy-db9.c
+ The rest is the same as for Multi2 joysticks using db9.c
2.4.3 Sega Saturn
~~~~~~~~~~~~~~~~~
Sega Saturn has eight buttons, and to transfer that, without hacks like
Genesis 6 pads use, it needs one more select pin. Anyway, it is still
-handled by the joy-db9.c driver. Its pinout is very different from anything
+handled by the db9.c driver. Its pinout is very different from anything
else. Use this schematic:
+-----------> Select 1
@@ -409,7 +409,7 @@
(pin 16) -----> Select 2
The other pins (Up, Down, Right, Left, Power, Ground) are the same as for
-Multi joysticks using joy-db9.c
+Multi joysticks using db9.c
3. The drivers
~~~~~~~~~~~~~~
@@ -417,16 +417,14 @@
described above, allows to connect a different group of joysticks and pads.
Here are described their command lines:
-3.1 joy-console.c
-~~~~~~~~~~~~~~~~~
- Using joy-console.c you can connect up to five devices to one parallel
-port. It uses the following kernel/module command line:
+3.1 gamecon.c
+~~~~~~~~~~~~~
+ Using gamecon.c you can connect up to five devices to one parallel port. It
+uses the following kernel/module command line:
- js_console=port,pad1,pad2,pad3,pad4,pad5
+ gc=port,pad1,pad2,pad3,pad4,pad5
- Where 'port' is either the address of the parallel port the joystick/pad
-is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+
-Linux kernels, the number of the parport interface (eg. 0 for parport0).
+ Where 'port' the number of the parport interface (eg. 0 for parport0).
And 'pad1' to 'pad5' are pad types connected to different data input pins
(10,11,12,13,15), as described in section 2.1 of this file.
@@ -442,47 +440,22 @@
5 | Multisystem 2-button joystick
6 | Sony PSX controller
7 | N64 pad
- 8 | N64 pad with direction pad as buttons (DirectPadPro style)
The exact type of the PSX controller type is autoprobed, so you must have
your controller plugged in before initializing.
- Should you want to use more than one of parallel ports at once, you can
-use js_console_2 and js_console_3 as additional command line parameters for
-two more parallel ports.
-
- Changes:
- v0.1 : First version (SNES only)
- v0.2 : X/Y directions were exchanged...
- v0.3 : Adaptation for kernel 2.1
- v0.4 : Adaptation for joystick-1.2.6
- - added open/close callbacks
- v0.5 : Renamed to "joy-console" because I have added
- PSX controller support.
- v0.6 : NES support
- v0.7V : Added "multi system" support
- v0.8 : Bugfixed PSX driver...
- v0.9V : Changed multi system support
- Added Multi2 support
- Fixed parport handling
- Cleaned up
- v0.10 : Fixed PSX buttons 8 and 9
- v0.11V: Switched to EXCL mode
- Removed wakeup
- v0.12V: Added N64 support
- v0.13V: Updated N64 support
- v0.14V: Fixed N64 axis/button counts
+ Should you want to use more than one of parallel ports at once, you can use
+gc_2 and gc_3 as additional command line parameters for two more parallel
+ports.
-3.2 joy-db9.c
-~~~~~~~~~~~~~
+3.2 db9.c
+~~~~~~~~~
Apart from making an interface, there is nothing difficult on using the
-joy-db9.c driver. It uses the following kernel/module command line:
+db9.c driver. It uses the following kernel/module command line:
- js_db9=port,type
+ db9=port,type
- Where 'port' is either the address of the parallel port the joystick/pad
-is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+
-Linux kernels, the number of the parport interface (eg. 0 for parport0).
+ Where 'port' is the number of the parport interface (eg. 0 for parport0).
Caveat here: This driver only works on bidirectional parallel ports. If
your parallel port is recent enough, you should have no trouble with this.
@@ -500,39 +473,26 @@
6 | Genesis pad (6+2 buttons)
7 | Saturn pad (8 buttons)
8 | Multisystem 1-button joystick (v0.8.0.2 pin-out)
- 9 | Two Multiststem 1-button joysticks (v0.8.0.2 pin-out)
+ 9 | Two Multisystem 1-button joysticks (v0.8.0.2 pin-out)
+ 10 | Amiga CD32 pad
Should you want to use more than one of these joysticks/pads at once, you
-can use js_db9_2 and js_db9_3 as additional command line parameters for two
+can use db9_2 and db9_3 as additional command line parameters for two
more joysticks/pads.
- Changes:
- v0.1 : First version
- v0.2 : Changed kernel parameter format
- v0.3V: Added Sega Saturn support
- Fixed parport and PS/2 mode handling
- Cleaned up
- v0.4V: Switched to EXCL mode
- Removed wakeup
- v0.5V: Added 0.8.0.2 HW compatibility for Multi sticks
- v0.6V: Better timing for Genesis 6
- v0.7V: Added 0.8.0.2 second joystick support
-
-3.3 joy-turbografx.c
-~~~~~~~~~~~~~~~~~~~~
- The joy-turbografx.c driver uses a very simple kernel/module command line:
+3.3 turbografx.c
+~~~~~~~~~~~~~~~~
+ The turbografx.c driver uses a very simple kernel/module command line:
- js_tg=port,js1,js2,js3,js4,js5,js6,js7
+ tgfx=port,js1,js2,js3,js4,js5,js6,js7
- Where 'port' is either the address of the parallel port the interface is
-connected to (eg. 0x378), or, if you are using the parport driver of 2.1+
-Linux kernels, the number of the parport interface (eg. 0 for parport0).
+ Where 'port' is the number of the parport interface (eg. 0 for parport0).
'jsX' is the number of buttons the Multisystem joysticks connected to the
interface ports 1-7 have. For a standard multisystem joystick, this is 1.
Should you want to use more than one of these interfaces at once, you can
-use js_tg_2 and js_tg_3 as additional command line parameters for two more
+use tgfx_2 and tgfx_3 as additional command line parameters for two more
interfaces.
3.4 PC parallel port pinout
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/joystick.txt linux/Documentation/joystick.txt
--- v2.4.0-test1/linux/Documentation/joystick.txt Wed Dec 8 14:11:24 1999
+++ linux/Documentation/joystick.txt Wed Jun 21 08:22:21 2000
@@ -1,5 +1,5 @@
- Linux Joystick driver v1.2.15
- (c) 1996-1999 Vojtech Pavlik
+ Linux Joystick driver v2.0.0
+ (c) 1996-2000 Vojtech Pavlik
Sponsored by SuSE
----------------------------------------------------------------------------
@@ -29,45 +29,17 @@
1. Intro
~~~~~~~~
The joystick driver for Linux provides support for a variety of joysticks
-and similar devices.
-
- These currently include various analog joysticks and gamepads (both
-variable resistor based and microswitch+resistor based), following IBM PC
-joystick standard, with extensions like additional hats and buttons
-compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button
-gamepads.
-
- In addition to these it also supports some of the new PC joysticks that
-use proprietary digital protocols to communicate over the gameport,
-currently by FPGaming, Gravis, Logitech, MadCatz, Microsoft, Creative and
-ThrustMaster. Saitek protocol support is still to be done.
-
- The driver also includes support for many gamepads and joysticks that were
-used by various non-PC computers and game consoles. These include Multi
-system joysticks (Atari, Amiga, Commodore, Amstrad), Sega gamepads (Master
-System, Genesis, Saturn), Nintendo gamepads (NES, SNES, N64), Sony gamepads
-(PSX). Support for Atari Jaguar, Atari 2600, NES FourScore, SNES MultiTap
-and others might be added later.
-
- Last, but not least there is also native Amiga joystick support for the
-Amiga Linux port.
+and similar devices. It is based on a larger project aiming to support all
+input devices in Linux.
Should you encounter any problems while using the driver, or joysticks
this driver can't make complete use of, I'm very interested in hearing about
them. Bug reports and success stories are also welcome.
- The joystick package is available at the following FTP sites:
+ The input project website is at:
- ftp://ftp.suse.cz/pub/development/joystick/
- ftp://atrey.karlin.mff.cuni.cz/pub/linux/joystick/
- ftp://ftp.gts.cz/pub/linux/joystick/
-
- And a homepage of the driver is at:
-
- http://www.suse.cz/development/joystick/
- http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/
- http://www.trylinux.com/projects/joystick/
- http://www.linuxgames.com/joystick/
+ http://www.suse.cz/development/input/
+ http://atrey.karlin.mff.cuni.cz/~vojtech/input/
There is also a mailing list for the driver at:
@@ -77,114 +49,70 @@
2. Usage
~~~~~~~~
- You could have obtained this driver in two different ways - either in the
-joystick package or in the kernel. Because, for successful usage of the
-joysticks, the utilities in the package are useful, maybe necessary, and
-definitely recommended, I suggest you getting the package at some of the
-above mentioned locations. The rest of this file assumes you have it.
-
-2.1 Compiling the driver package
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- To compile the utilities in the joystick package, and the driver itself,
-as a standalone module, you first unpack the package, and then edit the
-Makefile to meet your needs (namely whether are you using versioned
-modules). You will also need an unpacked and configured
-
- make config
-
-kernel in
-
- /usr/src/linux
-
-Furthermore, if you're using versioned modules, you'll also need
-
- make dep
-
-done on the kernel, to create some needed files.
-
-After that, you compile the joystick driver
-
- make
-
- And after that you install it
-
- make install
-
- In case you have not used the driver before, you'll need to create the
-joystick device files in /dev so that applications can use them:
+ For basic usage you just choose the right options in kernel config and
+you should be set.
- make devs
+2.1 inpututils
+~~~~~~~~~~~~~~
+For testing and other purposes (for example serial devices), a set of
+utilities is available at the abovementioned website. I suggest you download
+and install it before going on.
- For manual creation of the joystick devices, check the
-Documentation/devices.txt file in the Linux source tree.
-
- Should you not want to mess with the kernel, and just use the driver
-standalone, as modules, skip the next two sections, proceeding right to 2.4,
-because all you need is already done.
-
-2.2 Patching the kernel
-~~~~~~~~~~~~~~~~~~~~~~~
- If you already have the most recent joystick driver in your kernel, skip
-this section. If not, you need to patch the kernel, so that it contains the
-current driver version. You do that with a command:
-
- patch -Esp1 < /usr/src/joystick-1.2.x/kernel-2.x.y.diff
-
-in
-
- /usr/src/linux
-
-2.3 Compiling the kernel
-~~~~~~~~~~~~~~~~~~~~~~~~
- To compile joystick support into the kernel, use the kernel configuration
-scripts, and answer 'Y' to Joystick support and also to at least one of the
-hardware specific options. After doing something like
-
- make bzlilo
-
- you are done with the driver installation. Just reboot and the driver
-should find all the connected joysticks. Read the notes about the hardware
-specific drivers later in this file, though.
-
- You can also compile the driver as modules, answering 'M' to all joystick
-support you want to have modules for. It is possible to have the main
-joystick driver compiled into the kernel and the hardware dependent drivers
-as modules. After you compile the modules
-
- make modules
-
- And install them
+2.2 Device nodes
+~~~~~~~~~~~~~~~~
+For applications to be able to use the joysticks, in you don't use devfs,
+you'll have to manually create these nodes in /dev:
- make modules_install
+cd /dev
+rm js*
+mkdir input
+mknod input/js0 c 13 0
+mknod input/js1 c 13 1
+mknod input/js2 c 13 2
+mknod input/js3 c 13 3
+ln -s input/js0 js0
+ln -s input/js1 js1
+ln -s input/js2 js2
+ln -s input/js3 js3
+
+For testing with inpututils it's also convenient to create these:
+
+mknod input/event0 c 13 64
+mknod input/event1 c 13 65
+mknod input/event2 c 13 66
+mknod input/event3 c 13 67
- you're set, and can proceed to the next step.
+2.4 Modules needed
+~~~~~~~~~~~~~~~~~~
+ For all joystick drivers to function, you'll need the userland interface
+module in kernel, either loaded or compiled in:
-2.4 Inserting the modules into the kernel
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- After installing the modules you'll first need to insert the generic
-joystick driver module into the kernel
+ modprobe joydev
- insmod joystick
+ For gameport joysticks, you'll have to load the gameport driver as well;
- and then one or more of the hardware specific modules
+ modprove ns558
- insmod joy-something
+ And for serial port joysticks, you'll need the serial input line
+discipline module loaded and the inputattach utility started:
- where 'something' is the type of your joystick. See below for more precise
-explanation.
+ modprobe serport
+ inputattach -xxx /dev/tts/X &
- Alternately you can add the lines
+ In addition to that, you'll need the joystick driver module itself, most
+usually you'll have an analog joystick:
- alias char-major-15 joy-something
- options joy-something js_xx=x,x,x,x,...
+ modprobe analog
+
+ For automatic module loading, something like this might work:
- to the /etc/conf.modules file, so that the joystick module will be loaded
-automatically when the /dev/js devices are accessed.
+ alias tty-ldisc-2 serport
+ alias char-major-13 joydev ns558 analog
2.5 Verifying that it works
~~~~~~~~~~~~~~~~~~~~~~~~~~~
For testing the joystick driver functionality, there is the jstest
-program. You run it by typing:
+program in the utilities package. You run it by typing:
jstest /dev/js0
@@ -231,109 +159,95 @@
3.1 Analog joysticks
~~~~~~~~~~~~~~~~~~~~
- The joy-analog.c uses the standard analog inputs of the gameport, and thus
-supports all standard joysticks and gamepads. It also supports extensions
-like additional hats and buttons compatible with CH Flightstick Pro,
-ThrustMaster FCS or 6 and 8 button gamepads.
+ The analog.c uses the standard analog inputs of the gameport, and thus
+supports all standard joysticks and gamepads. It uses a very advanced
+routine for this, allowing for data precision that can't be found on any
+other system.
+
+ It also supports extensions like additional hats and buttons compatible
+with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. Saitek
+Cyborg 'digital' joysticks are also supportted by this driver, because
+they're basically souped up CHF sticks.
However the only types that can be autodetected are:
* 2-axis, 4-button joystick
* 3-axis, 4-button joystick
* 4-axis, 4-button joystick
+* Saitek Cyborg 'digital' joysticks
For other joystick types (more/less axes, hats, and buttons) support
you'll need to specify the types either on the kernel command line or on the
-module command line, when inserting joy-analog.o into the kernel. The
+module command line, when inserting analog.o into the kernel. The
parameters are:
- js_an=p0,m0,n0,p1,m1,n1 ...
-
- Where 'p' is the port number, eg. 0x201, which is the standard address.
-'m' and 'n' are joystick 0 and joystick 1 bitmasks for the specified
-joystick port. The bits in the bitmasks mean:
-
- Bit | 2^n | Meaning
- ----------------------------------
- 0 | 1 | Axis X1
- 1 | 2 | Axis Y1
- 2 | 4 | Axis X2
- 3 | 8 | Axis Y2
- 4 | 16 | Button A
- 5 | 32 | Button B
- 6 | 64 | Button C
- 7 | 128 | Button D
- 8 | 256 | CHF Buttons X and Y
- 9 | 512 | CHF Hat 1
- 10 | 1024 | CHF Hat 2
- 11 | 2048 | FCS Hat
- 12 | 4096 | Pad Button X
- 13 | 8192 | Pad Button Y
- 14 | 16384 | Pad Button U
- 15 | 32768 | Pad Button V
-
-(CHF = CH Flightstick Pro, FCS = ThrustMaster FCS)
-
- Following is a table of joysticks for which the 'm' values are known. If
-you have any additions/corrections to it, e-mail me.
-
- Joystick | 'm' value
- ----------------------------------------------------
- Simple 2-button 2-axis joystick | 0x0033
- Second simple joystick on Y-cable | 0x00cc
- Genius Flight2000 F-12 | 0x00f3
- Genius Flight2000 F-21 | 0x08f7
- Genius Flight2000 F-22 | 0x02ff
- Genius GameHunter G-06 | 0xf0f3
- Genius MaxFire G-07 | 0xf0f3
- Genius PowerStation | 0xf0f3
- Laing #1 PC SuperPad | 0xf0f3
- Logitech Wingman | 0x003b
- Microsoft SideWinder Standard | 0x003b
- QuickShot QS-201 SuperWarrior | 0x00fb
- Saitek Megapad XII | 0x30f3
- PC Powerpad Pro | 0x30f3
-
- In case you have one of the joystick in the table below, and it doesn't
-work with a specific driver in digital mode for some reason, you can use
-them in analog mode with the joy-analog driver as well. However, digital
-operation is always better.
-
- Joystick | 'm' value
- ----------------------------------------------------
- Gravis GamePad Pro - analog mode | 0x00f3
- Genius Flight2000 F-23 | 0x02ff
- Microsoft SideWinder 3D Pro - CHF mode | 0x02ff
- Microsoft SideWinder 3D Pro - FCS mode | 0x08f7
-
- An example that would configure the driver to use two two axis, two button
-joysticks connected to port 0x201, a single four button four axis joystick
-connected to port 0x202, a four axis, six button and two hat CHF compatible
-joystick on 0x203, and a two axis four button FCS compatible joystick with a
-single hat on 0x207:
-
- js_an=0x201,0x33,0xcc,0x202,0xff,0,0x203,0x7ff,0,0x207,0x8f3,0
-
- If you can't sum bits into hex numbers in your head easily, you can simply
-sum the values in the 2^n column decimally and use that number instead.
-Using this method you'd get a command line:
+ js=type,type,type,....
- js_an=0x201,51,204,0x202,255,0,0x203,2047,0,0x207,2291,0
-
- And it would do the same as the above explained command line. Use
-whichever way you like best.
+ 'type' is type of the joystick from the table below, defining joysticks
+present on gameports in the system, starting with gameport0, second 'type'
+entry defining joystick on gameport1 and so on.
+
+ Type | Meaning
+ -----------------------------------
+ none | No analog joystick on that port
+ auto | Autodetect joystick
+ 2btn | 2-button n-axis joystick
+ y-joy | Two 2-button 2-axis joysticks on an Y-cable
+ y-pad | Two 2-button 2-axis gamepads on an Y-cable
+ fcs | Thrustmaster FCS compatible joystick
+ chf | Joystick with a CH Flightstick compatible hat
+ fullchf | CH Flightstick compatible with two hats and 6 buttons
+ gamepad | 4/6-button n-axis gamepad
+ gamepad8 | 8-button 2-axis gamepad
+
+ In case your joystick doesn't fit in any of the above categories, you can
+specify the type as a number by combining the bits in the table below. This
+is not recommended unless you really know what are you doing. It's not
+dangerous, but not simple either.
+
+ Bit | Meaning
+ --------------------------
+ 0 | Axis X1
+ 1 | Axis Y1
+ 2 | Axis X2
+ 3 | Axis Y2
+ 4 | Button A
+ 5 | Button B
+ 6 | Button C
+ 7 | Button D
+ 8 | CHF Buttons X and Y
+ 9 | CHF Hat 1
+ 10 | CHF Hat 2
+ 11 | FCS Hat
+ 12 | Pad Button X
+ 13 | Pad Button Y
+ 14 | Pad Button U
+ 15 | Pad Button V
+ 16 | Saitek F1-F4 Buttons
+ 17 | Saitek Digital Mode
+ 19 | GamePad
+ 20 | Joy2 Axis X1
+ 21 | Joy2 Axis Y1
+ 22 | Joy2 Axis X2
+ 23 | Joy2 Axis Y2
+ 24 | Joy2 Button A
+ 25 | Joy2 Button B
+ 26 | Joy2 Button C
+ 27 | Joy2 Button D
+ 31 | Joy2 GamePad
3.2 Microsoft SideWinder joysticks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Microsoft 'Digital Overdrive' protocol is supported by the
-joy-sidewinder.c module. All currently supported joysticks:
+ Microsoft 'Digital Overdrive' protocol is supported by the sidewinder.c
+module. All currently supported joysticks:
-* SideWinder 3D Pro
-* SideWinder Force Feedback Pro
-* SideWinder Force Feedback Wheel
-* SideWinder FreeStyle Pro
-* SideWinder GamePad (up to four, chained together)
-* SideWinder Precision Pro
+* Microsoft SideWinder 3D Pro
+* Microsoft SideWinder Force Feedback Pro
+* Microsoft SideWinder Force Feedback Wheel
+* Microsoft SideWinder FreeStyle Pro
+* Microsoft SideWinder GamePad (up to four, chained)
+* Microsoft SideWinder Precision Pro
+* Microsoft SideWinder Precision Pro USB
are autodetected, and thus no module parameters are needed.
@@ -349,9 +263,9 @@
3.3 Logitech ADI devices
~~~~~~~~~~~~~~~~~~~~~~~~
- Logitech ADI protocol is supported by the joy-logitech.c module. It should
-support any Logitech device using this protocol. This includes, but is not
-limited to:
+ Logitech ADI protocol is supported by the adi.c module. It should support
+any Logitech device using this protocol. This includes, but is not limited
+to:
* Logitech CyberMan 2
* Logitech ThunderPad Digital
@@ -370,48 +284,48 @@
Logitech WingMan Joystick, Logitech WingMan Attack, Logitech WingMan
Extreme and Logitech WingMan ThunderPad are not digital joysticks and are
handled by the analog driver described above. Logitech WingMan Warrior and
-Logitech Magellan are supported by serial drivers described below. Logitech
-CyberMan, Logitech WingMan Force and Logitech WingMan Formula Force are not
-supported yet.
+Logitech Magellan are supported by serial drivers described below. Logitech
+WingMan Force and Logitech WingMan Formula Force are supported by the
+I-Force driver described below. Logitech CyberMan is not supported yet.
3.4 Gravis GrIP
~~~~~~~~~~~~~~~
- Gravis GrIP protocol is supported by the joy-gravis.c module. It
-currently supports:
+ Gravis GrIP protocol is supported by the grip.c module. It currently
+supports:
* Gravis GamePad Pro
-* Gravis Xterminator
* Gravis BlackHawk Digital
+* Gravis Xterminator
+* Gravis Xterminator DualControl
All these devices are autodetected, and you can even use any combination
of up to two of these pads either chained together or using an Y-cable on a
single gameport.
-GrIP MultiPort and Gravis Xterminator DualControl aren't supported yet.
-Gravis Stinger is a serial device and hopefully will be supported in the
-future. Other Gravis joysticks are supported by the joy-analog driver.
+GrIP MultiPort isn't supported yet. Gravis Stinger is a serial device and
+hopefully will be supported soon. Other Gravis joysticks are supported by
+the analog driver.
3.5 FPGaming A3D and MadCatz A3D
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Assassin 3D protocol created by FPGaming, is used both by FPGaming
themselves and is licensed to MadCatz. A3D devices are supported by the
-joy-assassin.c module. It currently supports:
+a3d.c module. It currently supports:
* FPGaming Assassin 3D
* MadCatz Panther
* MadCatz Panther XL
All these devices are autodetected. Because the Assassin 3D and the Panther
-allow connecting analog joysticks to them, these are supported in this
-driver, too. The driver uses the js_as parameter for the analog joysticks,
-which has the same syntax as js_an for the analog driver.
+allow connecting analog joysticks to them, you'll need to load the analog
+driver as well to handle the attached joysticks.
- The trackball support is far from perfect at this stage of development,
-but should be well usable.
+ The trackball should work with USB mousedev module as a normal mouse. See
+the USB documentation for how to setup an USB mouse.
3.6 ThrustMaster DirectConnect (BSP)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The TM DirectConnect (BSP) protocol is supported by the joy-thrustmaster.c
+ The TM DirectConnect (BSP) protocol is supported by the tmdc.c
module. This includes, but is not limited to:
* ThrustMaster Millenium 3D Inceptor
@@ -426,96 +340,62 @@
If you have one of these, contact me.
BSP devices are autodetected, and thus no parameters to the module
-are needed.
+are needed. Up to two TMDC devices can be connected to one gameport, using
+an Y-cable.
3.7 Creative Labs Blaster
~~~~~~~~~~~~~~~~~~~~~~~~~
- The Blaster protocol is supported by the joy-creative.c module. It
-currently supports only the:
+ The Blaster protocol is supported by the cobra.c module. It supports only
+the:
* Creative Blaster GamePad Cobra
Up to two of these can be used on a single gameport, using an Y-cable.
-3.8 PDPI Lightning 4 gamecards
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- PDPI Lightning 4 gamecards are supported by the joy-lightning.c module.
-This driver is only for analog joysticks connected to the card - if you want
-to use some of the digital devices, you need to use its specific driver. The
-card will work in legacy mode with them, though.
-
- Since all features of analog joysticks can't be detected, this driver
-needs a command line:
-
- js_l4=p0,m0,n0,p1,m1,n1,....
-
- As you can see, it's very similar to the analog drivers command line.
-Actually it is the same except for the meaning of p0. p0 in this case is the
-port the joystick is attached to:
-
- p | Port
- ----------------------------
- 0 | Primary card, port 1
- 1 | Primary card, port 2
- 2 | Primary card, port 3
- 3 | Primary card, port 4
- 4 | Secondary card, port 1
- 5 | Secondary card, port 2
- 6 | Secondary card, port 3
- 7 | Secondary card, port 4
+3.8 Genius Digital joysticks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ The Genius digitally communicating joysticks are supported by the gf2k.c
+module. This includes:
- Two cards maximum are allowed in one system, because of the card's design.
+* Genius Flight2000 F-23 joystick
+* Genius Flight2000 F-31 joystick
+* Genius G-09D gamepad
- See the description of analog joystick driver for explanations of m0 and
-n0 values.
+ Other Genius digital joysticks are not supported yet, but support can be
+added fairly easily.
-3.9 Trident 4DWave / Aureal Vortex
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Soundcards with a Trident 4DWave DX/NX or Aureal Vortex chipset provide an
-"Enhanced Game Port" mode where the soundcard handles polling the joystick.
-This mode is supported by the joy-pci module.
-
- If no module parameters are given, the joy-pci module will set all the
-soundcards it finds to "enhanced" mode, and will try to autodetect the type
-of attached joystick. It can only detect the same types of joysticks that
-the joy-analog module can.
-
- This module accepts parameters in the form:
-
- js_pci=t0,i0,m0,n0,t1,i1,m1,n1,....
-
- The "t" value specifies the type of card, as follows:
-
- t | Card Type
- ----------------------------
- 0 | Trident 4DWave DX
- 1 | Trident 4DWave NX
- 2 | Aureal Vortex1 (Au8820 chipset)
- 3 | Aureal Vortex2 (Au8830 chipset)
-
- If you have more than one card of the same type, the "i" parameter lets
-you choose which card to apply the "m" and "n" values to. It counts from
-"0". (The driver detects cards in the order listed in the above table.)
-
- The "m" and "n" values have the same meaning as for the analog module,
-with the exception that the value m=0, n=0 indicates that joy-pci should
-completely ignore that port. This can be useful to reserve a certain port
-for purely MIDI operation.
-
- For example, let's say you have 3 sound cards - a 4Dwave DX, a 4DWave NX,
-and a Vortex 2. You have a three-axis, four-button, one-hat CHF- compatible
-joystick on the DX. You use the NX to interface to an external MIDI device.
-Finally, you have two two-axis, two-button joysticks on the Vortex. Your
-command line might look like:
+3.9 InterAct Digital joysticks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ The InterAct digitally communicating joysticks are supported by the
+interact.c module. This includes:
+
+* InterAct HammerHead/FX gamepad
+* InterAct ProPad8 gamepad
+
+ Other InterAct digital joysticks are not supported yet, but support can be
+added fairly easily.
- js_pci=0,0,0x207,0,1,1,0,0,3,0,0x33,0xcc
+3.10 PDPI Lightning 4 gamecards
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ PDPI Lightning 4 gamecards are supported by the lightning.c module.
+Once the module is loaded, the analog driver can be used to handle the
+joysticks. Digitally communicating joystick will work only on port 0, while
+using Y-cables, you can connect up to 8 analog joysticks to a single L4
+card, 16 in case you have two in your system.
+
+3.11 Trident 4DWave / Aureal Vortex
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Soundcards with a Trident 4DWave DX/NX or Aureal Vortex/Vortex2 chipsets
+provide an "Enhanced Game Port" mode where the soundcard handles polling the
+joystick. This mode is supported by the pcigame.c module. Once loaded the
+analog driver can use the enhanced features of these gameports..
-3.10 Amiga
+3.12 Amiga
~~~~~~~~~~
- Amiga joysticks, connected to an Amiga, are supported by the joy-amiga.c
+ Amiga joysticks, connected to an Amiga, are supported by the amijoy.c
driver. Since they can't be autodetected, the driver has a command line.
- js_am=a,b
+ amijoy=a,b
a and b define the joysticks connected to the JOY0DAT and JOY1DAT ports of
the Amiga.
@@ -528,32 +408,32 @@
No more joystick types are supported now, but that should change in the
future if I get an Amiga in the reach of my fingers.
-3.11 Game console and 8-bit pads and joysticks
+3.13 Game console and 8-bit pads and joysticks
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
See joystick-parport.txt for more info.
-3.12 SpaceTec/LabTec devices
+3.14 SpaceTec/LabTec devices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SpaceTec serial devices communicate using the SpaceWare protocol. It is
-supported by the joy-spaceorb and joy-spaceball drivers. The devices currently
-supported by joy-spaceorb are:
+supported by the spaceorb.c and spaceball.c drivers. The devices currently
+supported by spaceorb.c are:
* SpaceTec SpaceBall Avenger
* SpaceTec SpaceOrb 360
-Devices currently supported by joy-spaceball are:
+Devices currently supported by spaceball.c are:
* SpaceTec SpaceBall 4000 FLX
- In addition to having the joy-spaceorb/spaceball module in the kernel, you
-also need to attach a serial port to it. to do that, run the jsattach
-program:
+ In addition to having the spaceorb/spaceball and serport modules in the
+kernel, you also need to attach a serial port to it. to do that, run the
+jsattach program:
- jsattach --spaceorb /dev/ttySx &
+ inputattach --spaceorb /dev/tts/x &
or
- jsattach --sball4 /dev/ttySx &
+ jsattach --spaceball /dev/tts/x &
-where /dev/ttySx is the serial port which the device is connected to. After
+where /dev/tts/x is the serial port which the device is connected to. After
doing this, the device will be reported and will start working.
There is one caveat with the SpaceOrb. The button #6, the on the bottom
@@ -564,9 +444,9 @@
SpaceTec SpaceBall 2003 FLX and 3003 FLX are not supported yet.
-3.13 Logitech SWIFT devices
+3.15 Logitech SWIFT devices
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The SWIFT serial protocol is supported by the joy-warrior module. It
+ The SWIFT serial protocol is supported by the warrior.c module. It
currently supports only the:
* Logitech WingMan Warrior
@@ -575,11 +455,11 @@
supported as well. To use the module, you need to run jsattach after you
insert/compile the module into your kernel:
- jsattach --warrior /dev/ttySx &
+ inputattach --warrior /dev/tts/x &
-ttySx is the serial port your Warrior is attached to.
+/dev/tts/x is the serial port your Warrior is attached to.
-3.14 Magellan / Space Mouse
+3.16 Magellan / Space Mouse
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Magellan (or Space Mouse), manufactured by LogiCad3d (formerly Space
Systems), for many other companies (Logitech, HP, ...) is supported by the
@@ -592,10 +472,29 @@
To use it, you need to attach the serial port to the driver using the
- jsattach --magellan /dev/ttySx &
+ inputattach --magellan /dev/tts/x &
command. After that the Magellan will be detected, initialized, will beep,
-and the /dev/jsX device should become useable.
+and the /dev/input/jsX device should become useable.
+
+3.17 I-Force devices
+~~~~~~~~~~~~~~~~~~~~
+ All I-Force devices ale supported by the iforce.c module. This includes,
+but is not limited to:
+
+* Logitech WingMan Force
+* Logitech WingMan Force Wheel
+* Guillemot Race Leader wheel
+
+ To use it, you need to attach the serial port to the driver using the
+
+ inputattach --iforce /dev/tts/x &
+
+command. After that the I-Force device will be detected, and the
+/dev/input/jsX device should become useable.
+
+ In case you're using the device via the USB port, the inputattach command
+isn't needed.
4. Troubleshooting
~~~~~~~~~~~~~~~~~~
@@ -604,80 +503,20 @@
some of its modes. The most useful modes are "normal" - for the 1.x
interface, and "old" for the "0.x" interface. You run it by typing:
- jstest --normal /dev/js0
- jstest --old /dev/js0
-
- If your trouble stems from the fact the drivers can't detect the joystick
-attached to your gameport, and you decide you need my help (which I will
-gladly provide), please use the joydump utility first. It's created just by
-typing
-
- make joydump.o
+ jstest --normal /dev/input/js0
+ jstest --old /dev/input/js0
- in the directory where you unpacked the joystick package. It is run then
-by typing
+ Additionally you can do a test with the evtest utility:
- insmod joydump.o
-
- in the same directory. It will return a 'device busy' or 'initialization
-failed' error. This is perfectly okay. It has already done it's job. The
-results can be found in the system log or in the output of the
-
- dmesg
-
-command. Please send me the results along with your problem report.
+ evtest /dev/input/event0
Oh, and read the FAQ! :)
5. FAQ
~~~~~~
-Q: The driver doesn't find any joysticks connected to my soundcard with the
- message "joy-something: no joysticks found" and "joy-something.o:
- init_module: Device or resource busy." or "Initialization of joy-something
- failed" What could be the cause?
-A: The most common cause is that the joystick port on your soundcard is
- not enabled. If it is an ISA PnP card, you'll need isapnptools to configure
- the gameport. Non-PnP cards usually use some option to the sound driver -
- see the sound driver docs and source and enable the port. Note that in case
- of a PnP card you have to load the joystick driver as a module after running
- the isapnp command, it will not work in the opposite order.
-
-Q: Any access to the joystick devices gives me "Operation not supported by
- device". What am I doing wrong?
-A: You're running a 2.0 kernel and you forgot to insmod the hardware
- specific module. You not only need the joystick.o, but also one of the other
- joy-*.o files (most usually joy-analog.o), as described in this document,
- section 2. If you are not using modules, then you didn't say 'Y' to any of
- the hardware-specific questions. Again, see section 2. If you did select
- the specific support, and you still get this message, check that you
- selected the right one, and if it still doesn't work, go to the previous
- FAQ.
-
-Q: Everything is fine, except I get "No such device" error when I try to
- do anything with /dev/js0. What's the cause?
-A: You're running a 2.1 or 2.2. kernel and you want to read the previous FAQ.
-
-Q: Upon 'insmod joystick.o' I get a LOT of unresolved symbols, including
- 'printk' and others. Why?
-A: You either don't have your kernel compiled with module support. If
- that's the cause, re-compile your kernel with module support switched on.
- Or, you use versioned symbols, and don't have -DMODVERSIONS in the joystick
- driver Makefile, or vice versa. Correct the situation by either removing or
- adding -DMODVERSIONS to the Makefile.
-
-Q: Upon 'insmod joy-something' I get a bunch of unresolved symbols, like
- 'js_register_port, js_unregister device' and others. What's wrong?
-A: You need to 'insmod joystick.o' first.
-
-Q: Running 'jstest 1' or 'jscal 1' doesn't work, and returns with "File
- not found" error. What is the problem?
-A: The command line interface for these tools is different from what
- version 0.8.0 used. You have to specify the whole device name, eg. 'jstest
- /dev/js0'.
-
Q: Running 'jstest /dev/js0' results in "File not found" error. What's the
cause?
-A: The device files don't exist. Run 'make devs'.
+A: The device files don't exist. Create them (see section 2.2).
Q: Is it possible to connect my old Atari/Commodore/Amiga/console joystick
or pad that uses a 9-pin D-type cannon connector to the serial port of my
@@ -741,47 +580,3 @@
If you think you should be in this list and are not, it's possible that
I forgot to include you - contact me and I'll correct the error. :)
-
- Thanks to KYE Systems Europe, who provided me with driver sources for the
-Genius Flight2000 Digital F-23, which happens to be identical (in software)
-to Microsoft SideWinder 3D Pro.
-
- Thanks to ThrustMaster Inc. who provided me with docs for their digital
-protocol specifications, and to Trystan A Larey-Williams ,
-who wrote an attempt of a driver for them.
-
- Thanks to Creative Labs Europe, and Ifor Powell ,
-who provided me with docs for their first generation Blaster GamePad.
-
- Special thanks go to FP-Gaming, Inc. and James C Barnes ,
-who provided me with help and detailed information about the Assassin 3D
-protocol and devices, and even sent me a Panther and Panther XL for testing,
-along with cool T-shirts.
-
- Special thanks to PDPI, Mike Pelkey and Brand Kvavle
-, for providing me with documentation and example
-code for their L4 gamecard, and sending me the card to test my driver with
-it.
-
- Thanks to LogiCad3D for their support, for having the specifications
-online and for the nice music on their telephone.
-
- Special thanks to Logitech, Jerry de Raad ,
-Thomas Burgel , Avinash Shinde
- for providing me with a lot of documentation
-for their devices, and also for a big box, containing a CyberMan2, Wingman
-Extreme, Magellan, Wingman Warrior, two MouseMan mice, and a NewTouch
-keyboard.
-
- Thanks to everyone else who helped me develop this package of drivers!
-
- No thanks to Microsoft and Gravis, who don't release a word about their
-hardware .... :(
-
-8. ChangeLog
-~~~~~~~~~~~~
- See the ChangeLog file for the log of changes.
-
-9. To do
-~~~~~~~~
- See the TODO file for the list of things planned.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/kernel-doc-nano-HOWTO.txt linux/Documentation/kernel-doc-nano-HOWTO.txt
--- v2.4.0-test1/linux/Documentation/kernel-doc-nano-HOWTO.txt Tue May 23 15:31:32 2000
+++ linux/Documentation/kernel-doc-nano-HOWTO.txt Mon Jun 19 12:56:07 2000
@@ -57,7 +57,7 @@
If you want to see man pages instead, you can do this:
$ cd linux
-$ scripts/kernel-doc -man $(find -name '*.c') | split-man.pl /tmp/man
+$ scripts/kernel-doc -man $(find -name '*.c' '*.h') | split-man.pl /tmp/man
Here is split-man.pl:
@@ -122,6 +122,25 @@
'%CONST' - name of a constant.
Take a look around the source tree for examples.
+
+
+How to make new SGML template files
+-----------------------------------
+
+SGML template files (*.tmpl) are like normal SGML files, except that
+they can contain escape sequences where extracted documentation should
+be inserted.
+
+!E is replaced by the documentation, in , for
+functions that are exported using EXPORT_SYMBOL: the function list is
+collected from files listed in Documentation/DocBook/Makefile.
+
+!I is replaced by the documentation for functions that are
+_not_ exported using EXPORT_SYMBOL.
+
+!F is replaced by the
+documentation, in , for the functions listed.
+
Tim.
*/
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/kernel-parameters.txt linux/Documentation/kernel-parameters.txt
--- v2.4.0-test1/linux/Documentation/kernel-parameters.txt Fri Jan 21 18:19:15 2000
+++ linux/Documentation/kernel-parameters.txt Mon Jun 19 12:56:07 2000
@@ -1,8 +1,8 @@
-June 1999 Kernel Parameters v2.2.9
+June 2000 Kernel Parameters v2.4.0
~~~~~~~~~~~~~~~~~
-The following is a consolidated list of the kernel parameters as defined
-in the file init/main.c and sorted into English Dictionary order (defined
+The following is a consolidated list of the kernel parameters as implemented
+by the __setup() macro and sorted into English Dictionary order (defined
as ignoring all punctuation and sorting digits before letters in a case
insensitive manner), and with descriptions where known.
@@ -10,10 +10,13 @@
restrictions on the kernel for the said kernel parameter to be valid. The
restrictions referred to are that the relevant option is valid if:
+ ACPI ACPI support is enabled.
APIC APIC support is enabled.
APM Advanced Power Management support is enabled.
AX25 Appropriate AX.25 support is enabled.
CD Appropriate CD support is enabled.
+ DEVFS devfs support is enabled.
+ DRM Direct Rendering Management support is enabled.
EIDE EIDE/ATAPI support is enabled.
FB The frame buffer device is enabled.
HW Appropriate hardware is enabled.
@@ -21,6 +24,7 @@
JOY Appropriate joystick support is enabled.
LP Printer support is enabled.
LOOP Loopback device support is enabled.
+ M68k M68k architecture is enabled.
MCA MCA bus support is enabled.
MDA MDA console support is enabled.
MOUSE Appropriate mouse support is enabled.
@@ -54,10 +58,20 @@
53c7xx= [HW,SCSI] Amiga SCSI controllers.
+ acpi= [HW,ACPI] Advanced Configuration and Power Interface
+
+ ad1816= [HW,SOUND]
+
+ ad1848= [HW,SOUND]
+
adb_buttons= [HW,MOUSE]
+ adlib= [HW,SOUND]
+
advansys= [HW,SCSI]
+ aedsp16= [HW,SOUND]
+
aha152x= [HW,SCSI]
aha1542= [HW,SCSI]
@@ -68,16 +82,22 @@
apm= [APM] Advanced Power Management.
+ applicom= [HW]
+
arcrimi= [HW,NET]
- ataflop= [HW, M68k]
+ ataflop= [HW,M68k]
- atamouse= [HW,MOUSE] Atari Mouse.
+ atarimouse= [HW,MOUSE] Atari Mouse.
atascsi= [HW,SCSI] Atari SCSI.
+ awe= [HW,SOUND]
+
aztcd= [HW,CD] Aztec CD driver.
+ baycom_epp= [HW,AX25]
+
baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem.
baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Full
@@ -92,6 +112,8 @@
cdu31a= [HW,CD]
+ chandev= [HW,NET]
+
cm206= [HW,CD]
com20020= [HW,NET]
@@ -100,15 +122,29 @@
com90xx= [HW,NET]
+ condev= [HW]
+
console= [KNL] output console + comm spec (speed, control,
parity).
+ cpia_pp= [HW,PPT]
+
+ cs4232= [HW,SOUND]
+
+ cs89x0_dma= [HW,NET]
+
+ ctc= [HW,NET]
+
cyclades= [HW,SERIAL] Cyclades multi-serial port adapter.
+
+ dasd= [HW,NET]
debug [KNL] Enable kernel debugging (events log level).
decnet= [HW,NET]
+ devfs= [DEVFS]
+
digi= [HW,SERIAL] io parameters + enable/disable command.
digiepca= [HW,SERIAL]
@@ -126,6 +162,12 @@
edb= [HW,PS2]
+ eicon= [HW,ISDN]
+
+ es1370= [HW,SOUND]
+
+ es1371= [HW,SOUND]
+
ether= [HW,NET] Ethernet cards parameters (iomem, irq,
dev_name).
@@ -141,6 +183,8 @@
gscd= [HW,CD]
+ gus= [HW,SOUND]
+
gvp11= [HW,SCSI]
hd= [EIDE] (E)IDE hard drive subsystem geometry
@@ -148,8 +192,6 @@
hfmodem= [HW,AX25]
- HiSax= [HW,ISDN]
-
hisax= [HW,ISDN]
in2000= [HW,SCSI]
@@ -166,15 +208,11 @@
idebus= [HW] (E)IDE subsystem : VLB/PCI bus speed.
- in2000= [HW,SCSI]
-
- init= [KNL] Default init level.
-
ip= [PNP]
isp16= [HW,CD]
- js_14= [HW,JOY]
+ iucv= [HW,NET]
js_am= [HW,JOY]
@@ -194,6 +232,10 @@
js_db9_3= [HW,JOY]
+ js_l4= [HW,JOY]
+
+ js_pci= [HW,JOY,PCI]
+
js_tg= [HW,JOY]
js_tg_2= [HW,JOY]
@@ -204,6 +246,8 @@
load_ramdisk= [RAM] List of ramdisks to load from floppy.
+ logi_busmouse= [HW, MOUSE]
+
lp=0 [LP] Specify parallel ports to use, e.g,
lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses
lp=reset first parallel port). 'lp=0' disables the
@@ -224,6 +268,12 @@
mac5380= [HW,SCSI]
+ mac53c9x= [HW,SCSI]
+
+ mad16= [HW,SOUND]
+
+ maui= [HW,SOUND]
+
max_loop=[0-255] [LOOP] Set the maximum number of loopback devices
that can be mounted.
@@ -240,11 +290,19 @@
md= [HW] RAID subsystems devices and level.
+ mdisk= [HW]
+
mdacon= [MDA]
+ megaraid= [HW,SCSI]
+
mem= [KNL] force use XX Mb of memory when the kernel is not
able to see the whole system memory or for test.
+ memfrac= [KNL]
+
+ mpu401= [HW,SOUND]
+
msmouse= [HW,MOUSE] Microsoft Mouse.
ncr5380= [HW,SCSI]
@@ -257,35 +315,53 @@
ncr53c8xx= [HW,SCSI]
+ netdev= [NET]
+
nfsaddrs= [NFS]
nfsroot= [NFS] nfs root filesystem for disk-less boxes.
- nmi_watchdog= [KNL, BUGS=ix86] debugging features for SMP kernels.
+ nmi_watchdog= [KNL,BUGS=ix86] debugging features for SMP kernels.
no387 [BUGS=ix86] Tells the kernel to use the 387 maths
emulation library even if a 387 maths coprocessor
is present.
+ noalign [KNL,ARM]
+
noapic [SMP,APIC] Tells the kernel not to make use of any
APIC that may be present on the system.
noasync [HW, M68K] Disables async and sync negotiation for
all devices.
+ nocache [ARM]
+
nodisconnect [HW,SCSI, M68K] Disables SCSI disconnects.
- no-halt [BUGS=ix86]
+ nohlt [BUGS=ARM]
+
+ no-hlt [BUGS=ix86]
noinitrd [RAM] Tells the kernel not to load any configured
initial RAM disk.
+ nointroute [IA-64]
+
no-scroll [VGA]
nosmp [SMP] Tells an SMP kernel to act as a UP kernel.
nosync [HW, M68K] Disables sync negotiation for all devices.
+ nowb [ARM]
+
+ opl3= [HW,SOUND]
+
+ opl3sa= [HW,SOUND]
+
+ opl3sa2= [HW,SOUND]
+
optcd= [HW,CD]
panic= [KNL] kernel behaviour on panic.
@@ -305,6 +381,8 @@
order they are specified on the command
line, starting with parport0.
+ pas2= [HW,SOUND]
+
pas16= [HW,SCSI]
pcbit= [HW,ISDN]
@@ -329,10 +407,17 @@
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
before loading.
+ pss= [HW,SOUND]
+
pt. [PARIDE]
+ quiet= [KNL] Disable log messages.
+
ramdisk= [RAM] Sizes of RAM disks in kilobytes [deprecated].
+ ramdisk_blocksize=
+ [RAM]
+
ramdisk_size= [RAM] New name for the ramdisk parameter.
ramdisk_start= [RAM] Starting block of RAM disk image (so you can
@@ -352,12 +437,27 @@
S [KNL] run init in single mode.
+ sb= [HW,SOUND]
+
sbpcd= [HW,CD] Soundblaster CD adapter.
scsi_logging= [SCSI]
+ scsihosts= [SCSI]
+
+ sg_def_reserved_size=
+ [SCSI]
+
+ sgalaxy= [HW,SOUND]
+
+ sim710= [SCSI,HW]
+
sjcd= [HW,CD]
+ smart2= [HW]
+
+ sonicvibes= [HW,SOUND]
+
sonycd535= [HW,CD]
sound= [SOUND]
@@ -366,7 +466,9 @@
specialix= [HW,SERIAL] Specialix multi-serial port adapter.
- st= [HW] SCSI tape parameters (buffers, etc.).
+ sscape= [HW,SOUND]
+
+ st= [HW,SCSI] SCSI tape parameters (buffers, etc.).
st0x= [HW,SCSI]
@@ -380,19 +482,35 @@
t128= [HW,SCSI]
+ tdfx= [HW,DRM]
+
tmc8xx= [HW,SCSI]
tmscsim= [HW,SCSI]
tp720= [HW,PS2]
+ trix= [HW,SOUND]
+
u14-34f= [HW,SCSI]
+ uart401= [HW,SOUND]
+
+ uart6850= [HW,SOUND]
+
+ usbfix [BUGS=IA-64]
+
video= [FB] frame buffer configuration.
vga= [KNL] on ix386, enable to choose a peculiar video mode
(use vga=ask for menu).
+ vmhalt= [KNL,S390]
+
+ vmpoff= [KNL,S390]
+
+ waveartist= [HW,SOUND]
+
wd33c93= [HW,SCSI]
wd7000= [HW,SCSI]
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/md.txt linux/Documentation/md.txt
--- v2.4.0-test1/linux/Documentation/md.txt Mon Feb 2 13:07:47 1998
+++ linux/Documentation/md.txt Tue Jun 20 07:24:52 2000
@@ -1,15 +1,17 @@
-Tools that manage md devices can be found at sweet-smoke.ufr-info-p7.ibp.fr
-in public/Linux/md035.tar.gz.
+Tools that manage md devices can be found at
+ http://www..kernel.org/pub/linux/daemons/raid/....
- Marc ZYNGIER
---
You can boot (if you selected boot support in the configuration) with your md
-device with the following kernel command line:
+device with the following kernel command lines:
-md=,,,,dev0,dev1,...,devn
+for old raid arrays without persistant superblocks:
+ md=,,,,dev0,dev1,...,devn
+for raid arrays with persistant superblocks
+ md=,dev0,dev1,...,devn
+
md device no. = the number of the md device ...
0 means md0,
1 md1,
@@ -19,19 +21,16 @@
raid level = -1 linear mode
0 striped mode
- other modes are currently unsupported.
+ other modes are only supported with persistant super blocks
chunk size factor = (raid-0 and raid-1 only)
- Set the chunk size as PAGE_SIZE << n.
+ Set the chunk size as 4k << n.
-fault level = (raid-1 only)
- Set the maximum fault number as n.
- Currently unsupported due to lack of boot support for raid1.
+fault level = totally ignored
dev0-devn: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1
-my loadlin line looks like this:
+A possible loadlin line (Harald Hoyer ) looks like this:
e:\loadlin\loadlin e:\zimage root=/dev/md0 md=0,0,4,0,/dev/hdb2,/dev/hdc3 ro
- Harald Hoyer
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/8139too.txt linux/Documentation/networking/8139too.txt
--- v2.4.0-test1/linux/Documentation/networking/8139too.txt Tue May 23 15:31:32 2000
+++ linux/Documentation/networking/8139too.txt Mon Jun 19 17:59:32 2000
@@ -181,11 +181,25 @@
11) RTL8139C support untested.
+12) 10base-T support flaky or slow
+
Change History
--------------
+Version 0.9.7 - June 11, 2000
+
+* Fix support for older chips (RTL8139 early chips should now work again)
+
+
+Version 0.9.6 - May 30, 2000
+
+* Fix 4-extra-bytes bug
+ (thanks to Markus Westergren, via Santiago Garcia Mantinan)
+* Yet more improved chip recognition
+
+
Version 0.9.5 - May 17, 2000
* Improved chip version recognition
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/shaper.txt linux/Documentation/networking/shaper.txt
--- v2.4.0-test1/linux/Documentation/networking/shaper.txt Tue Apr 28 14:22:04 1998
+++ linux/Documentation/networking/shaper.txt Mon Jun 19 17:59:32 2000
@@ -1,6 +1,6 @@
Traffic Shaper For Linux
-This is the current ALPHA release of the traffic shaper for Linux. It works
+This is the current BETA release of the traffic shaper for Linux. It works
within the following limits:
o Minimum shaping speed is currently about 9600 baud (it can only
@@ -37,13 +37,12 @@
mrouted tunnels via a traffic shaper to control bandwidth usage.
The shaper is device/route based. This makes it very easy to use
-with any setup BUT less flexible. You may well want to combine this patch
-with Mike McLagan 's patch to allow routes to be
-specified by source/destination pairs.
+with any setup BUT less flexible. You may need to use iproute2 to set up
+multiple route tables to get the flexibility.
There is no "borrowing" or "sharing" scheme. This is a simple
-traffic limiter. I'd like to implement Van Jacobson and Sally Floyd's CBQ
-architecture into Linux one day (maybe in 2.1 sometime) and do this with
-style.
+traffic limiter. We implement Van Jacobson and Sally Floyd's CBQ
+architecture into Linux 2.2. THis is the preferred solution. Shaper is
+for simple or back compatible setups.
Alan
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/sk98lin.txt linux/Documentation/networking/sk98lin.txt
--- v2.4.0-test1/linux/Documentation/networking/sk98lin.txt Tue Nov 23 22:42:20 1999
+++ linux/Documentation/networking/sk98lin.txt Mon Jun 19 17:59:32 2000
@@ -3,7 +3,7 @@
sk98lin.txt created 11-Nov-1999
-Readme File for sk98lin.o v3.02
+Readme File for sk98lin.o v3.04
SK-NET Gigabit Ethernet Adapter SK-98xx Driver for Linux
This file contains
@@ -24,8 +24,8 @@
============
The sk98lin driver supports the SysKonnect SK-NET Gigabit Ethernet
-Adapter SK-98xx family on Linux 2.2.x.
-It has been tested with Linux on Intel/x86 and ALPHA machines.
+Adapter SK-98xx family on Linux 2.2.x and above.
+It has been tested with Linux on Intel/x86, ALPHA and UltraSPARC machines.
From v3.02 on, the driver is integrated in the linux kernel source.
***
@@ -132,7 +132,8 @@
module with 'insmod'. The configuration tools of some distributions
can also give parameters to the driver module.
If you use the kernel module loader, you can set driver parameters
-in the file /etc/conf.modules. Insert a line of the form:
+in the file /etc/modules.conf (or old name: /etc/conf.modules).
+Insert a line of the form:
options sk98lin ...
@@ -281,14 +282,12 @@
the large frames. If one adapter is not set to receive large frames,
it will simply drop them.
-NOTE: If you look at the statistics (with netstat) in large frame
- mode while there is traffic on the net, you will see the
- RX error counter go up. This is because the adapter hardware
- counts received large frames as errors, although they are
- received correctly. So ignore this counter in that case.
-
You can switch back to the standard ethernet frame size with:
ifconfig eth0 mtu 1500
+
+To make this setting persitent, add a script with the 'ifconfig'
+line to the system startup sequence (named something like "S99sk98lin"
+in /etc/rc.d/rc2.d).
***
@@ -374,15 +373,27 @@
(8) HISTORY
===========
-VERSION 3.02
+VERSION 3.04 (In-Kernel version)
+Problems fixed:
+- Driver start failed on UltraSPARC
+- Rx checksum calculation for big endian machines did not work
+- Jumbo frames were counted as input-errors in netstat
+
+VERSION 3.03 (Standalone version)
+Problems fixed:
+- Compilation did not find script "printver.sh" if "." not in PATH
+Known limitations:
+- None
+
+VERSION 3.02 (In-Kernel version)
Problems fixed:
- None
New Features:
-- Integration in linux kernel source.
+- Integration in Linux kernel source (2.2.14 and 2.3.29)
Known limitations:
- None
-VERSION 3.02
+VERSION 3.01
Problems fixed:
- None
New Features:
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/tlan.txt linux/Documentation/networking/tlan.txt
--- v2.4.0-test1/linux/Documentation/networking/tlan.txt Mon Mar 27 08:08:20 2000
+++ linux/Documentation/networking/tlan.txt Mon Jun 19 12:56:07 2000
@@ -2,7 +2,10 @@
(C) 1998 James Banks
(C) 1999-2000 Torben Mathiasen
-TLAN driver for Linux, version 1.5
+For driver information/updates visit http://tlan.kernel.dk
+
+
+TLAN driver for Linux, version 1.8a
README
@@ -65,12 +68,15 @@
if a card which only supports 10Mbs is forced into 100Mbs
mode.)
- 5. If the driver is built into the kernel, you can use the 3rd
+ 5. You have to use speed=X duplex=Y together now. If you just
+ do "insmod tlan.o speed=100" the driver will do Auto-Neg.
+ To force a 10Mbps Half-Duplex link do "insmod tlan.o speed=10
+ duplex=1".
+
+ 6. If the driver is built into the kernel, you can use the 3rd
and 4th parameters to set aui and debug respectively. For
example:
-/* kernel-parameters are currently not supported. I will fix this asap. */
-
ether=0,0,0x1,0x7,eth0
This sets aui to 0x1 and debug to 0x7, assuming eth0 is a
@@ -79,11 +85,14 @@
The bits in the third byte are assigned as follows:
0x01 = aui
- 0x04 = use half duplex
- 0x08 = use full duplex
- 0x10 = use 10BaseT
- 0x20 = use 100BaseTx
-
+ 0x02 = use half duplex
+ 0x04 = use full duplex
+ 0x08 = use 10BaseT
+ 0x10 = use 100BaseTx
+
+ You also need to set both speed and duplex settings when forcing
+ speeds with kernel-parameters.
+ ether=0,0,0x12,0,eth0 will force link to 100Mbps Half-Duplex.
III. Things to try if you have problems.
1. Make sure your card's PCI id is among those listed in
@@ -94,5 +103,5 @@
There is also a tlan mailing list which you can join by sending "subscribe tlan"
in the body of an email to majordomo@vuser.vu.union.edu.
-
+There is also a tlan website at http://tlan.kernel.dk
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/tulip.txt linux/Documentation/networking/tulip.txt
--- v2.4.0-test1/linux/Documentation/networking/tulip.txt Wed Apr 26 16:34:06 2000
+++ linux/Documentation/networking/tulip.txt Mon Jun 19 17:59:32 2000
@@ -142,6 +142,24 @@
Version history
===============
+0.9.6 (May 31, 2000):
+* Revert 21143-related support flag patch
+* Add HPPA/media-table debugging printk
+
+0.9.5 (May 30, 2000):
+* HPPA support (willy@puffingroup)
+* CSR6 bits and tulip.h cleanup (Chris Smith)
+* Improve debugging messages a bit
+* Add delay after CSR13 write in t21142_start_nway
+* Remove unused ETHER_STATS code
+* Convert 'extern inline' to 'static inline' in tulip.h (Chris Smith)
+* Update DS21143 support flags in tulip_chip_info[]
+* Use spin_lock_irq, not _irqsave/restore, in tulip_start_xmit()
+* Add locking to set_rx_mode()
+* Fix race with chip setting DescOwned bit (Hal Murray)
+* Request 100% of PIO and MMIO resource space assigned to card
+* Remove error message from pci_enable_device failure
+
0.9.4.3 (April 14, 2000):
* mod_timer fix (Hal Murray)
* PNIC2 resusitation (Chris Smith)
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/networking/vortex.txt linux/Documentation/networking/vortex.txt
--- v2.4.0-test1/linux/Documentation/networking/vortex.txt Thu May 11 15:30:05 2000
+++ linux/Documentation/networking/vortex.txt Mon Jun 19 17:59:32 2000
@@ -156,7 +156,12 @@
"Variables to work-around the Compaq PCI BIOS32 problem"....
+watchdog=N
+ Sets the time duration (in milliseconds) after which the kernel
+ decides that the transmitter has become stuck and needs to be reset.
+ This is mainly for debugging purposes. The default value is 400 (0.4
+ seconds).
Additional resources
--------------------
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/parport.txt linux/Documentation/parport.txt
--- v2.4.0-test1/linux/Documentation/parport.txt Fri Jan 21 18:19:15 2000
+++ linux/Documentation/parport.txt Mon Jun 19 17:59:32 2000
@@ -109,7 +109,10 @@
| | |-- active
| | `-- lp
| | `-- timeslice
-| |-- hardware
+| |-- base-addr
+| |-- irq
+| |-- dma
+| |-- modes
| `-- spintime
`-- parport1
|-- autoprobe
@@ -121,7 +124,10 @@
| |-- active
| `-- ppa
| `-- timeslice
- |-- hardware
+ |-- base-addr
+ |-- irq
+ |-- dma
+ |-- modes
`-- spintime
@@ -133,7 +139,28 @@
string "none" means that there are no device drivers
using that port.
-hardware Parallel port's base address, IRQ line and DMA channel.
+base-addr Parallel port's base address, or addresses if the port
+ has more than one in which case they are separated
+ with tabs. These values might not have any sensible
+ meaning for some ports.
+
+irq Parallel port's IRQ, or -1 if none is being used.
+
+dma Parallel port's DMA channel, or -1 if none is being
+ used.
+
+modes Parallel port's hardware modes, comma-separated,
+ meaning:
+
+ PCSPP PC-style SPP registers are available.
+ TRISTATE Port is bidirectional.
+ COMPAT Hardware acceleration for printers is
+ available and will be used.
+ EPP Hardware acceleration for EPP protocol
+ is available and will be used.
+ ECP Hardware acceleration for ECP protocol
+ is available and will be used.
+ DMA DMA is available and will be used.
autoprobe Any IEEE-1284 device ID information that has been
acquired from the (non-IEEE 1284.3) device.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/powerpc/00-INDEX linux/Documentation/powerpc/00-INDEX
--- v2.4.0-test1/linux/Documentation/powerpc/00-INDEX Sat Oct 10 09:53:24 1998
+++ linux/Documentation/powerpc/00-INDEX Tue Jun 20 07:24:52 2000
@@ -1,7 +1,7 @@
Index of files in Documentation/powerpc. If you think something about
Linux/PPC needs an entry here, needs correction or you've written one
please mail me.
- Cort Dougan (cort@cs.nmt.edu)
+ Cort Dougan (cort@fsmlabs.com)
00-INDEX
- this file
@@ -9,6 +9,8 @@
- info about the Linux/PPC /proc/ppc_htab entry
smp.txt
- use and state info about Linux/PPC on MP machines
+SBC8260_memory_mapping.txt
+ - EST SBC8260 board info
sound.txt
- info on sound support under Linux/PPC
zImage_layout.txt
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/powerpc/SBC8260_memory_mapping.txt linux/Documentation/powerpc/SBC8260_memory_mapping.txt
--- v2.4.0-test1/linux/Documentation/powerpc/SBC8260_memory_mapping.txt Wed Dec 31 16:00:00 1969
+++ linux/Documentation/powerpc/SBC8260_memory_mapping.txt Mon Jun 19 17:59:35 2000
@@ -0,0 +1,197 @@
+Please mail me (Jon Diekema, diekema_jon@si.com or diekema@cideas.com)
+if you have questions, comments or corrections.
+
+ * EST SBC8260 Linux memory mapping rules
+
+ http://www.estc.com/
+ http://www.estc.com/products/boards/SBC8260-8240_ds.html
+
+ Initial conditions:
+ -------------------
+
+ Tasks that need to be perform by the boot ROM before control is
+ transferred to zImage (compressed Linux kernel):
+
+ - Define the IMMR to 0xf0000000
+
+ - Initialize the memory controller so that RAM is available at
+ physical address 0x00000000. On the SBC8260 is this 16M (64M)
+ SDRAM.
+
+ - The boot ROM should only clear the RAM that it is using.
+
+ The reason for doing this is to enhances the chances of a
+ successful post mortem on a Linux panic. One of the first
+ items to examine is the 16k (LOG_BUF_LEN) circular console
+ buffer called log_buf which is defined in kernel/printk.c.
+
+ - To enhance boot ROM performance, the I-cache can be enabled.
+
+ Date: Mon, 22 May 2000 14:21:10 -0700
+ From: Neil Russell
+
+ LiMon (LInux MONitor) runs with and starts Linux with MMU
+ off, I-cache enabled, D-cache disabled. The I-cache doesn't
+ need hints from the MMU to work correctly as the D-cache
+ does. No D-cache means no special code to handle devices in
+ the presence of cache (no snooping, etc). The use of the
+ I-cache means that the monitor can run acceptably fast
+ directly from ROM, rather than having to copy it to RAM.
+
+ - Build the board information structure (see
+ include/asm-ppc/est8260.h for its definition)
+
+ - The compressed Linux kernel (zImage) contains a bootstrap loader
+ that is position independent; you can load it into any RAM,
+ ROM or FLASH memory address >= 0x00500000 (above 5 MB), or
+ at its link address of 0x00400000 (4 MB).
+
+ Note: If zImage is loaded at its link address of 0x00400000 (4 MB),
+ then zImage will skip the step of moving itself to
+ its link address.
+
+ - Load R3 with the address of the board information structure
+
+ - Transfer control to zImage
+
+ - The Linux console port is SMC1, and the baud rate is controlled
+ from the bi_baudrate field of the board information structure.
+ On thing to keep in mind when picking the baud rate, is that
+ there is no flow control on the SMC ports. I would stick
+ with something safe and standard like 19200.
+
+ On the EST SBC8260, the SMC1 port is on the COM1 connector of
+ the board.
+
+
+ EST SBC8260 defaults:
+ ---------------------
+
+ Chip
+ Memory Sel Bus Use
+ --------------------- --- --- ----------------------------------
+ 0x00000000-0x03FFFFFF CS2 60x (16M or 64M)/64M SDRAM
+ 0x04000000-0x04FFFFFF CS4 local 4M/16M SDRAM (soldered to the board)
+ 0x21000000-0x21000000 CS7 60x 1B/64K Flash present detect (from the flash SIMM)
+ 0x21000001-0x21000001 CS7 60x 1B/64K Switches (read) and LEDs (write)
+ 0x22000000-0x2200FFFF CS5 60x 8K/64K EEPROM
+ 0xFC000000-0xFCFFFFFF CS6 60x 2M/16M flash (8 bits wide, soldered to the board)
+ 0xFE000000-0xFFFFFFFF CS0 60x 4M/16M flash (SIMM)
+
+ Notes:
+ ------
+
+ - The chip selects can map 32K blocks and up (powers of 2)
+
+ - The SDRAM machine can handled up to 128Mbytes per chip select
+
+ - Linux uses the 60x bus memory (the SDRAM DIMM) for the
+ communications buffers.
+
+ - BATs can map 128K-256Mbytes each. There are four data BATs and
+ four instruction BATs. Generally the data and instruction BATs
+ are mapped the same.
+
+ - The IMMR must be set above the kernel virtual memory addresses,
+ which start at 0xC0000000. Otherwise, the kernel may crash as
+ soon as you start any threads or processes due to VM collisions
+ in the kernel or user process space.
+
+
+ Details from Dan Malek on 10/29/1999:
+
+ The user application virtual space consumes the first 2 Gbytes
+ (0x00000000 to 0x7FFFFFFF). The kernel virtual text starts at
+ 0xC0000000, with data following. There is a "protection hole"
+ between the end of kernel data and the start of the kernel
+ dynamically allocated space, but this space is still within
+ 0xCxxxxxxx.
+
+ Obviously the kernel can't map any physical addresses 1:1 in
+ these ranges.
+
+
+ Details from Dan Malek on 5/19/2000:
+
+ During the early kernel initialization, the kernel virtual
+ memory allocator is not operational. Prior to this KVM
+ initialization, we choose to map virtual to physical addresses
+ 1:1. That is, the kernel virtual address exactly matches the
+ physical address on the bus. These mappings are typically done
+ in arch/ppc/kernel/head.S, or arch/ppc/mm/init.c. Only
+ absolutely necessary mappings should be done at this time, for
+ example board control registers or a serial uart. Normal device
+ driver initialization should map resources later when necessary.
+
+ Although platform dependent, and certainly the case for embedded
+ 8xx, traditionally memory is mapped at physical address zero,
+ and I/O devices above phsical address 0x80000000. The lowest
+ and highest (above 0xf0000000) I/O addresses are traditionally
+ used for devices or registers we need to map during kernel
+ initialization and prior to KVM operation. For this reason,
+ and since it followed prior PowerPC platform examples, I chose
+ to map the embedded 8xx kernel to the 0xc0000000 virtual address.
+ This way, we can enable the MMU to map the kernel for proper
+ operation, and still map a few windows before the KVM is operational.
+
+ On some systems, you could possibly run the kernel at the
+ 0x80000000 or any other virtual address. It just depends upon
+ mapping that must be done prior to KVM operational. You can never
+ map devices or kernel spaces that overlap with the user virtual
+ space. This is why default IMMR mapping used by most BDM tools
+ won't work. They put the IMMR at something like 0x10000000 or
+ 0x02000000 for example. You simply can't map these addresses early
+ in the kernel, and continue proper system operation.
+
+ The embedded 8xx/82xx kernel is mature enough that all you should
+ need to do is map the IMMR someplace at or above 0xf0000000 and it
+ should boot far enough to get serial console messages and KGDB
+ connected on any platform. There are lots of other subtle memory
+ management design features that you simply don't need to worry
+ about. If you are changing functions related to MMU initialization,
+ you are likely breaking things that are known to work and are
+ heading down a path of disaster and frustration. Your changes
+ should be to make the flexibility of the processor fit Linux,
+ not force arbitrary and non-workable memory mappings into Linux.
+
+ - You don't want to change KERNELLOAD or KERNELBASE, otherwise the
+ virtual memory and MMU code will get confused.
+
+ arch/ppc/Makefile:KERNELLOAD = 0xc0000000
+
+ include/asm-ppc/page.h:#define PAGE_OFFSET 0xc0000000
+ include/asm-ppc/page.h:#define KERNELBASE PAGE_OFFSET
+
+ - RAM is at physical address 0x00000000, and gets mapped to
+ virtual address 0xC0000000 for the kernel.
+
+
+ Physical addresses used by the Linux kernel:
+ --------------------------------------------
+
+ 0x00000000-0x3FFFFFFF 1GB reserved for RAM
+ 0xF0000000-0xF001FFFF 128K IMMR 64K used for dual port memory,
+ 64K for 8260 registers
+
+
+ Logical addresses used by the Linux kernel:
+ -------------------------------------------
+
+ 0xF0000000-0xFFFFFFFF 256M BAT0 (IMMR: dual port RAM, registers)
+ 0xE0000000-0xEFFFFFFF 256M BAT1 (I/O space for custom boards)
+ 0xC0000000-0xCFFFFFFF 256M BAT2 (RAM)
+ 0xD0000000-0xDFFFFFFF 256M BAT3 (if RAM > 256MByte)
+
+
+ EST SBC8260 Linux mapping:
+ --------------------------
+
+ DBAT0, IBAT0, cache inhibited:
+
+ Chip
+ Memory Sel Use
+ --------------------- --- ---------------------------------
+ 0xF0000000-0xF001FFFF n/a IMMR: dual port RAM, registers
+
+ DBAT1, IBAT1, cache inhibited:
+
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/serial-console.txt linux/Documentation/serial-console.txt
--- v2.4.0-test1/linux/Documentation/serial-console.txt Mon Dec 20 18:48:21 1999
+++ linux/Documentation/serial-console.txt Mon Jun 19 12:56:07 2000
@@ -1,5 +1,10 @@
Linux Serial Console
+To use a serial port as console you need to compile the support into your
+kernel - by default it is not compiled in. For PC style serial ports
+it's the config option next to "Standard/generic (dumb) serial support".
+You must compile serial support into the kernel and not as a module.
+
It is possible to specify multiple devices for console output. You can
define a new kernel command line option to select which device(s) to
use for console output.
@@ -62,14 +67,20 @@
append = "console=ttyS1,9600"
-4. Init and /etc/ioctl.save
+4. Make sure a getty runs on the serial port so that you can login to
+ it once the system is done booting. This is done by adding a line
+ like this to /etc/inittab (exact syntax depends on your getty):
+
+ S1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
+
+5. Init and /etc/ioctl.save
Sysvinit remembers its stty settings in a file in /etc, called
`/etc/ioctl.save'. REMOVE THIS FILE before using the serial
console for the first time, because otherwise init will probably
set the baudrate to 38400 (baudrate of the virtual console).
-5. /dev/console and X
+6. /dev/console and X
Programs that want to do something with the virtual console usually
open /dev/console. If you have created the new /dev/console device,
and your console is NOT the virtual console some programs will fail.
@@ -78,18 +89,16 @@
Xfree86, svgalib, gpm, SVGATextMode
- I have binary patched the above mentioned programs to use "tty0"
- instead of "console". This will be reported to the maintainers of
- said programs.
+ It should be fixed in modern versions of these programs though.
Note that if you boot without a console= option (or with
console=/dev/tty0), /dev/console is the same as /dev/tty0. In that
case everything will still work.
-6. Thanks
+7. Thanks
Thanks to Geert Uytterhoeven
for porting the patches from 2.1.4x to 2.1.6x for taking care of
the integration of these patches into m68k, ppc and alpha.
-Miquel van Smoorenburg , 21-Mar-1998
+Miquel van Smoorenburg , 11-Jun-2000
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/sound/Maestro linux/Documentation/sound/Maestro
--- v2.4.0-test1/linux/Documentation/sound/Maestro Thu May 11 15:30:05 2000
+++ linux/Documentation/sound/Maestro Mon Jun 19 12:56:07 2000
@@ -6,7 +6,7 @@
------------------------------
The most recent version of this driver will hopefully always be available at
- http://people.redhat.com/zab/maestro/
+ http://www.zabbo.net/maestro/
I will try and maintain the most recent stable version of the driver
in both the stable and development kernel lines.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/sound/README.ymfsb linux/Documentation/sound/README.ymfsb
--- v2.4.0-test1/linux/Documentation/sound/README.ymfsb Wed Dec 31 16:00:00 1969
+++ linux/Documentation/sound/README.ymfsb Tue Jun 20 07:52:36 2000
@@ -0,0 +1,107 @@
+Legacy audio driver for YMF7xx PCI cards.
+
+
+FIRST OF ALL
+============
+
+ This code references YAMAHA's sample codes and data sheets.
+ I respect and thank for all people they made open the informations
+ about YMF7xx cards.
+
+ And this codes heavily based on Jeff Garzik 's
+ old VIA 82Cxxx driver (via82cxxx.c). I also respect him.
+
+
+DISCLIMER
+=========
+
+ This driver is currently at early ALPHA stage. It may cause serious
+ damage to your computer when used.
+ PLEASE USE IT AT YOUR OWN RISK.
+
+
+ABOUT THIS DRIVER
+=================
+
+ This code enables you to use your YMF724[A-F], YMF740[A-C], YMF744, YMF754
+ cards. When enabled, your card acts as "SoundBlaster Pro" compatible card.
+ It can only play 22.05kHz / 8bit / Stereo samples, control external MIDI
+ port.
+ If you want to use your card as recent "16-bit" card, you should use
+ Alsa or OSS/Linux driver. Ofcource you can write native PCI driver for
+ your cards :)
+
+
+USAGE
+=====
+
+ # modprobe ymfsb (options)
+
+
+OPTIONS FOR MODULE
+==================
+
+ io : SB base address (0x220, 0x240, 0x260, 0x280)
+ synth_io : OPL3 base address (0x388, 0x398, 0x3a0, 0x3a8)
+ dma : DMA number (0,1,3)
+ master_volume: AC'97 PCM out Vol (0-100)
+ spdif_out : SPDIF-out flag (0:disable 1:enable)
+
+ These options will change in future...
+
+
+FREQUENCY
+=========
+
+ When playing sounds via this driver, you will hear its pitch is slightly
+ lower than original sounds. Since this driver recognizes your card acts
+ with 21.739kHz sample rates rather than 22.050kHz (I think it must be
+ hardware restriction). So many players become tone deafness.
+ To prevent this, you should express some options to your sound player
+ that specify correct sample frequency. For example, to play your MP3 file
+ correctly with mpg123, specify the frequency like following:
+
+ % mpg123 -r 21739 foo.mp3
+
+
+SPDIF OUT
+=========
+
+ With installing modules with option 'spdif_out=1', you can enjoy your
+ sounds from SPDIF-out of your card (if it had).
+ Its Fs is fixed to 48kHz (It never means the sample frequency become
+ up to 48kHz. All sounds via SPDIF-out also 22kHz samples). So your
+ digital-in capable components has to be able to handle 48kHz Fs.
+
+
+COPYING
+=======
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+TODO
+====
+ * support for multiple cards
+ (set the different SB_IO,MPU_IO,OPL_IO for each cards)
+
+ * support for OPL (dmfm) : There will be no requirements... :-<
+
+
+AUTHOR
+======
+
+ Daisuke Nagano
+
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/sound/via82cxxx.txt linux/Documentation/sound/via82cxxx.txt
--- v2.4.0-test1/linux/Documentation/sound/via82cxxx.txt Thu May 11 15:30:05 2000
+++ linux/Documentation/sound/via82cxxx.txt Tue Jun 20 07:52:36 2000
@@ -48,6 +48,15 @@
Driver notes
------------------------------------------------------------------------
+Two /proc pseudo-files provide diagnostic information. This is generally
+not useful to most users. Power users can disable VIA_PROC_FS macro in the
+driver source code, and remove the /proc support code. In any case, once
+version 2.0.0 is released, the /proc support code will be disabled by
+default. Available /proc pseudo-files:
+
+ /proc/driver/via/0/info
+ /proc/driver/via/0/ac97
+
This driver by default supports all PCI audio devices which report
a vendor id of 0x1106, and a device id of 0x3058. Subsystem vendor
and device ids are not examined.
@@ -110,7 +119,8 @@
1) Volume too low on many systems. Workaround: use mixer program
such as xmixer to increase volume.
-2) RealPlayer output very scratchy.
+2) RealPlayer output very scratchy. Workaround: use esd, and
+configure RealPlayer to output to esd.
3) Applications which attempt to open the sound device in read/write
mode (O_RDWR) will fail. This is incorrect OSS behavior, but since
@@ -137,5 +147,30 @@
If you wish to increase the size of the buffer displayed by 'dmesg', then
change the LOG_BUF_LEN macro at the top of linux/kernel/printk.c, recompile
your kernel, and pass the "-s " option to 'dmesg'.
+
+
+
+Change history
+------------------------------------------------------------------------
+Version 1.1.7:
+* Fix module unload bug where mixer device left registered
+ after driver exit
+
+Version 1.1.6:
+* Rewrite via_set_rate to mimic ALSA basic AC97 rate setting
+* Remove much dead code
+* Complete spin_lock_irqsave -> spin_lock_irq conversion in via_dsp_ioctl
+* Fix build problem in via_dsp_ioctl
+* Optimize included headers to eliminate headers found in linux/drivers/sound
+
+Version 1.1.5:
+* Disable some overly-verbose debugging code
+* Remove unnecessary sound locks
+* Fix some ioctls for better time resolution
+* Begin spin_lock_irqsave -> spin_lock_irq conversion in via_dsp_ioctl
+
+Version 1.1.4:
+* Completed rewrite of driver. Eliminated SoundBlaster compatibility
+ completely, and now uses the much-faster scatter-gather DMA engine.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/sysrq.txt linux/Documentation/sysrq.txt
--- v2.4.0-test1/linux/Documentation/sysrq.txt Tue Apr 11 15:09:11 2000
+++ linux/Documentation/sysrq.txt Mon Jun 19 12:56:07 2000
@@ -25,6 +25,10 @@
On SPARC - You press 'ALT-STOP-', I believe.
+On the serial console (PC style standard serial ports only) -
+ You send a BREAK, then within 5 seconds a command key. Sending
+ BREAK twice is interpreted as a normal BREAK.
+
On other - If you know of the key combos for other architectures, please
let me know so I can add them to this section.
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/usb/input.txt linux/Documentation/usb/input.txt
--- v2.4.0-test1/linux/Documentation/usb/input.txt Thu May 11 15:30:05 2000
+++ linux/Documentation/usb/input.txt Mon Jun 19 17:59:32 2000
@@ -1,6 +1,7 @@
- Linux Input drivers v0.9
- (c) 1999 Vojtech Pavlik
+ Linux Input drivers v1.0
+ (c) 1999-2000 Vojtech Pavlik
Sponsored by SuSE
+ $Id: input.txt,v 1.4 2000/05/28 17:57:22 vojtech Exp $
----------------------------------------------------------------------------
0. Disclaimer
@@ -62,27 +63,27 @@
hid.o
After this, the USB keyboard will work straight away, and the USB mouse
-will be available as a character device on major 13, minor 32:
+will be available as a character device on major 13, minor 63:
- crw-r--r-- 1 root root 13, 32 Mar 28 22:45 mouse0
+ crw-r--r-- 1 root root 13, 63 Mar 28 22:45 mice
This device, has to be created, unless you use devfs, in which case it's
created automatically. The commands to do that are:
cd /dev
mkdir input
- mknod input/mouse0 c 13 32
+ mknod input/mice c 13 63
After that you have to point GPM (the textmode mouse cut&paste tool) and
XFree to this device to use it - GPM should be called like:
- gpm -t ps2 -m /dev/input/mouse0
+ gpm -t ps2 -m /dev/input/mice
And in X:
Section "Pointer"
Protocol "ImPS/2"
- Device "/dev/input/mouse0"
+ Device "/dev/input/mice"
ZAxisMapping 4 5
EndSection
@@ -199,10 +200,11 @@
CONFIG_INPUT_MOUSEDEV_SCREEN_[XY] in the kernel configuration are the size
of your screen (in pixels) in XFree86. This is needed if you want to use
your digitizer in X, because it's movement is sent to X via a virtual PS/2
-mouse. These values won't be used if you use a mouse only.
+mouse and thus needs to be scaled accordingly. These values won't be used if
+you use a mouse only.
- Mousedev.c will generate either PS/2, ImPS/2 (microsoft intellimouse) or
-GenPS/2 (genius netmouse/netscroll) protocols, depending on what the program
+ Mousedev will generate either PS/2, ImPS/2 (Microsoft IntelliMouse) or
+GenPS/2 (Genius NetMouse/NetScroll) protocols, depending on what the program
reading the data wishes. You can set GPM and X to any of these. You'll need
ImPS/2 if you want to make use of a wheel on a USB mouse and GenPS/2 if you
want to use extra (up to 5) buttons. I'm not sure how much is GenPS/2 supported
@@ -249,8 +251,12 @@
http://www.suse.cz/development/input/
-You'll find both the latest HID driver and the complete Input driver there.
-There is also a mailing list for this:
+You'll find both the latest HID driver and the complete Input driver there
+as well as information how to access the CVS repository for latest revisions
+of the drivers.
+
+
+ There is also a mailing list for this:
majordomo@atrey.karlin.mff.cuni.cz
@@ -278,8 +284,8 @@
to be extended, but not changed incompatibly as time goes:
You can use blocking and nonblocking reads, also select() on the
-/dev/inputX devices, and you'll always get a whole number of input events on
-a read. Their layout is:
+/dev/input/eventX devices, and you'll always get a whole number of input
+events on a read. Their layout is:
struct input_event {
struct timeval time;
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/usb/ov511.txt linux/Documentation/usb/ov511.txt
--- v2.4.0-test1/linux/Documentation/usb/ov511.txt Mon Jun 19 16:31:56 2000
+++ linux/Documentation/usb/ov511.txt Mon Jun 19 17:59:32 2000
@@ -6,21 +6,16 @@
Homepage: http://alpha.dyndns.org/ov511
NEW IN THIS VERSION:
- o 384x288 and 448x336 modes
- o better /proc/video support
+ o Race conditions and other bugs fixed
INTRODUCTION:
-This is a preliminary version of my OV511 Linux device driver. Currently, it can
-grab a frame in color (YUV420) at 640x480 or 320x240 using either vidcat or
-xawtv. Other utilities may work but have not yet been tested.
-
-Any camera using the OV511/OV511+ and the OV7610/20/20AE CCD should work. The
-driver only detects known cameras though, based on their custom id number. If
-you have a currently unsupported camera, the ID number should be reported to you
-in the kernel logs. Please send me the model, manufacturer and ID number and I
-will add it to the detection code. In the meantime, you can add to the code
-yourself in the function ov511_probe().
+This is a driver for the OV511, a USB-only chip used in many "webcam" devices.
+Any camera using the OV511/OV511+ and the OV7610/20/20AE CCD should work.It
+supports streaming and capture of color or monochrome video via the Video4Linux
+API. Most V4L apps are compatible with it, but a few videoconferencing programs
+do not work yet. The following resolutions are supported: 640x480, 448x336,
+384x288, 352x288, and 320x240.
WHAT YOU NEED:
@@ -93,7 +88,8 @@
bit flaky right now. This message means that the I2C bus never got
initialized properly, and the camera will most likely not work even if you
disable this warning. Try unloading/reloading the driver or unplugging/re-
- plugging the camera if this happens.
+ plugging the camera if this happens. Also try increasing the i2c_detect_tries
+ parameter (see below).
Q: "Why do you bother with this phony camera detection crap? It doesn't do
anything useful!"
@@ -200,9 +196,6 @@
would like them to release their specifications to the Linux community.
o Get 160x120 working
o YUV422 (and other color modes)
- o Fix read(). It only works right now if you run an mmap() based app like xawtv
- or vidcat after loading the module and before using read(). Apparently there
- are some initialization issues.
o Get snapshot mode working with mmap().
o Fix fixFrameRGBoffset(). It is not stable yet with streaming video.
o Get hue (red/blue channel balance) adjustment working (in ov511_get_picture()
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/video4linux/bttv/CARDLIST linux/Documentation/video4linux/bttv/CARDLIST
--- v2.4.0-test1/linux/Documentation/video4linux/bttv/CARDLIST Tue May 23 15:31:32 2000
+++ linux/Documentation/video4linux/bttv/CARDLIST Tue Jun 20 07:52:36 2000
@@ -42,6 +42,8 @@
card=40 - STB2
card=41 - AVerMedia TVPhone 98
card=42 - ProVideo PV951
+ card=43 - Little OnAir TV
+ card=44 - Sigma TVII-FM
tuner.o
type=0 - Temic PAL
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/video4linux/bttv/Insmod-options linux/Documentation/video4linux/bttv/Insmod-options
--- v2.4.0-test1/linux/Documentation/video4linux/bttv/Insmod-options Tue Mar 7 14:32:25 2000
+++ linux/Documentation/video4linux/bttv/Insmod-options Tue Jun 20 07:52:36 2000
@@ -3,7 +3,7 @@
the bt848 (grabber chip) driver
insmod args:
- card=n card type, see cardlist for a list.
+ card=n card type, see CARDLIST for a list.
radio=0/1 card supports radio
pll=0/1/2 pll settings
0: don't use PLL
@@ -31,6 +31,29 @@
remap, card, radio and pll accept up to four comma-separated arguments
(for multiple boards).
+tuner.o
+ The tuner driver. You need this unless you want to use only
+ with a camera or external tuner ...
+
+ insmod args:
+ debug=1 print some debug info to the syslog
+ type=n type of the tuner chip. n as follows:
+ see CARDLIST for a complete list.
+
+tvmixer.o
+ registers a mixer device for the TV card's volume/bass/treble
+ controls (requires a i2c audio control chip like the msp3400).
+
+ insmod args:
+ debug=1 print some debug info to the syslog.
+ devnr=n allocate device #n (0 == /dev/mixer,
+ 1 = /dev/mixer1, ...), default is to
+ use the first free one.
+
+tvaudio.o
+ new, experimental module which is supported to provide a single
+ driver for all simple i2c audio control chips (tda/tea*).
+
msp3400.o
The driver for the msp34xx sound processor chips. If you have a
stereo card, you probably want to insmod this one.
@@ -47,8 +70,6 @@
amsound=1 Audio carrier is AM/NICAM at 6.5 Mhz. This
should improve things for french people, the
carrier autoscan seems to work with FM only...
- mixer=n allocate mixer device #n. Default is the
- first free slot.
tea6300.o
The driver for the tea6300 fader chip. If you have a stereo
@@ -73,20 +94,3 @@
insmod args:
debug=1 print some debug info to the syslog.
chip=9850/9855 set the chip type.
-
-tuner.o
- The tuner driver. You need this unless you want to use only
- with a camera or external tuner ...
-
- insmod args:
- debug=1 print some debug info to the syslog
- type=n type of the tuner chip. n as follows:
- 0: Temic PAL tuner
- 1: Philips PAL_I tuner
- 2: Philips NTSC tuner
- 3: Philips SECAM tuner
- 4: no tuner
- 5: Philips PAL tuner
- 6: Temic NTSC tuner
- 7: Temic PAL tuner
-
diff -u --recursive --new-file v2.4.0-test1/linux/Documentation/watchdog.txt linux/Documentation/watchdog.txt
--- v2.4.0-test1/linux/Documentation/watchdog.txt Tue Aug 31 17:29:12 1999
+++ linux/Documentation/watchdog.txt Mon Jun 19 12:56:07 2000
@@ -77,17 +77,23 @@
Contact Information
People keep asking about the WDT watchdog timer hardware: The phone contacts
-for ICS Advent are:
+for Industrial Computer Source are:
-US: 619 677 0877 (sales) 0895 (fax)
-UK: 01243 533900
-France (1) 69.18.74.30
+Industrial Computer Source
+http://www.indcompsrc.com
+ICS Advent, San Diego
+6260 Sequence Dr.
+San Diego, CA 92121-4371
+Phone (858) 677-0877
+FAX: (858) 677-0895
+>
+ICS Advent Europe, UK
+Oving Road
+Chichester,
+West Sussex,
+PO19 4ET, UK
+Phone: 00.44.1243.533900
-ICS Advent
-9950 Barnes Canyon Road
-San Diego, CA
-
-http://www.icsadvent.com
and please mention Linux when enquiring.
diff -u --recursive --new-file v2.4.0-test1/linux/MAINTAINERS linux/MAINTAINERS
--- v2.4.0-test1/linux/MAINTAINERS Mon Jun 19 16:31:56 2000
+++ linux/MAINTAINERS Fri Jun 23 21:04:36 2000
@@ -178,7 +178,7 @@
BFS FILE SYSTEM
P: Tigran A. Aivazian
-M: tigran@ocston.org
+M: tigran@veritas.com
L: linux-kernel@vger.rutgers.edu
W: http://www.ocston.org/~tigran/patches/bfs
S: Maintained
@@ -199,8 +199,9 @@
COMPAQ SMART2 RAID DRIVER
P: Charles White
M: Charles White
-L: compaqandlinux@yps.org
-S: Maintained
+L: compaqandlinux@cpqlin.van-dijk.net
+W: ftp.compaq.com/pub/products/drivers/linux
+S: Supported
COMPUTONE INTELLIPORT MULTIPORT CARD
P: Doug McNash
@@ -234,6 +235,11 @@
W: http://www.fi.muni.cz/~kas/cosa/
S: Maintained
+CPUID/MSR DRIVER
+P: H. Peter Anvin
+M: hpa@zytor.com
+S: Maintained
+
CREDITS FILE
P: John A. Martin
M: jam@acm.org
@@ -300,11 +306,19 @@
DIGI RIGHTSWITCH NETWORK DRIVER
P: Rick Richardson
-M: rick@dgii.com
+M: rick@remotepoint.com
L: linux-net@vger.rutgers.edu
W: http://www.dgii.com/linux/
S: Maintained
+DISK GEOMETRY AND PARTITION HANDLING
+P: Andries Brouwer
+M: aeb@veritas.com
+W: http://www.win.tue.nl/~aeb/linux/Large-Disk.html
+W: http://www.win.tue.nl/~aeb/linux/zip/zip-1.html
+W: http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
+S: Maintained
+
DISKQUOTA:
P: Marco van Wieringen
M: mvw@planets.elm.net
@@ -476,7 +490,7 @@
IBM ServeRAID RAID DRIVER
P: Keith Mitchell
M: ipslinux@us.ibm.com
-W: http://www.developer.ibm.com/welcome/netfinity/serveraid_beta.html
+W: http://www.developer.ibm.com/welcome/netfinity/serveraid.html
S: Supported
IDE DRIVER [GENERAL]
@@ -540,7 +554,7 @@
INTEL P6 MICROCODE UPDATE SUPPORT
P: Tigran Aivazian
-M: tigran@sco.com
+M: tigran@veritas.com
S: Maintained
IP MASQUERADING:
@@ -580,6 +594,13 @@
W: http://www.isdn4linux.de
S: Maintained
+ISDN SUBSYSTEM (Eicon active card driver)
+P: Armin Schindler
+M: mac@melware.de
+L: isdn4linux@listserv.isdn4linux.de
+W: http://www.melware.de
+S: Maintained
+
JOYSTICK DRIVER
P: Vojtech Pavlik
M: vojtech@suse.cz
@@ -659,7 +680,8 @@
MISCELLANEOUS MCA-SUPPORT
P: David Weinehall
-M: tao@acc.umu.se (personal)
+M: Project MCA Team
+M: David Weinehall
W: http://www.acc.umu.se/~tao/
W: http://www.acc.umu.se/~mcalinux/
L: linux-kernel@vger.rutgers.edu
@@ -699,12 +721,12 @@
NETFILTER
P: Rusty Russell
-M: Rusty.Russell@rustcorp.com.au
+M: rusty@linuxcare.com
P: Marc Boucher
M: marc@mbsi.ca
W: http://www.samba.org/netfilter/
W: http://netfilter.kernelnotes.org
-W: http://antarctica.penguincomputing.com/~netfilter/
+W: http://netfilter.filewatcher.org
L: netfilter@lists.samba.org
S: Supported
@@ -744,8 +766,8 @@
NI5010 NETWORK DRIVER
P: Jan-Pascal van Best and Andreas Mohr
-M: jvbest@qv3pluto.leidenuniv.nl (Best)
-M: 100.30936@germany.net (Mohr)
+M: Jan-Pascal van Best
+M: Andreas Mohr <100.30936@germany.net>
L: linux-net@vger.rutgers.edu
S: Maintained
@@ -793,12 +815,12 @@
P: Andrea Arcangeli
M: andrea@e-mind.com
L: linux-parport@torque.net
-W: http://www.cyberelk.demon.co.uk/parport.html
+W: http://people.redhat.com/twaugh/parport/
S: Maintained
PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
-P: Grant Guenther
-M: grant@torque.net
+P: Tim Waugh
+M: tim@cyberelk.demon.co.uk
L: linux-parport@torque.net
W: http://www.torque.net/linux-pp.html
S: Maintained
@@ -1051,6 +1073,8 @@
M: torben.mathiasen@compaq.com
M: tmm@image.dk
L: tlan@vuser.vu.union.edu
+L: linux-net@vger.rutgers.edu
+W: http://tlan.kernel.dk
S: Maintained
TOKEN-RING NETWORK DRIVER
diff -u --recursive --new-file v2.4.0-test1/linux/Makefile linux/Makefile
--- v2.4.0-test1/linux/Makefile Mon Jun 19 16:31:56 2000
+++ linux/Makefile Tue Jun 20 14:28:05 2000
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 0
-EXTRAVERSION = -test1
+EXTRAVERSION = -test2
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
@@ -118,8 +118,8 @@
#export RAMDISK = -DRAMDISK=512
CORE_FILES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o
-NETWORKS =net/network.a
-DRIVERS =drivers/block/block.a \
+NETWORKS =net/network.o
+DRIVERS =drivers/block/block.o \
drivers/char/char.o \
drivers/misc/misc.o \
drivers/net/net.o \
@@ -142,8 +142,8 @@
DRIVERS-$(CONFIG_WAN) += drivers/net/wan/wan.a
DRIVERS-$(CONFIG_ARCNET) += drivers/net/arcnet/arcnet.a
DRIVERS-$(CONFIG_ATM) += drivers/atm/atm.o
-DRIVERS-$(CONFIG_IDE) += drivers/ide/ide.a
-DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsi.a
+DRIVERS-$(CONFIG_IDE) += drivers/ide/idedriver.o
+DRIVERS-$(CONFIG_SCSI) += drivers/scsi/scsidrv.o
DRIVERS-$(CONFIG_IEEE1394) += drivers/ieee1394/ieee1394.a
ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_BLK_DEV_IDECD)$(CONFIG_BLK_DEV_SR)$(CONFIG_PARIDE_PCD),)
@@ -168,9 +168,9 @@
DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o
DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a
DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o
-DRIVERS-$(CONFIG_I2O) += drivers/i2o/i2o.a
+DRIVERS-$(CONFIG_I2O) += drivers/i2o/i2o.o
DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda_drivers.a
-DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.a
+DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.a
DRIVERS += $(DRIVERS-y)
@@ -421,7 +421,10 @@
pdfdocs: sgmldocs
$(MAKE) -C Documentation/DocBook pdf
-
+
+htmldocs: sgmldocs
+ $(MAKE) -C Documentation/DocBook html
+
sums:
find . -type f -print | sort | xargs sum > .SUMS
diff -u --recursive --new-file v2.4.0-test1/linux/Rules.make linux/Rules.make
--- v2.4.0-test1/linux/Rules.make Tue Apr 11 15:09:11 2000
+++ linux/Rules.make Thu Jun 22 07:09:44 2000
@@ -291,9 +291,12 @@
))
# A kludge: .S files don't get flag dependencies (yet),
-# because that will involve changing a lot of Makefiles.
+# because that will involve changing a lot of Makefiles. Also
+# suppress object files explicitly listed in $(IGNORE_FLAGS_OBJS).
+# This allows handling of assembly files that get translated into
+# multiple object files (see arch/ia64/lib/idiv.S, for example).
FILES_FLAGS_CHANGED := $(strip \
- $(filter-out $(patsubst %.S, %.o, $(wildcard *.S)), \
+ $(filter-out $(patsubst %.S, %.o, $(wildcard *.S) $(IGNORE_FLAGS_OBJS)), \
$(FILES_FLAGS_CHANGED)))
ifneq ($(FILES_FLAGS_CHANGED),)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/boot/bootp.c linux/arch/alpha/boot/bootp.c
--- v2.4.0-test1/linux/arch/alpha/boot/bootp.c Tue Nov 23 22:42:20 1999
+++ linux/arch/alpha/boot/bootp.c Mon Jun 19 17:59:32 2000
@@ -93,7 +93,7 @@
i = switch_to_osf_pal(2, pcb_va, pcb_pa, VPTB);
if (i) {
srm_printk("failed, code %ld\n", i);
- halt();
+ __halt();
}
percpu = (struct percpu_struct *)
@@ -171,8 +171,7 @@
srm_printk("Initrd positioned at %#lx\n", initrd_start);
#endif
- nbytes = srm_dispatch(CCB_GET_ENV, ENV_BOOTED_OSFLAGS,
- envval, sizeof(envval));
+ nbytes = callback_getenv(ENV_BOOTED_OSFLAGS, envval, sizeof(envval));
if (nbytes < 0 || nbytes >= sizeof(envval)) {
nbytes = 0;
}
@@ -181,18 +180,17 @@
/* NOTE: *no* callbacks or printouts from here on out!!! */
- /*
- * This is a hack, as some consoles seem to get virtual 20000000
- * (ie where the SRM console puts the kernel bootp image) memory
- * overlapping physical 310000 memory, which causes real problems
- * when attempting to copy the former to the latter... :-(
+ /* This is a hack, as some consoles seem to get virtual 20000000 (ie
+ * where the SRM console puts the kernel bootp image) memory
+ * overlapping physical memory where the kernel wants to be put,
+ * which causes real problems when attempting to copy the former to
+ * the latter... :-(
*
* So, we first move the kernel virtual-to-physical way above where
* we physically want the kernel to end up, then copy it from there
* to its final resting place... ;-}
*
- * Sigh...
- */
+ * Sigh... */
#ifdef INITRD_SIZE
load(initrd_start, KERNEL_ORIGIN+KERNEL_SIZE, INITRD_SIZE);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/boot/main.c linux/arch/alpha/boot/main.c
--- v2.4.0-test1/linux/arch/alpha/boot/main.c Tue Nov 23 22:42:20 1999
+++ linux/arch/alpha/boot/main.c Mon Jun 19 17:59:32 2000
@@ -90,7 +90,7 @@
i = switch_to_osf_pal(2, pcb_va, pcb_pa, VPTB);
if (i) {
srm_printk("failed, code %ld\n", i);
- halt();
+ __halt();
}
percpu = (struct percpu_struct *)
@@ -107,15 +107,15 @@
char bootdev[256];
long result;
- result = srm_dispatch(CCB_GET_ENV, ENV_BOOTED_DEV, bootdev, 255);
+ result = callback_getenv(ENV_BOOTED_DEV, bootdev, 255);
if (result < 0)
return result;
- return srm_dispatch(CCB_OPEN, bootdev, result & 255);
+ return callback_open(bootdev, result & 255);
}
static inline long close(long dev)
{
- return srm_dispatch(CCB_CLOSE, dev);
+ return callback_close(dev);
}
static inline long load(long dev, unsigned long addr, unsigned long count)
@@ -124,7 +124,7 @@
extern char _end;
long result, boot_size = &_end - (char *) BOOT_ADDR;
- result = srm_dispatch(CCB_GET_ENV, ENV_BOOTED_FILE, bootfile, 255);
+ result = callback_getenv(ENV_BOOTED_FILE, bootfile, 255);
if (result < 0)
return result;
result &= 255;
@@ -132,7 +132,7 @@
if (result)
srm_printk("Boot file specification (%s) not implemented\n",
bootfile);
- return srm_dispatch(CCB_READ, dev, count, addr, boot_size/512 + 1);
+ return callback_read(dev, count, addr, boot_size/512 + 1);
}
/*
@@ -176,8 +176,7 @@
return;
}
- nbytes = srm_dispatch(CCB_GET_ENV, ENV_BOOTED_OSFLAGS,
- envval, sizeof(envval));
+ nbytes = callback_getenv(ENV_BOOTED_OSFLAGS, envval, sizeof(envval));
if (nbytes < 0) {
nbytes = 0;
}
@@ -188,5 +187,5 @@
runkernel();
for (i = 0 ; i < 0x100000000 ; i++)
/* nothing */;
- halt();
+ __halt();
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v2.4.0-test1/linux/arch/alpha/config.in Tue Apr 11 15:09:11 2000
+++ linux/arch/alpha/config.in Mon Jun 19 17:59:32 2000
@@ -1,6 +1,6 @@
#
# For a description of the syntax of this configuration file,
-# see the Configure script.
+# see Documentation/kbuild/config-language.txt.
#
define_bool CONFIG_UID16 n
@@ -51,7 +51,9 @@
RX164 CONFIG_ALPHA_RX164 \
SX164 CONFIG_ALPHA_SX164 \
Sable CONFIG_ALPHA_SABLE \
- Takara CONFIG_ALPHA_TAKARA" Generic
+ Takara CONFIG_ALPHA_TAKARA \
+ Titan CONFIG_ALPHA_TITAN \
+ Wildfire CONFIG_ALPHA_WILDFIRE" Generic
# clear all implied options (don't want default values for those):
unset CONFIG_ALPHA_EV4 CONFIG_ALPHA_EV5 CONFIG_ALPHA_EV6
@@ -131,6 +133,16 @@
define_bool CONFIG_ALPHA_EV6 y
define_bool CONFIG_ALPHA_TSUNAMI y
fi
+if [ "$CONFIG_ALPHA_WILDFIRE" = "y" ]
+then
+ define_bool CONFIG_PCI y
+ define_bool CONFIG_ALPHA_EV6 y
+fi
+if [ "$CONFIG_ALPHA_TITAN" = "y" ]
+then
+ define_bool CONFIG_PCI y
+ define_bool CONFIG_ALPHA_EV6 y
+fi
if [ "$CONFIG_ALPHA_RAWHIDE" = "y" ]
then
define_bool CONFIG_ALPHA_EV5 y
@@ -151,18 +163,23 @@
define_bool CONFIG_ALPHA_IRONGATE y
fi
+if [ "$CONFIG_ALPHA_JENSEN" = "y" -o "$CONFIG_ALPHA_MIKASA" = "y" \
+ -o "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_NORITAKE" = "y" \
+ -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_RAWHIDE" = "y" \
+ -o "$CONFIG_ALPHA_EIGER" = "y" -o "$CONFIG_ALPHA_WILDFIRE" = "y" \
+ -o "$CONFIG_ALPHA_TITAN" = "y" ]
+then
+ define_bool CONFIG_ALPHA_SRM y
+fi
if [ "$CONFIG_ALPHA_CABRIOLET" = "y" -o "$CONFIG_ALPHA_AVANTI" = "y" \
- -o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_JENSEN" = "y" \
+ -o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_PC164" = "y" \
-o "$CONFIG_ALPHA_TAKARA" = "y" -o "$CONFIG_ALPHA_EB164" = "y" \
- -o "$CONFIG_ALPHA_MIKASA" = "y" -o "$CONFIG_ALPHA_ALCOR" = "y" \
- -o "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_MIATA" = "y" \
- -o "$CONFIG_ALPHA_NORITAKE" = "y" -o "$CONFIG_ALPHA_PC164" = "y" \
- -o "$CONFIG_ALPHA_LX164" = "y" -o "$CONFIG_ALPHA_SX164" = "y" \
- -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_RAWHIDE" = "y" \
- -o "$CONFIG_ALPHA_EIGER" = "y" ]
+ -o "$CONFIG_ALPHA_ALCOR" = "y" -o "$CONFIG_ALPHA_MIATA" = "y" \
+ -o "$CONFIG_ALPHA_LX164" = "y" -o "$CONFIG_ALPHA_SX164" = "y" ]
then
bool 'Use SRM as bootloader' CONFIG_ALPHA_SRM
fi
+
if [ "$CONFIG_ALPHA_ALCOR" = "y" -o "$CONFIG_ALPHA_MIKASA" = "y" \
-o "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_NORITAKE" = "y" \
-o "$CONFIG_ALPHA_RAWHIDE" = "y" ]
@@ -179,7 +196,8 @@
fi
if [ "$CONFIG_ALPHA_SABLE" = "y" -o "$CONFIG_ALPHA_RAWHIDE" = "y" \
- -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_GENERIC" = "y" ]
+ -o "$CONFIG_ALPHA_DP264" = "y" -o "$CONFIG_ALPHA_WILDFIRE" = "y" \
+ -o "$CONFIG_ALPHA_TITAN" = "y" -o "$CONFIG_ALPHA_GENERIC" = "y" ]
then
bool 'Symmetric multi-processing support' CONFIG_SMP
fi
@@ -286,6 +304,12 @@
mainmenu_option next_comment
comment 'Console drivers'
bool 'VGA text console' CONFIG_VGA_CONSOLE
+# if [ "$CONFIG_PCI" = "y" -a "$CONFIG_VGA_CONSOLE" = "y" ]; then
+# bool ' Allow VGA on any bus?' CONFIG_VGA_HOSE
+# if [ "$CONFIG_VGA_HOSE" = "y" ]; then
+# define_bool CONFIG_DUMMY_CONSOLE y
+# fi
+# fi
source drivers/video/Config.in
if [ "$CONFIG_FB" = "y" ]; then
define_bool CONFIG_PCI_CONSOLE y
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/defconfig linux/arch/alpha/defconfig
--- v2.4.0-test1/linux/arch/alpha/defconfig Thu May 11 15:30:05 2000
+++ linux/arch/alpha/defconfig Mon Jun 19 17:59:32 2000
@@ -45,6 +45,8 @@
# CONFIG_ALPHA_SX164 is not set
# CONFIG_ALPHA_SABLE is not set
# CONFIG_ALPHA_TAKARA is not set
+# CONFIG_ALPHA_TITAN is not set
+# CONFIG_ALPHA_WILDFIRE is not set
CONFIG_ISA=y
# CONFIG_SBUS is not set
CONFIG_PCI=y
@@ -83,10 +85,6 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/Makefile linux/arch/alpha/kernel/Makefile
--- v2.4.0-test1/linux/arch/alpha/kernel/Makefile Tue Apr 11 15:09:11 2000
+++ linux/arch/alpha/kernel/Makefile Mon Jun 19 17:59:32 2000
@@ -26,17 +26,22 @@
endif
ifdef CONFIG_PCI
-L_OBJS += pci.o pci_iommu.o
+O_OBJS += pci.o pci_iommu.o
+endif
+
+ifdef CONFIG_VGA_HOSE
+L_OBJS += console.o
endif
ifdef CONFIG_ALPHA_GENERIC
O_OBJS += core_apecs.o core_cia.o core_irongate.o core_lca.o core_mcpcia.o \
- core_polaris.o core_t2.o core_tsunami.o \
+ core_polaris.o core_t2.o core_tsunami.o core_titan.o \
sys_alcor.o sys_cabriolet.o sys_dp264.o sys_eb64p.o sys_eiger.o \
- sys_jensen.o sys_miata.o sys_mikasa.o sys_nautilus.o \
+ sys_jensen.o sys_miata.o sys_mikasa.o sys_nautilus.o sys_titan.o \
sys_noritake.o sys_rawhide.o sys_ruffian.o sys_rx164.o \
- sys_sable.o sys_sio.o sys_sx164.o sys_takara.o sys_rx164.o
+ sys_sable.o sys_sio.o sys_sx164.o sys_takara.o sys_rx164.o \
+ sys_wildfire.o core_wildfire.o
else
@@ -62,9 +67,15 @@
ifdef CONFIG_ALPHA_TSUNAMI
O_OBJS += core_tsunami.o
endif
+ifdef CONFIG_ALPHA_TITAN
+O_OBJS += core_titan.o
+endif
ifdef CONFIG_ALPHA_POLARIS
O_OBJS += core_polaris.o
endif
+ifdef CONFIG_ALPHA_WILDFIRE
+O_OBJS += core_wildfire.o
+endif
# Board support
ifneq ($(CONFIG_ALPHA_ALCOR)$(CONFIG_ALPHA_XLT),)
@@ -76,6 +87,9 @@
ifdef CONFIG_ALPHA_DP264
O_OBJS += sys_dp264.o
endif
+ifdef CONFIG_ALPHA_TITAN
+O_OBJS += sys_titan.o
+endif
ifneq ($(CONFIG_ALPHA_EB64P)$(CONFIG_ALPHA_EB66),)
O_OBJS += sys_eb64p.o
endif
@@ -117,6 +131,9 @@
endif
ifdef CONFIG_ALPHA_TAKARA
O_OBJS += sys_takara.o
+endif
+ifdef CONFIG_ALPHA_WILDFIRE
+O_OBJS += sys_wildfire.o
endif
endif # GENERIC
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/console.c linux/arch/alpha/kernel/console.c
--- v2.4.0-test1/linux/arch/alpha/kernel/console.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/kernel/console.c Mon Jun 19 17:59:32 2000
@@ -0,0 +1,66 @@
+/*
+ * linux/arch/alpha/kernel/console.c
+ *
+ * Architecture-specific specific support for VGA device on
+ * non-0 I/O hose
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef CONFIG_VGA_HOSE
+
+/*
+ * Externally-visible vga hose bases
+ */
+unsigned long __vga_hose_io_base = 0; /* base for default hose */
+unsigned long __vga_hose_mem_base = 0; /* base for default hose */
+
+static struct pci_controler * __init
+default_vga_hose_select(struct pci_controler *h1, struct pci_controler *h2)
+{
+ if (h2->index < h1->index)
+ return h2;
+
+ return h1;
+}
+
+void __init
+set_vga_hose(struct pci_controler *hose)
+{
+ if (hose) {
+ __vga_hose_io_base = hose->io_space->start;
+ __vga_hose_mem_base = hose->mem_space->start;
+ }
+}
+
+void __init
+locate_and_init_vga(void *(*sel_func)(void *, void *))
+{
+ struct pci_controler *hose = NULL;
+ struct pci_dev *dev = NULL;
+
+ if (!sel_func) sel_func = (void *)default_vga_hose_select;
+
+ for(dev=NULL; (dev=pci_find_class(PCI_CLASS_DISPLAY_VGA << 8, dev));) {
+ if (!hose) hose = dev->sysdata;
+ else hose = sel_func(hose, dev->sysdata);
+ }
+
+ /* Did we already inititialize the correct one? */
+ if (conswitchp == &vga_con &&
+ __vga_hose_io_base == hose->io_space->start &&
+ __vga_hose_mem_base == hose->mem_space->start)
+ return;
+
+ /* Set the VGA hose and init the new console */
+ set_vga_hose(hose);
+ take_over_console(&vga_con, 0, MAX_NR_CONSOLES-1, 1);
+}
+
+#endif
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/core_mcpcia.c linux/arch/alpha/kernel/core_mcpcia.c
--- v2.4.0-test1/linux/arch/alpha/kernel/core_mcpcia.c Mon Mar 27 08:08:21 2000
+++ linux/arch/alpha/kernel/core_mcpcia.c Wed Jun 21 22:30:59 2000
@@ -308,6 +308,7 @@
mb();
draina();
wrmces(7);
+
mcheck_expected(cpu) = 2; /* indicates probing */
mcheck_taken(cpu) = 0;
mcheck_extra(cpu) = mid;
@@ -409,19 +410,19 @@
* Window 2 is direct access 2GB at 2GB
* ??? We ought to scale window 1 with memory.
*/
-
hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
hose->sg_pci = iommu_arena_new(hose, 0x40000000, 0x08000000, 0);
+
__direct_map_base = 0x80000000;
__direct_map_size = 0x80000000;
*(vuip)MCPCIA_W0_BASE(mid) = hose->sg_isa->dma_base | 3;
*(vuip)MCPCIA_W0_MASK(mid) = (hose->sg_isa->size - 1) & 0xfff00000;
- *(vuip)MCPCIA_T0_BASE(mid) = virt_to_phys(hose->sg_isa->ptes) >> 2;
+ *(vuip)MCPCIA_T0_BASE(mid) = virt_to_phys(hose->sg_isa->ptes) >> 8;
*(vuip)MCPCIA_W1_BASE(mid) = hose->sg_pci->dma_base | 3;
*(vuip)MCPCIA_W1_MASK(mid) = (hose->sg_pci->size - 1) & 0xfff00000;
- *(vuip)MCPCIA_T1_BASE(mid) = virt_to_phys(hose->sg_pci->ptes) >> 2;
+ *(vuip)MCPCIA_T1_BASE(mid) = virt_to_phys(hose->sg_pci->ptes) >> 8;
*(vuip)MCPCIA_W2_BASE(mid) = __direct_map_base | 1;
*(vuip)MCPCIA_W2_MASK(mid) = (__direct_map_size - 1) & 0xfff00000;
@@ -464,9 +465,11 @@
mcpcia_init_hoses(void)
{
struct pci_controler *hose;
- int h, hose_count = 0;
+ int hose_count;
+ int h;
/* First, find how many hoses we have. */
+ hose_count = 0;
for (h = 0; h < MCPCIA_MAX_HOSES; ++h) {
if (mcpcia_probe_hose(h)) {
if (h != 0)
@@ -554,6 +557,65 @@
frame->ld_lock);
}
+static void
+mcpcia_print_system_area(unsigned long la_ptr)
+{
+ struct el_common *frame;
+ struct pci_controler *hose;
+
+ struct IOD_subpacket {
+ unsigned long base;
+ unsigned int whoami;
+ unsigned int rsvd1;
+ unsigned int pci_rev;
+ unsigned int cap_ctrl;
+ unsigned int hae_mem;
+ unsigned int hae_io;
+ unsigned int int_ctl;
+ unsigned int int_reg;
+ unsigned int int_mask0;
+ unsigned int int_mask1;
+ unsigned int mc_err0;
+ unsigned int mc_err1;
+ unsigned int cap_err;
+ unsigned int rsvd2;
+ unsigned int pci_err1;
+ unsigned int mdpa_stat;
+ unsigned int mdpa_syn;
+ unsigned int mdpb_stat;
+ unsigned int mdpb_syn;
+ unsigned int rsvd3;
+ unsigned int rsvd4;
+ unsigned int rsvd5;
+ } *iodpp;
+
+ frame = (struct el_common *)la_ptr;
+ iodpp = (struct IOD_subpacket *) (la_ptr + frame->sys_offset);
+
+ for (hose = hose_head; hose; hose = hose->next, iodpp++) {
+
+ printk("IOD %d Register Subpacket - Bridge Base Address %16lx\n",
+ hose->index, iodpp->base);
+ printk(" WHOAMI = %8x\n", iodpp->whoami);
+ printk(" PCI_REV = %8x\n", iodpp->pci_rev);
+ printk(" CAP_CTRL = %8x\n", iodpp->cap_ctrl);
+ printk(" HAE_MEM = %8x\n", iodpp->hae_mem);
+ printk(" HAE_IO = %8x\n", iodpp->hae_io);
+ printk(" INT_CTL = %8x\n", iodpp->int_ctl);
+ printk(" INT_REG = %8x\n", iodpp->int_reg);
+ printk(" INT_MASK0 = %8x\n", iodpp->int_mask0);
+ printk(" INT_MASK1 = %8x\n", iodpp->int_mask1);
+ printk(" MC_ERR0 = %8x\n", iodpp->mc_err0);
+ printk(" MC_ERR1 = %8x\n", iodpp->mc_err1);
+ printk(" CAP_ERR = %8x\n", iodpp->cap_err);
+ printk(" PCI_ERR1 = %8x\n", iodpp->pci_err1);
+ printk(" MDPA_STAT = %8x\n", iodpp->mdpa_stat);
+ printk(" MDPA_SYN = %8x\n", iodpp->mdpa_syn);
+ printk(" MDPB_STAT = %8x\n", iodpp->mdpb_stat);
+ printk(" MDPB_SYN = %8x\n", iodpp->mdpb_syn);
+ }
+}
+
void
mcpcia_machine_check(unsigned long vector, unsigned long la_ptr,
struct pt_regs * regs)
@@ -594,6 +656,8 @@
mb();
process_mcheck_info(vector, la_ptr, regs, "MCPCIA", expected != 0);
- if (!expected && vector != 0x620 && vector != 0x630)
+ if (!expected && vector != 0x620 && vector != 0x630) {
mcpcia_print_uncorrectable(mchk_logout);
+ mcpcia_print_system_area(la_ptr);
+ }
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/core_titan.c linux/arch/alpha/kernel/core_titan.c
--- v2.4.0-test1/linux/arch/alpha/kernel/core_titan.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/kernel/core_titan.c Wed Jun 21 22:30:59 2000
@@ -0,0 +1,490 @@
+/*
+ * linux/arch/alpha/kernel/core_titan.c
+ *
+ * Code common to all TITAN core logic chips.
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#define __EXTERN_INLINE inline
+#include
+#include
+#undef __EXTERN_INLINE
+
+#include "proto.h"
+#include "pci_impl.h"
+
+unsigned TITAN_agp = 0;
+
+static struct
+{
+ unsigned long wsba[4];
+ unsigned long wsm[4];
+ unsigned long tba[4];
+} saved_pachip_port[4];
+
+/*
+ * BIOS32-style PCI interface:
+ */
+
+#define DEBUG_MCHECK 0 /* 0 = minimum, 1 = debug, 2 = dump+dump */
+#define DEBUG_CONFIG 0
+
+#if DEBUG_CONFIG
+# define DBG_CFG(args) printk args
+#else
+# define DBG_CFG(args)
+#endif
+
+/*
+ * Given a bus, device, and function number, compute resulting
+ * configuration space address
+ * accordingly. It is therefore not safe to have concurrent
+ * invocations to configuration space access routines, but there
+ * really shouldn't be any need for this.
+ *
+ * Note that all config space accesses use Type 1 address format.
+ *
+ * Note also that type 1 is determined by non-zero bus number.
+ *
+ * Type 1:
+ *
+ * 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1
+ * 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 31:24 reserved
+ * 23:16 bus number (8 bits = 128 possible buses)
+ * 15:11 Device number (5 bits)
+ * 10:8 function number
+ * 7:2 register number
+ *
+ * Notes:
+ * The function number selects which function of a multi-function device
+ * (e.g., SCSI and Ethernet).
+ *
+ * The register selects a DWORD (32 bit) register offset. Hence it
+ * doesn't get shifted by 2 bits as we want to "drop" the bottom two
+ * bits.
+ */
+
+static int
+mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr,
+ unsigned char *type1)
+{
+ struct pci_controler *hose = dev->sysdata;
+ unsigned long addr;
+ u8 bus = dev->bus->number;
+ u8 device_fn = dev->devfn;
+
+ DBG_CFG(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x, "
+ "pci_addr=0x%p, type1=0x%p)\n",
+ bus, device_fn, where, pci_addr, type1));
+
+ if (hose->first_busno == dev->bus->number)
+ bus = 0;
+ *type1 = (bus != 0);
+
+ addr = (bus << 16) | (device_fn << 8) | where;
+ addr |= hose->config_space_base;
+
+ *pci_addr = addr;
+ DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
+ return 0;
+}
+
+static int
+titan_read_config_byte(struct pci_dev *dev, int where, u8 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = __kernel_ldbu(*(vucp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+titan_read_config_word(struct pci_dev *dev, int where, u16 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = __kernel_ldwu(*(vusp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+titan_read_config_dword(struct pci_dev *dev, int where, u32 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = *(vuip)addr;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+titan_write_config_byte(struct pci_dev *dev, int where, u8 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ __kernel_stb(value, *(vucp)addr);
+ mb();
+ __kernel_ldbu(*(vucp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+titan_write_config_word(struct pci_dev *dev, int where, u16 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ __kernel_stw(value, *(vusp)addr);
+ mb();
+ __kernel_ldwu(*(vusp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+titan_write_config_dword(struct pci_dev *dev, int where, u32 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *(vuip)addr = value;
+ mb();
+ *(vuip)addr;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+struct pci_ops titan_pci_ops =
+{
+ read_byte: titan_read_config_byte,
+ read_word: titan_read_config_word,
+ read_dword: titan_read_config_dword,
+ write_byte: titan_write_config_byte,
+ write_word: titan_write_config_word,
+ write_dword: titan_write_config_dword
+};
+
+
+void
+titan_pci_tbi(struct pci_controler *hose, dma_addr_t start, dma_addr_t end)
+{
+ titan_pachip *pachip =
+ (hose->index & 1) ? TITAN_pachip1 : TITAN_pachip0;
+ titan_pachip_port *port;
+ volatile unsigned long *csr;
+ unsigned long value;
+
+ /* Get the right hose */
+ port = &pachip->g_port;
+ if (hose->index & 2)
+ port = &pachip->a_port;
+
+ /* We can invalidate up to 8 tlb entries in a go. The flush
+ matches against <31:16> in the pci address. */
+ csr = &port->port_specific.g.gtlbia.csr;
+ if (((start ^ end) & 0xffff0000) == 0)
+ csr = &port->port_specific.g.gtlbiv.csr;
+
+ /* For TBIA, it doesn't matter what value we write. For TBI,
+ it's the shifted tag bits. */
+ value = (start & 0xffff0000) >> 12;
+
+ wmb();
+ *csr = value;
+ mb();
+ *csr;
+}
+
+#define FN __FUNCTION__
+
+static int __init
+titan_query_agp(titan_pachip_port *port)
+{
+ union TPAchipPCTL pctl;
+
+ /* set up APCTL */
+ pctl.pctl_q_whole = port->pctl.csr;
+
+ return pctl.pctl_r_bits.apctl_v_agp_present;
+
+}
+static void __init
+titan_init_agp(titan_pachip_port *port, struct pci_controler *hose)
+{
+ union TPAchipPCTL pctl;
+
+ if (!titan_query_agp(port))
+ return;
+
+ printk("AGP present on hose %d\n", hose->index);
+
+ /* get APCTL */
+ pctl.pctl_q_whole = port->pctl.csr;
+
+
+ pctl.pctl_r_bits.apctl_v_agp_en = 1; /* enable AGP */
+ pctl.pctl_r_bits.apctl_v_agp_lp_rd = 0;
+ pctl.pctl_r_bits.apctl_v_agp_hp_rd = 0;
+
+ port->pctl.csr = pctl.pctl_q_whole;
+
+ TITAN_agp |= 1 << hose->index;
+
+#ifdef CONFIG_VGA_HOSE
+ /* is a graphics card on the AGP? (always device 5) */
+ if (hose != NULL &&
+ __kernel_ldwu(*(vusp)(hose->config_space_base + 0x280a)) ==
+ PCI_CLASS_DISPLAY_VGA)
+ set_vga_hose(hose);
+#endif
+}
+
+static void __init
+titan_init_one_pachip_port(titan_pachip_port *port, int index)
+{
+ struct pci_controler *hose;
+
+ hose = alloc_pci_controler();
+ if (index == 0)
+ pci_isa_hose = hose;
+ hose->io_space = alloc_resource();
+ hose->mem_space = alloc_resource();
+
+ hose->config_space_base = TITAN_CONF(index);
+ hose->index = index;
+
+ hose->io_space->start = TITAN_IO(index) - TITAN_IO_BIAS;
+ hose->io_space->end = hose->io_space->start + TITAN_IO_SPACE - 1;
+ hose->io_space->name = pci_io_names[index];
+ hose->io_space->flags = IORESOURCE_IO;
+
+ hose->mem_space->start = TITAN_MEM(index) - TITAN_MEM_BIAS;
+ hose->mem_space->end = hose->mem_space->start + 0xffffffff;
+ hose->mem_space->name = pci_mem_names[index];
+ hose->mem_space->flags = IORESOURCE_MEM;
+
+ if (request_resource(&ioport_resource, hose->io_space) < 0)
+ printk(KERN_ERR "Failed to request IO on hose %d\n", index);
+ if (request_resource(&iomem_resource, hose->mem_space) < 0)
+ printk(KERN_ERR "Failed to request MEM on hose %d\n", index);
+
+ /* It's safe to call this for both G-Ports and A-Ports */
+ titan_init_agp(port, hose);
+
+ /*
+ * Save the existing PCI window translations. SRM will
+ * need them when we go to reboot.
+ */
+ saved_pachip_port[index].wsba[0] = port->wsba[0].csr;
+ saved_pachip_port[index].wsm[0] = port->wsm[0].csr;
+ saved_pachip_port[index].tba[0] = port->tba[0].csr;
+
+ saved_pachip_port[index].wsba[1] = port->wsba[1].csr;
+ saved_pachip_port[index].wsm[1] = port->wsm[1].csr;
+ saved_pachip_port[index].tba[1] = port->tba[1].csr;
+
+ saved_pachip_port[index].wsba[2] = port->wsba[2].csr;
+ saved_pachip_port[index].wsm[2] = port->wsm[2].csr;
+ saved_pachip_port[index].tba[2] = port->tba[2].csr;
+
+ saved_pachip_port[index].wsba[3] = port->wsba[3].csr;
+ saved_pachip_port[index].wsm[3] = port->wsm[3].csr;
+ saved_pachip_port[index].tba[3] = port->tba[3].csr;
+
+ /*
+ * Set up the PCI to main memory translation windows.
+ *
+ * Note: Window 3 on Titan is Scatter-Gather ONLY
+ *
+ * Window 0 is scatter-gather 8MB at 8MB (for isa)
+ * Window 1 is direct access 1GB at 1GB
+ * Window 2 is direct access 1GB at 2GB
+ * Window 3 is scatter-gather 128MB at 3GB
+ * ??? We ought to scale window 3 memory.
+ *
+ * We must actually use 2 windows to direct-map the 2GB space,
+ * because of an idiot-syncrasy of the CYPRESS chip. It may
+ * respond to a PCI bus address in the last 1MB of the 4GB
+ * address range.
+ */
+ hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
+ hose->sg_isa->align_entry = 8; /* 64KB for ISA */
+
+ hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x08000000, 0);
+ hose->sg_pci->align_entry = 4; /* Titan caches 4 PTEs at a time */
+
+ __direct_map_base = 0x40000000;
+ __direct_map_size = 0x80000000;
+
+ port->wsba[0].csr = hose->sg_isa->dma_base | 3;
+ port->wsm[0].csr = (hose->sg_isa->size - 1) & 0xfff00000;
+ port->tba[0].csr = virt_to_phys(hose->sg_isa->ptes);
+
+ port->wsba[1].csr = 0x40000000 | 1;
+ port->wsm[1].csr = (0x40000000 - 1) & 0xfff00000;
+ port->tba[1].csr = 0;
+
+ port->wsba[2].csr = 0x80000000 | 1;
+ port->wsm[2].csr = (0x40000000 - 1) & 0xfff00000;
+ port->tba[2].csr = 0x40000000;
+
+ port->wsba[3].csr = hose->sg_pci->dma_base | 3;
+ port->wsm[3].csr = (hose->sg_pci->size - 1) & 0xfff00000;
+ port->tba[3].csr = virt_to_phys(hose->sg_pci->ptes);
+
+ titan_pci_tbi(hose, 0, -1);
+}
+
+static void __init
+titan_init_pachips(titan_pachip *pachip0, titan_pachip *pachip1)
+{
+ int pchip1_present = TITAN_cchip->csc.csr & 1L<<14;
+
+ /* Init the ports in hose order... */
+ titan_init_one_pachip_port(&pachip0->g_port, 0); /* hose 0 */
+ if (pchip1_present)
+ titan_init_one_pachip_port(&pachip1->g_port, 1);/* hose 1 */
+ titan_init_one_pachip_port(&pachip0->a_port, 2); /* hose 2 */
+ if (pchip1_present)
+ titan_init_one_pachip_port(&pachip1->a_port, 3);/* hose 3 */
+}
+
+void __init
+titan_init_arch(void)
+{
+#if 0
+ printk("%s: titan_init_arch()\n", FN);
+ printk("%s: CChip registers:\n", FN);
+ printk("%s: CSR_CSC 0x%lx\n", FN, TITAN_cchip->csc.csr);
+ printk("%s: CSR_MTR 0x%lx\n", FN, TITAN_cchip->mtr.csr);
+ printk("%s: CSR_MISC 0x%lx\n", FN, TITAN_cchip->misc.csr);
+ printk("%s: CSR_DIM0 0x%lx\n", FN, TITAN_cchip->dim0.csr);
+ printk("%s: CSR_DIM1 0x%lx\n", FN, TITAN_cchip->dim1.csr);
+ printk("%s: CSR_DIR0 0x%lx\n", FN, TITAN_cchip->dir0.csr);
+ printk("%s: CSR_DIR1 0x%lx\n", FN, TITAN_cchip->dir1.csr);
+ printk("%s: CSR_DRIR 0x%lx\n", FN, TITAN_cchip->drir.csr);
+
+ printk("%s: DChip registers:\n", FN);
+ printk("%s: CSR_DSC 0x%lx\n", FN, TITAN_dchip->dsc.csr);
+ printk("%s: CSR_STR 0x%lx\n", FN, TITAN_dchip->str.csr);
+ printk("%s: CSR_DREV 0x%lx\n", FN, TITAN_dchip->drev.csr);
+#endif
+
+ boot_cpuid = __hard_smp_processor_id();
+
+ /* With multiple PCI busses, we play with I/O as physical addrs. */
+ ioport_resource.end = ~0UL;
+ iomem_resource.end = ~0UL;
+
+ /* Init the PA chip(s) */
+ titan_init_pachips(TITAN_pachip0, TITAN_pachip1);
+}
+
+static void
+titan_kill_one_pachip_port(titan_pachip_port *port, int index)
+{
+ port->wsba[0].csr = saved_pachip_port[index].wsba[0];
+ port->wsm[0].csr = saved_pachip_port[index].wsm[0];
+ port->tba[0].csr = saved_pachip_port[index].tba[0];
+
+ port->wsba[1].csr = saved_pachip_port[index].wsba[1];
+ port->wsm[1].csr = saved_pachip_port[index].wsm[1];
+ port->tba[1].csr = saved_pachip_port[index].tba[1];
+
+ port->wsba[2].csr = saved_pachip_port[index].wsba[2];
+ port->wsm[2].csr = saved_pachip_port[index].wsm[2];
+ port->tba[2].csr = saved_pachip_port[index].tba[2];
+
+ port->wsba[3].csr = saved_pachip_port[index].wsba[3];
+ port->wsm[3].csr = saved_pachip_port[index].wsm[3];
+ port->tba[3].csr = saved_pachip_port[index].tba[3];
+}
+
+static void
+titan_kill_pachips(titan_pachip *pachip0, titan_pachip *pachip1)
+{
+ int pchip1_present = TITAN_cchip->csc.csr & 1L<<14;
+
+ if (pchip1_present) {
+ titan_kill_one_pachip_port(&pachip0->g_port, 1);
+ titan_kill_one_pachip_port(&pachip0->a_port, 3);
+ }
+ titan_kill_one_pachip_port(&pachip0->g_port, 0);
+ titan_kill_one_pachip_port(&pachip0->a_port, 2);
+}
+
+void
+titan_kill_arch(int mode)
+{
+ titan_kill_pachips(TITAN_pachip0, TITAN_pachip1);
+}
+
+static inline void
+titan_pci_clr_err_1(titan_pachip *pachip)
+{
+ unsigned int jd;
+
+ jd = pachip->g_port.port_specific.g.gperror.csr;
+ pachip->g_port.port_specific.g.gperror.csr = jd;
+ mb();
+ pachip->g_port.port_specific.g.gperror.csr;
+}
+
+static inline void
+titan_pci_clr_err(void)
+{
+ titan_pci_clr_err_1(TITAN_pachip0);
+
+ if (TITAN_cchip->csc.csr & 1L<<14)
+ titan_pci_clr_err_1(TITAN_pachip1);
+}
+
+void
+titan_machine_check(unsigned long vector, unsigned long la_ptr,
+ struct pt_regs * regs)
+{
+ /* clear error before any reporting. */
+ mb();
+ draina();
+ titan_pci_clr_err();
+ wrmces(0x7);
+ mb();
+
+ process_mcheck_info(vector, la_ptr, regs, "TITAN",
+ mcheck_expected(smp_processor_id()));
+}
+
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/core_tsunami.c linux/arch/alpha/kernel/core_tsunami.c
--- v2.4.0-test1/linux/arch/alpha/kernel/core_tsunami.c Mon Mar 27 08:08:21 2000
+++ linux/arch/alpha/kernel/core_tsunami.c Mon Jun 19 17:59:32 2000
@@ -344,11 +344,13 @@
/*
* Set up the PCI to main memory translation windows.
*
+ * Note: Window 3 is scatter-gather only
+ *
* Window 0 is scatter-gather 8MB at 8MB (for isa)
- * Window 1 is scatter-gather 128MB at 3GB
- * Window 2 is direct access 1GB at 1GB
- * Window 3 is direct access 1GB at 2GB
- * ??? We ought to scale window 1 memory.
+ * Window 1 is direct access 1GB at 1GB
+ * Window 2 is direct access 1GB at 2GB
+ * Window 3 is scatter-gather 128MB at 3GB
+ * ??? We ought to scale window 3 memory.
*
* We must actually use 2 windows to direct-map the 2GB space,
* because of an idiot-syncrasy of the CYPRESS chip. It may
@@ -364,17 +366,17 @@
pchip->wsm[0].csr = (hose->sg_isa->size - 1) & 0xfff00000;
pchip->tba[0].csr = virt_to_phys(hose->sg_isa->ptes);
- pchip->wsba[1].csr = hose->sg_pci->dma_base | 3;
- pchip->wsm[1].csr = (hose->sg_pci->size - 1) & 0xfff00000;
- pchip->tba[1].csr = virt_to_phys(hose->sg_pci->ptes);
+ pchip->wsba[1].csr = 0x40000000 | 1;
+ pchip->wsm[1].csr = (0x40000000 - 1) & 0xfff00000;
+ pchip->tba[1].csr = 0;
- pchip->wsba[2].csr = 0x40000000 | 1;
+ pchip->wsba[2].csr = 0x80000000 | 1;
pchip->wsm[2].csr = (0x40000000 - 1) & 0xfff00000;
- pchip->tba[2].csr = 0;
+ pchip->tba[2].csr = 0x40000000;
- pchip->wsba[3].csr = 0x80000000 | 1;
- pchip->wsm[3].csr = (0x40000000 - 1) & 0xfff00000;
- pchip->tba[3].csr = 0x40000000;
+ pchip->wsba[3].csr = hose->sg_pci->dma_base | 3;
+ pchip->wsm[3].csr = (hose->sg_pci->size - 1) & 0xfff00000;
+ pchip->tba[3].csr = virt_to_phys(hose->sg_pci->ptes);
tsunami_pci_tbi(hose, 0, -1);
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/core_wildfire.c linux/arch/alpha/kernel/core_wildfire.c
--- v2.4.0-test1/linux/arch/alpha/kernel/core_wildfire.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/kernel/core_wildfire.c Mon Jun 19 17:59:32 2000
@@ -0,0 +1,668 @@
+/*
+ * linux/arch/alpha/kernel/core_wildfire.c
+ *
+ * Wildfire support.
+ *
+ * Copyright (C) 2000 Andrea Arcangeli SuSE
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+#define __EXTERN_INLINE inline
+#include
+#include
+#undef __EXTERN_INLINE
+
+#include "proto.h"
+#include "pci_impl.h"
+
+#define DEBUG_MCHECK 0 /* 0 = minimal, 1 = debug, 2 = debug+dump. */
+#define DEBUG_CONFIG 0
+#define DEBUG_DUMP_REGS 0
+#define DEBUG_DUMP_CONFIG 1
+
+#if DEBUG_CONFIG
+# define DBG_CFG(args) printk args
+#else
+# define DBG_CFG(args)
+#endif
+
+#if DEBUG_DUMP_REGS
+static void wildfire_dump_pci_regs(int qbbno, int hoseno);
+static void wildfire_dump_pca_regs(int qbbno, int pcano);
+static void wildfire_dump_qsa_regs(int qbbno);
+static void wildfire_dump_qsd_regs(int qbbno);
+static void wildfire_dump_iop_regs(int qbbno);
+static void wildfire_dump_gp_regs(int qbbno);
+#endif
+#if DEBUG_DUMP_CONFIG
+static void wildfire_dump_hardware_config(void);
+#endif
+
+unsigned char wildfire_hard_qbb_map[WILDFIRE_MAX_QBB];
+unsigned char wildfire_soft_qbb_map[WILDFIRE_MAX_QBB];
+#define QBB_MAP_EMPTY 0xff
+
+unsigned long wildfire_hard_qbb_mask;
+unsigned long wildfire_soft_qbb_mask;
+unsigned long wildfire_gp_mask;
+unsigned long wildfire_hs_mask;
+unsigned long wildfire_iop_mask;
+unsigned long wildfire_ior_mask;
+unsigned long wildfire_pca_mask;
+unsigned long wildfire_cpu_mask;
+unsigned long wildfire_mem_mask;
+
+void __init
+wildfire_init_hose(int qbbno, int hoseno)
+{
+ struct pci_controler *hose;
+ wildfire_pci *pci;
+
+ hose = alloc_pci_controler();
+ hose->io_space = alloc_resource();
+ hose->mem_space = alloc_resource();
+
+ /* This is for userland consumption. */
+ hose->sparse_mem_base = 0;
+ hose->sparse_io_base = 0;
+ hose->dense_mem_base = WILDFIRE_MEM(qbbno, hoseno);
+ hose->dense_io_base = WILDFIRE_IO(qbbno, hoseno);
+
+ hose->config_space_base = WILDFIRE_CONF(qbbno, hoseno);
+ hose->index = (qbbno << 3) + hoseno;
+
+ hose->io_space->start = WILDFIRE_IO(qbbno, hoseno) - WILDFIRE_IO_BIAS;
+ hose->io_space->end = hose->io_space->start + WILDFIRE_IO_SPACE - 1;
+ hose->io_space->name = pci_io_names[hoseno];
+ hose->io_space->flags = IORESOURCE_IO;
+
+ hose->mem_space->start = WILDFIRE_MEM(qbbno, hoseno)-WILDFIRE_MEM_BIAS;
+ hose->mem_space->end = hose->mem_space->start + 0xffffffff;
+ hose->mem_space->name = pci_mem_names[hoseno];
+ hose->mem_space->flags = IORESOURCE_MEM;
+
+ if (request_resource(&ioport_resource, hose->io_space) < 0)
+ printk(KERN_ERR "Failed to request IO on qbb %d hose %d\n",
+ qbbno, hoseno);
+ if (request_resource(&iomem_resource, hose->mem_space) < 0)
+ printk(KERN_ERR "Failed to request MEM on qbb %d hose %d\n",
+ qbbno, hoseno);
+
+#if DEBUG_DUMP_REGS
+ wildfire_dump_pci_regs(qbbno, hoseno);
+#endif
+
+ /*
+ * Set up the PCI to main memory translation windows.
+ *
+ * Note: Window 3 is scatter-gather only
+ *
+ * Window 0 is scatter-gather 8MB at 8MB (for isa)
+ * Window 1 is direct access 1GB at 1GB
+ * Window 2 is direct access 1GB at 2GB
+ * Window 3 is scatter-gather 128MB at 3GB
+ * ??? We ought to scale window 3 memory.
+ *
+ */
+ hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0);
+ hose->sg_pci = iommu_arena_new(hose, 0xc0000000, 0x08000000, 0);
+
+ pci = WILDFIRE_pci(qbbno, hoseno);
+
+ pci->pci_window[0].wbase.csr = hose->sg_isa->dma_base | 3;
+ pci->pci_window[0].wmask.csr = (hose->sg_isa->size - 1) & 0xfff00000;
+ pci->pci_window[0].tbase.csr = virt_to_phys(hose->sg_isa->ptes);
+
+ pci->pci_window[1].wbase.csr = 0x40000000 | 1;
+ pci->pci_window[1].wmask.csr = (0x40000000 -1) & 0xfff00000;
+ pci->pci_window[1].tbase.csr = 0;
+
+ pci->pci_window[2].wbase.csr = 0x80000000 | 1;
+ pci->pci_window[2].wmask.csr = (0x40000000 -1) & 0xfff00000;
+ pci->pci_window[2].tbase.csr = 0x40000000;
+
+ pci->pci_window[3].wbase.csr = hose->sg_pci->dma_base | 3;
+ pci->pci_window[3].wmask.csr = (hose->sg_pci->size - 1) & 0xfff00000;
+ pci->pci_window[3].tbase.csr = virt_to_phys(hose->sg_pci->ptes);
+
+ wildfire_pci_tbi(hose, 0, 0); /* Flush TLB at the end. */
+}
+
+void __init
+wildfire_init_pca(int qbbno, int pcano)
+{
+
+ /* Test for PCA existence first. */
+ if (!WILDFIRE_PCA_EXISTS(qbbno, pcano))
+ return;
+
+#if DEBUG_DUMP_REGS
+ wildfire_dump_pca_regs(qbbno, pcano);
+#endif
+
+ /* Do both hoses of the PCA. */
+ wildfire_init_hose(qbbno, (pcano << 1) + 0);
+ wildfire_init_hose(qbbno, (pcano << 1) + 1);
+}
+
+void __init
+wildfire_init_qbb(int qbbno)
+{
+ int pcano;
+
+ /* Test for QBB existence first. */
+ if (!WILDFIRE_QBB_EXISTS(qbbno))
+ return;
+
+#if DEBUG_DUMP_REGS
+ wildfire_dump_qsa_regs(qbbno);
+ wildfire_dump_qsd_regs(qbbno);
+ wildfire_dump_iop_regs(qbbno);
+ wildfire_dump_gp_regs(qbbno);
+#endif
+
+ /* Init all PCAs here. */
+ for (pcano = 0; pcano < WILDFIRE_PCA_PER_QBB; pcano++) {
+ wildfire_init_pca(qbbno, pcano);
+ }
+}
+
+void __init
+wildfire_hardware_probe(void)
+{
+ unsigned long temp;
+ unsigned int hard_qbb, soft_qbb;
+ wildfire_fast_qsd *fast = WILDFIRE_fast_qsd();
+ wildfire_qsd *qsd;
+ wildfire_qsa *qsa;
+ wildfire_iop *iop;
+ wildfire_gp *gp;
+ wildfire_ne *ne;
+ wildfire_fe *fe;
+ int i;
+
+ temp = fast->qsd_whami.csr;
+#if 0
+ printk(KERN_ERR "fast QSD_WHAMI at base %p is 0x%lx\n", fast, temp);
+#endif
+
+ hard_qbb = (temp >> 8) & 7;
+ soft_qbb = (temp >> 4) & 7;
+
+ /* Init the HW configuration variables. */
+ wildfire_hard_qbb_mask = (1 << hard_qbb);
+ wildfire_soft_qbb_mask = (1 << soft_qbb);
+
+ wildfire_gp_mask = 0;
+ wildfire_hs_mask = 0;
+ wildfire_iop_mask = 0;
+ wildfire_ior_mask = 0;
+ wildfire_pca_mask = 0;
+
+ wildfire_cpu_mask = 0;
+ wildfire_mem_mask = 0;
+
+ memset(wildfire_hard_qbb_map, QBB_MAP_EMPTY, WILDFIRE_MAX_QBB);
+ memset(wildfire_soft_qbb_map, QBB_MAP_EMPTY, WILDFIRE_MAX_QBB);
+
+ /* First, determine which QBBs are present. */
+ qsa = WILDFIRE_qsa(soft_qbb);
+
+ temp = qsa->qsa_qbb_id.csr;
+#if 0
+ printk(KERN_ERR "QSA_QBB_ID at base %p is 0x%lx\n", qsa, temp);
+#endif
+
+ if (temp & 0x40) /* Is there an HS? */
+ wildfire_hs_mask = 1;
+
+ if (temp & 0x20) { /* Is there a GP? */
+ gp = WILDFIRE_gp(soft_qbb);
+ temp = 0;
+ for (i = 0; i < 4; i++) {
+ temp |= gp->gpa_qbb_map[i].csr << (i * 8);
+#if 0
+ printk(KERN_ERR "GPA_QBB_MAP[%d] at base %p is 0x%lx\n",
+ i, gp, temp);
+#endif
+ }
+
+ for (hard_qbb = 0; hard_qbb < WILDFIRE_MAX_QBB; hard_qbb++) {
+ if (temp & 8) { /* Is there a QBB? */
+ soft_qbb = temp & 7;
+ wildfire_hard_qbb_mask |= (1 << hard_qbb);
+ wildfire_soft_qbb_mask |= (1 << soft_qbb);
+ }
+ temp >>= 4;
+ }
+ wildfire_gp_mask = wildfire_soft_qbb_mask;
+ }
+
+ /* Next determine each QBBs resources. */
+ for (soft_qbb = 0; soft_qbb < WILDFIRE_MAX_QBB; soft_qbb++) {
+ if (WILDFIRE_QBB_EXISTS(soft_qbb)) {
+ qsd = WILDFIRE_qsd(soft_qbb);
+ temp = qsd->qsd_whami.csr;
+#if 0
+ printk(KERN_ERR "QSD_WHAMI at base %p is 0x%lx\n", qsd, temp);
+#endif
+ hard_qbb = (temp >> 8) & 7;
+ wildfire_hard_qbb_map[hard_qbb] = soft_qbb;
+ wildfire_soft_qbb_map[soft_qbb] = hard_qbb;
+
+ qsa = WILDFIRE_qsa(soft_qbb);
+ temp = qsa->qsa_qbb_pop[0].csr;
+#if 0
+ printk(KERN_ERR "QSA_QBB_POP_0 at base %p is 0x%lx\n", qsa, temp);
+#endif
+ wildfire_cpu_mask |= ((temp >> 0) & 0xf) << (soft_qbb << 2);
+ wildfire_mem_mask |= ((temp >> 4) & 0xf) << (soft_qbb << 2);
+
+ temp = qsa->qsa_qbb_pop[1].csr;
+#if 0
+ printk(KERN_ERR "QSA_QBB_POP_1 at base %p is 0x%lx\n", qsa, temp);
+#endif
+ wildfire_iop_mask |= (1 << soft_qbb);
+ wildfire_ior_mask |= ((temp >> 4) & 0xf) << (soft_qbb << 2);
+
+ temp = qsa->qsa_qbb_id.csr;
+#if 0
+ printk(KERN_ERR "QSA_QBB_ID at %p is 0x%lx\n", qsa, temp);
+#endif
+ if (temp & 0x20)
+ wildfire_gp_mask |= (1 << soft_qbb);
+
+ /* Probe for PCA existence here. */
+ for (i = 0; i < WILDFIRE_PCA_PER_QBB; i++) {
+ iop = WILDFIRE_iop(soft_qbb);
+ ne = WILDFIRE_ne(soft_qbb, i);
+ fe = WILDFIRE_fe(soft_qbb, i);
+
+ if ((iop->iop_hose[i].init.csr & 1) == 1 &&
+ ((ne->ne_what_am_i.csr & 0xf00000300) == 0x100000300) &&
+ ((fe->fe_what_am_i.csr & 0xf00000300) == 0x100000200))
+ {
+ wildfire_pca_mask |= 1 << ((soft_qbb << 2) + i);
+ }
+ }
+
+ }
+ }
+#if DEBUG_DUMP_CONFIG
+ wildfire_dump_hardware_config();
+#endif
+}
+
+void __init
+wildfire_init_arch(void)
+{
+ int qbbno;
+
+ /* With multiple PCI buses, we play with I/O as physical addrs. */
+ ioport_resource.end = ~0UL;
+ iomem_resource.end = ~0UL;
+
+
+ /* Probe the hardware for info about configuration. */
+ wildfire_hardware_probe();
+
+ /* Now init all the found QBBs. */
+ for (qbbno = 0; qbbno < WILDFIRE_MAX_QBB; qbbno++) {
+ wildfire_init_qbb(qbbno);
+ }
+
+ /* Normal direct PCI DMA mapping. */
+ __direct_map_base = 0x40000000UL;
+ __direct_map_size = 0x80000000UL;
+}
+
+void
+wildfire_machine_check(unsigned long vector, unsigned long la_ptr,
+ struct pt_regs * regs)
+{
+ mb();
+ mb(); /* magic */
+ draina();
+ /* FIXME: clear pci errors */
+ wrmces(0x7);
+ mb();
+
+ process_mcheck_info(vector, la_ptr, regs, "WILDFIRE",
+ mcheck_expected(smp_processor_id()));
+}
+
+void
+wildfire_kill_arch(int mode)
+{
+}
+
+void
+wildfire_pci_tbi(struct pci_controler *hose, dma_addr_t start, dma_addr_t end)
+{
+ int qbbno = hose->index >> 3;
+ int hoseno = hose->index & 7;
+ wildfire_pci *pci = WILDFIRE_pci(qbbno, hoseno);
+
+ mb();
+ pci->pci_flush_tlb.csr; /* reading does the trick */
+}
+
+static int
+mk_conf_addr(struct pci_dev *dev, int where, unsigned long *pci_addr,
+ unsigned char *type1)
+{
+ struct pci_controler *hose = dev->sysdata;
+ unsigned long addr;
+ u8 bus = dev->bus->number;
+ u8 device_fn = dev->devfn;
+
+ DBG_CFG(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x, "
+ "pci_addr=0x%p, type1=0x%p)\n",
+ bus, device_fn, where, pci_addr, type1));
+
+ if (hose->first_busno == dev->bus->number)
+ bus = 0;
+ *type1 = (bus != 0);
+
+ addr = (bus << 16) | (device_fn << 8) | where;
+ addr |= hose->config_space_base;
+
+ *pci_addr = addr;
+ DBG_CFG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
+ return 0;
+}
+
+static int
+wildfire_read_config_byte(struct pci_dev *dev, int where, u8 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = __kernel_ldbu(*(vucp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+wildfire_read_config_word(struct pci_dev *dev, int where, u16 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = __kernel_ldwu(*(vusp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+wildfire_read_config_dword(struct pci_dev *dev, int where, u32 *value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *value = *(vuip)addr;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+wildfire_write_config_byte(struct pci_dev *dev, int where, u8 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ __kernel_stb(value, *(vucp)addr);
+ mb();
+ __kernel_ldbu(*(vucp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+wildfire_write_config_word(struct pci_dev *dev, int where, u16 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ __kernel_stw(value, *(vusp)addr);
+ mb();
+ __kernel_ldwu(*(vusp)addr);
+ return PCIBIOS_SUCCESSFUL;
+}
+
+static int
+wildfire_write_config_dword(struct pci_dev *dev, int where, u32 value)
+{
+ unsigned long addr;
+ unsigned char type1;
+
+ if (mk_conf_addr(dev, where, &addr, &type1))
+ return PCIBIOS_DEVICE_NOT_FOUND;
+
+ *(vuip)addr = value;
+ mb();
+ *(vuip)addr;
+ return PCIBIOS_SUCCESSFUL;
+}
+
+struct pci_ops wildfire_pci_ops =
+{
+ read_byte: wildfire_read_config_byte,
+ read_word: wildfire_read_config_word,
+ read_dword: wildfire_read_config_dword,
+ write_byte: wildfire_write_config_byte,
+ write_word: wildfire_write_config_word,
+ write_dword: wildfire_write_config_dword
+};
+
+#if DEBUG_DUMP_REGS
+
+static void __init
+wildfire_dump_pci_regs(int qbbno, int hoseno)
+{
+ wildfire_pci *pci = WILDFIRE_pci(qbbno, hoseno);
+ int i;
+
+ printk(KERN_ERR "PCI registers for QBB %d hose %d (%p)\n",
+ qbbno, hoseno, pci);
+
+ printk(KERN_ERR " PCI_IO_ADDR_EXT: 0x%16lx\n",
+ pci->pci_io_addr_ext.csr);
+ printk(KERN_ERR " PCI_CTRL: 0x%16lx\n", pci->pci_ctrl.csr);
+ printk(KERN_ERR " PCI_ERR_SUM: 0x%16lx\n", pci->pci_err_sum.csr);
+ printk(KERN_ERR " PCI_ERR_ADDR: 0x%16lx\n", pci->pci_err_addr.csr);
+ printk(KERN_ERR " PCI_STALL_CNT: 0x%16lx\n", pci->pci_stall_cnt.csr);
+ printk(KERN_ERR " PCI_PEND_INT: 0x%16lx\n", pci->pci_pend_int.csr);
+ printk(KERN_ERR " PCI_SENT_INT: 0x%16lx\n", pci->pci_sent_int.csr);
+
+ printk(KERN_ERR " DMA window registers for QBB %d hose %d (%p)\n",
+ qbbno, hoseno, pci);
+ for (i = 0; i < 4; i++) {
+ printk(KERN_ERR " window %d: 0x%16lx 0x%16lx 0x%16lx\n", i,
+ pci->pci_window[i].wbase.csr,
+ pci->pci_window[i].wmask.csr,
+ pci->pci_window[i].tbase.csr);
+ }
+ printk(KERN_ERR "\n");
+}
+
+static void __init
+wildfire_dump_pca_regs(int qbbno, int pcano)
+{
+ wildfire_pca *pca = WILDFIRE_pca(qbbno, pcano);
+ int i;
+
+ printk(KERN_ERR "PCA registers for QBB %d PCA %d (%p)\n",
+ qbbno, pcano, pca);
+
+ printk(KERN_ERR " PCA_WHAT_AM_I: 0x%16lx\n", pca->pca_what_am_i.csr);
+ printk(KERN_ERR " PCA_ERR_SUM: 0x%16lx\n", pca->pca_err_sum.csr);
+ printk(KERN_ERR " PCA_PEND_INT: 0x%16lx\n", pca->pca_pend_int.csr);
+ printk(KERN_ERR " PCA_SENT_INT: 0x%16lx\n", pca->pca_sent_int.csr);
+ printk(KERN_ERR " PCA_STDIO_EL: 0x%16lx\n",
+ pca->pca_stdio_edge_level.csr);
+
+ printk(KERN_ERR " PCA target registers for QBB %d PCA %d (%p)\n",
+ qbbno, pcano, pca);
+ for (i = 0; i < 4; i++) {
+ printk(KERN_ERR " target %d: 0x%16lx 0x%16lx\n", i,
+ pca->pca_int[i].target.csr,
+ pca->pca_int[i].enable.csr);
+ }
+
+ printk(KERN_ERR "\n");
+}
+
+static void __init
+wildfire_dump_qsa_regs(int qbbno)
+{
+ wildfire_qsa *qsa = WILDFIRE_qsa(qbbno);
+ int i;
+
+ printk(KERN_ERR "QSA registers for QBB %d (%p)\n", qbbno, qsa);
+
+ printk(KERN_ERR " QSA_QBB_ID: 0x%16lx\n", qsa->qsa_qbb_id.csr);
+ printk(KERN_ERR " QSA_PORT_ENA: 0x%16lx\n", qsa->qsa_port_ena.csr);
+ printk(KERN_ERR " QSA_REF_INT: 0x%16lx\n", qsa->qsa_ref_int.csr);
+
+ for (i = 0; i < 5; i++)
+ printk(KERN_ERR " QSA_CONFIG_%d: 0x%16lx\n",
+ i, qsa->qsa_config[i].csr);
+
+ for (i = 0; i < 2; i++)
+ printk(KERN_ERR " QSA_QBB_POP_%d: 0x%16lx\n",
+ i, qsa->qsa_qbb_pop[0].csr);
+
+ printk(KERN_ERR "\n");
+}
+
+static void __init
+wildfire_dump_qsd_regs(int qbbno)
+{
+ wildfire_qsd *qsd = WILDFIRE_qsd(qbbno);
+
+ printk(KERN_ERR "QSD registers for QBB %d (%p)\n", qbbno, qsd);
+
+ printk(KERN_ERR " QSD_WHAMI: 0x%16lx\n", qsd->qsd_whami.csr);
+ printk(KERN_ERR " QSD_REV: 0x%16lx\n", qsd->qsd_rev.csr);
+ printk(KERN_ERR " QSD_PORT_PRESENT: 0x%16lx\n",
+ qsd->qsd_port_present.csr);
+ printk(KERN_ERR " QSD_PORT_ACTUVE: 0x%16lx\n",
+ qsd->qsd_port_active.csr);
+ printk(KERN_ERR " QSD_FAULT_ENA: 0x%16lx\n",
+ qsd->qsd_fault_ena.csr);
+ printk(KERN_ERR " QSD_CPU_INT_ENA: 0x%16lx\n",
+ qsd->qsd_cpu_int_ena.csr);
+ printk(KERN_ERR " QSD_MEM_CONFIG: 0x%16lx\n",
+ qsd->qsd_mem_config.csr);
+ printk(KERN_ERR " QSD_ERR_SUM: 0x%16lx\n",
+ qsd->qsd_err_sum.csr);
+
+ printk(KERN_ERR "\n");
+}
+
+static void __init
+wildfire_dump_iop_regs(int qbbno)
+{
+ wildfire_iop *iop = WILDFIRE_iop(qbbno);
+ int i;
+
+ printk(KERN_ERR "IOP registers for QBB %d (%p)\n", qbbno, iop);
+
+ printk(KERN_ERR " IOA_CONFIG: 0x%16lx\n", iop->ioa_config.csr);
+ printk(KERN_ERR " IOD_CONFIG: 0x%16lx\n", iop->iod_config.csr);
+ printk(KERN_ERR " IOP_SWITCH_CREDITS: 0x%16lx\n",
+ iop->iop_switch_credits.csr);
+ printk(KERN_ERR " IOP_HOSE_CREDITS: 0x%16lx\n",
+ iop->iop_hose_credits.csr);
+
+ for (i = 0; i < 4; i++)
+ printk(KERN_ERR " IOP_HOSE_%d_INIT: 0x%16lx\n",
+ i, iop->iop_hose[i].init.csr);
+ for (i = 0; i < 4; i++)
+ printk(KERN_ERR " IOP_DEV_INT_TARGET_%d: 0x%16lx\n",
+ i, iop->iop_dev_int[i].target.csr);
+
+ printk(KERN_ERR "\n");
+}
+
+static void __init
+wildfire_dump_gp_regs(int qbbno)
+{
+ wildfire_gp *gp = WILDFIRE_gp(qbbno);
+ int i;
+
+ printk(KERN_ERR "GP registers for QBB %d (%p)\n", qbbno, gp);
+ for (i = 0; i < 4; i++)
+ printk(KERN_ERR " GPA_QBB_MAP_%d: 0x%16lx\n",
+ i, gp->gpa_qbb_map[i].csr);
+
+ printk(KERN_ERR " GPA_MEM_POP_MAP: 0x%16lx\n",
+ gp->gpa_mem_pop_map.csr);
+ printk(KERN_ERR " GPA_SCRATCH: 0x%16lx\n", gp->gpa_scratch.csr);
+ printk(KERN_ERR " GPA_DIAG: 0x%16lx\n", gp->gpa_diag.csr);
+ printk(KERN_ERR " GPA_CONFIG_0: 0x%16lx\n", gp->gpa_config_0.csr);
+ printk(KERN_ERR " GPA_INIT_ID: 0x%16lx\n", gp->gpa_init_id.csr);
+ printk(KERN_ERR " GPA_CONFIG_2: 0x%16lx\n", gp->gpa_config_2.csr);
+
+ printk(KERN_ERR "\n");
+}
+#endif /* DUMP_REGS */
+
+#if DEBUG_DUMP_CONFIG
+static void __init
+wildfire_dump_hardware_config(void)
+{
+ int i;
+
+ printk(KERN_ERR "Probed Hardware Configuration\n");
+
+ printk(KERN_ERR " hard_qbb_mask: 0x%16lx\n", wildfire_hard_qbb_mask);
+ printk(KERN_ERR " soft_qbb_mask: 0x%16lx\n", wildfire_soft_qbb_mask);
+
+ printk(KERN_ERR " gp_mask: 0x%16lx\n", wildfire_gp_mask);
+ printk(KERN_ERR " hs_mask: 0x%16lx\n", wildfire_hs_mask);
+ printk(KERN_ERR " iop_mask: 0x%16lx\n", wildfire_iop_mask);
+ printk(KERN_ERR " ior_mask: 0x%16lx\n", wildfire_ior_mask);
+ printk(KERN_ERR " pca_mask: 0x%16lx\n", wildfire_pca_mask);
+
+ printk(KERN_ERR " cpu_mask: 0x%16lx\n", wildfire_cpu_mask);
+ printk(KERN_ERR " mem_mask: 0x%16lx\n", wildfire_mem_mask);
+
+ printk(" hard_qbb_map: ");
+ for (i = 0; i < WILDFIRE_MAX_QBB; i++)
+ if (wildfire_hard_qbb_map[i] == QBB_MAP_EMPTY)
+ printk("--- ");
+ else
+ printk("%3d ", wildfire_hard_qbb_map[i]);
+ printk("\n");
+
+ printk(" soft_qbb_map: ");
+ for (i = 0; i < WILDFIRE_MAX_QBB; i++)
+ if (wildfire_soft_qbb_map[i] == QBB_MAP_EMPTY)
+ printk("--- ");
+ else
+ printk("%3d ", wildfire_soft_qbb_map[i]);
+ printk("\n");
+}
+#endif /* DUMP_CONFIG */
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- v2.4.0-test1/linux/arch/alpha/kernel/entry.S Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/entry.S Mon Jun 19 17:59:32 2000
@@ -34,11 +34,12 @@
#define TASK_EXEC_DOMAIN 32
#define TASK_NEED_RESCHED 40
#define TASK_PROCESSOR 100
+#define TASK_PTRACE 104
/*
* task flags (must match include/linux/sched.h):
*/
-#define PF_PTRACED 0x00000010
+#define PT_PTRACED 0x00000001
#define CLONE_VM 0x00000100
@@ -557,10 +558,10 @@
lda $5,sys_call_table
lda $27,sys_ni_syscall
cmpult $0,$4,$4
- ldq $3,TASK_FLAGS($8)
+ ldq $3,TASK_PTRACE($8)
stq $17,SP_OFF+32($30)
s8addq $0,$5,$5
- and $3,PF_PTRACED,$3
+ and $3,PT_PTRACED,$3
stq $18,SP_OFF+40($30)
bne $3,strace
beq $4,1f
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c
--- v2.4.0-test1/linux/arch/alpha/kernel/irq.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/irq.c Wed Jun 21 22:30:59 2000
@@ -240,7 +240,7 @@
return;
while (((cpu_present_mask >> cpu) & 1) == 0)
- cpu = (cpu < NR_CPUS ? cpu + 1 : 0);
+ cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
last_cpu = cpu;
irq_affinity[irq] = 1UL << cpu;
@@ -520,8 +520,10 @@
p += sprintf(p, " ");
for (i = 0; i < smp_num_cpus; i++)
p += sprintf(p, "CPU%d ", i);
+#ifdef DO_BROADCAST_INTS
for (i = 0; i < smp_num_cpus; i++)
p += sprintf(p, "TRY%d ", i);
+#endif
*p++ = '\n';
#endif
@@ -536,9 +538,11 @@
for (j = 0; j < smp_num_cpus; j++)
p += sprintf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
+#ifdef DO_BROADCAST_INTS
for (j = 0; j < smp_num_cpus; j++)
p += sprintf(p, "%10lu ",
irq_attempt(cpu_logical_map(j), i));
+#endif
#endif
p += sprintf(p, " %14s", irq_desc[i].handler->typename);
p += sprintf(p, " %c%s",
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/irq_alpha.c linux/arch/alpha/kernel/irq_alpha.c
--- v2.4.0-test1/linux/arch/alpha/kernel/irq_alpha.c Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/irq_alpha.c Mon Jun 19 17:59:32 2000
@@ -105,8 +105,18 @@
void __init
init_IRQ(void)
{
- alpha_mv.init_irq();
+ /* Uh, this really MUST come first, just in case
+ * the platform init_irq() causes interrupts/mchecks
+ * (as is the case with RAWHIDE, at least).
+ */
wrent(entInt, 0);
+
+ alpha_mv.init_irq();
+
+ /* If we had wanted SRM console printk echoing early, undo it now. */
+ if (alpha_using_srm && srmcons_output) {
+ unregister_srm_console();
+ }
}
/*
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/irq_i8259.c linux/arch/alpha/kernel/irq_i8259.c
--- v2.4.0-test1/linux/arch/alpha/kernel/irq_i8259.c Tue Apr 11 15:09:11 2000
+++ linux/arch/alpha/kernel/irq_i8259.c Mon Jun 19 17:59:32 2000
@@ -126,6 +126,8 @@
# define IACK_SC CIA_IACK_SC
#elif defined(CONFIG_ALPHA_PYXIS)
# define IACK_SC PYXIS_IACK_SC
+#elif defined(CONFIG_ALPHA_TITAN)
+# define IACK_SC TITAN_IACK_SC
#elif defined(CONFIG_ALPHA_TSUNAMI)
# define IACK_SC TSUNAMI_IACK_SC
#elif defined(CONFIG_ALPHA_POLARIS)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/machvec_impl.h linux/arch/alpha/kernel/machvec_impl.h
--- v2.4.0-test1/linux/arch/alpha/kernel/machvec_impl.h Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/machvec_impl.h Wed Jun 21 22:30:59 2000
@@ -9,12 +9,14 @@
#include
#include
-/* Whee. IRONGATE, POLARIS and TSUNAMI don't have an HAE. Fix things up for
- the GENERIC kernel by defining the HAE address to be that of the cache.
- Now we can read and write it as we like. ;-) */
+/* Whee. IRONGATE, POLARIS, TSUNAMI, TITAN, and WILDFIRE don't have an HAE.
+ Fix things up for the GENERIC kernel by defining the HAE address
+ to be that of the cache. Now we can read and write it as we like. ;-) */
#define IRONGATE_HAE_ADDRESS (&alpha_mv.hae_cache)
#define POLARIS_HAE_ADDRESS (&alpha_mv.hae_cache)
#define TSUNAMI_HAE_ADDRESS (&alpha_mv.hae_cache)
+#define TITAN_HAE_ADDRESS (&alpha_mv.hae_cache)
+#define WILDFIRE_HAE_ADDRESS (&alpha_mv.hae_cache)
#if CIA_ONE_HAE_WINDOW
#define CIA_HAE_ADDRESS (&alpha_mv.hae_cache)
@@ -28,6 +30,7 @@
seems like such a pain. Define this to get things to compile. */
#define JENSEN_IACK_SC 1
#define T2_IACK_SC 1
+#define WILDFIRE_IACK_SC 1 /* FIXME */
/*
@@ -91,6 +94,8 @@
#define DO_POLARIS_IO IO(POLARIS,polaris)
#define DO_T2_IO IO(T2,t2)
#define DO_TSUNAMI_IO IO(TSUNAMI,tsunami)
+#define DO_TITAN_IO IO(TITAN,titan)
+#define DO_WILDFIRE_IO IO(WILDFIRE,wildfire)
#define DO_PYXIS_IO IO_LITE(CIA,cia_bwx), \
pci_ops: &CAT(cia,_pci_ops)
@@ -107,6 +112,8 @@
#define DO_POLARIS_BUS BUS(polaris)
#define DO_T2_BUS BUS(t2)
#define DO_TSUNAMI_BUS BUS(tsunami)
+#define DO_TITAN_BUS BUS(titan)
+#define DO_WILDFIRE_BUS BUS(wildfire)
/*
@@ -114,7 +121,7 @@
* all but one of which we want to go away. In a non-GENERIC kernel,
* we want only one, ever.
*
- * Accomplish this in the GENERIC kernel by puting all of the vectors
+ * Accomplish this in the GENERIC kernel by putting all of the vectors
* in the .init.data section where they'll go away. We'll copy the
* one we want to the real alpha_mv vector in setup_arch.
*
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c
--- v2.4.0-test1/linux/arch/alpha/kernel/osf_sys.c Tue May 23 15:31:32 2000
+++ linux/arch/alpha/kernel/osf_sys.c Mon Jun 19 17:59:32 2000
@@ -230,7 +230,6 @@
struct file *file = NULL;
unsigned long ret = -EBADF;
- down(¤t->mm->mmap_sem);
lock_kernel();
#if 0
if (flags & (_MAP_HASSEMAPHORE | _MAP_INHERIT | _MAP_UNALIGNED))
@@ -243,12 +242,13 @@
goto out;
}
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
+ down(¤t->mm->mmap_sem);
ret = do_mmap(file, addr, len, prot, flags, off);
+ up(¤t->mm->mmap_sem);
if (file)
fput(file);
out:
unlock_kernel();
- up(¤t->mm->mmap_sem);
return ret;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/pci.c linux/arch/alpha/kernel/pci.c
--- v2.4.0-test1/linux/arch/alpha/kernel/pci.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/pci.c Wed Jun 21 22:30:59 2000
@@ -25,11 +25,13 @@
*/
const char *const pci_io_names[] = {
- "PCI IO bus 0", "PCI IO bus 1", "PCI IO bus 2", "PCI IO bus 3"
+ "PCI IO bus 0", "PCI IO bus 1", "PCI IO bus 2", "PCI IO bus 3",
+ "PCI IO bus 4", "PCI IO bus 5", "PCI IO bus 6", "PCI IO bus 7"
};
const char *const pci_mem_names[] = {
- "PCI mem bus 0", "PCI mem bus 1", "PCI mem bus 2", "PCI mem bus 3"
+ "PCI mem bus 0", "PCI mem bus 1", "PCI mem bus 2", "PCI mem bus 3",
+ "PCI mem bus 4", "PCI mem bus 5", "PCI mem bus 6", "PCI mem bus 7"
};
const char pci_hae0_name[] = "HAE0";
@@ -266,6 +268,7 @@
struct pci_controler *hose = (struct pci_controler *) bus->sysdata;
struct list_head *ln;
+ /* ???? */
bus->resource[0] = hose->io_space;
bus->resource[1] = hose->mem_space;
@@ -291,15 +294,14 @@
u32 reg;
if (resource < PCI_ROM_RESOURCE)
- where = PCI_BASE_ADDRESS_0 + (resource * 4);
+ where = PCI_BASE_ADDRESS_0 + (resource * 4);
else if (resource == PCI_ROM_RESOURCE)
where = dev->rom_base_reg;
else {
- /* Don't update non-standard resources here */
- return;
+ return; /* Don't update non-standard resources here. */
}
- /* Point root at the hose root */
+ /* Point root at the hose root. */
if (res->flags & IORESOURCE_IO)
root = hose->io_space;
if (res->flags & IORESOURCE_MEM)
@@ -424,12 +426,17 @@
inner.mem_end -= inner.mem_start;
/* Align the sizes up by bridge rules */
- inner.io_end = ROUND_UP(inner.io_end, 4*1024);
- inner.mem_end = ROUND_UP(inner.mem_end, 1*1024*1024);
+ inner.io_end = ROUND_UP(inner.io_end, 4*1024) - 1;
+ inner.mem_end = ROUND_UP(inner.mem_end, 1*1024*1024) - 1;
/* Adjust the bridge's allocation requirements */
bridge->resource[0].end = bridge->resource[0].start + inner.io_end;
bridge->resource[1].end = bridge->resource[1].start + inner.mem_end;
+
+ bridge->resource[PCI_BRIDGE_RESOURCES].end =
+ bridge->resource[PCI_BRIDGE_RESOURCES].start + inner.io_end;
+ bridge->resource[PCI_BRIDGE_RESOURCES+1].end =
+ bridge->resource[PCI_BRIDGE_RESOURCES+1].start + inner.mem_end;
/* adjust parent's resource requirements */
if (outer) {
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/pci_iommu.c linux/arch/alpha/kernel/pci_iommu.c
--- v2.4.0-test1/linux/arch/alpha/kernel/pci_iommu.c Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/pci_iommu.c Wed Jun 21 22:30:59 2000
@@ -97,8 +97,8 @@
}
if (i < n) {
- /* Reached the end. Flush the TLB and restart the
- search from the beginning. */
+ /* Reached the end. Flush the TLB and restart the
+ search from the beginning. */
alpha_mv.mv_pci_tbi(arena->hose, 0, -1);
p = 0, i = 0;
@@ -139,7 +139,7 @@
p[i] = 0;
}
-/* Map a single buffer of the indicate size for PCI DMA in streaming
+/* Map a single buffer of the indicated size for PCI DMA in streaming
mode. The 32-bit PCI bus mastering address to use is returned.
Once the device is given the dma address, the device owns this memory
until either pci_unmap_single or pci_dma_sync_single is performed. */
@@ -250,9 +250,12 @@
npages = calc_npages((dma_addr & ~PAGE_MASK) + size);
iommu_arena_free(arena, dma_ofs, npages);
- /* If we're freeing ptes above the `next_entry' pointer, they
- may have snuck back into the TLB since the last wrap flush.
- We need to flush the TLB before reallocating these. */
+
+ /*
+ If we're freeing ptes above the `next_entry' pointer (they
+ may have snuck back into the TLB since the last wrap flush),
+ we need to flush the TLB before reallocating the latter.
+ */
if (dma_ofs >= arena->next_entry)
alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1);
@@ -574,9 +577,11 @@
if (fend < tend) fend = tend;
}
- /* If we're freeing ptes above the `next_entry' pointer, they
- may have snuck back into the TLB since the last wrap flush.
- We need to flush the TLB before reallocating these. */
+ /*
+ If we're freeing ptes above the `next_entry' pointer (they
+ may have snuck back into the TLB since the last wrap flush),
+ we need to flush the TLB before reallocating the latter.
+ */
if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry)
alpha_mv.mv_pci_tbi(hose, fbeg, fend);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/proto.h linux/arch/alpha/kernel/proto.h
--- v2.4.0-test1/linux/arch/alpha/kernel/proto.h Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/proto.h Mon Jun 19 17:59:32 2000
@@ -61,6 +61,13 @@
extern void t2_machine_check(u64, u64, struct pt_regs *);
#define t2_pci_tbi ((void *)0)
+/* core_titan.c */
+extern struct pci_ops titan_pci_ops;
+extern void titan_init_arch(void);
+extern void titan_kill_arch(int);
+extern void titan_machine_check(u64, u64, struct pt_regs *);
+extern void titan_pci_tbi(struct pci_controler *, dma_addr_t, dma_addr_t);
+
/* core_tsunami.c */
extern struct pci_ops tsunami_pci_ops;
extern void tsunami_init_arch(void);
@@ -68,9 +75,19 @@
extern void tsunami_machine_check(u64, u64, struct pt_regs *);
extern void tsunami_pci_tbi(struct pci_controler *, dma_addr_t, dma_addr_t);
+/* core_wildfire.c */
+extern struct pci_ops wildfire_pci_ops;
+extern void wildfire_init_arch(void);
+extern void wildfire_kill_arch(int);
+extern void wildfire_machine_check(u64, u64, struct pt_regs *);
+extern void wildfire_pci_tbi(struct pci_controler *, dma_addr_t, dma_addr_t);
+
/* setup.c */
extern unsigned long srm_hae;
extern int boot_cpuid;
+extern int srmcons_output;
+extern void register_srm_console(void);
+extern void unregister_srm_console(void);
/* smp.c */
extern void setup_smp(void);
@@ -129,7 +146,8 @@
extern void die_if_kernel(char *, struct pt_regs *, long, unsigned long *);
/* ../mm/init.c */
-void srm_paging_stop(void);
+extern void switch_to_system_map(void);
+extern void srm_paging_stop(void);
/* irq.c */
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/ptrace.c linux/arch/alpha/kernel/ptrace.c
--- v2.4.0-test1/linux/arch/alpha/kernel/ptrace.c Mon Mar 27 08:08:21 2000
+++ linux/arch/alpha/kernel/ptrace.c Mon Jun 19 17:59:32 2000
@@ -246,18 +246,23 @@
ret = -EPERM;
if (request == PTRACE_TRACEME) {
/* are we already being traced? */
- if (current->flags & PF_PTRACED)
- goto out;
- /* set the ptrace bit in the process flags. */
- current->flags |= PF_PTRACED;
+ if (current->ptrace & PT_PTRACED)
+ goto out_notsk;
+ /* set the ptrace bit in the process ptrace flags. */
+ current->ptrace |= PT_PTRACED;
ret = 0;
- goto out;
+ goto out_notsk;
}
if (pid == 1) /* you may not mess with init */
- goto out;
+ goto out_notsk;
ret = -ESRCH;
- if (!(child = find_task_by_pid(pid)))
- goto out;
+ read_lock(&tasklist_lock);
+ child = find_task_by_pid(pid);
+ if (child)
+ get_task_struct(child);
+ read_unlock(&tasklist_lock);
+ if (!child)
+ goto out_notsk;
if (request == PTRACE_ATTACH) {
ret = -EPERM;
if (child == current)
@@ -273,20 +278,22 @@
&& !capable(CAP_SYS_PTRACE))
goto out;
/* the same process cannot be attached many times */
- if (child->flags & PF_PTRACED)
+ if (child->ptrace & PT_PTRACED)
goto out;
- child->flags |= PF_PTRACED;
+ child->ptrace |= PT_PTRACED;
+ write_lock_irq(&tasklist_lock);
if (child->p_pptr != current) {
REMOVE_LINKS(child);
child->p_pptr = current;
SET_LINKS(child);
}
+ write_unlock_irq(&tasklist_lock);
send_sig(SIGSTOP, child, 1);
ret = 0;
goto out;
}
ret = -ESRCH;
- if (!(child->flags & PF_PTRACED)) {
+ if (!(child->ptrace & PT_PTRACED)) {
DBG(DBG_MEM, ("child not traced\n"));
goto out;
}
@@ -343,9 +350,9 @@
if ((unsigned long) data > _NSIG)
goto out;
if (request == PTRACE_SYSCALL)
- child->flags |= PF_TRACESYS;
+ child->ptrace |= PT_TRACESYS;
else
- child->flags &= ~PF_TRACESYS;
+ child->ptrace &= ~PT_TRACESYS;
child->exit_code = data;
wake_up_process(child);
/* make sure single-step breakpoint is gone. */
@@ -373,7 +380,7 @@
if ((unsigned long) data > _NSIG)
goto out;
child->thread.bpt_nsaved = -1; /* mark single-stepping */
- child->flags &= ~PF_TRACESYS;
+ child->ptrace &= ~PT_TRACESYS;
wake_up_process(child);
child->exit_code = data;
/* give it a chance to run. */
@@ -384,12 +391,14 @@
ret = -EIO;
if ((unsigned long) data > _NSIG)
goto out;
- child->flags &= ~(PF_PTRACED|PF_TRACESYS);
+ child->ptrace &= ~(PT_PTRACED|PT_TRACESYS);
wake_up_process(child);
child->exit_code = data;
+ write_lock_irq(&tasklist_lock);
REMOVE_LINKS(child);
child->p_pptr = child->p_opptr;
SET_LINKS(child);
+ write_unlock_irq(&tasklist_lock);
/* make sure single-step breakpoint is gone. */
ptrace_cancel_bpt(child);
ret = 0;
@@ -400,6 +409,8 @@
goto out;
}
out:
+ free_task_struct(child);
+ out_notsk:
unlock_kernel();
return ret;
}
@@ -407,8 +418,8 @@
asmlinkage void
syscall_trace(void)
{
- if ((current->flags & (PF_PTRACED|PF_TRACESYS))
- != (PF_PTRACED|PF_TRACESYS))
+ if ((current->ptrace & (PT_PTRACED|PT_TRACESYS))
+ != (PT_PTRACED|PT_TRACESYS))
return;
current->exit_code = SIGTRAP;
current->state = TASK_STOPPED;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/setup.c linux/arch/alpha/kernel/setup.c
--- v2.4.0-test1/linux/arch/alpha/kernel/setup.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/setup.c Mon Jun 19 17:59:32 2000
@@ -34,6 +34,15 @@
#include
#endif
+#include
+extern struct notifier_block *panic_notifier_list;
+static int alpha_panic_event(struct notifier_block *, unsigned long, void *);
+static struct notifier_block alpha_panic_block = {
+ alpha_panic_event,
+ NULL,
+ INT_MAX /* try to do it first */
+};
+
#include
#include
#include
@@ -42,6 +51,7 @@
#include
#include
#include
+#include
#include "proto.h"
#include "pci_impl.h"
@@ -53,6 +63,17 @@
/* Which processor we booted from. */
int boot_cpuid;
+/* Using SRM callbacks for initial console output. This works from
+ setup_arch() time through the end of init_IRQ(), as those places
+ are under our control.
+
+ By default, OFF; set it with a bootcommand arg of "srmcons".
+*/
+int srmcons_output = 0;
+
+/* Enforce a memory size limit; useful for testing. By default, none. */
+unsigned long mem_size_limit = 0;
+
#ifdef CONFIG_ALPHA_GENERIC
struct alpha_machine_vector alpha_mv;
int alpha_using_srm;
@@ -139,6 +160,7 @@
WEAK(noritake_primo_mv);
WEAK(p2k_mv);
WEAK(pc164_mv);
+WEAK(privateer_mv);
WEAK(rawhide_mv);
WEAK(ruffian_mv);
WEAK(rx164_mv);
@@ -147,6 +169,7 @@
WEAK(sx164_mv);
WEAK(takara_mv);
WEAK(webbrick_mv);
+WEAK(wildfire_mv);
WEAK(xl_mv);
WEAK(xlt_mv);
@@ -202,14 +225,33 @@
for ((cluster) = (memdesc)->cluster, (i) = 0; \
(i) < (memdesc)->numclusters; (i)++, (cluster)++)
+static unsigned long __init
+get_mem_size_limit(char *s)
+{
+ unsigned long end = 0;
+ char *from = s;
+
+ end = simple_strtoul(from, &from, 0);
+ if ( *from == 'K' || *from == 'k' ) {
+ end = end << 10;
+ from++;
+ } else if ( *from == 'M' || *from == 'm' ) {
+ end = end << 20;
+ from++;
+ } else if ( *from == 'G' || *from == 'g' ) {
+ end = end << 30;
+ from++;
+ }
+ return end >> PAGE_SHIFT; /* Return the PFN of the limit. */
+}
+
static void __init
-setup_memory(void)
+setup_memory(void * kernel_end)
{
struct memclust_struct * cluster;
struct memdesc_struct * memdesc;
unsigned long start_pfn, bootmap_size, bootmap_pages, bootmap_start;
unsigned long start, end;
- extern char _end[];
int i;
/* Find free clusters, and init and free the bootmem accordingly. */
@@ -232,15 +274,23 @@
max_low_pfn = end;
}
- /* Find the end of the kernel memory. */
- start_pfn = PFN_UP(virt_to_phys(_end));
+ if (mem_size_limit && max_low_pfn >= mem_size_limit)
+ {
+ printk("setup: forcing memory size to %ldK (from %ldK).\n",
+ mem_size_limit << (PAGE_SHIFT - 10),
+ max_low_pfn << (PAGE_SHIFT - 10));
+ max_low_pfn = mem_size_limit;
+ }
+
+ /* Find the end of the memory used by the kernel. */
+ start_pfn = PFN_UP(virt_to_phys(kernel_end));
bootmap_start = -1;
try_again:
if (max_low_pfn <= start_pfn)
panic("not enough memory to boot");
- /* We need to know how many physically contigous pages
+ /* We need to know how many physically contiguous pages
we'll need for the bootmap. */
bootmap_pages = bootmem_bootmap_pages(max_low_pfn);
@@ -307,14 +357,14 @@
printk("Initial ramdisk at: 0x%p (%lu bytes)\n",
(void *) initrd_start, INITRD_SIZE);
- if (initrd_end > phys_to_virt(PFN_PHYS(max_low_pfn))) {
+ if ((void *)initrd_end > phys_to_virt(PFN_PHYS(max_low_pfn))) {
printk("initrd extends beyond end of memory "
- "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
+ "(0x%08lx > 0x%p)\ndisabling initrd\n",
initrd_end,
phys_to_virt(PFN_PHYS(max_low_pfn)));
initrd_start = initrd_end = 0;
} else {
- reserve_bootmem(virt_to_phys(initrd_start),
+ reserve_bootmem(virt_to_phys((void *)initrd_start),
INITRD_SIZE);
}
}
@@ -346,20 +396,98 @@
#undef PFN_PHYS
#undef PFN_MAX
+#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM)
+/*
+ * Manage the SRM callbacks as a "console".
+ */
+static struct console srmcons;
+
+void __init register_srm_console(void)
+{
+ register_console(&srmcons);
+}
+
+void __init unregister_srm_console(void)
+{
+ unregister_console(&srmcons);
+}
+
+static void srm_console_write(struct console *co, const char *s,
+ unsigned count)
+{
+ srm_printk(s);
+}
+
+static kdev_t srm_console_device(struct console *c)
+{
+ /* Huh? */
+ return MKDEV(TTY_MAJOR, 64 + c->index);
+}
+
+static int srm_console_wait_key(struct console *co)
+{
+ /* Huh? */
+ return 1;
+}
+
+static int __init srm_console_setup(struct console *co, char *options)
+{
+ return 1;
+}
+
+static struct console srmcons = {
+ "srm0",
+ srm_console_write,
+ NULL,
+ srm_console_device,
+ srm_console_wait_key,
+ NULL,
+ srm_console_setup,
+ CON_PRINTBUFFER | CON_ENABLED, /* fake it out */
+ -1,
+ 0,
+ NULL
+};
+
+#else
+void __init register_srm_console(void)
+{
+}
+void __init unregister_srm_console(void)
+{
+}
+#endif
+
void __init
setup_arch(char **cmdline_p)
{
struct alpha_machine_vector *vec = NULL;
struct percpu_struct *cpu;
char *type_name, *var_name, *p;
+ extern char _end;
+ void * kernel_end = &_end; /* end of kernel */
hwrpb = (struct hwrpb_struct*) __va(INIT_HWRPB->phys_addr);
boot_cpuid = hard_smp_processor_id();
+ /* Register a call for panic conditions. */
+ notifier_chain_register(&panic_notifier_list, &alpha_panic_block);
+
+#ifdef CONFIG_ALPHA_GENERIC
+ /* Assume that we've booted from SRM if we havn't booted from MILO.
+ Detect the later by looking for "MILO" in the system serial nr. */
+ alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0;
+#endif
+
+ /* If we are using SRM, we want to allow callbacks
+ as early as possible, so do this NOW, and then
+ they should work immediately thereafter.
+ */
+ kernel_end = callback_init(kernel_end);
+
/*
* Locate the command line.
*/
-
/* Hack for Jensen... since we're restricted to 8 or 16 chars for
boot flags depending on the boot mode, we need some shorthand.
This should do for installation. */
@@ -375,7 +503,6 @@
/*
* Process command-line arguments.
*/
-
for (p = strtok(command_line, " \t"); p ; p = strtok(NULL, " \t")) {
if (strncmp(p, "alpha_mv=", 9) == 0) {
vec = get_sysvec_byname(p+9);
@@ -385,15 +512,27 @@
est_cycle_freq = simple_strtol(p+6, NULL, 0);
continue;
}
+ if (strncmp(p, "mem=", 4) == 0) {
+ mem_size_limit = get_mem_size_limit(p+4);
+ continue;
+ }
+ if (strncmp(p, "srmcons", 7) == 0) {
+ srmcons_output = 1;
+ continue;
+ }
}
- /* Replace the command line, not that we've killed it with strtok. */
+ /* Replace the command line, now that we've killed it with strtok. */
strcpy(command_line, saved_command_line);
+ /* If we want SRM console printk echoing early, do it now. */
+ if (alpha_using_srm && srmcons_output) {
+ register_srm_console();
+ }
+
/*
* Indentify and reconfigure for the current system.
*/
-
get_sysnames(hwrpb->sys_type, hwrpb->sys_variation,
&type_name, &var_name);
if (*var_name == '0')
@@ -415,12 +554,6 @@
alpha_mv = *vec;
}
-#ifdef CONFIG_ALPHA_GENERIC
- /* Assume that we've booted from SRM if we havn't booted from MILO.
- Detect the later by looking for "MILO" in the system serial nr. */
- alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0;
-#endif
-
printk("Booting "
#ifdef CONFIG_ALPHA_GENERIC
"GENERIC "
@@ -433,10 +566,9 @@
printk("Command line: %s\n", command_line);
/*
- * Sync with the HAE
+ * Sync up the HAE.
+ * Save the SRM's current value for restoration.
*/
-
- /* Save the SRM's current value for restoration. */
srm_hae = *alpha_mv.hae_register;
__set_hae(alpha_mv.hae_cache);
@@ -444,7 +576,7 @@
wrmces(0x7);
/* Find our memory. */
- setup_memory();
+ setup_memory(kernel_end);
/* Initialize the machine. Usually has to do with setting up
DMA windows and the like. */
@@ -499,7 +631,7 @@
"Mikasa", "EB64", "EB66", "EB64+", "AlphaBook1",
"Rawhide", "K2", "Lynx", "XL", "EB164", "Noritake",
"Cortex", "29", "Miata", "XXM", "Takara", "Yukon",
- "Tsunami", "Wildfire", "CUSCO", "Eiger"
+ "Tsunami", "Wildfire", "CUSCO", "Eiger", "Titan"
};
static char unofficial_names[][8] = {"100", "Ruffian"};
@@ -523,6 +655,11 @@
};
static int rawhide_indices[] = {0,0,0,1,1,2,2,3,3,4,4};
+static char titan_names[][16] = {
+ "0", "Privateer"
+};
+static int titan_indices[] = {0,1};
+
static char tsunami_names[][16] = {
"0", "DP264", "Warhol", "Windjammer", "Monet", "Clipper",
"Goldrush", "Webbrick", "Catamaran"
@@ -569,9 +706,10 @@
&takara_mv,
NULL, /* Yukon */
NULL, /* Tsunami -- see variation. */
- NULL, /* Wildfire */
+ &wildfire_mv, /* Wildfire */
NULL, /* CUSCO */
&eiger_mv, /* Eiger */
+ NULL, /* Titan */
};
static struct alpha_machine_vector *unofficial_vecs[] __initlocaldata =
@@ -609,6 +747,12 @@
&eb66p_mv
};
+ static struct alpha_machine_vector *titan_vecs[] __initlocaldata =
+ {
+ NULL,
+ &privateer_mv, /* privateer */
+ };
+
static struct alpha_machine_vector *tsunami_vecs[] __initlocaldata =
{
NULL,
@@ -665,6 +809,10 @@
if (member < N(eb66_indices))
vec = eb66_vecs[eb66_indices[member]];
break;
+ case ST_DEC_TITAN:
+ if (member < N(titan_indices))
+ vec = titan_vecs[titan_indices[member]];
+ break;
case ST_DEC_TSUNAMI:
if (member < N(tsunami_indices))
vec = tsunami_vecs[tsunami_indices[member]];
@@ -723,6 +871,7 @@
&noritake_primo_mv,
&p2k_mv,
&pc164_mv,
+ &privateer_mv,
&rawhide_mv,
&ruffian_mv,
&rx164_mv,
@@ -731,6 +880,7 @@
&sx164_mv,
&takara_mv,
&webbrick_mv,
+ &wildfire_mv,
&xl_mv,
&xlt_mv
};
@@ -801,6 +951,10 @@
if (member < N(rawhide_indices))
*variation_name = rawhide_names[rawhide_indices[member]];
break;
+ case ST_DEC_TITAN:
+ if (member < N(titan_indices))
+ *variation_name = titan_names[titan_indices[member]];
+ break;
case ST_DEC_TSUNAMI:
if (member < N(tsunami_indices))
*variation_name = tsunami_names[tsunami_indices[member]];
@@ -873,7 +1027,7 @@
static char cpu_names[][8] = {
"EV3", "EV4", "Simulate", "LCA4", "EV5", "EV45", "EV56",
- "EV6", "PCA56", "PCA57", "EV67"
+ "EV6", "PCA56", "PCA57", "EV67", "EV68CB", "EV68AL"
};
struct percpu_struct *cpu;
@@ -935,4 +1089,17 @@
#endif
return len;
+}
+
+static int alpha_panic_event(struct notifier_block *this,
+ unsigned long event,
+ void *ptr)
+{
+#if 1
+ /* FIXME FIXME FIXME */
+ /* If we are using SRM and serial console, just hard halt here. */
+ if (alpha_using_srm && srmcons_output)
+ __halt();
+#endif
+ return NOTIFY_DONE;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/signal.c linux/arch/alpha/kernel/signal.c
--- v2.4.0-test1/linux/arch/alpha/kernel/signal.c Mon Jun 19 16:31:56 2000
+++ linux/arch/alpha/kernel/signal.c Mon Jun 19 17:59:32 2000
@@ -651,7 +651,7 @@
if (!signr)
break;
- if ((current->flags & PF_PTRACED) && signr != SIGKILL) {
+ if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
/* Let the debugger run. */
current->exit_code = signr;
current->state = TASK_STOPPED;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/smc37c669.c linux/arch/alpha/kernel/smc37c669.c
--- v2.4.0-test1/linux/arch/alpha/kernel/smc37c669.c Sun Feb 21 19:06:36 1999
+++ linux/arch/alpha/kernel/smc37c669.c Mon Jun 19 17:59:32 2000
@@ -2588,6 +2588,9 @@
);
SMC37c669_enable_device( FLOPPY_0 );
+ /* Wake up sometimes forgotten floppy, especially on DP264. */
+ outb(0xc, 0x3f2);
+
SMC37c669_disable_device( IDE_0 );
#if SMC_DEBUG
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/smp.c linux/arch/alpha/kernel/smp.c
--- v2.4.0-test1/linux/arch/alpha/kernel/smp.c Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/smp.c Mon Jun 19 17:59:32 2000
@@ -212,8 +212,19 @@
freq = hwrpb->cycle_freq ? : est_cycle_freq;
+#if 0
/* Magic estimation stolen from x86 port. */
- cacheflush_time = freq / 1024 * on_chip_cache / 5000;
+ cacheflush_time = freq / 1024L * on_chip_cache / 5000L;
+
+ printk("Using heuristic of %d cycles.\n",
+ cacheflush_time);
+#else
+ /* Magic value to force potential preemption of other CPUs. */
+ cacheflush_time = INT_MAX;
+
+ printk("Using heuristic of %d cycles.\n",
+ cacheflush_time);
+#endif
}
/*
@@ -325,8 +336,8 @@
}
}
- printk(KERN_INFO "recv_secondary_console_msg: on %d "
- "message is '%s'\n", mycpu, buf);
+ DBGS((KERN_INFO "recv_secondary_console_msg: on %d "
+ "message is '%s'\n", mycpu, buf));
}
hwrpb->txrdy = 0;
@@ -361,8 +372,10 @@
hwpcb->flags = idle->thread.pal_flags;
hwpcb->res1 = hwpcb->res2 = 0;
+#if 0
DBGS(("KSP 0x%lx PTBR 0x%lx VPTBR 0x%lx UNIQUE 0x%lx\n",
hwpcb->ksp, hwpcb->ptbr, hwrpb->vptb, hwcpb->unique));
+#endif
DBGS(("Starting secondary cpu %d: state 0x%lx pal_flags 0x%lx\n",
cpuid, idle->state, idle->thread.pal_flags));
@@ -738,8 +751,10 @@
unsigned long *pending_ipis = &ipi_data[this_cpu].bits;
unsigned long ops;
- DBGS(("handle_ipi: on CPU %d ops 0x%x PC 0x%lx\n",
+#if 0
+ DBGS(("handle_ipi: on CPU %d ops 0x%lx PC 0x%lx\n",
this_cpu, *pending_ipis, regs->pc));
+#endif
mb(); /* Order interrupt and bit testing. */
while ((ops = xchg(pending_ipis, 0)) != 0) {
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/sys_dp264.c linux/arch/alpha/kernel/sys_dp264.c
--- v2.4.0-test1/linux/arch/alpha/kernel/sys_dp264.c Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/sys_dp264.c Wed Jun 21 22:30:59 2000
@@ -36,7 +36,7 @@
/* Note mask bit is true for ENABLED irqs. */
static unsigned long cached_irq_mask;
/* dp264 boards handle at max four CPUs */
-static unsigned long cpu_irq_affinity[4] = { ~0UL, ~0UL, ~0UL, ~0UL };
+static unsigned long cpu_irq_affinity[4] = { 0UL, 0UL, 0UL, 0UL };
spinlock_t dp264_irq_lock = SPIN_LOCK_UNLOCKED;
@@ -52,6 +52,7 @@
volatile unsigned long *dim0, *dim1, *dim2, *dim3;
unsigned long mask0, mask1, mask2, mask3, dummy;
+ mask &= ~isa_enable;
mask0 = mask & cpu_irq_affinity[0];
mask1 = mask & cpu_irq_affinity[1];
mask2 = mask & cpu_irq_affinity[2];
@@ -170,7 +171,6 @@
aff &= ~(1UL << irq);
cpu_irq_affinity[cpu] = aff;
}
-
}
static void
@@ -275,7 +275,7 @@
irq = (vector - 0x800) >> 4;
- /*
+/*
* The SRM console reports PCI interrupts with a vector calculated by:
*
* 0x900 + (0x10 * DRIR-bit)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/sys_mikasa.c linux/arch/alpha/kernel/sys_mikasa.c
--- v2.4.0-test1/linux/arch/alpha/kernel/sys_mikasa.c Sun Mar 19 18:35:30 2000
+++ linux/arch/alpha/kernel/sys_mikasa.c Mon Jun 19 17:59:32 2000
@@ -185,8 +185,8 @@
mikasa_apecs_machine_check(unsigned long vector, unsigned long la_ptr,
struct pt_regs * regs)
{
-#define MCHK_NO_DEVSEL 0x205L
-#define MCHK_NO_TABT 0x204L
+#define MCHK_NO_DEVSEL 0x205U
+#define MCHK_NO_TABT 0x204U
struct el_common *mchk_header;
unsigned int code;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/sys_titan.c linux/arch/alpha/kernel/sys_titan.c
--- v2.4.0-test1/linux/arch/alpha/kernel/sys_titan.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/kernel/sys_titan.c Mon Jun 19 17:59:32 2000
@@ -0,0 +1,393 @@
+/*
+ * linux/arch/alpha/kernel/sys_titan.c
+ *
+ * Copyright (C) 1995 David A Rusling
+ * Copyright (C) 1996, 1999 Jay A Estabrook
+ * Copyright (C) 1998, 1999 Richard Henderson
+ * Copyright (C) 1999, 2000 Jeff Wiedemeier
+ *
+ * Code supporting TITAN systems (EV6+TITAN), currently:
+ * Privateer
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "proto.h"
+#include "irq_impl.h"
+#include "pci_impl.h"
+#include "machvec_impl.h"
+
+/* Note mask bit is true for ENABLED irqs. */
+static unsigned long cached_irq_mask;
+/* Titan boards handle at most four CPUs. */
+static unsigned long cpu_irq_affinity[4] = { ~0UL, ~0UL, ~0UL, ~0UL };
+
+spinlock_t titan_irq_lock = SPIN_LOCK_UNLOCKED;
+
+static void
+titan_update_irq_hw(unsigned long mask)
+{
+ register titan_cchip *cchip = TITAN_cchip;
+ unsigned long isa_enable = 1UL << 55;
+ register int bcpu = boot_cpuid;
+
+#ifdef CONFIG_SMP
+ register unsigned long cpm = cpu_present_mask;
+ volatile unsigned long *dim0, *dim1, *dim2, *dim3;
+ unsigned long mask0, mask1, mask2, mask3, dummy;
+
+ mask &= ~isa_enable;
+ mask0 = mask & cpu_irq_affinity[0];
+ mask1 = mask & cpu_irq_affinity[1];
+ mask2 = mask & cpu_irq_affinity[2];
+ mask3 = mask & cpu_irq_affinity[3];
+
+ if (bcpu == 0) mask0 |= isa_enable;
+ else if (bcpu == 1) mask1 |= isa_enable;
+ else if (bcpu == 2) mask2 |= isa_enable;
+ else mask3 |= isa_enable;
+
+ dim0 = &cchip->dim0.csr;
+ dim1 = &cchip->dim1.csr;
+ dim2 = &cchip->dim2.csr;
+ dim3 = &cchip->dim3.csr;
+ if ((cpm & 1) == 0) dim0 = &dummy;
+ if ((cpm & 2) == 0) dim1 = &dummy;
+ if ((cpm & 4) == 0) dim2 = &dummy;
+ if ((cpm & 8) == 0) dim3 = &dummy;
+
+ *dim0 = mask0;
+ *dim1 = mask1;
+ *dim2 = mask2;
+ *dim3 = mask3;
+ mb();
+ *dim0;
+ *dim1;
+ *dim2;
+ *dim3;
+#else
+ volatile unsigned long *dimB;
+ if (bcpu == 0) dimB = &cchip->dim0.csr;
+ else if (bcpu == 1) dimB = &cchip->dim1.csr;
+ else if (bcpu == 2) dimB = &cchip->dim2.csr;
+ else if (bcpu == 3) dimB = &cchip->dim3.csr;
+
+ *dimB = mask | isa_enable;
+ mb();
+ *dimB;
+#endif
+}
+
+static inline void
+privateer_enable_irq(unsigned int irq)
+{
+ spin_lock(&titan_irq_lock);
+ cached_irq_mask |= 1UL << (irq - 16);
+ titan_update_irq_hw(cached_irq_mask);
+ spin_unlock(&titan_irq_lock);
+}
+
+static inline void
+privateer_disable_irq(unsigned int irq)
+{
+ spin_lock(&titan_irq_lock);
+ cached_irq_mask &= ~(1UL << (irq - 16));
+ titan_update_irq_hw(cached_irq_mask);
+ spin_unlock(&titan_irq_lock);
+}
+
+static unsigned int
+privateer_startup_irq(unsigned int irq)
+{
+ privateer_enable_irq(irq);
+ return 0; /* never anything pending */
+}
+
+static void
+privateer_end_irq(unsigned int irq)
+{
+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
+ privateer_enable_irq(irq);
+}
+
+static void
+cpu_set_irq_affinity(unsigned int irq, unsigned long affinity)
+{
+ int cpu;
+
+ for (cpu = 0; cpu < 4; cpu++) {
+ if (affinity & (1UL << cpu))
+ cpu_irq_affinity[cpu] |= 1UL << irq;
+ else
+ cpu_irq_affinity[cpu] &= ~(1UL << irq);
+ }
+
+}
+
+static void
+privateer_set_affinity(unsigned int irq, unsigned long affinity)
+{
+ spin_lock(&titan_irq_lock);
+ cpu_set_irq_affinity(irq - 16, affinity);
+ titan_update_irq_hw(cached_irq_mask);
+ spin_unlock(&titan_irq_lock);
+}
+
+static struct hw_interrupt_type privateer_irq_type = {
+ typename: "PRIVATEER",
+ startup: privateer_startup_irq,
+ shutdown: privateer_disable_irq,
+ enable: privateer_enable_irq,
+ disable: privateer_disable_irq,
+ ack: privateer_disable_irq,
+ end: privateer_end_irq,
+ set_affinity: privateer_set_affinity,
+};
+
+static void
+privateer_device_interrupt(unsigned long vector, struct pt_regs * regs)
+{
+ printk("privateer_device_interrupt: NOT IMPLEMENTED YET!! \n");
+}
+
+static void
+privateer_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
+{
+ int irq;
+
+ irq = (vector - 0x800) >> 4;
+ handle_irq(irq, regs);
+}
+
+
+static void __init
+init_titan_irqs(struct hw_interrupt_type * ops, int imin, int imax)
+{
+ long i;
+ for(i = imin; i <= imax; ++i) {
+ irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
+ irq_desc[i].handler = ops;
+ }
+}
+
+static void __init
+privateer_init_irq(void)
+{
+ extern asmlinkage void entInt(void);
+ int cpu;
+
+ outb(0, DMA1_RESET_REG);
+ outb(0, DMA2_RESET_REG);
+ outb(DMA_MODE_CASCADE, DMA2_MODE_REG);
+ outb(0, DMA2_MASK_REG);
+
+ if (alpha_using_srm)
+ alpha_mv.device_interrupt = privateer_srm_device_interrupt;
+
+ titan_update_irq_hw(0UL);
+
+ init_i8259a_irqs();
+ init_titan_irqs(&privateer_irq_type, 16, 63 + 16);
+}
+
+/*
+ * Privateer PCI Fixup configuration.
+ *
+ * PCHIP 0 BUS 0 (Hose 0)
+ *
+ * IDSEL Dev What
+ * ----- --- ----
+ * 18 7 Embedded Southbridge
+ * 19 8 Slot 0
+ * 20 9 Slot 1
+ * 21 10 Slot 2
+ * 22 11 Slot 3
+ * 23 12 Embedded HotPlug controller
+ * 27 16 Embedded Southbridge IDE
+ * 29 18 Embedded Southbridge PMU
+ * 31 20 Embedded Southbridge USB
+ *
+ * PCHIP 1 BUS 0 (Hose 1)
+ *
+ * IDSEL Dev What
+ * ----- --- ----
+ * 12 1 Slot 0
+ * 13 2 Slot 1
+ * 17 6 Embedded hotPlug controller
+ *
+ * PCHIP 0 BUS 1 (Hose 2)
+ *
+ * IDSEL What
+ * ----- ----
+ * NONE AGP
+ *
+ * PCHIP 1 BUS 1 (Hose 3)
+ *
+ * IDSEL Dev What
+ * ----- --- ----
+ * 12 1 Slot 0
+ * 13 2 Slot 1
+ * 17 6 Embedded hotPlug controller
+ *
+ * Summary @ TITAN_CSR_DIM0:
+ * Bit Meaning
+ * 0-7 Unused
+ * 8 PCHIP 0 BUS 1 YUKON (if present)
+ * 9 PCHIP 1 BUS 1 YUKON
+ * 10 PCHIP 1 BUS 0 YUKON
+ * 11 PCHIP 0 BUS 0 YUKON
+ * 12 PCHIP 0 BUS 0 SLOT 2 INT A
+ * 13 PCHIP 0 BUS 0 SLOT 2 INT B
+ * 14 PCHIP 0 BUS 0 SLOT 2 INT C
+ * 15 PCHIP 0 BUS 0 SLOT 2 INT D
+ * 16 PCHIP 0 BUS 0 SLOT 3 INT A
+ * 17 PCHIP 0 BUS 0 SLOT 3 INT B
+ * 18 PCHIP 0 BUS 0 SLOT 3 INT C
+ * 19 PCHIP 0 BUS 0 SLOT 3 INT D
+ * 20 PCHIP 0 BUS 0 SLOT 0 INT A
+ * 21 PCHIP 0 BUS 0 SLOT 0 INT B
+ * 22 PCHIP 0 BUS 0 SLOT 0 INT C
+ * 23 PCHIP 0 BUS 0 SLOT 0 INT D
+ * 24 PCHIP 0 BUS 0 SLOT 1 INT A
+ * 25 PCHIP 0 BUS 0 SLOT 1 INT B
+ * 26 PCHIP 0 BUS 0 SLOT 1 INT C
+ * 27 PCHIP 0 BUS 0 SLOT 1 INT D
+ * 28 PCHIP 1 BUS 0 SLOT 0 INT A
+ * 29 PCHIP 1 BUS 0 SLOT 0 INT B
+ * 30 PCHIP 1 BUS 0 SLOT 0 INT C
+ * 31 PCHIP 1 BUS 0 SLOT 0 INT D
+ * 32 PCHIP 1 BUS 0 SLOT 1 INT A
+ * 33 PCHIP 1 BUS 0 SLOT 1 INT B
+ * 34 PCHIP 1 BUS 0 SLOT 1 INT C
+ * 35 PCHIP 1 BUS 0 SLOT 1 INT D
+ * 36 PCHIP 1 BUS 1 SLOT 0 INT A
+ * 37 PCHIP 1 BUS 1 SLOT 0 INT B
+ * 38 PCHIP 1 BUS 1 SLOT 0 INT C
+ * 39 PCHIP 1 BUS 1 SLOT 0 INT D
+ * 40 PCHIP 1 BUS 1 SLOT 1 INT A
+ * 41 PCHIP 1 BUS 1 SLOT 1 INT B
+ * 42 PCHIP 1 BUS 1 SLOT 1 INT C
+ * 43 PCHIP 1 BUS 1 SLOT 1 INT D
+ * 44 AGP INT A
+ * 45 AGP INT B
+ * 46-47 Unused
+ * 49 Reserved for Sleep mode
+ * 50 Temperature Warning (optional)
+ * 51 Power Warning (optional)
+ * 52 Reserved
+ * 53 South Bridge NMI
+ * 54 South Bridge SMI INT
+ * 55 South Bridge ISA Interrupt
+ * 56-58 Unused
+ * 59 PCHIP1_C_ERROR
+ * 60 PCHIP0_C_ERROR
+ * 61 PCHIP1_H_ERROR
+ * 62 PCHIP0_H_ERROR
+ * 63 Reserved
+ *
+ */
+static int __init
+privateer_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+ u8 irq;
+
+ pcibios_read_config_byte(dev->bus->number,
+ dev->devfn,
+ PCI_INTERRUPT_LINE,
+ &irq);
+
+ /* is it routed through ISA? */
+ if ((irq & 0xF0) == 0xE0)
+ return (int)irq;
+
+ return (int)irq + 16; /* HACK -- this better only be called once */
+}
+
+#ifdef CONFIG_VGA_HOSE
+static struct pci_controler * __init
+privateer_vga_hose_select(struct pci_controler *h1, struct pci_controler *h2)
+{
+ struct pci_controler *hose = h1;
+ int agp1, agp2;
+
+ /* which hose(s) are agp? */
+ agp1 = (0 != (TITAN_agp & (1 << h1->index)));
+ agp2 = (0 != (TITAN_agp & (1 << h2->index)));
+
+ hose = h1; /* default to h1 */
+ if (agp1 ^ agp2) {
+ if (agp2) hose = h2; /* take agp if only one */
+ } else if (h2->index < h1->index)
+ hose = h2; /* first hose if 2xpci or 2xagp */
+
+ return hose;
+}
+#endif
+
+static void __init
+privateer_init_pci(void)
+{
+ common_init_pci();
+ SMC669_Init(0);
+#ifdef CONFIG_VGA_HOSE
+ locate_and_init_vga(privateer_vga_hose_select);
+#endif
+}
+
+void
+privateer_machine_check(unsigned long vector, unsigned long la_ptr,
+ struct pt_regs * regs)
+{
+ /* only handle system events here */
+ if (vector != SCB_Q_SYSEVENT)
+ return titan_machine_check(vector, la_ptr, regs);
+
+ /* it's a system event, handle it here */
+ printk("PRIVATEER 680 Machine Check on CPU %d\n", smp_processor_id());
+}
+
+
+/*
+ * The System Vectors
+ */
+
+struct alpha_machine_vector privateer_mv __initmv = {
+ vector_name: "PRIVATEER",
+ DO_EV6_MMU,
+ DO_DEFAULT_RTC,
+ DO_TITAN_IO,
+ DO_TITAN_BUS,
+ machine_check: privateer_machine_check,
+ max_dma_address: ALPHA_MAX_DMA_ADDRESS,
+ min_io_address: DEFAULT_IO_BASE,
+ min_mem_address: DEFAULT_MEM_BASE,
+
+ nr_irqs: 80, /* 64 + 16 */
+ device_interrupt: privateer_device_interrupt,
+
+ init_arch: titan_init_arch,
+ init_irq: privateer_init_irq,
+ init_rtc: common_init_rtc,
+ init_pci: privateer_init_pci,
+ kill_arch: titan_kill_arch,
+ pci_map_irq: privateer_map_irq,
+ pci_swizzle: common_swizzle,
+};
+ALIAS_MV(privateer)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/sys_wildfire.c linux/arch/alpha/kernel/sys_wildfire.c
--- v2.4.0-test1/linux/arch/alpha/kernel/sys_wildfire.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/kernel/sys_wildfire.c Mon Jun 19 17:59:32 2000
@@ -0,0 +1,361 @@
+/*
+ * linux/arch/alpha/kernel/sys_wildfire.c
+ *
+ * Wildfire support.
+ *
+ * Copyright (C) 2000 Andrea Arcangeli SuSE
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "proto.h"
+#include "irq_impl.h"
+#include "pci_impl.h"
+#include "machvec_impl.h"
+
+static unsigned long cached_irq_mask[WILDFIRE_NR_IRQS/(sizeof(long)*8)];
+
+spinlock_t wildfire_irq_lock = SPIN_LOCK_UNLOCKED;
+
+static int doing_init_irq_hw = 0;
+
+static void
+wildfire_update_irq_hw(unsigned int irq)
+{
+ int qbbno = (irq >> 8) & (WILDFIRE_MAX_QBB - 1);
+ int pcano = (irq >> 6) & (WILDFIRE_PCA_PER_QBB - 1);
+ wildfire_pca *pca;
+ volatile unsigned long * enable0;
+
+ if (!WILDFIRE_PCA_EXISTS(qbbno, pcano)) {
+ if (!doing_init_irq_hw) {
+ printk(KERN_ERR "wildfire_update_irq_hw:"
+ " got irq %d for non-existent PCA %d"
+ " on QBB %d.\n",
+ irq, pcano, qbbno);
+ }
+ return;
+ }
+
+ pca = WILDFIRE_pca(qbbno, pcano);
+ enable0 = (unsigned long *) &pca->pca_int[0].enable; /* ??? */
+
+ *enable0 = cached_irq_mask[qbbno * WILDFIRE_PCA_PER_QBB + pcano];
+ mb();
+ *enable0;
+}
+
+static void __init
+wildfire_init_irq_hw(void)
+{
+#if 0
+ register wildfire_pca * pca = WILDFIRE_pca(0, 0);
+ volatile unsigned long * enable0, * enable1, * enable2, *enable3;
+ volatile unsigned long * target0, * target1, * target2, *target3;
+
+ enable0 = (unsigned long *) &pca->pca_int[0].enable;
+ enable1 = (unsigned long *) &pca->pca_int[1].enable;
+ enable2 = (unsigned long *) &pca->pca_int[2].enable;
+ enable3 = (unsigned long *) &pca->pca_int[3].enable;
+
+ target0 = (unsigned long *) &pca->pca_int[0].target;
+ target1 = (unsigned long *) &pca->pca_int[1].target;
+ target2 = (unsigned long *) &pca->pca_int[2].target;
+ target3 = (unsigned long *) &pca->pca_int[3].target;
+
+ *enable0 = *enable1 = *enable2 = *enable3 = 0;
+
+ *target0 = (1UL<<8) | WILDFIRE_QBB(0);
+ *target1 = *target2 = *target3 = 0;
+
+ mb();
+
+ *enable0; *enable1; *enable2; *enable3;
+ *target0; *target1; *target2; *target3;
+
+#else
+ int i;
+
+ doing_init_irq_hw = 1;
+
+ /* Need to update only once for every possible PCA. */
+ for (i = 0; i < WILDFIRE_NR_IRQS; i+=WILDFIRE_IRQ_PER_PCA)
+ wildfire_update_irq_hw(i);
+
+ doing_init_irq_hw = 0;
+#endif
+}
+
+static void
+wildfire_enable_irq(unsigned int irq)
+{
+ if (irq < 16)
+ i8259a_enable_irq(irq);
+
+ spin_lock(&wildfire_irq_lock);
+ set_bit(irq, &cached_irq_mask);
+ wildfire_update_irq_hw(irq);
+ spin_unlock(&wildfire_irq_lock);
+}
+
+static void
+wildfire_disable_irq(unsigned int irq)
+{
+ if (irq < 16)
+ i8259a_disable_irq(irq);
+
+ spin_lock(&wildfire_irq_lock);
+ clear_bit(irq, &cached_irq_mask);
+ wildfire_update_irq_hw(irq);
+ spin_unlock(&wildfire_irq_lock);
+}
+
+static void
+wildfire_mask_and_ack_irq(unsigned int irq)
+{
+ if (irq < 16)
+ i8259a_mask_and_ack_irq(irq);
+
+ spin_lock(&wildfire_irq_lock);
+ clear_bit(irq, &cached_irq_mask);
+ wildfire_update_irq_hw(irq);
+ spin_unlock(&wildfire_irq_lock);
+}
+
+static unsigned int
+wildfire_startup_irq(unsigned int irq)
+{
+ wildfire_enable_irq(irq);
+ return 0; /* never anything pending */
+}
+
+static void
+wildfire_end_irq(unsigned int irq)
+{
+#if 0
+ if (!irq_desc[irq].action)
+ printk("got irq %d\n", irq);
+#endif
+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
+ wildfire_enable_irq(irq);
+}
+
+static struct hw_interrupt_type wildfire_irq_type = {
+ typename: "WILDFIRE",
+ startup: wildfire_startup_irq,
+ shutdown: wildfire_disable_irq,
+ enable: wildfire_enable_irq,
+ disable: wildfire_disable_irq,
+ ack: wildfire_mask_and_ack_irq,
+ end: wildfire_end_irq,
+};
+
+static void __init
+wildfire_init_irq_per_pca(int qbbno, int pcano)
+{
+ int i, irq_bias;
+ unsigned long io_bias;
+ static struct irqaction isa_enable = {
+ handler: no_action,
+ name: "isa_enable",
+ };
+
+ irq_bias = qbbno * (WILDFIRE_PCA_PER_QBB * WILDFIRE_IRQ_PER_PCA)
+ + pcano * WILDFIRE_IRQ_PER_PCA;
+
+ /* Only need the following for first PCI bus per PCA. */
+ io_bias = WILDFIRE_IO(qbbno, pcano<<1) - WILDFIRE_IO_BIAS;
+
+#if 0
+ outb(0, DMA1_RESET_REG + io_bias);
+ outb(0, DMA2_RESET_REG + io_bias);
+ outb(DMA_MODE_CASCADE, DMA2_MODE_REG + io_bias);
+ outb(0, DMA2_MASK_REG + io_bias);
+#endif
+
+#if 0
+ /* ??? Not sure how to do this, yet... */
+ init_i8259a_irqs(); /* ??? */
+#endif
+
+ for (i = 0; i < 16; ++i) {
+ if (i == 2)
+ continue;
+ irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
+ irq_desc[i+irq_bias].handler = &wildfire_irq_type;
+ }
+
+ irq_desc[36+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
+ irq_desc[36+irq_bias].handler = &wildfire_irq_type;
+ for (i = 40; i < 64; ++i) {
+ irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
+ irq_desc[i+irq_bias].handler = &wildfire_irq_type;
+ }
+
+ setup_irq(32+irq_bias, &isa_enable);
+}
+
+static void __init
+wildfire_init_irq(void)
+{
+ int qbbno, pcano;
+
+#if 1
+ wildfire_init_irq_hw();
+ init_i8259a_irqs();
+#endif
+
+ for (qbbno = 0; qbbno < WILDFIRE_MAX_QBB; qbbno++) {
+ if (WILDFIRE_QBB_EXISTS(qbbno)) {
+ for (pcano = 0; pcano < WILDFIRE_PCA_PER_QBB; pcano++) {
+ if (WILDFIRE_PCA_EXISTS(qbbno, pcano)) {
+ wildfire_init_irq_per_pca(qbbno, pcano);
+ }
+ }
+ }
+ }
+}
+
+static void
+wildfire_device_interrupt(unsigned long vector, struct pt_regs * regs)
+{
+ int irq;
+
+ irq = (vector - 0x800) >> 4;
+
+ /*
+ * bits 10-8: source QBB ID
+ * bits 7-6: PCA
+ * bits 5-0: irq in PCA
+ */
+
+ handle_irq(irq, regs);
+ return;
+}
+
+/*
+ * PCI Fixup configuration.
+ *
+ * Summary per PCA (2 PCI or HIPPI buses):
+ *
+ * Bit Meaning
+ * 0-15 ISA
+ *
+ *32 ISA summary
+ *33 SMI
+ *34 NMI
+ *36 builtin QLogic SCSI (or slot 0 if no IO module)
+ *40 Interrupt Line A from slot 2 PCI0
+ *41 Interrupt Line B from slot 2 PCI0
+ *42 Interrupt Line C from slot 2 PCI0
+ *43 Interrupt Line D from slot 2 PCI0
+ *44 Interrupt Line A from slot 3 PCI0
+ *45 Interrupt Line B from slot 3 PCI0
+ *46 Interrupt Line C from slot 3 PCI0
+ *47 Interrupt Line D from slot 3 PCI0
+ *
+ *48 Interrupt Line A from slot 4 PCI1
+ *49 Interrupt Line B from slot 4 PCI1
+ *50 Interrupt Line C from slot 4 PCI1
+ *51 Interrupt Line D from slot 4 PCI1
+ *52 Interrupt Line A from slot 5 PCI1
+ *53 Interrupt Line B from slot 5 PCI1
+ *54 Interrupt Line C from slot 5 PCI1
+ *55 Interrupt Line D from slot 5 PCI1
+ *56 Interrupt Line A from slot 6 PCI1
+ *57 Interrupt Line B from slot 6 PCI1
+ *58 Interrupt Line C from slot 6 PCI1
+ *50 Interrupt Line D from slot 6 PCI1
+ *60 Interrupt Line A from slot 7 PCI1
+ *61 Interrupt Line B from slot 7 PCI1
+ *62 Interrupt Line C from slot 7 PCI1
+ *63 Interrupt Line D from slot 7 PCI1
+ *
+ *
+ * IdSel
+ * 0 Cypress Bridge I/O (ISA summary interrupt)
+ * 1 64 bit PCI 0 option slot 1 (SCSI QLogic builtin)
+ * 2 64 bit PCI 0 option slot 2
+ * 3 64 bit PCI 0 option slot 3
+ * 4 64 bit PCI 1 option slot 4
+ * 5 64 bit PCI 1 option slot 5
+ * 6 64 bit PCI 1 option slot 6
+ * 7 64 bit PCI 1 option slot 7
+ */
+
+static int __init
+wildfire_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+ static char irq_tab[8][5] __initlocaldata = {
+ /*INT INTA INTB INTC INTD */
+ { -1, -1, -1, -1, -1}, /* IdSel 0 ISA Bridge */
+ { 36, 36, 36+1, 36+2, 36+3}, /* IdSel 1 SCSI builtin */
+ { 40, 40, 40+1, 40+2, 40+3}, /* IdSel 2 PCI 0 slot 2 */
+ { 44, 44, 44+1, 44+2, 44+3}, /* IdSel 3 PCI 0 slot 3 */
+ { 48, 48, 48+1, 48+2, 48+3}, /* IdSel 4 PCI 1 slot 4 */
+ { 52, 52, 52+1, 52+2, 52+3}, /* IdSel 5 PCI 1 slot 5 */
+ { 56, 56, 56+1, 56+2, 56+3}, /* IdSel 6 PCI 1 slot 6 */
+ { 60, 60, 60+1, 60+2, 60+3}, /* IdSel 7 PCI 1 slot 7 */
+ };
+ const long min_idsel = 0, max_idsel = 7, irqs_per_slot = 5;
+
+ struct pci_controler *hose = dev->sysdata;
+ int irq = COMMON_TABLE_LOOKUP;
+
+ if (irq > 0) {
+ int qbbno = hose->index >> 3;
+ int pcano = (hose->index >> 1) & 3;
+ irq += (qbbno << 8) + (pcano << 6);
+ }
+ return irq;
+}
+
+static void __init
+wildfire_init_pci(void)
+{
+ common_init_pci();
+}
+
+/*
+ * The System Vectors
+ */
+
+struct alpha_machine_vector wildfire_mv __initmv = {
+ vector_name: "WILDFIRE",
+ DO_EV6_MMU,
+ DO_DEFAULT_RTC,
+ DO_WILDFIRE_IO,
+ DO_WILDFIRE_BUS,
+ machine_check: wildfire_machine_check,
+ max_dma_address: ALPHA_MAX_DMA_ADDRESS,
+ min_io_address: DEFAULT_IO_BASE,
+ min_mem_address: DEFAULT_MEM_BASE,
+
+ nr_irqs: WILDFIRE_NR_IRQS,
+ device_interrupt: wildfire_device_interrupt,
+
+ init_arch: wildfire_init_arch,
+ init_irq: wildfire_init_irq,
+ init_rtc: common_init_rtc,
+ init_pci: wildfire_init_pci,
+ kill_arch: wildfire_kill_arch,
+ pci_map_irq: wildfire_map_irq,
+ pci_swizzle: common_swizzle,
+};
+ALIAS_MV(wildfire)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/kernel/traps.c linux/arch/alpha/kernel/traps.c
--- v2.4.0-test1/linux/arch/alpha/kernel/traps.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/kernel/traps.c Mon Jun 19 17:59:33 2000
@@ -27,30 +27,234 @@
{
printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx\n",
regs->pc, regs->r26, regs->ps);
- printk("r0 = %016lx r1 = %016lx r2 = %016lx\n",
+ printk("v0 = %016lx t0 = %016lx t1 = %016lx\n",
regs->r0, regs->r1, regs->r2);
- printk("r3 = %016lx r4 = %016lx r5 = %016lx\n",
+ printk("t2 = %016lx t3 = %016lx t4 = %016lx\n",
regs->r3, regs->r4, regs->r5);
- printk("r6 = %016lx r7 = %016lx r8 = %016lx\n",
+ printk("t5 = %016lx t6 = %016lx t7 = %016lx\n",
regs->r6, regs->r7, regs->r8);
if (r9_15) {
- printk("r9 = %016lx r10= %016lx r11= %016lx\n",
+ printk("s0 = %016lx s1 = %016lx s2 = %016lx\n",
r9_15[9], r9_15[10], r9_15[11]);
- printk("r12= %016lx r13= %016lx r14= %016lx\n",
+ printk("s3 = %016lx s4 = %016lx s5 = %016lx\n",
r9_15[12], r9_15[13], r9_15[14]);
- printk("r15= %016lx\n", r9_15[15]);
+ printk("s6 = %016lx\n", r9_15[15]);
}
- printk("r16= %016lx r17= %016lx r18= %016lx\n",
+ printk("a0 = %016lx a1 = %016lx a2 = %016lx\n",
regs->r16, regs->r17, regs->r18);
- printk("r19= %016lx r20= %016lx r21= %016lx\n",
+ printk("a3 = %016lx a4 = %016lx a5 = %016lx\n",
regs->r19, regs->r20, regs->r21);
- printk("r22= %016lx r23= %016lx r24= %016lx\n",
+ printk("t8 = %016lx t9 = %016lx t10= %016lx\n",
regs->r22, regs->r23, regs->r24);
- printk("r25= %016lx r27= %016lx r28= %016lx\n",
+ printk("t11= %016lx pv = %016lx at = %016lx\n",
regs->r25, regs->r27, regs->r28);
printk("gp = %016lx sp = %p\n", regs->gp, regs+1);
+#if 0
+__halt();
+#endif
+}
+
+static char * ireg_name[] = {"v0", "t0", "t1", "t2", "t3", "t4", "t5", "t6",
+ "t7", "s0", "s1", "s2", "s3", "s4", "s5", "s6",
+ "a0", "a1", "a2", "a3", "a4", "a5", "t8", "t9",
+ "t10", "t11", "ra", "pv", "at", "gp", "sp", "zero"};
+
+static char * inst_name[] = {"call_pal", "", "", "", "", "", "", "",
+ "lda", "ldah", "ldbu", "ldq_u", "ldwu", "stw", "stb", "stq_u",
+ "ALU", "ALU", "ALU", "ALU", "SQRT", "FVAX", "FIEEE", "FLOAT",
+ "MISC", "PAL19", "JMP", "PAL1B", "GRAPH", "PAL1D", "PAL1E", "PAL1F",
+ "ldf", "ldg", "lds", "ldt", "stf", "stg", "sts", "stt",
+ "ldl", "ldq", "ldl_l", "ldq_l", "stl", "stq", "stl_c", "stq_c",
+ "br", "fbeq", "fblt", "fble", "bsr", "fbne", "fbge", "fbgt"
+ "blbc", "beq", "blt", "ble", "blbs", "bne", "bge", "bgt"
+};
+
+static char * jump_name[] = {"jmp", "jsr", "ret", "jsr_coroutine"};
+
+typedef struct {int func; char * text;} alist;
+
+static alist inta_name[] = {{0, "addl"}, {2, "s4addl"}, {9, "subl"},
+ {0xb, "s4subl"}, {0xf, "cmpbge"}, {0x12, "s8addl"}, {0x1b, "s8subl"},
+ {0x1d, "cmpult"}, {0x20, "addq"}, {0x22, "s4addq"}, {0x29, "subq"},
+ {0x2b, "s4subq"}, {0x2d, "cmpeq"}, {0x32, "s8addq"}, {0x3b, "s8subq"},
+ {0x3d, "cmpule"}, {0x40, "addl/v"}, {0x49, "subl/v"}, {0x4d, "cmplt"},
+ {0x60, "addq/v"}, {0x69, "subq/v"}, {0x6d, "cmple"}, {-1, 0}};
+
+static alist intl_name[] = {{0, "and"}, {8, "andnot"}, {0x14, "cmovlbs"},
+ {0x16, "cmovlbc"}, {0x20, "or"}, {0x24, "cmoveq"}, {0x26, "cmovne"},
+ {0x28, "ornot"}, {0x40, "xor"}, {0x44, "cmovlt"}, {0x46, "cmovge"},
+ {0x48, "eqv"}, {0x61, "amask"}, {0x64, "cmovle"}, {0x66, "cmovgt"},
+ {0x6c, "implver"}, {-1, 0}};
+
+static alist ints_name[] = {{2, "mskbl"}, {6, "extbl"}, {0xb, "insbl"},
+ {0x12, "mskwl"}, {0x16, "extwl"}, {0x1b, "inswl"}, {0x22, "mskll"},
+ {0x26, "extll"}, {0x2b, "insll"}, {0x30, "zap"}, {0x31, "zapnot"},
+ {0x32, "mskql"}, {0x34, "srl"}, {0x36, "extql"}, {0x39, "sll"},
+ {0x3b, "insql"}, {0x3c, "sra"}, {0x52, "mskwh"}, {0x57, "inswh"},
+ {0x5a, "extwh"}, {0x62, "msklh"}, {0x67, "inslh"}, {0x6a, "extlh"},
+ {0x72, "mskqh"}, {0x77, "insqh"}, {0x7a, "extqh"}, {-1, 0}};
+
+static alist intm_name[] = {{0, "mull"}, {0x20, "mulq"}, {0x30, "umulh"},
+ {0x40, "mull/v"}, {0x60, "mulq/v"}, {-1, 0}};
+
+static alist * int_name[] = {inta_name, intl_name, ints_name, intm_name};
+
+static char *
+assoc(int fcode, alist * a)
+{
+ while ((fcode != a->func) && (a->func != -1))
+ ++a;
+ return a->text;
+}
+
+static char *
+iname(unsigned int instr)
+{
+ int opcode = instr >> 26;
+ char * name = inst_name[opcode];
+
+ switch (opcode) {
+ default:
+ break;
+
+ case 0x10:
+ case 0x11:
+ case 0x12:
+ case 0x13: {
+ char * specific_name
+ = assoc((instr >> 5) & 0x3f, int_name[opcode - 0x10]);
+ if (specific_name)
+ name = specific_name;
+ break;
+ }
+
+ case 0x1a:
+ name = jump_name[(instr >> 14) & 3];
+ break;
+ }
+
+ return name;
+}
+
+static enum {NOT_INST, PAL, BRANCH, MEMORY, JUMP, OPERATE, FOPERATE, MISC}
+iformat(int opcode)
+{
+ if (opcode >= 0x30)
+ return BRANCH;
+ if (opcode >= 0x20)
+ return MEMORY;
+ if (opcode == 0)
+ return PAL;
+ if (opcode < 8)
+ return NOT_INST;
+ if (opcode < 0x10)
+ return MEMORY;
+ if (opcode < 0x14)
+ return OPERATE;
+ if (opcode < 0x18)
+ return FOPERATE;
+ switch (opcode) {
+ case 0x18:
+ return MISC;
+ case 0x1A:
+ return JUMP;
+ case 0x1C:
+ return OPERATE;
+ default:
+ return NOT_INST;
+ }
+}
+
+/*
+ * The purpose here is to provide useful clues about a kernel crash, so
+ * less likely instructions, e.g. floating point, aren't fully decoded.
+ */
+static void
+disassemble(unsigned int instr)
+{
+ int optype = instr >> 26;
+ char buf[40], *s = buf;
+
+ s += sprintf(buf, "%08x %s ", instr, iname(instr));
+ switch (iformat(optype)) {
+ default:
+ case NOT_INST:
+ case MISC:
+ break;
+
+ case PAL:
+ s += sprintf(s, "%d", instr);
+ break;
+
+ case BRANCH: {
+ int reg = (instr >> 21) & 0x1f;
+ int offset = instr & 0x1fffff;
+
+ if (offset >= 0x100000)
+ offset -= 0x200000;
+ if (((optype & 3) == 0) || (optype >= 0x38)) {
+ if ((optype != 0x30) || (reg != 0x1f))
+ s += sprintf(s, "%s,", ireg_name[reg]);
+ } else
+ s += sprintf(s, "f%d,", reg);
+ s += sprintf(s, ".%+d", (offset + 1) << 2);
+ break;
+ }
+
+ case MEMORY: {
+ int addr_reg = (instr >> 16) & 0x1f;
+ int value_reg = (instr >> 21) & 0x1f;
+ int offset = instr & 0xffff;
+
+ if (offset >= 0x8000)
+ offset -= 0x10000;
+ if ((optype >= 0x20) && (optype < 0x28))
+ s += sprintf(s, "f%d", value_reg);
+ else
+ s += sprintf(s, "%s", ireg_name[value_reg]);
+
+ s += sprintf(s, ",%d(%s)", offset, ireg_name[addr_reg]);
+ break;
+ }
+
+ case JUMP: {
+ int target_reg = (instr >> 16) & 0x1f;
+ int return_reg = (instr >> 21) & 0x1f;
+
+ s += sprintf(s, "%s,", ireg_name[return_reg]);
+ s += sprintf(s, "(%s)", ireg_name[target_reg]);
+ break;
+ }
+
+ case OPERATE: {
+ int areg = (instr >> 21) & 0x1f;
+ int breg = (instr >> 16) & 0x1f;
+ int creg = instr & 0x1f;
+ int litflag = instr & (1<<12);
+ int lit = (instr >> 13) & 0xff;
+
+ s += sprintf(s, "%s,", ireg_name[areg]);
+ if (litflag)
+ s += sprintf(s, "%d", lit);
+ else
+ s += sprintf(s, "%s", ireg_name[breg]);
+ s += sprintf(s, ",%s", ireg_name[creg]);
+ break;
+ }
+
+ case FOPERATE: {
+ int areg = (instr >> 21) & 0x1f;
+ int breg = (instr >> 16) & 0x1f;
+ int creg = instr & 0x1f;
+
+ s += sprintf(s, "f%d,f%d,f%d", areg, breg, creg);
+ break;
+ }
+ }
+ buf[s-buf] = 0;
+ printk("%s\n", buf);
}
static void
@@ -59,11 +263,12 @@
long i;
printk("Code:");
- for (i = -3; i < 6; i++) {
+ for (i = -6; i < 2; i++) {
unsigned int insn;
if (__get_user(insn, pc+i))
break;
- printk("%c%08x%c",i?' ':'<',insn,i?' ':'>');
+ printk("%c", i ? ' ' : '*');
+ disassemble(insn);
}
printk("\n");
}
@@ -81,8 +286,12 @@
continue;
if (tmp >= (unsigned long) &_etext)
continue;
- printk(" [<%lx>]", tmp);
- if (++i > 40) {
+ /*
+ * Assume that only the low 24-bits of a kernel text address
+ * is interesting.
+ */
+ printk("%6x%c", (int)tmp & 0xffffff, (++i % 11) ? ' ' : '\n');
+ if (i > 40) {
printk(" ...");
break;
}
@@ -450,7 +659,7 @@
got_exception:
/* Ok, we caught the exception, but we don't want it. Is there
someone to pass it along to? */
- if ((fixup = search_exception_table(pc)) != 0) {
+ if ((fixup = search_exception_table(pc, regs.gp)) != 0) {
unsigned long newpc;
newpc = fixup_exception(una_reg, fixup, pc);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/Makefile linux/arch/alpha/lib/Makefile
--- v2.4.0-test1/linux/arch/alpha/lib/Makefile Mon Dec 20 18:48:21 1999
+++ linux/arch/alpha/lib/Makefile Mon Jun 19 17:59:33 2000
@@ -2,13 +2,18 @@
# Makefile for alpha-specific library files..
#
+.S.s:
+ $(CC) -D__ASSEMBLY__ $(AFLAGS) -E -o $*.s $<
+.S.o:
+ $(CC) -D__ASSEMBLY__ $(AFLAGS) -c -o $*.o $<
+
OBJS = __divqu.o __remqu.o __divlu.o __remlu.o memset.o memcpy.o io.o \
checksum.o csum_partial_copy.o strlen.o \
strcat.o strcpy.o strncat.o strncpy.o stxcpy.o stxncpy.o \
strchr.o strrchr.o memchr.o \
copy_user.o clear_user.o strncpy_from_user.o strlen_user.o \
csum_ipv6_magic.o strcasecmp.o semaphore.o fpreg.o \
- srm_dispatch.o srm_fixup.o srm_puts.o srm_printk.o
+ callback_srm.o callback_init.o srm_puts.o srm_printk.o
lib.a: $(OBJS)
$(AR) rcs lib.a $(OBJS)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/callback_init.c linux/arch/alpha/lib/callback_init.c
--- v2.4.0-test1/linux/arch/alpha/lib/callback_init.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/lib/callback_init.c Mon Jun 19 17:59:33 2000
@@ -0,0 +1,79 @@
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include "../kernel/proto.h"
+
+extern struct hwrpb_struct *hwrpb;
+
+/* This is the SRM version. Maybe there will be a DBM version. */
+
+int callback_init_done = 0;
+
+void * __init callback_init(void * kernel_end)
+{
+ int i, j;
+ unsigned long vaddr = CONSOLE_REMAP_START;
+ struct crb_struct * crb;
+ pgd_t * pgd = pgd_offset_k(vaddr);
+ pmd_t * pmd;
+ unsigned long two_pte_pages;
+
+ if (!alpha_using_srm) {
+ switch_to_system_map();
+ return kernel_end;
+ }
+
+ /* Allocate some memory for the pages. */
+ two_pte_pages = ((unsigned long)kernel_end + ~PAGE_MASK) & PAGE_MASK;
+ kernel_end = (void *)(two_pte_pages + 2*PAGE_SIZE);
+ memset((void *)two_pte_pages, 0, 2*PAGE_SIZE);
+
+ /* Starting at the HWRPB, locate the CRB. */
+ crb = (struct crb_struct *)((char *)hwrpb + hwrpb->crb_offset);
+
+ /* Tell the console whither the console is to be remapped. */
+ if (srm_fixup(vaddr, (unsigned long)hwrpb))
+ __halt(); /* "We're boned." --Bender */
+
+ /* Edit the procedure descriptors for DISPATCH and FIXUP. */
+ crb->dispatch_va = (struct procdesc_struct *)
+ (vaddr + (unsigned long)crb->dispatch_va - crb->map[0].va);
+ crb->fixup_va = (struct procdesc_struct *)
+ (vaddr + (unsigned long)crb->fixup_va - crb->map[0].va);
+
+ switch_to_system_map();
+
+ /*
+ * Set up the first and second level PTEs for console callbacks.
+ * There is an assumption here that only one of each is needed,
+ * and this allows for 8MB. Currently (late 1999), big consoles
+ * are still under 4MB.
+ */
+ pgd_set(pgd, (pmd_t *)two_pte_pages);
+ pmd = pmd_offset(pgd, vaddr);
+ pmd_set(pmd, (pte_t *)(two_pte_pages + PAGE_SIZE));
+
+ /*
+ * Set up the third level PTEs and update the virtual addresses
+ * of the CRB entries.
+ */
+ for (i = 0; i < crb->map_entries; ++i) {
+ unsigned long paddr = crb->map[i].pa;
+ crb->map[i].va = vaddr;
+ for (j = 0; j < crb->map[i].count; ++j) {
+ set_pte(pte_offset(pmd, vaddr),
+ mk_pte_phys(paddr, PAGE_KERNEL));
+ paddr += PAGE_SIZE;
+ vaddr += PAGE_SIZE;
+ }
+ }
+
+ callback_init_done = 1;
+ return kernel_end;
+}
+
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/callback_srm.S linux/arch/alpha/lib/callback_srm.S
--- v2.4.0-test1/linux/arch/alpha/lib/callback_srm.S Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/lib/callback_srm.S Mon Jun 19 17:59:33 2000
@@ -0,0 +1,102 @@
+/*
+ * arch/alpha/lib/callback_srm.S
+ */
+
+#include
+#include
+
+.text
+#define HWRPB_CRB_OFFSET 0xc0
+
+#if defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC)
+.align 4
+srm_dispatch:
+#if defined(CONFIG_ALPHA_GENERIC)
+ ldl $4,alpha_using_srm
+ beq $4,nosrm
+#endif
+ ldq $0,hwrpb # gp is set up by CALLBACK macro.
+ ldl $25,0($25) # Pick up the wrapper data.
+ mov $20,$21 # Shift arguments right.
+ mov $19,$20
+ ldq $1,HWRPB_CRB_OFFSET($0)
+ mov $18,$19
+ mov $17,$18
+ mov $16,$17
+ addq $0,$1,$2 # CRB address
+ ldq $27,0($2) # DISPATCH procedure descriptor (VMS call std)
+ extwl $25,0,$16 # SRM callback function code
+ ldq $3,8($27) # call address
+ extwl $25,2,$25 # argument information (VMS calling std)
+ jmp ($3) # Return directly to caller of wrapper.
+
+.align 4
+.globl srm_fixup
+.ent srm_fixup
+srm_fixup:
+ ldgp $29,0($27)
+#if defined(CONFIG_ALPHA_GENERIC)
+ ldl $4,alpha_using_srm
+ beq $4,nosrm
+#endif
+ ldq $0,hwrpb
+ ldq $1,HWRPB_CRB_OFFSET($0)
+ addq $0,$1,$2 # CRB address
+ ldq $27,16($2) # VA of FIXUP procedure descriptor
+ ldq $3,8($27) # call address
+ lda $25,2($31) # two integer arguments
+ jmp ($3) # Return directly to caller of srm_fixup.
+.end srm_fixup
+
+#if defined(CONFIG_ALPHA_GENERIC)
+.align 3
+nosrm:
+ lda $0,-1($31)
+ ret
+#endif
+
+#define CALLBACK(NAME, CODE, ARG_CNT) \
+.align 4; .globl callback_##NAME; .ent callback_##NAME; callback_##NAME##: \
+ldgp $29,0($27); br $25,srm_dispatch; .word CODE, ARG_CNT; .end callback_##NAME
+
+#else /* defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC) */
+
+#define CALLBACK(NAME, CODE, ARG_CNT) \
+.align 3; .globl callback_##NAME; .ent callback_##NAME; callback_##NAME##: \
+lda $0,-1($31); ret; .end callback_##NAME
+
+.align 3
+.globl srm_fixup
+.ent srm_fixup
+srm_fixup:
+ lda $0,-1($31)
+ ret
+.end srm_fixup
+#endif /* defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC) */
+
+CALLBACK(puts, CCB_PUTS, 4)
+CALLBACK(open, CCB_OPEN, 3)
+CALLBACK(close, CCB_CLOSE, 2)
+CALLBACK(read, CCB_READ, 5)
+CALLBACK(getenv, CCB_GET_ENV, 4)
+CALLBACK(setenv, CCB_SET_ENV, 4)
+CALLBACK(getc, CCB_GETC, 2)
+CALLBACK(reset_term, CCB_RESET_TERM, 2)
+CALLBACK(term_int, CCB_SET_TERM_INT, 3)
+CALLBACK(term_ctl, CCB_SET_TERM_CTL, 3)
+CALLBACK(process_keycode, CCB_PROCESS_KEYCODE, 3)
+CALLBACK(ioctl, CCB_IOCTL, 6)
+CALLBACK(write, CCB_WRITE, 5)
+CALLBACK(reset_env, CCB_RESET_ENV, 4)
+CALLBACK(save_env, CCB_SAVE_ENV, 1)
+CALLBACK(pswitch, CCB_PSWITCH, 3)
+CALLBACK(bios_emul, CCB_BIOS_EMUL, 5)
+
+.data
+__alpha_using_srm: # For use by bootpheader
+ .long 7 # value is not 1 for link debugging
+ .weak alpha_using_srm; alpha_using_srm = __alpha_using_srm
+__callback_init_done: # For use by bootpheader
+ .long 7 # value is not 1 for link debugging
+ .weak callback_init_done; callback_init_done = __callback_init_done
+
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/srm_dispatch.S linux/arch/alpha/lib/srm_dispatch.S
--- v2.4.0-test1/linux/arch/alpha/lib/srm_dispatch.S Mon Oct 12 11:40:12 1998
+++ linux/arch/alpha/lib/srm_dispatch.S Wed Dec 31 16:00:00 1969
@@ -1,43 +0,0 @@
-/*
- * arch/alpha/lib/srm_dispatch.S
- */
-
-.globl srm_dispatch
-.ent srm_dispatch
-srm_dispatch:
- .frame $30,30,$26
- subq $30,80,$30
- stq $26,0($30)
- stq $8,8($30)
- stq $9,16($30)
- stq $10,24($30)
- stq $11,32($30)
- stq $12,40($30)
- stq $13,48($30)
- stq $14,56($30)
- stq $15,64($30)
- stq $29,72($30)
- .mask 0x2400FF00, -80
- .prologue 0
-
- ldq $1,hwrpb
- ldq $2,0xc0($1) /* crb offset */
- addq $2,$1,$2 /* crb */
- ldq $27,0($2) /* dispatch procedure value */
-
- ldq $2,8($27) /* dispatch call address */
- jsr $26,($2) /* call it (weird VMS call seq) */
-
- ldq $26,0($30)
- ldq $8,8($30)
- ldq $9,16($30)
- ldq $10,24($30)
- ldq $11,32($30)
- ldq $12,40($30)
- ldq $13,48($30)
- ldq $14,56($30)
- ldq $15,64($30)
- ldq $29,72($30)
- addq $30,80,$30
- ret $31,($26),1
-.end srm_dispatch
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/srm_fixup.S linux/arch/alpha/lib/srm_fixup.S
--- v2.4.0-test1/linux/arch/alpha/lib/srm_fixup.S Mon Oct 12 11:40:12 1998
+++ linux/arch/alpha/lib/srm_fixup.S Wed Dec 31 16:00:00 1969
@@ -1,42 +0,0 @@
-/*
- * arch/alpha/lib/srm_fixup.S
- */
-
-.globl srm_fixup
-.ent srm_fixup
-srm_fixup:
- .frame $30,30,$26
- subq $30,80,$30
- stq $26,0($30)
- stq $8,8($30)
- stq $9,16($30)
- stq $10,24($30)
- stq $11,32($30)
- stq $12,40($30)
- stq $13,48($30)
- stq $14,56($30)
- stq $15,64($30)
- stq $29,72($30)
- .mask 0x2400FF00, -80
- .prologue 0
-
- ldq $2,0xc0($17) /* crb offset */
- addq $2,$1,$2 /* crb */
- ldq $27,16($2) /* fixup procedure value */
-
- ldq $2,8($27) /* dispatch call address */
- jsr $26,($2) /* call it (weird VMS call seq) */
-
- ldq $26,0($30)
- ldq $8,8($30)
- ldq $9,16($30)
- ldq $10,24($30)
- ldq $11,32($30)
- ldq $12,40($30)
- ldq $13,48($30)
- ldq $14,56($30)
- ldq $15,64($30)
- ldq $29,72($30)
- addq $30,80,$30
- ret $31,($26),1
-.end srm_fixup
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/srm_printk.c linux/arch/alpha/lib/srm_printk.c
--- v2.4.0-test1/linux/arch/alpha/lib/srm_printk.c Mon Oct 12 11:40:12 1998
+++ linux/arch/alpha/lib/srm_printk.c Mon Jun 19 17:59:33 2000
@@ -9,13 +9,33 @@
srm_printk(const char *fmt, ...)
{
static char buf[1024];
- va_list args;
- long i;
+ va_list args;
+ long len, num_lf;
+ char *src, *dst;
- va_start(args, fmt);
- i = vsprintf(buf,fmt,args);
- va_end(args);
+ va_start(args, fmt);
+ len = vsprintf(buf, fmt, args);
+ va_end(args);
- srm_puts(buf);
- return i;
+ /* count number of linefeeds in string: */
+
+ num_lf = 0;
+ for (src = buf; *src; ++src) {
+ if (*src == '\n') {
+ ++num_lf;
+ }
+ }
+
+ if (num_lf) {
+ /* expand each linefeed into carriage-return/linefeed: */
+ for (dst = src + num_lf; src >= buf; ) {
+ if (*src == '\n') {
+ *dst-- = '\r';
+ }
+ *dst-- = *src--;
+ }
+ }
+
+ srm_puts(buf, num_lf+len);
+ return len;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/lib/srm_puts.c linux/arch/alpha/lib/srm_puts.c
--- v2.4.0-test1/linux/arch/alpha/lib/srm_puts.c Mon Oct 12 11:40:12 1998
+++ linux/arch/alpha/lib/srm_puts.c Mon Jun 19 17:59:33 2000
@@ -5,30 +5,19 @@
#include
#include
-void
-srm_puts(const char *str)
+long
+srm_puts(const char *str, long len)
{
- /* Expand \n to \r\n as we go. */
+ long remaining, written;
- while (*str) {
- long len;
- const char *e = str;
+ if (!callback_init_done)
+ return len;
- if (*str == '\n') {
- if (srm_dispatch(CCB_PUTS, 0, "\r", 1) < 0)
- return;
- ++e;
- }
-
- e = strchr(e, '\n') ? : strchr(e, '\0');
- len = e - str;
-
- while (len > 0) {
- long written = srm_dispatch(CCB_PUTS, 0, str, len);
- if (written < 0)
- return;
- len -= written & 0xffffffff;
- str += written & 0xffffffff;
- }
+ for (remaining = len; remaining > 0; remaining -= written)
+ {
+ written = callback_puts(0, str, remaining);
+ written &= 0xffffffff;
+ str += written;
}
+ return len;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/mm/extable.c linux/arch/alpha/mm/extable.c
--- v2.4.0-test1/linux/arch/alpha/mm/extable.c Thu Jan 23 11:01:28 1997
+++ linux/arch/alpha/mm/extable.c Mon Jun 19 17:59:33 2000
@@ -36,12 +36,12 @@
register unsigned long gp __asm__("$29");
-unsigned
-search_exception_table(unsigned long addr)
+static unsigned
+search_exception_table_without_gp(unsigned long addr)
{
unsigned ret;
-#ifndef CONFIG_MODULE
+#ifndef CONFIG_MODULES
/* There is only the kernel to search. */
ret = search_one_table(__start___ex_table, __stop___ex_table - 1,
addr - gp);
@@ -57,6 +57,42 @@
if (ret) return ret;
}
#endif
+
+ return 0;
+}
+
+unsigned
+search_exception_table(unsigned long addr, unsigned long exc_gp)
+{
+ unsigned ret;
+
+#ifndef CONFIG_MODULES
+ ret = search_one_table(__start___ex_table, __stop___ex_table - 1,
+ addr - exc_gp);
+ if (ret) return ret;
+#else
+ /* The kernel is the last "module" -- no need to treat it special. */
+ struct module *mp;
+ for (mp = module_list; mp ; mp = mp->next) {
+ if (!mp->ex_table_start)
+ continue;
+ ret = search_one_table(mp->ex_table_start,
+ mp->ex_table_end - 1, addr - exc_gp);
+ if (ret) return ret;
+ }
+#endif
+
+ /*
+ * The search failed with the exception gp. To be safe, try the
+ * old method before giving up.
+ */
+ ret = search_exception_table_without_gp(addr);
+ if (ret) {
+ printk(KERN_ALERT, "%s: [%lx] EX_TABLE search fail with"
+ "exc frame GP, success with raw GP\n",
+ current->comm, addr);
+ return ret;
+ }
return 0;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/mm/fault.c linux/arch/alpha/mm/fault.c
--- v2.4.0-test1/linux/arch/alpha/mm/fault.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/mm/fault.c Mon Jun 19 17:59:33 2000
@@ -164,11 +164,13 @@
no_context:
/* Are we prepared to handle this fault as an exception? */
- if ((fixup = search_exception_table(regs->pc)) != 0) {
+ if ((fixup = search_exception_table(regs->pc, regs->gp)) != 0) {
unsigned long newpc;
newpc = fixup_exception(dpf_reg, fixup, regs->pc);
- printk("%s: Exception at [<%lx>] (%lx)\n",
+#if 1
+ printk("%s: Exception at [<%lx>] (%lx) handled successfully\n",
current->comm, regs->pc, newpc);
+#endif
regs->pc = newpc;
return;
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/mm/init.c linux/arch/alpha/mm/init.c
--- v2.4.0-test1/linux/arch/alpha/mm/init.c Wed Apr 26 16:34:06 2000
+++ linux/arch/alpha/mm/init.c Mon Jun 19 17:59:33 2000
@@ -182,43 +182,15 @@
return __reload_thread(pcb);
}
-/*
- * paging_init() sets up the page tables: in the alpha version this actually
- * unmaps the bootup page table (as we're now in KSEG, so we don't need it).
- */
+/* switch_to_system_map() sets up some necessary page tables. */
void
-paging_init(void)
+switch_to_system_map(void)
{
unsigned long newptbr;
unsigned long original_pcb_ptr;
- unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
- unsigned long dma_pfn, high_pfn;
-
- dma_pfn = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
- high_pfn = max_low_pfn;
-
-#define ORDER_MASK (~((1 << (MAX_ORDER-1))-1))
-#define ORDER_ALIGN(n) (((n) + ~ORDER_MASK) & ORDER_MASK)
-
- dma_pfn = ORDER_ALIGN(dma_pfn);
- high_pfn = ORDER_ALIGN(high_pfn);
-
-#undef ORDER_MASK
-#undef ORDER_ALIGN
-
- if (dma_pfn > high_pfn)
- zones_size[ZONE_DMA] = high_pfn;
- else {
- zones_size[ZONE_DMA] = dma_pfn;
- zones_size[ZONE_NORMAL] = high_pfn - dma_pfn;
- }
-
- /* Initialize mem_map[]. */
- free_area_init(zones_size);
/* Initialize the kernel's page tables. Linux puts the vptb in
the last slot of the L1 page table. */
- memset((void *)ZERO_PGE, 0, PAGE_SIZE);
memset(swapper_pg_dir, 0, PAGE_SIZE);
newptbr = ((unsigned long) swapper_pg_dir - PAGE_OFFSET) >> PAGE_SHIFT;
pgd_val(swapper_pg_dir[1023]) =
@@ -251,6 +223,41 @@
phys_to_virt(original_pcb_ptr);
}
original_pcb = *(struct thread_struct *) original_pcb_ptr;
+}
+
+/*
+ * paging_init() sets up the memory map.
+ */
+void
+paging_init(void)
+{
+ unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
+ unsigned long dma_pfn, high_pfn;
+
+ dma_pfn = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
+ high_pfn = max_low_pfn;
+
+#define ORDER_MASK (~((1L << (MAX_ORDER-1))-1))
+#define ORDER_ALIGN(n) (((n) + ~ORDER_MASK) & ORDER_MASK)
+
+ dma_pfn = ORDER_ALIGN(dma_pfn);
+ high_pfn = ORDER_ALIGN(high_pfn);
+
+#undef ORDER_MASK
+#undef ORDER_ALIGN
+
+ if (dma_pfn > high_pfn)
+ zones_size[ZONE_DMA] = high_pfn;
+ else {
+ zones_size[ZONE_DMA] = dma_pfn;
+ zones_size[ZONE_NORMAL] = high_pfn - dma_pfn;
+ }
+
+ /* Initialize mem_map[]. */
+ free_area_init(zones_size);
+
+ /* Initialize the kernel's ZERO_PGE. */
+ memset((void *)ZERO_PGE, 0, PAGE_SIZE);
}
#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SRM)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/alpha/vmlinux.lds linux/arch/alpha/vmlinux.lds
--- v2.4.0-test1/linux/arch/alpha/vmlinux.lds Sat Feb 26 22:31:38 2000
+++ linux/arch/alpha/vmlinux.lds Mon Jun 19 17:59:33 2000
@@ -2,7 +2,7 @@
ENTRY(__start)
SECTIONS
{
- . = 0xfffffc0000310000;
+ . = 0xfffffc0000810000;
_text = .;
.text : { *(.text) }
_etext = .;
@@ -50,9 +50,11 @@
.got : { *(.got) }
.sdata : { *(.sdata) }
_edata = .;
- _bss = .;
+
+ __bss_start = .;
.sbss : { *(.sbss) *(.scommon) }
.bss : { *(.bss) *(COMMON) }
+ __bss_stop = .;
_end = .;
.mdebug 0 : { *(.mdebug) }
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/Makefile linux/arch/arm/Makefile
--- v2.4.0-test1/linux/arch/arm/Makefile Tue May 23 15:31:32 2000
+++ linux/arch/arm/Makefile Mon Jun 19 17:59:33 2000
@@ -19,7 +19,7 @@
AFLAGS += -mno-fpu
CFLAGS_PIPE := -pipe
-CFLAGS := $(CFLAGS) $(CFLAGS_PIPE)
+CFLAGS := $(CFLAGS) $(CFLAGS_PIPE) -msoft-float
ifdef CONFIG_FRAME_POINTER
CFLAGS := $(CFLAGS:-fomit-frame-pointer=)
@@ -29,11 +29,13 @@
CFLAGS += -g
endif
+GZFLAGS = -9
+
# Ensure this is ld "2.9.4" or later
NEW_LINKER := $(shell if $(LD) --gc-sections --version >/dev/null 2>&1; then echo y; else echo n; fi)
ifneq ($(NEW_LINKER),y)
-dummy:; @echo '*** 2.3 kernels no longer build correctly with old versions of binutils.'
+dummy:; @echo '*** ${VERSION}.${PATCHLEVEL} kernels no longer build correctly with old versions of binutils.'
@echo '*** Please upgrade your binutils to 2.9.5.'
@false
endif
@@ -45,7 +47,7 @@
# select flags depending on the compiler
#
ifeq ($(NEW_GCC),y)
-CFLAGS += -mshort-load-bytes -msoft-float
+CFLAGS += -mshort-load-bytes
CFLAGS_PROC_CPU_26 := -mcpu=arm3 -Os
CFLAGS_PROC_CPU_32v3 := -march=armv3
CFLAGS_PROC_CPU_32v4 := -march=armv4
@@ -110,7 +112,7 @@
LIBGCC := $(shell $(CC) $(CFLAGS) --print-libgcc-file-name)
-export LIBGCC MACHINE PROCESSOR TEXTADDR
+export LIBGCC MACHINE PROCESSOR TEXTADDR GZFLAGS
ifeq ($(CONFIG_ARCH_A5K),y)
MACHINE = a5k
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/boot/compressed/Makefile linux/arch/arm/boot/compressed/Makefile
--- v2.4.0-test1/linux/arch/arm/boot/compressed/Makefile Fri May 12 14:18:55 2000
+++ linux/arch/arm/boot/compressed/Makefile Mon Jun 19 17:59:33 2000
@@ -89,7 +89,7 @@
piggy.o: $(SYSTEM)
$(OBJCOPY) $(SYSTEM) piggy
- gzip -9 < piggy > piggy.gz
+ gzip $(GZFLAGS) < piggy > piggy.gz
$(LD) -r -o $@ -b binary piggy.gz
rm -f piggy piggy.gz
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/boot/compressed/head-sa1100.S linux/arch/arm/boot/compressed/head-sa1100.S
--- v2.4.0-test1/linux/arch/arm/boot/compressed/head-sa1100.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/boot/compressed/head-sa1100.S Mon Jun 19 17:59:33 2000
@@ -133,6 +133,5 @@
#endif
@ Restore initial r0/r1
- @ (r8 preserved)
mov r0, r8
mov r1, r9
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/boot/compressed/head.S linux/arch/arm/boot/compressed/head.S
--- v2.4.0-test1/linux/arch/arm/boot/compressed/head.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/boot/compressed/head.S Mon Jun 19 17:59:33 2000
@@ -84,9 +84,7 @@
b 1f
.word 0x016f2818 @ Magic numbers to help the loader
.word start
-1: adr r8, start @ get the start address of the code
- @ (used for locating the page tables)
-
+1:
/*
* some architecture specific code can be inserted
* by the linker here, but it should preserve r0, r1
@@ -178,9 +176,13 @@
.align 5
cache_on: ldr r1, proc_sa110_type
eor r1, r1, r6
- movs r1, r1, lsr #5
+ movs r1, r1, lsr #5 @ catch SA110 and SA1100
+ beq 1f
+ ldr r1, proc_sa1110_type
+ eor r1, r1, r6
+ movs r1, r1, lsr #4
movne pc, lr
-
+1:
sub r3, r4, #16384 @ Page directory size
bic r3, r3, #0xff @ Align the pointer
bic r3, r3, #0x3f
@@ -259,6 +261,11 @@
.word 0x4401a100
.size proc_sa110_type, . - proc_sa110_type
+ .type proc_sa1110_type,#object
+proc_sa1110_type:
+ .word 0x6901b110
+ .size proc_sa1110_type, . - proc_sa1110_type
+
/*
* Turn off StrongARM cache and MMU. It is safe to
* leave the I-cache on.
@@ -273,8 +280,13 @@
.align 5
cache_off: ldr r1, proc_sa110_type
eor r1, r1, r6
- movs r1, r1, lsr #5
+ movs r1, r1, lsr #5 @ catch SA110 and SA1100
+ beq 1f
+ ldr r1, proc_sa1110_type
+ eor r1, r1, r6
+ movs r1, r1, lsr #4
movne pc, lr
+1:
mrc p15, 0, r0, c1, c0
bic r0, r0, #0x000d
mcr p15, 0, r0, c1, c0
@@ -292,11 +304,15 @@
*/
.align 5
cache_clean_flush:
- ldr r1, proc_sa110_type @ SA-110 or SA-1100?
+ ldr r1, proc_sa110_type
+ eor r1, r1, r6
+ movs r1, r1, lsr #5 @ catch SA110 and SA1100
+ beq 1f
+ ldr r1, proc_sa1110_type
eor r1, r1, r6
- movs r1, r1, lsr #5
+ movs r1, r1, lsr #4
movne pc, lr
-
+1:
bic r1, pc, #31
add r2, r1, #32768
1: ldr r12, [r1], #32 @ s/w flush D cache
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/config.in linux/arch/arm/config.in
--- v2.4.0-test1/linux/arch/arm/config.in Fri May 12 14:18:55 2000
+++ linux/arch/arm/config.in Mon Jun 19 17:59:33 2000
@@ -1,57 +1,50 @@
#
# For a description of the syntax of this configuration file,
-# see the Configure script.
+# see Documentation/kbuild/config-language.txt.
#
mainmenu_name "Linux Kernel Configuration"
define_bool CONFIG_ARM y
-
+define_bool CONFIG_SBUS n
define_bool CONFIG_UID16 y
+
mainmenu_option next_comment
comment 'Code maturity level options'
bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
endmenu
+
mainmenu_option next_comment
-comment 'System and Processor Type'
+comment 'System Type'
choice 'ARM system type' \
"Archimedes CONFIG_ARCH_ARC \
A5000 CONFIG_ARCH_A5K \
- RiscPC CONFIG_ARCH_RPC \
+ Co-EBSA285 CONFIG_ARCH_CO285 \
EBSA-110 CONFIG_ARCH_EBSA110 \
- FootBridge-based CONFIG_FOOTBRIDGE" RiscPC
+ FootBridge CONFIG_ARCH_FOOTBRIDGE \
+ RiscPC CONFIG_ARCH_RPC \
+ SA1100-based CONFIG_ARCH_SA1100" RiscPC
+
# the following are placeholders for when they are fully integrated
+# Cirrus CL-PS7500FE CONFIG_ARCH_CLPS7500 \
# LinkUp-L7200 CONFIG_ARCH_L7200
-# SA1100-based CONFIG_ARCH_SA1100
-if [ "$CONFIG_FOOTBRIDGE" = "y" ]; then
- bool 'FootBridge in HOST mode' CONFIG_HOST_FOOTBRIDGE
- if [ "$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
- define_bool CONFIG_ADDIN_FOOTBRIDGE n
- else
- define_bool CONFIG_ADDIN_FOOTBRIDGE y
- fi
-fi
-
-if [ "$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
+if [ "$CONFIG_ARCH_FOOTBRIDGE" = "y" ]; then
comment 'Footbridge Implementations'
- bool ' Include support for EBSA285' CONFIG_ARCH_EBSA285
- bool ' Include support for CATS' CONFIG_ARCH_CATS
- bool ' Include support for NetWinder' CONFIG_ARCH_NETWINDER
- bool ' Include support for Compaq Personal Server' CONFIG_ARCH_PERSONAL_SERVER
-fi
-
-if [ "$CONFIG_ADDIN_FOOTBRIDGE" = "y" ]; then
- # If we get any other footbridge-based plug-in boards, then
- # add your architecture options here
- define_bool CONFIG_ARCH_CO285 y
+ bool ' CATS support' CONFIG_ARCH_CATS
+ bool ' Compaq Personal Server support' CONFIG_ARCH_PERSONAL_SERVER
+ bool ' EBSA285 (addin mode) support' CONFIG_ARCH_EBSA285_ADDIN
+ bool ' EBSA285 (host mode) support' CONFIG_ARCH_EBSA285_HOST
+ bool ' NetWinder support' CONFIG_ARCH_NETWINDER
fi
-
if [ "$CONFIG_ARCH_SA1100" = "y" ]; then
comment 'SA11x0 Implementations'
- bool ' Include support for Assabet' CONFIG_SA110_ASSABET
+ bool ' Include support for Assabet' CONFIG_SA1100_ASSABET
+ if [ "$CONFIG_SA1100_ASSABET" = "y" ]; then
+ bool ' Include support for Neponset' CONFIG_ASSABET_NEPONSET
+ fi
bool ' Include support for Bitsy' CONFIG_SA1100_BITSY
bool ' Include support for Brutus' CONFIG_SA1100_BRUTUS
# bool ' Include support for Empeg' CONFIG_SA1100_EMPEG
@@ -62,43 +55,21 @@
bool ' Include support for GraphicsClient' CONFIG_SA1100_GRAPHICSCLIENT
bool ' Include support for Victor' CONFIG_SA1100_VICTOR
# bool ' Include support for Tifon' CONFIG_SA1100_TIFON
- define_bool CONFIG_DISCONTIGMEM y
+# bool ' Include support for XP860' CONFIG_SA1100_XP860
fi
-#
-# Select various configuration options depending on the machine type
-# Easy check for Acorn-style architectures
-#
-if [ "$CONFIG_ARCH_ARC" = "y" -o \
- "$CONFIG_ARCH_A5K" = "y" -o \
- "$CONFIG_ARCH_RPC" = "y" ]; then
- define_bool CONFIG_ARCH_ACORN y
-else
- define_bool CONFIG_ARCH_ACORN n
-fi
-
-#
-# Figure out whether this system uses 26-bit or 32-bit CPUs. Nobody has
-# ever built a machine that can take both, and now that ARM3 is obsolete
-# nobody is likely to either.
-#
+# Figure out whether this system uses 26-bit or 32-bit CPUs.
if [ "$CONFIG_ARCH_ARC" = "y" -o \
"$CONFIG_ARCH_A5K" = "y" ]; then
define_bool CONFIG_CPU_32 n
define_bool CONFIG_CPU_26 y
-
- #
- # Select memory size
- #
bool '2MB physical memory' CONFIG_PAGESIZE_16
else
define_bool CONFIG_CPU_32 y
define_bool CONFIG_CPU_26 n
fi
-#
# Select CPU and optimisation dependent on architecture
-#
if [ "$CONFIG_ARCH_RPC" = "y" ]; then
define_bool CONFIG_CPU_32v3 y
bool 'Support ARM610' CONFIG_CPU_ARM6
@@ -113,6 +84,10 @@
define_bool CONFIG_CPU_32v4 y
define_bool CONFIG_CPU_SA110 y
fi
+if [ "$CONFIG_ARCH_CLPS7500" = "y" ]; then
+ define_bool CONFIG_CPU_32v4 y
+ define_bool CONFIG_CPU_ARM7 y
+fi
if [ "$CONFIG_ARCH_L7200" = "y" ]; then
define_bool CONFIG_CPU_32v4 y
define_bool CONFIG_CPU_ARM720 y
@@ -122,20 +97,54 @@
define_bool CONFIG_CPU_SA1100 y
fi
-#
-# These machines always have PCI
-#
+# Select various configuration options depending on the machine type
+if [ "$CONFIG_ARCH_ARC" = "y" -o \
+ "$CONFIG_ARCH_A5K" = "y" -o \
+ "$CONFIG_ARCH_RPC" = "y" ]; then
+ define_bool CONFIG_ARCH_ACORN y
+else
+ define_bool CONFIG_ARCH_ACORN n
+fi
+
+if [ "$CONFIG_ARCH_CO285" = "y" -o \
+ "$CONFIG_ARCH_FOOTBRIDGE" = "y" ]; then
+ define_bool CONFIG_FOOTBRIDGE y
+else
+ define_bool CONFIG_FOOTBRIDGE n
+fi
+if [ "$CONFIG_ARCH_CATS" = "y" -o \
+ "$CONFIG_ARCH_EBSA285_HOST" = "y" -o \
+ "$CONFIG_ARCH_NETWINDER" = "y" -o \
+ "$CONFIG_ARCH_PERSONAL_SERVER" = "y" ]; then
+ define_bool CONFIG_FOOTBRIDGE_HOST y
+else
+ define_bool CONFIG_FOOTBRIDGE_HOST n
+fi
+if [ "$CONFIG_ARCH_CO285" = "y" -o \
+ "$CONFIG_ARCH_EBSA285_ADDIN" = "y" ]; then
+ define_bool CONFIG_FOOTBRIDGE_ADDIN y
+else
+ define_bool CONFIG_FOOTBRIDGE_ADDIN n
+fi
+if [ "$CONFIG_ARCH_EBSA285_HOST" = "y" -o \
+ "$CONFIG_ARCH_EBSA285_ADDIN" = "y" ]; then
+ define_bool CONFIG_ARCH_EBSA285 y
+fi
+
+if [ "$CONFIG_ARCH_SA1100" = "y" ]; then
+ define_bool CONFIG_DISCONTIGMEM y
+else
+ define_bool CONFIG_DISCONTIGMEM n
+fi
+
+# Now handle the bus types
if [ "$CONFIG_ARCH_NEXUSPCI" = "y" -o \
- "$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
+ "$CONFIG_FOOTBRIDGE_HOST" = "y" ]; then
define_bool CONFIG_PCI y
- source drivers/pci/Config.in
else
define_bool CONFIG_PCI n
fi
-#
-# These machines have ISA-DMA
-#
if [ "$CONFIG_ARCH_CATS" = "y" -o \
"$CONFIG_ARCH_SHARK" = "y" -o \
"$CONFIG_ARCH_NETWINDER" = "y" ]; then
@@ -145,15 +154,9 @@
define_bool CONFIG_ISA n
define_bool CONFIG_ISA_DMA n
fi
-
-define_bool CONFIG_SBUS n
-define_bool CONFIG_PCMCIA n
-
-if [ "$CONFIG_CPU_32" = "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then
- bool 'Kernel-mode alignment trap handler' CONFIG_ALIGNMENT_TRAP
-fi
endmenu
+
mainmenu_option next_comment
comment 'Loadable module support'
bool 'Enable loadable module support' CONFIG_MODULES
@@ -163,53 +166,61 @@
fi
endmenu
+
mainmenu_option next_comment
comment 'General setup'
+source drivers/pci/Config.in
+bool 'Support hot-pluggable devices' CONFIG_HOTPLUG
+if [ "$CONFIG_HOTPLUG" = "y" ]; then
+ source drivers/pcmcia/Config.in
+else
+ define_bool CONFIG_PCMCIA n
+fi
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
bool 'Sysctl support' CONFIG_SYSCTL
-tristate 'Math emulation' CONFIG_NWFPE
-if [ "$CONFIG_PROC_FS" = "y" ]; then
- choice 'Kernel core (/proc/kcore) format' \
+tristate 'NWFPE math emulation' CONFIG_NWFPE
+choice 'Kernel core (/proc/kcore) format' \
"ELF CONFIG_KCORE_ELF \
A.OUT CONFIG_KCORE_AOUT" ELF
-fi
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
if [ "$CONFIG_CPU_32" = "y" ]; then
tristate 'RISC OS personality' CONFIG_ARTHUR
fi
-
-source drivers/parport/Config.in
-
if [ "$CONFIG_ARCH_EBSA110" = "y" -o \
"$CONFIG_ARCH_SA1100" = "y" -o \
- "$CONFIG_ARCH_NETWINDER" = "y" -o \
"$CONFIG_ARCH_PERSONAL_SERVER" = "y" -o \
"$CONFIG_ARCH_CATS" = "y" ]; then
- string 'Initial kernel command string' CONFIG_CMDLINE
+ string 'Default kernel command string' CONFIG_CMDLINE ""
fi
if [ "$CONFIG_ARCH_NETWINDER" = "y" -o \
"$CONFIG_ARCH_EBSA110" = "y" -o \
"$CONFIG_ARCH_EBSA285" = "y" -o \
- "$CONFIG_ARCH_CO285" = "y" ]; then
+ "$CONFIG_ARCH_CO285" = "y" -o \
+ "$CONFIG_ARCH_SA1100" = "y" ]; then
bool 'Timer and CPU usage LEDs' CONFIG_LEDS
if [ "$CONFIG_LEDS" = "y" ]; then
if [ "$CONFIG_ARCH_NETWINDER" = "y" -o \
"$CONFIG_ARCH_EBSA285" = "y" -o \
- "$CONFIG_ARCH_CO285" = "y" ]; then
+ "$CONFIG_ARCH_CO285" = "y" -o \
+ "$CONFIG_ARCH_SA1100" = "y" ]; then
bool ' Timer LED' CONFIG_LEDS_TIMER
bool ' CPU usage LED' CONFIG_LEDS_CPU
fi
fi
+ if [ "$CONFIG_ARCH_EBSA110" = "y" ]; then
+ define_bool CONFIG_LEDS_TIMER y
+ fi
+fi
+if [ "$CONFIG_CPU_32" = "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then
+ bool 'Kernel-mode alignment trap handler' CONFIG_ALIGNMENT_TRAP
fi
endmenu
-source drivers/ieee1394/Config.in
-
-source drivers/i2o/Config.in
+source drivers/parport/Config.in
source drivers/pnp/Config.in
@@ -219,37 +230,9 @@
source drivers/acorn/block/Config.in
fi
-source drivers/char/Config.in
-if [ "$CONFIG_ARCH_ACORN" = "y" ]; then
- if [ "$CONFIG_BUSMOUSE" = "y" ]; then
- if [ "$CONFIG_ARCH_RPC" != "y" ]; then
- define_bool CONFIG_KBDMOUSE y
- else
- define_bool CONFIG_RPCMOUSE y
- fi
- fi
-fi
-
-#source drivers/misc/Config.in
-
-if [ "$CONFIG_VT" = "y" ]; then
- mainmenu_option next_comment
- comment 'Console drivers'
- if [ "$CONFIG_ARCH_ACORN" != "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then
- bool 'VGA text console' CONFIG_VGA_CONSOLE
- fi
- bool 'Support Frame buffer devices' CONFIG_FB
- source drivers/video/Config.in
- endmenu
-fi
-
if [ "$CONFIG_NET" = "y" ]; then
source net/Config.in
- source net/ax25/Config.in
-
- source net/irda/Config.in
-
mainmenu_option next_comment
comment 'Network device support'
@@ -258,16 +241,11 @@
source drivers/net/Config.in
fi
endmenu
-fi
-# mainmenu_option next_comment
-# comment 'ISDN subsystem'
-#
-# tristate 'ISDN support' CONFIG_ISDN
-# if [ "$CONFIG_ISDN" != "n" ]; then
-# source drivers/isdn/Config.in
-# fi
-# endmenu
+ source net/ax25/Config.in
+
+ source net/irda/Config.in
+fi
mainmenu_option next_comment
comment 'ATA/IDE/MFM/RLL support'
@@ -292,6 +270,44 @@
fi
endmenu
+source drivers/ieee1394/Config.in
+
+source drivers/i2o/Config.in
+
+mainmenu_option next_comment
+comment 'ISDN subsystem'
+
+tristate 'ISDN support' CONFIG_ISDN
+if [ "$CONFIG_ISDN" != "n" ]; then
+ source drivers/isdn/Config.in
+fi
+endmenu
+
+source drivers/char/Config.in
+if [ "$CONFIG_ARCH_ACORN" = "y" -a \
+ "$CONFIG_BUSMOUSE" = "y" ]; then
+ if [ "$CONFIG_ARCH_RPC" != "y" ]; then
+ define_bool CONFIG_KBDMOUSE y
+ else
+ define_bool CONFIG_RPCMOUSE y
+ fi
+fi
+
+#source drivers/misc/Config.in
+
+source fs/Config.in
+
+if [ "$CONFIG_VT" = "y" ]; then
+ mainmenu_option next_comment
+ comment 'Console drivers'
+ if [ "$CONFIG_ARCH_ACORN" != "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then
+ bool 'VGA text console' CONFIG_VGA_CONSOLE
+ fi
+ bool 'Support Frame buffer devices' CONFIG_FB
+ source drivers/video/Config.in
+ endmenu
+fi
+
if [ "$CONFIG_ARCH_ACORN" = "y" -o \
"$CONFIG_ARCH_CLPS7500" = "y" -o \
"$CONFIG_ARCH_SHARK" = "y" -o \
@@ -306,10 +322,9 @@
endmenu
fi
-source fs/Config.in
-
source drivers/usb/Config.in
+
mainmenu_option next_comment
comment 'Kernel hacking'
@@ -317,7 +332,6 @@
bool 'Verbose kernel error messages' CONFIG_DEBUG_ERRORS
bool 'Verbose user fault messages' CONFIG_DEBUG_USER
bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO
-#bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
if [ "$CONFIG_CPU_26" = "y" ]; then
bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/a5k linux/arch/arm/def-configs/a5k
--- v2.4.0-test1/linux/arch/arm/def-configs/a5k Thu Feb 10 17:11:02 2000
+++ linux/arch/arm/def-configs/a5k Mon Jun 19 17:59:33 2000
@@ -94,10 +94,6 @@
# CONFIG_BLK_DEV_IDEDMA_ICS is not set
# CONFIG_BLK_DEV_IDE_RAPIDE is not set
# CONFIG_IDE_CHIPSETS is not set
-
-#
-# Additional Block Devices
-#
CONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/assabet linux/arch/arm/def-configs/assabet
--- v2.4.0-test1/linux/arch/arm/def-configs/assabet Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/assabet Mon Jun 19 17:59:33 2000
@@ -10,25 +10,29 @@
CONFIG_EXPERIMENTAL=y
#
-# System and processor type
+# System and Processor Type
#
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
-# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_FOOTBRIDGE is not set
+# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
+
+#
+# SA11x0 Implementations
+#
CONFIG_SA1100_ASSABET=y
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_EMPEG is not set
-# CONFIG_SA1100_ITSY is not set
+# CONFIG_ASSABET_NEPONSET is not set
# CONFIG_SA1100_BITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
# CONFIG_SA1100_THINCLIENT is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_TIFON is not set
CONFIG_DISCONTIGMEM=y
+CONFIG_SA1100_FREQUENCY_SCALE=y
+# CONFIG_SA1100_VOLTAGE_SCALE is not set
# CONFIG_ARCH_ACORN is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
@@ -37,7 +41,8 @@
# CONFIG_PCI is not set
# CONFIG_ISA is not set
# CONFIG_ISA_DMA is not set
-# CONFIG_ALIGNMENT_TRAP is not set
+# CONFIG_SBUS is not set
+CONFIG_ALIGNMENT_TRAP=y
#
# Loadable module support
@@ -49,14 +54,14 @@
#
# General setup
#
-# CONFIG_NET is not set
+CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_SYSCTL is not set
+CONFIG_SYSCTL=y
CONFIG_NWFPE=y
CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
@@ -69,13 +74,22 @@
CONFIG_LEDS=y
CONFIG_LEDS_TIMER=y
CONFIG_LEDS_CPU=y
+CONFIG_HOTPLUG=y
+
+#
+# PC Card support
+#
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_SA1100_PCMCIA=y
+CONFIG_VIRTUAL_BUS=y
#
# I2O device support
#
# CONFIG_I2O is not set
-# CONFIG_I2O_PCI is not set
# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
# CONFIG_I2O_SCSI is not set
# CONFIG_I2O_PROC is not set
@@ -91,12 +105,15 @@
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
-
-#
-# Additional Block Devices
-#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_LVM is not set
# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_RAID15_DANGEROUS is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_FLASH is not set
@@ -152,6 +169,7 @@
# CONFIG_FTAPE is not set
# CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
+# CONFIG_PCMCIA_SERIAL is not set
# CONFIG_AGP is not set
#
@@ -171,6 +189,7 @@
CONFIG_FBCON_CFB2=y
CONFIG_FBCON_CFB4=y
CONFIG_FBCON_CFB8=y
+CONFIG_FBCON_CFB16=y
CONFIG_FBCON_FONTWIDTH8_ONLY=y
CONFIG_FBCON_FONTS=y
CONFIG_FONT_8x8=y
@@ -180,11 +199,176 @@
# CONFIG_FONT_ACORN_8x8 is not set
#
+# Networking options
+#
+# CONFIG_PACKET is not set
+# CONFIG_NETLINK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_FILTER is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_IP_ROUTER is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_ALIAS is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# (it is safe to leave these untouched)
+#
+CONFIG_SKB_LARGE=y
+# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_LLC is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+CONFIG_PCMCIA_NETCARD=y
+
+#
# ATA/IDE/MFM/RLL support
#
-# CONFIG_IDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
#
# SCSI support
@@ -192,43 +376,135 @@
# CONFIG_SCSI is not set
#
+# Sound
+#
+CONFIG_SOUND=y
+CONFIG_SOUND_UDA1341=y
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+
+#
# File systems
#
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set
-# CONFIG_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
# CONFIG_UMSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_SYSV_FS_WRITE is not set
# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+# CONFIG_SMB_FS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_MOUNT_SUBDIR is not set
+# CONFIG_NCPFS_NDS_DOMAINS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
-# CONFIG_NLS is not set
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
#
# USB support
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/brutus linux/arch/arm/def-configs/brutus
--- v2.4.0-test1/linux/arch/arm/def-configs/brutus Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/brutus Mon Jun 19 17:59:33 2000
@@ -95,10 +95,6 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
@@ -216,10 +212,12 @@
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
@@ -227,11 +225,16 @@
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_SYSV_FS_WRITE is not set
# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_NCPFS_NLS is not set
#
# Partition Types
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/ebsa110 linux/arch/arm/def-configs/ebsa110
--- v2.4.0-test1/linux/arch/arm/def-configs/ebsa110 Tue May 23 15:31:33 2000
+++ linux/arch/arm/def-configs/ebsa110 Mon Jun 19 17:59:33 2000
@@ -1,7 +1,8 @@
#
-# Automatically generated make config: don't edit
+# Automatically generated by make menuconfig: don't edit
#
CONFIG_ARM=y
+# CONFIG_SBUS is not set
CONFIG_UID16=y
#
@@ -10,23 +11,27 @@
CONFIG_EXPERIMENTAL=y
#
-# System and Processor Type
+# System Type
#
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
-# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_CO285 is not set
CONFIG_ARCH_EBSA110=y
-# CONFIG_FOOTBRIDGE is not set
-# CONFIG_ARCH_ACORN is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
CONFIG_CPU_32v4=y
CONFIG_CPU_SA110=y
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+# CONFIG_DISCONTIGMEM is not set
# CONFIG_PCI is not set
# CONFIG_ISA is not set
# CONFIG_ISA_DMA is not set
-# CONFIG_SBUS is not set
-# CONFIG_PCMCIA is not set
#
# Loadable module support
@@ -38,6 +43,8 @@
#
# General setup
#
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
@@ -49,6 +56,9 @@
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8"
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
#
# Parallel port support
@@ -64,17 +74,6 @@
# CONFIG_PARPORT_SUNBPP is not set
# CONFIG_PARPORT_OTHER is not set
CONFIG_PARPORT_1284=y
-CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8"
-CONFIG_LEDS=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
#
# Plug and Play configuration
@@ -90,12 +89,8 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
-CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
@@ -105,74 +100,6 @@
# CONFIG_BLK_DEV_INITRD is not set
#
-# Character devices
-#
-# CONFIG_VT is not set
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-
-#
-# Joysticks
-#
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-CONFIG_SOFT_WATCHDOG=y
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_MIXCOMWD is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
-# CONFIG_AGP is not set
-
-#
# Networking options
#
CONFIG_PACKET=m
@@ -194,7 +121,7 @@
CONFIG_IP_ROUTE_NAT=y
# CONFIG_IP_ROUTE_MULTIPATH is not set
# CONFIG_IP_ROUTE_TOS is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_ROUTE_VERBOSE=y
# CONFIG_IP_ROUTE_LARGE_TABLES is not set
CONFIG_IP_PNP=y
CONFIG_IP_PNP_BOOTP=y
@@ -206,51 +133,46 @@
CONFIG_IP_ALIAS=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
-
-#
-# (it is safe to leave these untouched)
-#
# CONFIG_SKB_LARGE is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_FTP=y
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_LIMIT=y
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
# CONFIG_IP_NF_MATCH_MAC is not set
-CONFIG_IP_NF_MATCH_MARK=y
-CONFIG_IP_NF_MATCH_MULTIPORT=y
-CONFIG_IP_NF_MATCH_TOS=y
-CONFIG_IP_NF_MATCH_STATE=y
-# CONFIG_IP_NF_MATCH_UNCLEAN is not set
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_COMPAT_IPCHAINS=m
CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-CONFIG_IP_NF_MANGLE=y
-CONFIG_IP_NF_TARGET_TOS=y
-CONFIG_IP_NF_TARGET_MARK=y
-CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
# CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set
# CONFIG_ATM is not set
-
-#
-#
-#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_BRIDGE is not set
# CONFIG_LLC is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -263,16 +185,6 @@
# CONFIG_NET_SCHED is not set
#
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
# Network device support
#
CONFIG_NETDEVICES=y
@@ -281,7 +193,7 @@
# ARCnet devices
#
# CONFIG_ARCNET is not set
-CONFIG_DUMMY=m
+# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_ETHERTAP is not set
@@ -317,7 +229,7 @@
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
-CONFIG_PPPOE=m
+# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set
#
@@ -339,6 +251,16 @@
# CONFIG_WAN is not set
#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
# ATA/IDE/MFM/RLL support
#
# CONFIG_IDE is not set
@@ -351,6 +273,85 @@
# CONFIG_SCSI is not set
#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+CONFIG_SERIAL_EXTENDED=y
+# CONFIG_SERIAL_MANY_PORTS is not set
+# CONFIG_SERIAL_SHARE_IRQ is not set
+# CONFIG_SERIAL_DETECT_IRQ is not set
+# CONFIG_SERIAL_MULTIPORT is not set
+# CONFIG_HUB6 is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+
+#
+# Video For Linux
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_DRM is not set
+# CONFIG_DRM_TDFX is not set
+# CONFIG_AGP is not set
+
+#
# File systems
#
# CONFIG_QUOTA is not set
@@ -370,7 +371,7 @@
# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
-# CONFIG_MINIX_FS is not set
+CONFIG_MINIX_FS=m
# CONFIG_NTFS_FS is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
@@ -399,6 +400,7 @@
CONFIG_ROOT_NFS=y
# CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
+# CONFIG_NFSD_TCP is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_SMB_FS is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/footbridge linux/arch/arm/def-configs/footbridge
--- v2.4.0-test1/linux/arch/arm/def-configs/footbridge Tue May 23 15:31:33 2000
+++ linux/arch/arm/def-configs/footbridge Mon Jun 19 17:59:33 2000
@@ -138,10 +138,6 @@
CONFIG_PARIDE_ON26=m
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_LVM is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/graphicsclient linux/arch/arm/def-configs/graphicsclient
--- v2.4.0-test1/linux/arch/arm/def-configs/graphicsclient Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/graphicsclient Mon Jun 19 17:59:33 2000
@@ -84,10 +84,6 @@
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_HD_ONLY is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/lart linux/arch/arm/def-configs/lart
--- v2.4.0-test1/linux/arch/arm/def-configs/lart Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/lart Mon Jun 19 17:59:33 2000
@@ -1,5 +1,5 @@
#
-# Automatically generated make config: don't edit
+# Automatically generated by make menuconfig: don't edit
#
CONFIG_ARM=y
CONFIG_UID16=y
@@ -10,25 +10,24 @@
CONFIG_EXPERIMENTAL=y
#
-# System and processor type
+# System and Processor Type
#
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
-# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_FOOTBRIDGE is not set
+# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_EMPEG is not set
-# CONFIG_SA1100_ITSY is not set
# CONFIG_SA1100_BITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
CONFIG_SA1100_LART=y
-# CONFIG_SA1100_PLEB is not set
# CONFIG_SA1100_THINCLIENT is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
# CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_TIFON is not set
CONFIG_DISCONTIGMEM=y
+CONFIG_SA1100_FREQUENCY_SCALE=m
+CONFIG_SA1100_VOLTAGE_SCALE=y
# CONFIG_ARCH_ACORN is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
@@ -37,6 +36,7 @@
# CONFIG_PCI is not set
# CONFIG_ISA is not set
# CONFIG_ISA_DMA is not set
+# CONFIG_SBUS is not set
CONFIG_ALIGNMENT_TRAP=y
#
@@ -69,29 +69,38 @@
CONFIG_LEDS=y
# CONFIG_LEDS_TIMER is not set
CONFIG_LEDS_CPU=y
+# CONFIG_HOTPLUG is not set
#
# I2O device support
#
# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
#
# Plug and Play configuration
#
# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
#
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD is not set
-
-#
-# Additional Block Devices
-#
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_LVM is not set
# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_RAID15_DANGEROUS is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_FLASH is not set
@@ -144,6 +153,7 @@
#
# CONFIG_FTAPE is not set
# CONFIG_DRM is not set
+# CONFIG_DRM_TDFX is not set
# CONFIG_AGP is not set
#
@@ -163,18 +173,10 @@
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_ALIAS is not set
# CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
# CONFIG_SKB_LARGE is not set
# CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set
# CONFIG_ATM is not set
-
-#
-#
-#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_DECNET is not set
@@ -230,10 +232,12 @@
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
CONFIG_PPP_ASYNC=y
# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPPOE is not set
CONFIG_SLIP=y
CONFIG_SLIP_COMPRESSED=y
# CONFIG_SLIP_SMART is not set
@@ -270,42 +274,118 @@
# CONFIG_SCSI is not set
#
+# Sound
+#
+CONFIG_SOUND=m
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+CONFIG_SOUND_TRACEINIT=y
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_PAS_JOYSTICK is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SOFTOSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+# CONFIG_SOUND_VIDC is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+CONFIG_SOUND_SA1100_SSP=m
+
+#
# File systems
#
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_SYSV_FS_WRITE is not set
# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
#
# Network File Systems
#
# CONFIG_CODA_FS is not set
-CONFIG_NFS_FS=y
+# CONFIG_NFS_FS is not set
+# CONFIG_NFS_V3 is not set
+# CONFIG_ROOT_NFS is not set
# CONFIG_NFSD is not set
-CONFIG_SUNRPC=y
-CONFIG_LOCKD=y
+# CONFIG_NFSD_V3 is not set
+# CONFIG_SUNRPC is not set
+# CONFIG_LOCKD is not set
# CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_MOUNT_SUBDIR is not set
+# CONFIG_NCPFS_NDS_DOMAINS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
#
# Partition Types
@@ -325,6 +405,6 @@
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_INFO is not set
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_DEBUG_LL=y
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/lusl7200 linux/arch/arm/def-configs/lusl7200
--- v2.4.0-test1/linux/arch/arm/def-configs/lusl7200 Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/lusl7200 Mon Jun 19 17:59:33 2000
@@ -79,10 +79,6 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/rpc linux/arch/arm/def-configs/rpc
--- v2.4.0-test1/linux/arch/arm/def-configs/rpc Tue May 23 15:31:33 2000
+++ linux/arch/arm/def-configs/rpc Mon Jun 19 17:59:33 2000
@@ -91,10 +91,6 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
CONFIG_BLK_DEV_LOOP=m
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/thinclient linux/arch/arm/def-configs/thinclient
--- v2.4.0-test1/linux/arch/arm/def-configs/thinclient Fri May 12 14:18:55 2000
+++ linux/arch/arm/def-configs/thinclient Mon Jun 19 17:59:33 2000
@@ -94,10 +94,6 @@
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_LVM is not set
@@ -336,10 +332,12 @@
# CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
+# CONFIG_RAMFS is not set
# CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set
@@ -347,23 +345,39 @@
# CONFIG_DEVFS_DEBUG is not set
CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_SYSV_FS_WRITE is not set
# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
#
# Network File Systems
#
# CONFIG_CODA_FS is not set
CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_SMB_FS is not set
# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_MOUNT_SUBDIR is not set
+# CONFIG_NCPFS_NDS_DOMAINS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
#
# Partition Types
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/def-configs/victor linux/arch/arm/def-configs/victor
--- v2.4.0-test1/linux/arch/arm/def-configs/victor Fri Oct 22 13:21:43 1999
+++ linux/arch/arm/def-configs/victor Mon Jun 19 17:59:33 2000
@@ -80,10 +80,6 @@
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_IDE_CHIPSETS is not set
-
-#
-# Additional Block Devices
-#
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/defconfig linux/arch/arm/defconfig
--- v2.4.0-test1/linux/arch/arm/defconfig Thu May 11 15:30:05 2000
+++ linux/arch/arm/defconfig Mon Jun 19 17:59:33 2000
@@ -134,10 +134,6 @@
CONFIG_PARIDE_ON26=m
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
-
-#
-# Additional Block Devices
-#
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_MD=y
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/Makefile linux/arch/arm/kernel/Makefile
--- v2.4.0-test1/linux/arch/arm/kernel/Makefile Tue May 23 15:31:33 2000
+++ linux/arch/arm/kernel/Makefile Mon Jun 19 17:59:34 2000
@@ -17,22 +17,23 @@
O_OBJS_rpc = dma-rpc.o
O_OBJS_ebsa110 = dma-dummy.o
O_OBJS_footbridge = dma.o dma-footbridge.o $(ISA_DMA_OBJS) hw-footbridge.o isa.o
+O_OBJS_clps7500 = dma-dummy.o
O_OBJS_nexuspci = dma-dummy.o
-O_OBJS_sa1100 = dma-dummy.o fiq.o
+O_OBJS_sa1100 = dma-dummy.o hw-sa1100.o
O_OBJS_l7200 = dma-dummy.o fiq.o
O_TARGET := kernel.o
# Object file lists.
-obj-y := arch.o $(ENTRY_OBJ) ioport.o irq.o process.o ptrace.o \
- semaphore.o setup.o signal.o sys_arm.o time.o traps.o \
- $(O_OBJS_$(MACHINE))
+obj-y := arch.o $(ENTRY_OBJ) irq.o process.o ptrace.o \
+ semaphore.o setup.o signal.o sys_arm.o time.o \
+ traps.o $(O_OBJS_$(MACHINE))
obj-m :=
obj-n :=
obj- :=
-export-objs := armksyms.o dma.o ecard.o hw-footbridge.o leds-$(MACHINE).o
+export-objs := armksyms.o dma.o ecard.o hw-footbridge.o hw-sa1100.o leds-$(MACHINE).o
obj-$(CONFIG_ARCH_ACORN) += dma.o ecard.o fiq.o time-acorn.o
obj-$(CONFIG_DEBUG_LL) += debug-$(PROCESSOR).o
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/arch.c linux/arch/arm/kernel/arch.c
--- v2.4.0-test1/linux/arch/arm/kernel/arch.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/arch.c Mon Jun 19 17:59:34 2000
@@ -55,6 +55,7 @@
for (i = 0; i < 4; i++) {
mi->bank[i].start = PHYS_OFFSET + (i << 26);
+ mi->bank[i].node = 0;
mi->bank[i].size =
params->u1.s.pages_in_bank[i] *
params->u1.s.page_size;
@@ -122,6 +123,17 @@
fixup_netwinder(struct machine_desc *desc, struct param_struct *params,
char **cmdline, struct meminfo *mi)
{
+#ifdef CONFIG_ISAPNP
+ extern int isapnp_disable;
+
+ /*
+ * We must not use the kernels ISAPnP code
+ * on the NetWinder - it will reset the settings
+ * for the WaveArtist chip and render it inoperable.
+ */
+ isapnp_disable = 1;
+#endif
+
if (params->u1.s.nr_pages != 0x2000 &&
params->u1.s.nr_pages != 0x4000) {
printk(KERN_WARNING "Warning: bad NeTTrom parameters "
@@ -181,6 +193,7 @@
mi->nr_banks = 1;
mi->bank[0].start = PHYS_OFFSET;
mi->bank[0].size = boot_memory_end;
+ mi->bank[0].node = 0;
*cmdline = boot_command_line;
}
@@ -197,7 +210,8 @@
extern void select_sa1100_io_desc(void);
#define SET_BANK(__nr,__start,__size) \
mi->bank[__nr].start = (__start), \
- mi->bank[__nr].size = (__size)
+ mi->bank[__nr].size = (__size), \
+ mi->bank[__nr].node = (((unsigned)(__start) - PHYS_OFFSET) >> 27)
static void __init
fixup_sa1100(struct machine_desc *desc, struct param_struct *params,
char **cmdline, struct meminfo *mi)
@@ -252,7 +266,7 @@
setup_initrd(0xc0400000, 4*1024*1024);
}
- else if (machine_is_thinclient()) {
+ else if (machine_is_thinclient() || machine_is_graphicsclient()) {
SET_BANK( 0, 0xc0000000, 16*1024*1024 );
mi->nr_banks = 1;
@@ -312,6 +326,12 @@
FIXUP(fixup_sa1100)
MACHINE_END
#endif
+#ifdef CONFIG_SA1100_GRAPHICSCLIENT
+MACHINE_START(GRAPHICSCLIENT, "ADS GraphicsClient")
+ BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
+ FIXUP(fixup_sa1100)
+MACHINE_END
+#endif
#ifdef CONFIG_SA1100_ITSY
MACHINE_START(ITSY, "Compaq Itsy")
BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
@@ -349,6 +369,35 @@
FIXUP(fixup_sa1100)
MACHINE_END
#endif
+#ifdef CONFIG_SA1100_XP860
+MACHINE_START(XP860, "XP860")
+ BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
+ FIXUP(fixup_sa1100)
+MACHINE_END
+#endif
+#endif
+
+#ifdef CONFIG_ARCH_L7200
+
+static void __init
+fixup_l7200(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+ mi->nr_banks = 1;
+ mi->bank[0].start = PHYS_OFFSET;
+ mi->bank[0].size = (32*1024*1024);
+ mi->bank[0].node = 0;
+
+ ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
+ setup_ramdisk( 1, 0, 0, 8192 );
+ setup_initrd( __phys_to_virt(0xf1000000), 0x00162b0d);
+}
+
+MACHINE_START(L7200, "LinkUp Systems L7200SDB")
+ MAINTAINER("Steve Hill")
+ BOOT_MEM(0xf0000000, 0x80040000, 0xd0000000)
+ FIXUP(fixup_l7200)
+MACHINE_END
#endif
#ifdef CONFIG_ARCH_EBSA110
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/bios32.c linux/arch/arm/kernel/bios32.c
--- v2.4.0-test1/linux/arch/arm/kernel/bios32.c Fri May 12 14:18:55 2000
+++ linux/arch/arm/kernel/bios32.c Mon Jun 19 17:59:34 2000
@@ -21,65 +21,94 @@
extern void hw_init(void);
-void pcibios_report_device_errors(int warn)
+void pcibios_report_status(u_int status_mask, int warn)
{
struct pci_dev *dev;
pci_for_each_dev(dev) {
u16 status;
+ /*
+ * ignore host bridge - we handle
+ * that separately
+ */
+ if (dev->bus->number == 0 && dev->devfn == 0)
+ continue;
+
pci_read_config_word(dev, PCI_STATUS, &status);
- if ((status & 0xf900) == 0)
+ status &= status_mask;
+ if (status == 0)
continue;
- pci_write_config_word(dev, PCI_STATUS, status & 0xf900);
+ /* clear the status errors */
+ pci_write_config_word(dev, PCI_STATUS, status);
if (warn)
- printk(KERN_DEBUG "PCI: %02X:%02X: status %04X "
- "on %s\n", dev->bus->number, dev->devfn,
- status, dev->name);
+ printk("(%02x:%02x.%d: %04X) ", dev->bus->number,
+ PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn),
+ status);
}
}
/*
* We don't use this to fix the device, but initialisation of it.
- * It's not the correct use for this, but it works. The actions we
- * take are:
- * - enable only IO
- * - set memory region to start at zero
- * - (0x48) enable all memory requests from ISA to be channeled to PCI
- * - (0x42) disable ping-pong (as per errata)
- * - (0x40) enable PCI packet retry
+ * It's not the correct use for this, but it works.
+ * Note that the arbiter/ISA bridge appears to be buggy, specifically in
+ * the following area:
+ * 1. park on CPU
+ * 2. ISA bridge ping-pong
+ * 3. ISA bridge master handling of target RETRY
+ *
+ * Bug 3 is responsible for the sound DMA grinding to a halt. We now
+ * live with bug 2.
*/
static void __init pci_fixup_83c553(struct pci_dev *dev)
{
+ /*
+ * Set memory region to start at address 0, and enable IO
+ */
pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_SPACE_MEMORY);
pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_IO);
dev->resource[0].end -= dev->resource[0].start;
dev->resource[0].start = 0;
+ /*
+ * All memory requests from ISA to be channelled to PCI
+ */
pci_write_config_byte(dev, 0x48, 0xff);
- pci_write_config_byte(dev, 0x42, 0x00);
+
+ /*
+ * Enable ping-pong on bus master to ISA bridge transactions.
+ * This improves the sound DMA substantially. The fixed
+ * priority arbiter also helps (see below).
+ */
+ pci_write_config_byte(dev, 0x42, 0x01);
+
+ /*
+ * Enable PCI retry
+ */
pci_write_config_byte(dev, 0x40, 0x22);
/*
- * We used to set the arbiter to "park on last master"
- * (bit 1 set), but unfortunately the CyberPro does not
- * park the bus. We must therefore park on CPU.
+ * We used to set the arbiter to "park on last master" (bit
+ * 1 set), but unfortunately the CyberPro does not park the
+ * bus. We must therefore park on CPU. Unfortunately, this
+ * may trigger yet another bug in the 553.
*/
- pci_write_config_byte(dev, 0x83, 0x00);
+ pci_write_config_byte(dev, 0x83, 0x02);
/*
- * Rotate priorities of each PCI request
+ * Make the ISA DMA request lowest priority, and disable
+ * rotating priorities completely.
*/
- pci_write_config_byte(dev, 0x80, 0xe0);
- pci_write_config_byte(dev, 0x81, 0x01);
+ pci_write_config_byte(dev, 0x80, 0x11);
+ pci_write_config_byte(dev, 0x81, 0x00);
/*
- * Route INTA input to IRQ 11, and set
- * IRQ11 to be level sensitive.
+ * Route INTA input to IRQ 11, and set IRQ11 to be level
+ * sensitive.
*/
pci_write_config_word(dev, 0x44, 0xb000);
outb(0x08, 0x4d1);
@@ -193,8 +222,8 @@
pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
}
-/*
- * Called after each bus is probed, but before its children
+/**
+ * pcibios_fixup_bus - Called after each bus is probed, but before its children
* are examined.
*/
void __init pcibios_fixup_bus(struct pci_bus *bus)
@@ -209,6 +238,8 @@
else
BUG();
+ busdata->max_lat = 255;
+
/*
* Walk the devices on this bus, working out what we can
* and can't support.
@@ -216,6 +247,7 @@
for (walk = walk->next; walk != &bus->devices; walk = walk->next) {
struct pci_dev *dev = pci_dev_b(walk);
u16 status;
+ u8 max_lat, min_gnt;
pci_read_config_word(dev, PCI_STATUS, &status);
@@ -227,6 +259,17 @@
busdata->features &= ~PCI_COMMAND_FAST_BACK;
/*
+ * If we encounter a CyberPro 2000, then we disable
+ * SERR and PERR reporting - this chip doesn't drive the
+ * parity line correctly.
+ */
+#if 1 /* !testing */
+ if (dev->vendor == PCI_VENDOR_ID_INTERG &&
+ dev->device == PCI_DEVICE_ID_INTERG_2000)
+ busdata->features &= ~(PCI_COMMAND_SERR |
+ PCI_COMMAND_PARITY);
+#endif
+ /*
* Calculate the maximum devsel latency.
*/
if (busdata->maxdevsel < (status & PCI_STATUS_DEVSEL_MASK))
@@ -240,6 +283,16 @@
if (dev->class >> 8 == PCI_CLASS_BRIDGE_ISA ||
dev->class >> 8 == PCI_CLASS_BRIDGE_EISA)
have_isa_bridge = !0;
+
+ /*
+ * Calculate the maximum latency on this bus. Note
+ * that we ignore any device which reports its max
+ * latency is the same as its use.
+ */
+ pci_read_config_byte(dev, PCI_MAX_LAT, &max_lat);
+ pci_read_config_byte(dev, PCI_MIN_GNT, &min_gnt);
+ if (max_lat && max_lat != min_gnt && max_lat < busdata->max_lat)
+ busdata->max_lat = max_lat;
}
/*
@@ -249,6 +302,7 @@
for (walk = walk->next; walk != &bus->devices; walk = walk->next) {
struct pci_dev *dev = pci_dev_b(walk);
u16 cmd;
+ u8 min_gnt, latency;
/*
* architecture specific hacks. I don't really want
@@ -263,11 +317,27 @@
pci_write_config_dword(dev, 0x40, 0x80000000);
/*
- * Set latency timer to 32, and a cache line size to 32 bytes.
+ * Calculate this masters latency timer value.
+ * This is rather primitive - it does not take
+ * account of the number of masters in a system
+ * wanting to use the bus.
+ */
+ pci_read_config_byte(dev, PCI_MIN_GNT, &min_gnt);
+ if (min_gnt) {
+ if (min_gnt > busdata->max_lat)
+ min_gnt = busdata->max_lat;
+
+ latency = (int)min_gnt * 25 / 3;
+ } else
+ latency = 32; /* 1us */
+
+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, latency);
+
+ /*
+ * Set the cache line size to 32 bytes.
* Also, set system error enable, parity error enable.
* Disable ROM.
*/
- pci_write_config_byte(dev, PCI_LATENCY_TIMER, 32);
pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 8);
pci_read_config_word(dev, PCI_COMMAND, &cmd);
@@ -520,15 +590,6 @@
pci_assign_unassigned_resources();
pci_fixup_irqs(hw_pci->swizzle, hw_pci->map_irq);
pci_set_bus_ranges();
-
-#ifdef CONFIG_FOOTBRIDGE
- /*
- * Initialise any other hardware after we've got the PCI bus
- * initialised. We may need the PCI bus to talk to this other
- * hardware.
- */
- hw_init();
-#endif
}
char * __init pcibios_setup(char *str)
@@ -544,10 +605,18 @@
{
}
+/**
+ * pcibios_set_master - Setup device for bus mastering.
+ * @dev: PCI device to be setup
+ */
void pcibios_set_master(struct pci_dev *dev)
{
}
+/**
+ * pcibios_enable_device - Enable I/O and memory.
+ * @dev: PCI device to be enabled
+ */
int pcibios_enable_device(struct pci_dev *dev)
{
u16 cmd, old_cmd;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/bios32.h linux/arch/arm/kernel/bios32.h
--- v2.4.0-test1/linux/arch/arm/kernel/bios32.h Sun Mar 19 18:35:30 2000
+++ linux/arch/arm/kernel/bios32.h Mon Jun 19 17:59:34 2000
@@ -10,6 +10,11 @@
* Maximum devsel for this bus.
*/
u16 maxdevsel;
+ /*
+ * The maximum latency that devices on this
+ * bus can withstand.
+ */
+ u8 max_lat;
};
struct arm_pci_sysdata {
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/calls.S linux/arch/arm/kernel/calls.S
--- v2.4.0-test1/linux/arch/arm/kernel/calls.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/kernel/calls.S Mon Jun 19 17:59:34 2000
@@ -119,7 +119,7 @@
.long SYMBOL_NAME(sys_newlstat)
.long SYMBOL_NAME(sys_newfstat)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_uname */
-/* 110 */ .long SYMBOL_NAME(sys_iopl)
+/* 110 */ .long SYMBOL_NAME(sys_ni_syscall) /* was sys_iopl */
.long SYMBOL_NAME(sys_vhangup)
.long SYMBOL_NAME(sys_ni_syscall)
.long SYMBOL_NAME(sys_syscall) /* call a syscall */
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/debug-armv.S linux/arch/arm/kernel/debug-armv.S
--- v2.4.0-test1/linux/arch/arm/kernel/debug-armv.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/kernel/debug-armv.S Mon Jun 19 17:59:34 2000
@@ -64,7 +64,7 @@
beq 1001b
.endm
-#elif defined(CONFIG_HOST_FOOTBRIDGE) || defined(CONFIG_ADDIN_FOOTBRIDGE)
+#elif defined(CONFIG_FOOTBRIDGE)
#ifndef CONFIG_DEBUG_DC21285_PORT
/* For NetWinder debugging */
.macro addruart,rx
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/dec21285.c linux/arch/arm/kernel/dec21285.c
--- v2.4.0-test1/linux/arch/arm/kernel/dec21285.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/dec21285.c Mon Jun 19 17:59:34 2000
@@ -1,9 +1,8 @@
/*
* arch/arm/kernel/dec21285.c: PCI functions for DC21285
*
- * Copyright (C) 1998-1999 Russell King, Phil Blundell
+ * Copyright (C) 1998-2000 Russell King, Phil Blundell
*/
-#include
#include
#include
#include
@@ -23,7 +22,8 @@
#define MAX_SLOTS 21
extern int setup_arm_irq(int, struct irqaction *);
-extern void pcibios_report_device_errors(int warn);
+extern void pcibios_report_status(u_int status_mask, int warn);
+extern void register_isa_ports(unsigned int, unsigned int, unsigned int);
static unsigned long
dc21285_base_address(struct pci_dev *dev)
@@ -145,86 +145,125 @@
dc21285_write_config_dword,
};
+static struct timer_list serr_timer;
+static struct timer_list perr_timer;
+
+static void dc21285_enable_error(unsigned long __data)
+{
+ switch (__data) {
+ case IRQ_PCI_SERR:
+ del_timer(&serr_timer);
+ break;
+
+ case IRQ_PCI_PERR:
+ del_timer(&perr_timer);
+ break;
+ }
+
+ enable_irq(__data);
+}
+
/*
* Warn on PCI errors.
*/
-static void
-dc21285_error(int irq, void *dev_id, struct pt_regs *regs)
+static void dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs)
{
- static unsigned long next_warn;
- unsigned long cmd = *CSR_PCICMD & 0x0000ffff;
- unsigned long ctrl = (*CSR_SA110_CNTL) & 0xffffde07;
- unsigned long irqstatus = *CSR_IRQ_RAWSTATUS;
- int warn = time_after_eq(jiffies, next_warn);
-
- if (machine_is_netwinder())
- warn = 0;
-
- ctrl |= SA110_CNTL_DISCARDTIMER;
-
- if (warn) {
- next_warn = jiffies + HZ;
- printk(KERN_DEBUG "PCI: ");
- }
+ unsigned int cmd;
+ unsigned int status;
- if (irqstatus & (1 << 31)) {
- if (warn)
- printk("parity error ");
- cmd |= 1 << 31;
- }
+ cmd = *CSR_PCICMD;
+ status = cmd >> 16;
+ cmd = cmd & 0xffff;
+
+ if (status & PCI_STATUS_REC_MASTER_ABORT) {
+ printk(KERN_DEBUG "PCI: master abort: ");
+ pcibios_report_status(PCI_STATUS_REC_MASTER_ABORT, 1);
+ printk("\n");
- if (irqstatus & (1 << 30)) {
- if (warn)
- printk("target abort ");
- cmd |= 1 << 28;
+ cmd |= PCI_STATUS_REC_MASTER_ABORT << 16;
}
- if (irqstatus & (1 << 29)) {
- if (warn)
- printk("master abort ");
- cmd |= 1 << 29;
- }
+ if (status & PCI_STATUS_REC_TARGET_ABORT) {
+ printk(KERN_DEBUG "PCI: target abort: ");
+ pcibios_report_status(PCI_STATUS_SIG_TARGET_ABORT, 1);
+ printk("\n");
- if (irqstatus & (1 << 28)) {
- if (warn)
- printk("data parity error ");
- cmd |= 1 << 24;
+ cmd |= PCI_STATUS_REC_TARGET_ABORT << 16;
}
- if (irqstatus & (1 << 27)) {
- if (warn)
- printk("discard timer expired ");
- ctrl &= ~SA110_CNTL_DISCARDTIMER;
- }
+ *CSR_PCICMD = cmd;
+}
- if (irqstatus & (1 << 23)) {
- if (warn)
- printk("system error ");
- ctrl |= SA110_CNTL_RXSERR;
- }
+static void dc21285_serr_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+ struct timer_list *timer = dev_id;
+ unsigned int cntl;
- if (warn)
- printk("pc=[<%08lX>]\n", instruction_pointer(regs));
+ printk(KERN_DEBUG "PCI: system error received: ");
+ pcibios_report_status(PCI_STATUS_SIG_SYSTEM_ERROR, 1);
+ printk("\n");
- pcibios_report_device_errors(warn);
+ cntl = *CSR_SA110_CNTL & 0xffffdf07;
+ *CSR_SA110_CNTL = cntl | SA110_CNTL_RXSERR;
- *CSR_PCICMD = cmd;
- *CSR_SA110_CNTL = ctrl;
+ /*
+ * back off this interrupt
+ */
+ disable_irq(irq);
+ timer->expires = jiffies + HZ;
+ add_timer(timer);
}
-static struct irqaction dc21285_error_action = {
- dc21285_error, SA_INTERRUPT, 0, "PCI error", NULL, NULL
-};
+static void dc21285_discard_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+ printk(KERN_DEBUG "PCI: discard timer expired\n");
+ *CSR_SA110_CNTL &= 0xffffde07;
+}
+
+static void dc21285_dparity_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+ unsigned int cmd;
+
+ printk(KERN_DEBUG "PCI: data parity error detected: ");
+ pcibios_report_status(PCI_STATUS_PARITY | PCI_STATUS_DETECTED_PARITY, 1);
+ printk("\n");
+
+ cmd = *CSR_PCICMD & 0xffff;
+ *CSR_PCICMD = cmd | 1 << 24;
+}
+
+static void dc21285_parity_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+ struct timer_list *timer = dev_id;
+ unsigned int cmd;
+
+ printk(KERN_DEBUG "PCI: parity error detected: ");
+ pcibios_report_status(PCI_STATUS_PARITY | PCI_STATUS_DETECTED_PARITY, 1);
+ printk("\n");
+
+ cmd = *CSR_PCICMD & 0xffff;
+ *CSR_PCICMD = cmd | 1 << 31;
+
+ /*
+ * back off this interrupt
+ */
+ disable_irq(irq);
+ timer->expires = jiffies + HZ;
+ add_timer(timer);
+}
void __init dc21285_init(void)
{
- static struct resource csrmem, csrio;
- struct arm_pci_sysdata sysdata;
unsigned long cntl;
- unsigned int mem_size, pci_cmd = PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+ unsigned int mem_size;
+ unsigned int pci_cmd = PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
- int i;
+ int cfn_mode;
+ /*
+ * These registers need to be set up whether we're the
+ * central function or not.
+ */
mem_size = (unsigned int)high_memory - PAGE_OFFSET;
*CSR_SDRAMBASEMASK = (mem_size - 1) & 0x0ffc0000;
*CSR_SDRAMBASEOFFSET = 0;
@@ -233,60 +272,93 @@
*CSR_CSRBASEOFFSET = 0;
*CSR_PCIADDR_EXTN = 0;
-#ifdef CONFIG_HOST_FOOTBRIDGE
+ cfn_mode = __footbridge_cfn_mode();
- csrio.flags = IORESOURCE_IO;
- csrio.name = "DC21285";
- csrmem.flags = IORESOURCE_MEM;
- csrmem.name = "DC21285";
-
- allocate_resource(&ioport_resource, &csrio, 128,
- 0xff00, 0xffff, 128, NULL, NULL);
- allocate_resource(&iomem_resource, &csrmem, 128,
- 0xf4000000, 0xf8000000, 128, NULL, NULL);
-
- /*
- * Map our SDRAM at a known address in PCI space, just in case
- * the firmware had other ideas. Using a nonzero base is
- * necessary, since some VGA cards forcefully use PCI addresses
- * in the range 0x000a0000 to 0x000c0000. (eg, S3 cards).
- */
- *CSR_PCICACHELINESIZE = 0x00002008;
- *CSR_PCICSRBASE = csrmem.start;
- *CSR_PCICSRIOBASE = csrio.start;
- *CSR_PCISDRAMBASE = virt_to_bus((void *)PAGE_OFFSET);
- *CSR_PCIROMBASE = 0;
- *CSR_PCICMD = pci_cmd |
+ printk(KERN_INFO "PCI: DC21285 footbridge, revision %02lX in "
+ "%s mode\n", *CSR_CLASSREV & 0xff, cfn_mode ?
+ "central function" : "addin");
+
+ if (cfn_mode) {
+ static struct resource csrmem, csrio;
+ struct arm_pci_sysdata sysdata;
+ int i;
+
+ csrio.flags = IORESOURCE_IO;
+ csrio.name = "DC21285";
+ csrmem.flags = IORESOURCE_MEM;
+ csrmem.name = "DC21285";
+
+ allocate_resource(&ioport_resource, &csrio, 128,
+ 0xff00, 0xffff, 128, NULL, NULL);
+ allocate_resource(&iomem_resource, &csrmem, 128,
+ 0xf4000000, 0xf8000000, 128, NULL, NULL);
+
+ /*
+ * Map our SDRAM at a known address in PCI space, just in case
+ * the firmware had other ideas. Using a nonzero base is
+ * necessary, since some VGA cards forcefully use PCI addresses
+ * in the range 0x000a0000 to 0x000c0000. (eg, S3 cards).
+ */
+ *CSR_PCICACHELINESIZE = 0x00002008;
+ *CSR_PCICSRBASE = csrmem.start;
+ *CSR_PCICSRIOBASE = csrio.start;
+ *CSR_PCISDRAMBASE = virt_to_bus((void *)PAGE_OFFSET);
+ *CSR_PCIROMBASE = 0;
+ *CSR_PCICMD = pci_cmd |
(1 << 31) | (1 << 29) | (1 << 28) | (1 << 24);
-#endif
-
- printk(KERN_DEBUG "PCI: DC21285 footbridge, revision %02lX\n",
- *CSR_CLASSREV & 0xff);
-
- for (i = 0; i < MAX_NR_BUS; i++) {
- sysdata.bus[i].features = PCI_COMMAND_FAST_BACK |
- PCI_COMMAND_SERR |
- PCI_COMMAND_PARITY;
- sysdata.bus[i].maxdevsel = PCI_STATUS_DEVSEL_FAST;
- }
- pci_scan_bus(0, &dc21285_ops, &sysdata);
+ for (i = 0; i < MAX_NR_BUS; i++) {
+ sysdata.bus[i].features = PCI_COMMAND_FAST_BACK |
+ PCI_COMMAND_SERR |
+ PCI_COMMAND_PARITY;
+ sysdata.bus[i].maxdevsel = PCI_STATUS_DEVSEL_FAST;
+ }
- pci_cmd |= sysdata.bus[0].features;
+ pci_scan_bus(0, &dc21285_ops, &sysdata);
- printk("Fast back to back PCI transfers %sabled\n",
- (sysdata.bus[0].features & PCI_COMMAND_FAST_BACK) ? "en" : "dis");
+ pci_cmd |= sysdata.bus[0].features;
- /*
- * Clear any existing errors - we aren't
- * interested in historical data...
- */
- cntl = *CSR_SA110_CNTL & 0xffffde07;
- *CSR_SA110_CNTL = cntl | SA110_CNTL_RXSERR;
- *CSR_PCICMD = pci_cmd | 1 << 31 | 1 << 29 | 1 << 28 | 1 << 24;
+ printk("PCI: Fast back to back transfers %sabled\n",
+ (sysdata.bus[0].features & PCI_COMMAND_FAST_BACK) ?
+ "en" : "dis");
+
+ /*
+ * Clear any existing errors - we aren't
+ * interested in historical data...
+ */
+ cntl = *CSR_SA110_CNTL & 0xffffde07;
+ *CSR_SA110_CNTL = cntl | SA110_CNTL_RXSERR;
+ *CSR_PCICMD = pci_cmd | 1 << 31 | 1 << 29 | 1 << 28 | 1 << 24;
+ } else {
+ /*
+ * If we are not compiled to accept "add-in" mode, then
+ * we are using a constant virt_to_bus translation which
+ * can not hope to cater for the way the host BIOS has
+ * set up the machine.
+ */
+ panic("PCI: this kernel is compiled for central "
+ "function mode only");
+ }
/*
* Initialise PCI error IRQ after we've finished probing
*/
- setup_arm_irq(IRQ_PCI_ERR, &dc21285_error_action);
+ request_irq(IRQ_PCI_ABORT, dc21285_abort_irq, SA_INTERRUPT, "PCI abort", NULL);
+ request_irq(IRQ_DISCARD_TIMER, dc21285_discard_irq, SA_INTERRUPT, "Discard timer", NULL);
+ request_irq(IRQ_PCI_DPERR, dc21285_dparity_irq, SA_INTERRUPT, "PCI data parity", NULL);
+
+ init_timer(&serr_timer);
+ init_timer(&perr_timer);
+
+ serr_timer.data = IRQ_PCI_SERR;
+ serr_timer.function = dc21285_enable_error;
+ perr_timer.data = IRQ_PCI_PERR;
+ perr_timer.function = dc21285_enable_error;
+
+ request_irq(IRQ_PCI_SERR, dc21285_serr_irq, SA_INTERRUPT,
+ "PCI system error", &serr_timer);
+ request_irq(IRQ_PCI_PERR, dc21285_parity_irq, SA_INTERRUPT,
+ "PCI parity error", &perr_timer);
+
+ register_isa_ports(DC21285_PCI_MEM, DC21285_PCI_IO, 0);
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/dma-a5k.c linux/arch/arm/kernel/dma-a5k.c
--- v2.4.0-test1/linux/arch/arm/kernel/dma-a5k.c Tue Aug 31 17:29:12 1999
+++ linux/arch/arm/kernel/dma-a5k.c Mon Jun 19 17:59:34 2000
@@ -15,7 +15,9 @@
#include "dma.h"
-static struct fiq_handler fh = { NULL, "floppydma", NULL, NULL };
+static struct fiq_handler fh = {
+ name: "floppydma"
+};
int arch_request_dma(dmach_t channel, dma_t *dma, const char *dev_id)
{
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/dma-rpc.c linux/arch/arm/kernel/dma-rpc.c
--- v2.4.0-test1/linux/arch/arm/kernel/dma-rpc.c Fri Oct 22 13:21:44 1999
+++ linux/arch/arm/kernel/dma-rpc.c Mon Jun 19 17:59:34 2000
@@ -20,7 +20,9 @@
#include "dma.h"
-static struct fiq_handler fh = { NULL, "floppydma", NULL, NULL };
+static struct fiq_handler fh = {
+ name: "floppydma"
+};
#if 0
typedef enum {
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/ecard.c linux/arch/arm/kernel/ecard.c
--- v2.4.0-test1/linux/arch/arm/kernel/ecard.c Tue Dec 7 09:32:40 1999
+++ linux/arch/arm/kernel/ecard.c Mon Jun 19 17:59:34 2000
@@ -52,6 +52,10 @@
#define oldlatch_init()
#endif
+#ifndef CONFIG_ARCH_RPC
+#define HAVE_EXPMASK
+#endif
+
enum req {
req_readbytes,
req_reset
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S
--- v2.4.0-test1/linux/arch/arm/kernel/entry-armv.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/kernel/entry-armv.S Mon Jun 19 17:59:34 2000
@@ -32,7 +32,7 @@
.text
-#define PF_TRACESYS 0x20
+#define PT_TRACESYS 0x00000002
@ Bad Abort numbers
@ -----------------
@@ -233,14 +233,12 @@
.macro irq_prio_table
.endm
-#elif defined(CONFIG_HOST_FOOTBRIDGE) || defined(CONFIG_ADDIN_FOOTBRIDGE)
+#elif defined(CONFIG_FOOTBRIDGE)
#include
.macro disable_fiq
.endm
- .equ irq_mask_pci_err_high, IRQ_MASK_PCI_ERR & 0xff000000
- .equ irq_mask_pci_err_low, IRQ_MASK_PCI_ERR & 0x00ffffff
.equ dc21285_high, ARMCSR_BASE & 0xff000000
.equ dc21285_low, ARMCSR_BASE & 0x00ffffff
@@ -311,10 +309,24 @@
movne \irqnr, #IRQ_CONTX
bne 1001f
- tst \irqstat, #irq_mask_pci_err_high
- tsteq \irqstat, #irq_mask_pci_err_low
- movne \irqnr, #IRQ_PCI_ERR
+ tst \irqstat, #IRQ_MASK_PCI_ABORT
+ movne \irqnr, #IRQ_PCI_ABORT
bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_SERR
+ movne \irqnr, #IRQ_PCI_SERR
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_DISCARD_TIMER
+ movne \irqnr, #IRQ_DISCARD_TIMER
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_DPERR
+ movne \irqnr, #IRQ_PCI_DPERR
+ bne 1001f
+
+ tst \irqstat, #IRQ_MASK_PCI_PERR
+ movne \irqnr, #IRQ_PCI_PERR
1001:
.endm
@@ -389,12 +401,25 @@
ldr \irqnr, [r4, #4] @ ICMR = 0xfa050004
ands \irqstat, \irqstat, \irqnr
mov \irqnr, #0
- beq 1002f
-1001: tst \irqstat, #1
- addeq \irqnr, \irqnr, #1
- moveq \irqstat, \irqstat, lsr #1
- beq 1001b
-1002:
+ beq 1001f
+ tst \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tsteq \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tsteq \irqstat, #0xff
+ moveq \irqstat, \irqstat, lsr #8
+ addeq \irqnr, \irqnr, #8
+ tst \irqstat, #0x0f
+ moveq \irqstat, \irqstat, lsr #4
+ addeq \irqnr, \irqnr, #4
+ tst \irqstat, #0x03
+ moveq \irqstat, \irqstat, lsr #2
+ addeq \irqnr, \irqnr, #2
+ tst \irqstat, #0x01
+ addeqs \irqnr, \irqnr, #1
+1001:
.endm
.macro irq_prio_table
@@ -441,7 +466,8 @@
.macro restore_user_regs
ldr r0, [sp, #S_PSR] @ Get calling cpsr
- msr cpsr_c, #I_BIT | MODE_SVC @ disable IRQs
+ mov ip, #I_BIT | MODE_SVC
+ msr cpsr_c, ip @ disable IRQs
msr spsr, r0 @ save in spsr_svc
ldmia sp, {r0 - lr}^ @ Get calling r0 - lr
mov r0, r0
@@ -592,9 +618,10 @@
bl cpu_data_abort
#endif
msr cpsr_c, r9
- mov r3, sp
+ mov r2, sp
bl SYMBOL_NAME(do_DataAbort)
- msr cpsr_c, #I_BIT | MODE_SVC
+ mov r0, #I_BIT | MODE_SVC
+ msr cpsr_c, r0
ldr r0, [sp, #S_PSR]
msr spsr, r0
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
@@ -636,7 +663,8 @@
mov r1, sp @ struct pt_regs *regs
bl SYMBOL_NAME(do_undefinstr)
-1: msr cpsr_c, #I_BIT | MODE_SVC
+1: mov r0, #I_BIT | MODE_SVC
+ msr cpsr_c, r0
ldr lr, [sp, #S_PSR] @ Get SVC cpsr
msr spsr, lr
ldmia sp, {r0 - pc}^ @ Restore SVC registers
@@ -675,8 +703,9 @@
#else
bl cpu_data_abort
#endif
- msr cpsr_c, #MODE_SVC @ Enable interrupts
- mov r3, sp
+ mov r2, #MODE_SVC
+ msr cpsr_c, r2 @ Enable interrupts
+ mov r2, sp
adrsvc al, lr, ret_from_sys_call
b SYMBOL_NAME(do_DataAbort)
@@ -720,9 +749,10 @@
add r10, r10, #TSS_FPESAVE @ r10 = workspace
ldr pc, [r4] @ Call FP module USR entry point
-fpundefinstr: mov r0, lr
+fpundefinstr: mov r0, #MODE_SVC
+ msr cpsr_c, r0 @ Enable interrupts
+ mov r0, lr
mov r1, sp
- msr cpsr_c, #MODE_SVC @ Enable interrupts
adrsvc al, lr, ret_from_sys_call
b SYMBOL_NAME(do_undefinstr)
@@ -736,7 +766,8 @@
stmdb r8, {sp, lr}^ @ Save sp_usr lr_usr
alignment_trap r4, r7, __temp_abt
zero_fp
- msr cpsr_c, #MODE_SVC @ Enable interrupts
+ mov r0, #MODE_SVC
+ msr cpsr_c, r0 @ Enable interrupts
mov r0, r5 @ address (pc)
mov r1, sp @ regs
bl SYMBOL_NAME(do_PrefetchAbort) @ call abort handler
@@ -816,7 +847,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
@@ -856,7 +888,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
@@ -897,7 +930,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
ands lr, lr, #15
ldreq lr, .LCtab_pabt
@@ -924,7 +958,8 @@
@
@ now branch to the relevent MODE handling routine
@
- msr spsr_c, #I_BIT | MODE_SVC @ switch to SVC_32 mode
+ mov r13, #I_BIT | MODE_SVC
+ msr spsr_c, r13 @ switch to SVC_32 mode
and lr, lr, #15
ldr lr, [pc, lr, lsl #2]
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/entry-common.S linux/arch/arm/kernel/entry-common.S
--- v2.4.0-test1/linux/arch/arm/kernel/entry-common.S Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/entry-common.S Mon Jun 19 17:59:34 2000
@@ -94,9 +94,9 @@
bcs 2f
get_current_task ip
- ldr ip, [ip, #TSK_FLAGS] @ check for syscall tracing
+ ldr ip, [ip, #TSK_PTRACE] @ check for syscall tracing
adr tbl, SYMBOL_NAME(sys_call_table)
- tst ip, #PF_TRACESYS
+ tst ip, #PT_TRACESYS
ldreq pc, [tbl, scno, lsl #2] @ call sys routine
ldr tip, [sp, #S_IP + S_OFF] @ save old IP
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/hw-footbridge.c linux/arch/arm/kernel/hw-footbridge.c
--- v2.4.0-test1/linux/arch/arm/kernel/hw-footbridge.c Sun Mar 19 18:35:30 2000
+++ linux/arch/arm/kernel/hw-footbridge.c Mon Jun 19 17:59:34 2000
@@ -662,12 +662,13 @@
#endif
-void __init hw_init(void)
+/*
+ * Initialise any other hardware after we've got the PCI bus
+ * initialised. We may need the PCI bus to talk to this other
+ * hardware.
+ */
+static int __init hw_init(void)
{
- extern void register_isa_ports(unsigned int, unsigned int,
- unsigned int);
- register_isa_ports(DC21285_PCI_MEM, DC21285_PCI_IO, 0);
-
#ifdef CONFIG_ARCH_NETWINDER
/*
* this ought to have a better home...
@@ -678,7 +679,6 @@
*/
if (machine_is_netwinder()) {
unsigned long flags;
- extern int isapnp_disable;
wb977_init();
cpld_init();
@@ -687,21 +687,13 @@
spin_lock_irqsave(&gpio_lock, flags);
gpio_modify_op(GPIO_RED_LED|GPIO_GREEN_LED, DEFAULT_LEDS);
spin_unlock_irqrestore(&gpio_lock, flags);
-
-#ifdef CONFIG_ISAPNP
- /*
- * We must not use the kernels ISAPnP code
- * on the NetWinder - it will reset the settings
- * for the WaveArtist chip and render it inoperable.
- */
- isapnp_disable = 1;
-#endif
}
#endif
#ifdef CONFIG_ARCH_CATS
if (machine_is_cats())
cats_hw_init();
#endif
-
- leds_event(led_start);
+ return 0;
}
+
+__initcall(hw_init);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/hw-sa1100.c linux/arch/arm/kernel/hw-sa1100.c
--- v2.4.0-test1/linux/arch/arm/kernel/hw-sa1100.c Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/kernel/hw-sa1100.c Mon Jun 19 17:59:34 2000
@@ -0,0 +1,135 @@
+/*
+ * arch/arm/kernel/hw-sa1100.c
+ *
+ * SA1100-dependent machine specifics
+ *
+ * Copyright (C) 2000 Nicolas Pitre
+ *
+ * This will certainly contain more stuff with time... like power management,
+ * special hardware autodetection, etc.
+ *
+ */
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+
+/*
+ * SA1100 GPIO edge detection for IRQs:
+ * IRQs are generated on Falling-Edge, Rising-Edge, or both.
+ * This must be called *before* the appropriate IRQ is registered.
+ * Use this instead of directly setting GRER/GFER.
+ */
+
+int GPIO_IRQ_rising_edge;
+int GPIO_IRQ_falling_edge;
+
+void set_GPIO_IRQ_edge( int gpio_mask, int edge )
+{
+ if( edge & GPIO_FALLING_EDGE )
+ GPIO_IRQ_falling_edge |= gpio_mask;
+ else
+ GPIO_IRQ_falling_edge &= ~gpio_mask;
+ if( edge & GPIO_RISING_EDGE )
+ GPIO_IRQ_rising_edge |= gpio_mask;
+ else
+ GPIO_IRQ_rising_edge &= ~gpio_mask;
+}
+
+EXPORT_SYMBOL(set_GPIO_IRQ_edge);
+
+
+#ifdef CONFIG_SA1100_ASSABET
+
+unsigned long BCR_value = BCR_DB1110;
+unsigned long SCR_value = SCR_INIT;
+EXPORT_SYMBOL(BCR_value);
+EXPORT_SYMBOL(SCR_value);
+
+/*
+ * Read System Configuration "Register"
+ * (taken from "Intel StrongARM SA-1110 Microprocessor Development Board
+ * User's Guide", section 4.4.1)
+ *
+ * This same scan is performed in arch/arm/boot/compressed/head-sa1100.S
+ * to set up the serial port for decompression status messages. We
+ * repeat it here because the kernel may not be loaded as a zImage, and
+ * also because it's a hassle to communicate the SCR value to the kernel
+ * from the decompressor.
+ */
+
+void __init get_assabet_scr(void)
+{
+ unsigned long flags, scr, i;
+
+ save_flags_cli(flags);
+ GPDR |= 0x3fc; /* Configure GPIO 9:2 as outputs */
+ GPSR = 0x3fc; /* Write 0xFF to GPIO 9:2 */
+ GPDR &= ~(0x3fc); /* Configure GPIO 9:2 as inputs */
+ for(i = 100; i--; scr = GPLR); /* Read GPIO 9:2 */
+ GPDR |= 0x3fc; /* restore correct pin direction */
+ restore_flags(flags);
+ scr &= 0x3fc; /* save as system configuration byte. */
+
+ SCR_value = scr;
+}
+
+#endif /* CONFIG_SA1100_ASSABET */
+
+
+#ifdef CONFIG_SA1111
+
+void __init sa1111_init(void){
+ unsigned long id=SKID;
+
+ if((id & SKID_ID_MASK) == SKID_SA1111_ID)
+ printk(KERN_INFO "SA-1111 Microprocessor Companion Chip: "
+ "silicon revision %x, metal revision %x\n",
+ (id & SKID_SIREV_MASK)>>4, (id & SKID_MTREV_MASK));
+ else {
+ printk(KERN_ERR "Could not detect SA-1111!\n");
+ return;
+ }
+
+ /* First, set up the 3.6864MHz clock on GPIO 27 for the SA-1111:
+ * (SA-1110 Developer's Manual, section 9.1.2.1)
+ */
+ GAFR |= GPIO_GPIO27;
+ GPDR |= GPIO_GPIO27;
+ TUCR = TUCR_3_6864MHz;
+
+ /* Now, set up the PLL and RCLK in the SA-1111: */
+ SKCR = SKCR_PLL_BYPASS | SKCR_RDYEN | SKCR_OE_EN;
+ udelay(100);
+ SKCR = SKCR_PLL_BYPASS | SKCR_RCLKEN | SKCR_RDYEN | SKCR_OE_EN;
+
+ /* SA-1111 Register Access Bus should now be available. Clocks for
+ * any other SA-1111 functional blocks must be enabled separately
+ * using the SKPCR.
+ */
+}
+
+#endif
+
+
+static void __init hw_sa1100_init(void)
+{
+ if( machine_is_assabet() ){
+ if(machine_has_neponset()){
+#ifdef CONFIG_ASSABET_NEPONSET
+ LEDS = WHOAMI;
+ sa1111_init();
+#else
+ printk( "Warning: Neponset detected but full support "
+ "hasn't been configured in the kernel\n" );
+#endif
+ }
+ }
+}
+
+module_init(hw_sa1100_init);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/ioport.c linux/arch/arm/kernel/ioport.c
--- v2.4.0-test1/linux/arch/arm/kernel/ioport.c Tue Dec 14 01:27:23 1999
+++ linux/arch/arm/kernel/ioport.c Wed Dec 31 16:00:00 1969
@@ -1,36 +0,0 @@
-/*
- * linux/arch/arm/kernel/ioport.c
- *
- * IO permission support for ARM.
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-#ifdef CONFIG_CPU_32
-asmlinkage int sys_iopl(unsigned long turn_on)
-{
- if (turn_on && !capable(CAP_SYS_RAWIO))
- return -EPERM;
-
- /*
- * We only support an on_off approach
- */
- modify_domain(DOMAIN_IO, turn_on ? DOMAIN_MANAGER : DOMAIN_CLIENT);
-
- return 0;
-}
-#else
-asmlinkage int sys_iopl(unsigned long turn_on)
-{
- return -ENOSYS;
-}
-#endif
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/irq.c linux/arch/arm/kernel/irq.c
--- v2.4.0-test1/linux/arch/arm/kernel/irq.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/irq.c Mon Jun 19 17:59:34 2000
@@ -15,7 +15,7 @@
* IRQ's are in fact implemented a bit like signal handlers for the kernel.
* Naturally it's not a 1:1 relation, but there are similarities.
*/
-#include /* for CONFIG_DEBUG_ERRORS */
+#include
#include
#include
#include
@@ -33,13 +33,6 @@
#include
#include
-#ifndef SMP
-#define irq_enter(cpu, irq) (++local_irq_count[cpu])
-#define irq_exit(cpu, irq) (--local_irq_count[cpu])
-#else
-#error SMP not supported
-#endif
-
#ifndef cliIF
#define cliIF()
#endif
@@ -85,6 +78,7 @@
};
static struct irqdesc irq_desc[NR_IRQS];
+static volatile unsigned long irq_err_count;
/*
* Get architecture specific interrupt handlers
@@ -133,8 +127,8 @@
action = irq_desc[i].action;
if (!action)
continue;
- p += sprintf(p, "%3d: %10u %s",
- i, kstat_irqs(i), action->name);
+ p += sprintf(p, "%3d: %10u ", i, kstat_irqs(i));
+ p += sprintf(p, " %s", action->name);
for (action = action->next; action; action = action->next) {
p += sprintf(p, ", %s", action->name);
}
@@ -144,6 +138,7 @@
#ifdef CONFIG_ARCH_ACORN
p += get_fiq_list(p);
#endif
+ p += sprintf(p, "Err: %10lu\n", irq_err_count);
return p - buf;
}
@@ -181,10 +176,17 @@
{
struct irqdesc * desc;
struct irqaction * action;
- int status, cpu;
+ int cpu;
irq = fixup_irq(irq);
+ /*
+ * Some hardware gives randomly wrong interrupts. Rather
+ * than crashing, do something sensible.
+ */
+ if (irq >= NR_IRQS)
+ goto bad_irq;
+
desc = irq_desc + irq;
spin_lock(&irq_controller_lock);
@@ -197,10 +199,11 @@
desc->triggered = 1;
/* Return with this interrupt masked if no action */
- status = 0;
action = desc->action;
if (action) {
+ int status = 0;
+
if (desc->nomask) {
spin_lock(&irq_controller_lock);
desc->unmask(irq);
@@ -237,9 +240,15 @@
if (softirq_state[cpu].active & softirq_state[cpu].mask)
do_softirq();
+ return;
+
+bad_irq:
+ irq_err_count += 1;
+ printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq);
+ return;
}
-#if defined(CONFIG_ARCH_ACORN)
+#ifdef CONFIG_ARCH_ACORN
void do_ecard_IRQ(int irq, struct pt_regs *regs)
{
struct irqdesc * desc;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/leds-ebsa110.c linux/arch/arm/kernel/leds-ebsa110.c
--- v2.4.0-test1/linux/arch/arm/kernel/leds-ebsa110.c Thu Jun 17 01:11:35 1999
+++ linux/arch/arm/kernel/leds-ebsa110.c Mon Jun 19 17:59:34 2000
@@ -13,7 +13,7 @@
#include
#include
-void ebsa110_leds_event(led_event_t ledevt)
+static void ebsa110_leds_event(led_event_t ledevt)
{
unsigned long flags;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/leds-footbridge.c linux/arch/arm/kernel/leds-footbridge.c
--- v2.4.0-test1/linux/arch/arm/kernel/leds-footbridge.c Thu Mar 2 14:36:22 2000
+++ linux/arch/arm/kernel/leds-footbridge.c Mon Jun 19 17:59:34 2000
@@ -46,7 +46,7 @@
switch (evt) {
case led_start:
hw_led_state = XBUS_LED_RED | XBUS_LED_GREEN;
-#ifndef CONFIG_LEDS_IDLE
+#ifndef CONFIG_LEDS_CPU
hw_led_state |= XBUS_LED_AMBER;
#endif
led_state |= LED_STATE_ENABLED;
@@ -223,11 +223,12 @@
{
}
-static void __init
-init_leds_event(led_event_t evt)
-{
- leds_event = dummy_leds_event;
+void (*leds_event)(led_event_t) = dummy_leds_event;
+
+EXPORT_SYMBOL(leds_event);
+static int __init leds_init(void)
+{
#ifdef CONFIG_FOOTBRIDGE
if (machine_is_ebsa285() || machine_is_co285())
leds_event = ebsa285_leds_event;
@@ -237,9 +238,9 @@
leds_event = netwinder_leds_event;
#endif
- leds_event(evt);
-}
+ leds_event(led_start);
-void (*leds_event)(led_event_t) = init_leds_event;
+ return 0;
+}
-EXPORT_SYMBOL(leds_event);
+__initcall(leds_init);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/leds-sa1100.c linux/arch/arm/kernel/leds-sa1100.c
--- v2.4.0-test1/linux/arch/arm/kernel/leds-sa1100.c Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/kernel/leds-sa1100.c Mon Jun 19 17:59:34 2000
@@ -0,0 +1,333 @@
+/*
+ * linux/arch/arm/kernel/leds-sa1100.c
+ *
+ * Copyright (C) 2000 John Dorsey
+ *
+ * Original (leds-footbridge.c) by Russell King
+ *
+ * Added Brutus LEDs support
+ * Nicolas Pitre, Mar 19, 2000
+ *
+ * Added LART LED support
+ * Erik Mouw (J.A.K.Mouw@its.tudelft.nl), April 21, 2000
+ *
+ *
+ * Assabet uses the LEDs as follows:
+ * - Green - toggles state every 50 timer interrupts
+ * - Red - on if system is not idle
+ *
+ * Brutus uses the LEDs as follows:
+ * - D3 (Green, GPIO9) - toggles state every 50 timer interrupts
+ * - D17 (Red, GPIO20) - on if system is not idle
+ * - D4 (Green, GPIO8) - misc function
+ *
+ * LART uses the LED as follows:
+ * - GPIO23 is the LED, on if system is not idle
+ * You can use both CONFIG_LEDS_CPU and CONFIG_LEDS_TIMER at the same
+ * time, but in that case the timer events will still dictate the
+ * pace of the LED.
+ *
+ */
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+
+
+#define LED_STATE_ENABLED 1
+#define LED_STATE_CLAIMED 2
+
+static unsigned int led_state;
+static unsigned int hw_led_state;
+
+
+#ifdef CONFIG_SA1100_ASSABET
+
+#define BCR_LED_MASK (BCR_LED_GREEN | BCR_LED_RED)
+
+static void assabet_leds_event(led_event_t evt)
+{
+ unsigned long flags;
+
+ save_flags_cli(flags);
+
+ switch (evt) {
+ case led_start:
+ hw_led_state = BCR_LED_RED | BCR_LED_GREEN;
+ led_state = LED_STATE_ENABLED;
+ break;
+
+ case led_stop:
+ led_state &= ~LED_STATE_ENABLED;
+ break;
+
+ case led_claim:
+ led_state |= LED_STATE_CLAIMED;
+ hw_led_state = BCR_LED_RED | BCR_LED_GREEN;
+ break;
+
+ case led_release:
+ led_state &= ~LED_STATE_CLAIMED;
+ hw_led_state = BCR_LED_RED | BCR_LED_GREEN;
+ break;
+
+#ifdef CONFIG_LEDS_TIMER
+ case led_timer:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state ^= BCR_LED_GREEN;
+ break;
+#endif
+
+#ifdef CONFIG_LEDS_CPU
+ case led_idle_start:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state |= BCR_LED_RED;
+ break;
+
+ case led_idle_end:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state &= ~BCR_LED_RED;
+ break;
+#endif
+
+ case led_green_on:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state &= ~BCR_LED_GREEN;
+ break;
+
+ case led_green_off:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state |= BCR_LED_GREEN;
+ break;
+
+ case led_amber_on:
+ break;
+
+ case led_amber_off:
+ break;
+
+ case led_red_on:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state &= ~BCR_LED_RED;
+ break;
+
+ case led_red_off:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state |= BCR_LED_RED;
+ break;
+
+ default:
+ break;
+ }
+
+ if (led_state & LED_STATE_ENABLED)
+ BCR = BCR_value = (BCR_value & ~BCR_LED_MASK) | hw_led_state;
+
+ restore_flags(flags);
+}
+
+#endif /* CONFIG_SA1100_ASSABET */
+
+#ifdef CONFIG_SA1100_BRUTUS
+
+#define LED_D3 GPIO_GPIO(9)
+#define LED_D4 GPIO_GPIO(8)
+#define LED_D17 GPIO_GPIO(20)
+#define LED_MASK (LED_D3|LED_D4|LED_D17)
+
+static void brutus_leds_event(led_event_t evt)
+{
+ unsigned long flags;
+
+ save_flags_cli(flags);
+
+ switch (evt) {
+ case led_start:
+ hw_led_state = LED_MASK;
+ led_state = LED_STATE_ENABLED;
+ break;
+
+ case led_stop:
+ led_state &= ~LED_STATE_ENABLED;
+ break;
+
+ case led_claim:
+ led_state |= LED_STATE_CLAIMED;
+ hw_led_state = LED_MASK;
+ break;
+
+ case led_release:
+ led_state &= ~LED_STATE_CLAIMED;
+ hw_led_state = LED_MASK;
+ break;
+
+#ifdef CONFIG_LEDS_TIMER
+ case led_timer:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state ^= LED_D3;
+ break;
+#endif
+
+#ifdef CONFIG_LEDS_CPU
+ case led_idle_start:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state |= LED_D17;
+ break;
+
+ case led_idle_end:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state &= ~LED_D17;
+ break;
+#endif
+
+ case led_green_on:
+ hw_led_state &= ~LED_D4;
+ break;
+
+ case led_green_off:
+ hw_led_state |= LED_D4;
+ break;
+
+ case led_amber_on:
+ break;
+
+ case led_amber_off:
+ break;
+
+ case led_red_on:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state &= ~LED_D17;
+ break;
+
+ case led_red_off:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state |= LED_D17;
+ break;
+
+ default:
+ break;
+ }
+
+ if (led_state & LED_STATE_ENABLED) {
+ GPSR = hw_led_state;
+ GPCR = hw_led_state ^ LED_MASK;
+ }
+
+ restore_flags(flags);
+}
+
+#endif /* CONFIG_SA1100_BRUTUS */
+
+#ifdef CONFIG_SA1100_LART
+
+#define LED_23 GPIO_GPIO23
+#define LED_MASK (LED_23)
+
+
+static void lart_leds_event(led_event_t evt)
+{
+ unsigned long flags;
+
+ save_flags_cli(flags);
+
+ switch(evt) {
+ case led_start:
+ hw_led_state = LED_MASK;
+ led_state = LED_STATE_ENABLED;
+ break;
+
+ case led_stop:
+ led_state &= ~LED_STATE_ENABLED;
+ break;
+
+ case led_claim:
+ led_state |= LED_STATE_CLAIMED;
+ hw_led_state = LED_MASK;
+ break;
+
+ case led_release:
+ led_state &= ~LED_STATE_CLAIMED;
+ hw_led_state = LED_MASK;
+ break;
+
+#ifdef CONFIG_LEDS_TIMER
+ case led_timer:
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state ^= LED_23;
+ break;
+#endif
+
+#ifdef CONFIG_LEDS_CPU
+ case led_idle_start:
+ /* The LART people like the LED to be off when the
+ system is idle... */
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state &= ~LED_23;
+ break;
+
+ case led_idle_end:
+ /* ... and on if the system is not idle */
+ if (!(led_state & LED_STATE_CLAIMED))
+ hw_led_state |= LED_23;
+ break;
+#endif
+
+ case led_red_on:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state &= ~LED_23;
+ break;
+
+ case led_red_off:
+ if (led_state & LED_STATE_CLAIMED)
+ hw_led_state |= LED_23;
+ break;
+
+ default:
+ break;
+ }
+
+ /* Now set the GPIO state, or nothing will happen at all */
+ if (led_state & LED_STATE_ENABLED) {
+ GPSR = hw_led_state;
+ GPCR = hw_led_state ^ LED_MASK;
+ }
+
+ restore_flags(flags);
+}
+
+#endif /* CONFIG_SA1100_LART */
+
+static void dummy_leds_event(led_event_t evt)
+{
+}
+
+void (*leds_event)(led_event_t) = dummy_leds_event;
+
+EXPORT_SYMBOL(leds_event);
+
+static int __init
+sa1100_leds_init(void)
+{
+#ifdef CONFIG_SA1100_ASSABET
+ if (machine_is_assabet())
+ leds_event = assabet_leds_event;
+#endif
+#ifdef CONFIG_SA1100_BRUTUS
+ if (machine_is_brutus())
+ leds_event = brutus_leds_event;
+#endif
+#ifdef CONFIG_SA1100_LART
+ if (machine_is_lart())
+ leds_event = lart_leds_event;
+#endif
+
+ leds_event(led_start);
+ return 0;
+}
+
+__initcall(sa1100_leds_init);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/process.c linux/arch/arm/kernel/process.c
--- v2.4.0-test1/linux/arch/arm/kernel/process.c Tue Apr 11 15:09:12 2000
+++ linux/arch/arm/kernel/process.c Mon Jun 19 17:59:34 2000
@@ -353,10 +353,12 @@
pid_t __ret;
__asm__ __volatile__(
- "mov r0, %1 @ kernel_thread sys_clone\n"
-" mov r1, #0\n"
- __syscall(clone)"\n"
-" mov %0, r0"
+ "mov r0, %1 @ kernel_thread sys_clone
+ mov r1, #0
+ "__syscall(clone)"
+ teq r0, #0 @ if we are the child
+ moveq fp, #0 @ ensure that fp is zero
+ mov %0, r0"
: "=r" (__ret)
: "Ir" (flags | CLONE_VM) : "r0", "r1");
if (__ret == 0)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/ptrace.c linux/arch/arm/kernel/ptrace.c
--- v2.4.0-test1/linux/arch/arm/kernel/ptrace.c Tue Mar 14 19:10:39 2000
+++ linux/arch/arm/kernel/ptrace.c Mon Jun 19 17:59:34 2000
@@ -393,10 +393,10 @@
ret = -EPERM;
if (request == PTRACE_TRACEME) {
/* are we already being traced? */
- if (current->flags & PF_PTRACED)
+ if (current->ptrace & PT_PTRACED)
goto out;
/* set the ptrace bit in the process flags. */
- current->flags |= PF_PTRACED;
+ current->ptrace |= PT_PTRACED;
ret = 0;
goto out;
}
@@ -419,9 +419,9 @@
(current->gid != child->gid)) && !capable(CAP_SYS_PTRACE))
goto out;
/* the same process cannot be attached many times */
- if (child->flags & PF_PTRACED)
+ if (child->ptrace & PT_PTRACED)
goto out;
- child->flags |= PF_PTRACED;
+ child->ptrace |= PT_PTRACED;
if (child->p_pptr != current) {
REMOVE_LINKS(child);
child->p_pptr = current;
@@ -432,7 +432,7 @@
goto out;
}
ret = -ESRCH;
- if (!(child->flags & PF_PTRACED))
+ if (!(child->ptrace & PT_PTRACED))
goto out;
if (child->state != TASK_STOPPED) {
if (request != PTRACE_KILL)
@@ -486,9 +486,9 @@
if ((unsigned long) data > _NSIG)
goto out;
if (request == PTRACE_SYSCALL)
- child->flags |= PF_TRACESYS;
+ child->ptrace |= PT_TRACESYS;
else
- child->flags &= ~PF_TRACESYS;
+ child->ptrace &= ~PT_TRACESYS;
child->exit_code = data;
wake_up_process (child);
/* make sure single-step breakpoint is gone. */
@@ -515,7 +515,7 @@
if ((unsigned long) data > _NSIG)
goto out;
child->thread.debug.nsaved = -1;
- child->flags &= ~PF_TRACESYS;
+ child->ptrace &= ~PT_TRACESYS;
wake_up_process(child);
child->exit_code = data;
/* give it a chance to run. */
@@ -568,7 +568,7 @@
ret = -EIO;
if ((unsigned long) data > _NSIG)
goto out;
- child->flags &= ~(PF_PTRACED|PF_TRACESYS);
+ child->ptrace &= ~(PT_PTRACED|PT_TRACESYS);
wake_up_process (child);
child->exit_code = data;
REMOVE_LINKS(child);
@@ -590,8 +590,8 @@
asmlinkage void syscall_trace(void)
{
- if ((current->flags & (PF_PTRACED|PF_TRACESYS))
- != (PF_PTRACED|PF_TRACESYS))
+ if ((current->ptrace & (PT_PTRACED|PT_TRACESYS))
+ != (PT_PTRACED|PT_TRACESYS))
return;
current->exit_code = SIGTRAP;
current->state = TASK_STOPPED;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/semaphore.c linux/arch/arm/kernel/semaphore.c
--- v2.4.0-test1/linux/arch/arm/kernel/semaphore.c Sun Feb 13 19:29:03 2000
+++ linux/arch/arm/kernel/semaphore.c Mon Jun 19 17:59:34 2000
@@ -290,68 +290,95 @@
* need to convert that sequence back into the C sequence when
* there is contention on the semaphore.
*
- * r0 contains the semaphore pointer on entry. Save the C-clobbered
- * registers (r0 to r3, ip and lr) except r0 in the cases where it
- * is used as a return value..
+ * ip contains the semaphore pointer on entry. Save the C-clobbered
+ * registers (r0 to r3 and lr), but not ip, as we use it as a return
+ * value in some cases..
*/
asm(" .section .text.lock, \"ax\"
.align 5
.globl __down_failed
__down_failed:
- stmfd sp!, {r0 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bl __down
- ldmfd sp!, {r0 - r3, ip, pc}
+ ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_interruptible_failed
__down_interruptible_failed:
- stmfd sp!, {r1 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bl __down_interruptible
- ldmfd sp!, {r1 - r3, ip, pc}
+ mov ip, r0
+ ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_trylock_failed
__down_trylock_failed:
- stmfd sp!, {r1 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bl __down_trylock
- ldmfd sp!, {r1 - r3, ip, pc}
+ mov ip, r0
+ ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __up_wakeup
__up_wakeup:
- stmfd sp!, {r0 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bl __up
- ldmfd sp!, {r0 - r3, ip, pc}
+ ldmfd sp!, {r0 - r3, pc}
.align 5
.globl __down_read_failed
__down_read_failed:
- stmfd sp!, {r0 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bcc 1f
- bl down_read_failed_biased
- ldmfd sp!, {r0 - r3, ip, pc}
-1: bl down_read_failed
- /***/
+1: bl down_read_failed_biased
+ ldmfd sp!, {r0 - r3, pc}
+2: bl down_read_failed
+ mrs r1, cpsr
+ orr r2, r1, #128
+ msr cpsr_c, r2
+ ldr r3, [r0]
+ subs r3, r3, #1
+ str r3, [r0]
+ msr cpsr_c, r1
+ ldmplfd sp!, {r0 - r3, pc}
+ bcc 2b
+ b 1b
.align 5
.globl __down_write_failed
__down_write_failed:
- stmfd sp!, {r0 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
bcc 1f
- bl down_write_failed_biased
- ldmfd sp!, {r0 - r3, ip, pc}
-1: bl down_write_failed
- /***/
+1: bl down_write_failed_biased
+ ldmfd sp!, {r0 - r3, pc}
+2: bl down_write_failed
+ mrs r1, cpsr
+ orr r2, r1, #128
+ msr cpsr_c, r2
+ ldr r3, [r0]
+ subs r3, r3, #"RW_LOCK_BIAS_STR"
+ str r3, [r0]
+ msr cpsr_c, r1
+ ldmeqfd sp!, {r0 - r3, pc}
+ bcc 2b
+ b 1b
.align 5
.globl __rwsem_wake
__rwsem_wake:
- stmfd sp!, {r0 - r3, ip, lr}
+ stmfd sp!, {r0 - r3, lr}
+ mov r0, ip
beq 1f
bl rwsem_wake_readers
- ldmfd sp!, {r0 - r3, ip, pc}
+ ldmfd sp!, {r0 - r3, pc}
1: bl rwsem_wake_writer
- ldmfd sp!, {r0 - r3, ip, pc}
+ ldmfd sp!, {r0 - r3, pc}
.previous
");
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/setup.c linux/arch/arm/kernel/setup.c
--- v2.4.0-test1/linux/arch/arm/kernel/setup.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/setup.c Mon Jun 19 17:59:34 2000
@@ -124,11 +124,11 @@
#ifdef MULTI_CPU
processor = *list->proc;
+#endif
printk("Processor: %s %s revision %d\n",
proc_info.manufacturer, proc_info.cpu_name,
(int)processor_id & 15);
-#endif
sprintf(system_utsname.machine, "%s%c", list->arch_name, ENDIANNESS);
sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS);
@@ -164,24 +164,6 @@
return list;
}
-static unsigned long __init memparse(char *ptr, char **retptr)
-{
- unsigned long ret = simple_strtoul(ptr, retptr, 0);
-
- switch (**retptr) {
- case 'M':
- case 'm':
- ret <<= 10;
- case 'K':
- case 'k':
- ret <<= 10;
- (*retptr)++;
- default:
- break;
- }
- return ret;
-}
-
/*
* Initial parsing of the command line. We need to pick out the
* memory size. We look for mem=size@start, where start and size
@@ -217,6 +199,7 @@
mi->bank[mi->nr_banks].start = start;
mi->bank[mi->nr_banks].size = size;
+ mi->bank[mi->nr_banks].node = 0;
mi->nr_banks += 1;
}
c = *from++;
@@ -378,6 +361,7 @@
if (meminfo.nr_banks == 0) {
meminfo.nr_banks = 1;
meminfo.bank[0].start = PHYS_OFFSET;
+ meminfo.bank[0].node = 0;
if (params)
meminfo.bank[0].size = params->u1.s.nr_pages << PAGE_SHIFT;
else
@@ -393,8 +377,8 @@
saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
parse_cmdline(&meminfo, cmdline_p, from);
bootmem_init(&meminfo);
- request_standard_resources(&meminfo, mdesc);
paging_init(&meminfo);
+ request_standard_resources(&meminfo, mdesc);
#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/signal.c linux/arch/arm/kernel/signal.c
--- v2.4.0-test1/linux/arch/arm/kernel/signal.c Mon Jun 19 16:31:56 2000
+++ linux/arch/arm/kernel/signal.c Mon Jun 19 17:59:34 2000
@@ -512,7 +512,7 @@
if (!signr)
break;
- if ((current->flags & PF_PTRACED) && signr != SIGKILL) {
+ if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) {
/* Let the debugger run. */
current->exit_code = signr;
current->state = TASK_STOPPED;
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/kernel/time.c linux/arch/arm/kernel/time.c
--- v2.4.0-test1/linux/arch/arm/kernel/time.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/kernel/time.c Mon Jun 19 17:59:34 2000
@@ -154,21 +154,29 @@
static void do_leds(void)
{
- static unsigned int count = 50;
- static int last_pid;
+#ifdef CONFIG_LEDS_CPU
+ {
+ static int last_pid;
- if (current->pid != last_pid) {
- last_pid = current->pid;
- if (last_pid)
- leds_event(led_idle_end);
- else
- leds_event(led_idle_start);
+ if (current->pid != last_pid) {
+ last_pid = current->pid;
+ if (last_pid)
+ leds_event(led_idle_end);
+ else
+ leds_event(led_idle_start);
+ }
}
-
- if (--count == 0) {
- count = 50;
- leds_event(led_timer);
+#endif
+#ifdef CONFIG_LEDS_TIMER
+ {
+ static unsigned int count = 50;
+
+ if (--count == 0) {
+ count = 50;
+ leds_event(led_timer);
+ }
}
+#endif
}
#else
#define do_leds()
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/changebit.S linux/arch/arm/lib/changebit.S
--- v2.4.0-test1/linux/arch/arm/lib/changebit.S Fri Jan 21 18:19:15 2000
+++ linux/arch/arm/lib/changebit.S Mon Jun 19 17:59:34 2000
@@ -9,18 +9,15 @@
.text
/* Purpose : Function to change a bit
- * Prototype: int change_bit(int bit,int *addr)
+ * Prototype: int change_bit(int bit, void *addr)
*/
ENTRY(change_bit)
- and r2, r0, #7
- mov r3, #1
- mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ and r2, r0, #7
+ mov r3, #1
+ mov r3, r3, lsl r2
+ save_and_disable_irqs ip, r2
ldrb r2, [r1, r0, lsr #3]
eor r2, r2, r3
strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
+ restore_irqs ip
RETINSTR(mov,pc,lr)
-
-
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/clearbit.S linux/arch/arm/lib/clearbit.S
--- v2.4.0-test1/linux/arch/arm/lib/clearbit.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/clearbit.S Mon Jun 19 17:59:34 2000
@@ -8,19 +8,20 @@
#include
.text
-@ Purpose : Function to clear a bit
-@ Prototype: int clear_bit(int bit,int *addr)
+/*
+ * Purpose : Function to clear a bit
+ * Prototype: int clear_bit(int bit, void *addr)
+ */
ENTRY(clear_bit)
and r2, r0, #7
mov r3, #1
mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ save_and_disable_irqs ip, r2
ldrb r2, [r1, r0, lsr #3]
bic r2, r2, r3
strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
+ restore_irqs ip
RETINSTR(mov,pc,lr)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/findbit.S linux/arch/arm/lib/findbit.S
--- v2.4.0-test1/linux/arch/arm/lib/findbit.S Thu Mar 2 14:36:22 2000
+++ linux/arch/arm/lib/findbit.S Mon Jun 19 17:59:34 2000
@@ -1,65 +1,53 @@
/*
- * linux/arch/arm/lib/bitops.S
+ * linux/arch/arm/lib/findbit.S
*
- * Copyright (C) 1995-1996 Russell King
+ * Copyright (C) 1995-2000 Russell King
*/
#include
#include
.text
-@ Purpose : Find a 'zero' bit
-@ Prototype: int find_first_zero_bit(char *addr,int maxbit);
-
+/*
+ * Purpose : Find a 'zero' bit
+ * Prototype: int find_first_zero_bit(void *addr, int maxbit);
+ */
ENTRY(find_first_zero_bit)
- mov r2, #0 @ Initialise bit position
-Lfindzbit1lp: ldrb r3, [r0, r2, lsr #3] @ Check byte, if 0xFF, then all bits set
- teq r3, #0xFF
- bne Lfoundzbit
- add r2, r2, #8
- cmp r2, r1 @ Check to see if we have come to the end
- bcc Lfindzbit1lp
- add r0, r1, #1 @ Make sure that we flag an error
- RETINSTR(mov,pc,lr)
-Lfoundzbit: tst r3, #1 @ Check individual bits
- moveq r0, r2
- RETINSTR(moveq,pc,lr)
- tst r3, #2
- addeq r0, r2, #1
- RETINSTR(moveq,pc,lr)
- tst r3, #4
- addeq r0, r2, #2
- RETINSTR(moveq,pc,lr)
- tst r3, #8
- addeq r0, r2, #3
- RETINSTR(moveq,pc,lr)
- tst r3, #16
- addeq r0, r2, #4
- RETINSTR(moveq,pc,lr)
- tst r3, #32
- addeq r0, r2, #5
- RETINSTR(moveq,pc,lr)
- tst r3, #64
- addeq r0, r2, #6
- RETINSTR(moveq,pc,lr)
- add r0, r2, #7
+ mov r2, #0
+.bytelp: ldrb r3, [r0, r2, lsr #3]
+ eors r3, r3, #0xff @ invert bits
+ bne .found @ any now set - found zero bit
+ add r2, r2, #8 @ next bit pointer
+ cmp r2, r1 @ any more?
+ bcc .bytelp
+ add r0, r1, #1 @ no free bits
RETINSTR(mov,pc,lr)
-@ Purpose : Find next 'zero' bit
-@ Prototype: int find_next_zero_bit(char *addr,int maxbit,int offset)
-
+/*
+ * Purpose : Find next 'zero' bit
+ * Prototype: int find_next_zero_bit(void *addr, int maxbit, int offset)
+ */
ENTRY(find_next_zero_bit)
- tst r2, #7
- beq Lfindzbit1lp @ If new byte, goto old routine
+ ands ip, r2, #7
+ beq .bytelp @ If new byte, goto old routine
ldrb r3, [r0, r2, lsr#3]
- orr r3, r3, #0xFF00 @ Set top bits so we wont get confused
- str r4, [sp, #-4]!
- and r4, r2, #7
- mov r3, r3, lsr r4 @ Shift right by no. of bits
- ldr r4, [sp], #4
- and r3, r3, #0xFF
- teq r3, #0xFF
- orreq r2, r2, #7
+ eor r3, r3, #0xff @ now looking for a 1 bit
+ movs r3, r3, lsr ip @ shift off unused bits
+ orreq r2, r2, #7 @ if zero, then no bits here
+ addeq r2, r2, #1 @ align bit pointer
+ beq .bytelp @ loop for next bit
+
+/*
+ * One or more bits in the LSB of r3 are assumed to be set.
+ */
+.found: tst r3, #0x0f
+ addeq r2, r2, #4
+ movne r3, r3, lsl #4
+ tst r3, #0x30
+ addeq r2, r2, #2
+ movne r3, r3, lsl #2
+ tst r3, #0x40
addeq r2, r2, #1
- beq Lfindzbit1lp @ If all bits are set, goto old routine
- b Lfoundzbit
+ mov r0, r2
+ RETINSTR(mov,pc,lr)
+
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/getconsdata.c linux/arch/arm/lib/getconsdata.c
--- v2.4.0-test1/linux/arch/arm/lib/getconsdata.c Thu Mar 2 14:36:22 2000
+++ linux/arch/arm/lib/getconsdata.c Mon Jun 19 17:59:34 2000
@@ -1,7 +1,7 @@
/*
* linux/arch/arm/lib/getconsdata.c
*
- * Copyright (C) 1995-1998 Russell King
+ * Copyright (C) 1995-2000 Russell King
*/
#include
#include
@@ -25,15 +25,11 @@
#define OFF_TSK(n) (unsigned long)&(((struct task_struct *)0)->n)
#define OFF_MM(n) (unsigned long)&(((struct mm_struct *)0)->n)
-unsigned long TSK_STATE = OFF_TSK(state);
-unsigned long TSK_FLAGS = OFF_TSK(flags);
-unsigned long TSK_NEED_RESCHED = OFF_TSK(need_resched);
unsigned long TSK_SIGPENDING = OFF_TSK(sigpending);
unsigned long TSK_ADDR_LIMIT = OFF_TSK(addr_limit);
+unsigned long TSK_NEED_RESCHED = OFF_TSK(need_resched);
+unsigned long TSK_PTRACE = OFF_TSK(ptrace);
unsigned long TSK_USED_MATH = OFF_TSK(used_math);
-
-unsigned long MM = OFF_TSK(mm);
-unsigned long PGD = OFF_MM(pgd);
unsigned long TSS_SAVE = OFF_TSK(thread.save);
unsigned long TSS_FPESAVE = OFF_TSK(thread.fpstate.soft.save);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/setbit.S linux/arch/arm/lib/setbit.S
--- v2.4.0-test1/linux/arch/arm/lib/setbit.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/setbit.S Mon Jun 19 17:59:34 2000
@@ -8,19 +8,20 @@
#include
.text
-@ Purpose : Function to set a bit
-@ Prototype: int set_bit(int bit,int *addr)
+/*
+ * Purpose : Function to set a bit
+ * Prototype: int set_bit(int bit, void *addr)
+ */
ENTRY(set_bit)
and r2, r0, #7
mov r3, #1
mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ save_and_disable_irqs ip, r2
ldrb r2, [r1, r0, lsr #3]
orr r2, r2, r3
strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
+ restore_irqs ip
RETINSTR(mov,pc,lr)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/testchangebit.S linux/arch/arm/lib/testchangebit.S
--- v2.4.0-test1/linux/arch/arm/lib/testchangebit.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/testchangebit.S Mon Jun 19 17:59:34 2000
@@ -12,14 +12,13 @@
add r1, r1, r0, lsr #3
and r3, r0, #7
mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ save_and_disable_irqs ip, r2
ldrb r2, [r1]
tst r2, r0, lsl r3
eor r2, r2, r0, lsl r3
- moveq r0, #0
strb r2, [r1]
- RESTOREIRQS(ip)
+ restore_irqs ip
+ moveq r0, #0
RETINSTR(mov,pc,lr)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/testclearbit.S linux/arch/arm/lib/testclearbit.S
--- v2.4.0-test1/linux/arch/arm/lib/testclearbit.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/testclearbit.S Mon Jun 19 17:59:34 2000
@@ -10,16 +10,15 @@
ENTRY(test_and_clear_bit)
add r1, r1, r0, lsr #3 @ Get byte offset
- and r3, r0, #7 @ Get bit offset
+ and r3, r0, #7 @ Get bit offset
mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ save_and_disable_irqs ip, r2
ldrb r2, [r1]
tst r2, r0, lsl r3
bic r2, r2, r0, lsl r3
- moveq r0, #0
strb r2, [r1]
- RESTOREIRQS(ip)
+ restore_irqs ip
+ moveq r0, #0
RETINSTR(mov,pc,lr)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/testsetbit.S linux/arch/arm/lib/testsetbit.S
--- v2.4.0-test1/linux/arch/arm/lib/testsetbit.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/testsetbit.S Mon Jun 19 17:59:34 2000
@@ -12,14 +12,13 @@
add r1, r1, r0, lsr #3 @ Get byte offset
and r3, r0, #7 @ Get bit offset
mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
+ save_and_disable_irqs ip, r2
ldrb r2, [r1]
tst r2, r0, lsl r3
orr r2, r2, r0, lsl r3
- moveq r0, #0
strb r2, [r1]
- RESTOREIRQS(ip)
+ restore_irqs ip
+ moveq r0, #0
RETINSTR(mov,pc,lr)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/lib/uaccess.S linux/arch/arm/lib/uaccess.S
--- v2.4.0-test1/linux/arch/arm/lib/uaccess.S Fri Jan 21 18:19:16 2000
+++ linux/arch/arm/lib/uaccess.S Mon Jun 19 17:59:34 2000
@@ -538,13 +538,18 @@
.section .fixup,"ax"
.align 0
- /* We took an exception. Zero out the buffer and pretend no
- data was copied. */
-9001: ldr r0, [sp], #4
- ldr r1, [sp]
- teq r1, #0
+ /*
+ * We took an exception. r0 contains a pointer to
+ * the byte not copied.
+ */
+9001: ldr r2, [sp], #4 @ void *to
+ sub r2, r0, r2 @ bytes copied
+ ldr r1, [sp], #4 @ unsigned long count
+ subs r4, r1, r2 @ bytes left to copy
+ movne r1, r4
blne SYMBOL_NAME(__memzero)
- LOADREGS(fd,sp!, {r0, r4 - r7, pc})
+ mov r0, r4
+ LOADREGS(fd,sp!, {r4 - r7, pc})
.previous
/* Prototype: int __arch_clear_user(void *addr, size_t sz)
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/Makefile linux/arch/arm/mm/Makefile
--- v2.4.0-test1/linux/arch/arm/mm/Makefile Tue Apr 11 15:09:12 2000
+++ linux/arch/arm/mm/Makefile Mon Jun 19 17:59:34 2000
@@ -22,6 +22,9 @@
ifeq ($(CONFIG_CPU_ARM7),y)
P_OBJS += proc-arm6,7.o
endif
+ ifeq ($(CONFIG_CPU_ARM720),y)
+ P_OBJS += proc-arm720.o
+ endif
ifeq ($(CONFIG_CPU_SA110),y)
P_OBJS += proc-sa110.o
endif
@@ -41,5 +44,6 @@
fault-armo.o: fault-common.c
proc-arm2,3.o: ../lib/constants.h
proc-arm6,7.o: ../lib/constants.h
+proc-arm720.o: ../lib/constants.h
proc-sa110.o: ../lib/constants.h
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/consistent.c linux/arch/arm/mm/consistent.c
--- v2.4.0-test1/linux/arch/arm/mm/consistent.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/mm/consistent.c Mon Jun 19 17:59:34 2000
@@ -9,8 +9,10 @@
#include
#include
#include
+#include
#include
+#include
#include
/*
@@ -19,6 +21,8 @@
* whether this could be called from an interrupt context or not. For
* now, we expressly forbid it, especially as some of the stuff we do
* here is not interrupt context safe.
+ *
+ * Note that this does *not* zero the allocated area!
*/
void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
{
@@ -36,15 +40,21 @@
if (!page)
goto no_page;
- memset((void *)page, 0, size);
- clean_cache_area(page, size);
-
- *dma_handle = virt_to_bus((void *)page);
-
ret = __ioremap(virt_to_phys((void *)page), size, 0);
if (ret) {
/* free wasted pages */
unsigned long end = page + (PAGE_SIZE << order);
+
+ /*
+ * we need to ensure that there are no
+ * cachelines in use, or worse dirty in
+ * this area.
+ */
+ dma_cache_inv(page, size);
+ dma_cache_inv(ret, size);
+
+ *dma_handle = virt_to_bus((void *)page);
+
page += size;
while (page < end) {
free_page(page);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c
--- v2.4.0-test1/linux/arch/arm/mm/fault-armv.c Sun Mar 19 18:35:30 2000
+++ linux/arch/arm/mm/fault-armv.c Mon Jun 19 17:59:34 2000
@@ -250,6 +250,8 @@
}
}
+if (addr != eaddr)
+printk("PC = %08lx, instr = %08x, addr = %08lx, eaddr = %08lx\n", instruction_pointer(regs), instr, addr, eaddr);
if (LDST_L_BIT(instr)) {
regs->uregs[rd] = get_unaligned((unsigned long *)eaddr);
if (rd == 15)
@@ -383,29 +385,38 @@
"more information\n"
asmlinkage void
-do_DataAbort(unsigned long addr, int fsr, int error_code, struct pt_regs *regs)
+do_DataAbort(unsigned long addr, int error_code, struct pt_regs *regs, int fsr)
{
- const struct fsr_info *inf;
+ const struct fsr_info *inf = fsr_info + (fsr & 15);
- if (user_mode(regs) && addr == regs->ARM_pc) {
+ if (addr == regs->ARM_pc)
+ goto weirdness;
+
+ if (!inf->fn)
+ goto bad;
+
+ if (!inf->fn(addr, error_code, regs))
+ return;
+bad:
+ force_sig(inf->sig, current);
+ die_if_kernel(inf->name, regs, fsr);
+ return;
+
+weirdness:
+ if (user_mode(regs)) {
static int first = 1;
- if (first) {
+ if (first)
/*
* I want statistical information on this problem,
* but we don't want to hastle the users too much.
*/
printk(BUG_PROC_MSG, fsr);
- first = 0;
- }
+ first = 0;
return;
}
- inf = fsr_info + (fsr & 15);
-
- if (!inf->fn || inf->fn(addr, error_code, regs)) {
- force_sig(inf->sig, current);
- die_if_kernel(inf->name, regs, fsr);
- }
+ if (!inf->fn || inf->fn(addr, error_code, regs))
+ goto bad;
}
asmlinkage int
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/fault-common.c linux/arch/arm/mm/fault-common.c
--- v2.4.0-test1/linux/arch/arm/mm/fault-common.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/mm/fault-common.c Mon Jun 19 17:59:34 2000
@@ -16,6 +16,10 @@
{
pgd_t *pgd;
+ if (!mm)
+ mm = &init_mm;
+
+ printk(KERN_ALERT "pgd = %p\n", mm->pgd);
pgd = pgd_offset(mm, addr);
printk(KERN_ALERT "*pgd = %08lx", pgd_val(*pgd));
@@ -52,39 +56,78 @@
printk("\n");
}
-/*
- * Oops. The kernel tried to access some bad page. We'll have to
- * terminate things with extreme prejudice.
- */
-static void
-kernel_page_fault(unsigned long addr, int write_access, struct pt_regs *regs,
- struct task_struct *tsk, struct mm_struct *mm)
+static int __do_page_fault(struct mm_struct *mm, unsigned long addr, int mode, struct task_struct *tsk)
{
- char *reason;
+ struct vm_area_struct *vma;
+ int fault, mask;
+
+ vma = find_vma(mm, addr);
+ fault = -2; /* bad map area */
+ if (!vma)
+ goto out;
+ if (vma->vm_start > addr)
+ goto check_stack;
- if (addr < PAGE_SIZE)
- reason = "NULL pointer dereference";
+ /*
+ * Ok, we have a good vm_area for this
+ * memory access, so we can handle it.
+ */
+good_area:
+ if (READ_FAULT(mode)) /* read? */
+ mask = VM_READ|VM_EXEC;
else
- reason = "paging request";
+ mask = VM_WRITE;
- printk(KERN_ALERT "Unable to handle kernel %s at virtual address %08lx\n",
- reason, addr);
- if (!mm)
- mm = &init_mm;
+ fault = -1; /* bad access type */
+ if (!(vma->vm_flags & mask))
+ goto out;
- printk(KERN_ALERT "pgd = %p\n", mm->pgd);
- show_pte(mm, addr);
- die("Oops", regs, write_access);
+ /*
+ * If for any reason at all we couldn't handle
+ * the fault, make sure we exit gracefully rather
+ * than endlessly redo the fault.
+ */
+survive:
+ fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, DO_COW(mode));
- do_exit(SIGKILL);
+ /*
+ * Handle the "normal" cases first - successful and sigbus
+ */
+ switch (fault) {
+ case 2:
+ tsk->maj_flt++;
+ return fault;
+ case 1:
+ tsk->min_flt++;
+ case 0:
+ return fault;
+ }
+
+ fault = -3; /* out of memory */
+ if (tsk->pid != 1)
+ goto out;
+
+ /*
+ * If we are out of memory for pid1,
+ * sleep for a while and retry
+ */
+ tsk->policy |= SCHED_YIELD;
+ schedule();
+ goto survive;
+
+check_stack:
+ if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
+ goto good_area;
+out:
+ return fault;
}
static int do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
{
struct task_struct *tsk;
struct mm_struct *mm;
- struct vm_area_struct *vma;
unsigned long fixup;
+ int fault;
tsk = current;
mm = tsk->mm;
@@ -97,57 +140,77 @@
goto no_context;
down(&mm->mmap_sem);
- vma = find_vma(mm, addr);
- if (!vma)
- goto bad_area;
- if (vma->vm_start <= addr)
- goto good_area;
- if (!(vma->vm_flags & VM_GROWSDOWN) || expand_stack(vma, addr))
- goto bad_area;
+ fault = __do_page_fault(mm, addr, mode, tsk);
+ up(&mm->mmap_sem);
/*
- * Ok, we have a good vm_area for this memory access, so
- * we can handle it..
+ * Handle the "normal" case first
*/
-good_area:
- if (READ_FAULT(mode)) { /* read? */
- if (!(vma->vm_flags & (VM_READ|VM_EXEC)))
- goto bad_area;
- } else {
- if (!(vma->vm_flags & VM_WRITE))
- goto bad_area;
- }
+ if (fault > 0)
+ return 0;
/*
- * If for any reason at all we couldn't handle the fault,
- * make sure we exit gracefully rather than endlessly redo
- * the fault.
+ * We had some memory, but were unable to
+ * successfully fix up this page fault.
*/
- if (!handle_mm_fault(mm, vma, addr & PAGE_MASK, DO_COW(mode)))
+ if (fault == 0)
goto do_sigbus;
- up(&mm->mmap_sem);
- return 0;
-
/*
- * Something tried to access memory that isn't in our memory map..
- * Fix it, but check if it's kernel or user first..
+ * If we are in kernel mode at this point, we
+ * have no context to handle this fault with.
*/
-bad_area:
- up(&mm->mmap_sem);
+ if (!user_mode(regs))
+ goto no_context;
+
+ if (fault == -3) {
+ /*
+ * We ran out of memory, or some other thing happened to
+ * us that made us unable to handle the page fault gracefully.
+ */
+ printk("VM: killing process %s\n", tsk->comm);
+ do_exit(SIGKILL);
+ } else {
+ /*
+ * Something tried to access memory that isn't in our memory map..
+ * User mode accesses just cause a SIGSEGV
+ */
+ struct siginfo si;
+
+#ifdef CONFIG_DEBUG_USER
+ printk(KERN_DEBUG "%s: unhandled page fault at pc=0x%08lx, "
+ "lr=0x%08lx (bad address=0x%08lx, code %d)\n",
+ tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
+#endif
- /* User mode accesses just cause a SIGSEGV */
- if (user_mode(regs)) {
tsk->thread.address = addr;
tsk->thread.error_code = mode;
tsk->thread.trap_no = 14;
-#ifdef CONFIG_DEBUG_USER
- printk("%s: memory violation at pc=0x%08lx, lr=0x%08lx (bad address=0x%08lx, code %d)\n",
- tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
-#endif
- force_sig(SIGSEGV, tsk);
- return 0;
+ si.si_signo = SIGSEGV;
+ si.si_code = fault == -1 ? SEGV_ACCERR : SEGV_MAPERR;
+ si.si_addr = (void *)addr;
+ force_sig_info(SIGSEGV, &si, tsk);
}
+ return 0;
+
+
+/*
+ * We ran out of memory, or some other thing happened to us that made
+ * us unable to handle the page fault gracefully.
+ */
+do_sigbus:
+ /*
+ * Send a sigbus, regardless of whether we were in kernel
+ * or user mode.
+ */
+ tsk->thread.address = addr;
+ tsk->thread.error_code = mode;
+ tsk->thread.trap_no = 14;
+ force_sig(SIGBUS, tsk);
+
+ /* Kernel mode? Handle exceptions or die */
+ if (user_mode(regs))
+ return 0;
no_context:
/* Are we prepared to handle this kernel fault? */
@@ -160,29 +223,16 @@
return 0;
}
- kernel_page_fault(addr, mode, regs, tsk, mm);
- return 0;
-
-do_sigbus:
/*
- * We ran out of memory, or some other thing happened to us that made
- * us unable to handle the page fault gracefully.
+ * Oops. The kernel tried to access some bad page. We'll have to
+ * terminate things with extreme prejudice.
*/
- up(&mm->mmap_sem);
+ printk(KERN_ALERT "Unable to handle kernel %s at virtual address %08lx\n",
+ (addr < PAGE_SIZE) ? "NULL pointer dereference" : "paging request", addr);
- /*
- * Send a sigbus, regardless of whether we were in kernel
- * or user mode.
- */
- tsk->thread.address = addr;
- tsk->thread.error_code = mode;
- tsk->thread.trap_no = 14;
- force_sig(SIGBUS, tsk);
+ show_pte(mm, addr);
+ die("Oops", regs, mode);
+ do_exit(SIGKILL);
- /* Kernel mode? Handle exceptions or die */
- if (!user_mode(regs))
- goto no_context;
return 0;
}
-
-
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/init.c linux/arch/arm/mm/init.c
--- v2.4.0-test1/linux/arch/arm/mm/init.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/mm/init.c Mon Jun 19 17:59:34 2000
@@ -31,16 +31,23 @@
#include "map.h"
+#ifndef CONFIG_DISCONTIGMEM
+#define NR_NODES 1
+#else
+#define NR_NODES 4
+#endif
+
#ifdef CONFIG_CPU_32
#define TABLE_OFFSET (PTRS_PER_PTE)
#else
#define TABLE_OFFSET 0
#endif
+
#define TABLE_SIZE ((TABLE_OFFSET + PTRS_PER_PTE) * sizeof(void *))
static unsigned long totalram_pages;
pgd_t swapper_pg_dir[PTRS_PER_PGD];
-extern int _stext, _text, _etext, _edata, _end;
+extern char _stext, _text, _etext, _end, __init_begin, __init_end;
/*
* The sole use of this is to pass memory configuration
@@ -173,6 +180,12 @@
show_buffers();
}
+struct node_info {
+ unsigned int start;
+ unsigned int end;
+ int bootmap_pages;
+};
+
#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT)
#define V_PFN_DOWN(x) O_PFN_DOWN(__pa(x))
@@ -183,34 +196,24 @@
#define PFN_RANGE(s,e) PFN_SIZE(PAGE_ALIGN((unsigned long)(e)) - \
(((unsigned long)(s)) & PAGE_MASK))
+/*
+ * FIXME: We really want to avoid allocating the bootmap bitmap
+ * over the top of the initrd. Hopefully, this is located towards
+ * the start of a bank, so if we allocate the bootmap bitmap at
+ * the end, we won't clash.
+ */
static unsigned int __init
-find_bootmap_pfn(struct meminfo *mi, unsigned int bootmap_pages)
+find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
{
unsigned int start_pfn, bank, bootmap_pfn;
start_pfn = V_PFN_UP(&_end);
bootmap_pfn = 0;
- /*
- * FIXME: We really want to avoid allocating the bootmap
- * over the top of the initrd.
- */
-#ifdef CONFIG_BLK_DEV_INITRD
- if (initrd_start) {
- if (__pa(initrd_end) > mi->end) {
- printk ("initrd extends beyond end of memory "
- "(0x%08lx > 0x%08lx) - disabling initrd\n",
- __pa(initrd_end), mi->end);
- initrd_start = 0;
- initrd_end = 0;
- }
- }
-#endif
-
for (bank = 0; bank < mi->nr_banks; bank ++) {
unsigned int start, end;
- if (mi->bank[bank].size == 0)
+ if (mi->bank[bank].node != node)
continue;
start = O_PFN_UP(mi->bank[bank].start);
@@ -239,99 +242,224 @@
}
/*
- * Initialise one node of the bootmem allocator. For now, we
- * only initialise node 0. Notice that we have a bootmem
- * bitmap per node.
+ * Scan the memory info structure and pull out:
+ * - the end of memory
+ * - the number of nodes
+ * - the pfn range of each node
+ * - the number of bootmem bitmap pages
*/
-static void __init setup_bootmem_node(int node, struct meminfo *mi)
+static unsigned int __init
+find_memend_and_nodes(struct meminfo *mi, struct node_info *np)
{
- unsigned int end_pfn, start_pfn, bootmap_pages, bootmap_pfn;
- unsigned int i;
+ unsigned int i, bootmem_pages = 0, memend_pfn = 0;
+
+ for (i = 0; i < NR_NODES; i++) {
+ np[i].start = -1U;
+ np[i].end = 0;
+ np[i].bootmap_pages = 0;
+ }
+
+ for (i = 0; i < mi->nr_banks; i++) {
+ unsigned long start, end;
+ int node;
+
+ if (mi->bank[i].size == 0) {
+ /*
+ * Mark this bank with an invalid node number
+ */
+ mi->bank[i].node = -1;
+ continue;
+ }
+
+ node = mi->bank[i].node;
+
+ if (node >= numnodes) {
+ numnodes = node + 1;
- if (node != 0) /* only initialise node 0 for now */
- return;
+ /*
+ * Make sure we haven't exceeded the maximum number
+ * of nodes that we have in this configuration. If
+ * we have, we're in trouble. (maybe we ought to
+ * limit, instead of bugging?)
+ */
+ if (numnodes > NR_NODES)
+ BUG();
+ }
+
+ /*
+ * Get the start and end pfns for this bank
+ */
+ start = O_PFN_UP(mi->bank[i].start);
+ end = O_PFN_DOWN(mi->bank[i].start + mi->bank[i].size);
- start_pfn = O_PFN_UP(PHYS_OFFSET);
- end_pfn = O_PFN_DOWN(mi->end);
- bootmap_pages = bootmem_bootmap_pages(end_pfn - start_pfn);
- bootmap_pfn = find_bootmap_pfn(mi, bootmap_pages);
+ if (np[node].start > start)
+ np[node].start = start;
+
+ if (np[node].end < end)
+ np[node].end = end;
+
+ if (memend_pfn < end)
+ memend_pfn = end;
+ }
/*
- * Initialise the boot-time allocator
+ * Calculate the number of pages we require to
+ * store the bootmem bitmaps.
*/
- init_bootmem_node(node, bootmap_pfn, start_pfn, end_pfn);
+ for (i = 0; i < numnodes; i++) {
+ if (np[i].end == 0)
+ continue;
+
+ np[i].bootmap_pages = bootmem_bootmap_pages(np[i].end -
+ np[i].start);
+ bootmem_pages += np[i].bootmap_pages;
+ }
/*
- * Register all available RAM with the bootmem allocator.
+ * This doesn't seem to be used by the Linux memory
+ * manager any more. If we can get rid of it, we
+ * also get rid of some of the stuff above as well.
*/
- for (i = 0; i < mi->nr_banks; i++)
- if (mi->bank[i].size)
- free_bootmem_node(node, mi->bank[i].start,
- PFN_SIZE(mi->bank[i].size) << PAGE_SHIFT);
+ max_low_pfn = memend_pfn - O_PFN_DOWN(PHYS_OFFSET);
+ mi->end = memend_pfn << PAGE_SHIFT;
- reserve_bootmem_node(node, bootmap_pfn << PAGE_SHIFT,
- bootmap_pages << PAGE_SHIFT);
+ return bootmem_pages;
}
-/*
- * Initialise the bootmem allocator.
- */
-void __init bootmem_init(struct meminfo *mi)
+static int __init check_initrd(struct meminfo *mi)
{
- unsigned int i, node;
+ int initrd_node = -2;
+#ifdef CONFIG_BLK_DEV_INITRD
/*
- * Calculate the physical address of the top of memory.
- * Note that there are no guarantees assumed about the
- * ordering of the bank information.
+ * Make sure that the initrd is within a valid area of
+ * memory.
*/
- mi->end = 0;
- for (i = 0; i < mi->nr_banks; i++) {
- unsigned long end;
+ if (initrd_start) {
+ unsigned long phys_initrd_start, phys_initrd_end;
+ unsigned int i;
+
+ phys_initrd_start = __pa(initrd_start);
+ phys_initrd_end = __pa(initrd_end);
+
+ for (i = 0; i < mi->nr_banks; i++) {
+ unsigned long bank_end;
- if (mi->bank[i].size != 0) {
- end = mi->bank[i].start + mi->bank[i].size;
- if (mi->end < end)
- mi->end = end;
+ bank_end = mi->bank[i].start + mi->bank[i].size;
+
+ if (mi->bank[i].start <= phys_initrd_start &&
+ phys_initrd_end <= bank_end)
+ initrd_node = mi->bank[i].node;
}
}
- max_low_pfn = O_PFN_DOWN(mi->end - PHYS_OFFSET);
+ if (initrd_node == -1) {
+ printk(KERN_ERR "initrd (0x%08lx - 0x%08lx) extends beyond "
+ "physical memory - disabling initrd\n",
+ initrd_start, initrd_end);
+ initrd_start = initrd_end = 0;
+ }
+#endif
- /*
- * Setup each node
- */
- for (node = 0; node < numnodes; node++)
- setup_bootmem_node(node, mi);
+ return initrd_node;
+}
+/*
+ * Reserve the various regions of node 0
+ */
+static inline void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages)
+{
/*
* Register the kernel text and data with bootmem.
* Note that this can only be in node 0.
*/
- reserve_bootmem_node(0, V_PFN_DOWN(&_stext) << PAGE_SHIFT,
- PFN_RANGE(&_stext, &_end) << PAGE_SHIFT);
+ reserve_bootmem_node(0, __pa(&_stext), &_end - &_stext);
#ifdef CONFIG_CPU_32
/*
* Reserve the page tables. These are already in use,
* and can only be in node 0.
*/
- reserve_bootmem_node(0, V_PFN_DOWN(swapper_pg_dir) << PAGE_SHIFT,
- PFN_SIZE(PTRS_PER_PGD * sizeof(void *)) << PAGE_SHIFT);
+ reserve_bootmem_node(0, __pa(swapper_pg_dir),
+ PTRS_PER_PGD * sizeof(void *));
#endif
-#ifdef CONFIG_BLK_DEV_INITRD
/*
- * This may be in any bank. Currently, we assume that
- * it is in bank 0.
+ * And don't forget to reserve the allocator bitmap,
+ * which will be freed later.
*/
- if (initrd_start)
- reserve_bootmem_node(0, V_PFN_DOWN(initrd_start) << PAGE_SHIFT,
- PFN_RANGE(initrd_start, initrd_end) << PAGE_SHIFT);
+ reserve_bootmem_node(0, bootmap_pfn << PAGE_SHIFT,
+ bootmap_pages << PAGE_SHIFT);
+}
+
+/*
+ * Register all available RAM in this node with the bootmem allocator.
+ */
+static inline void free_bootmem_node_bank(int node, struct meminfo *mi)
+{
+ int bank;
+
+ for (bank = 0; bank < mi->nr_banks; bank++)
+ if (mi->bank[bank].node == node)
+ free_bootmem_node(node, mi->bank[bank].start,
+ mi->bank[bank].size);
+}
+
+/*
+ * Initialise the bootmem allocator for all nodes. This is called
+ * early during the architecture specific initialisation.
+ */
+void __init bootmem_init(struct meminfo *mi)
+{
+ struct node_info node_info[NR_NODES], *np = node_info;
+ unsigned int bootmap_pages, bootmap_pfn, map_pg;
+ int node, initrd_node;
+
+ bootmap_pages = find_memend_and_nodes(mi, np);
+ bootmap_pfn = find_bootmap_pfn(0, mi, bootmap_pages);
+ initrd_node = check_initrd(mi);
+
+ map_pg = bootmap_pfn;
+
+ for (node = 0; node < numnodes; node++, np++) {
+ /*
+ * If there are no pages in this node, ignore it.
+ * Note that node 0 must always have some pages.
+ */
+ if (np->end == 0) {
+ if (node == 0)
+ BUG();
+ continue;
+ }
+
+ /*
+ * Initialise the bootmem allocator.
+ */
+ init_bootmem_node(node, map_pg, np->start, np->end);
+ free_bootmem_node_bank(node, mi);
+ map_pg += np->bootmap_pages;
+
+ /*
+ * If this is node 0, we need to reserve some areas ASAP -
+ * we may use bootmem on node 0 to setup the other nodes.
+ */
+ if (node == 0)
+ reserve_node_zero(bootmap_pfn, bootmap_pages);
+ }
+
+
+#ifdef CONFIG_BLK_DEV_INITRD
+ if (initrd_node >= 0)
+ reserve_bootmem_node(initrd_node, __pa(initrd_start),
+ initrd_end - initrd_start);
#endif
+
+ if (map_pg != bootmap_pfn + bootmap_pages)
+ BUG();
}
/*
- * paging_init() sets up the page tables...
+ * paging_init() sets up the page tables, initialises the zone memory
+ * maps, and sets up the zero page, bad page and bad page tables.
*/
void __init paging_init(struct meminfo *mi)
{
@@ -378,11 +506,23 @@
* The size of this node has already been determined.
* If we need to do anything fancy with the allocation
* of this memory to the zones, now is the time to do
- * it. For now, we don't touch zhole_size.
+ * it.
*/
zone_size[0] = bdata->node_low_pfn -
(bdata->node_boot_start >> PAGE_SHIFT);
+ /*
+ * For each bank in this node, calculate the size of the
+ * holes. holes = node_size - sum(bank_sizes_in_node)
+ */
+ zhole_size[0] = zone_size[0];
+ for (i = 0; i < mi->nr_banks; i++) {
+ if (mi->bank[i].node != node)
+ continue;
+
+ zhole_size[0] -= mi->bank[i].size >> PAGE_SHIFT;
+ }
+
free_area_init_node(node, pgdat, zone_size,
bdata->node_boot_start, zhole_size);
}
@@ -399,31 +539,6 @@
empty_bad_pte_table = ((pte_t *)bad_table) + TABLE_OFFSET;
}
-static inline void free_unused_mem_map(void)
-{
- struct page *page, *end;
-
- end = mem_map + max_mapnr;
-
- for (page = mem_map; page < end; page++) {
- unsigned long low, high;
-
- if (!PageSkip(page))
- continue;
-
- low = PAGE_ALIGN((unsigned long)(page + 1));
- if (page->next_hash < page)
- high = ((unsigned long)end) & PAGE_MASK;
- else
- high = ((unsigned long)page->next_hash) & PAGE_MASK;
-
- while (low < high) {
- ClearPageReserved(mem_map + MAP_NR(low));
- low += PAGE_SIZE;
- }
- }
-}
-
/*
* mem_init() marks the free areas in the mem_map and tells us how much
* memory is free. This is done after various parts of the system have
@@ -431,7 +546,6 @@
*/
void __init mem_init(void)
{
- extern char __init_begin, __init_end;
unsigned int codepages, datapages, initpages;
int i, node;
@@ -443,8 +557,7 @@
max_mapnr = MAP_NR(high_memory);
/*
- * We may have non-contiguous memory. Setup the PageSkip stuff,
- * and mark the areas of mem_map which can be freed
+ * We may have non-contiguous memory.
*/
if (meminfo.nr_banks != 1)
create_memmap_holes(&meminfo);
@@ -500,8 +613,6 @@
void free_initmem(void)
{
- extern char __init_begin, __init_end;
-
printk("Freeing unused kernel memory:");
free_area((unsigned long)(&__init_begin),
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/mm-armv.c linux/arch/arm/mm/mm-armv.c
--- v2.4.0-test1/linux/arch/arm/mm/mm-armv.c Wed Apr 26 16:34:06 2000
+++ linux/arch/arm/mm/mm-armv.c Mon Jun 19 17:59:34 2000
@@ -411,50 +411,41 @@
}
/*
- * The mem_map array can get very big. Mark the end of the valid mem_map
- * banks with PG_skip, and setup the address validity bitmap.
+ * The mem_map array can get very big. Free the unused area of the memory map.
*/
-void __init create_memmap_holes(struct meminfo *mi)
+static inline void free_unused_memmap_node(int node, struct meminfo *mi)
{
- unsigned int start_pfn, end_pfn = -1;
- struct page *pg = NULL;
+ unsigned long bank_start, prev_bank_end = 0;
unsigned int i;
-#define PFN(x) (((x) - PHYS_OFFSET) >> PAGE_SHIFT)
-#define free_bootmem(s,sz) free_bootmem(((s)<nr_banks; i++) {
- if (mi->bank[i].size == 0)
+ if (mi->bank[i].size == 0 || mi->bank[i].node != node)
continue;
- start_pfn = PFN(mi->bank[i].start);
+ bank_start = mi->bank[i].start & PAGE_MASK;
/*
- * subtle here - if we have a full bank, then
- * start_pfn == end_pfn, and we don't want to
- * set PG_skip, or next_hash
+ * If we had a previous bank, and there is a space
+ * between the current bank and the previous, free it.
*/
- if (pg && start_pfn != end_pfn) {
- set_bit(PG_skip, &pg->flags);
- pg->next_hash = mem_map + start_pfn;
-
- start_pfn = PFN(PAGE_ALIGN(__pa(pg + 1)));
- end_pfn = PFN(__pa(pg->next_hash) & PAGE_MASK);
-
- if (end_pfn != start_pfn)
- free_bootmem(start_pfn, end_pfn - start_pfn);
-
- pg = NULL;
- }
+ if (prev_bank_end && prev_bank_end != bank_start)
+ free_bootmem_node(node, prev_bank_end,
+ bank_start - prev_bank_end);
- end_pfn = PFN(mi->bank[i].start + mi->bank[i].size);
-
- if (end_pfn != PFN(mi->end))
- pg = mem_map + end_pfn;
+ prev_bank_end = PAGE_ALIGN(mi->bank[i].start +
+ mi->bank[i].size);
}
+}
- if (pg) {
- set_bit(PG_skip, &pg->flags);
- pg->next_hash = NULL;
- }
+void __init create_memmap_holes(struct meminfo *mi)
+{
+ int node;
+
+ for (node = 0; node < numnodes; node++)
+ free_unused_memmap_node(node, mi);
}
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/mm-footbridge.c linux/arch/arm/mm/mm-footbridge.c
--- v2.4.0-test1/linux/arch/arm/mm/mm-footbridge.c Mon Nov 1 13:56:26 1999
+++ linux/arch/arm/mm/mm-footbridge.c Mon Jun 19 17:59:34 2000
@@ -29,7 +29,7 @@
* You can then access the PCI bus at 0xe0000000 and 0xffe00000.
*/
-#ifdef CONFIG_HOST_FOOTBRIDGE
+#ifdef CONFIG_FOOTBRIDGE_HOST
/*
* The mapping when the footbridge is in host mode.
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/mm-l7200.c linux/arch/arm/mm/mm-l7200.c
--- v2.4.0-test1/linux/arch/arm/mm/mm-l7200.c Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mm/mm-l7200.c Mon Jun 19 17:59:34 2000
@@ -0,0 +1,25 @@
+/*
+ * arch/arm/mm/mm-lusl7200.c
+ *
+ * Extra MM routines for LUSL7200 architecture
+ *
+ * Copyright (C) 2000 Steven J. Hill
+ */
+
+#include
+
+#include
+#include
+#include
+#include
+
+#include "map.h"
+
+#define SIZE(x) (sizeof(x) / sizeof(x[0]))
+
+struct map_desc io_desc[] __initdata = {
+ { IO_BASE, IO_START, IO_SIZE, DOMAIN_IO, 0, 1 ,0 ,0},
+ { IO_BASE_2, IO_START_2, IO_SIZE_2, DOMAIN_IO, 0, 1 ,0 ,0},
+};
+
+unsigned int __initdata io_desc_size = SIZE(io_desc);
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/mm-sa1100.c linux/arch/arm/mm/mm-sa1100.c
--- v2.4.0-test1/linux/arch/arm/mm/mm-sa1100.c Fri May 12 14:18:55 2000
+++ linux/arch/arm/mm/mm-sa1100.c Mon Jun 19 17:59:34 2000
@@ -11,13 +11,14 @@
* Memory is listed physically now.
*
* 2000/04/07 Nicolas Pitre
- * Reworked for real-time selection of memory definitions
+ * Reworked for run-time selection of memory definitions
*
*/
#include
#include
#include
+#include
#include
#include
@@ -44,7 +45,9 @@
static struct map_desc assabet_io_desc[] __initdata = {
#ifdef CONFIG_SA1100_ASSABET
{ 0xd0000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0 */
+ { 0xd4000000, 0x10000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* System Registers */
{ 0xdc000000, 0x12000000, 0x00100000, DOMAIN_IO, 1, 1, 0, 0 }, /* Board Control Register */
+ { 0xd8000000, 0x40000000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* SA-1111 */
SA1100_STD_IO_MAPPING
#endif
};
@@ -140,4 +143,21 @@
io_desc_size = SIZE(default_io_desc);
}
}
+
+#ifdef CONFIG_DISCONTIGMEM
+
+/*
+ * Our node_data structure for discontigous memory.
+ * There is 4 possible nodes i.e. the 4 SA1100 RAM banks.
+ */
+
+static bootmem_data_t node_bootmem_data[4];
+
+pg_data_t sa1100_node_data[4] =
+{ { bdata: &node_bootmem_data[0] },
+ { bdata: &node_bootmem_data[1] },
+ { bdata: &node_bootmem_data[2] },
+ { bdata: &node_bootmem_data[3] } };
+
+#endif
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/proc-arm6,7.S linux/arch/arm/mm/proc-arm6,7.S
--- v2.4.0-test1/linux/arch/arm/mm/proc-arm6,7.S Fri May 12 14:18:55 2000
+++ linux/arch/arm/mm/proc-arm6,7.S Mon Jun 19 17:59:34 2000
@@ -93,37 +93,30 @@
* Purpose : obtain information about current aborted instruction
*
* Returns : r0 = address of abort
- * : r1 = FSR
- * : r2 != 0 if writing
+ * : r1 != 0 if writing
+ * : r3 = FSR
* : sp = pointer to registers
*/
-Lukabttxt: .ascii "Unknown data abort code %d [pc=%p, *pc=%p] LR=%p\0"
- .align
-
-msg: .ascii "DA*%p=%p\n\0"
- .align
-
ENTRY(cpu_arm6_data_abort)
ldr r4, [r0] @ read instruction causing problem
- mov r2, r4, lsr #19 @ r2 b1 = L
- and r1, r4, #14 << 24
- and r2, r2, #2 @ check read/write bit
- teq r1, #4 << 23
+ mov r1, r4, lsr #19 @ r1 b1 = L
+ and r2, r4, #14 << 24
+ and r1, r1, #2 @ check read/write bit
+ teq r2, #8 << 24 @ was it ldm/stm
bne Ldata_simple
-
Ldata_ldmstm: tst r4, #1 << 21 @ check writeback bit
beq Ldata_simple
mov r7, #0x11
orr r7, r7, r7, lsl #8
and r0, r4, r7
- and r1, r4, r7, lsl #1
- add r0, r0, r1, lsr #1
- and r1, r4, r7, lsl #2
- add r0, r0, r1, lsr #2
- and r1, r4, r7, lsl #3
- add r0, r0, r1, lsr #3
+ and r2, r4, r7, lsl #1
+ add r0, r0, r2, lsr #1
+ and r2, r4, r7, lsl #2
+ add r0, r0, r2, lsr #2
+ and r2, r4, r7, lsl #3
+ add r0, r0, r2, lsr #3
add r0, r0, r0, lsr #8
add r0, r0, r0, lsr #4
and r7, r0, #15 @ r7 = no. of registers to transfer.
@@ -134,16 +127,16 @@
addeq r7, r0, r7, lsl #2 @ Do correction (signed)
Ldata_saver7: str r7, [sp, r5, lsr #14] @ Put register
Ldata_simple: mrc p15, 0, r0, c6, c0, 0 @ get FAR
- mrc p15, 0, r1, c5, c0, 0 @ get FSR
- and r1, r1, #255
+ mrc p15, 0, r3, c5, c0, 0 @ get FSR
+ and r3, r3, #255
mov pc, lr
ENTRY(cpu_arm7_data_abort)
ldr r4, [r0] @ read instruction causing problem
- mov r2, r4, lsr #19 @ r2 b1 = L
- and r1, r4, #15 << 24
- and r2, r2, #2 @ check read/write bit
- add pc, pc, r1, lsr #22 @ Now branch to the relevent processing routine
+ mov r1, r4, lsr #19 @ r1 b1 = L
+ and r2, r4, #15 << 24
+ and r1, r1, #2 @ check read/write bit
+ add pc, pc, r2, lsr #22 @ Now branch to the relevent processing routine
movs pc, lr
b Ldata_unknown
@@ -162,7 +155,7 @@
b Ldata_simple @ ldc rd, [rn, #m]
b Ldata_unknown
Ldata_unknown: @ Part of jumptable
- mov r0, r1
+ mov r0, r2
mov r1, r4
mov r2, r3
b baddataabort
@@ -172,13 +165,13 @@
tst r4, #1 << 21 @ check writeback bit
beq Ldata_simple
Ldata_lateldrpostconst:
- movs r1, r4, lsl #20 @ Get offset
+ movs r2, r4, lsl #20 @ Get offset
beq Ldata_simple
and r5, r4, #15 << 16 @ Get Rn
ldr r0, [sp, r5, lsr #14]
tst r4, #1 << 23 @ U bit
- subne r7, r0, r1, lsr #20
- addeq r7, r0, r1, lsr #20
+ subne r7, r0, r2, lsr #20
+ addeq r7, r0, r2, lsr #20
b Ldata_saver7
Ldata_lateldrprereg:
@@ -186,7 +179,7 @@
beq Ldata_simple
Ldata_lateldrpostreg:
and r5, r4, #15
- ldr r1, [sp, r5, lsl #2] @ Get Rm
+ ldr r2, [sp, r5, lsl #2] @ Get Rm
mov r3, r4, lsr #7
ands r3, r3, #31
and r6, r4, #0x70
@@ -194,7 +187,7 @@
add pc, pc, r6
mov r0, r0
- mov r1, r1, lsl r3 @ 0: LSL #!0
+ mov r2, r2, lsl r3 @ 0: LSL #!0
b 1f
b 1f @ 1: LSL #0
mov r0, r0
@@ -202,25 +195,25 @@
mov r0, r0
b 1f @ 3: MUL?
mov r0, r0
- mov r1, r1, lsr r3 @ 4: LSR #!0
+ mov r2, r2, lsr r3 @ 4: LSR #!0
b 1f
- mov r1, r1, lsr #32 @ 5: LSR #32
+ mov r2, r2, lsr #32 @ 5: LSR #32
b 1f
b 1f @ 6: MUL?
mov r0, r0
b 1f @ 7: MUL?
mov r0, r0
- mov r1, r1, asr r3 @ 8: ASR #!0
+ mov r2, r2, asr r3 @ 8: ASR #!0
b 1f
- mov r1, r1, asr #32 @ 9: ASR #32
+ mov r2, r2, asr #32 @ 9: ASR #32
b 1f
b 1f @ A: MUL?
mov r0, r0
b 1f @ B: MUL?
mov r0, r0
- mov r1, r1, ror r3 @ C: ROR #!0
+ mov r2, r2, ror r3 @ C: ROR #!0
b 1f
- mov r1, r1, rrx @ D: RRX
+ mov r2, r2, rrx @ D: RRX
b 1f
mov r0, r0 @ E: MUL?
mov r0, r0
@@ -230,8 +223,8 @@
1: and r5, r4, #15 << 16 @ Get Rn
ldr r0, [sp, r5, lsr #14]
tst r4, #1 << 23 @ U bit
- subne r7, r0, r1
- addeq r7, r0, r1
+ subne r7, r0, r2
+ addeq r7, r0, r2
b Ldata_saver7
/*
@@ -254,7 +247,8 @@
ENTRY(cpu_arm6_proc_fin)
ENTRY(cpu_arm7_proc_fin)
- msr cpsr_c, #F_BIT | I_BIT | SVC_MODE
+ mov r0, #F_BIT | I_BIT | SVC_MODE
+ msr cpsr_c, r0
mov r0, #0x31 @ ....S..DP...M
mcr p15, 0, r0, c1, c0, 0 @ disable caches
mov pc, lr
@@ -364,7 +358,8 @@
.section ".text.init", #alloc, #execinstr
-__arm6_setup: msr cpsr_c, #F_BIT | I_BIT | SVC_MODE
+__arm6_setup: mov r0, #F_BIT | I_BIT | SVC_MODE
+ msr cpsr_c, r0
mov r0, #0
mcr p15, 0, r0, c7, c0 @ flush caches on v3
mcr p15, 0, r0, c5, c0 @ flush TLBs on v3
@@ -375,7 +370,8 @@
orr r0, r0, #0x100
mov pc, lr
-__arm7_setup: msr cpsr_c, #F_BIT | I_BIT | SVC_MODE
+__arm7_setup: mov r0, #F_BIT | I_BIT | SVC_MODE
+ msr cpsr_c, r0
mov r0, #0
mcr p15, 0, r0, c7, c0 @ flush caches on v3
mcr p15, 0, r0, c5, c0 @ flush TLBs on v3
diff -u --recursive --new-file v2.4.0-test1/linux/arch/arm/mm/proc-arm720.S linux/arch/arm/mm/proc-arm720.S
--- v2.4.0-test1/linux/arch/arm/mm/proc-arm720.S Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mm/proc-arm720.S Mon Jun 19 17:59:34 2000
@@ -0,0 +1,398 @@
+/*
+ * linux/arch/arm/mm/proc-arm720.S: MMU functions for ARM720
+ *
+ * Copyright (C) 2000 Steve Hill (sjhill@cotw.com)
+ * Rob Scott (rscott@mtrob.fdns.net)
+ *
+ * These are the low level assembler for performing cache and TLB
+ * functions on the ARM720T.
+ *
+ * Changelog:
+ * 05-09-2000 SJH Created by moving 720 specific functions
+ * out of 'proc-arm6,7.S' per RSK discussion
+ */
+#include
+#include
+#include
+#include
+#include "../lib/constants.h"
+
+/*
+ * Function: arm720_flush_cache_all (void)
+ * : arm720_flush_cache_page (unsigned long address, int size,
+ * int flags)
+ *
+ * Params : address Area start address
+ * : size size of area
+ * : flags b0 = I cache as well
+ *
+ * Purpose : Flush all cache lines
+ */
+ENTRY(cpu_arm720_flush_cache_all)
+ENTRY(cpu_arm720_flush_cache_area)
+ENTRY(cpu_arm720_flush_cache_entry)
+ENTRY(cpu_arm720_flush_icache_area)
+ENTRY(cpu_arm720_flush_icache_page)
+ENTRY(cpu_arm720_cache_wback_area)
+ENTRY(cpu_arm720_cache_purge_area)
+ mov r0, #0
+ mcr p15, 0, r0, c7, c7, 0 @ flush cache
+ mov pc, lr
+
+ENTRY(cpu_arm720_clean_cache_area)
+ENTRY(cpu_arm720_flush_ram_page)
+ mov pc, lr
+
+/*
+ * Function: arm720_flush_tlb_all (void)
+ *
+ * Purpose : flush all TLB entries in all caches
+ */
+ENTRY(cpu_arm720_flush_tlb_all)
+ mov r0, #0
+ mcr p15, 0, r0, c8, c7, 0 @ flush TLB (v4)
+ mov pc, lr
+
+/*
+ * Function: arm720_flush_tlb_page (unsigned long address, int end, int flags)
+ *
+ * Params : address Area start address
+ * : end Area end address
+ * : flags b0 = I cache as well
+ *
+ * Purpose : flush a TLB entry
+ */
+ENTRY(cpu_arm720_flush_tlb_area)
+1: mcr p15, 0, r0, c8, c7, 1 @ flush TLB (v4)
+ add r0, r0, #4096
+ cmp r0, r1
+ blt 1b
+ mov pc, lr
+
+/*
+ * Function: arm720_flush_tlb_page (unsigned long address, int flags)
+ *
+ * Params : address Address
+ * : flags b0 = I-TLB as well
+ *
+ * Purpose : flush a TLB entry
+ */
+ENTRY(cpu_arm720_flush_tlb_page)
+ mcr p15, 0, r0, c8, c7, 1 @ flush TLB (v4)
+ mov pc, lr
+
+/*
+ * Function: arm720_data_abort ()
+ *
+ * Params : r0 = address of aborted instruction
+ *
+ * Purpose : obtain information about current aborted instruction
+ *
+ * Returns : r0 = address of abort
+ * : r1 != 0 if writing
+ * : r3 = FSR
+ * : sp = pointer to registers
+ */
+
+Ldata_ldmstm: tst r4, #1 << 21 @ check writeback bit
+ beq Ldata_simple
+ mov r7, #0x11
+ orr r7, r7, r7, lsl #8
+ and r0, r4, r7
+ and r2, r4, r7, lsl #1
+ add r0, r0, r2, lsr #1
+ and r2, r4, r7, lsl #2
+ add r0, r0, r2, lsr #2
+ and r2, r4, r7, lsl #3
+ add r0, r0, r2, lsr #3
+ add r0, r0, r0, lsr #8
+ add r0, r0, r0, lsr #4
+ and r7, r0, #15 @ r7 = no. of registers to transfer.
+ and r5, r4, #15 << 16 @ Get Rn
+ ldr r0, [sp, r5, lsr #14] @ Get register
+ tst r4, #1 << 23 @ U bit
+ subne r7, r0, r7, lsl #2
+ addeq r7, r0, r7, lsl #2 @ Do correction (signed)
+Ldata_saver7: str r7, [sp, r5, lsr #14] @ Put register
+Ldata_simple: mrc p15, 0, r0, c6, c0, 0 @ get FAR
+ mrc p15, 0, r3, c5, c0, 0 @ get FSR
+ and r3, r3, #15
+ mov pc, lr
+
+ENTRY(cpu_arm720_data_abort)
+ ldr r4, [r0] @ read instruction causing problem
+ mov r1, r4, lsr #19 @ r1 b1 = L
+ and r2, r4, #15 << 24
+ and r1, r1, #2 @ check read/write bit
+ add pc, pc, r2, lsr #22 @ Now branch to the relevent processing routine
+ movs pc, lr
+
+ b Ldata_unknown
+ b Ldata_unknown
+ b Ldata_unknown
+ b Ldata_unknown
+ b Ldata_lateldrpostconst @ ldr rd, [rn], #m
+ b Ldata_lateldrpreconst @ ldr rd, [rn, #m] @ RegVal
+ b Ldata_lateldrpostreg @ ldr rd, [rn], rm
+ b Ldata_lateldrprereg @ ldr rd, [rn, rm]
+ b Ldata_ldmstm @ ldm*a rn,
+ b Ldata_ldmstm @ ldm*b rn,