diff -u --recursive --new-file v2.4.5/linux/CREDITS linux/CREDITS
--- v2.4.5/linux/CREDITS Tue May 22 19:54:04 2001
+++ linux/CREDITS Thu Jun 28 14:58:05 2001
@@ -454,6 +454,11 @@
E: xavyer@ix.netcom.com
D: USB Serial Empeg Empeg-car Mark I/II Driver
+N: Matthias Bruestle
+E: m@mbsks.franken.de
+D: REINER SCT cyberJack pinpad/e-com USB chipcard reader driver
+S: Germany
+
N: Ray Burr
E: ryb@nightmare.com
D: Original author of Amiga FFS filesystem
@@ -1136,13 +1141,11 @@
S: USA
N: Benjamin Herrenschmidt
-E: bh40@calva.net
+E: benh@kernel.crashing.org
E: benh@mipsys.com
-D: PowerMac booter (BootX)
-D: Additional PowerBook support
-D: Apple "Core99" machines support (ibook,g4,...)
-S: 22, rue des Marguettes
-S: 75012 Paris
+D: Various parts of PPC & PowerMac
+S: 122, boulevard Baille
+S: 13005 Marseille
S: France
N: Sebastian Hetze
@@ -1356,13 +1359,15 @@
E: davej@suse.de
W: http://www.suse.de/~davej
D: Moved PCI bridge tuning to userspace (Powertweak).
-D: Centaur/IDT Winchip/Winchip 2 tweaks.
+D: Various x86 (& clones) setup code hacking.
D: AFFS fixes for 2.3.x
-D: Misc clean ups and other random hacking.
-S: 28, Laura Street,
-S: Treforest, Pontypridd,
-S: Mid Glamorgan, CF37 1NW,
-S: Wales, United Kingdom
+D: Various Janitorial hacks. (kernel-janitor.sourceforge.net)
+S: c/o SuSE Linux UK Ltd
+S: The Kinetic Centre
+S: Theobald Street
+S: Borehamwood
+S: Herts, WD6 4PJ
+S: United Kingdom
N: Ani Joshi
E: ajoshi@shell.unixbox.com
@@ -1518,6 +1523,17 @@
S: L3R 8B2
S: Canada
+N: Maxim Krasnyansky
+E: maxk@qualcomm.com
+W: http://vtun.sf.net
+W: http://bluez.sf.net
+D: Author of the Universal TUN/TAP driver
+D: Author of the Linux Bluetooth Subsystem (BlueZ)
+D: Various other kernel patches, cleanups and fixes
+S: 2213 La Terrace Circle
+S: San Jose, CA 95123
+S: USA
+
N: Andreas S. Krebs
E: akrebs@altavista.net
D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
@@ -1742,6 +1758,8 @@
N: Paul Mackerras
E: paulus@samba.org
+D: PPP driver
+D: Linux for PowerPC
D: Linux port for PCI Power Macintosh
N: Pat Mackinlay
@@ -1975,6 +1993,13 @@
S: Richardson, Texas 75081
S: USA
+N: Patrick Mochel
+E: mochel@transmeta.com
+D: PCI Power Management, ACPI work
+S: 3940 Freedom Circle
+S: Santa Clara, CA 95054
+S: USA
+
N: Eberhard Moenkeberg
E: emoenke@gwdg.de
D: CDROM driver "sbpcd" (Matsushita/Panasonic/Soundblaster)
@@ -2697,9 +2722,7 @@
N: Marcelo W. Tosatti
E: marcelo@conectiva.com.br
W: http://bazar.conectiva.com.br/~marcelo/
-D: Miscellaneous kernel hacker
-D: Cyclom 2X driver, drbd hacker
-D: linuxconf apache & proftpd module maintainer
+D: Miscellaneous kernel hacker (mostly VM/MM work)
S: Conectiva S.A.
S: R. Tocantins, 89 - Cristo Rei
S: 80050-430 - Curitiba - Paraná
@@ -2883,6 +2906,14 @@
S: X/OS Experts in Open Systems BV
S: Kruislaan 419
S: 1098 VA Amsterdam
+S: The Netherlands
+
+N: Jeroen Vreeken
+E: pe1rxq@amsat.org
+W: http://www.chello.nl/~j.vreeken/
+D: SE401 usb webcam driver
+S: Maastrichterweg 63
+S: 5554 GG Valkenswaard
S: The Netherlands
N: Peter Shaobo Wang
diff -u --recursive --new-file v2.4.5/linux/Documentation/Changes linux/Documentation/Changes
--- v2.4.5/linux/Documentation/Changes Sat May 19 17:43:05 2001
+++ linux/Documentation/Changes Wed Jun 27 13:37:05 2001
@@ -320,7 +320,7 @@
LVM toolset
-----------
-o
+o
Pcmcia-cs
---------
@@ -347,7 +347,7 @@
PPP
---
-o
+o
Isdn4k-utils
------------
diff -u --recursive --new-file v2.4.5/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v2.4.5/linux/Documentation/Configure.help Thu May 24 15:03:06 2001
+++ linux/Documentation/Configure.help Mon Jul 2 14:07:55 2001
@@ -7537,6 +7537,40 @@
configure your card and that /etc/pcmcia/wireless.opts works :
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html
+Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards
+CONFIG_AIRO
+ This is the standard Linux driver to support Cisco/Aironet ISA
+ and PCI 802.11 wireless cards.
+ It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
+ - with or without encryption) as well as card before the Cisco
+ aquisition (Aironet 4500, Aironet 4800, Aironet 4800B).
+
+ This driver support both the standard Linux Wireless Extensions
+ and Cisco proprietary API, so both the Linux Wireless Tools and the
+ Cisco Linux utilities can be used to configure the card.
+
+ The driver can be compiled as a module and will be named "airo.o".
+
+Cisco/Aironet 34X/35X/4500/4800 PCMCIA cards
+CONFIG_AIRO_CS
+ This is the standard Linux driver to support Cisco/Aironet PCMCIA
+ 802.11 wireless cards. This driver is the same as the Aironet
+ driver part of the Linux Pcmcia package.
+ It supports the new 802.11b cards from Cisco (Cisco 34X, Cisco 35X
+ - with or without encryption) as well as card before the Cisco
+ aquisition (Aironet 4500, Aironet 4800, Aironet 4800B). It also
+ supports OEM of Cisco such as the DELL TrueMobile 4800 and Xircom
+ 802.11b cards.
+
+ This driver support both the standard Linux Wireless Extensions
+ and Cisco proprietary API, so both the Linux Wireless Tools and the
+ Cisco Linux utilities can be used to configure the card.
+
+ To use your PC-cards, you will need supporting software from David
+ Hinds' pcmcia-cs package (see the file Documentation/Changes for
+ location). You also want to check out the PCMCIA-HOWTO, available
+ from http://www.linuxdoc.org/docs.html#howto .
+
Aviator/Raytheon 2.4MHz wireless support
CONFIG_PCMCIA_RAYCS
Say Y here if you intend to attach an Aviator/Raytheon PCMCIA
@@ -9423,6 +9457,15 @@
module, say M here and read Documentation/modules.txt as well as
Documentation/networking/net-modules.txt.
+New Tulip bus configuration (EXPERIMENTAL)
+CONFIG_TULIP_MWI
+ This configures your Tulip card specifically for the card and
+ system cache line size type you are using.
+
+ This is experimental code, not yet tested on many boards.
+
+ If unsure, say N.
+
Digi Intl. RightSwitch support
CONFIG_DGRS
This is support for the Digi International RightSwitch series of
@@ -10182,91 +10225,150 @@
Memory Technology Device (MTD) support
CONFIG_MTD
Memory Technology Devices are flash, RAM and similar chips, often
- used for solid state file systems on embedded devices. This option
+ used for solid state filesystems on embedded devices. This option
will provide the generic support for MTD drivers to register
themselves with the kernel and for potential users of MTD devices
to enumerate the devices which are present and obtain a handle on
them. It will also allow you to select individual drivers for
- particular hardware and users of MTD device. If unsure, say N.
+ particular hardware and users of MTD devices. If unsure, say N.
MTD debugging support
CONFIG_MTD_DEBUG
This turns on low-level debugging for the entire MTD sub-system.
+ Normally, you should say 'N'.
+
+MTD partitioning support
+CONFIG_MTD_PARTITIONS
+ If you have a device which needs to divide its flash chip(s) up
+ into multiple 'partitions', each of which appears to the user as
+ a separate MTD device, you require this option to be enabled. If
+ unsure, say 'Y'.
+
+ Note, however, that you don't need this option for the DiskOnChip
+ devices. Partitioning on NFTL 'devices' is a different - that's the
+ 'normal' form of partitioning used on a block device.
+
+RedBoot partition table parsing
+CONFIG_MTD_REDBOOT_PARTS
+ RedBoot is a ROM monitor and bootloader which deals with multiple
+ 'images' in flash devices by putting a table in the last erase
+ block of the device, similar to a partition table, which gives
+ the offsets, lengths and names of all the images stored in the
+ flash.
+
+ If you need code which can detect and parse this table, and register
+ MTD 'partitions' corresponding to each image in the table, enable
+ this option.
+
+ You will still need the parsing functions to be called by the driver
+ for your particular device. It won't happen automatically. The
+ SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
+ example.
+
+Compaq bootldr partition table parsing
+CONFIG_MTD_BOOTLDR_PARTS
+ The Compaq bootldr deals with multiple 'images' in flash devices
+ by putting a table in one of the first erase blocks of the device,
+ similar to a partition table, which gives the offsets, lengths and
+ names of all the images stored in the flash.
+
+ If you need code which can detect and parse this table, and register
+ MTD 'partitions' corresponding to each image in the table, enable
+ this option.
+
+ You will still need the parsing functions to be called by the driver
+ for your particular device. It won't happen automatically. The
+ SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
+ example.
+
+ARM Firmware Suite flash layout / partition parsing
+CONFIG_MTD_AFS_PARTS
+ The ARM Firmware Suite allows the user to divide flash devices into
+ multiple 'images'. Each such image has a header containing its name
+ and offset/size etc.
+
+ If you need code which can detect and parse these tables, and register
+ MTD 'partitions' corresponding to each image detected, enable
+ this option.
+
+ You will still need the parsing functions to be called by the driver
+ for your particular device. It won't happen automatically. The
+ 'armflash' map driver (CONFIG_MTD_ARMFLASH) does this, for example.
MTD debugging verbosity
CONFIG_MTD_DEBUG_VERBOSE
Determines the verbosity level of the MTD debugging messages.
-M-Systems Disk-On-Chip 1000 support
-CONFIG_MTD_DOC1000
- This provides an MTD device driver for the M-Systems DiskOnChip
- 1000 devices, which are obsolete so you probably want to say 'N'.
-M-Systems Disk-On-Chip 2000 and Millennium support
-CONFIG_MTD_DOC2000
- This provides an MTD device driver for the M-Systems DiskOnChip
- 2000 and Millennium devices. Originally designed for the DiskOnChip
- 2000, it also now includes support for the DiskOnChip Millennium.
- If you have problems with this driver and the DiskOnChip Millennium,
- you may wish to try the alternative Millennium driver below. To use
- the alternative driver, you will need to undefine DOC_SINGLE_DRIVER
- in the drivers/mtd/docprobe.c source code.
+Direct chardevice access to MTD devices
+CONFIG_MTD_CHAR
+ This provides a character device for each MTD device present in
+ the system, allowing the user to read and write directly to the
+ memory chips, and also use ioctl() to obtain information about
+ the device, or to erase parts of it.
- If you use this device, you probably also want to enable the NFTL
- 'NAND Flash Translation Layer' option below, which is used to emulate
- a block device by using a kind of filesystem on the flash chips.
+Caching block device access to MTD devices
+CONFIG_MTD_BLOCK
+ Although most flash chips have an erase size too large to be useful
+ as block devices, it is possible to use MTD devices which are based
+ on RAM chips in this manner. This block device is a user of MTD devices
+ performing that function.
+
+ At the moment, it is also required for the Journalling Flash File
+ System(s) to obtain a handle on the MTD device when it's mounted
+ (although JFFS and JFFS2 don't actually use any of the functionality
+ of the mtdblock device).
-Alternative Disk-On-Chip Millennium support
-CONFIG_MTD_DOC2001
- This provides an alternative MTD device driver for the M-Systems
- DiskOnChip Millennium devices. Use this if you have problems with
- the combined DiskOnChip 2000 and Millennium driver above. To get
- the DiskOnChip probe code to load and use this driver instead of
- the other one, you will need to undefine DOC_SINGLE_DRIVER near
- the beginning of drivers/mtd/docprobe.c
+ Later, it may be extended to perform read/erase/modify/write cycles
+ on flash chips to emulate a smaller block size. Needless to say,
+ this is very unsafe, but could be useful for filesystems which are
+ almost never written to.
- If you use this device, you probably also want to enable the NFTL
- 'NAND Flash Translation Layer' option below, which is used to emulate
- a block device by using a kind of filesystem on the flash chips.
+ You do not need this option for use with the DiskOnChip devices. For
+ those, enable NFTL support (CONFIG_NFTL) instead.
-Ramix PMC551 PCI Mezzanine ram card support
-CONFIG_MTD_PMC551
- This provides a MTD device driver for the Ramix PMC551 RAM PCI card
- from Ramix Inc. (http://www.ramix.com/products/memory/pmc551.html).
- These devices come in memory configurations from 32M - 1G. If you
- have one, you probably want to enable this.
+Readonly block device access to MTD devices
+CONFIG_MTD_BLOCK_RO
+ This allows you to mount read-only filesystems (such as cramfs) from
+ an MTD device, without the overhead (and danger) of the caching
+ driver.
- If this driver is compiled as a module you get the ability to select the
- size of the aperture window pointing into the devices memory. What this
- means is that if you have a 1G card, normally the kernel will use a 1G
- memory map as it's view of the device. As a module, you can select a
- 1M window into the memory and the driver will "slide" the window around
- the PMC551's memory. This was particularly useful on the 2.2 kernels
- on PPC architectures as there was limited kernel space to deal with.
+ You do not need this option for use with the DiskOnChip devices. For
+ those, enable NFTL support (CONFIG_NFTL) instead.
-Use extra onboard system memory as MTD device
-CONFIG_MTD_SLRAM
- If your CPU cannot cache all of the physical memory in your machine,
- you can still use it for storage or swap by using this driver to
- present it to the system as a Memory Technology Device.
+FTL (Flash Translation Layer) support
+CONFIG_FTL
+ This provides support for the original Flash Translation Layer which
+ is part of the PCMCIA specification. It uses a kind of pseudo-
+ filesystem on a flash device to emulate a block device with 512-byte
+ sectors, on top of which you put a 'normal' filesystem.
-PMC551 256M DRAM Bugfix
-CONFIG_MTD_PMC551_BUGFIX
- Some of Ramix's PMC551 boards with 256M configurations have invalid
- column and row mux values. This option will fix them, but will break
- other memory configurations. If unsure say N.
+ You may find that the algorithms used in this code are patented
+ unless you live in the Free World where software patents aren't
+ legal - in the USA you are only permitted to use this on PCMCIA
+ hardware, although under the terms of the GPL you're obviously
+ permitted to copy, modify and distribute the code as you wish. Just
+ not use it.
-PMC551 Debugging
-CONFIG_MTD_PMC551_DEBUG
- This option makes the PMC551 more verbose during it's operation and is
- only really useful if you are developing on this driver or suspect a
- possible hardware or driver bug. If unsure say N.
+NFTL (NAND Flash Translation Layer) support
+CONFIG_NFTL
+ This provides support for the NAND Flash Translation Layer which is
+ used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
+ filesystem on a flash device to emulate a block device with 512-byte
+ sectors, on top of which you put a 'normal' filesystem.
-Debugging RAM test driver
-CONFIG_MTD_MTDRAM
- This enables a test MTD device driver which uses vmalloc() to
- provide storage. You probably want to say 'N' unless you're
- testing stuff.
+ You may find that the algorithms used in this code are patented
+ unless you live in the Free World where software patents aren't
+ legal - in the USA you are only permitted to use this on DiskOnChip
+ hardware, although under the terms of the GPL you're obviously
+ permitted to copy, modify and distribute the code as you wish. Just
+ not use it.
+
+Write support for NFTL (EXPERIMENTAL)
+CONFIG_NFTL_RW
+ If you're lucky, this will actually work. Don't whinge if it doesn't.
+ Send mail to the MTD mailing list if
+ you want to help to make it more reliable.
Common Flash Interface (CFI) support
CONFIG_MTD_CFI
@@ -10277,12 +10379,135 @@
option. Visit (http://www.amd.com/products/nvd/overview/cfi.html)
for more information on CFI.
-CFI support for Intel/Sharp Extended Command Set chips
+CFI Advanced configuration options
+CONFIG_MTD_CFI_ADV_OPTIONS
+ If you need to specify a specific endianness for access to flash
+ chips, or if you wish to reduce the size of the kernel by including
+ support for only specific arrangements of flash chips, say 'Y'. This
+ option does not directly affect the code, but will enable other
+ configuration options which allow you to do so.
+
+ If unsure, say 'N'.
+
+Specific CFI Flash geometry selection
+CONFIG_MTD_CFI_GEOMETRY
+ This option does not affect the code directly, but will enable
+ some other configuration options which would allow you to reduce
+ the size of the kernel by including support for only certain
+ arrangements of CFI chips. If unsure, say 'N' and all options
+ which are supported by the current code will be enabled.
+
+Support 8-bit buswidth
+CONFIG_MTD_CFI_B1
+ If you wish to support CFI devices on a physical bus which is
+ 8 bits wide, say 'Y'.
+
+Support 16-bit buswidth
+CONFIG_MTD_CFI_B2
+ If you wish to support CFI devices on a physical bus which is
+ 16 bits wide, say 'Y'.
+
+Support 32-bit buswidth
+CONFIG_MTD_CFI_B4
+ If you wish to support CFI devices on a physical bus which is
+ 32 bits wide, say 'Y'.
+
+Support 1-chip flash interleave
+CONFIG_MTD_CFI_I1
+ If your flash chips are not interleaved - i.e. you only have one
+ flash chip addressed by each bus cycle, then say 'Y'.
+
+Support 2-chip flash interleave
+CONFIG_MTD_CFI_I2
+ If your flash chips are interleaved in pairs - i.e. you have two
+ flash chips addressed by each bus cycle, then say 'Y'.
+
+Support 4-chip flash interleave
+CONFIG_MTD_CFI_I4
+ If your flash chips are interleaved in fours - i.e. you have four
+ flash chips addressed by each bus cycle, then say 'Y'.
+
+Flash cmd/query data swapping
+CONFIG_MTD_CFI_NOSWAP
+ This option defines the way in which the CPU attempts to arrange
+ data bits when writing the 'magic' commands to the chips. Saying
+ 'NO', which is the default when CONFIG_MTD_CFI_ADV_OPTIONS isn't
+ enabled, means that the CPU will not do any swapping; the chips
+ are expected to be wired to the CPU in 'host-endian' form.
+ Specific arrangements are possible with the BIG_ENDIAN_BYTE and
+ LITTLE_ENDIAN_BYTE, if the bytes are reversed.
+
+ If you have a LART, on which the data (and address) lines were
+ connected in a fashion which ensured that the nets were as short
+ as possible, resulting in a bit-shuffling which seems utterly
+ random to the untrained eye, you need the LART_ENDIAN_BYTE option.
+
+ Yes, there really exists something sicker than PDP-endian :)
+
+CFI support for Intel/Sharp Extended Commands
CONFIG_MTD_CFI_INTELEXT
The Common Flash Interface defines a number of different command
sets which a CFI-compliant chip may claim to implement. This code
provides support for one of those command sets, used on Intel
- Strataflash and other parts.
+ StrataFlash and other parts.
+
+CFI support for AMD/Fujitsu Standard Commands
+CONFIG_MTD_CFI_AMDSTD
+ The Common Flash Interface defines a number of different command
+ sets which a CFI-compliant chip may claim to implement. This code
+ provides support for one of those command sets, used on chips
+ chips including the AMD Am29LV320.
+
+CFI support for Intel/Sharp Standard Commands
+CONFIG_MTD_CFI_INTELSTD
+ The Common Flash Interface defines a number of different command
+ sets which a CFI-compliant chip may claim to implement. This code
+ provides support for one of those command sets.
+
+pre-CFI Sharp chip support
+CONFIG_MTD_SHARP
+ This option enables support for flash chips using Sharp-compatible
+ commands, including some which are not CFI-compatible and hence
+ cannot be used with the CONFIG_MTD_CFI_INTELxxx options.
+
+AMD compatible flash chip support (non-CFI)
+CONFIG_MTD_AMDSTD
+ This option enables support for flash chips using AMD-compatible
+ commands, including some which are not CFI-compatible and hence
+ cannot be used with the CONFIG_MTD_CFI_AMDSTD option.
+
+ It also works on AMD compatible chips that do conform to CFI.
+
+Support for RAM chips in bus mapping
+CONFIG_MTD_RAM
+ This option enables basic support for RAM chips accessed through
+ a bus mapping driver.
+
+Support for ROM chips in bus mapping
+CONFIG_MTD_ROM
+ This option enables basic support for ROM chips accessed through
+ a bus mapping driver.
+
+CONFIG_MTD_JEDEC
+ Enable older older JEDEC flash interface devices for self programming
+ flash. It is commonly used in older AMD chips. It is only called
+ JEDEC because the JEDEC association (http://www.jedec.org/)
+ distributes the identification codes for the chips. WARNING!!!! This
+ code does not compile and is incomplete as are the specific JEDEC
+ devices drivers.
+
+CFI Flash device mapped on StrongARM SA11x0
+CONFIG_MTD_SA1100
+ This enables access to the flash chips on most platforms based on the
+ SA1100 and SA1110, including the Assabet and the Compaq iPAQ. If you
+ have such a board, say 'Y'.
+
+CONFIG_MTD_SA1100_REDBOOT_PARTITIONS
+ Enabling this option will cause the kernel to look for a RedBoot
+ FIS (Flash Image System) table in the last erase block of the flash
+ chips detected. If you are using RedBoot on your SA11x0-based board
+ and want Linux to present 'partitions' matching the images which
+ RedBoot has listed, say 'Y'.
Flash chip mapping in physical memory
CONFIG_MTD_PHYSMAP
@@ -10295,18 +10520,18 @@
Physical start location of flash chip mapping
CONFIG_MTD_PHYSMAP_START
This is the physical memory location at which the flash chips
- are mapped on your particular target board. Refer to the
+ are mapped on your particular target board. Refer to the
memory map which should hopefully be in the documentation for
your board.
Physical length of flash chip mapping
CONFIG_MTD_PHYSMAP_LEN
This is the total length of the mapping of the flash chips on
- your particular board. If there is space, or aliases, in the
+ your particular board. If there is space, or aliases, in the
physical memory map between the chips, this could be larger
than the total amount of flash present. Refer to the memory
map which should hopefully be in the documentation for your
- board.
+ board.
CONFIG_MTD_PHYSMAP_BUSWIDTH
This is the total width of the data bus of the flash devices
@@ -10314,14 +10539,12 @@
bits, you would set the bus width octect value to 4. This is
used internally by the CFI drivers.
-Flash chip mapping on Mixcom piggyback card
-CONFIG_MTD_MIXMEM
- This supports the paging arrangement for access to flash chips
- on the MixCOM piggyback card, allowing the flash chip drivers
- to get on with their job of driving the flash chips without
- having to know about the paging. If you have one of these boards,
- you probably want to enable this mapping driver. More info is at
- (http://www.itc.hu/).
+Flash chip mapping on Sun Microsystems boardsets
+CONFIG_MTD_SUN_UFLASH
+ This provides a 'mapping' driver which supports the way in
+ which user-programmable flash chips are connected on various
+ Sun Microsystems boardsets. This driver will require CFI support
+ in the kernel, so if you did not enable CFI previously, do that now.
Flash chip mapping on Nora
CONFIG_MTD_NORA
@@ -10332,13 +10555,6 @@
PNC-2000 is the name of Network Camera product from PHOTRON
Ltd. in Japan. It uses CFI-compliant flash.
-Flash chip mapping on Octagon 5066 SBC
-CONFIG_MTD_OCTAGON
- This provides a 'mapping' driver which supports the way in which
- the flash chips are connected in the Octagon-5066 Single Board
- Computer. More information on the board is available at
- (http://www.octagonsystems.com/Products/5066/5066.html).
-
Flash chip mapping on RPXlite PPC board
CONFIG_MTD_RPXLITE
The RPXLite PowerPC board has CFI-compliant chips mapped in
@@ -10347,6 +10563,89 @@
to communicate with the chips on the RPXLite board. More at
(http://www.embeddedplanet.com/rpx_lite_specification_sheet.htm).
+Flash chip mapping on AMD SC520 CDP board
+CONFIG_MTD_SC520CDP
+ The SC520 CDP board has two banks of CFI-compliant chips and one
+ Dual-in-line JEDEC chip. This 'mapping' driver supports that
+ arrangement, implementing three MTD devices.
+
+Flash chip mapping on Arcom Control Systems' SBC-MediaGX
+CONFIG_MTD_SBC_MEDIAGX
+ This provides a driver for the on-board flash of Arcom Control
+ Systems' SBC-MediaGX development board. By default the flash
+ is split into 3 partitions which are accessed as separate MTD
+ devices. This board utilizes Intel StrataFlash. More info at
+ (http://www.arcomcontrols.com/products/icp/pc104/processors/).
+
+Flash chip mapping on Arcom Control Systems' ELAN-104NC
+CONFIG_MTD_ELAN_104NC
+ This provides a driver for the on-board flash of the Arcom Control
+ System's ELAN-104NC development board. By default the flash
+ is split into 3 partitions which are accessed as separate MTD
+ devices. This board utilizes Intel StrataFlash. More info at
+ (http://www.arcomcontrols.com/products/icp/pc104/processors/).
+
+Flash chip mapping on Compaq iPAQ/Bitsy
+CONFIG_MTD_BITSY
+ This provides a driver for the on-board flash found in Compaq's
+ iPAQ Palm PC and their research prototype the Itsy. iPAQ info at
+ (http://www5.compaq.com/products/handhelds/pocketpc/) and the
+ Itsy (http://www.research.digital.com/wrl/projects/Itsy/index.html).
+
+Flash chip mapping on Compaq iPAQ/Bitsy
+CONFIG_MTD_DC21285
+ This provides a driver for the flash accessed using Intel's
+ 21285 bridge used with Intel's StrongARM processors. More info at
+ (http://developer.intel.com/design/bridge/quicklist/dsc-21285.htm).
+
+Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board
+CONFIG_MTD_CSTM_MIPS_IXX
+ This provides a mapping driver for the Integrated Tecnology
+ Express, Inc (ITE) QED-4N-S01B eval board and the Globespan IVR Reference
+ Board. It provides the necessary addressing, length, buswidth, vpp code
+ and addition setup of the flash device for these boards. In addition,
+ this mapping driver can be used for other boards via setting of the
+ CONFIG_MTD_CSTM_MIPS_IXX_START/LEN/BUSWIDTH parameters. This mapping
+ will provide one mtd device using one partition. The start address can
+ be offset from the beginning of flash and the len can be less than the
+ total flash device size to allow a window into the flash. Both CFI and
+ JEDEC probes are called.
+
+Physical start location of flash mapping
+CONFIG_MTD_CSTM_MIPS_IXX_START
+ This is the physical memory location that the MTD driver will
+ use for the flash chips on your particular target board.
+ Refer to the memory map which should hopefully be in the
+ documentation for your board.
+
+Physical length of flash mapping
+CONFIG_MTD_CSTM_MIPS_IXX_LEN
+ This is the total length that the MTD driver will use for the
+ flash chips on your particular board. Refer to the memory
+ map which should hopefully be in the documentation for your
+ board.
+
+Physical bus width of flash mapping
+CONFIG_MTD_CSTM_MIPS_IXX_BUSWIDTH
+ This is the total bus width of the mapping of the flash chips
+ on your particular board.
+
+Flash chip mapping on Mixcom piggyback card
+CONFIG_MTD_MIXMEM
+ This supports the paging arrangement for access to flash chips
+ on the MixCOM piggyback card, allowing the flash chip drivers
+ to get on with their job of driving the flash chips without
+ having to know about the paging. If you have one of these boards,
+ you probably want to enable this mapping driver. More info is at
+ (http://www.itc.hu/).
+
+Flash chip mapping on Octagon 5066 SBC
+CONFIG_MTD_OCTAGON
+ This provides a 'mapping' driver which supports the way in which
+ the flash chips are connected in the Octagon-5066 Single Board
+ Computer. More information on the board is available at
+ (http://www.octagonsystems.com/Products/5066/5066.html).
+
Flash chip mapping on Tempustech VMAX SBC301
CONFIG_MTD_VMAX
This provides a 'mapping' driver which supports the way in which
@@ -10354,57 +10653,168 @@
Board Computer. More information on the board is available at
(http://www.tempustech.com/tt301.htm).
-Direct chardevice access to MTD devices
-CONFIG_MTD_CHAR
- This provides a character device for each MTD device present in
- the system, allowing the user to read and write directly to the
- memory chips, and also use ioctl() to obtain information about
- the device, or to erase parts of it.
+Support for NAND flash devices
+CONFIG_MTD_NAND
+ This enables support for accessing all type of NAND flash
+ devices.
+
+Support for software ECC algorithm
+CONFIG_MTD_NAND_ECC
+ This enables software-based ECC for use with NAND flash chips. It
+ can detect and correct 1 bit errors per 256 byte blocks. This
+ should be used to increase the reliability of the data stored and
+ read on the device.
+
+Support for verify read after write
+CONFIG_MTD_NAND_VERIFY_WRITE
+ This adds an extra check when data is written to the flash. The
+ NAND flash device internally checks only bits transitioning
+ from 1 to 0. There is a rare possibility that even though the
+ device thinks the write was successful, a bit could have been
+ flipped accidentaly due to device wear, gamma rays, whatever.
+ Enable this if you are really paranoid.
-Pseudo-blockdevice access to MTD devices
-CONFIG_MTD_BLOCK
- Although flash chips have an erase size too large to useful as
- block devices, it is possible to use MTD devices which are based
- on RAM chips in this manner. This blockdevice user of MTD devices
- performs that function. At the moment, it is also required for
- the Journalling Flash File System to obtain a handle on the MTD
- device when it's mounted - although the JFFS doesn't actually use
- any of the functions of the mtdblock device.
+Support for the SPIA board
+CONFIG_MTD_NAND_SPIA
+ If you had to ask, you don't have one. Say 'N'.
- Later, it may be extended to perform read/erase/modify/write cycles
- on flash chips to emulate a smaller block size. Needless to say,
- this is very unsafe, but could be useful for file systems which are
- almost never written to.
+M-Systems Disk-On-Chip 1000 support
+CONFIG_MTD_DOC1000
+ This provides an MTD device driver for the M-Systems DiskOnChip
+ 1000 devices, which are obsolete so you probably want to say 'N'.
-FTL (Flash Translation Layer) support
-CONFIG_FTL
- This provides support for the original Flash Translation Layer which
- is part of the PCMCIA specification. It uses a kind of pseudo-
- file system on a flash device to emulate a block device with 512-byte
- sectors, on top of which you put a 'normal' file system. You may find
- that the algorithms used in this code are patented unless you live
- in the Free World where software patents aren't legal - in the USA
- you are only permitted to use this on PCMCIA hardware, although
- under the terms of the GPL you're obviously permitted to copy,
- modify and distribute the code as you wish. Just not use it.
+M-Systems Disk-On-Chip 2000 and Millennium support
+CONFIG_MTD_DOC2000
+ This provides an MTD device driver for the M-Systems DiskOnChip
+ 2000 and Millennium devices. Originally designed for the DiskOnChip
+ 2000, it also now includes support for the DiskOnChip Millennium.
+ If you have problems with this driver and the DiskOnChip Millennium,
+ you may wish to try the alternative Millennium driver below. To use
+ the alternative driver, you will need to undefine DOC_SINGLE_DRIVER
+ in the drivers/mtd/devices/docprobe.c source code.
-NFTL (NAND Flash Translation Layer) support
-CONFIG_NFTL
- This provides support for the NAND Flash Translation Layer which is
- used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
- file system on a flash device to emulate a block device with 512-byte
- sectors, on top of which you put a 'normal' file system. You may find
- that the algorithms used in this code are patented unless you live
- in the Free World where software patents aren't legal - in the USA
- you are only permitted to use this on DiskOnChip hardware, although
- under the terms of the GPL you're obviously permitted to copy,
- modify and distribute the code as you wish. Just not use it.
+ If you use this device, you probably also want to enable the NFTL
+ 'NAND Flash Translation Layer' option below, which is used to emulate
+ a block device by using a kind of filesystem on the flash chips.
-Write support for NFTL (EXPERIMENTAL)
-CONFIG_NFTL_RW
- If you're lucky, this will actually work. Don't whine if it doesn't.
- Contact (dwmw2@infradead.org) if you want to help to make it more
- reliable.
+Alternative Disk-On-Chip Millennium support
+CONFIG_MTD_DOC2001
+ This provides an alternative MTD device driver for the M-Systems
+ DiskOnChip Millennium devices. Use this if you have problems with
+ the combined DiskOnChip 2000 and Millennium driver above. To get
+ the DiskOnChip probe code to load and use this driver instead of
+ the other one, you will need to undefine DOC_SINGLE_DRIVER near
+ the beginning of drivers/mtd/devices/docprobe.c
+
+ If you use this device, you probably also want to enable the NFTL
+ 'NAND Flash Translation Layer' option below, which is used to emulate
+ a block device by using a kind of filesystem on the flash chips.
+
+Probe for DiskOnChip devices
+CONFIG_MTD_DOCPROBE
+ This isn't a real config option, it's derived.
+
+Advanced detection options for DiskOnChip
+CONFIG_MTD_DOCPROBE_ADVANCED
+ This option allows you to specify nonstandard address at which to
+ probe for a DiskOnChip, or to change the detection options. You're
+ unlikely to need any of this unless you're using LinuxBIOS. Say 'N'.
+
+Probe for 0x55 0xAA BIOS Extension Signature.
+CONFIG_MTD_DOCPROBE_55AA
+ Check for the 0x55 0xAA signature of a DiskOnChip, and do not continue
+ with probing if it is absent. The signature will always be present for
+ a DiskOnChip 2000 or a normal DiskOnChip Millennium. Only if you have
+ overwritten the first block of a DiskOnChip Millennium will it be
+ absent. Enable this option if you are using LinuxBIOS or if you need
+ to recover a DiskOnChip Millennium on which you have managed to wipe
+ the first block.
+
+Physical address of DiskOnChip
+CONFIG_MTD_DOCPROBE_ADDRESS
+ By default, the probe for DiskOnChip devices will look for a DiskOnChip
+ at every multiple of 0x2000 between 0xC8000 and 0xEE000. This option
+ allows you to specify a single address at which to probe for the device,
+ which is useful if you have other devices in that range which get upset
+ when they're probed.
+
+ (Note that on PowerPC, the normal probe will only check at 0xE4000000.)
+
+ Normally, you should leave this set to zero, to allow the probe at the
+ normal addresses.
+
+Probe high addresses
+CONFIG_MTD_DOCPROBE_HIGH
+ By default, the probe for DiskOnChip devices will look for a DiskOnChip
+ at every multiple of 0x2000 between 0xC8000 and 0xEE000. This option
+ changes to make it probe between 0xFFFC8000 and 0xFFFEE000. Unless
+ you're using LinuxBIOS, this is unlikely to be useful to you. Say 'N'.
+
+Ramix PMC551 PCI Mezzanine ram card support
+CONFIG_MTD_PMC551
+ This provides a MTD device driver for the Ramix PMC551 RAM PCI card
+ from Ramix Inc. (http://www.ramix.com/products/memory/pmc551.html).
+ These devices come in memory configurations from 32M - 1G. If you
+ have one, you probably want to enable this.
+
+ If this driver is compiled as a module you get the ability to select the
+ size of the aperture window pointing into the devices memory. What this
+ means is that if you have a 1G card, normally the kernel will use a 1G
+ memory map as it's view of the device. As a module, you can select a
+ 1M window into the memory and the driver will "slide" the window around
+ the PMC551's memory. This was particularly useful on the 2.2 kernels
+ on PPC architectures as there was limited kernel space to deal with.
+
+PMC551 256M DRAM Bugfix
+CONFIG_MTD_PMC551_BUGFIX
+ Some of Ramix's PMC551 boards with 256M configurations have invalid column
+ and row mux values. This option will fix them, but will break other memory
+ configurations. If unsure say N.
+
+PMC551 Debugging
+CONFIG_MTD_PMC551_DEBUG
+ This option makes the PMC551 more verbose during it's operation and is only
+ really usefull if you are developing on this driver or suspect a possible
+ hardware or driver bug. If unsure say N.
+
+Use extra onboard system memory as MTD device
+CONFIG_MTD_SLRAM
+ If your CPU cannot cache all of the physical memory in your machine,
+ you can still use it for storage or swap by using this driver to
+ present it to the system as a Memory Technology Device.
+
+Debugging RAM test driver
+CONFIG_MTD_MTDRAM
+ This enables a test MTD device driver which uses vmalloc() to
+ provide storage. You probably want to say 'N' unless you're
+ testing stuff.
+
+MTDRAM erase block size in KiB
+CONFIG_MTDRAM_ERASE_SIZE
+ This allows you to configure the size of the erase blocks in the
+ device emulated by the MTDRAM driver. If the MTDRAM driver is built
+ as a module, it is also possible to specify this as a parameter when
+ loading the module.
+
+MTDRAM device size in KiB
+CONFIG_MTDRAM_TOTAL_SIZE
+ This allows you to configure the total size of the MTD device
+ emulated by the MTDRAM driver. If the MTDRAM driver is built
+ as a module, it is also possible to specify this as a parameter when
+ loading the module.
+
+SRAM absolute position
+CONFIG_MTDRAM_ABS_POS
+ If you have system RAM accessible by the CPU but not used by Linux
+ in normal operation, you can give the physical address at which the
+ available RAM starts, and the MTDRAM driver will use it instead of
+ allocating space from Linux's available memory. Otherwise, leave
+ this set to zero. Most people will want to leave this as zero.
+
+Flash chip mapping on the Flaga Digital Module
+CONFIG_MTD_CFI_FLAGADM
+ Mapping for the Flaga digital module. If you don´t have one, ignore this
+ setting.
Support for USB
CONFIG_USB
@@ -10709,9 +11119,10 @@
USB Handspring Visor Driver
CONFIG_USB_SERIAL_VISOR
- Say Y here if you want to connect to your HandSpring Visor through
- its USB docking station. See http://usbvisor.sourceforge.net for
- more information on using this driver.
+ Say Y here if you want to connect to your HandSpring Visor, Palm m500
+ or m505 through its USB docking station.
+ See http://usbvisor.sourceforge.net for more information on using this
+ driver.
This code is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
@@ -10841,6 +11252,29 @@
The module will be called mct_u232.o. If you want to compile it as
a module, say M here and read Documentation/modules.txt.
+USB Prolific 2303 Single Port Serial Driver
+CONFIG_USB_SERIAL_PL2303
+ Say Y here if you want to use the PL2303 USB Serial single port
+ adapter from Prolific.
+
+ This code is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called pl2303.o. If you want to compile it as
+ a module, say M here and read Documentation/modules.txt.
+
+USB REINER SCT cyberJack pinpad/e-com chipcard reader
+CONFIG_USB_SERIAL_CYBERJACK
+ Say Y here if you want to use a cyberJack pinpad/e-com USB chipcard
+ reader. This is an interface to ISO 7816 compatible contactbased
+ chipcards, e.g. GSM SIMs.
+
+ This code is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called cyberjack.o. If you want to compile it as
+ a module, say M here and read Documentation/modules.txt.
+
+ If unsure, say N.
+
USB Edgeport Serial Driver
CONFIG_USB_SERIAL_EDGEPORT
Say Y here if you want to use any of the following devices from
@@ -10946,6 +11380,22 @@
module, say M here and read Documentation/modules.txt.
+USB SE401 Camera support
+CONFIG_USB_SE401
+ Say Y here if you want to connect this type of camera to your
+ computer's USB port. See Documentation/usb/se401.txt for more
+ information and for a list of supported cameras.
+
+ This driver uses the Video For Linux API. You must say Y or M to
+ "Video For Linux" (under Multimedia Devices) to use this driver.
+ Information on this API and pointers to "v4l" programs may be found
+ on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml .
+
+ This code is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called se401.o. If you want to compile it as a
+ module, say M here and read Documentation/modules.txt.
+
USB ADMtek Pegasus-based ethernet device support
CONFIG_USB_PEGASUS
Say Y if you want to use your USB ethernet device. Supported
@@ -10972,6 +11422,20 @@
The module will be called pegasus.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
+USB CATC NetMate-based Ethernet device support
+CONFIG_USB_CATC
+ Say Y if you want to use one of the following 10Mbps USB Ethernet
+ device based on the EL1210A chip. Supported devices are:
+ Belkin F5U111
+ CATC NetMate
+ CATC NetMate II
+ smartBridges smartNIC
+
+ This code is also available as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want).
+ The module will be called catc.o. If you want to compile it as a
+ module, say M here and read .
+
USB Kodak DC-2xx Camera support
CONFIG_USB_DC2XX
Say Y here if you want to connect this type of still camera to
@@ -11128,12 +11592,13 @@
Microtek USB scanner support
CONFIG_USB_MICROTEK
- Say Y here if you want support for the Microtek X6USB and possibly
- some other scanners by that vendor. The scanner will appear as a
- scsi generic 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
+ Say Y here if you want support for the Microtek X6USB and
+ possibly the Phantom 336CX, Phantom C6 and ScanMaker V6U(S)L.
+ Support for anything but the X6 is experimetal.
+ Please report failures and successes.
+ The scanner will appear as a scsi generic device to the rest
+ of the system. Scsi support is required for this driver to compile
+ and work. SANE 1.0.4 or newer is needed to make use of your scanner.
This driver can be compiled as a module.
USB Bluetooth support
@@ -11724,12 +12189,13 @@
If unsure, say N.
-System V and Coherent file system support (read only)
+System V, Version 7, Xenix and Coherent filesystem support (read only)
CONFIG_SYSV_FS
SCO, Xenix and Coherent are commercial Unix systems for Intel
- machines. Saying Y here would allow you to read from their floppies
- and hard disk partitions. If you also want to write to these media,
- say Y to "SYSV file system write support" below.
+ machines, and Version 7 was used on the DEC PDP-11. Saying Y
+ here would allow you to read from their floppies and hard disk
+ partitions. If you also want to write to these media, say Y to
+ "SYSV file system write support" below.
If you have floppies or hard disk partitions like that, it is likely
that they contain binaries from those other Unix systems; in order
@@ -11738,7 +12204,9 @@
Xenix, Wyse, UnixWare, Dell Unix and System V programs under Linux
and is often needed to run commercial software that's only available
for those systems. It's available via FTP (user: anonymous) from
- ftp://tsx-11.mit.edu/pub/linux/BETA ).
+ ftp://tsx-11.mit.edu/pub/linux/BETA ). NOTE: that will work only for
+ binaries from Intel-based systems; PDP ones will have to wait until
+ somebody ports Linux to -11 ;-)
If you only intend to mount files from some other Unix over the
network using NFS, you don't need the System V file system support
@@ -13241,8 +13709,8 @@
Apple Desktop Bus support
CONFIG_ADB
Apple Desktop Bus (ADB) support is for support of devices which
- are connected to the to an ADB port. ADB devices tend to have
- 4 pins. If you have an Apple Macintosh prior to the iMac, or a
+ are connected to an ADB port. ADB devices tend to have 4 pins.
+ If you have an Apple Macintosh prior to the iMac, or a
"Blue and White G3", you probably want to say Y here. Otherwise
say N.
@@ -13730,7 +14198,7 @@
will issue the hlt instruction if nothing is to be done, thereby
sending the processor to sleep and saving power.
-ACPI Support
+ACPI support
CONFIG_ACPI
ACPI/OSPM support for Linux is currently under development. As such,
this support is preliminary and EXPERIMENTAL. Configuring ACPI support
@@ -13760,6 +14228,57 @@
The ACPI mailing list may also be of interest:
http://phobos.fs.tum.de/acpi/index.html
+ACPI Debug Statements
+CONFIG_ACPI_DEBUG
+ The ACPI driver can optionally report errors with a great deal
+ of verbosity. Saying Y enables these statements. This will increase
+ your kernel size by around 50K.
+
+ACPI Bus Manager
+CONFIG_ACPI_BUSMGR
+ The ACPI Bus Manager enumerates devices in the ACPI namespace, and
+ handles PnP messages. All ACPI devices use its services, so using them
+ requires saying Y here.
+
+ACPI System Driver
+CONFIG_ACPI_SYS
+ This driver will enable your system to shut down using ACPI, and dump
+ your ACPI DSDT table using /proc/acpi/dsdt.
+
+ACPI Processor Driver
+CONFIG_ACPI_CPU
+ This driver installs ACPI as the idle handler for Linux, and uses ACPI
+ C2 and C3 processor states to save power, on systems that support it.
+
+ACPI Button
+CONFIG_ACPI_BUTTON
+ This driver registers for events based on buttons, such as the power,
+ sleep, and lid switch. In the future, a daemon will read
+ /proc/acpi/event and perform user-defined actions such as shutting
+ down the system. Until then, you can cat it, and see output when
+ a button is pressed.
+
+ACPI AC Adapter
+CONFIG_ACPI_AC
+ This driver adds support for the AC Adapter object, which indicates
+ whether a system is on AC, or not. Typically, only laptops have this
+ object, since desktops are always on AC.
+
+ACPI Embedded Controller
+CONFIG_ACPI_EC
+ This driver is required on some systems for the proper operation of the
+ battery and thermal drivers. If you are compiling for a laptop, say Y.
+
+ACPI Control Method Battery
+CONFIG_ACPI_CMBATT
+ This driver adds support for battery information through
+ /proc/acpi/battery. If you have a laptop with a battery, say Y.
+
+ACPI Thermal
+CONFIG_ACPI_THERMAL
+ This driver handles overheating conditions on laptops. It is HIGHLY
+ recommended, as your laptop CPU may be damaged without it.
+
Advanced Power Management BIOS support
CONFIG_APM
APM is a BIOS specification for saving power using several different
@@ -14883,17 +15402,20 @@
If unsure, say Y.
-ACI mixer (miroPCM12/PCM20)
+ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)
CONFIG_SOUND_ACI_MIXER
ACI (Audio Command Interface) is a protocol used to communicate with
- the microcontroller on some sound cards produced by miro, e.g. the
- miroSOUND PCM12 and PCM20. The main function of the ACI is to
- control the mixer and to get a product identification.
-
- This Voxware ACI driver currently only supports the ACI functions on
- the miroSOUND PCM12 and PCM20 cards. On the PCM20, ACI also controls
- the radio tuner. This is supported in the video4linux
- radio-miropcm20 driver.
+ the microcontroller on some sound cards produced by miro and Cardinal
+ Technologies. The main function of the ACI is to control the mixer
+ and to get a product identification.
+
+ This Voxware ACI driver currently supports the ACI functions on the
+ miroSOUND PCM1-pro, PCM12 and PCM20 radio. On the PCM20 radio, ACI
+ also controls the radio tuner. This is supported in the video4linux
+ miropcm20 driver (say M or Y here and go back to "Multimedia devices"
+ -> "Radio Adapters").
+
+ This driver is also available as a module and will be called aci.o.
SB32/AWE support
CONFIG_SOUND_AWE32_SYNTH
@@ -15618,6 +16140,20 @@
isdn4k-utils package. Please read the file
Documentation/isdn/README.act2000 for more information.
+Auvertech TurboPAM support
+CONFIG_ISDN_DRV_TPAM
+ This enables support for the Auvertech TurboPAM ISDN-card.
+ For running this card, additional firmware is necessary, which has
+ to be downloaded into the card using a utility which is distributed
+ separately from the Auvertech's web site: http://www.auvertech.fr.
+
+ Please redirect all support questions to support@auvertech.fr.
+
+ If you want to compile this as a module ( = code which can be
+ inserted in and removed from the running kernel whenever you want),
+ say M here and read Documentation/modules.txt. The module will be
+ called tpam.o.
+
Hypercope HYSDN cards (Champ, Ergo, Metro) support (module)
CONFIG_HYSDN
Say Y here if you have one of Hypercope's active PCI ISDN cards
@@ -16711,11 +17247,11 @@
say M here and read Documentation/modules.txt. The module will be
called i2c-parport.o.
-Miro PCM20 Radio
+miroSOUND PCM20 radio
CONFIG_RADIO_MIROPCM20
- Choose Y here if you have this FM radio card. You also need to say Y
- to "ACI mixer (miroPCM12/PCM20)" (in "additional low level sound
- drivers") for this to work.
+ Choose Y here if you have this sound card. You also need to say Y
+ to "ACI mixer (miroSOUND PCM1-pro/PCM12/PCM20 radio)" (in "Sound")
+ for this to work.
In order to control your radio card, you will need to use programs
that are compatible with the Video for Linux API. Information on
@@ -16725,7 +17261,21 @@
If you want to compile this driver as a module ( = code which can be
inserted in and removed from the running kernel whenever you want),
say M here and read Documentation/modules.txt. The module will be
- called radio-miropcm20.o
+ called miropcm20.o
+
+miroSOUND PCM20 radio RDS user interface (EXPERIMENTAL)
+CONFIG_RADIO_MIROPCM20_RDS
+ Choose Y here if you want to see RDS/RBDS information like RadioText,
+ Programme Service name, Clock Time and date, Programme TYpe and
+ Traffic Announcement/Programme identification. You also need to say
+ Y to "miroSOUND PCM20 radio" and devfs!
+
+ It's not possible to read the raw RDS packets from the device, so
+ the driver cant provide an V4L interface for this. But the
+ availability of RDS is reported over V4L by the basic driver already.
+ Here RDS can be read from files in /dev/v4l/rds.
+
+ As module the driver will be called miropcm20-rds.o.
GemTek Radio Card
CONFIG_RADIO_GEMTEK
diff -u --recursive --new-file v2.4.5/linux/Documentation/DocBook/Makefile linux/Documentation/DocBook/Makefile
--- v2.4.5/linux/Documentation/DocBook/Makefile Mon May 7 12:14:56 2001
+++ linux/Documentation/DocBook/Makefile Mon Jul 2 13:56:40 2001
@@ -1,7 +1,7 @@
BOOKS := wanbook.sgml z8530book.sgml mcabook.sgml videobook.sgml \
kernel-api.sgml parportbook.sgml kernel-hacking.sgml \
kernel-locking.sgml via-audio.sgml mousedrivers.sgml sis900.sgml \
- deviceiobook.sgml
+ deviceiobook.sgml procfs-guide.sgml
PS := $(patsubst %.sgml, %.ps, $(BOOKS))
PDF := $(patsubst %.sgml, %.pdf, $(BOOKS))
@@ -9,6 +9,7 @@
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))
+C-procfs-example = procfs_example.sgml
books: $(BOOKS)
@@ -28,6 +29,15 @@
%.jpeg: %.fig
-fig2dev -Ljpeg $< $@
+%.sgml: %.c
+ echo "" > $@
+ expand --tabs=8 < $< | \
+ sed -e "s/&/\\&/g" \
+ -e "s/\\</g" \
+ -e "s/>/\\>/g" >> $@
+ echo "" >> $@
+
+
$(TOPDIR)/scripts/docproc:
$(MAKE) -C $(TOPDIR)/scripts docproc
@@ -67,6 +77,9 @@
$(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/media/video/videodev.c \
videobook.sgml
+procfs-guide.sgml: procfs-guide.tmpl procfs_example.sgml
+ $(TOPDIR)/scripts/docgen < procfs-guide.tmpl >$@
+
APISOURCES := $(TOPDIR)/drivers/media/video/videodev.c \
$(TOPDIR)/arch/i386/kernel/irq.c \
$(TOPDIR)/arch/i386/kernel/mca.c \
@@ -128,6 +141,7 @@
-$(RM) $(BOOKS)
-$(RM) $(DVI) $(AUX) $(TEX) $(LOG) $(OUT)
-$(RM) $(JPG-parportbook) $(EPS-parportbook)
+ -$(RM) $(C-procfs-example)
mrproper: clean
-$(RM) $(PS) $(PDF)
diff -u --recursive --new-file v2.4.5/linux/Documentation/DocBook/procfs-guide.tmpl linux/Documentation/DocBook/procfs-guide.tmpl
--- v2.4.5/linux/Documentation/DocBook/procfs-guide.tmpl Wed Dec 31 16:00:00 1969
+++ linux/Documentation/DocBook/procfs-guide.tmpl Mon Jul 2 13:56:40 2001
@@ -0,0 +1,625 @@
+
+
+]>
+
+
+
+ Linux Kernel Procfs Guide
+
+
+
+ Erik
+ (J.A.K.)
+ Mouw
+
+ Delft University of Technology
+ Faculty of Information Technology and Systems
+
+ J.A.K.Mouw@its.tudelft.nl
+ PO BOX 5031
+ 2600 GA
+ Delft
+ The Netherlands
+
+
+
+
+
+
+
+ 1.0
+ May 30, 2001
+ Initial revision posted to linux-kernel
+
+
+ 1.1
+ June 3, 2001
+ Revised after comments from linux-kernel
+
+
+
+
+ 2001
+ Erik Mouw
+
+
+
+
+
+ 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 documentation 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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Preface
+
+
+ This guide describes the use of the procfs file system from
+ within the Linux kernel. The idea to write this guide came up on
+ the #kernelnewbies IRC channel (see http://www.kernelnewbies.org/),
+ when Jeff Garzik explained the use of procfs and forwarded me a
+ message Alexander Viro wrote to the linux-kernel mailing list. I
+ agreed to write it up nicely, so here it is.
+
+
+
+ I'd like to thank Jeff Garzik
+ jgarzik@mandrakesoft.com and Alexander Viro
+ viro@math.psu.edu for their input, Tim Waugh
+ twaugh@redhat.com for his Selfdocbook,
+ and Marc Joosen marcj@historia.et.tudelft.nl for
+ proofreading.
+
+
+
+ This documentation was written while working on the LART
+ computing board (http://www.lart.tudelft.nl/),
+ which is sponsored by the Mobile Multi-media Communications
+ (http://www.mmc.tudelft.nl/)
+ and Ubiquitous Communications (http://www.ubicom.tudelft.nl/)
+ projects.
+
+
+
+ Erik
+
+
+
+
+
+
+
+ Introduction
+
+
+ The /proc file system
+ (procfs) is a special file system in the linux kernel. It's a
+ virtual file system: it is not associated with a block device
+ but exists only in memory. The files in the procfs are there to
+ allow userland programs access to certain information from the
+ kernel (like process information in /proc/[0-9]+/), but also for debug
+ purposes (like /proc/ksyms).
+
+
+
+ This guide describes the use of the procfs file system from
+ within the Linux kernel. It starts by introducing all relevant
+ functions to manage the files within the file system. After that
+ it shows how to communicate with userland, and some tips and
+ tricks will be pointed out. Finally a complete example will be
+ shown.
+
+
+
+ Note that the files in /proc/sys are sysctl files: they
+ don't belong to procfs and are governed by a completely
+ different API described in the Kernel API book.
+
+
+
+
+
+
+
+ Managing procfs entries
+
+
+ This chapter describes the functions that various kernel
+ components use to populate the procfs with files, symlinks,
+ device nodes, and directories.
+
+
+
+ A minor note before we start: if you want to use any of the
+ procfs functions, be sure to include the correct header file!
+ This should be one of the first lines in your code:
+
+
+
+#include <linux/proc_fs.h>
+
+
+
+
+
+
+ Creating a regular file
+
+
+
+ struct proc_dir_entry* create_proc_entry
+ const char* name
+ mode_t mode
+ struct proc_dir_entry* parent
+
+
+
+
+ This function creates a regular file with the name
+ name, file mode
+ mode in the directory
+ parent. To create a file in the root of
+ the procfs, use NULL as
+ parent parameter. When successful, the
+ function will return a pointer to the freshly created
+ struct proc_dir_entry; otherwise it
+ will return NULL. describes how to do something useful with
+ regular files.
+
+
+
+ Note that it is specifically supported that you can pass a
+ path that spans multiple directories. For example
+ create_proc_entry("drivers/via0/info")
+ will create the via0
+ directory if necessary, with standard
+ 0755 permissions.
+
+
+
+ If you only want to be able to read the file, the function
+ create_proc_read_entry described in may be used to create and initialise
+ the procfs entry in one single call.
+
+
+
+
+
+
+
+ Creating a symlink
+
+
+
+ struct proc_dir_entry*
+ proc_symlink const
+ char* name
+ struct proc_dir_entry*
+ parent const
+ char* dest
+
+
+
+
+ This creates a symlink in the procfs directory
+ parent that points from
+ name to
+ dest. This translates in userland to
+ ln -s dest
+ name.
+
+
+
+
+
+
+
+ Creating a device
+
+
+
+ struct proc_dir_entry* proc_mknod
+ const char* name
+ mode_t mode
+ struct proc_dir_entry* parent
+ kdev_t rdev
+
+
+
+
+ Creates a device file name with mode
+ mode in the procfs directory
+ parent. The device file will work on
+ the device rdev, which can be generated
+ by using the MKDEV macro from
+ linux/kdev_t.h. The
+ mode parameter
+ must contain S_IFBLK
+ or S_IFCHR to create a device
+ node. Compare with userland mknod
+ --mode=mode
+ name rdev.
+
+
+
+
+
+
+
+ Creating a directory
+
+
+
+ struct proc_dir_entry* proc_mkdir
+ const char* name
+ struct proc_dir_entry* parent
+
+
+
+
+ Create a directory name in the procfs
+ directory parent.
+
+
+
+
+
+
+
+ Removing an entry
+
+
+
+ void remove_proc_entry
+ const char* name
+ struct proc_dir_entry* parent
+
+
+
+
+ Removes the entry name in the directory
+ parent from the procfs. Entries are
+ removed by their name, not by the
+ struct proc_dir_entry returned by the
+ various create functions. Note that this function doesn't
+ recursively remove entries.
+
+
+
+ Be sure to free the data entry from
+ the struct proc_dir_entry before
+ remove_proc_entry is called (that is: if
+ there was some data allocated, of
+ course). See for more information
+ on using the data entry.
+
+
+
+
+
+
+
+
+ Communicating with userland
+
+
+ Instead of reading (or writing) information directly from
+ kernel memory, procfs works with call back
+ functions for files: functions that are called when
+ a specific file is being read or written. Such functions have
+ to be initialised after the procfs file is created by setting
+ the read_proc and/or
+ write_proc fields in the
+ struct proc_dir_entry* that the
+ function create_proc_entry returned:
+
+
+
+struct proc_dir_entry* entry;
+
+entry->read_proc = read_proc_foo;
+entry->write_proc = write_proc_foo;
+
+
+
+ If you only want to use a the
+ read_proc, the function
+ create_proc_read_entry described in may be used to create and initialise the
+ procfs entry in one single call.
+
+
+
+
+
+ Reading data
+
+
+ The read function is a call back function that allows userland
+ processes to read data from the kernel. The read function
+ should have the following format:
+
+
+
+
+ int read_func
+ char* page
+ char** start
+ off_t off
+ int count
+ int* eof
+ void* data
+
+
+
+
+ The read function should write its information into the
+ page. For proper use, the function
+ should start writing at an offset of
+ off in page and
+ write at most count bytes, but because
+ most read functions are quite simple and only return a small
+ amount of information, these two parameters are usually
+ ignored (it breaks pagers like more and
+ less, but cat still
+ works).
+
+
+
+ If the off and
+ count parameters are properly used,
+ eof should be used to signal that the
+ end of the file has been reached by writing
+ 1 to the memory location
+ eof points to.
+
+
+
+ The parameter start doesn't seem to be
+ used anywhere in the kernel. The data
+ parameter can be used to create a single call back function for
+ several files, see .
+
+
+
+ The read_func function must return the
+ number of bytes written into the page.
+
+
+
+ shows how to use a read call back
+ function.
+
+
+
+
+
+
+
+ Writing data
+
+
+ The write call back function allows a userland process to write
+ data to the kernel, so it has some kind of control over the
+ kernel. The write function should have the following format:
+
+
+
+
+ int write_func
+ struct file* file
+ const char* buffer
+ unsigned long count
+ void* data
+
+
+
+
+ The write function should read count
+ bytes at maximum from the buffer. Note
+ that the buffer doesn't live in the
+ kernel's memory space, so it should first be copied to kernel
+ space with copy_from_user. The
+ file parameter is usually
+ ignored. shows how to use the
+ data parameter.
+
+
+
+ Again, shows how to use this call back
+ function.
+
+
+
+
+
+
+
+ A single call back for many files
+
+
+ When a large number of almost identical files is used, it's
+ quite inconvenient to use a separate call back function for
+ each file. A better approach is to have a single call back
+ function that distinguishes between the files by using the
+ data field in struct
+ proc_dir_entry. First of all, the
+ data field has to be initialised:
+
+
+
+struct proc_dir_entry* entry;
+struct my_file_data *file_data;
+
+file_data = kmalloc(sizeof(struct my_file_data), GFP_KERNEL);
+entry->data = file_data;
+
+
+
+ The data field is a void
+ *, so it can be initialised with anything.
+
+
+
+ Now that the data field is set, the
+ read_proc and
+ write_proc can use it to distinguish
+ between files because they get it passed into their
+ data parameter:
+
+
+
+int foo_read_func(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ int len;
+
+ if(data == file_data) {
+ /* special case for this file */
+ } else {
+ /* normal processing */
+ }
+
+ return len;
+}
+
+
+
+ Be sure to free the data data field
+ when removing the procfs entry.
+
+
+
+
+
+
+
+
+ Tips and tricks
+
+
+
+
+
+ Convenience functions
+
+
+
+ struct proc_dir_entry* create_proc_read_entry
+ const char* name
+ mode_t mode
+ struct proc_dir_entry* parent
+ read_proc_t* read_proc
+ void* data
+
+
+
+
+ This function creates a regular file in exactly the same way
+ as create_proc_entry from does, but also allows to set the read
+ function read_proc in one call. This
+ function can set the data as well, like
+ explained in .
+
+
+
+
+
+
+ Modules
+
+
+ If procfs is being used from within a module, be sure to set
+ the owner field in the
+ struct proc_dir_entry to
+ THIS_MODULE.
+
+
+
+struct proc_dir_entry* entry;
+
+entry->owner = THIS_MODULE;
+
+
+
+
+
+
+
+ Mode and ownership
+
+
+ Sometimes it is useful to change the mode and/or ownership of
+ a procfs entry. Here is an example that shows how to achieve
+ that:
+
+
+
+struct proc_dir_entry* entry;
+
+entry->mode = S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH;
+entry->uid = 0;
+entry->gid = 100;
+
+
+
+
+
+
+
+
+
+ Example
+
+
+
+&procfsexample;
+
+
+
diff -u --recursive --new-file v2.4.5/linux/Documentation/DocBook/procfs_example.c linux/Documentation/DocBook/procfs_example.c
--- v2.4.5/linux/Documentation/DocBook/procfs_example.c Wed Dec 31 16:00:00 1969
+++ linux/Documentation/DocBook/procfs_example.c Mon Jul 2 13:56:40 2001
@@ -0,0 +1,249 @@
+/*
+ * procfs_example.c: an example proc interface
+ *
+ * Copyright (C) 2001, Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
+ *
+ * This file accompanies the procfs-guide in the Linux kernel
+ * source. Its main use is to demonstrate the concepts and
+ * functions described in the guide.
+ *
+ * This software has been developed while working on the LART
+ * computing board (http://www.lart.tudelft.nl/), which is
+ * sponsored by the Mobile Multi-media Communications
+ * (http://www.mmc.tudelft.nl/) and Ubiquitous Communications
+ * (http://www.ubicom.tudelft.nl/) projects.
+ *
+ * The author can be reached at:
+ *
+ * Erik Mouw
+ * Information and Communication Theory Group
+ * Faculty of Information Technology and Systems
+ * Delft University of Technology
+ * P.O. Box 5031
+ * 2600 GA Delft
+ * The Netherlands
+ *
+ *
+ * This program is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place,
+ * Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+#define MODULE_VERSION "1.0"
+#define MODULE_NAME "procfs_example"
+
+#define FOOBAR_LEN 8
+
+struct fb_data_t {
+ char name[FOOBAR_LEN + 1];
+ char value[FOOBAR_LEN + 1];
+};
+
+
+static struct proc_dir_entry *example_dir, *foo_file,
+ *bar_file, *jiffies_file, *tty_device, *symlink;
+
+
+struct fb_data_t foo_data, bar_data;
+
+
+static int proc_read_jiffies(char *page, char **start,
+ off_t off, int count,
+ int *eof, void *data)
+{
+ int len;
+
+ MOD_INC_USE_COUNT;
+
+ len = sprintf(page, "jiffies = %ld\n",
+ jiffies);
+
+ MOD_DEC_USE_COUNT;
+
+ return len;
+}
+
+
+static int proc_read_foobar(char *page, char **start,
+ off_t off, int count,
+ int *eof, void *data)
+{
+ int len;
+ struct fb_data_t *fb_data = (struct fb_data_t *)data;
+
+ MOD_INC_USE_COUNT;
+
+ len = sprintf(page, "%s = '%s'\n",
+ fb_data->name, fb_data->value);
+
+ MOD_DEC_USE_COUNT;
+
+ return len;
+}
+
+
+static int proc_write_foobar(struct file *file,
+ const char *buffer,
+ unsigned long count,
+ void *data)
+{
+ int len;
+ struct fb_data_t *fb_data = (struct fb_data_t *)data;
+
+ MOD_INC_USE_COUNT;
+
+ if(count > FOOBAR_LEN)
+ len = FOOBAR_LEN;
+ else
+ len = count;
+
+ if(copy_from_user(fb_data->value, buffer, len)) {
+ MOD_DEC_USE_COUNT;
+ return -EFAULT;
+ }
+
+ fb_data->value[len] = '\0';
+
+ MOD_DEC_USE_COUNT;
+
+ return len;
+}
+
+
+static int __init init_procfs_example(void)
+{
+ int rv = 0;
+
+ /* create directory */
+ example_dir = proc_mkdir(MODULE_NAME, NULL);
+ if(example_dir == NULL) {
+ rv = -ENOMEM;
+ goto out;
+ }
+
+ example_dir->owner = THIS_MODULE;
+
+ /* create jiffies using convenience function */
+ jiffies_file = create_proc_read_entry("jiffies",
+ 0444, example_dir,
+ proc_read_jiffies,
+ NULL);
+ if(jiffies_file == NULL) {
+ rv = -ENOMEM;
+ goto no_jiffies;
+ }
+
+ jiffies_file->owner = THIS_MODULE;
+
+ /* create foo and bar files using same callback
+ * functions
+ */
+ foo_file = create_proc_entry("foo", 0644, example_dir);
+ if(foo_file == NULL) {
+ rv = -ENOMEM;
+ goto no_foo;
+ }
+
+ strcpy(foo_data.name, "foo");
+ strcpy(foo_data.value, "foo");
+ foo_file->data = &foo_data;
+ foo_file->read_proc = proc_read_foobar;
+ foo_file->write_proc = proc_write_foobar;
+ foo_file->owner = THIS_MODULE;
+
+ bar_file = create_proc_entry("bar", 0644, example_dir);
+ if(bar_file == NULL) {
+ rv = -ENOMEM;
+ goto no_bar;
+ }
+
+ strcpy(bar_data.name, "bar");
+ strcpy(bar_data.value, "bar");
+ bar_file->data = &bar_data;
+ bar_file->read_proc = proc_read_foobar;
+ bar_file->write_proc = proc_write_foobar;
+ bar_file->owner = THIS_MODULE;
+
+ /* create tty device */
+ tty_device = proc_mknod("tty", S_IFCHR | 0666,
+ example_dir, MKDEV(5, 0));
+ if(tty_device == NULL) {
+ rv = -ENOMEM;
+ goto no_tty;
+ }
+
+ tty_device->owner = THIS_MODULE;
+
+ /* create symlink */
+ symlink = proc_symlink("jiffies_too", example_dir,
+ "jiffies");
+ if(symlink == NULL) {
+ rv = -ENOMEM;
+ goto no_symlink;
+ }
+
+ symlink->owner = THIS_MODULE;
+
+ /* everything OK */
+ printk(KERN_INFO "%s %s initialised\n",
+ MODULE_NAME, MODULE_VERSION);
+ return 0;
+
+no_symlink:
+ remove_proc_entry("tty", example_dir);
+no_tty:
+ remove_proc_entry("bar", example_dir);
+no_bar:
+ remove_proc_entry("foo", example_dir);
+no_foo:
+ remove_proc_entry("jiffies", example_dir);
+no_jiffies:
+ remove_proc_entry(MODULE_NAME, NULL);
+out:
+ return rv;
+}
+
+
+static void __exit cleanup_procfs_example(void)
+{
+ remove_proc_entry("jiffies_too", example_dir);
+ remove_proc_entry("tty", example_dir);
+ remove_proc_entry("bar", example_dir);
+ remove_proc_entry("foo", example_dir);
+ remove_proc_entry("jiffies", example_dir);
+ remove_proc_entry(MODULE_NAME, NULL);
+
+ printk(KERN_INFO "%s %s removed\n",
+ MODULE_NAME, MODULE_VERSION);
+}
+
+
+module_init(init_procfs_example);
+module_exit(cleanup_procfs_example);
+
+MODULE_AUTHOR("Erik Mouw");
+MODULE_DESCRIPTION("procfs examples");
+
+EXPORT_NO_SYMBOLS;
diff -u --recursive --new-file v2.4.5/linux/Documentation/fb/matroxfb.txt linux/Documentation/fb/matroxfb.txt
--- v2.4.5/linux/Documentation/fb/matroxfb.txt Sat Nov 11 18:47:40 2000
+++ linux/Documentation/fb/matroxfb.txt Mon Jul 2 13:56:40 2001
@@ -173,9 +173,9 @@
mtrr - enables write combining on frame buffer. It speeds up video accesses
much. It is default. You must have MTRR support enabled in kernel
and your CPU must have MTRR (f.e. Pentium II have them).
-sgram - tells to driver that you have G200 with SGRAM memory. It has no
+sgram - tells to driver that you have Gxx0 with SGRAM memory. It has no
effect without `init'.
-sdram - tells to driver that you have G200 with SDRAM memory.
+sdram - tells to driver that you have Gxx0 with SDRAM memory.
It is a default.
inv24 - change timings parameters for 24bpp modes on Millenium and
Millenium II. Specify this if you see strange color shadows around
@@ -279,7 +279,7 @@
+ 24bpp does not support correctly XF-FBDev on big-endian architectures.
+ interlaced text mode is not supported; it looks like hardware limitation,
but I'm not sure.
- + G200 SGRAM/SDRAM is not autodetected.
+ + Gxx0 SGRAM/SDRAM is not autodetected.
+ maybe more...
And following misfeatures:
+ SVGALib does not restore screen on exit.
@@ -336,7 +336,7 @@
ACCEL, nofastfont
8x16 12x22 6x11
- Millennium I G200 Millennium I G200 Millennium I G200
+ Millennium I G200 Millennium I G200 Millennium I G200
8bpp 7.79 7.24 13.55 7.78 30.00 21.01
16bpp 9.13 7.78 16.16 7.78 30.00 21.01
24bpp 14.17 10.72 18.69 10.24 34.99 21.01
@@ -344,7 +344,7 @@
ACCEL, fastfont
8x16 12x22 6x11
- Millennium I G200 Millennium I G200 Millennium I G200
+ Millennium I G200 Millennium I G200 Millennium I G200
8bpp 8.41 6.01 6.54 4.37 16.00 10.51
16bpp 9.54 9.12 8.76 6.17 17.52 14.01
24bpp 15.00 12.36 11.67 10.00 22.01 18.32
@@ -355,6 +355,8 @@
Millennium I G200
TEXT 3.29 1.50
+* Yes, it is slower than Millennium I.
+
Dualhead G400
=============
@@ -376,7 +378,22 @@
+ if you compiled it as module, you must insert i2c-matroxfb, matroxfb_maven
and matroxfb_crtc2 into kernel.
+
+Dualhead G450
+=============
+Driver supports dualhead G450 with some limitations:
+ + secondary head shares videomemory with primary head. It is not problem
+ if you have 32MB of videoram, but if you have only 16MB, you may have
+ to think twice before choosing videomode.
+ + due to hardware limitation, secondary head can use only 16 and 32bpp
+ videomodes.
+ + secondary head is not accelerated.
+ + secondary head always powerups in 640x480@60-32 videomode. You have to use
+ fbset to change this mode.
+ + TV output is not supported
+ + kernel is not fully multihead ready, so some things are impossible to do.
+ + if you compiled it as module, you must insert matroxfb_g450 and matroxfb_crtc2
+ into kernel.
-* Yes, it is slower than Millennium I.
--
Petr Vandrovec
diff -u --recursive --new-file v2.4.5/linux/Documentation/filesystems/00-INDEX linux/Documentation/filesystems/00-INDEX
--- v2.4.5/linux/Documentation/filesystems/00-INDEX Thu Feb 8 16:32:44 2001
+++ linux/Documentation/filesystems/00-INDEX Wed Jun 20 11:10:27 2001
@@ -33,7 +33,7 @@
smbfs.txt
- info on using filesystems with the SMB protocol (Windows 3.11 and NT)
sysv-fs.txt
- - info on the SystemV/Coherent filesystem.
+ - info on the SystemV/V7/Xenix/Coherent filesystem.
udf.txt
- info and mount options for the UDF filesystem.
ufs.txt
diff -u --recursive --new-file v2.4.5/linux/Documentation/filesystems/devfs/ChangeLog linux/Documentation/filesystems/devfs/ChangeLog
--- v2.4.5/linux/Documentation/filesystems/devfs/ChangeLog Fri Apr 6 10:42:48 2001
+++ linux/Documentation/filesystems/devfs/ChangeLog Wed Jun 20 10:54:31 2001
@@ -1613,3 +1613,51 @@
- Updated README from master HTML file
- Ported to kernel 2.4.0-test3-pre4 (which had devfs-patch-v174)
+===============================================================================
+Changes for patch v177
+
+- Updated README from master HTML file
+
+- Documentation cleanups
+
+- Ensure terminates string for root entry
+ Thanks to Tim Jansen
+
+- Exported to modules
+
+- Make send events to devfsd
+
+- Cleaned up option processing in
+
+- Fixed bugs in handling symlinks: could leak or cause Oops
+
+- Cleaned up directory handling by separating fops
+ Thanks to Alexander Viro
+===============================================================================
+Changes for patch v178
+
+- Fixed handling of inverted options in
+===============================================================================
+Changes for patch v179
+
+- Adjusted to account for fix
+===============================================================================
+Changes for patch v180
+
+- Fixed !CONFIG_DEVFS_FS stub declaration of
+===============================================================================
+Changes for patch v181
+
+- Answered question posed by Al Viro and removed his comments from
+
+- Moved setting of registered flag after other fields are changed
+
+- Fixed race between and
+
+- Global VFS changes added bogus BKL to devfsd_close(): removed
+
+- Widened locking in and
+
+- Replaced stack usage with kmalloc
+
+- Simplified locking in and fixed memory leak
diff -u --recursive --new-file v2.4.5/linux/Documentation/filesystems/devfs/README linux/Documentation/filesystems/devfs/README
--- v2.4.5/linux/Documentation/filesystems/devfs/README Wed Nov 29 10:11:38 2000
+++ linux/Documentation/filesystems/devfs/README Tue Jun 12 10:57:46 2001
@@ -3,7 +3,7 @@
Linux Devfs (Device File System) FAQ
Richard Gooch
-3-JUL-2000
+26-APR-2001
-----------------------------------------------------------------------------
@@ -18,7 +18,7 @@
http://www.atnf.csiro.au/~rgooch/linux/
-NEWFLASH: The official 2.3.46 kernel has
+NEWSFLASH: The official 2.3.46 kernel has
included the devfs patch. Future patches will be released which
build on this. These patches are rolled into Linus' tree from time to
time.
@@ -54,6 +54,7 @@
Other Issues
Kernel Naming Scheme
Devfsd Naming Scheme
+Old Compatibility Names
SCSI Host Probing Issues
@@ -99,6 +100,7 @@
can easily mount the root filesystem by referring to an entry in the
devfs namespace.
+
The cost of devfs is a small increase in kernel code size and memory
usage. About 7 pages of code (some of that in __init sections) and 72
bytes for each entry in the namespace. A modest system has only a
@@ -157,6 +159,7 @@
of nodes. This means that changes in the kernel must be reflected by
changes in the MAKEDEV programme, or else the system administrator
creates device nodes by hand.
+
The basic problem is that there are two separate databases of
major and minor numbers. One is in the kernel and one is in /dev (or
in a MAKEDEV programme, if you want to look at it that way). This is
@@ -192,6 +195,7 @@
256 kBytes of /dev inodes, but you could argue that embedded systems
would have hand-tuned /dev directories. I've had to do just that on my
embedded systems, but I would rather just leave it to devfs.
+
Another issue is the time taken to lookup an inode when first
referenced. Not only does this take time in scanning through a list in
memory, but also the seek times to read the inodes off disc.
@@ -212,7 +216,7 @@
likely be implemented in an ad-hoc fashion, as different drivers will
provide their information in different ways.
-Devfs is much cleaner, because it (natually) has a uniform mechanism
+Devfs is much cleaner, because it (naturally) has a uniform mechanism
to provide this information: the device nodes themselves!
@@ -253,7 +257,7 @@
But why do that search at all if you don't have to? Once again, it
seems pointless.
-Note thate devfs doesn't use the major&minor system. For devfs
+Note that devfs doesn't use the major&minor system. For devfs
entries, the connection is done when you lookup the /dev entry. When
devfs_register() is called, an internal table is appended which has
the entry name and the file_operations. If the dentry cache doesn't
@@ -274,9 +278,9 @@
/dev as a system administration tool
Right now /dev contains a list of conceivable devices, most of which I
-don't have. A devfs would only show those devices available on my
-system. This means that listing /dev would be a handy way of checking
-what devices were available.
+don't have. Devfs only shows those devices available on my
+system. This means that listing /dev is a handy way of checking what
+devices are available.
Major&minor size
@@ -289,9 +293,9 @@
each device entry, which can be used to give an effective 32 bit
device identifier (i.e. that's like having a 32 bit minor
number). Since this is private to the kernel, there are no C library
-compatibility which you would have with increasing major and minor
-number sizes. See the section on "Allocation of Device Numbers" for
-details on maintaining compatibility with userspace.
+compatibility issues which you would have with increasing major and
+minor number sizes. See the section on "Allocation of Device Numbers"
+for details on maintaining compatibility with userspace.
Solving this requires a kernel change.
@@ -375,9 +379,9 @@
devfsd on any event, such as registration/unregistration of device
entries, opening and closing devices, looking up inodes, scanning
directories and more. This has many possibilities. Some of these are
-already implemented.
+already implemented. See:
+
-See:
http://www.atnf.csiro.au/~rgooch/linux/
Device entry registration events can be used by devfsd to change
@@ -414,6 +418,7 @@
requests. Instead of using kmod directly, the event is sent to
devfsd which can implement an arbitrary authentication before loading
the module itself.
+
Inode lookup events can also be used to construct arbitrary
namespaces, without having to resort to populating devfs with symlinks
to devices that don't exist.
@@ -447,10 +452,10 @@
Who else does it?
-FreeBSD has a devfs implementation. Solaris 2 has a pseudo-devfs
-(something akin to scsidev but for all devices, with some unspecified
-kernel support). BeOS, Plan9 and QNX also have it. SGI's IRIX 6.4 and
-above also have a device filesystem.
+FreeBSD has a devfs implementation. Solaris and AIX each have a
+pseudo-devfs (something akin to scsidev but for all devices, with some
+unspecified kernel support). BeOS, Plan9 and QNX also have it. SGI's
+IRIX 6.4 and above also have a device filesystem.
While we shouldn't just automatically do something because others do
it, we should not ignore the work of others either. FreeBSD has a lot
@@ -613,6 +618,21 @@
are problems with dealing with symlinks, I'm suspicious of the level
of security offered in any case.
+A better solution is to install util-linux-2.10.h or later, which
+fixes a bug with ttyname handling in the login programme. Then append
+the following lines to your /etc/securetty file:
+
+vc/1
+vc/2
+vc/3
+vc/4
+vc/5
+vc/6
+vc/7
+vc/8
+
+This will not weaken security.
+
XFree86
While not essential, it's probably a good idea to upgrade to XFree86
4.0, as patches went in to make it more devfs-friendly. If you don't,
@@ -627,17 +647,25 @@
# file classes -- these are regular expressions
-=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
-+=tty[0-9][0-9]* [0-9][0-9]* :[0-9]\.[0-9] :[0-9]
++=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
# device classes -- these are shell-style globs
=/dev/fd[0-1]*
+If the patch does not apply, then change the line:
+
+=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
+
+with:
+
+=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
+
Disable devpts
I've had a report of devpts mounted on /dev/pts not working
correctly. Since devfs will also manage /dev/pts, there is no
need to mount devpts as well. You should either edit your
-/etc/fstab so devpts is not mounted, or disable devfs from
+/etc/fstab so devpts is not mounted, or disable devpts from
your kernel configuration.
Unsupported drivers
@@ -664,15 +692,23 @@
The Kernel
Finally, you need to make sure devfs is compiled into your
-kernel. Set CONFIG_DEVFS_FS=y and recompile your kernel. Next, you
-need to make sure devfs is mounted. The best solution is to pass
-devfs=mount at the kernel boot command line. You can edit
-/etc/lilo.conf and add the line:
-
-append = "devfs=mount"
+kernel. Set CONFIG_DEVFS_FS=y and CONFIG_DEVFS_MOUNT=y and recompile
+your kernel. At boot, devfs will be mounted onto /dev.
-
-This will make the kernel mount devfs at boot time onto /dev.
+If you encounter problems booting (for example if you forgot a
+configuration step), you can pass devfs=nomount at the kernel
+boot command line. This will prevent the kernel from mounting devfs at
+boot time onto /dev.
+
+In general, a kernel built with CONFIG_DEVFS_FS=y but without mounting
+devfs onto /dev is completely safe, and requires no
+configuration changes. One exception to take note of is when
+LABEL= directives are used in /etc/fstab. In this
+case you will be unable to boot properly. This is because the
+mount(8) programme uses /proc/partitions as part of
+the volume label search process, and the device names it finds are not
+available, because setting CONFIG_DEVFS_FS=y changes the names in
+/proc/partitions, irrespective of whether devfs is mounted.
Now you've finished all the steps required. You're now ready to boot
your shiny new kernel. Enjoy.
@@ -701,7 +737,7 @@
permissions. It may be configured to record changes in permissions and
will save them in a database (in fact a directory tree), and restore
these upon boot. This is an efficient method and results in immediate
-saving of current permissions (unlike the tar approach, which save
+saving of current permissions (unlike the tar approach, which saves
permissions at some unspecified future time).
The default configuration file supplied with devfsd has config entries
@@ -745,8 +781,11 @@
+
add the following lines to your /etc/devfsd.conf file:
+REGISTER ^pt[sy]/.* IGNORE
+CHANGE ^pt[sy]/.* IGNORE
REGISTER .* COPY /dev-state/$devname $devpath
CHANGE .* COPY $devpath /dev-state/$devname
CREATE .* COPY $devpath /dev-state/$devname
@@ -758,6 +797,17 @@
+Permissions database stored in normal directory
+
+If you are using an older kernel which doesn't support VFS binding,
+then you won't be able to have the permissions database in a
+mounted-over /dev. However, you can still use a regular
+directory to store the database. The sample /etc/devfsd.conf
+file above may still be used. You will need to create the
+/dev-state directory prior to installing devfsd. If you have
+old permissions in /dev, then just copy the device nodes over
+to the new directory.
+
Dealing with drivers without devfs support
@@ -910,13 +960,48 @@
configuration file is installed, which is used by the MODLOAD
action. This should be sufficient for most configurations. If you
require further configuration, edit your /etc/modules.conf
-file.
+file. The way module autoloading work with devfs is:
+
+
+a process attempts to lookup a device node (e.g. /dev/fred)
+
+
+if that device node does not exist, the full pathname is passed to
+devfsd as a string
+
+
+devfsd will pass the string to the modprobe programme (provided the
+configuration line shown above is present), and specifies that
+/etc/modules.devfs is the configuration file
+
+
+/etc/modules.devfs includes /etc/modules.conf to
+access local configurations
+
+modprobe will search it's configuration files, looking for an alias
+that translates the pathname into a module name
+
+
+the translated pathname is then used to load the module.
+
+
+If you wanted a lookup of /dev/fred to load the
+mymod module, you would require the following configuration
+line in /etc/modules.conf:
+
+alias /dev/fred mymod
+
+The /etc/modules.devfs configuration file provides many such
+aliases for standard device names. If you look closely at this file,
+you will note that some modules require multiple alias configuration
+lines. This is required to support module autoloading for old and new
+device names.
Mounting root off a devfs device
If you wish to mount root off a devfs device when you pass the
-"devfs=only" boot option, then you need to pass in the "root="
-option to the kernel when booting. If you use LILO, then you must have
-this in lilo.conf:
+"devfs=only" boot option, then you need to pass in the
+"root=" option to the kernel when booting. If you use
+LILO, then you must have this in lilo.conf:
append = "root="
@@ -926,12 +1011,12 @@
root =
-then LILO will determine the device number of and will write
-that device number into a special place in the kernel image before
-starting the kernel, and the kernel will use that device number to
-mount the root filesystem. So, using the "append" variety ensures that
-LILO passes the root filesystem device as a string, which devfs can
-then use.
+then LILO will determine the device number of and will
+write that device number into a special place in the kernel image
+before starting the kernel, and the kernel will use that device number
+to mount the root filesystem. So, using the "append" variety ensures
+that LILO passes the root filesystem device as a string, which devfs
+can then use.
Note that this isn't an issue if you don't pass "devfs=only".
@@ -1067,7 +1152,8 @@
-------- -------- -----------
/dev/tts/{0,1,...} /dev/ttyS{0,1,...} Serial ports
/dev/cua/{0,1,...} /dev/cua{0,1,...} Call out devices
- /dev/vc/{0,1,...} /dev/tty{1...63} Virtual consoles
+ /dev/vc/0 /dev/tty Current virtual console
+ /dev/vc/{1,2,...} /dev/tty{1...63} Virtual consoles
/dev/vcc/{0,1,...} /dev/vcs{1...63} Virtual consoles
/dev/pty/m{0,1,...} /dev/ptyp?? PTY masters
/dev/pty/s{0,1,...} /dev/ttyp?? PTY slaves
@@ -1109,7 +1195,8 @@
cases, the kernel-supplied naming scheme is quite convenient, so
devfsd does not provide another naming scheme. The convenience names
that devfsd creates are in fact the same names as the original devfs
-kernel patch created (before Linus mandated the Big Name Change).
+kernel patch created (before Linus mandated the Big Name
+Change). These are referred to as "new compatibility entries".
In order to configure devfsd to create these convenience names, the
following lines should be placed in your /etc/devfsd.conf:
@@ -1198,6 +1285,24 @@
would appear as /dev/xd/c0t0.
+Old Compatibility Names
+
+The old compatibility names are the legacy device names, such as
+/dev/hda, /dev/sda, /dev/rtc and so on.
+Devfsd can be configured to create compatibility symlinks so that you
+may continue to use the old names in your configuration files and so
+that old applications will continue to function correctly.
+
+In order to configure devfsd to create these legacy names, the
+following lines should be placed in your /etc/devfsd.conf:
+
+REGISTER .* MKOLDCOMPAT
+UNREGISTER .* RMOLDCOMPAT
+
+This will cause devfsd to create (and destroy) symbolic links which
+point to the kernel-supplied names.
+
+
SCSI Host Probing Issues
Devfs allows you to identify SCSI discs based in part on SCSI host
@@ -1220,14 +1325,15 @@
means that devices connected to
-- first aha1542 controller - will be c0b#t#u#
-- first parallel port ZIP - will be c1b#t#u#
-- second aha1542 controller - will be c2b#t#u#
-- first NCR53C7xx controller - will be c4b#t#u#
-- any extra controller - will be c5b#t#u#, c6b#t#u#, etc
+- first aha1542 controller - will be /dev/scsi/host0/bus#/target#/lun#
+- first parallel port ZIP - will be /dev/scsi/host1/bus#/target#/lun#
+- second aha1542 controller - will be /dev/scsi/host2/bus#/target#/lun#
+- first NCR53C7xx controller - will be /dev/scsi/host4/bus#/target#/lun#
+- any extra controller - will be /dev/scsi/host5/bus#/target#/lun#,
+ /dev/scsi/host6/bus#/target#/lun#, etc
- if any of above controllers will not be found - the reserved names will
not be used by any other device.
-- c3b#t#u# names will never be used
+- /dev/scsi/host3/bus#/target#/lun# names will never be used
You can use ',' instead of ':' as the separator character if you
@@ -1343,6 +1449,7 @@
Making things work
Alternatives to devfs
+What I don't like about devfs
@@ -1518,6 +1625,54 @@
+
+What I don't like about devfs
+
+Here are some common complaints about devfs, and some suggestions and
+solutions that may make it more palatable for you. I can't please
+everybody, but I do try :-)
+
+I hate the naming scheme
+
+First, remember that no naming scheme will please everybody. You hate
+the scheme, others love it. Who's to say who's right and who's wrong?
+Ultimately, the person who writes the code gets to choose, and what
+exists now is a combination of the the choices made by the
+devfs author and the
+kernel maintainer (Linus).
+
+However, not all is lost. If you want to create your own naming
+scheme, it is a simple matter to write a standalone script, hack
+devfsd, or write a script called by devfsd. You can create whatever
+naming scheme you like.
+
+Further, if you want to remove all traces of the devfs naming scheme
+from /dev, you can mount devfs elsewhere (say
+/devfs) and populate /dev with links into
+/devfs. This population can be automated using devfsd if you
+wish.
+
+You can even use the VFS binding facility to make the links, rather
+than using symbolic links. This way, you don't even have to see the
+"destination" of these symbolic links.
+
+Devfs puts policy into the kernel
+
+There's already policy in the kernel. Device numbers are in fact
+policy (why should the kernel dictate what device numbers I use?).
+Face it, some policy has to be in the kernel. The real difference
+between device names as policy and device numbers as policy is that
+no one will use device numbers directly, because device
+numbers are devoid of meaning to humans and are ugly. At least with
+the devfs device names, (even though you can add your own naming
+scheme) some people will use the devfs-supplied names directly. This
+offends some people :-)
+
+Devfs is bloatware
+
+This is not even remotely true. As shown above,
+both code and data size are quite modest.
+
-----------------------------------------------------------------------------
@@ -1550,6 +1705,14 @@
http://johannes.erdfelt.com/hotswap.txt.
Johannes has promised a HTML version will follow.
+
+
+I presented an invited
+paper
+at the
+
+2nd Annual Storage Management Workshop held in Miamia, Florida,
+U.S.A. in October 2000.
diff -u --recursive --new-file v2.4.5/linux/Documentation/filesystems/hpfs.txt linux/Documentation/filesystems/hpfs.txt
--- v2.4.5/linux/Documentation/filesystems/hpfs.txt Fri Jul 28 12:50:51 2000
+++ linux/Documentation/filesystems/hpfs.txt Mon Jun 11 19:15:27 2001
@@ -1,5 +1,5 @@
-Read/Write HPFS 2.00
-1998-1999, Mikulas Patocka
+Read/Write HPFS 2.05
+1998-2001, Mikulas Patocka
email: mikulas@artax.karlin.mff.cuni.cz
homepage: http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
@@ -269,6 +269,20 @@
Removed a lot of redundant code
2.00 Fixed a bug in rename (it was there since 1.96)
Better anti-fragmentation strategy
+2.01 Fixed problem with directory listing over NFS
+ Directory lseek now checks for proper parameters
+ Fixed race-condition in buffer code - it is in all filesystems in Linux;
+ when reading device (cat /dev/hda) while creating files on it, files
+ could be damaged
+2.02 Woraround for bug in breada in Linux. breada could cause accesses beyond
+ end of partition
+2.03 Char, block devices and pipes are correctly created
+ Fixed non-crashing race in unlink (Alexander Viro)
+ Now it works with Japanese version of OS/2
+2.04 Fixed error when ftruncate used to extend file
+2.05 Fixed crash when got mount parameters without =
+ Fixed crash when allocation of anode failed due to full disk
+ Fixed some crashes when block io or inode allocation failed
vim: set textwidth=80:
diff -u --recursive --new-file v2.4.5/linux/Documentation/filesystems/udf.txt linux/Documentation/filesystems/udf.txt
--- v2.4.5/linux/Documentation/filesystems/udf.txt Thu Mar 2 11:17:32 2000
+++ linux/Documentation/filesystems/udf.txt Mon Jun 11 19:15:27 2001
@@ -1,10 +1,10 @@
*
* ./Documentation/filesystems/udf.txt
*
-UDF Filesystem version 0.9.1
+UDF Filesystem version 0.9.4
If you encounter problems with reading UDF discs using this driver,
-please report them to linux_udf@hootie.lvld.hp.com, which is the
+please report them to linux_udf@hpesjro.fc.hp.com, which is the
developer's list.
Write support requires a block driver which supports writing. The current
@@ -23,7 +23,8 @@
noadinicb Don't embed data in the inode
shortad Use short ad's
longad Use long ad's (default)
- strict Set strict conformance (unused)
+ strict Set strict conformance
+ iocharset= Set the NLS character set
The remaining are for debugging and disaster recovery:
diff -u --recursive --new-file v2.4.5/linux/Documentation/java.txt linux/Documentation/java.txt
--- v2.4.5/linux/Documentation/java.txt Thu Jul 1 10:47:08 1999
+++ linux/Documentation/java.txt Wed Jun 27 13:52:16 2001
@@ -1,4 +1,4 @@
- Java(tm) Binary Kernel Support for Linux v1.02
+ Java(tm) Binary Kernel Support for Linux v1.03
----------------------------------------------
Linux beats them ALL! While all other OS's are TALKING about direct
@@ -30,6 +30,8 @@
(you should really have read binfmt_misc.txt now):
support for Java applications:
':Java:M::\xca\xfe\xba\xbe::/usr/local/bin/javawrapper:'
+ support for executable Jar files:
+ ':ExecutableJAR:E::jar::/usr/local/bin/jarwrapper:'
support for Java Applets:
':Applet:E::html::/usr/bin/appletviewer:'
or the following, if you want to be more selective:
@@ -343,7 +345,15 @@
====================== Cut here ===================
-Now simply chmod +x the .class and/or .html files you want to execute.
+====================== Cut here ===================
+#!/bin/bash
+# /usr/local/java/bin/jarwrapper - the wrapper for binfmt_misc/jar
+
+java -jar $1
+====================== Cut here ===================
+
+
+Now simply chmod +x the .class, .jar and/or .html files you want to execute.
To add a Java program to your path best put a symbolic link to the main
.class file into /usr/bin (or another place you like) omitting the .class
extension. The directory containing the original .class file will be
@@ -369,6 +379,11 @@
./HelloWorld.class
+To execute Java Jar files, simple chmod the *.jar files to include
+the execution bit, then just do
+ ./Application.jar
+
+
To execute Java Applets, simple chmod the *.html files to include
the execution bit, then just do
./Applet.html
@@ -376,5 +391,6 @@
originally by Brian A. Lantz, brian@lantz.com
heavily edited for binfmt_misc by Richard Günther
-new scripts by Colin J. Watson .
+new scripts by Colin J. Watson
+added executable Jar file support by Kurt Huwig
diff -u --recursive --new-file v2.4.5/linux/Documentation/kernel-docs.txt linux/Documentation/kernel-docs.txt
--- v2.4.5/linux/Documentation/kernel-docs.txt Fri Apr 6 10:42:48 2001
+++ linux/Documentation/kernel-docs.txt Thu Jun 28 14:45:07 2001
@@ -3,7 +3,7 @@
Understanding the Linux Kernel.
- Juan-Mariano de Goyeneche < jmseyas@dit.upm.es>
+ Juan-Mariano de Goyeneche
/*
* The latest version of this document may be found at:
@@ -41,7 +41,7 @@
* Title: "The Linux Kernel"
Author: David A. Rusling.
- URL: http://sunsite.unc.edu/linux/LDP/tlk/tlk.html
+ URL: http://www.linuxdoc.org/LDP/tlk/tlk.html
Keywords: everything!, book.
Description: On line, 200 pages book describing most aspects of
the Linux Kernel. Probably, the first reference for beginners.
@@ -57,7 +57,7 @@
* Title: "The Linux Kernel Hackers' Guide"
Author: Michael K.Johnson and others.
- URL: http://khg.redhat.com/HyperNews/get/khg.html
+ URL: http://www.linuxdoc.org/LDP/khg/HyperNews/get/khg.html
Keywords: everything!
Description: No more Postscript book-like version. Only HTML now.
Many people have contributed. The interface is similar to web
@@ -99,15 +99,15 @@
Author: Richard Gooch.
URL: http://www.atnf.csiro.au/~rgooch/linux/vfs.txt
Keywords: VFS, File System, mounting filesystems, opening files,
- dentries,
- dcache. Description: Brief introduction to the Linux Virtual File
- System. What is it, how it works, operations taken when opening a
- file or mounting a file system and description of important data
+ dentries, dcache.
+ Description: Brief introduction to the Linux Virtual File System.
+ What is it, how it works, operations taken when opening a file or
+ mounting a file system and description of important data
structures explaining the purpose of each of their entries.
* Title: "The Linux RAID-1, 4, 5 Code"
Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza.
- URL: http://www.ssc.com/lj/issue44/2391.html
+ URL: http://www2.linuxjournal.com/lj-issues/issue44/2391.html
Keywords: RAID, MD driver.
Description: Linux Journal Kernel Korner article. Here is it's
abstract: "A description of the implementation of the RAID-1,
@@ -117,7 +117,7 @@
* Title: "Dynamic Kernels: Modularized Device Drivers"
Author: Alessandro Rubini.
- URL: http://www.ssc.com/lj/issue23/1219.html
+ URL: http://www2.linuxjournal.com/lj-issues/issue23/1219.html
Keywords: device driver, module, loading/unloading modules,
allocating resources.
Description: Linux Journal Kernel Korner article. Here is it's
@@ -132,8 +132,8 @@
Author: Alessandro Rubini.
URL: http://www2.linuxjournal.com/lj-issues/issue24/1220.html
Keywords: character driver, init_module, clean_up module,
- autodetection,
- mayor number, minor number, file operations, open(), close().
+ autodetection, mayor number, minor number, file operations,
+ open(), close().
Description: Linux Journal Kernel Korner article. Here is it's
abstract: "This article, the second of four, introduces part of
the actual code to create custom module implementing a character
@@ -152,7 +152,7 @@
* Title: "Dissecting Interrupts and Browsing DMA"
Author: Alessandro Rubini and Georg v. Zezschwitz.
- URL: http://www.ssc.com/lj/issue26/interrupt.html
+ URL: http://www2.linuxjournal.com/lj-issues/issue26/1222.html
Keywords: interrupts, irqs, DMA, bottom halves, task queues.
Description: Linux Journal Kernel Korner article. Here is it's
abstract: "This is the fourth in a series of articles about
@@ -187,26 +187,9 @@
simple---most of the complexity (other than talking to the
hardware) involves managing network packets in memory".
- * Title: "An Introduction to the Linux 1.3.x Networking Code"
- Author: Vipul Gupta.
- URL: http://anchor.cs.binghamton.edu/courses/cs628/linux-net.html
- Keywords: files, sk_buffs.
- Description: A short description of files under the net/
- directory. Each file has a one or two lines paragraph description.
- sk_buffs explained, too, with some beautiful pictures. A little
- bit outdated.
-
- * Title: "Linux ioctl() Primer"
- Author: Vipul Gupta.
- URL: http://anchor.cs.binghamton.edu/courses/cs628/ioctl.html
- Keywords: ioctl, socket.
- Description: Little description and examples on the use and
- implementation of the ioctl() system call. A little bit biased
- towards sockets.
-
* Title: "Writing Linux Device Drivers"
Author: Michael K. Johnson.
- URL: http://www.redhat.com/~johnsonm/devices.html
+ URL: http://people.redhat.com/johnsonm/devices.html
Keywords: files, VFS, file operations, kernel interface, character
vs block devices, I/O access, hardware interrupts, DMA, access to
user memory, memory allocation, timers.
@@ -241,7 +224,7 @@
URL:
ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers
.ps.gz
- Keywords: character device drivers, I/O, signals, DMA, accesing
+ Keywords: character device drivers, I/O, signals, DMA, accessing
ports in user space, kernel environment.
Description: 68 pages paper on writing character drivers. A little
bit old (1.993, 1.994) although still useful.
@@ -260,24 +243,17 @@
Notes: This paper was first published in the Proceedings of the
First Dutch International Symposium on Linux, ISBN 90-367-0385-9.
- * Title: "The Second Extended Filesystem"
- Author: Matthew Wilcox.
- URL: http://pocket.fluff.org/~mrw/linux/ext2.txt
- Keywords: ext2, filesystem.
- Description: Description of ext2's blocks, directories, inodes...
- Notes: Seems to be DOWN. Anyone knows another link for it?
-
* Title: "Analysis of the Ext2fs structure"
Author: Louis-Dominique Dubeau.
URL: http://step.polymtl.ca/~ldd/ext2fs/ext2fs_toc.html
Keywords: ext2, filesystem, ext2fs.
Description: Description of ext2's blocks, directories, inodes,
- bitmaps, invariants ...
+ bitmaps, invariants...
* Title: "Journaling the Linux ext2fs Filesystem"
Author: Stephen C. Tweedie.
URL:
- ftp://ftp.uk.linux.org:/pub/linux/sct/fs/jfs/journal-design.ps.gz
+ ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/journal-design.ps.gz
Keywords: ext3, journaling.
Description: Excellent 8-pages paper explaining the journaling
capabilities added to ext2 by the author, showing different
@@ -291,13 +267,13 @@
Description: Kernel functions/structures/variables which changed
from 2.0.x to 2.2.x.
- * Title: "Kernel API changes from 2.2 to 2.3"
+ * Title: "Kernel API changes from 2.2 to 2.4"
Author: Richard Gooch.
URL:
- http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.3.html
- Keywords: 2.3, changes.
+ http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.4.html
+ Keywords: 2.4, changes.
Description: Kernel functions/structures/variables which changed
- from 2.2.x to 2.3.x.
+ from 2.2.x to 2.4.x.
* Title: "Linux Kernel Module Programming Guide"
Author: Ori Pomerantz.
@@ -333,7 +309,9 @@
* Title: "The Kernel Hacking HOWTO"
Author: Various Talented People, and Rusty.
- URL: http://www.samba.org/~netfilter/kernel-hacking-HOWTO.html
+ URL:
+ http://www.lisoleg.net/doc/Kernel-Hacking-HOWTO/kernel-hacking-HOW
+ TO.html
Keywords: HOWTO, kernel contexts, deadlock, locking, modules,
symbols, return conventions.
Description: From the Introduction: "Please understand that I
@@ -345,7 +323,7 @@
routines. This document assumes familiarity with C, and an
understanding of what the kernel is, and how it is used. It was
originally written for the 2.3 kernels, but nearly all of it
- applies to 2.2 too; 2.0 is slightly different. ".
+ applies to 2.2 too; 2.0 is slightly different".
* Title: "ALSA 0.5.0 Developer documentation"
Author: Stephan 'Jumpy' Bartels .
@@ -476,23 +454,103 @@
URL: http://www.linux-mag.com/2000-03/gear_01.html
Keywords: PCI, bus, bus-mastering.
Description: The title says it all.
-
+
* Title: "Linux 2.4 Kernel Internals"
- Author: Tigran Aivazian.
+ Author: Tigran Aivazian and Christoph Hellwig.
URL: http://www.moses.uklinux.net/patches/lki.html
- Keywords: Linux, kernel, VFS, SMP boot
- Description: A little book used for a short training course
- I gave on this subject at VERITAS. Covers building the kernel
- image, booting (including SMP), process management, VFS and more.
+ Keywords: Linux, kernel, booting, SMB boot, VFS, page cache.
+ Description: A little book used for a short training course.
+ Covers building the kernel image, booting (including SMP bootup),
+ process management, VFS and more.
+
+ * Title: "Linux IP Networking. A Guide to the Implementation and
+ Modification of the Linux Protocol Stack."
+ Author: Glenn Herrin.
+ URL:
+ http://kernelnewbies.org/documents/ipnetworking/linuxipnetworking.
+ html
+ Keywords: network, networking, protocol, IP, UDP, TCP, connection,
+ socket, receiving, transmitting, forwarding, routing, packets,
+ modules, /proc, sk_buff, FIB, tags.
+ Description: Excellent paper devoted to the Linux IP Networking,
+ explaining anything from the kernel's to the user space
+ configuration tools' code. Very good to get a general overview of
+ the kernel networking implementation and understand all steps
+ packets follow from the time they are received at the network
+ device till they are delivered to applications. The studied kernel
+ code is from 2.2.14 version. Provides code for a working packet
+ dropper example.
+
+ * Title: "Get those boards talking under Linux."
+ Author: Alex Ivchenko.
+ URL: http://www.ednmag.com/ednmag/reg/2000/06222000/13df2.htm
+ Keywords: data-acquisition boards, drivers, modules, interrupts,
+ memory allocation.
+ Description: Article written for people wishing to make their data
+ acquisition boards work on their GNU/Linux machines. Gives a basic
+ overview on writting drivers, from the naming of functions to
+ interrupt handling.
+ Notes: Two-parts article. Part II is at
+ http://www.ednmag.com/ednmag/reg/2000/07062000/14df.htm
+
+ * Title: "Linux PCMCIA Programmer's Guide"
+ Author: David Hinds.
+ URL: http://pcmcia-cs.sourceforge.net/ftp/doc/PCMCIA-PROG.html
+ Keywords: PCMCIA.
+ Description: "This document describes how to write kernel device
+ drivers for the Linux PCMCIA Card Services interface. It also
+ describes how to write user-mode utilities for communicating with
+ Card Services.
+
+ * Title: "The Linux Kernel NFSD Implementation"
+ Author: Neil Brown.
+ URL:
+ http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/nfsd.html
+ Keywords: knfsd, nfsd, NFS, RPC, lockd, mountd, statd.
+ Description: The title says it all.
+ Notes: Covers knfsd's version 1.4.7 (patch against 2.2.7 kernel).
+
+ * Title: "A Linux vm README"
+ Author: Kanoj Sarcar.
+ URL: http://reality.sgi.com/kanoj_engr/vm229.html
+ Keywords: virtual memory, mm, pgd, vma, page, page flags, page
+ cache, swap cache, kswapd.
+ Description: Telegraphic, short descriptions and definitions
+ relating the Linux virtual memory implementation.
+
+ * Title: "(nearly) Complete Linux Loadable Kernel Modules. The
+ definitive guide for hackers, virus coders and system
+ administrators."
+ Author: pragmatic/THC.
+ URL: http://packetstorm.securify.com/groups/thc/LKM_HACKING.html
+ Keywords: syscalls, intercept, hide, abuse, symbol table.
+ Description: Interesting paper on how to abuse the Linux kernel in
+ order to intercept and modify syscalls, make
+ files/directories/processes invisible, become root, hijack ttys,
+ write kernel modules based virus... and solutions for admins to
+ avoid all those abuses.
+ Notes: For 2.0.x kernels. Gives guidances to port it to 2.2.x
+ kernels. Also available in txt format at
+ http://www.blacknemesis.org/hacking/txt/cllkm.txt
BOOKS: (Not on-line)
* Title: "Linux Device Drivers"
Author: Alessandro Rubini.
- Publisher: O'Reilly &Associates.
+ Publisher: O'Reilly & Associates.
Date: 1998.
+ Pages: 439.
ISBN: 1-56592-292-1
+ * Title: "Linux Device Drivers, 2nd Edition"
+ Author: Alessandro Rubini and Jonathan Corbet.
+ Publisher: O'Reilly & Associates.
+ Date: 2001.
+ Pages: 586.
+ ISBN: 0-59600-008-1
+ Notes: Further information in
+ http://www.oreilly.com/catalog/linuxdrive2/
+
* Title: "Linux Kernel Internals"
Author: Michael Beck.
Publisher: Addison-Wesley.
@@ -580,8 +638,26 @@
Notes: Though not being directly about Linux, Linux aims to be
POSIX. Good reference.
+ * Title: "Understanding the Linux Kernel"
+ Author: Daniel P. Bovet and Marco Cesati.
+ Publisher: O'Reilly & Associates, Inc..
+ Date: 2000.
+ Pages: 702.
+ ISBN: 0-596-00002-2
+ Notes: Further information in
+ http://www.oreilly.com/catalog/linuxkernel/
+
MISCELLANEOUS:
+ * Name: linux/Documentation
+ Author: Many.
+ URL: Just look inside your kernel sources.
+ Keywords: anything, DocBook.
+ Description: Documentation that comes with the kernel sources,
+ inside the Documentation directory. Some pages from this document
+ (including this document itself) have been moved there, and might
+ be more up to date than the web version.
+
* Name: "Linux Source Driver"
URL: http://lsd.linux.cz
Keywords: Browsing source code.
@@ -593,6 +669,16 @@
and variables) and LSD can generate patches for you on the fly
(files, directories or kernel)".
+ * Name: "Linux Kernel Source Reference"
+ Author: Thomas Graichen.
+ URL: http://innominate.org/~graichen/projects/lksr/
+ Keywords: CVS, web, cvsweb, browsing source code.
+ Description: Web interface to a CVS server with the kernel
+ sources. "Here you can have a look at any file of the Linux kernel
+ sources of any version starting from 1.0 up to the (daily updated)
+ current version available. Also you can check the differences
+ between two versions of a file".
+
* Name: "Cross-Referencing Linux"
URL: http://lxr.linux.no/source/
Keywords: Browsing source code.
@@ -608,7 +694,7 @@
produced during the week. Published every Thursday.
* Name: "Kernel Traffic"
- URL: http://kt.zork.net
+ URL: http://kt.zork.net/kernel-traffic/
Keywords: linux-kernel mailing list, weekly kernel news.
Description: Weekly newsletter covering the most relevant
discussions of the linux-kernel mailing list.
@@ -622,10 +708,7 @@
too.
* Name: "New linux-kernel Mailing List FAQ"
- URL: Original site:
- http://www.altern.org/andrebalsa/doc/lkml-faq.html
- URL: U.S. mirror site:
- http://www.ececs.uc.edu/~rreilova/linux/lkml-faq.html
+ URL: http://www.tux.org/lkml/
Keywords: linux-kernel mailing list FAQ.
Description: linux-kernel is a mailing list for developers to
communicate. This FAQ builds on the previous linux-kernel mailing
@@ -636,34 +719,34 @@
* Name: "Linux Virtual File System"
Author: Peter J. Braam.
- URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs
+ URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs/
Keywords: slides, VFS, inode, superblock, dentry, dcache.
Description: Set of slides, presumably from a presentation on the
Linux VFS layer. Covers version 2.1.x, with dentries and the
dcache.
- * Name: "Gary's Enciclopedia - The Linux Kernel"
+ * Name: "Gary's Encyclopedia - The Linux Kernel"
Author: Gary (I suppose...).
URL: http://members.aa.net/~swear/pedia/kernel.html
Keywords: links, not found here?.
- Description: Gary's Enciclopedia exists to allow the rapid finding
+ Description: Gary's Encyclopedia exists to allow the rapid finding
of documentation and other information of interest to GNU/Linux
users. It has about 4000 links to external pages in 150 major
categories. This link is for kernel-specific links, documents,
- sites... Look there if you could not find here whar you were
+ sites... Look there if you could not find here what you were
looking for.
* Name: "The home page of Linux-MM"
Author: The Linux-MM team.
- URL: http://www.linux.eu.org/Linux-MM/
+ URL: http://linux-mm.org/
Keywords: memory management, Linux-MM, mm patches, TODO, docs,
mailing list.
- Description: Site devoted to Linux Memory Mangement development.
+ Description: Site devoted to Linux Memory Management development.
Memory related patches, HOWTOs, links, mm developers... Don't miss
it if you are interested in memory management development!
* Name: "Kernel Newbies IRC Channel"
- URL: http://www.surriel.com/kernelnewbies.shtml
+ URL: http://www.kernelnewbies.org
Keywords: IRC, newbies, channel, asking doubts.
Description: #kernelnewbies on irc.openprojects.net. From the web
page: "#kernelnewbies is an IRC network dedicated to the 'newbie'
@@ -672,7 +755,8 @@
professional kernel hackers that want to help less seasoned kernel
people. [...] #kernelnewbies is on the Open Projects IRC Network,
try irc.openprojects.net or irc..openprojects.net as your
- server and then /join #kernelnewbies".
+ server and then /join #kernelnewbies". It also hosts articles,
+ documents, FAQs...
* Name: "linux-kernel mailing list archives and search engines"
URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html
@@ -683,4 +767,4 @@
you have a better/another one, please let me know.
_________________________________________________________________
- Document last updated on Thu Jun 1 21:58:18 CEST 2000DATE$
+ Document last updated on Thu Jun 28 15:09:39 CEST 2001
diff -u --recursive --new-file v2.4.5/linux/Documentation/kernel-parameters.txt linux/Documentation/kernel-parameters.txt
--- v2.4.5/linux/Documentation/kernel-parameters.txt Wed Apr 18 11:49:11 2001
+++ linux/Documentation/kernel-parameters.txt Wed Jun 20 11:21:33 2001
@@ -455,6 +455,10 @@
lastbus=N [IA-32] Scan all buses till bus #N. Can be useful
if the kernel is unable to find your secondary buses
and you want to tell it explicitly which ones they are.
+ assign-busses [IA-32] Always assign all PCI bus
+ numbers ourselves, overriding
+ whatever the firmware may have
+ done.
pd. [PARIDE]
diff -u --recursive --new-file v2.4.5/linux/Documentation/networking/TODO linux/Documentation/networking/TODO
--- v2.4.5/linux/Documentation/networking/TODO Thu Apr 19 13:43:40 2001
+++ linux/Documentation/networking/TODO Mon Jul 2 14:03:04 2001
@@ -14,12 +14,5 @@
* Add ETHTOOL_GDRVINFO ioctl support to all ethernet drivers.
-
-
-To-do items to consider for network drivers
--------------------------------------------
-* Make a single function which handles the ethtool ioctl for
- most MII-compatible devices? Ideally the driver would pass function
- pointers to its existing mdio_{read,write} functions when calling the
- generic ioctl handler.
+* dmfe PCI DMA is totally wrong and only works on x86
diff -u --recursive --new-file v2.4.5/linux/Documentation/networking/alias.txt linux/Documentation/networking/alias.txt
--- v2.4.5/linux/Documentation/networking/alias.txt Tue Apr 28 14:22:04 1998
+++ linux/Documentation/networking/alias.txt Fri Jun 29 19:38:26 2001
@@ -2,40 +2,43 @@
IP-Aliasing:
============
+IP-aliases are additional IP-adresses/masks hooked up to a base
+interface by adding a colon and a string when running ifconfig.
+This string is usually numeric, but this is not a must.
+
+IP-Aliases are avail if CONFIG_INET (`standard' IPv4 networking)
+is configured in the kernel.
-o For IP aliasing you must have IP_ALIAS support included by static
- linking.
o Alias creation.
- Alias creation is done by 'magic' iface naming: eg. to create a
+ Alias creation is done by 'magic' interface naming: eg. to create a
200.1.1.1 alias for eth0 ...
# ifconfig eth0:0 200.1.1.1 etc,etc....
~~ -> request alias #0 creation (if not yet exists) for eth0
- and routing stuff also ...
- # route add -host 200.1.1.1 dev eth0:0 (if same IP network as
- main device)
-
- # route add -net 200.1.1.0 dev eth0:0 (if completely new network wanted
- for eth0:0)
+
+ The corresponding route is also set up by this command.
+ Please note: The route always points to the base interface.
+
o Alias deletion.
- Also done by shutting the interface down:
+ The alias is removed by shutting the alias down:
# ifconfig eth0:0 down
~~~~~~~~~~ -> will delete alias
-Alias (re-)configuring
+o Alias (re-)configuring
- Aliases are not real devices, but programs` should be able to configure and
+ Aliases are not real devices, but programs should be able to configure and
refer to them as usual (ifconfig, route, etc).
-Relationship with main device
------------------------------
- - the main device is an alias itself like additional aliases and can
- be shut down without deleting other aliases.
+o Relationship with main device
+
+ If the base device is shut down the added aliases will be deleted
+ too.
+
Contact
-------
diff -u --recursive --new-file v2.4.5/linux/Documentation/networking/sk98lin.txt linux/Documentation/networking/sk98lin.txt
--- v2.4.5/linux/Documentation/networking/sk98lin.txt Fri Sep 15 14:34:19 2000
+++ linux/Documentation/networking/sk98lin.txt Mon Jul 2 13:56:40 2001
@@ -1,16 +1,17 @@
-(C)Copyright 1999-2000 SysKonnect.
+(C)Copyright 1999-2001 SysKonnect GmbH.
+All rights reserved
===========================================================================
-sk98lin.txt created 12-Sept-2000
+sk98lin.txt created 28-May-2001
-Readme File for sk98lin.o v3.05
-SK-NET Gigabit Ethernet Adapter SK-98xx Driver for Linux
+Readme File for sk98lin v4.06
+SK-NET Gigabit Ethernet PCI driver for LINUX
This file contains
(1) OVERVIEW
(2) REQUIRED FILES
(3) INSTALLATION
-(4) INCLUSION OF THE ADAPTER AT SYSTEM START
+(4) INCLUSION OF ADAPTER AT SYSTEM START
(5) DRIVER PARAMETERS
(6) LARGE FRAME SUPPORT
(7) TROUBLESHOOTING
@@ -19,13 +20,12 @@
===========================================================================
-
(1) OVERVIEW
============
The sk98lin driver supports the SysKonnect SK-NET Gigabit Ethernet
Adapter SK-98xx family on Linux 2.2.x and above.
-It has been tested with Linux on Intel/x86, ALPHA and UltraSPARC machines.
+It has been tested with Linux on Intel/x86 machines.
From v3.02 on, the driver is integrated in the linux kernel source.
***
@@ -64,8 +64,8 @@
"make modules_install".
Reboot your system.
-4) Load the module manually by entering:
- insmod sk98lin.o
+2) Load the module manually by entering:
+ modprobe sk98lin
If the SysKonnect SK-98xx adapter is installed in your
computer and you have a /proc filesystem, running the command
'more /proc/net/dev' should produce an output containing a
@@ -75,7 +75,7 @@
NOTE 1: If you have more than one SysKonnect SK-98xx adapter, the
adapters will be listed as 'eth0', 'eth1', 'eth2', etc.
- For each adapter, repeat the steps 5) and 6).
+ For each adapter, repeat the steps 3) and 4).
NOTE 2: If you have other Ethernet adapters installed,
your SysKonnect SK-98xx adapter can be mapped to 'eth1' or
'eth2' ...
@@ -84,7 +84,7 @@
for each adapter that is found, containing the
corresponding 'ethX'.
-5) Select an IP address and assign it to the respective adapter by
+3) Select an IP address and assign it to the respective adapter by
entering:
ifconfig eth0
This causes the adapter to connect to the ethernet. The solitary
@@ -99,22 +99,22 @@
NOTE: If you are in doubt about IP addresses, ask your network
administrator for assistance.
-6) Your adapter should now be fully operational.
+4) Your adapter should now be fully operational.
Use 'ping ' to verify the connection to other
computers on your network.
- By entering 'ifconfig', you can check the number of packets sent
- and received by your adapter and additional some other information
- regarding the adapter configuration.
+ By viewing /proc/net/sk98lin/[devicename], you can check some
+ information regarding to the adapter configuration.
+
-7) The driver module can be stopped and unloaded using the following
+5) The driver module can be stopped and unloaded using the following
commands:
ifconfig eth0 down
rmmod sk98lin
***
-(4) INCLUSION OF THE ADAPTER AT SYSTEM START
-============================================
+(4) INCLUSION OF ADAPTER AT SYSTEM START
+========================================
Since a large number of different Linux distributions are
available, we are unable to describe a general installation procedure
@@ -129,7 +129,7 @@
=====================
Parameters can be set at the command line while loading the
-module with 'insmod'. The configuration tools of some distributions
+module with 'modprobe'. 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/modules.conf (or old name: /etc/conf.modules).
@@ -138,12 +138,12 @@
options sk98lin ...
For "...", use the same syntax as described below for the command
-line parameters of insmod.
+line paramaters of modprobe.
You either have to reboot your computer or unload and reload
the driver to activate the new parameters.
The syntax of the driver parameters is:
-insmod sk98lin parameter=value1[,value2[,value3...]]
+modprobe sk98lin parameter=value1[,value2[,value3...]]
value1 is for the first adapter, value2 for the second one etc.
All Parameters are case sensitive, so write them exactly as
@@ -156,7 +156,7 @@
adapter to FULL and on Port A of the second adapter to HALF.
You must enter:
- insmod sk98lin.o AutoNeg_A=On,Off DupCap_A=Full,Half
+ modprobe sk98lin AutoNeg_A=On,Off DupCap_A=Full,Half
NOTE: The number of adapters that can be configured this way is
limited in the driver (file skge.c, constant SK_MAX_CARD_PARAM).
@@ -187,7 +187,7 @@
this port is not "Sense". If autonegotiation is "On", all
three values are possible. If it is "Off", only "Full" and
"Half" are allowed.
- It is useful if your link partner does not support all
+ It is usefull if your link partner does not support all
possible combinations.
- Flow Control
@@ -234,7 +234,7 @@
- RLMT (Redundant Link Management Technology) Mode
Parameter: RlmtMode
- Values: CheckLinkState,CheckLocalPort, CheckSeg
+ Values: CheckLinkState,CheckLocalPort, CheckSeg, DualNet
Default: CheckLinkState
RLMT (the driver part that decides which port to use) knows three
@@ -257,6 +257,13 @@
Ethernet switches installed in your network that have been configured
to use the Spanning Tree protocol.
+-- DualNet - Both ports A and B are used as separate devices at the same
+ time. So if you have a dual port adapter, port A will show up as eth0
+ and port B as eth1. Both ports can be used independend with distinct
+ IP addresses.
+ The preferred port setting is not used. Rlmt is turned off.
+
+
NOTE: The modes CheckLocalPort and CheckSeg are meant to operate in
configurations where a network path between the ports on one
adapter exists. Especially, they are not designed to work where
@@ -269,7 +276,7 @@
Large frames (also called jumbo frames) are now supported by the
driver. This can result in a greatly improved throughput if
-transferring large amounts of data.
+transfering large amounts of data.
To enable large frames, set the MTU (maximum transfer unit)
of the interface to the value you wish (up to 9000). The command
for this is:
@@ -285,7 +292,7 @@
You can switch back to the standard ethernet frame size with:
ifconfig eth0 mtu 1500
-To make this setting persistent, add a script with the 'ifconfig'
+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).
***
@@ -373,11 +380,27 @@
(8) HISTORY
===========
-VERSION 3.05 (In-Kernel version)
+VERSION 4.02 (In-Kernel version)
+New Features:
+- Add Kernel 2.4 changes
+Known limitations:
+- None
+
+VERSION 4.01 (In-Kernel version)
+Problems fixed:
+- Full statistics support for DualNet mode
+Known limitations:
+- None
+
+VERSION 4.00 (In-Kernel version)
Problems fixed:
-- Failed for multiple adapters in kernel 2.4.0
-New features:
-- New versions of several common modules
+- Memory leak found
+New Features:
+- Proc filesystem integration
+- DualNet functionality integrated
+- Rlmt networks added
+Known limitations:
+- statistics partially incorrect in DualNet mode
VERSION 3.04 (In-Kernel version)
Problems fixed:
diff -u --recursive --new-file v2.4.5/linux/Documentation/networking/vortex.txt linux/Documentation/networking/vortex.txt
--- v2.4.5/linux/Documentation/networking/vortex.txt Tue Mar 6 19:13:51 2001
+++ linux/Documentation/networking/vortex.txt Wed Jun 20 11:15:44 2001
@@ -230,6 +230,23 @@
other media types does not occur.
+Transmit error, Tx status register 82
+-------------------------------------
+
+This is a common error which is almost always caused by another host on
+the same network being in full-duplex mode, while this host is in
+half-duplex mode. You need to find that other host and make it run in
+half-duplex mode or fix this host to run in full-duplex mode.
+
+As a last resort, you can force the 3c59x driver into full-duplex mode
+with
+
+ options 3c59x full_duplex=1
+
+but this has to be viewed as a workaround for broken network gear and
+should only really be used for equipment which cannot autonegotiate.
+
+
Additional resources
--------------------
diff -u --recursive --new-file v2.4.5/linux/Documentation/pci.txt linux/Documentation/pci.txt
--- v2.4.5/linux/Documentation/pci.txt Sat May 19 17:43:05 2001
+++ linux/Documentation/pci.txt Thu Jun 28 14:58:05 2001
@@ -62,8 +62,13 @@
deregistration of the driver or when it's manually pulled
out of a hot-pluggable slot). This function always gets
called from process context, so it can sleep.
- suspend, Power management hooks -- called when the device goes to
- resume sleep or is resumed.
+ save_state Save a device's state before it's suspend.
+ suspend Put device into low power state.
+ resume Wake device from low power state.
+ enable_wake Enable device to generate wake events from a low power state.
+
+ (Please see Documentation/power/pci.txt for descriptions
+ of PCI Power Management and the related functions)
The ID table is an array of struct pci_device_id ending with a all-zero entry.
Each entry consists of:
diff -u --recursive --new-file v2.4.5/linux/Documentation/power/pci.txt linux/Documentation/power/pci.txt
--- v2.4.5/linux/Documentation/power/pci.txt Wed Dec 31 16:00:00 1969
+++ linux/Documentation/power/pci.txt Thu Jun 28 14:58:05 2001
@@ -0,0 +1,306 @@
+
+PCI Power Management
+~~~~~~~~~~~~~~~~~~~~
+
+An overview of the concepts and the related functions in the Linux kernel
+
+Patrick Mochel
+
+---------------------------------------------------------------------------
+
+1. Overview
+2. How the PCI Subsystem Does Power Management
+3. PCI Utility Functions
+4. PCI Device Drivers
+5. Resources
+
+1. Overview
+~~~~~~~~~~~
+
+The PCI Power Management Specification was introduced between the PCI 2.1 and
+PCI 2.2 Specifications. It a standard interface for controlling various
+power management operations.
+
+Implementation of the PCI PM Spec is optional, as are several sub-components of
+it. If a device supports the PCI PM Spec, the device will have an 8 byte
+capability field in its PCI configuration space. This field is used to describe
+and control the standard PCI power management features.
+
+The PCI PM spec defines 4 operating states for devices (D0 - D3) and for buses
+(B0 - B3). The higher the number, the less power the device consumes. However,
+the higher the number, the longer the latency is for the device to return to
+an operational state (D0).
+
+Bus power management is not covered in this version of this document.
+
+Note that all PCI devices support D0 and D3 by default, regardless of whether or
+not they implement any of the PCI PM spec.
+
+The possible state transitions that a device can undergo are:
+
++---------------------------+
+| Current State | New State |
++---------------------------+
+| D0 | D1, D2, D3|
++---------------------------+
+| D1 | D2, D3 |
++---------------------------+
+| D2 | D3 |
++---------------------------+
+| D1, D2, D3 | D0 |
++---------------------------+
+
+Note that when the system is entering a global suspend state, all devices will be
+placed into D3 and when resuming, all devices will be placed into D0. However,
+when the system is running, other state transitions are possible.
+
+2. How The PCI Subsystem Handles Power Management
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The PCI suspend/resume functionality is accessed indirectly via the Power Management
+subsystem. At boot, the PCI driver registers a power management callback with that layer.
+Upon entering a suspend state, the PM layer iterates through all of its registered
+callbacks. This currently takes place only during APM state transitions.
+
+Upon going to sleep, the PCI subsystem walks its device tree twice. Both times, it does
+a depth first walk of the device tree. The first walk saves each of the device's state
+and checks for devices that will prevent the system from entering a global power state.
+The next walk then places the devices in a low power state.
+
+The first walk allows a graceful recovery in the event of a failure, since none of the
+devices have actually been powered down.
+
+In both walks, in particular the second, all children of a bridge are touched before the
+actual bridge itself. This allows the bridge to retain power while its children are being
+accessed.
+
+Upon resuming from sleep, just the opposite must be true: all bridges must be powered on
+and restored before their children are powered on. This is easily accomplished with a
+breadth-first walk of the PCI device tree.
+
+
+3. PCI Utility Functions
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+These are helper functions designed to be called by individual device drivers.
+Assuming that a device behaves as advertised, these should be applicable in most
+cases. However, results may vary.
+
+Note that these functions are never implicitly called for the driver. The driver is always
+responsible for deciding when and if to call these.
+
+
+pci_save_state
+--------------
+
+Usage:
+ pci_save_state(dev, buffer);
+
+Description:
+ Save first 64 bytes of PCI config space. Buffer must be allocated by caller.
+
+
+pci_restore_state
+-----------------
+
+Usage:
+ pci_restore_state(dev,buffer);
+
+Description:
+ Restore previously saved config space. (First 64 bytes only);
+
+ If buffer is NULL, then restore what information we know about the device
+ from bootup: BARs and interrupt line.
+
+
+pci_set_power_state
+-------------------
+
+Usage:
+ pci_set_power_state(dev,state);
+
+Description:
+ Transition device to low power state using PCI PM Capabilities registers.
+
+ Will fail under one of the following conditions:
+ - If state is less than current state, but not D0 (illegal transition)
+ - Device doesn't support PM Capabilities
+ - Device does not support requested state
+
+
+pci_enable_wake
+---------------
+
+Usage:
+ pci_enable_wake(dev,state,enable);
+
+Description:
+ Enable device to generate PME# during low power state using PCI PM
+ Capabilities.
+
+ Checks whether if device supports generating PME# from requested state and fail
+ if it does not, unless enable == 0 (request is to disable wake events, which
+ is implicit if it doesn't even support it in the first place).
+
+ Note that the PMC Register in the device's PM Capabilties has a bitmask of
+ the states it supports generating PME# from. D3hot is bit 3 and D3cold is bit
+ 4. So, while a value of 4 as the state may not seem semantically correct, it
+ is.
+
+
+4. PCI Device Drivers
+~~~~~~~~~~~~~~~~~~~~~
+
+These functions are intended for use by individual drivers, and are defined in
+struct pci_driver:
+
+ int (*save_state) (struct pci_dev *dev, u32 state);
+ int (*suspend)(struct pci_dev *dev, u32 state);
+ int (*resume) (struct pci_dev *dev);
+ int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
+
+
+save_state
+----------
+
+Usage:
+
+if (dev->driver && dev->driver->save_state)
+ dev->driver->save_state(dev,state);
+
+The driver should use this callback to save device state. It should take into
+account the current state of the device and the requested state in order to avoid
+any unnecessary operations.
+
+For example, a video card that supports all 4 states (D0-D3), all controller context
+is preserved when entering D1, but the screen is placed into a low power state
+(blanked).
+
+The driver can also interpret this function as a notification that it may be entering
+a sleep state in the near future. If it knows that the device cannot enter the
+requested state, either because of lack of support for it, or because the devices is
+middle of some critical operation, then it should fail.
+
+This function should not be used to set any state in the device or the driver because
+the device may not actually enter the sleep state (e.g. another driver later causes
+causes a global state transition to fail).
+
+Note that in intermediate low power states, a device's I/O and memory spaces may be
+disabled and may not be available in subsequent transitions to lower power states.
+
+
+suspend
+-------
+
+Usage:
+
+if (dev->driver && dev->driver->suspend)
+ dev->driver->suspend(dev,state);
+
+A driver uses this function to actually transition the device into a low power
+state. This may include disabling I/O, memory and bus-mastering, as well as physically
+transitioning the device to a lower power state.
+
+Bus mastering may be disabled by doing:
+
+pci_disable_device(dev);
+
+For devices that support the PCI PM Spec, this may be used to set the device's power
+state:
+
+pci_set_power_state(dev,state);
+
+The driver is also responsible for disabling any other device-specific features
+(e.g blanking screen, turning off on-card memory, etc).
+
+The driver should be sure to track the current state of the device, as it may obviate
+the need for some operations.
+
+The driver should update the current_state field in its pci_dev structure in this
+function.
+
+resume
+------
+
+Usage:
+
+if (dev->driver && dev->driver->suspend)
+ dev->driver->resume(dev)
+
+The resume callback may be called from any power state, and is always meant to
+transition the device to the D0 state.
+
+The driver is responsible for reenabling any features of the device that had
+been disabled during previous suspend calls and restoring all state that was saved
+in previous save_state calls.
+
+If the device is currently in D3, it must be completely reinitialized, as it must be
+assumed that the device has lost all of its context (even that of its PCI config
+space). For almost all current drivers, this means that the initialization code that
+the driver does at boot must be separated out and called again from the resume
+callback. Note that some values for the device may not have to be probed for this
+time around if they are saved before entering the low power state.
+
+If the device supports the PCI PM Spec, it can use this to physically transition the
+device to D0:
+
+pci_set_power_state(dev,0);
+
+Note that if the entire system is transitioning out of a global sleep state, all
+devices will be placed in the D0 state, so this is not necessary. However, in the
+event that the device is placed in the D3 state during normal operation, this call
+is necessary. It is impossible to determine which of the two events is taking place
+in the driver, so it is always a good idea to make that call.
+
+The driver should take note of the state that it is resuming from in order to ensure
+correct (and speedy) operation.
+
+The driver should update the current_state field in its pci_dev structure in this
+function.
+
+
+enable_wake
+-----------
+
+Usage:
+
+if (dev->driver && dev->driver->enable_wake)
+ dev->driver->enable_wake(dev,state,enable);
+
+This callback is generally only relevant for devices that support the PCI PM
+spec and have the ability to generate a PME# (Power Management Event Signal)
+to wake the system up. (However, it is possible that a device may support
+some non-standard way of generating a wake event on sleep.)
+
+Bits 15:11 of the PMC (Power Mgmt Capabilities) Register in a device's
+PM Capabilties describe what power states the device supports generating a
+wake event from:
+
++------------------+
+| Bit | State |
++------------------+
+| 15 | D0 |
+| 14 | D1 |
+| 13 | D2 |
+| 12 | D3hot |
+| 11 | D3cold |
++------------------+
+
+A device can use this to enable wake events:
+
+ pci_enable_wake(dev,state,enable);
+
+Note that to enable PME# from D3cold, a value of 4 should be passed to
+pci_enable_wake (since it uses an index into a bitmask). If a driver gets
+a request to enable wake events from D3, two calls should be made to
+pci_enable_wake (one for both D3hot and D3cold).
+
+
+5. Resources
+~~~~~~~~~~~~
+
+PCI Local Bus Specification
+PCI Bus Power Management Interface Specification
+
+ http://pcisig.org
+
diff -u --recursive --new-file v2.4.5/linux/Documentation/sound/README.OSS linux/Documentation/sound/README.OSS
--- v2.4.5/linux/Documentation/sound/README.OSS Wed Apr 11 19:02:27 2001
+++ linux/Documentation/sound/README.OSS Tue Jun 12 10:56:11 2001
@@ -17,7 +17,7 @@
document can be still interesting and very helpful.
[ File edited 17.01.1999 - Riccardo Facchetti ]
-[ Edited miroSOUND section 17.09.2000 - Robert Siemer ]
+[ Edited miroSOUND section 19.04.2001 - Robert Siemer ]
OSS/Free version 3.8 release notes
----------------------------------
@@ -1327,7 +1327,7 @@
---------
The miroSOUND PCM1-pro, PCM12 and PCM20 radio has been used
-successfully. This card is based on the MAD16, OPL4, and CS4231A chips
+successfully. These cards are based on the MAD16, OPL4, and CS4231A chips
and everything said in the section about MAD16 cards applies here,
too. The only major difference between the PCMxx and other MAD16 cards
is that instead of the mixer in the CS4231 codec a separate mixer
@@ -1337,8 +1337,8 @@
you compile this ACI driver together with the normal MAD16 support
when you use a miroSOUND PCMxx card. The ACI mixer is controlled by
/dev/mixer and the CS4231 mixer by /dev/mixer1 (depends on load
-time). Only in special cases you want to change something on the CS4231
-mixer.
+time). Only in special cases you want to change something regularly on
+the CS4231 mixer.
The miroSOUND PCM12 and PCM20 radio is capable of full duplex
operation (simultaneous PCM replay and recording), which allows you to
@@ -1354,10 +1354,9 @@
miropcm20.o module. Also the 7-band equalizer is integrated
(limited by the OSS-design). Developement has started and maybe
finished for the RDS decoder on this card, too. You will be able to
-read radio text, the program service name, program type and
+read RadioText, the Programme Service name, Programme TYpe and
others. Even the v4l radio module benefits from it with a refined
-strength value. See aci.c, radio-miropcm20.c and rds-miropcm20.c for
-more details.
+strength value. See aci.[ch] and miropcm20*.[ch] for more details.
The following configuration parameters have worked fine for the PCM12
in Markus Kuhn's system, many other configurations might work, too:
diff -u --recursive --new-file v2.4.5/linux/Documentation/usb/se401.txt linux/Documentation/usb/se401.txt
--- v2.4.5/linux/Documentation/usb/se401.txt Wed Dec 31 16:00:00 1969
+++ linux/Documentation/usb/se401.txt Wed Jun 27 13:59:32 2001
@@ -0,0 +1,54 @@
+Linux driver for SE401 based USB cameras
+
+Copyright, 2001, Jeroen Vreeken
+
+
+INTRODUCTION:
+
+The SE401 chip is the used in low-cost usb webcams.
+It is produced by Endpoints Inc. (www.endpoints.com).
+It interfaces directly to a cmos image sensor and USB. The only other major
+part in a se401 based camera is a dram chip.
+
+The following cameras are known to work with this driver:
+
+Aox se401 (non-branded) cameras
+Philips PVCV665 USB VGA webcam 'Vesta Fun'
+Kensington VideoCAM PC Camera Model 67014
+Kensington VideoCAM PC Camera Model 67015
+Kensington VideoCAM PC Camera Model 67016
+Kensington VideoCAM PC Camera Model 67017
+
+
+WHAT YOU NEED:
+
+- USB support
+- VIDEO4LINUX support
+
+More information about USB support for linux can be found at:
+http://www.linux-usb.org
+
+
+MODULE OPTIONS:
+
+When the driver is compiled as a module you can also use the 'flickerless'
+option. With it exposure is limited to values that do not interfere with the
+net frequency. Valid options for this option are 0, 50 and 60. (0=disable,
+50=50hz, 60=60hz)
+
+
+KNOWN PROBLEMS:
+
+The driver works fine with the usb-ohci and uhci host controller drivers,
+the default settings also work with usb-uhci. But sending more then one bulk
+transfer at a time with usb-uhci doesn't work yet.
+Users of usb-ohci and uhci can safely enlarge SE401_NUMSBUF in se401.h in
+order to increase the throughput (and thus framerate).
+
+
+HELP:
+
+The latest info on this driver can be found at:
+http://www.chello.nl/~j.vreeken/se401/
+And questions to me can be send to:
+pe1rxq@amsat.org
diff -u --recursive --new-file v2.4.5/linux/Documentation/usb/usb-serial.txt linux/Documentation/usb/usb-serial.txt
--- v2.4.5/linux/Documentation/usb/usb-serial.txt Mon Mar 19 17:21:54 2001
+++ linux/Documentation/usb/usb-serial.txt Wed Jun 27 13:59:32 2001
@@ -245,6 +245,17 @@
Edgeport/16 Dual
+REINER SCT cyberJack pinpad/e-com USB chipcard reader
+
+ Interface to ISO 7816 compatible contactbased chipcards, e.g. GSM SIMs.
+
+Current status:
+ This is the kernel part of the driver for this USB card reader.
+ There is also a user part for a CT-API driver available. A site
+ for downloading is TBA. For now, you can request it from the
+ maintainer (linux-usb@sii.li).
+
+
Generic Serial driver
If your device is not one of the above listed devices, compatible with
diff -u --recursive --new-file v2.4.5/linux/MAINTAINERS linux/MAINTAINERS
--- v2.4.5/linux/MAINTAINERS Sun May 20 12:11:38 2001
+++ linux/MAINTAINERS Wed Jun 27 13:59:32 2001
@@ -231,7 +231,7 @@
CIRRUS LOGIC GENERIC FBDEV DRIVER
P: Jeff Garzik
M: jgarzik@mandrakesoft.com
-L: linux-fbdev@vuser.vu.union.edu
+L: linux-fbdev-devel@lists.sourceforge.net
S: Odd Fixes
CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
@@ -712,16 +712,11 @@
M: perex@suse.cz
S: Maintained
-ISDN SUBSYSTEM (general)
-P: Fritz Elfert
-M: fritz@isdn4linux.de
-L: isdn4linux@listserv.isdn4linux.de
-W: http://www.isdn4linux.de
-S: Maintained
-
-ISDN SUBSYSTEM (card drivers)
+ISDN SUBSYSTEM
P: Karsten Keil
M: kkeil@suse.de
+P: Kai Germaschewski
+M: kai.germaschewski@gmx.de
L: isdn4linux@listserv.isdn4linux.de
W: http://www.isdn4linux.de
S: Maintained
@@ -764,8 +759,8 @@
M: kaos@ocs.com.au
P: Michael Elizabeth Chastain
M: mec@shout.net
-L: linux-kbuild@torque.net
-W: http://www.kernel.org/pub/linux/kernel/projects/kbuild/
+L: kbuild-devel@lists.sourceforge.net
+W: http://kbuild.sourceforge.net
S: Maintained
KERNEL NFSD
@@ -789,24 +784,30 @@
L: linux-x25@vger.kernel.org
S: Maintained
+LINUX FOR IBM pSERIES (RS/6000)
+P: Paul Mackerras
+M: paulus@au.ibm.com
+W: http://www.ibm.com/linux/ltc/projects/ppc
+S: Supported
+
LINUX FOR POWERPC
-P: Cort Dougan
-M: cort@fsmlabs.com
+P: Paul Mackerras
+M: paulus@samba.org
W: http://www.fsmlabs.com/linuxppcbk.html
-S: Maintained
+S: Supported
LINUX FOR POWER MACINTOSH
-P: Paul Mackerras
-M: paulus@samba.org
+P: Benjamin Herrenschmidt
+M: benh@kernel.crashing.org
W: http://www.linuxppc.org/
L: linuxppc-dev@lists.linuxppc.org
S: Maintained
LOGICAL VOLUME MANAGER
P: Heinz Mauelshagen
-M: linux-LVM@EZ-Darmstadt.Telekom.de
-L: linux-LVM@msede.com
-W: http://linux.msede.com/lvm
+M: mge@sistina.de
+L: linux-LVM@sistina.com
+W: http://www.sistina.com/lvm
S: Maintained
M68K
@@ -1087,9 +1088,9 @@
S: Maintained
RAGE128 FRAMEBUFFER DISPLAY DRIVER
-P: Brad Douglas
-M: brad@neruo.com
-L: linux-fbdev@vuser.vu.union.edu
+P: Ani Joshi
+M: ajoshi@shell.unixbox.com
+L: linux-fbdev-devel@lists.sourceforge.net
S: Maintained
RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
@@ -1169,7 +1170,7 @@
S: Unmaintained
SCSI TAPE DRIVER
-P: Kai Mdkisara
+P: Kai Mäkisara
M: Kai.Makisara@metla.fi
L: linux-scsi@vger.kernel.org
S: Maintained
@@ -1194,12 +1195,6 @@
L: samba@samba.org
S: Maintained
-SMP: (except SPARC)
-P: Linus Torvalds
-M: torvalds@transmeta.com
-L: linux-smp@vger.kernel.org
-S: Maintained
-
SOFTWARE RAID (Multiple Disks) SUPPORT
P: Ingo Molnar
M: mingo@redhat.com
@@ -1347,8 +1342,8 @@
M: bfennema@falcon.csc.calpoly.edu
P: Dave Boynton
M: dave@trylinux.com
-L: linux_udf@hootie.lvld.hp.com
-W: http://www.trylinux.com/projects/udf/index.html
+L: linux_udf@hpesjro.fc.hp.com
+W: http://linux-udf.sourceforge.net
S: Maintained
UMSDOS FILESYSTEM
@@ -1473,6 +1468,12 @@
L: linux-usb-devel@lists.sourceforge.net
S: Maintained
+USB SERIAL CYBERJACK PINPAD/E-COM DRIVER
+M: linux-usb@sii.li
+L: linux-usb-users@lists.sourceforge.net
+L: linux-usb-devel@lists.sourceforge.net
+S: Supported
+
USB MASS STORAGE DRIVER
P: Matthew Dharm
M: mdharm-usb@one-eyed-alien.net
@@ -1571,6 +1572,12 @@
M: middelin@polyware.nl
W: http://www.polyware.nl/~middelin/En/hobbies.html
W: http://www.polyware.nl/~middelin/hobbies.html
+S: Maintained
+
+Bluetooth Subsystem (BlueZ)
+P: Maxim Krasnyansky
+M: maxk@qualcomm.com
+W: http://bluez.sf.net
S: Maintained
THE REST
diff -u --recursive --new-file v2.4.5/linux/Makefile linux/Makefile
--- v2.4.5/linux/Makefile Fri May 25 09:51:33 2001
+++ linux/Makefile Mon Jul 2 17:46:42 2001
@@ -1,6 +1,6 @@
VERSION = 2
PATCHLEVEL = 4
-SUBLEVEL = 5
+SUBLEVEL = 6
EXTRAVERSION =
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
@@ -87,7 +87,8 @@
CPPFLAGS := -D__KERNEL__ -I$(HPATH)
-CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing
+CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
+ -fomit-frame-pointer -fno-strict-aliasing
AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
#
@@ -127,6 +128,7 @@
DRIVERS-m :=
DRIVERS- :=
+DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o
DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o
DRIVERS-y += drivers/char/char.o \
drivers/block/block.o \
@@ -155,7 +157,8 @@
DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
-DRIVERS-$(CONFIG_PCMCIA_NETCARD) += drivers/net/pcmcia/pcmcia_net.o
+DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o
+DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o
DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o
DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a
DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o
@@ -175,8 +178,8 @@
DRIVERS-$(CONFIG_IRDA) += drivers/net/irda/irda.o
DRIVERS-$(CONFIG_I2C) += drivers/i2c/i2c.o
DRIVERS-$(CONFIG_PHONE) += drivers/telephony/telephony.o
-DRIVERS-$(CONFIG_ACPI) += drivers/acpi/acpi.o
DRIVERS-$(CONFIG_MD) += drivers/md/mddev.o
+DRIVERS-$(CONFIG_BLUEZ) += drivers/bluetooth/bluetooth.o
DRIVERS := $(DRIVERS-y)
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/boot/bootloader.lds linux/arch/alpha/boot/bootloader.lds
--- v2.4.5/linux/arch/alpha/boot/bootloader.lds Sun Sep 6 10:34:33 1998
+++ linux/arch/alpha/boot/bootloader.lds Mon Jul 2 14:40:14 2001
@@ -6,7 +6,7 @@
.text : { *(.text) }
_etext = .;
PROVIDE (etext = .);
- .rodata : { *(.rodata) }
+ .rodata : { *(.rodata) *(.rodata.*) }
.data : { *(.data) CONSTRUCTORS }
.got : { *(.got) }
.sdata : { *(.sdata) }
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v2.4.5/linux/arch/alpha/config.in Fri May 25 09:55:36 2001
+++ linux/arch/alpha/config.in Mon Jun 11 19:15:27 2001
@@ -348,6 +348,10 @@
source drivers/usb/Config.in
source drivers/input/Config.in
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ source net/bluetooth/Config.in
+fi
+
mainmenu_option next_comment
comment 'Kernel hacking'
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/alpha_ksyms.c linux/arch/alpha/kernel/alpha_ksyms.c
--- v2.4.5/linux/arch/alpha/kernel/alpha_ksyms.c Fri May 25 09:54:50 2001
+++ linux/arch/alpha/kernel/alpha_ksyms.c Wed Jun 20 11:10:27 2001
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
@@ -100,6 +101,10 @@
EXPORT_SYMBOL(__constant_c_memset);
EXPORT_SYMBOL(copy_page);
EXPORT_SYMBOL(clear_page);
+
+EXPORT_SYMBOL(__delay);
+EXPORT_SYMBOL(__udelay);
+EXPORT_SYMBOL(udelay);
EXPORT_SYMBOL(__direct_map_base);
EXPORT_SYMBOL(__direct_map_size);
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/core_tsunami.c linux/arch/alpha/kernel/core_tsunami.c
--- v2.4.5/linux/arch/alpha/kernel/core_tsunami.c Thu May 24 15:24:37 2001
+++ linux/arch/alpha/kernel/core_tsunami.c Mon Jun 11 19:15:27 2001
@@ -11,7 +11,6 @@
#include
#include
#include
-#include
#include
#include
@@ -21,6 +20,8 @@
#include
#include
#undef __EXTERN_INLINE
+
+#include
#include "proto.h"
#include "pci_impl.h"
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- v2.4.5/linux/arch/alpha/kernel/entry.S Thu May 24 15:20:18 2001
+++ linux/arch/alpha/kernel/entry.S Mon Jun 11 19:15:27 2001
@@ -31,7 +31,7 @@
#define TASK_STATE 0
#define TASK_FLAGS 8
#define TASK_SIGPENDING 16
-#define TASK_ADDR_LIMIT 24
+#define TASK_ADDR_LIMIT 24
#define TASK_EXEC_DOMAIN 32
#define TASK_NEED_RESCHED 40
#define TASK_PTRACE 48
@@ -576,13 +576,15 @@
.align 3
ret_from_sys_call:
cmovne $26,0,$19 /* $19 = 0 => non-restartable */
+#ifdef CONFIG_SMP
ldl $3,TASK_PROCESSOR($8)
- lda $4,irq_stat /* softirq_active */
sll $3,L1_CACHE_SHIFT,$3
+#endif
+ lda $4,irq_stat
+#ifdef CONFIG_SMP
addq $3,$4,$4
- ldq $4,0($4) /* softirq_active[32] + softirq_mask[32] */
- sll $4,32,$3
- and $4,$3,$4
+#endif
+ ldq $4,0($4) /* __softirq_pending */
bne $4,handle_softirq
ret_from_softirq:
ldq $0,SP_OFF($30)
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c
--- v2.4.5/linux/arch/alpha/kernel/irq.c Fri Feb 9 11:29:44 2001
+++ linux/arch/alpha/kernel/irq.c Wed Jun 20 11:10:27 2001
@@ -359,7 +359,9 @@
static void
register_irq_proc (unsigned int irq)
{
+#ifdef CONFIG_SMP
struct proc_dir_entry *entry;
+#endif
char name [MAX_NAMELEN];
if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type))
@@ -389,7 +391,9 @@
void
init_irq_proc (void)
{
+#ifdef CONFIG_SMP
struct proc_dir_entry *entry;
+#endif
int i;
/* create /proc/irq */
@@ -512,7 +516,10 @@
int
get_irq_list(char *buf)
{
- int i, j;
+#ifdef CONFIG_SMP
+ int j;
+#endif
+ int i;
struct irqaction * action;
char *p = buf;
@@ -569,7 +576,7 @@
/*
- * do_IRQ handles all normal device IRQ's (the special
+ * handle_irq handles all normal device IRQ's (the special
* SMP cross-CPU interrupts have their own specific
* handlers).
*/
@@ -632,7 +639,7 @@
/*
* Edge triggered interrupts need to remember pending events.
* This applies to any hw interrupts that allow a second
- * instance of the same irq to arrive while we are in do_IRQ
+ * instance of the same irq to arrive while we are in handle_irq
* or in the handler. But the code here only handles the _second_
* instance of the irq, not the third or fourth. So it is mostly
* useful for irq hardware that does not mask cleanly in an
@@ -656,6 +663,9 @@
*/
desc->handler->end(irq);
spin_unlock(&desc->lock);
+
+ if (softirq_pending(cpu))
+ do_softirq();
}
/*
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/irq_alpha.c linux/arch/alpha/kernel/irq_alpha.c
--- v2.4.5/linux/arch/alpha/kernel/irq_alpha.c Tue Feb 13 14:13:43 2001
+++ linux/arch/alpha/kernel/irq_alpha.c Mon Jul 2 14:03:04 2001
@@ -18,6 +18,8 @@
unsigned long __irq_attempt[NR_IRQS];
#endif
+extern unsigned long irq_err_count;
+
/* Hack minimum IPL during interrupt processing for broken hardware. */
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK
int __min_ipl;
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c
--- v2.4.5/linux/arch/alpha/kernel/osf_sys.c Mon Mar 19 12:35:09 2001
+++ linux/arch/alpha/kernel/osf_sys.c Tue Jun 12 10:26:14 2001
@@ -44,7 +44,6 @@
extern int do_pipe(int *);
-extern asmlinkage int sys_swapon(const char *specialfile, int swap_flags);
extern asmlinkage unsigned long sys_brk(unsigned long);
/*
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/process.c linux/arch/alpha/kernel/process.c
--- v2.4.5/linux/arch/alpha/kernel/process.c Thu May 24 15:20:18 2001
+++ linux/arch/alpha/kernel/process.c Wed Jun 20 11:10:27 2001
@@ -28,6 +28,7 @@
#include
#include
#include
+#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/smp.c linux/arch/alpha/kernel/smp.c
--- v2.4.5/linux/arch/alpha/kernel/smp.c Thu May 24 15:24:37 2001
+++ linux/arch/alpha/kernel/smp.c Mon Jun 11 19:15:27 2001
@@ -682,6 +682,9 @@
data->prof_counter = data->prof_multiplier;
irq_exit(cpu, RTC_IRQ);
+
+ if (softirq_pending(cpu))
+ do_softirq();
}
}
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/sys_alcor.c linux/arch/alpha/kernel/sys_alcor.c
--- v2.4.5/linux/arch/alpha/kernel/sys_alcor.c Fri Oct 27 10:55:01 2000
+++ linux/arch/alpha/kernel/sys_alcor.c Wed Jun 27 16:18:13 2001
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
#include
@@ -219,11 +220,21 @@
static void
alcor_kill_arch(int mode)
{
- /* Who said DEC engineer's have no sense of humor? ;-) */
- if (alpha_using_srm) {
- *(vuip) GRU_RESET = 0x0000dead;
- mb();
+ switch(mode) {
+ case LINUX_REBOOT_CMD_RESTART:
+ /* Who said DEC engineer's have no sense of humor? ;-) */
+ if (alpha_using_srm) {
+ *(vuip) GRU_RESET = 0x0000dead;
+ mb();
+ }
+ break;
+ case LINUX_REBOOT_CMD_HALT:
+ break;
+ case LINUX_REBOOT_CMD_POWER_OFF:
+ break;
}
+
+ halt();
}
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/sys_dp264.c linux/arch/alpha/kernel/sys_dp264.c
--- v2.4.5/linux/arch/alpha/kernel/sys_dp264.c Fri May 25 09:54:50 2001
+++ linux/arch/alpha/kernel/sys_dp264.c Mon Jun 11 19:15:27 2001
@@ -16,18 +16,15 @@
#include
#include
-#define __EXTERN_INLINE inline
-#include
-#include
-#undef __EXTERN_INLINE
-
#include
#include
#include
#include
#include
#include
+#include
#include
+#include
#include
#include "proto.h"
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/sys_rawhide.c linux/arch/alpha/kernel/sys_rawhide.c
--- v2.4.5/linux/arch/alpha/kernel/sys_rawhide.c Fri Mar 2 11:12:07 2001
+++ linux/arch/alpha/kernel/sys_rawhide.c Mon Jun 11 19:15:27 2001
@@ -59,10 +59,11 @@
irq -= 16;
hose = irq / 24;
irq -= hose * 24;
+ mask = 1 << irq;
spin_lock(&rawhide_irq_lock);
- mask = cached_irq_masks[hose] |= 1 << irq;
- mask |= hose_irq_masks[hose];
+ mask |= cached_irq_masks[hose];
+ cached_irq_masks[hose] = mask;
rawhide_update_irq_hw(hose, mask);
spin_unlock(&rawhide_irq_lock);
}
@@ -75,14 +76,37 @@
irq -= 16;
hose = irq / 24;
irq -= hose * 24;
+ mask = ~(1 << irq) | hose_irq_masks[hose];
spin_lock(&rawhide_irq_lock);
- mask = cached_irq_masks[hose] &= ~(1 << irq);
- mask |= hose_irq_masks[hose];
+ mask &= cached_irq_masks[hose];
+ cached_irq_masks[hose] = mask;
rawhide_update_irq_hw(hose, mask);
spin_unlock(&rawhide_irq_lock);
}
+static void
+rawhide_mask_and_ack_irq(unsigned int irq)
+{
+ unsigned int mask, mask1, hose;
+
+ irq -= 16;
+ hose = irq / 24;
+ irq -= hose * 24;
+ mask1 = 1 << irq;
+ mask = ~mask1 | hose_irq_masks[hose];
+
+ spin_lock(&rawhide_irq_lock);
+
+ mask &= cached_irq_masks[hose];
+ cached_irq_masks[hose] = mask;
+ rawhide_update_irq_hw(hose, mask);
+
+ /* Clear the interrupt. */
+ *(vuip)MCPCIA_INT_REQ(MCPCIA_HOSE2MID(hose)) = mask1;
+
+ spin_unlock(&rawhide_irq_lock);
+}
static unsigned int
rawhide_startup_irq(unsigned int irq)
@@ -104,7 +128,7 @@
shutdown: rawhide_disable_irq,
enable: rawhide_enable_irq,
disable: rawhide_disable_irq,
- ack: rawhide_disable_irq,
+ ack: rawhide_mask_and_ack_irq,
end: rawhide_end_irq,
};
@@ -145,8 +169,12 @@
mcpcia_init_hoses();
for (hose = hose_head; hose; hose = hose->next) {
- int h = hose->index;
- rawhide_update_irq_hw(h, hose_irq_masks[h]);
+ unsigned int h = hose->index;
+ unsigned int mask = hose_irq_masks[h];
+
+ cached_irq_masks[h] = mask;
+ *(vuip)MCPCIA_INT_MASK0(MCPCIA_HOSE2MID(h)) = mask;
+ *(vuip)MCPCIA_INT_MASK1(MCPCIA_HOSE2MID(h)) = 0;
}
for (i = 16; i < 128; ++i) {
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/sys_sable.c linux/arch/alpha/kernel/sys_sable.c
--- v2.4.5/linux/arch/alpha/kernel/sys_sable.c Fri Oct 27 10:55:01 2000
+++ linux/arch/alpha/kernel/sys_sable.c Tue Jun 12 11:44:59 2001
@@ -96,7 +96,7 @@
static inline void
sable_update_irq_hw(unsigned long bit, unsigned long mask)
{
- int port = 0x536;
+ int port = 0x537;
if (bit >= 16) {
port = 0x53d;
@@ -121,7 +121,7 @@
} else if (bit >= 8) {
port = 0x53a;
val1 = 0xE0 | (bit - 8);
- val2 = 0xE0 | 2;
+ val2 = 0xE0 | 3;
} else {
port = 0x536;
val1 = 0xE0 | (bit - 0);
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/kernel/sys_sio.c linux/arch/alpha/kernel/sys_sio.c
--- v2.4.5/linux/arch/alpha/kernel/sys_sio.c Fri Oct 27 10:55:01 2000
+++ linux/arch/alpha/kernel/sys_sio.c Wed Jun 20 11:10:27 2001
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/lib/Makefile linux/arch/alpha/lib/Makefile
--- v2.4.5/linux/arch/alpha/lib/Makefile Thu Feb 8 12:56:29 2001
+++ linux/arch/alpha/lib/Makefile Wed Jun 20 11:10:27 2001
@@ -21,6 +21,7 @@
endif
OBJS = __divqu.o __remqu.o __divlu.o __remlu.o \
+ udelay.o \
$(ev6)memset.o \
$(ev6)memcpy.o \
memmove.o \
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/lib/udelay.c linux/arch/alpha/lib/udelay.c
--- v2.4.5/linux/arch/alpha/lib/udelay.c Wed Dec 31 16:00:00 1969
+++ linux/arch/alpha/lib/udelay.c Wed Jun 20 11:10:27 2001
@@ -0,0 +1,47 @@
+#include
+#include /* for udelay's use of smp_processor_id */
+#include
+#include
+#include
+
+/*
+ * Copyright (C) 1993, 2000 Linus Torvalds
+ *
+ * Delay routines, using a pre-computed "loops_per_jiffy" value.
+ */
+
+/*
+ * Use only for very small delays (< 1 msec).
+ *
+ * The active part of our cycle counter is only 32-bits wide, and
+ * we're treating the difference between two marks as signed. On
+ * a 1GHz box, that's about 2 seconds.
+ */
+
+void __delay(int loops)
+{
+ int tmp;
+ __asm__ __volatile__(
+ " rpcc %0\n"
+ " addl %1,%0,%1\n"
+ "1: rpcc %0\n"
+ " subl %1,%0,%0\n"
+ " bgt %0,1b"
+ : "=&r" (tmp), "=r" (loops) : "1"(loops));
+}
+
+void __udelay(unsigned long usecs, unsigned long lpj)
+{
+ usecs *= (((unsigned long)HZ << 32) / 1000000) * lpj;
+ __delay((long)usecs >> 32);
+}
+
+void udelay(unsigned long usecs)
+{
+#ifdef CONFIG_SMP
+ __udelay(usecs, cpu_data[smp_processor_id()].loops_per_jiffy);
+#else
+ __udelay(usecs, loops_per_jiffy);
+#endif
+}
+
diff -u --recursive --new-file v2.4.5/linux/arch/alpha/vmlinux.lds.in linux/arch/alpha/vmlinux.lds.in
--- v2.4.5/linux/arch/alpha/vmlinux.lds.in Mon Jun 26 11:26:56 2000
+++ linux/arch/alpha/vmlinux.lds.in Mon Jul 2 14:40:14 2001
@@ -53,7 +53,7 @@
/* Global data */
_data = .;
.data.cacheline_aligned : { *(.data.cacheline_aligned) }
- .rodata : { *(.rodata) }
+ .rodata : { *(.rodata) *(.rodata.*) }
.data : { *(.data) CONSTRUCTORS }
.got : { *(.got) }
.sdata : { *(.sdata) }
diff -u --recursive --new-file v2.4.5/linux/arch/arm/Makefile linux/arch/arm/Makefile
--- v2.4.5/linux/arch/arm/Makefile Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/Makefile Wed Jun 27 14:12:04 2001
@@ -26,7 +26,7 @@
apcs-$(CONFIG_CPU_26) :=-mcpu=arm3 -Os
arch-y :=
-arch-$(CONFIG_CPU_32v3) :=-march=armv3m
+arch-$(CONFIG_CPU_32v3) :=-march=armv3
arch-$(CONFIG_CPU_32v4) :=-march=armv4
arch-$(CONFIG_CPU_32v5) :=-march=armv5
@@ -123,6 +123,10 @@
MACHINE = clps711x
endif
+ifeq ($(CONFIG_ARCH_ANAKIN),y)
+MACHINE = anakin
+endif
+
export LIBGCC MACHINE PROCESSOR TEXTADDR GZFLAGS
# Only set INCDIR if its not already defined above
@@ -156,7 +160,7 @@
LIBS := arch/arm/fastfpe/fast-math-emu.o $(LIBS)
endif
-ifeq ($(CONFIG_ARCH_CLPS7500),y)
+ifeq ($(findstring y,$(CONFIG_ARCH_CLPS7500) $(CONFIG_ARCH_L7200)),y)
SUBDIRS += drivers/acorn/char
DRIVERS += drivers/acorn/char/acorn-char.o
endif
@@ -237,8 +241,8 @@
@( \
CFG=$(@:_config=); \
if [ -f arch/arm/def-configs/$$CFG ]; then \
- $(RM) arch/arm/defconfig; \
- cp arch/arm/def-configs/$$CFG arch/arm/defconfig; \
+ [ -f .config ] && $(MV) .config .config.old; \
+ cp arch/arm/def-configs/$$CFG .config; \
echo "*** Default configuration for $$CFG installed"; \
echo "*** Next, you may run 'make oldconfig'"; \
else \
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/Makefile linux/arch/arm/boot/Makefile
--- v2.4.5/linux/arch/arm/boot/Makefile Thu Apr 12 12:03:50 2001
+++ linux/arch/arm/boot/Makefile Wed Jun 27 14:12:04 2001
@@ -90,9 +90,17 @@
ifeq ($(CONFIG_SA1100_GRAPHICSCLIENT),y)
ZTEXTADDR = 0xC0200000
endif
+ifeq ($(CONFIG_SA1100_YOPY),y)
+ ZTEXTADDR = 0x00080000
+ ZBSSADDR = 0xc0200000
+endif
ifeq ($(CONFIG_SA1111),y)
ZRELADDR = 0xc0208000
endif
+endif
+
+ifeq ($(CONFIG_ARCH_ANAKIN),y)
+ZTEXTADDR = 0x20008000
endif
#
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/compressed/Makefile linux/arch/arm/boot/compressed/Makefile
--- v2.4.5/linux/arch/arm/boot/compressed/Makefile Thu Apr 12 12:03:50 2001
+++ linux/arch/arm/boot/compressed/Makefile Wed Jun 27 14:12:04 2001
@@ -30,7 +30,7 @@
endif
ifeq ($(CONFIG_ARCH_INTEGRATOR),y)
-OBJS += head-netwinder.o
+OBJS += head-integrator.o
endif
ifeq ($(CONFIG_ARCH_FTVPCI),y)
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/compressed/head-integrator.S linux/arch/arm/boot/compressed/head-integrator.S
--- v2.4.5/linux/arch/arm/boot/compressed/head-integrator.S Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/boot/compressed/head-integrator.S Wed Jun 27 14:12:04 2001
@@ -0,0 +1,4 @@
+#include
+
+ .section ".start", #alloc, #execinstr
+ mov r7, #MACH_TYPE_INTEGRATOR
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/compressed/head.S linux/arch/arm/boot/compressed/head.S
--- v2.4.5/linux/arch/arm/boot/compressed/head.S Thu Apr 12 12:03:50 2001
+++ linux/arch/arm/boot/compressed/head.S Wed Jun 27 14:12:04 2001
@@ -12,7 +12,39 @@
/*
* Debugging stuff
+ *
+ * Note that these macros must not contain any code which is not
+ * 100% relocatable. Any attempt to do so will result in a crash.
+ * Please select one of the following when turning on debugging.
*/
+#ifdef DEBUG
+#if 0 /* DC21285-type */
+ .macro loadsp, rb
+ mov \rb, #0x7c000000
+ .endm
+ .macro writeb, rb
+ strb \rb, [r3, #0x3f8]
+ .endm
+#elif 0 /* RiscPC-type */
+ .macro loadsp, rb
+ mov \rb, #0x03000000
+ orr \rb, \rb, #0x00010000
+ .endm
+ .macro writeb, rb
+ strb \rb, [r3, #0x3f8 << 2]
+ .endm
+#elif 0 /* integrator-type */
+ .macro loadsp, rb
+ mov \rb, #0x16000000
+ .endm
+ .macro writeb, rb
+ strb \rb, [r3, #0]
+ .endm
+#else
+#error no serial architecture defined
+#endif
+#endif
+
.macro kputc,val
mov r0, \val
bl putc
@@ -27,53 +59,31 @@
.macro debug_reloc_start
#ifdef DEBUG
kputc #'\n'
- kphex r6, 8
+ kphex r6, 8 /* processor id */
kputc #':'
- kphex r5, 8
+ kphex r7, 8 /* architecture id */
+ kputc #':'
+ mrc p15, 0, r0, c1, c0
+ kphex r0, 8 /* control reg
+ kputc #'\n'
+ kphex r5, 8 /* decompressed kernel start */
kputc #'-'
- kphex r8, 8
+ kphex r8, 8 /* decompressed kernel end */
kputc #'>'
- kphex r4, 8
+ kphex r4, 8 /* kernel execution address */
kputc #'\n'
#endif
.endm
.macro debug_reloc_end
#ifdef DEBUG
- mov r8, r0
- kphex r5, 8
- kputc #'-'
- kphex r8, 8
+ kphex r5, 8 /* end of kernel */
kputc #'\n'
mov r0, r4
- bl memdump
+ bl memdump /* dump 256 bytes at start of kernel */
#endif
.endm
-/*
- * Note that these macros must not contain any code which is not
- * 100% relocatable. Any attempt to do so will result in a crash.
- */
-#if 0
- .macro loadsp, rb
- mov \rb, #0x7c000000
- .endm
-
- .macro writeb, rb
- strb \rb, [r3, #0x3f8]
- .endm
-#else
- .macro loadsp, rb
- mov \rb, #0x03000000
- orr \rb, \rb, #0x00010000
- .endm
-
- .macro writeb, rb
- strb \rb, [r3, #0x3f8 << 2]
- .endm
-#endif
-
-
.section ".start", #alloc, #execinstr
/*
* sort out different calling conventions
@@ -91,14 +101,18 @@
.word _edata @ zImage end address
1: mov r7, r1 @ save architecture ID
mov r8, #0 @ save r0
-#ifdef CONFIG_ANGELBOOT
+
/*
* Booting from Angel - need to enter SVC mode and disable
- * FIQs/IRQs (numeric definitions from angel arm.h source)
+ * FIQs/IRQs (numeric definitions from angel arm.h source).
+ * We only do this if we were in user mode on entry.
*/
+ mrs r0, cpsr @ get current mode
+ tst r0, #3 @ not user?
+ bne not_angel
mov r0, #0x17 @ angel_SWIreason_EnterSVC
swi 0x123456 @ angel_SWI_ARM
- mrs r0, cpsr @ turn off interrupts to
+not_angel: mrs r0, cpsr @ turn off interrupts to
orr r0, r0, #0xc0 @ prevent angel from running
msr cpsr_c, r0
@@ -106,7 +120,7 @@
* Note that some cache flushing and other stuff may
* be needed here - is there an Angel SWI call for this?
*/
-#endif
+
/*
* some architecture specific code can be inserted
* by the linker here, but it should preserve r7 and r8.
@@ -300,30 +314,46 @@
.size proc_sa1110_type, . - proc_sa1110_type
/*
- * Turn off StrongARM cache and MMU. It is safe to
- * leave the I-cache on.
+ * Turn off the Cache and MMU. ARMv3 does not support
+ * reading the control register, but ARMv4 does.
*
- * On entry,
- * r6 = processor ID
- * On exit,
- * r0, r1 corrupted
- * This routine must preserve:
- * r4, r6, r7
+ * On entry, r6 = processor ID
+ * On exit, r0, r1 corrupted
+ * This routine must preserve: r4, r6, r7
*/
.align 5
-cache_off: 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 #4
- movne pc, lr
-1:
+cache_off:
+#ifdef CONFIG_CPU_ARM610
+ eor r1, r6, #0x41000000
+ eor r1, r1, #0x00560000
+ bic r1, r1, #0x0000001f
+ teq r1, #0x00000600
+ mov r0, #0x00000060 @ ARM6 control reg.
+ beq __armv3_cache_off
+#endif
+#ifdef CONFIG_CPU_ARM710
+ eor r1, r6, #0x41000000
+ bic r1, r1, #0x00070000
+ bic r1, r1, #0x000000ff
+ teq r1, #0x00007000 @ ARM7
+ teqne r1, #0x00007100 @ ARM710
+ mov r0, #0x00000070 @ ARM7 control reg.
+ beq __armv3_cache_off
+#endif
mrc p15, 0, r0, c1, c0
bic r0, r0, #0x000d
- mcr p15, 0, r0, c1, c0
- mov pc, lr
+ mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
+ mov r0, #0
+ mcr p15, 0, r0, c7, c7 @ invalidate whole cache v4
+ mcr p15, 0, r0, c8, c7 @ invalidate whole TLB v4
+ mov pc, lr
+
+__armv3_cache_off:
+ mcr p15, 0, r0, c1, c0 @ turn MMU and cache off
+ mov r0, #0
+ mcr p15, 0, r0, c7, c0 @ invalidate whole cache v3
+ mcr p15, 0, r0, c5, c0 @ invalidate whole TLB v3
+ mov pc, lr
/*
* Clean and flush the cache to maintain consistency.
@@ -401,13 +431,10 @@
memdump: mov r12, r0
mov r10, lr
- mov r1, #8
- bl phex
- mov r0, #'\n'
- bl putc
mov r11, #0
2: mov r0, r11, lsl #2
- mov r1, #4
+ add r0, r0, r12
+ mov r1, #8
bl phex
mov r0, #':'
bl putc
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/compressed/setup-sa1100.S linux/arch/arm/boot/compressed/setup-sa1100.S
--- v2.4.5/linux/arch/arm/boot/compressed/setup-sa1100.S Thu Apr 12 12:03:50 2001
+++ linux/arch/arm/boot/compressed/setup-sa1100.S Wed Jun 27 14:12:04 2001
@@ -16,16 +16,16 @@
.text
GPIO_BASE: .long 0x90040000
-#define GPLR 0x00
-#define GPDR 0x04
-#define GPSR 0x08
-#define GAFR 0x1c
+#define GPLR 0x00
+#define GPDR 0x04
+#define GPSR 0x08
+#define GAFR 0x1c
PPC_BASE: .long 0x90060000
-#define PPAR 0x08
+#define PPAR 0x08
IC_BASE: .long 0x90050000
-#define ICMR 0x04
+#define ICMR 0x04
UART1_BASE: .long 0x80010000
UART3_BASE: .long 0x80050000
@@ -95,7 +95,11 @@
@ Initialize UART (if bootloader has not done it yet)...
teq r3, #MACH_TYPE_BRUTUS
teqne r3, #MACH_TYPE_ASSABET
+ teqne r3, #MACH_TYPE_ITSY
+ teqne r3, #MACH_TYPE_OMNIMETER
+ teqne r3, #MACH_TYPE_JORNADA720
teqne r3, #MACH_TYPE_GRAPHICSCLIENT
+ teqne r3, #MACH_TYPE_FLEXANET
bne skip_uart
@ UART3 if Assabet is used with Neponset
diff -u --recursive --new-file v2.4.5/linux/arch/arm/boot/compressed/vmlinux.lds.in linux/arch/arm/boot/compressed/vmlinux.lds.in
--- v2.4.5/linux/arch/arm/boot/compressed/vmlinux.lds.in Thu Feb 8 16:32:44 2001
+++ linux/arch/arm/boot/compressed/vmlinux.lds.in Mon Jul 2 14:40:14 2001
@@ -24,6 +24,7 @@
*(.fixup)
*(.gnu.warning)
*(.rodata)
+ *(.rodata.*)
*(.glue_7)
*(.glue_7t)
input_data = .;
diff -u --recursive --new-file v2.4.5/linux/arch/arm/config.in linux/arch/arm/config.in
--- v2.4.5/linux/arch/arm/config.in Tue Apr 17 17:19:24 2001
+++ linux/arch/arm/config.in Mon Jun 11 19:15:27 2001
@@ -482,6 +482,9 @@
source drivers/usb/Config.in
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ source net/bluetooth/Config.in
+fi
mainmenu_option next_comment
comment 'Kernel hacking'
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/calls.S linux/arch/arm/kernel/calls.S
--- v2.4.5/linux/arch/arm/kernel/calls.S Mon Sep 18 15:15:24 2000
+++ linux/arch/arm/kernel/calls.S Wed Jun 27 14:12:04 2001
@@ -13,6 +13,7 @@
#define NR_syscalls 256
#else
+__syscall_start:
/* 0 */ .long SYMBOL_NAME(sys_ni_syscall)
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork_wrapper)
@@ -176,7 +177,7 @@
/* 160 */ .long SYMBOL_NAME(sys_sched_get_priority_min)
.long SYMBOL_NAME(sys_sched_rr_get_interval)
.long SYMBOL_NAME(sys_nanosleep)
- .long SYMBOL_NAME(sys_mremap)
+ .long SYMBOL_NAME(sys_arm_mremap)
.long SYMBOL_NAME(sys_setresuid16)
/* 165 */ .long SYMBOL_NAME(sys_getresuid16)
.long SYMBOL_NAME(sys_ni_syscall)
@@ -231,8 +232,13 @@
/* 215 */ .long SYMBOL_NAME(sys_setfsuid)
.long SYMBOL_NAME(sys_setfsgid)
.long SYMBOL_NAME(sys_getdents64)
+ .long SYMBOL_NAME(sys_pivot_root)
+ .long SYMBOL_NAME(sys_mincore)
+/* 220 */ .long SYMBOL_NAME(sys_madvise)
+ .long SYMBOL_NAME(sys_fcntl64)
+__syscall_end:
- .rept NR_syscalls-217
+ .rept NR_syscalls - (__syscall_end - __syscall_start) / 4
.long SYMBOL_NAME(sys_ni_syscall)
.endr
#endif
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/ecard.c linux/arch/arm/kernel/ecard.c
--- v2.4.5/linux/arch/arm/kernel/ecard.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/kernel/ecard.c Wed Jun 27 14:12:04 2001
@@ -1,7 +1,7 @@
/*
* linux/arch/arm/kernel/ecard.c
*
- * Copyright 1995-1998 Russell King
+ * Copyright 1995-2001 Russell King
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -26,7 +26,6 @@
* 17-Apr-1999 RMK Support for EASI Type C cycles.
*/
#define ECARD_C
-#define __KERNEL_SYSCALLS__
#include
#include
@@ -34,6 +33,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -382,12 +382,12 @@
* We ignore all calls, unless it is a SYS_RESTART call - power down/halts
* will be followed by a SYS_RESTART if ctrl-alt-del is pressed again.
*/
-static void ecard_reboot(struct notifier_block *me, unsigned long val, void *v)
+static int ecard_reboot(struct notifier_block *me, unsigned long val, void *v)
{
struct ecard_request req;
if (val != SYS_RESTART)
- return;
+ return 0;
/*
* Disable the expansion card interrupt
@@ -414,6 +414,7 @@
have_expmask = ~0;
__raw_writeb(have_expmask, EXPMASK_ENABLE);
#endif
+ return 0;
}
static struct notifier_block ecard_reboot_notifier = {
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S
--- v2.4.5/linux/arch/arm/kernel/entry-armv.S Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/kernel/entry-armv.S Wed Jun 27 14:12:04 2001
@@ -1179,7 +1179,6 @@
stmfd sp!, {r4 - r6, lr}
adr r1, .LCvectors @ set up the vectors
- mov r0, #0
ldmia r1, {r1, r2, r3, r4, r5, r6, ip, lr}
stmia r0, {r1, r2, r3, r4, r5, r6, ip, lr}
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/fiq.c linux/arch/arm/kernel/fiq.c
--- v2.4.5/linux/arch/arm/kernel/fiq.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/kernel/fiq.c Wed Jun 27 14:12:04 2001
@@ -48,7 +48,7 @@
#include
#include
-#define FIQ_VECTOR 0x1c
+#define FIQ_VECTOR (vectors_base() + 0x1c)
static unsigned long no_fiq_insn;
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/sys_arm.c linux/arch/arm/kernel/sys_arm.c
--- v2.4.5/linux/arch/arm/kernel/sys_arm.c Mon Mar 19 12:35:10 2001
+++ linux/arch/arm/kernel/sys_arm.c Wed Jun 27 14:12:04 2001
@@ -55,10 +55,19 @@
unsigned long prot, unsigned long flags,
unsigned long fd, unsigned long pgoff)
{
- int error = -EBADF;
+ int error = -EINVAL;
struct file * file = NULL;
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
+
+ /*
+ * If we are doing a fixed mapping, and address < PAGE_SIZE,
+ * then deny it.
+ */
+ if (flags & MAP_FIXED && addr < PAGE_SIZE && vectors_base() == 0)
+ goto out;
+
+ error = -EBADF;
if (!(flags & MAP_ANONYMOUS)) {
file = fget(fd);
if (!file)
@@ -99,6 +108,29 @@
error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT);
out:
return error;
+}
+
+asmlinkage unsigned long
+sys_arm_mremap(unsigned long addr, unsigned long old_len,
+ unsigned long new_len, unsigned long flags,
+ unsigned long new_addr)
+{
+ unsigned long ret = -EINVAL;
+
+ /*
+ * If we are doing a fixed mapping, and address < PAGE_SIZE,
+ * then deny it.
+ */
+ if (flags & MREMAP_FIXED && new_addr < PAGE_SIZE &&
+ vectors_base() == 0)
+ goto out;
+
+ down_write(¤t->mm->mmap_sem);
+ ret = do_mremap(addr, old_len, new_len, flags, new_addr);
+ up_write(¤t->mm->mmap_sem);
+
+out:
+ return ret;
}
/*
diff -u --recursive --new-file v2.4.5/linux/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
--- v2.4.5/linux/arch/arm/kernel/traps.c Thu Feb 8 16:32:44 2001
+++ linux/arch/arm/kernel/traps.c Wed Jun 27 14:12:04 2001
@@ -20,6 +20,7 @@
#include
#include
#include
+#include
#include
#include
@@ -27,6 +28,7 @@
#include
#include
#include
+#include
#include "ptrace.h"
@@ -143,12 +145,24 @@
c_backtrace(fp, processor_mode(regs));
}
+/*
+ * This is called from SysRq-T (show_task) to display the current
+ * call trace for each process. Very useful.
+ */
+void show_trace_task(struct task_struct *tsk)
+{
+ if (tsk != current) {
+ unsigned int fp = tsk->thread.save->fp;
+ c_backtrace(fp, 0x10);
+ }
+}
+
spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
/*
* This function is protected against re-entrancy.
*/
-void die(const char *str, struct pt_regs *regs, int err)
+NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
{
struct task_struct *tsk = current;
@@ -173,9 +187,9 @@
fs = get_fs();
set_fs(KERNEL_DS);
- dump_instr(regs);
dump_stack(tsk, (unsigned long)(regs + 1));
dump_backtrace(regs, tsk);
+ dump_instr(regs);
set_fs(fs);
}
@@ -448,9 +462,12 @@
void __init trap_init(void)
{
- extern void __trap_init(void);
+ extern void __trap_init(void *);
- __trap_init();
+ __trap_init((void *)vectors_base());
+ if (vectors_base() != 0)
+ printk("Relocating machine vectors to 0x%08x\n",
+ vectors_base());
#ifdef CONFIG_CPU_32
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
#endif
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mach-ebsa110/arch.c linux/arch/arm/mach-ebsa110/arch.c
--- v2.4.5/linux/arch/arm/mach-ebsa110/arch.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/mach-ebsa110/arch.c Wed Jun 27 14:12:04 2001
@@ -1,10 +1,7 @@
/*
* linux/arch/arm/mach-ebsa110/arch.c
*
- * Architecture specific fixups. This is where any
- * parameters in the params struct are fixed up, or
- * any additional architecture specific information
- * is pulled from the params struct.
+ * Architecture specific fixups.
*/
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mach-ebsa110/hardware.h linux/arch/arm/mach-ebsa110/hardware.h
--- v2.4.5/linux/arch/arm/mach-ebsa110/hardware.h Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mach-ebsa110/hardware.h Wed Jun 27 14:12:04 2001
@@ -0,0 +1,16 @@
+/*
+ * linux/arch/arm/mach-ebsa110/hardware.h
+ *
+ * Copyright (C) 2001 Russell King
+ *
+ * Local hardware definitions.
+ */
+#ifndef HARDWARE_H
+#define HARDWARE_H
+
+#define IRQ_MASK 0xfe000000 /* read */
+#define IRQ_MSET 0xfe000000 /* write */
+#define IRQ_STAT 0xff000000 /* read */
+#define IRQ_MCLR 0xff000000 /* write */
+
+#endif
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mach-ebsa110/io.c linux/arch/arm/mach-ebsa110/io.c
--- v2.4.5/linux/arch/arm/mach-ebsa110/io.c Sun May 20 12:11:38 2001
+++ linux/arch/arm/mach-ebsa110/io.c Wed Jun 27 14:12:04 2001
@@ -188,6 +188,7 @@
u32 __inl(int port)
{
BUG();
+ return 0;
}
EXPORT_SYMBOL(__inb);
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mm/consistent.c linux/arch/arm/mm/consistent.c
--- v2.4.5/linux/arch/arm/mm/consistent.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/mm/consistent.c Wed Jun 27 14:12:04 2001
@@ -67,18 +67,21 @@
#endif
/*
- * free wasted pages. We skip the first page since
- * we know that it will have count = 1 and won't
- * require freeing.
+ * free wasted pages. We skip the first page since we know
+ * that it will have count = 1 and won't require freeing.
+ * We also mark the pages in use as reserved so that
+ * remap_page_range works.
*/
page = virt_to_page(virt);
free = page + (size >> PAGE_SHIFT);
end = page + (1 << order);
- while (++page < end) {
+ for (; page < end; page++) {
set_page_count(page, 1);
if (page >= free)
__free_page(page);
+ else
+ SetPageReserved(page);
}
return ret;
@@ -108,10 +111,26 @@
* free a page as defined by the above mapping. We expressly forbid
* calling this from interrupt context.
*/
-void consistent_free(void *vaddr)
+void consistent_free(void *vaddr, size_t size, dma_addr_t handle)
{
+ struct page *page, *end;
+ void *virt;
+
if (in_interrupt())
BUG();
+
+ virt = bus_to_virt(handle);
+
+ /*
+ * More messing around with the MM internals. This is
+ * sick, but then so is remap_page_range().
+ */
+ size = PAGE_ALIGN(size);
+ page = virt_to_page(virt);
+ end = page + (size >> PAGE_SHIFT);
+
+ for (; page < end; page++)
+ ClearPageReserved(page);
__iounmap(vaddr);
}
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c
--- v2.4.5/linux/arch/arm/mm/fault-armv.c Wed May 16 15:25:16 2001
+++ linux/arch/arm/mm/fault-armv.c Wed Jun 27 14:12:04 2001
@@ -24,6 +24,7 @@
#include
#include
+#include
#include
#include
@@ -45,9 +46,8 @@
*
* Speed optimisations and better fault handling by Russell King.
*
- * NOTE!!! This is not portable onto the ARM6/ARM7 processors yet. Also,
- * it seems to give a severe performance impact (1 abort/ms - NW runs at
- * ARM6 speeds) with GCC 2.7.2.2 - needs checking with a later GCC/EGCS.
+ * *** NOTE ***
+ * This code is not portable to processors with late data abort handling.
*/
#define CODING_BITS(i) (i & 0x0e000000)
@@ -57,6 +57,8 @@
#define LDST_W_BIT(i) (i & (1 << 21)) /* Writeback */
#define LDST_L_BIT(i) (i & (1 << 20)) /* Load */
+#define LDST_P_EQ_U(i) ((((i) ^ ((i) >> 1)) & (1 << 23)) == 0)
+
#define LDSTH_I_BIT(i) (i & (1 << 22)) /* half-word immed */
#define LDM_S_BIT(i) (i & (1 << 22)) /* write CPSR from SPSR */
@@ -336,29 +338,48 @@
return TYPE_FAULT;
}
+/*
+ * LDM/STM alignment handler.
+ *
+ * There are 4 variants of this instruction:
+ *
+ * B = rn pointer before instruction, A = rn pointer after instruction
+ * ------ increasing address ----->
+ * | | r0 | r1 | ... | rx | |
+ * PU = 01 B A
+ * PU = 11 B A
+ * PU = 00 A B
+ * PU = 10 A B
+ */
static int
do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *regs)
{
unsigned int rd, rn, correction, nr_regs, regbits;
- unsigned long eaddr;
-
- correction = 4; /* sometimes 8 on ARMv3 */
- regs->ARM_pc += correction;
-
- rd = RD_BITS(instr);
- rn = RN_BITS(instr);
- eaddr = regs->uregs[rn];
+ unsigned long eaddr, newaddr;
if (LDM_S_BIT(instr))
goto bad;
+ correction = 4; /* processor implementation defined */
+ regs->ARM_pc += correction;
+
ai_multi += 1;
+ /* count the number of registers in the mask to be transferred */
for (regbits = REGMASK_BITS(instr), nr_regs = 0; regbits; regbits >>= 1)
nr_regs += 4;
+ rn = RN_BITS(instr);
+ newaddr = eaddr = regs->uregs[rn];
+
if (!LDST_U_BIT(instr))
- eaddr -= nr_regs;
+ nr_regs = -nr_regs;
+ newaddr += nr_regs;
+ if (!LDST_U_BIT(instr))
+ eaddr = newaddr;
+
+ if (LDST_P_EQ_U(instr)) /* U = P */
+ eaddr += 4;
/*
* This is a "hint" - we already have eaddr worked out by the
@@ -369,34 +390,23 @@
"addr = %08lx, eaddr = %08lx\n",
instruction_pointer(regs), instr, addr, eaddr);
- if ((LDST_U_BIT(instr) == 0 && LDST_P_BIT(instr) == 0) ||
- (LDST_U_BIT(instr) && LDST_P_BIT(instr)))
- eaddr += 4;
-
for (regbits = REGMASK_BITS(instr), rd = 0; regbits; regbits >>= 1, rd += 1)
if (regbits & 1) {
- if (LDST_L_BIT(instr)) {
+ if (LDST_L_BIT(instr))
get32_unaligned_check(regs->uregs[rd], eaddr);
- if (rd == 15)
- correction = 0;
- } else
+ else
put32_unaligned_check(regs->uregs[rd], eaddr);
eaddr += 4;
}
- if (LDST_W_BIT(instr)) {
- if (LDST_P_BIT(instr) && !LDST_U_BIT(instr))
- eaddr -= nr_regs;
- else if (LDST_P_BIT(instr))
- eaddr -= 4;
- else if (!LDST_U_BIT(instr))
- eaddr -= 4 + nr_regs;
- regs->uregs[rn] = eaddr;
- }
- regs->ARM_pc -= correction;
+ if (LDST_W_BIT(instr))
+ regs->uregs[rn] = newaddr;
+ if (!LDST_L_BIT(instr) || !(REGMASK_BITS(instr) & (1 << 15)))
+ regs->ARM_pc -= correction;
return TYPE_DONE;
fault:
+ regs->ARM_pc -= correction;
return TYPE_FAULT;
bad:
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mm/mm-armv.c linux/arch/arm/mm/mm-armv.c
--- v2.4.5/linux/arch/arm/mm/mm-armv.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/mm/mm-armv.c Wed Jun 27 14:12:04 2001
@@ -79,37 +79,40 @@
memzero(new_pgd, FIRST_KERNEL_PGD_NR * sizeof(pgd_t));
- /*
- * This lock is here just to satisfy pmd_alloc and pte_lock
- */
- spin_lock(&mm->page_table_lock);
+ init_pgd = pgd_offset_k(0);
- /*
- * On ARM, first page must always be allocated since it contains
- * the machine vectors.
- */
- new_pmd = pmd_alloc(mm, new_pgd, 0);
- if (!new_pmd)
- goto no_pmd;
-
- new_pte = pte_alloc(mm, new_pmd, 0);
- if (!new_pte)
- goto no_pte;
+ if (vectors_base() == 0) {
+ init_pmd = pmd_offset(init_pgd, 0);
+ init_pte = pte_offset(init_pmd, 0);
+
+ /*
+ * This lock is here just to satisfy pmd_alloc and pte_lock
+ */
+ spin_lock(&mm->page_table_lock);
+
+ /*
+ * On ARM, first page must always be allocated since it
+ * contains the machine vectors.
+ */
+ new_pmd = pmd_alloc(mm, new_pgd, 0);
+ if (!new_pmd)
+ goto no_pmd;
+
+ new_pte = pte_alloc(mm, new_pmd, 0);
+ if (!new_pte)
+ goto no_pte;
- init_pgd = pgd_offset_k(0);
- init_pmd = pmd_offset(init_pgd, 0);
- init_pte = pte_offset(init_pmd, 0);
+ set_pte(new_pte, *init_pte);
- set_pte(new_pte, *init_pte);
+ spin_unlock(&mm->page_table_lock);
+ }
/*
* Copy over the kernel and IO PGD entries
*/
- memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,
+ memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,
(PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));
- spin_unlock(&mm->page_table_lock);
-
/*
* FIXME: this should not be necessary
*/
@@ -134,25 +137,26 @@
void free_pgd_slow(pgd_t *pgd)
{
- if (pgd) { /* can pgd be NULL? */
- pmd_t *pmd;
- pte_t *pte;
-
- /* pgd is always present and good */
- pmd = (pmd_t *)pgd;
- if (pmd_none(*pmd))
- goto free;
- if (pmd_bad(*pmd)) {
- pmd_ERROR(*pmd);
- pmd_clear(pmd);
- goto free;
- }
+ pmd_t *pmd;
+ pte_t *pte;
- pte = pte_offset(pmd, 0);
+ if (!pgd)
+ return;
+
+ /* pgd is always present and good */
+ pmd = (pmd_t *)pgd;
+ if (pmd_none(*pmd))
+ goto free;
+ if (pmd_bad(*pmd)) {
+ pmd_ERROR(*pmd);
pmd_clear(pmd);
- pte_free(pte);
- pmd_free(pmd);
+ goto free;
}
+
+ pte = pte_offset(pmd, 0);
+ pmd_clear(pmd);
+ pte_free(pte);
+ pmd_free(pmd);
free:
free_pages((unsigned long) pgd, 2);
}
@@ -296,17 +300,6 @@
init_maps = p = alloc_bootmem_low_pages(PAGE_SIZE);
- p->physical = virt_to_phys(init_maps);
- p->virtual = 0;
- p->length = PAGE_SIZE;
- p->domain = DOMAIN_USER;
- p->prot_read = 0;
- p->prot_write = 0;
- p->cacheable = 1;
- p->bufferable = 0;
-
- p ++;
-
for (i = 0; i < mi->nr_banks; i++) {
if (mi->bank[i].size == 0)
continue;
@@ -350,16 +343,9 @@
#endif
/*
- * We may have a mapping in virtual address 0.
- * Clear it out.
- */
- clear_mapping(0);
-
- /*
* Go through the initial mappings, but clear out any
* pgdir entries that are not in the description.
*/
- i = 0;
q = init_maps;
do {
if (address < q->virtual || q == p) {
@@ -374,6 +360,21 @@
q ++;
}
} while (address != 0);
+
+ /*
+ * Create a mapping for the machine vectors at virtual address 0
+ * or 0xffff0000. We should always try the high mapping.
+ */
+ init_maps->physical = virt_to_phys(init_maps);
+ init_maps->virtual = vectors_base();
+ init_maps->length = PAGE_SIZE;
+ init_maps->domain = DOMAIN_USER;
+ init_maps->prot_read = 0;
+ init_maps->prot_write = 0;
+ init_maps->cacheable = 1;
+ init_maps->bufferable = 0;
+
+ create_mapping(init_maps);
flush_cache_all();
}
diff -u --recursive --new-file v2.4.5/linux/arch/arm/mm/mm-l7200.c linux/arch/arm/mm/mm-l7200.c
--- v2.4.5/linux/arch/arm/mm/mm-l7200.c Thu Apr 12 12:20:31 2001
+++ linux/arch/arm/mm/mm-l7200.c Wed Jun 27 14:12:04 2001
@@ -10,7 +10,6 @@
#include
#include
#include
-#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/arm/tools/Makefile linux/arch/arm/tools/Makefile
--- v2.4.5/linux/arch/arm/tools/Makefile Tue Mar 6 19:44:35 2001
+++ linux/arch/arm/tools/Makefile Wed Jun 27 14:12:04 2001
@@ -16,7 +16,7 @@
$(TOPDIR)/include/asm-arm/constants.h: constants-hdr getconstants.c
$(CC) $(CFLAGS) -S -o - getconstants.c | \
- sed 's/^\(#define .* \)#\(.*\)/\1\2/;/^#define/!d' | \
+ sed 's/^\(#define .* \)[#$$]\(.*\)/\1\2/;/^#define/!d' | \
cat constants-hdr - > $@.tmp
cmp $@.tmp $@ >/dev/null 2>&1 || mv $@.tmp $@; $(RM) $@.tmp
diff -u --recursive --new-file v2.4.5/linux/arch/arm/tools/getconstants.c linux/arch/arm/tools/getconstants.c
--- v2.4.5/linux/arch/arm/tools/getconstants.c Wed Apr 11 19:02:27 2001
+++ linux/arch/arm/tools/getconstants.c Wed Jun 27 14:12:04 2001
@@ -60,7 +60,5 @@
DEFN("PAGE_SZ", PAGE_SIZE);
-DEFN("KSWI_BASE", 0x900000);
-DEFN("KSWI_SYS_BASE", 0x9f0000);
DEFN("SYS_ERROR0", 0x9f0000);
}
diff -u --recursive --new-file v2.4.5/linux/arch/arm/tools/mach-types linux/arch/arm/tools/mach-types
--- v2.4.5/linux/arch/arm/tools/mach-types Wed Apr 11 19:02:27 2001
+++ linux/arch/arm/tools/mach-types Wed Jun 27 14:12:04 2001
@@ -6,7 +6,7 @@
# To add an entry into this database, please see Documentation/arm/README,
# or contact rmk@arm.linux.org.uk
#
-# Last update: Sat Apr 7 09:45:09 2001
+# Last update: Sun Jun 17 00:53:17 2001
#
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
#
@@ -63,7 +63,7 @@
citygo SA1100_CITYGO CITYGO 51
pfs168 SA1100_PFS168 PFS168 52
spot SA1100_SPOT SPOT 53
-flexanet ARCH_FLEXANET FLEXANET 54
+flexanet SA1100_FLEXANET FLEXANET 54
webpal ARCH_WEBPAL WEBPAL 55
linpda SA1100_LINPDA LINPDA 56
anakin ARCH_ANAKIN ANAKIN 57
@@ -77,6 +77,26 @@
xfile SA1100_XFILE XFILE 65
accelent_ep9312 ARCH_ACCELENT_EP9312 ACCELENT_EP9312 66
ic200 ARCH_IC200 IC200 67
+creditlart SA1100_CREDITLART CREDITLART 68
+htm SA1100_HTM HTM 69
+iq80310 ARCH_IQ80310 IQ80310 70
+freebot SA1100_FREEBOT FREEBOT 71
+entel ARCH_ENTEL ENTEL 72
+enp3510 ARCH_ENP3510 ENP3510 73
+trizeps SA1100_TRIZEPS TRIZEPS 74
+nesa SA1100_NESA NESA 75
+venus ARCH_VENUS VENUS 76
+tardis ARCH_TARDIS TARDIS 77
+mercury ARCH_MERCURY MERCURY 78
+empeg SA1100_EMPEG EMPEG 79
+adi_eb ARCH_I80200FCC I80200FCC 80
+itt_cpb SA1100_ITT_CPB ITT_CPB 81
+sa1110_svc ARCH_SA1110_SVC SA1110_SVC 82
+alpha2 SA1100_ALPHA2 ALPHA2 84
+alpha1 SA1100_ALPHA1 ALPHA1 85
+netarm ARCH_NETARM NETARM 86
+simpad SA1100_SIMPAD SIMPAD 87
+pda1 ARCH_PDA1 PDA1 88
+lubbock ARCH_LUBBOCK LUBBOCK 89
# The following are unallocated
-empeg SA1100_EMPEG EMPEG
diff -u --recursive --new-file v2.4.5/linux/arch/arm/vmlinux-armo.lds.in linux/arch/arm/vmlinux-armo.lds.in
--- v2.4.5/linux/arch/arm/vmlinux-armo.lds.in Thu Feb 8 16:32:44 2001
+++ linux/arch/arm/vmlinux-armo.lds.in Mon Jul 2 14:40:14 2001
@@ -47,6 +47,7 @@
*(.gnu.warning)
*(.text.lock) /* out-of-line lock text */
*(.rodata)
+ *(.rodata.*)
*(.glue_7)
*(.glue_7t)
*(.kstrtab)
diff -u --recursive --new-file v2.4.5/linux/arch/arm/vmlinux-armv.lds.in linux/arch/arm/vmlinux-armv.lds.in
--- v2.4.5/linux/arch/arm/vmlinux-armv.lds.in Wed May 16 15:25:16 2001
+++ linux/arch/arm/vmlinux-armv.lds.in Mon Jul 2 14:40:14 2001
@@ -42,6 +42,7 @@
*(.gnu.warning)
*(.text.lock) /* out-of-line lock text */
*(.rodata)
+ *(.rodata.*)
*(.glue_7)
*(.glue_7t)
*(.got) /* Global offset table */
diff -u --recursive --new-file v2.4.5/linux/arch/cris/boot/compressed/decompress.ld linux/arch/cris/boot/compressed/decompress.ld
--- v2.4.5/linux/arch/cris/boot/compressed/decompress.ld Fri Apr 6 10:42:55 2001
+++ linux/arch/cris/boot/compressed/decompress.ld Mon Jul 2 14:40:14 2001
@@ -13,6 +13,7 @@
_stext = . ;
*(.text)
*(.rodata)
+ *(.rodata.*)
_etext = . ;
} > dram
.data :
diff -u --recursive --new-file v2.4.5/linux/arch/cris/cris.ld linux/arch/cris/cris.ld
--- v2.4.5/linux/arch/cris/cris.ld Tue May 1 16:04:56 2001
+++ linux/arch/cris/cris.ld Mon Jul 2 14:40:14 2001
@@ -24,7 +24,7 @@
*(.fixup)
*(.text.__*)
*(.rodata)
- *(.rodata.__*)
+ *(.rodata.*)
}
. = ALIGN(4); /* Exception table */
diff -u --recursive --new-file v2.4.5/linux/arch/cris/drivers/ide.c linux/arch/cris/drivers/ide.c
--- v2.4.5/linux/arch/cris/drivers/ide.c Fri Apr 6 10:42:55 2001
+++ linux/arch/cris/drivers/ide.c Mon Jun 11 19:15:27 2001
@@ -1,4 +1,4 @@
-/* $Id: ide.c,v 1.9 2001/03/01 13:11:18 bjornw Exp $
+/* $Id: ide.c,v 1.16 2001/04/05 08:30:07 matsfg Exp $
*
* Etrax specific IDE functions, like init and PIO-mode setting etc.
* Almost the entire ide.c is used for the rest of the Etrax ATA driver.
@@ -8,6 +8,28 @@
* Mikael Starvik (pio setup stuff)
*
* $Log: ide.c,v $
+ * Revision 1.16 2001/04/05 08:30:07 matsfg
+ * Corrected cse1 and csp0 reset.
+ *
+ * Revision 1.15 2001/04/04 14:34:06 bjornw
+ * Re-instated code that mysteriously disappeared during review updates.
+ *
+ * Revision 1.14 2001/04/04 13:45:12 matsfg
+ * Calls REG_SHADOW_SET for cse1 reset so only the resetbit is affected
+ *
+ * Revision 1.13 2001/04/04 13:26:40 matsfg
+ * memmapping is done in init.c
+ *
+ * Revision 1.12 2001/04/04 11:37:56 markusl
+ * Updated according to review remarks
+ *
+ * Revision 1.11 2001/03/29 12:49:14 matsfg
+ * Changed check for ata_tot_size from >= to >.
+ * Sets sw_len to 0 if size is exactly 65536.
+ *
+ * Revision 1.10 2001/03/16 09:39:30 matsfg
+ * Support for reset on port CSP0
+ *
* Revision 1.9 2001/03/01 13:11:18 bjornw
* 100 -> HZ
*
@@ -158,6 +180,10 @@
#define ATA_PIO0_STROBE 19
#define ATA_PIO0_HOLD 4
+static int e100_dmaproc (ide_dma_action_t func, ide_drive_t *drive);
+static void e100_ideproc (ide_ide_action_t func, ide_drive_t *drive,
+ void *buffer, unsigned int length);
+
/*
* good_dma_drives() lists the model names (from "hdparm -i")
* of drives which do not support mword2 DMA but which are
@@ -174,7 +200,7 @@
unsigned long flags;
pio = 4;
- //pio = ide_get_best_pio_mode(drive, pio, 4, NULL);
+ /* pio = ide_get_best_pio_mode(drive, pio, 4, NULL); */
save_flags(flags);
cli();
@@ -226,10 +252,6 @@
restore_flags(flags);
}
-static int e100_dmaproc (ide_dma_action_t func, ide_drive_t *drive); /* defined below */
-static void e100_ideproc (ide_ide_action_t func, ide_drive_t *drive,
- void *buffer, unsigned int length); /* defined below */
-
void __init
init_e100_ide (void)
{
@@ -277,26 +299,23 @@
*R_GEN_CONFIG = genconfig_shadow;
#ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
-#ifndef CONFIG_CRIS_LOW_MAP
- /* remap the I/O-mapped reset-bit from CSE1 to something inside our kernel space */
- reset_addr = (unsigned long *)ioremap((unsigned long)(MEM_CSE1_START |
- MEM_NON_CACHEABLE), 16);
- *reset_addr = 0;
-#else
- /* LOW_MAP, can't do the ioremap, but it's already mapped straight over */
- reset_addr = (unsigned long *)(MEM_CSE1_START | MEM_NON_CACHEABLE);
- *reset_addr = 0;
+ init_ioremap();
+ REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 0);
#endif
+
+#ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
+ init_ioremap();
+ REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 0);
#endif
/* wait some */
-
- dummy = 1;
- dummy = 2;
- dummy = 3;
+ udelay(25);
#ifdef CONFIG_ETRAX_IDE_CSE1_16_RESET
- *reset_addr = 1 << 16;
+ REG_SHADOW_SET(port_cse1_addr, port_cse1_shadow, 16, 1);
+#endif
+#ifdef CONFIG_ETRAX_IDE_CSP0_8_RESET
+ REG_SHADOW_SET(port_csp0_addr, port_csp0_shadow, 8, 1);
#endif
#ifdef CONFIG_ETRAX_IDE_G27_RESET
*R_PORT_G_DATA = 0; /* de-assert bus-reset */
@@ -349,7 +368,6 @@
e100_atapi_input_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
{
ide_ioreg_t data_reg = IDE_DATA_REG;
- unsigned long status;
D(printk("atapi_input_bytes, dreg 0x%x, buffer 0x%x, count %d\n",
data_reg, buffer, bytecount));
@@ -376,7 +394,7 @@
/* initiate a multi word dma read using PIO handshaking */
- *R_ATA_TRANSFER_CNT = bytecount >> 1;
+ *R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
*R_ATA_CTRL_DATA = data_reg |
IO_STATE(R_ATA_CTRL_DATA, rw, read) |
@@ -390,35 +408,38 @@
LED_DISK_READ(1);
WAIT_DMA(3);
LED_DISK_READ(0);
-
+
#if 0
- /* old polled transfer code */
-
- /* initiate a multi word read */
-
- *R_ATA_TRANSFER_CNT = wcount << 1;
-
- *R_ATA_CTRL_DATA = data_reg |
- IO_STATE(R_ATA_CTRL_DATA, rw, read) |
- IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
- IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
- IO_STATE(R_ATA_CTRL_DATA, multi, on) |
- IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
-
- /* svinto has a latency until the busy bit actually is set */
-
- nop(); nop();
- nop(); nop();
- nop(); nop();
- nop(); nop();
- nop(); nop();
-
- /* unit should be busy during multi transfer */
- while((status = *R_ATA_STATUS_DATA) & IO_MASK(R_ATA_STATUS_DATA, busy)) {
- while(!(status & IO_MASK(R_ATA_STATUS_DATA, dav)))
- status = *R_ATA_STATUS_DATA;
- *ptr++ = (unsigned short)(status & 0xffff);
- }
+ /* old polled transfer code
+ * this should be moved into a new function that can do polled
+ * transfers if DMA is not available
+ */
+
+ /* initiate a multi word read */
+
+ *R_ATA_TRANSFER_CNT = wcount << 1;
+
+ *R_ATA_CTRL_DATA = data_reg |
+ IO_STATE(R_ATA_CTRL_DATA, rw, read) |
+ IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
+ IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
+ IO_STATE(R_ATA_CTRL_DATA, multi, on) |
+ IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
+
+ /* svinto has a latency until the busy bit actually is set */
+
+ nop(); nop();
+ nop(); nop();
+ nop(); nop();
+ nop(); nop();
+ nop(); nop();
+
+ /* unit should be busy during multi transfer */
+ while((status = *R_ATA_STATUS_DATA) & IO_MASK(R_ATA_STATUS_DATA, busy)) {
+ while(!(status & IO_MASK(R_ATA_STATUS_DATA, dav)))
+ status = *R_ATA_STATUS_DATA;
+ *ptr++ = (unsigned short)(status & 0xffff);
+ }
#endif
}
@@ -426,8 +447,6 @@
e100_atapi_output_bytes (ide_drive_t *drive, void *buffer, unsigned int bytecount)
{
ide_ioreg_t data_reg = IDE_DATA_REG;
- unsigned short *ptr = (unsigned short *)buffer;
- unsigned long ctrl;
D(printk("atapi_output_bytes, dreg 0x%x, buffer 0x%x, count %d\n",
data_reg, buffer, bytecount));
@@ -454,7 +473,7 @@
/* initiate a multi word dma write using PIO handshaking */
- *R_ATA_TRANSFER_CNT = bytecount >> 1;
+ *R_ATA_TRANSFER_CNT = IO_FIELD(R_ATA_TRANSFER_CNT, count, bytecount >> 1);
*R_ATA_CTRL_DATA = data_reg |
IO_STATE(R_ATA_CTRL_DATA, rw, write) |
@@ -470,40 +489,42 @@
LED_DISK_WRITE(0);
#if 0
- /* old polled write code */
+ /* old polled write code - see comment in input_bytes */
- while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)); /* wait for busy flag */
+ /* wait for busy flag */
+ while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
- /* initiate a multi word write */
+ /* initiate a multi word write */
- *R_ATA_TRANSFER_CNT = bytecount >> 1;
+ *R_ATA_TRANSFER_CNT = bytecount >> 1;
- ctrl = data_reg |
- IO_STATE(R_ATA_CTRL_DATA, rw, write) |
- IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
- IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
- IO_STATE(R_ATA_CTRL_DATA, multi, on) |
- IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
-
- LED_DISK_WRITE(1);
-
- /* Etrax will set busy = 1 until the multi pio transfer has finished
- * and tr_rdy = 1 after each succesful word transfer.
- * When the last byte has been transferred Etrax will first set tr_tdy = 1
- * and then busy = 0 (not in the same cycle). If we read busy before it
- * has been set to 0 we will think that we should transfer more bytes
- * and then tr_rdy would be 0 forever. This is solved by checking busy
- * in the inner loop.
- */
-
- do {
- *R_ATA_CTRL_DATA = ctrl | *ptr++;
- while(!(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, tr_rdy)) &&
- (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)));
- } while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
+ ctrl = data_reg |
+ IO_STATE(R_ATA_CTRL_DATA, rw, write) |
+ IO_STATE(R_ATA_CTRL_DATA, src_dst, register) |
+ IO_STATE(R_ATA_CTRL_DATA, handsh, pio) |
+ IO_STATE(R_ATA_CTRL_DATA, multi, on) |
+ IO_STATE(R_ATA_CTRL_DATA, dma_size, word);
+
+ LED_DISK_WRITE(1);
+
+ /* Etrax will set busy = 1 until the multi pio transfer has finished
+ * and tr_rdy = 1 after each succesful word transfer.
+ * When the last byte has been transferred Etrax will first set tr_tdy = 1
+ * and then busy = 0 (not in the same cycle). If we read busy before it
+ * has been set to 0 we will think that we should transfer more bytes
+ * and then tr_rdy would be 0 forever. This is solved by checking busy
+ * in the inner loop.
+ */
+
+ do {
+ *R_ATA_CTRL_DATA = ctrl | *ptr++;
+ while(!(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, tr_rdy)) &&
+ (*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy)));
+ } while(*R_ATA_STATUS_DATA & IO_MASK(R_ATA_STATUS_DATA, busy));
+
+ LED_DISK_WRITE(0);
+#endif
- LED_DISK_WRITE(0);
-#endif
}
/*
@@ -604,7 +625,7 @@
those blocks that were actually set-up for transfer.
*/
- if(ata_tot_size + size >= 131072) {
+ if(ata_tot_size + size > 131072) {
printk("too large total ATA DMA request, %d + %d!\n", ata_tot_size, size);
return 1;
}
@@ -625,7 +646,12 @@
addr += 65536;
}
/* ok we want to do IO at addr, size bytes. set up a new descriptor entry */
- ata_descrs[count].sw_len = size;
+ if(size == 65536) {
+ ata_descrs[count].sw_len = 0; /* 0 means 65536, this is a 16-bit field */
+ }
+ else {
+ ata_descrs[count].sw_len = size;
+ }
ata_descrs[count].ctrl = 0;
ata_descrs[count].buf = addr;
ata_descrs[count].next = virt_to_phys(&ata_descrs[count + 1]);
@@ -793,9 +819,11 @@
/* initiate a multi word dma read using DMA handshaking */
- *R_ATA_TRANSFER_CNT = ata_tot_size >> 1;
+ *R_ATA_TRANSFER_CNT =
+ IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
- *R_ATA_CTRL_DATA = IDE_DATA_REG |
+ *R_ATA_CTRL_DATA =
+ IO_FIELD(R_ATA_CTRL_DATA, data, IDE_DATA_REG) |
IO_STATE(R_ATA_CTRL_DATA, rw, read) |
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
IO_STATE(R_ATA_CTRL_DATA, handsh, dma) |
@@ -834,9 +862,11 @@
/* initiate a multi word dma write using DMA handshaking */
- *R_ATA_TRANSFER_CNT = ata_tot_size >> 1;
+ *R_ATA_TRANSFER_CNT =
+ IO_FIELD(R_ATA_TRANSFER_CNT, count, ata_tot_size >> 1);
- *R_ATA_CTRL_DATA = IDE_DATA_REG |
+ *R_ATA_CTRL_DATA =
+ IO_FIELD(R_ATA_CTRL_DATA, data, IDE_DATA_REG) |
IO_STATE(R_ATA_CTRL_DATA, rw, write) |
IO_STATE(R_ATA_CTRL_DATA, src_dst, dma) |
IO_STATE(R_ATA_CTRL_DATA, handsh, dma) |
diff -u --recursive --new-file v2.4.5/linux/arch/i386/boot/tools/build.c linux/arch/i386/boot/tools/build.c
--- v2.4.5/linux/arch/i386/boot/tools/build.c Mon Mar 13 09:35:06 2000
+++ linux/arch/i386/boot/tools/build.c Mon Jul 2 13:56:40 2001
@@ -154,7 +154,7 @@
if (sys_size > (is_big_kernel ? 0x28000 : DEF_SYSSIZE))
die("System is too big. Try using %smodules.",
is_big_kernel ? "" : "bzImage or ");
- if (sys_size > 0xffff)
+ if (sys_size > 0xefff)
fprintf(stderr,"warning: kernel is too big for standalone boot "
"from floppy\n");
while (sz > 0) {
diff -u --recursive --new-file v2.4.5/linux/arch/i386/config.in linux/arch/i386/config.in
--- v2.4.5/linux/arch/i386/config.in Thu May 24 15:14:08 2001
+++ linux/arch/i386/config.in Wed Jun 20 17:47:39 2001
@@ -245,6 +245,10 @@
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
dep_bool ' ACPI support' CONFIG_ACPI $CONFIG_PM
+
+ if [ "$CONFIG_ACPI" != "n" ]; then
+ source drivers/acpi/Config.in
+ fi
fi
dep_tristate ' Advanced Power Management BIOS support' CONFIG_APM $CONFIG_PM
@@ -374,6 +378,10 @@
endmenu
source drivers/usb/Config.in
+
+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ source net/bluetooth/Config.in
+fi
mainmenu_option next_comment
comment 'Kernel hacking'
diff -u --recursive --new-file v2.4.5/linux/arch/i386/defconfig linux/arch/i386/defconfig
--- v2.4.5/linux/arch/i386/defconfig Tue May 22 10:53:06 2001
+++ linux/arch/i386/defconfig Mon Jul 2 16:08:28 2001
@@ -192,7 +192,7 @@
# 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_IDEDISK_MULTI_MODE=y
# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
# CONFIG_BLK_DEV_IDEDISK_IBM is not set
@@ -217,10 +217,10 @@
CONFIG_BLK_DEV_RZ1000=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_IDEDMA_PCI is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_IDEDMA_PCI_AUTO is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_PCI_WIP is not set
# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
# CONFIG_BLK_DEV_AEC62XX is not set
@@ -235,8 +235,8 @@
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_HPT34X_AUTODMA is not set
# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_PIIX_TUNING is not set
+CONFIG_BLK_DEV_PIIX=y
+CONFIG_PIIX_TUNING=y
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_PDC202XX is not set
@@ -247,7 +247,8 @@
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDEDMA_AUTO is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDEDMA_IVB is not set
# CONFIG_DMA_NONPCI is not set
CONFIG_BLK_DEV_IDE_MODES=y
@@ -362,10 +363,18 @@
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNGEM 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_HP100 is not set
# CONFIG_NET_ISA is not set
@@ -376,11 +385,12 @@
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
# CONFIG_TULIP is not set
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
# CONFIG_DE4X5 is not set
# CONFIG_DGRS is not set
# CONFIG_DM9102 is not set
CONFIG_EEPRO100=y
-# CONFIG_EEPRO100_PM is not set
# CONFIG_LNE390 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
@@ -397,16 +407,19 @@
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_WINBOND_840 is not set
-# CONFIG_HAPPYMEAL is not set
# CONFIG_NET_POCKET is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+# CONFIG_MYRI_SBUS is not set
# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
+# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
@@ -445,7 +458,6 @@
# CONFIG_PCMCIA_NETWAVE is not set
# CONFIG_PCMCIA_WAVELAN is not set
# CONFIG_AIRONET4500_CS is not set
-CONFIG_PCMCIA_NETCARD=y
#
# Amateur Radio support
@@ -530,6 +542,7 @@
CONFIG_AGP_AMD=y
CONFIG_AGP_SIS=y
CONFIG_AGP_ALI=y
+# CONFIG_AGP_SWORKS is not set
CONFIG_DRM=y
CONFIG_DRM_TDFX=y
# CONFIG_DRM_GAMMA is not set
@@ -587,7 +600,6 @@
# 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
@@ -648,6 +660,7 @@
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
# CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_TVMIXER is not set
@@ -703,6 +716,7 @@
# CONFIG_USB_IBMCAM is not set
# CONFIG_USB_OV511 is not set
# CONFIG_USB_PWC is not set
+# CONFIG_USB_SE401 is not set
# CONFIG_USB_DSBR is not set
# CONFIG_USB_DABUSB is not set
@@ -711,6 +725,7 @@
#
# CONFIG_USB_PLUSB is not set
# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_CATC is not set
# CONFIG_USB_NET1080 is not set
#
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/apic.c linux/arch/i386/kernel/apic.c
--- v2.4.5/linux/arch/i386/kernel/apic.c Tue Dec 5 12:43:48 2000
+++ linux/arch/i386/kernel/apic.c Wed Jun 20 11:06:38 2001
@@ -23,6 +23,7 @@
#include
#include
+#include
#include
#include
#include
@@ -270,7 +271,13 @@
* PCI Ne2000 networking cards and PII/PIII processors, dual
* BX chipset. ]
*/
-#if 0
+ /*
+ * Actually disabling the focus CPU check just makes the hang less
+ * frequent as it makes the interrupt distributon model be more
+ * like LRU than MRU (the short-term load is more even across CPUs).
+ * See also the comment in end_level_ioapic_irq(). --macro
+ */
+#if 1
/* Enable focus processor (bit==0) */
value &= ~(1<<9);
#else
@@ -728,6 +735,9 @@
irq_enter(cpu, 0);
smp_local_timer_interrupt(regs);
irq_exit(cpu, 0);
+
+ if (softirq_pending(cpu))
+ do_softirq();
}
/*
@@ -764,7 +774,7 @@
apic_write(APIC_ESR, 0);
v1 = apic_read(APIC_ESR);
ack_APIC_irq();
- irq_err_count++;
+ atomic_inc(&irq_err_count);
/* Here is what the APIC error bits mean:
0: Send CS error
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/bluesmoke.c linux/arch/i386/kernel/bluesmoke.c
--- v2.4.5/linux/arch/i386/kernel/bluesmoke.c Mon May 21 12:34:50 2001
+++ linux/arch/i386/kernel/bluesmoke.c Sun Jul 1 19:52:45 2001
@@ -182,7 +182,7 @@
* Set up machine check reporting on the Winchip C6 series
*/
-static void winchip_mcheck_init(struct cpuinfo_x86 *c)
+static void __init winchip_mcheck_init(struct cpuinfo_x86 *c)
{
u32 lo, hi;
/* Not supported on C3 */
@@ -207,8 +207,14 @@
* This has to be run for each processor
*/
+
+static int mce_disabled = 0;
+
void __init mcheck_init(struct cpuinfo_x86 *c)
{
+ if(mce_disabled)
+ return;
+
switch(c->x86_vendor)
{
case X86_VENDOR_AMD:
@@ -226,3 +232,10 @@
break;
}
}
+
+static int __init mcheck_disable(char *str)
+{
+ mce_disabled = 1;
+ return 1;
+}
+__setup("nomce", mcheck_disable);
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
--- v2.4.5/linux/arch/i386/kernel/entry.S Wed Nov 8 17:09:50 2000
+++ linux/arch/i386/kernel/entry.S Tue Jun 12 11:47:28 2001
@@ -203,18 +203,7 @@
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
movl %eax,EAX(%esp) # save the return value
ENTRY(ret_from_sys_call)
-#ifdef CONFIG_SMP
- movl processor(%ebx),%eax
- shll $CONFIG_X86_L1_CACHE_SHIFT,%eax
- movl SYMBOL_NAME(irq_stat)(,%eax),%ecx # softirq_active
- testl SYMBOL_NAME(irq_stat)+4(,%eax),%ecx # softirq_mask
-#else
- movl SYMBOL_NAME(irq_stat),%ecx # softirq_active
- testl SYMBOL_NAME(irq_stat)+4,%ecx # softirq_mask
-#endif
- jne handle_softirq
-
-ret_with_reschedule:
+ cli # need_resched and signals atomic test
cmpl $0,need_resched(%ebx)
jne reschedule
cmpl $0,sigpending(%ebx)
@@ -257,33 +246,16 @@
jmp ret_from_sys_call
ALIGN
-ret_from_exception:
-#ifdef CONFIG_SMP
- GET_CURRENT(%ebx)
- movl processor(%ebx),%eax
- shll $CONFIG_X86_L1_CACHE_SHIFT,%eax
- movl SYMBOL_NAME(irq_stat)(,%eax),%ecx # softirq_active
- testl SYMBOL_NAME(irq_stat)+4(,%eax),%ecx # softirq_mask
-#else
- movl SYMBOL_NAME(irq_stat),%ecx # softirq_active
- testl SYMBOL_NAME(irq_stat)+4,%ecx # softirq_mask
-#endif
- jne handle_softirq
-
ENTRY(ret_from_intr)
GET_CURRENT(%ebx)
+ret_from_exception:
movl EFLAGS(%esp),%eax # mix EFLAGS and CS
movb CS(%esp),%al
testl $(VM_MASK | 3),%eax # return to VM86 mode or non-supervisor?
- jne ret_with_reschedule
+ jne ret_from_sys_call
jmp restore_all
ALIGN
-handle_softirq:
- call SYMBOL_NAME(do_softirq)
- jmp ret_from_intr
-
- ALIGN
reschedule:
call SYMBOL_NAME(schedule) # test
jmp ret_from_sys_call
@@ -334,14 +306,16 @@
pushl $-1 # mark this as an int
SAVE_ALL
GET_CURRENT(%ebx)
- pushl $ret_from_exception
movl %cr0,%eax
testl $0x4,%eax # EM (math emulation bit)
- je SYMBOL_NAME(math_state_restore)
+ jne device_not_available_emulate
+ call SYMBOL_NAME(math_state_restore)
+ jmp ret_from_exception
+device_not_available_emulate:
pushl $0 # temporary storage for ORIG_EIP
call SYMBOL_NAME(math_emulate)
addl $4,%esp
- ret
+ jmp ret_from_exception
ENTRY(debug)
pushl $0
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/head.S linux/arch/i386/kernel/head.S
--- v2.4.5/linux/arch/i386/kernel/head.S Fri Apr 20 16:23:30 2001
+++ linux/arch/i386/kernel/head.S Wed Jun 20 11:00:53 2001
@@ -41,8 +41,6 @@
*
* On entry, %esi points to the real-mode code as a 32-bit pointer.
*/
-ENTRY(stext)
-ENTRY(_stext)
startup_32:
/*
* Set segments to known values
@@ -409,6 +407,12 @@
ENTRY(empty_zero_page)
.org 0x5000
+
+/*
+ * Real beginning of normal "text" segment
+ */
+ENTRY(stext)
+ENTRY(_stext)
/*
* This starts the data section. Note that the above is all
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/i386_ksyms.c linux/arch/i386/kernel/i386_ksyms.c
--- v2.4.5/linux/arch/i386/kernel/i386_ksyms.c Tue May 15 08:46:20 2001
+++ linux/arch/i386/kernel/i386_ksyms.c Mon Jul 2 14:49:24 2001
@@ -90,9 +90,6 @@
EXPORT_SYMBOL_NOVERS(__get_user_1);
EXPORT_SYMBOL_NOVERS(__get_user_2);
EXPORT_SYMBOL_NOVERS(__get_user_4);
-EXPORT_SYMBOL_NOVERS(__put_user_1);
-EXPORT_SYMBOL_NOVERS(__put_user_2);
-EXPORT_SYMBOL_NOVERS(__put_user_4);
EXPORT_SYMBOL(strtok);
EXPORT_SYMBOL(strpbrk);
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/i8259.c linux/arch/i386/kernel/i8259.c
--- v2.4.5/linux/arch/i386/kernel/i8259.c Fri Feb 9 11:29:44 2001
+++ linux/arch/i386/kernel/i8259.c Wed Jun 20 11:06:38 2001
@@ -12,6 +12,7 @@
#include
#include
+#include
#include
#include
#include
@@ -321,7 +322,7 @@
printk("spurious 8259A interrupt: IRQ%d.\n", irq);
spurious_irq_mask |= irqmask;
}
- irq_err_count++;
+ atomic_inc(&irq_err_count);
/*
* Theoretically we do not have to handle this IRQ,
* but in Linux this does not cause problems and is
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/io_apic.c linux/arch/i386/kernel/io_apic.c
--- v2.4.5/linux/arch/i386/kernel/io_apic.c Fri Feb 9 11:28:31 2001
+++ linux/arch/i386/kernel/io_apic.c Wed Jun 20 11:06:38 2001
@@ -33,6 +33,8 @@
#include
#include
+#define APIC_LOCKUP_DEBUG
+
static spinlock_t ioapic_lock = SPIN_LOCK_UNLOCKED;
/*
@@ -122,8 +124,14 @@
static void name##_IO_APIC_irq (unsigned int irq) \
__DO_ACTION(R, ACTION, FINAL)
-DO_ACTION( __mask, 0, |= 0x00010000, io_apic_sync(entry->apic))/* mask = 1 */
-DO_ACTION( __unmask, 0, &= 0xfffeffff, ) /* mask = 0 */
+DO_ACTION( __mask, 0, |= 0x00010000, io_apic_sync(entry->apic) )
+ /* mask = 1 */
+DO_ACTION( __unmask, 0, &= 0xfffeffff, )
+ /* mask = 0 */
+DO_ACTION( __mask_and_edge, 0, = (reg & 0xffff7fff) | 0x00010000, )
+ /* mask = 1, trigger = 0 */
+DO_ACTION( __unmask_and_level, 0, = (reg & 0xfffeffff) | 0x00008000, )
+ /* mask = 0, trigger = 1 */
static void mask_IO_APIC_irq (unsigned int irq)
{
@@ -255,10 +263,16 @@
*/
static int pin_2_irq(int idx, int apic, int pin);
-int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pci_pin)
+int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin)
{
int apic, i, best_guess = -1;
+ Dprintk("querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n",
+ bus, slot, pin);
+ if (mp_bus_id_to_pci_bus[bus] == -1) {
+ printk(KERN_WARNING "PCI BIOS passed nonexistent PCI bus %d!\n", bus);
+ return -1;
+ }
for (i = 0; i < mp_irq_entries; i++) {
int lbus = mp_irqs[i].mpc_srcbus;
@@ -269,14 +283,14 @@
if ((mp_bus_id_to_type[lbus] == MP_BUS_PCI) &&
!mp_irqs[i].mpc_irqtype &&
- (bus == mp_bus_id_to_pci_bus[mp_irqs[i].mpc_srcbus]) &&
+ (bus == lbus) &&
(slot == ((mp_irqs[i].mpc_srcbusirq >> 2) & 0x1f))) {
int irq = pin_2_irq(i,apic,mp_irqs[i].mpc_dstirq);
if (!(apic || IO_APIC_IRQ(irq)))
continue;
- if (pci_pin == (mp_irqs[i].mpc_srcbusirq & 3))
+ if (pin == (mp_irqs[i].mpc_srcbusirq & 3))
return irq;
/*
* Use the first all-but-pin matching entry as a
@@ -728,9 +742,11 @@
printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)®_01);
printk(KERN_DEBUG "....... : max redirection entries: %04X\n", reg_01.entries);
if ( (reg_01.entries != 0x0f) && /* older (Neptune) boards */
+ (reg_01.entries != 0x11) &&
(reg_01.entries != 0x17) && /* typical ISA+PCI boards */
(reg_01.entries != 0x1b) && /* Compaq Proliant boards */
(reg_01.entries != 0x1f) && /* dual Xeon boards */
+ (reg_01.entries != 0x20) &&
(reg_01.entries != 0x22) && /* bigger Xeon boards */
(reg_01.entries != 0x2E) &&
(reg_01.entries != 0x3F)
@@ -847,6 +863,8 @@
v = apic_read(APIC_EOI);
printk(KERN_DEBUG "... APIC EOI: %08x\n", v);
+ v = apic_read(APIC_RRR);
+ printk(KERN_DEBUG "... APIC RRR: %08x\n", v);
v = apic_read(APIC_LDR);
printk(KERN_DEBUG "... APIC LDR: %08x\n", v);
v = apic_read(APIC_DFR);
@@ -1191,12 +1209,61 @@
#define enable_level_ioapic_irq unmask_IO_APIC_irq
#define disable_level_ioapic_irq mask_IO_APIC_irq
-static void end_level_ioapic_irq (unsigned int i)
+static void end_level_ioapic_irq (unsigned int irq)
{
+ unsigned long v;
+
+/*
+ * It appears there is an erratum which affects at least version 0x11
+ * of I/O APIC (that's the 82093AA and cores integrated into various
+ * chipsets). Under certain conditions a level-triggered interrupt is
+ * erroneously delivered as edge-triggered one but the respective IRR
+ * bit gets set nevertheless. As a result the I/O unit expects an EOI
+ * message but it will never arrive and further interrupts are blocked
+ * from the source. The exact reason is so far unknown, but the
+ * phenomenon was observed when two consecutive interrupt requests
+ * from a given source get delivered to the same CPU and the source is
+ * temporarily disabled in between.
+ *
+ * A workaround is to simulate an EOI message manually. We achieve it
+ * by setting the trigger mode to edge and then to level when the edge
+ * trigger mode gets detected in the TMR of a local APIC for a
+ * level-triggered interrupt. We mask the source for the time of the
+ * operation to prevent an edge-triggered interrupt escaping meanwhile.
+ * The idea is from Manfred Spraul. --macro
+ */
+ v = apic_read(APIC_TMR + ((IO_APIC_VECTOR(irq) & ~0x1f) >> 1));
+
ack_APIC_irq();
+
+ if (!(v & (1 << (IO_APIC_VECTOR(irq) & 0x1f)))) {
+#ifdef APIC_MISMATCH_DEBUG
+ atomic_inc(&irq_mis_count);
+#endif
+ spin_lock(&ioapic_lock);
+ __mask_and_edge_IO_APIC_irq(irq);
+#ifdef APIC_LOCKUP_DEBUG
+ for (;;) {
+ struct irq_pin_list *entry = irq_2_pin + irq;
+ unsigned int reg;
+
+ if (entry->pin == -1)
+ break;
+ reg = io_apic_read(entry->apic, 0x10 + entry->pin * 2);
+ if (reg & 0x00004000)
+ printk(KERN_CRIT "Aieee!!! Remote IRR"
+ " still set after unlock!\n");
+ if (!entry->next)
+ break;
+ entry = irq_2_pin + entry->next;
+ }
+#endif
+ __unmask_and_level_IO_APIC_irq(irq);
+ spin_unlock(&ioapic_lock);
+ }
}
-static void mask_and_ack_level_ioapic_irq (unsigned int i) { /* nothing */ }
+static void mask_and_ack_level_ioapic_irq (unsigned int irq) { /* nothing */ }
static void set_ioapic_affinity (unsigned int irq, unsigned long mask)
{
@@ -1426,7 +1493,7 @@
pin1 = find_isa_irq_pin(0, mp_INT);
pin2 = find_isa_irq_pin(0, mp_ExtINT);
- printk(KERN_INFO "..TIMER: vector=%d pin1=%d pin2=%d\n", vector, pin1, pin2);
+ printk(KERN_INFO "..TIMER: vector=%02X pin1=%d pin2=%d\n", vector, pin1, pin2);
if (pin1 != -1) {
/*
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/irq.c linux/arch/i386/kernel/irq.c
--- v2.4.5/linux/arch/i386/kernel/irq.c Fri Feb 9 11:29:44 2001
+++ linux/arch/i386/kernel/irq.c Wed Jun 20 11:06:38 2001
@@ -33,6 +33,7 @@
#include
#include
+#include
#include
#include
#include
@@ -119,7 +120,12 @@
end_none
};
-volatile unsigned long irq_err_count;
+atomic_t irq_err_count;
+#ifdef CONFIG_X86_IO_APIC
+#ifdef APIC_MISMATCH_DEBUG
+atomic_t irq_mis_count;
+#endif
+#endif
/*
* Generic, controller-independent functions:
@@ -167,7 +173,12 @@
apic_timer_irqs[cpu_logical_map(j)]);
p += sprintf(p, "\n");
#endif
- p += sprintf(p, "ERR: %10lu\n", irq_err_count);
+ p += sprintf(p, "ERR: %10u\n", atomic_read(&irq_err_count));
+#ifdef CONFIG_X86_IO_APIC
+#ifdef APIC_MISMATCH_DEBUG
+ p += sprintf(p, "MIS: %10u\n", atomic_read(&irq_mis_count));
+#endif
+#endif
return p - buf;
}
@@ -623,7 +634,7 @@
desc->handler->end(irq);
spin_unlock(&desc->lock);
- if (softirq_active(cpu) & softirq_mask(cpu))
+ if (softirq_pending(cpu))
do_softirq();
return 1;
}
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/mpparse.c linux/arch/i386/kernel/mpparse.c
--- v2.4.5/linux/arch/i386/kernel/mpparse.c Tue Nov 14 21:25:34 2000
+++ linux/arch/i386/kernel/mpparse.c Mon Jun 11 19:15:27 2001
@@ -36,7 +36,7 @@
*/
int apic_version [MAX_APICS];
int mp_bus_id_to_type [MAX_MP_BUSSES];
-int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { -1, };
+int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 };
int mp_current_pci_id;
int pic_mode;
unsigned long mp_lapic_addr;
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/pci-i386.h linux/arch/i386/kernel/pci-i386.h
--- v2.4.5/linux/arch/i386/kernel/pci-i386.h Thu Jun 22 07:17:16 2000
+++ linux/arch/i386/kernel/pci-i386.h Wed Jun 20 11:21:33 2001
@@ -12,14 +12,15 @@
#define DBG(x...)
#endif
-#define PCI_PROBE_BIOS 1
-#define PCI_PROBE_CONF1 2
-#define PCI_PROBE_CONF2 4
-#define PCI_NO_SORT 0x100
-#define PCI_BIOS_SORT 0x200
-#define PCI_NO_CHECKS 0x400
-#define PCI_ASSIGN_ROMS 0x1000
-#define PCI_BIOS_IRQ_SCAN 0x2000
+#define PCI_PROBE_BIOS 0x0001
+#define PCI_PROBE_CONF1 0x0002
+#define PCI_PROBE_CONF2 0x0004
+#define PCI_NO_SORT 0x0100
+#define PCI_BIOS_SORT 0x0200
+#define PCI_NO_CHECKS 0x0400
+#define PCI_ASSIGN_ROMS 0x1000
+#define PCI_BIOS_IRQ_SCAN 0x2000
+#define PCI_ASSIGN_ALL_BUSSES 0x4000
extern unsigned int pci_probe;
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/pci-irq.c linux/arch/i386/kernel/pci-irq.c
--- v2.4.5/linux/arch/i386/kernel/pci-irq.c Wed May 16 10:25:39 2001
+++ linux/arch/i386/kernel/pci-irq.c Wed Jun 20 11:16:01 2001
@@ -411,7 +411,7 @@
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX, pirq_piix_get, pirq_piix_set },
{ "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
- { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82820FW_0, pirq_piix_get, pirq_piix_set },
+ { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, pirq_piix_get, pirq_piix_set },
{ "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },
@@ -587,13 +587,14 @@
if (info->irq[pin].link == pirq) {
/* We refuse to override the dev->irq information. Give a warning! */
if (dev2->irq && dev2->irq != irq) {
- printk(KERN_INFO "IRQ routing conflict in pirq table for device %s\n", dev2->slot_name);
+ printk(KERN_INFO "IRQ routing conflict for %s, have irq %d, want irq %d\n",
+ dev2->slot_name, dev2->irq, irq);
continue;
}
dev2->irq = irq;
pirq_penalty[irq]++;
if (dev != dev2)
- printk(KERN_INFO "PCI: The same IRQ used for device %s\n", dev2->slot_name);
+ printk(KERN_INFO "PCI: Sharing IRQ %d with %s\n", irq, dev2->slot_name);
}
}
return 1;
@@ -656,10 +657,12 @@
if (pin) {
pin--; /* interrupt pins are numbered starting from 1 */
irq = IO_APIC_get_PCI_irq_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
-/*
- * Will be removed completely if things work out well with fuzzy parsing
- */
-#if 0
+ /*
+ * Busses behind bridges are typically not listed in the MP-table.
+ * In this case we have to look up the IRQ based on the parent bus,
+ * parent slot, and pin number. The SMP code detects such bridged
+ * busses itself so we should get into this branch reliably.
+ */
if (irq < 0 && dev->bus->parent) { /* go back to the bridge */
struct pci_dev * bridge = dev->bus->self;
@@ -670,7 +673,6 @@
printk(KERN_WARNING "PCI: using PPB(B%d,I%d,P%d) to get irq %d\n",
bridge->bus->number, PCI_SLOT(bridge->devfn), pin, irq);
}
-#endif
if (irq >= 0) {
printk(KERN_INFO "PCI->APIC IRQ transform: (B%d,I%d,P%d) -> %d\n",
dev->bus->number, PCI_SLOT(dev->devfn), pin, irq);
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/pci-pc.c linux/arch/i386/kernel/pci-pc.c
--- v2.4.5/linux/arch/i386/kernel/pci-pc.c Thu Apr 19 22:57:06 2001
+++ linux/arch/i386/kernel/pci-pc.c Wed Jun 20 11:21:33 2001
@@ -940,18 +940,6 @@
pcibios_max_latency = 32;
}
-static void __init pci_fixup_via_acpi(struct pci_dev *d)
-{
- /*
- * VIA ACPI device: IRQ line in PCI config byte 0x42
- */
- u8 irq;
- pci_read_config_byte(d, 0x42, &irq);
- irq &= 0x0f;
- if (irq && (irq != 2))
- d->irq = irq;
-}
-
static void __init pci_fixup_piix4_acpi(struct pci_dev *d)
{
/*
@@ -1006,8 +994,6 @@
{ PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency },
- { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3, pci_fixup_via_acpi },
- { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, pci_fixup_via_acpi },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C691, pci_fixup_via691 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C598_1, pci_fixup_via691_2 },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi },
@@ -1104,6 +1090,9 @@
else if (!strcmp(str, "rom")) {
pci_probe |= PCI_ASSIGN_ROMS;
return NULL;
+ } else if (!strcmp(str, "assign-busses")) {
+ pci_probe |= PCI_ASSIGN_ALL_BUSSES;
+ return NULL;
} else if (!strncmp(str, "irqmask=", 8)) {
pcibios_irq_mask = simple_strtol(str+8, NULL, 0);
return NULL;
@@ -1112,6 +1101,11 @@
return NULL;
}
return str;
+}
+
+unsigned int pcibios_assign_all_busses(void)
+{
+ return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
}
int pcibios_enable_device(struct pci_dev *dev)
diff -u --recursive --new-file v2.4.5/linux/arch/i386/kernel/traps.c linux/arch/i386/kernel/traps.c
--- v2.4.5/linux/arch/i386/kernel/traps.c Mon May 7 14:15:21 2001
+++ linux/arch/i386/kernel/traps.c Wed Jun 20 13:59:44 2001
@@ -105,6 +105,7 @@
i = 1;
module_start = VMALLOC_START;
module_end = VMALLOC_END;
+ module_end = 0;
while (((long) stack & (THREAD_SIZE-1)) != 0) {
addr = *stack++;
/*
@@ -129,7 +130,12 @@
void show_trace_task(struct task_struct *tsk)
{
- show_trace(&tsk->thread.esp);
+ unsigned long esp = tsk->thread.esp;
+
+ /* User space on another CPU? */
+ if ((esp ^ (unsigned long)tsk) & (PAGE_MASK<<1))
+ return;
+ show_trace((unsigned long *)esp);
}
void show_stack(unsigned long * esp)
diff -u --recursive --new-file v2.4.5/linux/arch/i386/lib/Makefile linux/arch/i386/lib/Makefile
--- v2.4.5/linux/arch/i386/lib/Makefile Wed Apr 25 13:31:03 2001
+++ linux/arch/i386/lib/Makefile Mon Jul 2 16:15:33 2001
@@ -8,7 +8,7 @@
L_TARGET = lib.a
obj-y = checksum.o old-checksum.o delay.o \
- usercopy.o getuser.o putuser.o \
+ usercopy.o getuser.o \
memcpy.o strstr.o
obj-$(CONFIG_X86_USE_3DNOW) += mmx.o
diff -u --recursive --new-file v2.4.5/linux/arch/i386/lib/putuser.S linux/arch/i386/lib/putuser.S
--- v2.4.5/linux/arch/i386/lib/putuser.S Mon Jan 12 13:37:26 1998
+++ linux/arch/i386/lib/putuser.S Wed Dec 31 16:00:00 1969
@@ -1,71 +0,0 @@
-/*
- * __put_user functions.
- *
- * (C) Copyright 1998 Linus Torvalds
- *
- * These functions have a non-standard call interface
- * to make them more efficient.
- */
-
-/*
- * __put_user_X
- *
- * Inputs: %eax contains the address
- * %edx contains the value
- *
- * Outputs: %eax is error code (0 or -EFAULT)
- * %ecx is corrupted (will contain "current_task").
- *
- * These functions should not modify any other registers,
- * as they get called from within inline assembly.
- */
-
-addr_limit = 12
-
-.text
-.align 4
-.globl __put_user_1
-__put_user_1:
- movl %esp,%ecx
- andl $0xffffe000,%ecx
- cmpl addr_limit(%ecx),%eax
- jae bad_put_user
-1: movb %dl,(%eax)
- xorl %eax,%eax
- ret
-
-.align 4
-.globl __put_user_2
-__put_user_2:
- addl $1,%eax
- movl %esp,%ecx
- jc bad_put_user
- andl $0xffffe000,%ecx
- cmpl addr_limit(%ecx),%eax
- jae bad_put_user
-2: movw %dx,-1(%eax)
- xorl %eax,%eax
- ret
-
-.align 4
-.globl __put_user_4
-__put_user_4:
- addl $3,%eax
- movl %esp,%ecx
- jc bad_put_user
- andl $0xffffe000,%ecx
- cmpl addr_limit(%ecx),%eax
- jae bad_put_user
-3: movl %edx,-3(%eax)
- xorl %eax,%eax
- ret
-
-bad_put_user:
- movl $-14,%eax
- ret
-
-.section __ex_table,"a"
- .long 1b,bad_put_user
- .long 2b,bad_put_user
- .long 3b,bad_put_user
-.previous
diff -u --recursive --new-file v2.4.5/linux/arch/i386/math-emu/fpu_trig.c linux/arch/i386/math-emu/fpu_trig.c
--- v2.4.5/linux/arch/i386/math-emu/fpu_trig.c Fri Apr 6 10:42:47 2001
+++ linux/arch/i386/math-emu/fpu_trig.c Tue Jun 12 11:06:54 2001
@@ -1543,6 +1543,7 @@
EXCEPTION(EX_INTERNAL | 0x116);
return;
#endif /* PARANOID */
+ break;
}
}
else if ( (st0_tag == TAG_Valid) || (st0_tag == TW_Denormal) )
diff -u --recursive --new-file v2.4.5/linux/arch/i386/vmlinux.lds linux/arch/i386/vmlinux.lds
--- v2.4.5/linux/arch/i386/vmlinux.lds Wed Jan 3 20:45:26 2001
+++ linux/arch/i386/vmlinux.lds Mon Jul 2 14:40:14 2001
@@ -17,7 +17,7 @@
_etext = .; /* End of text section */
- .rodata : { *(.rodata) }
+ .rodata : { *(.rodata) *(.rodata.*) }
.kstrtab : { *(.kstrtab) }
. = ALIGN(16); /* Exception table */
diff -u --recursive --new-file v2.4.5/linux/arch/ia64/boot/bootloader.lds linux/arch/ia64/boot/bootloader.lds
--- v2.4.5/linux/arch/ia64/boot/bootloader.lds Sun Feb 6 18:42:40 2000
+++ linux/arch/ia64/boot/bootloader.lds Mon Jul 2 14:40:14 2001
@@ -12,7 +12,7 @@
/* Global data */
_data = .;
- .rodata : { *(.rodata) }
+ .rodata : { *(.rodata) *(.rodata.*) }
.data : { *(.data) *(.gnu.linkonce.d*) CONSTRUCTORS }
__gp = ALIGN (8) + 0x200000;
.got : { *(.got.plt) *(.got) }
diff -u --recursive --new-file v2.4.5/linux/arch/ia64/sn/fprom/fprom.lds linux/arch/ia64/sn/fprom/fprom.lds
--- v2.4.5/linux/arch/ia64/sn/fprom/fprom.lds Thu Jan 4 13:00:15 2001
+++ linux/arch/ia64/sn/fprom/fprom.lds Mon Jul 2 14:40:14 2001
@@ -24,7 +24,7 @@
_data = .;
.rodata : AT(ADDR(.rodata) - 0x0000000000000000 )
- { *(.rodata) }
+ { *(.rodata) *(.rodata.*) }
.opd : AT(ADDR(.opd) - 0x0000000000000000 )
{ *(.opd) }
.data : AT(ADDR(.data) - 0x0000000000000000 )
diff -u --recursive --new-file v2.4.5/linux/arch/ia64/vmlinux.lds.S linux/arch/ia64/vmlinux.lds.S
--- v2.4.5/linux/arch/ia64/vmlinux.lds.S Thu Apr 5 12:51:47 2001
+++ linux/arch/ia64/vmlinux.lds.S Mon Jul 2 14:40:14 2001
@@ -83,7 +83,7 @@
ia64_unw_end = .;
.rodata : AT(ADDR(.rodata) - PAGE_OFFSET)
- { *(.rodata) }
+ { *(.rodata) *(.rodata.*) }
.kstrtab : AT(ADDR(.kstrtab) - PAGE_OFFSET)
{ *(.kstrtab) }
.opd : AT(ADDR(.opd) - PAGE_OFFSET)
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/Makefile linux/arch/m68k/Makefile
--- v2.4.5/linux/arch/m68k/Makefile Thu Jan 4 13:00:55 2001
+++ linux/arch/m68k/Makefile Mon Jun 11 19:15:27 2001
@@ -110,8 +110,8 @@
endif
ifdef CONFIG_SUN3X
-CORE_FILES := $(CORE_FILES) arch/m68k/sun3x/sun3x.o
-SUBDIRS := $(SUBDIRS) arch/m68k/sun3x
+CORE_FILES := $(CORE_FILES) arch/m68k/sun3x/sun3x.o arch/m68k/sun3/sun3.o
+SUBDIRS := $(SUBDIRS) arch/m68k/sun3x arch/m68k/sun3
endif
ifdef CONFIG_SUN3
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/amiga/amisound.c linux/arch/m68k/amiga/amisound.c
--- v2.4.5/linux/arch/m68k/amiga/amisound.c Thu Jan 4 13:00:55 2001
+++ linux/arch/m68k/amiga/amisound.c Mon Jun 11 19:15:27 2001
@@ -16,7 +16,7 @@
#include
#include
-static u_short *snd_data = NULL;
+static unsigned short *snd_data = NULL;
static const signed char sine_data[] = {
0, 39, 75, 103, 121, 127, 121, 103, 75, 39,
0, -39, -75, -103, -121, -127, -121, -103, -75, -39
@@ -28,7 +28,7 @@
* device since it depends on htotal (for OCS/ECS/AGA)
*/
-volatile u_short amiga_audio_min_period = 124; /* Default for pre-OCS */
+volatile unsigned short amiga_audio_min_period = 124; /* Default for pre-OCS */
#define MAX_PERIOD (65535)
@@ -37,9 +37,9 @@
* Current period (set by dmasound.c)
*/
-u_short amiga_audio_period = MAX_PERIOD;
+unsigned short amiga_audio_period = MAX_PERIOD;
-static u_long clock_constant;
+static unsigned long clock_constant;
void __init amiga_init_sound(void)
{
@@ -76,7 +76,7 @@
del_timer( &sound_timer );
if (hz > 20 && hz < 32767) {
- u_long period = (clock_constant / hz);
+ unsigned long period = (clock_constant / hz);
if (period < amiga_audio_min_period)
period = amiga_audio_min_period;
@@ -86,7 +86,7 @@
/* setup pointer to data, period, length and volume */
custom.aud[2].audlc = snd_data;
custom.aud[2].audlen = sizeof(sine_data)/2;
- custom.aud[2].audper = (u_short)period;
+ custom.aud[2].audper = (unsigned short)period;
custom.aud[2].audvol = 32; /* 50% of maxvol */
if (ticks) {
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/amiga/cia.c linux/arch/m68k/amiga/cia.c
--- v2.4.5/linux/arch/m68k/amiga/cia.c Mon Nov 27 17:57:34 2000
+++ linux/arch/m68k/amiga/cia.c Mon Jun 11 19:15:27 2001
@@ -23,8 +23,8 @@
struct ciabase {
volatile struct CIA *cia;
- u_char icr_mask, icr_data;
- u_short int_mask;
+ unsigned char icr_mask, icr_data;
+ unsigned short int_mask;
int handler_irq, cia_irq, server_irq;
char *name;
irq_handler_t irq_list[CIA_IRQS];
@@ -46,7 +46,7 @@
unsigned char cia_set_irq(struct ciabase *base, unsigned char mask)
{
- u_char old;
+ unsigned char old;
old = (base->icr_data |= base->cia->icr);
if (mask & CIA_ICR_SETCLR)
@@ -65,7 +65,7 @@
unsigned char cia_able_irq(struct ciabase *base, unsigned char mask)
{
- u_char old, tmp;
+ unsigned char old, tmp;
int i;
old = base->icr_mask;
@@ -91,7 +91,7 @@
void (*handler)(int, void *, struct pt_regs *),
unsigned long flags, const char *devname, void *dev_id)
{
- u_char mask;
+ unsigned char mask;
base->irq_list[irq].handler = handler;
base->irq_list[irq].flags = flags;
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/amiga/config.c linux/arch/m68k/amiga/config.c
--- v2.4.5/linux/arch/m68k/amiga/config.c Fri Apr 13 20:26:07 2001
+++ linux/arch/m68k/amiga/config.c Mon Jun 11 19:15:27 2001
@@ -16,7 +16,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -31,6 +30,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/amiga/pcmcia.c linux/arch/m68k/amiga/pcmcia.c
--- v2.4.5/linux/arch/m68k/amiga/pcmcia.c Thu Dec 17 09:06:25 1998
+++ linux/arch/m68k/amiga/pcmcia.c Mon Jun 11 19:15:27 2001
@@ -19,7 +19,7 @@
#include
/* gayle config byte for program voltage and access speed */
-static u_char cfg_byte = GAYLE_CFG_0V|GAYLE_CFG_150NS;
+static unsigned char cfg_byte = GAYLE_CFG_0V|GAYLE_CFG_150NS;
void pcmcia_reset(void)
{
@@ -64,7 +64,7 @@
void pcmcia_program_voltage(int voltage)
{
- u_char v;
+ unsigned char v;
switch (voltage) {
case PCMCIA_0V:
@@ -87,7 +87,7 @@
void pcmcia_access_speed(int speed)
{
- u_char s;
+ unsigned char s;
if (speed <= PCMCIA_SPEED_100NS)
s = GAYLE_CFG_100NS;
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/apollo/config.c linux/arch/m68k/apollo/config.c
--- v2.4.5/linux/arch/m68k/apollo/config.c Wed Jan 26 12:44:20 2000
+++ linux/arch/m68k/apollo/config.c Mon Jun 11 19:15:27 2001
@@ -2,7 +2,6 @@
#include
#include
#include
-#include
#include
#include
@@ -12,6 +11,7 @@
#include
#include
#include
+#include
#include
u_long sio01_physaddr;
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/atari/time.c linux/arch/m68k/atari/time.c
--- v2.4.5/linux/arch/m68k/atari/time.c Thu Aug 26 12:42:31 1999
+++ linux/arch/m68k/atari/time.c Mon Jun 11 19:15:27 2001
@@ -12,10 +12,10 @@
#include
#include
-#include
#include
#include
+#include
void __init
atari_sched_init(void (*timer_routine)(int, void *, struct pt_regs *))
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/bvme6000/config.c linux/arch/m68k/bvme6000/config.c
--- v2.4.5/linux/arch/m68k/bvme6000/config.c Mon Jan 31 10:32:53 2000
+++ linux/arch/m68k/bvme6000/config.c Mon Jun 11 19:15:27 2001
@@ -17,7 +17,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -30,6 +29,7 @@
#include
#include
#include
+#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/bvme6000/rtc.c linux/arch/m68k/bvme6000/rtc.c
--- v2.4.5/linux/arch/m68k/bvme6000/rtc.c Fri Feb 9 11:29:44 2001
+++ linux/arch/m68k/bvme6000/rtc.c Mon Jun 11 19:15:27 2001
@@ -76,7 +76,7 @@
unsigned char mon, day, hrs, min, sec, leap_yr;
unsigned int yrs;
- if (!suser())
+ if (!capable(CAP_SYS_ADMIN))
return -EACCES;
if (copy_from_user(&rtc_tm, (struct rtc_time*)arg,
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/config.in linux/arch/m68k/config.in
--- v2.4.5/linux/arch/m68k/config.in Mon May 21 18:12:09 2001
+++ linux/arch/m68k/config.in Mon Jun 11 19:15:27 2001
@@ -55,8 +55,8 @@
if [ "$CONFIG_HP300" = "y" ]; then
bool ' DIO bus support' CONFIG_DIO
fi
-bool 'Sun3 support' CONFIG_SUN3
bool 'Sun3x support' CONFIG_SUN3X
+bool 'Sun3 support' CONFIG_SUN3
bool 'Q40/Q60 support' CONFIG_Q40
@@ -112,7 +112,7 @@
bool 'Support for ST-RAM as swap space' CONFIG_STRAM_SWAP
bool 'ST-RAM statistics in /proc' CONFIG_STRAM_PROC
fi
-if [ "$CONFIG_AMIGA" = "y" -o "$CONFIG_ATARI" = "y" ]; then
+if [ "$CONFIG_AMIGA" = "y" -o "$CONFIG_ATARI" = "y" -o "$CONFIG_Q40" = "y" ]; then
bool 'Use power LED as a heartbeat' CONFIG_HEARTBEAT
else
if [ "$CONFIG_HP300" = "y" ]; then
@@ -142,13 +142,17 @@
fi
dep_tristate ' Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PRINTER" != "n" ]; then
- bool ' Support IEEE1284 status readback' CONFIG_PRINTER_READBACK
+ bool ' Support IEEE1284 status readback' CONFIG_PARPORT_1284
fi
fi
source drivers/pci/Config.in
source drivers/zorro/Config.in
+if [ "$CONFIG_Q40" = "y" ]; then
+source drivers/pnp/Config.in
+fi
+
endmenu
source drivers/mtd/Config.in
@@ -264,11 +268,11 @@
fi
if [ "$CONFIG_SUN3" = "y" ]; then
- dep_tristate 'Sun3 NCR5380 SCSI' CONFIG_SUN3_SCSI $CONFIG_SCSI
+ dep_tristate 'Sun3 NCR5380 OBIO SCSI' CONFIG_SUN3_SCSI $CONFIG_SCSI
fi
if [ "$CONFIG_SUN3X" = "y" ]; then
- bool 'ESP SCSI driver' CONFIG_SUN3X_ESP
+ bool 'Sun3x ESP SCSI' CONFIG_SUN3X_ESP
fi
endmenu
@@ -338,6 +342,9 @@
if [ "$CONFIG_SUN3" = "y" -o "$CONFIG_SUN3X" = "y" ]; then
tristate ' Sun3/Sun3x on-board LANCE support' CONFIG_SUN3LANCE
fi
+ if [ "$CONFIG_SUN3" = "y" ]; then
+ tristate ' Sun3 on-board Intel 82586 support' CONFIG_SUN3_82586
+ fi
if [ "$CONFIG_HP300" = "y" ]; then
bool ' HP on-board LANCE support' CONFIG_HPLANCE
fi
@@ -367,7 +374,6 @@
if [ "$CONFIG_SERIAL_EXTENDED" = "y" ]; then
bool ' Support more than 4 serial ports' CONFIG_SERIAL_MANY_PORTS
bool ' Support for sharing serial interrupts' CONFIG_SERIAL_SHARE_IRQ
-# bool ' Autodetect IRQ - do not yet enable !!' CONFIG_SERIAL_DETECT_IRQ
bool ' Support special multiport boards' CONFIG_SERIAL_MULTIPORT
bool ' Support the Bell Technologies HUB6 card' CONFIG_HUB6
fi
@@ -451,16 +457,16 @@
else
define_bool CONFIG_SUN3X_ZS n
fi
-dep_bool ' Sun keyboard support' CONFIG_SUN_KEYBOARD $CONFIG_SUN3X_ZS
-dep_bool ' Sun mouse support' CONFIG_SUN_MOUSE $CONFIG_SUN3X_ZS
-if [ "$CONFIG_SUN_MOUSE" = "y" ]; then
- define_bool CONFIG_BUSMOUSE y
-fi
if [ "$CONFIG_SUN3X_ZS" = "y" ]; then
+ define_bool CONFIG_SUN_KEYBOARD y
+ define_bool CONFIG_SUN_MOUSE y
+ define_bool CONFIG_BUSMOUSE y
define_bool CONFIG_SBUS y
define_bool CONFIG_SBUSCHAR y
define_bool CONFIG_SUN_SERIAL y
else
+ define_bool CONFIG_SUN_KEYBOARD n
+ define_bool CONFIG_SUN_MOUSE n
define_bool CONFIG_SBUS n
fi
@@ -508,9 +514,6 @@
else
bool 'Generic /dev/rtc emulation' CONFIG_GEN_RTC
fi
-fi
-if [ "$CONFIG_Q40" = "y" ]; then
- bool 'Q40 Real Time Clock Support' CONFIG_Q40RTC
fi
bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS
if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/kernel/head.S linux/arch/m68k/kernel/head.S
--- v2.4.5/linux/arch/m68k/kernel/head.S Tue Mar 6 19:44:36 2001
+++ linux/arch/m68k/kernel/head.S Mon Jun 11 19:15:27 2001
@@ -1178,8 +1178,45 @@
#ifdef CONFIG_SUN3X
is_not_sun3x(L(notsun3x))
+ /* oh, the pain.. We're gonna want the prom code after
+ * starting the MMU, so we copy the mappings, translating
+ * from 8k -> 4k pages as we go.
+ */
+
+ /* copy maps from 0xfee00000 to 0xff000000 */
+ movel #0xfee00000, %d0
+ moveq #ROOT_INDEX_SHIFT, %d1
+ lsrl %d1,%d0
+ mmu_get_root_table_entry %d0
+
+ movel #0xfee00000, %d0
+ moveq #PTR_INDEX_SHIFT, %d1
+ lsrl %d1,%d0
+ andl #PTR_TABLE_SIZE-1, %d0
+ mmu_get_ptr_table_entry %a0,%d0
+
+ movel #0xfee00000, %d0
+ moveq #PAGE_INDEX_SHIFT, %d1
+ lsrl %d1,%d0
+ andl #PAGE_TABLE_SIZE-1, %d0
+ mmu_get_page_table_entry %a0,%d0
+
+ /* this is where the prom page table lives */
+ movel 0xfefe00d4, %a1
+ movel %a1@, %a1
+
+ movel #((0x200000 >> 13)-1), %d1
+
+1:
+ movel %a1@+, %d3
+ movel %d3,%a0@+
+ addl #0x1000,%d3
+ movel %d3,%a0@+
+
+ dbra %d1,1b
+
/* setup tt1 for I/O */
- mmu_map_tt #1,#0x40000000,#0x40000000,#_PAGE_NOCACHE_S
+ mmu_map_tt #1,#0x40000000,#0x40000000,#_PAGE_NOCACHE_S
jbra L(mmu_init_done)
L(notsun3x):
@@ -1363,7 +1400,7 @@
is_not_sun3x(1f)
/* enable copro */
- oriw #0x4000,0x61000000
+ oriw #0x4000,0x61000000
1:
#endif
@@ -3061,6 +3098,16 @@
2:
#endif
+#ifdef CONFIG_SUN3X
+ is_not_sun3x(2f)
+ movel %d0,-(%sp)
+ movel 0xFEFE0018,%a1
+ jbsr (%a1)
+ addq #4,%sp
+ jbra L(serial_putc_done)
+2:
+#endif
+
#ifdef CONFIG_Q40
is_not_q40(2f)
tst.l %pc@(L(q40_do_debug)) /* only debug if requested */
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/kernel/ptrace.c linux/arch/m68k/kernel/ptrace.c
--- v2.4.5/linux/arch/m68k/kernel/ptrace.c Mon Nov 27 18:02:06 2000
+++ linux/arch/m68k/kernel/ptrace.c Mon Jun 11 19:15:27 2001
@@ -107,15 +107,19 @@
ret = -ESRCH;
read_lock(&tasklist_lock);
child = find_task_by_pid(pid);
- read_unlock(&tasklist_lock); /* FIXME!!! */
+ if (child)
+ get_task_struct(child);
+ read_unlock(&tasklist_lock);
if (!child)
goto out;
+
ret = -EPERM;
if (pid == 1) /* you may not mess with init */
- goto out;
+ goto out_tsk;
+
if (request == PTRACE_ATTACH) {
if (child == current)
- goto out;
+ goto out_tsk;
if ((!child->dumpable ||
(current->uid != child->euid) ||
(current->uid != child->suid) ||
@@ -124,10 +128,10 @@
(current->gid != child->sgid) ||
(!cap_issubset(child->cap_permitted, current->cap_permitted)) ||
(current->gid != child->gid)) && !capable(CAP_SYS_PTRACE))
- goto out;
+ goto out_tsk;
/* the same process cannot be attached many times */
if (child->ptrace & PT_PTRACED)
- goto out;
+ goto out_tsk;
child->ptrace |= PT_PTRACED;
write_lock_irqsave(&tasklist_lock, flags);
@@ -140,17 +144,17 @@
send_sig(SIGSTOP, child, 1);
ret = 0;
- goto out;
+ goto out_tsk;
}
ret = -ESRCH;
if (!(child->ptrace & PT_PTRACED))
- goto out;
+ goto out_tsk;
if (child->state != TASK_STOPPED) {
if (request != PTRACE_KILL)
- goto out;
+ goto out_tsk;
}
if (child->p_pptr != current)
- goto out;
+ goto out_tsk;
switch (request) {
/* when I and D space are separate, these will need to be fixed. */
@@ -162,9 +166,9 @@
copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
ret = -EIO;
if (copied != sizeof(tmp))
- goto out;
+ break;
ret = put_user(tmp,(unsigned long *) data);
- goto out;
+ break;
}
/* read the word at location addr in the USER area. */
@@ -172,8 +176,9 @@
unsigned long tmp;
ret = -EIO;
- if ((addr & 3) || addr < 0 || addr >= sizeof(struct user))
- goto out;
+ if ((addr & 3) || addr < 0 ||
+ addr > sizeof(struct user) - 3)
+ break;
tmp = 0; /* Default return condition */
addr = addr >> 2; /* temporary hack. */
@@ -193,9 +198,9 @@
((tmp & 0x0000ffff) << 16);
#endif
} else
- goto out;
+ break;
ret = put_user(tmp,(unsigned long *) data);
- goto out;
+ break;
}
/* when I and D space are separate, this will have to be fixed. */
@@ -203,14 +208,15 @@
case PTRACE_POKEDATA:
ret = 0;
if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data))
- goto out;
+ break;
ret = -EIO;
- goto out;
+ break;
case PTRACE_POKEUSR: /* write the word at location addr in the USER area */
ret = -EIO;
- if ((addr & 3) || addr < 0 || addr >= sizeof(struct user))
- goto out;
+ if ((addr & 3) || addr < 0 ||
+ addr > sizeof(struct user) - 3)
+ break;
addr = addr >> 2; /* temporary hack. */
@@ -221,9 +227,9 @@
}
if (addr < 19) {
if (put_reg(child, addr, data))
- goto out;
+ break;
ret = 0;
- goto out;
+ break;
}
if (addr >= 21 && addr < 48)
{
@@ -240,7 +246,7 @@
child->thread.fp[addr - 21] = data;
ret = 0;
}
- goto out;
+ break;
case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */
case PTRACE_CONT: { /* restart after signal. */
@@ -248,7 +254,7 @@
ret = -EIO;
if ((unsigned long) data > _NSIG)
- goto out;
+ break;
if (request == PTRACE_SYSCALL)
child->ptrace |= PT_TRACESYS;
else
@@ -259,7 +265,7 @@
put_reg(child, PT_SR, tmp);
wake_up_process(child);
ret = 0;
- goto out;
+ break;
}
/*
@@ -272,13 +278,13 @@
ret = 0;
if (child->state == TASK_ZOMBIE) /* already dead */
- goto out;
+ break;
child->exit_code = SIGKILL;
/* make sure the single step bit is not set. */
tmp = get_reg(child, PT_SR) & ~(TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
wake_up_process(child);
- goto out;
+ break;
}
case PTRACE_SINGLESTEP: { /* set the trap flag. */
@@ -286,7 +292,7 @@
ret = -EIO;
if ((unsigned long) data > _NSIG)
- goto out;
+ break;
child->ptrace &= ~PT_TRACESYS;
tmp = get_reg(child, PT_SR) | (TRACE_BITS << 16);
put_reg(child, PT_SR, tmp);
@@ -295,7 +301,7 @@
/* give it a chance to run. */
wake_up_process(child);
ret = 0;
- goto out;
+ break;
}
case PTRACE_DETACH: { /* detach a process that was attached. */
@@ -303,7 +309,7 @@
ret = -EIO;
if ((unsigned long) data > _NSIG)
- goto out;
+ break;
child->ptrace &= ~(PT_PTRACED|PT_TRACESYS);
child->exit_code = data;
write_lock_irqsave(&tasklist_lock, flags);
@@ -316,7 +322,7 @@
put_reg(child, PT_SR, tmp);
wake_up_process(child);
ret = 0;
- goto out;
+ break;
}
case PTRACE_GETREGS: { /* Get all gp regs from the child. */
@@ -328,12 +334,12 @@
tmp >>= 16;
if (put_user(tmp, (unsigned long *) data)) {
ret = -EFAULT;
- goto out;
+ break;
}
data += sizeof(long);
}
ret = 0;
- goto out;
+ break;
}
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
@@ -342,7 +348,7 @@
for (i = 0; i < 19; i++) {
if (get_user(tmp, (unsigned long *) data)) {
ret = -EFAULT;
- goto out;
+ break;
}
if (i == PT_SR) {
tmp &= SR_MASK;
@@ -353,7 +359,7 @@
data += sizeof(long);
}
ret = 0;
- goto out;
+ break;
}
case PTRACE_GETFPREGS: { /* Get the child FPU state. */
@@ -361,7 +367,7 @@
if (copy_to_user((void *)data, &child->thread.fp,
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
- goto out;
+ break;
}
case PTRACE_SETFPREGS: { /* Set the child FPU state. */
@@ -369,13 +375,15 @@
if (copy_from_user(&child->thread.fp, (void *)data,
sizeof(struct user_m68kfp_struct)))
ret = -EFAULT;
- goto out;
+ break;
}
default:
ret = -EIO;
- goto out;
+ break;
}
+out_tsk:
+ free_task_struct(child);
out:
unlock_kernel();
return ret;
@@ -383,10 +391,9 @@
asmlinkage void syscall_trace(void)
{
- lock_kernel();
if ((current->ptrace & (PT_PTRACED|PT_TRACESYS))
!= (PT_PTRACED|PT_TRACESYS))
- goto out;
+ return;
current->exit_code = SIGTRAP;
current->state = TASK_STOPPED;
notify_parent(current, SIGCHLD);
@@ -400,6 +407,4 @@
send_sig(current->exit_code, current, 1);
current->exit_code = 0;
}
-out:
- unlock_kernel();
}
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/kernel/setup.c linux/arch/m68k/kernel/setup.c
--- v2.4.5/linux/arch/m68k/kernel/setup.c Fri Apr 13 20:26:07 2001
+++ linux/arch/m68k/kernel/setup.c Mon Jun 11 19:15:27 2001
@@ -34,6 +34,10 @@
#ifdef CONFIG_ATARI
#include
#endif
+#ifdef CONFIG_SUN3X
+#include
+extern void sun_serial_setup(void);
+#endif
#ifdef CONFIG_BLK_DEV_INITRD
#include
@@ -106,6 +110,11 @@
char *mach_sysrq_xlate = NULL;
#endif
+#if defined(CONFIG_ISA)
+int isa_type;
+int isa_sex;
+#endif
+
extern int amiga_parse_bootinfo(const struct bi_record *);
extern int atari_parse_bootinfo(const struct bi_record *);
extern int mac_parse_bootinfo(const struct bi_record *);
@@ -137,7 +146,7 @@
{
while (record->tag != BI_LAST) {
int unknown = 0;
- const u_long *data = record->data;
+ const unsigned long *data = record->data;
switch (record->tag) {
case BI_MACHTYPE:
case BI_CPUTYPE:
@@ -186,7 +195,7 @@
if (unknown)
printk("m68k_parse_bootinfo: unknown tag 0x%04x ignored\n",
record->tag);
- record = (struct bi_record *)((u_long)record+record->size);
+ record = (struct bi_record *)((unsigned long)record+record->size);
}
m68k_realnum_memory = m68k_num_memory;
@@ -365,14 +374,44 @@
if (MACH_IS_ATARI)
atari_stram_reserve_pages(availmem);
#endif
+#ifdef CONFIG_SUN3X
+ if (MACH_IS_SUN3X) {
+ dvma_init();
+#ifdef CONFIG_SUN3X_ZS
+ sun_serial_setup();
+#endif
+ }
+#endif
+
#endif /* !CONFIG_SUN3 */
+
paging_init();
+
+/* set ISA defs early as possible */
+#if defined(CONFIG_ISA)
+#if defined(CONFIG_Q40)
+ if (MACH_IS_Q40) {
+ isa_type = Q40_ISA;
+ isa_sex = 0;
+ }
+#elif defined(CONFIG_GG2)
+ if (MACH_IS_AMIGA && AMIGAHW_PRESENT(GG2_ISA)){
+ isa_type = GG2_ISA;
+ isa_sex = 0;
+ }
+#elif defined(CONFIG_AMIGA_PCMCIA)
+ if (MACH_IS_AMIGA && AMIGAHW_PRESENT(PCMCIA)){
+ isa_type = AG_ISA;
+ isa_sex = 1;
+ }
+#endif
+#endif
}
int get_cpuinfo(char * buffer)
{
const char *cpu, *mmu, *fpu;
- u_long clockfreq, clockfactor;
+ unsigned long clockfreq, clockfactor;
#define LOOP_CYCLES_68020 (8)
#define LOOP_CYCLES_68030 (8)
@@ -447,7 +486,7 @@
{
int len = 0;
char model[80];
- u_long mem;
+ unsigned long mem;
int i;
if (mach_get_model)
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/kernel/sys_m68k.c linux/arch/m68k/kernel/sys_m68k.c
--- v2.4.5/linux/arch/m68k/kernel/sys_m68k.c Mon Mar 19 12:35:09 2001
+++ linux/arch/m68k/kernel/sys_m68k.c Mon Jun 11 19:15:27 2001
@@ -267,7 +267,8 @@
return -ENOSYS;
}
-/* Convert virtual address VADDR to physical address PADDR */
+
+/* Convert virtual (user) address VADDR to physical address PADDR */
#define virt_to_phys_040(vaddr) \
({ \
unsigned long _mmusr, _paddr; \
@@ -447,6 +448,12 @@
{
unsigned long paddr, i;
+ /*
+ * 68060 manual says:
+ * cpush %dc : flush DC, remains valid (with our %cacr setup)
+ * cpush %ic : invalidate IC
+ * cpush %bc : flush DC + invalidate IC
+ */
switch (scope)
{
case FLUSH_SCOPE_ALL:
@@ -455,20 +462,17 @@
case FLUSH_CACHE_DATA:
__asm__ __volatile__ (".chip 68060\n\t"
"cpusha %dc\n\t"
- "cinva %dc\n\t"
".chip 68k");
break;
case FLUSH_CACHE_INSN:
__asm__ __volatile__ (".chip 68060\n\t"
"cpusha %ic\n\t"
- "cinva %ic\n\t"
".chip 68k");
break;
default:
case FLUSH_CACHE_BOTH:
__asm__ __volatile__ (".chip 68060\n\t"
"cpusha %bc\n\t"
- "cinva %bc\n\t"
".chip 68k");
break;
}
@@ -506,14 +510,12 @@
case FLUSH_CACHE_DATA:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushl %%dc,(%0)\n\t"
- "cinvl %%dc,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
case FLUSH_CACHE_INSN:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushl %%ic,(%0)\n\t"
- "cinvl %%ic,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
@@ -521,7 +523,6 @@
case FLUSH_CACHE_BOTH:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushl %%bc,(%0)\n\t"
- "cinvl %%bc,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
@@ -568,14 +569,12 @@
case FLUSH_CACHE_DATA:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushp %%dc,(%0)\n\t"
- "cinvp %%dc,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
case FLUSH_CACHE_INSN:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushp %%ic,(%0)\n\t"
- "cinvp %%ic,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
@@ -583,7 +582,6 @@
case FLUSH_CACHE_BOTH:
__asm__ __volatile__ (".chip 68060\n\t"
"cpushp %%bc,(%0)\n\t"
- "cinvp %%bc,(%0)\n\t"
".chip 68k"
: : "a" (paddr));
break;
@@ -607,13 +605,14 @@
goto out;
if (scope == FLUSH_SCOPE_ALL) {
- /* Only the superuser may flush the whole cache. */
+ /* Only the superuser may explicitly flush the whole cache. */
ret = -EPERM;
if (!capable(CAP_SYS_ADMIN))
goto out;
} else {
- /* Verify that the specified address region actually belongs to
- * this process.
+ /*
+ * Verify that the specified address region actually belongs
+ * to this process.
*/
vma = find_vma (current->mm, addr);
ret = -EINVAL;
@@ -652,10 +651,21 @@
}
ret = 0;
goto out;
- } else if (CPU_IS_040) {
+ } else {
+ /*
+ * 040 or 060: don't blindly trust 'scope', someone could
+ * try to flush a few megs of memory.
+ */
+
+ if (len>=3*PAGE_SIZE && scope=10*PAGE_SIZE && scopeun.fmt7.faddr = current->thread.faddr;
+ fp->un.fmt7.faddr = wba;
fp->un.fmt7.ssw = wbs & 0xff;
+ if (wba != current->thread.faddr)
+ fp->un.fmt7.ssw |= MA_040;
}
static inline void do_040writebacks(struct frame *fp)
@@ -312,7 +331,7 @@
res = do_040writeback1(fp->un.fmt7.wb2s, fp->un.fmt7.wb2a,
fp->un.fmt7.wb2d);
if (res)
- fix_xframe040(fp, fp->un.fmt7.wb2s);
+ fix_xframe040(fp, fp->un.fmt7.wb2a, fp->un.fmt7.wb2s);
else
fp->un.fmt7.wb2s = 0;
}
@@ -322,7 +341,14 @@
res = do_040writeback1(fp->un.fmt7.wb3s, fp->un.fmt7.wb3a,
fp->un.fmt7.wb3d);
if (res)
- fix_xframe040(fp, fp->un.fmt7.wb3s);
+ {
+ fix_xframe040(fp, fp->un.fmt7.wb3a, fp->un.fmt7.wb3s);
+
+ fp->un.fmt7.wb2s = fp->un.fmt7.wb3s;
+ fp->un.fmt7.wb3s &= (~WBV_040);
+ fp->un.fmt7.wb2a = fp->un.fmt7.wb3a;
+ fp->un.fmt7.wb2d = fp->un.fmt7.wb3d;
+ }
else
fp->un.fmt7.wb3s = 0;
}
@@ -339,19 +365,15 @@
*/
asmlinkage void berr_040cleanup(struct frame *fp)
{
- mm_segment_t old_fs = get_fs();
-
fp->un.fmt7.wb2s &= ~4;
fp->un.fmt7.wb3s &= ~4;
do_040writebacks(fp);
- set_fs(old_fs);
}
static inline void access_error040(struct frame *fp)
{
unsigned short ssw = fp->un.fmt7.ssw;
- mm_segment_t old_fs = get_fs();
unsigned long mmusr;
#ifdef DEBUG
@@ -374,9 +396,8 @@
if (ssw & MA_040)
addr = (addr + 7) & -8;
- set_fs(MAKE_MM_SEG(ssw));
/* MMU error, get the MMUSR info for this access */
- mmusr = probe040(!(ssw & RW_040), addr);
+ mmusr = probe040(!(ssw & RW_040), addr, ssw);
#ifdef DEBUG
printk("mmusr = %lx\n", mmusr);
#endif
@@ -386,8 +407,12 @@
__flush_tlb040_one(addr);
errorcode = 0;
}
- if (!(ssw & RW_040))
+
+ /* despite what documentation seems to say, RMW
+ * accesses have always both the LK and RW bits set */
+ if (!(ssw & RW_040) || (ssw & LK_040))
errorcode |= 2;
+
if (do_page_fault(&fp->ptregs, addr, errorcode)) {
#ifdef DEBUG
printk("do_page_fault() !=0 \n");
@@ -415,7 +440,6 @@
}
do_040writebacks(fp);
- set_fs(old_fs);
}
#endif /* CONFIG_M68040 */
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/config.c linux/arch/m68k/mac/config.c
--- v2.4.5/linux/arch/m68k/mac/config.c Sun Dec 3 17:48:19 2000
+++ linux/arch/m68k/mac/config.c Mon Jun 11 19:15:27 2001
@@ -13,7 +13,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -31,6 +30,7 @@
#include
#include
#include
+#include
#include
#include
@@ -78,8 +78,6 @@
extern void (*kd_mksound)(unsigned int, unsigned int);
extern void mac_mksound(unsigned int, unsigned int);
-extern int mac_floppy_init(void);
-extern void mac_floppy_setup(char *,int *);
extern void nubus_sweep_video(void);
@@ -122,8 +120,6 @@
}
#endif
-extern struct fb_info *mac_fb_init(long *);
-
extern void mac_default_handler(int, void *, struct pt_regs *);
void (*mac_handlers[8])(int, void *, struct pt_regs *)=
@@ -387,8 +383,7 @@
{ MAC_MODEL_P460, "Performa 460", MAC_ADB_IISI, MAC_VIA_IIci, MAC_SCSI_OLD, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
{ MAC_MODEL_P475, "Performa 475", MAC_ADB_CUDA, MAC_VIA_QUADRA, MAC_SCSI_QUADRA, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
{ MAC_MODEL_P475F, "Performa 475", MAC_ADB_CUDA, MAC_VIA_QUADRA, MAC_SCSI_QUADRA, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
- { MAC_MODEL_P520, "Performa 520", MAC_ADB_CUDA, MAC_VIA_QUADRA, MAC_SCSI_QUADRA, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
-
+ { MAC_MODEL_P520, "Performa 520", MAC_ADB_CUDA, MAC_VIA_IIci, MAC_SCSI_OLD, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
{ MAC_MODEL_P550, "Performa 550", MAC_ADB_CUDA, MAC_VIA_IIci, MAC_SCSI_OLD, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
{ MAC_MODEL_P575, "Performa 575", MAC_ADB_CUDA, MAC_VIA_QUADRA, MAC_SCSI_QUADRA, MAC_IDE_NONE, MAC_SCC_II, MAC_ETHER_NONE, MAC_NUBUS},
/* These have the comm slot, and therefore the possibility of SONIC ethernet */
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/debug.c linux/arch/m68k/mac/debug.c
--- v2.4.5/linux/arch/m68k/mac/debug.c Thu Oct 12 14:20:48 2000
+++ linux/arch/m68k/mac/debug.c Mon Jun 11 19:15:27 2001
@@ -187,7 +187,7 @@
-/* Mac: loops_per_sec min. 1900000 ^= .5 us; MFPDELAY was 0.6 us*/
+/* Mac: loops_per_jiffy min. 19000 ^= .5 us; MFPDELAY was 0.6 us*/
#define uSEC 1
@@ -286,9 +286,9 @@
barrier(); \
} while(0)
-/* loops_per_sec isn't initialized yet, so we can't use udelay(). This does a
+/* loops_per_jiffy isn't initialized yet, so we can't use udelay(). This does a
* delay of ~ 60us. */
-/* Mac: loops_per_sec min. 1900000 ^= .5 us; MFPDELAY was 0.6 us*/
+/* Mac: loops_per_jiffy min. 19000 ^= .5 us; MFPDELAY was 0.6 us*/
#define LONG_DELAY() \
do { \
int i; \
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/iop.c linux/arch/m68k/mac/iop.c
--- v2.4.5/linux/arch/m68k/mac/iop.c Sun Feb 13 11:21:42 2000
+++ linux/arch/m68k/mac/iop.c Mon Jun 11 19:15:27 2001
@@ -51,9 +51,6 @@
* IOP hasn't died.
* o Some of the IOP manager routines need better error checking and
* return codes. Nothing major, just prettying up.
- *
- * + share the stuff you were smoking when you wrote the iop_get_proc_info()
- * for case when CONFIG_PROC_FS is undefined.
*/
/*
@@ -129,9 +126,6 @@
#ifdef CONFIG_PROC_FS
static int iop_get_proc_info(char *, char **, off_t, int);
-#else
-/* What the bloody hell is THAT ??? */
-static int iop_get_proc_info(char *, char **, off_t, int) {}
#endif /* CONFIG_PROC_FS */
/* structure for tracking channel listeners */
@@ -307,7 +301,11 @@
iop_listeners[IOP_NUM_ISM][i].handler = NULL;
}
- create_proc_info_entry("mac_iop",0,0,iop_get_proc_info);
+#if 0 /* Crashing in 2.4 now, not yet sure why. --jmt */
+#ifdef CONFIG_PROC_FS
+ create_proc_info_entry("mac_iop", 0, &proc_root, iop_get_proc_info);
+#endif
+#endif
}
/*
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/macints.c linux/arch/m68k/mac/macints.c
--- v2.4.5/linux/arch/m68k/mac/macints.c Sun Dec 3 17:48:19 2000
+++ linux/arch/m68k/mac/macints.c Mon Jun 11 19:15:27 2001
@@ -129,9 +129,13 @@
#include
#include
#include
+#include
#include
+#define DEBUG_SPURIOUS
+#define SHUTUP_SONIC
+
/*
* The mac_irq_list array is an array of linked lists of irq_node_t nodes.
* Each node contains one handler to be called whenever the interrupt
@@ -233,6 +237,17 @@
scc_mask = 0;
+ /* Make sure the SONIC interrupt is cleared or things get ugly */
+#ifdef SHUTUP_SONIC
+ printk("Killing onboard sonic... ");
+ /* This address should hopefully be mapped already */
+ if (hwreg_present((void*)(0x50f0a000))) {
+ *(long *)(0x50f0a014) = 0x7fffL;
+ *(long *)(0x50f0a010) = 0L;
+ }
+ printk("Done.\n");
+#endif /* SHUTUP_SONIC */
+
/*
* Now register the handlers for the the master IRQ handlers
* at levels 1-7. Most of the work is done elsewhere.
@@ -627,9 +642,7 @@
void mac_default_handler(int irq, void *dev_id, struct pt_regs *regs)
{
#ifdef DEBUG_SPURIOUS
- if (console_loglevel > 6) {
- printk("Unexpected IRQ %d on device %p\n", irq, dev_id);
- }
+ printk("Unexpected IRQ %d on device %p\n", irq, dev_id);
#endif
}
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/misc.c linux/arch/m68k/mac/misc.c
--- v2.4.5/linux/arch/m68k/mac/misc.c Fri Feb 9 11:29:44 2001
+++ linux/arch/m68k/mac/misc.c Mon Jun 11 19:15:27 2001
@@ -2,7 +2,6 @@
* Miscellaneous Mac68K-specific stuff
*/
-#include
#include
#include
#include
@@ -12,7 +11,7 @@
#include
#include
#include
-#include
+
#include
#include
@@ -21,6 +20,7 @@
#include
#include
+#include
#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/psc.c linux/arch/m68k/mac/psc.c
--- v2.4.5/linux/arch/m68k/mac/psc.c Sun Dec 3 17:48:19 2000
+++ linux/arch/m68k/mac/psc.c Mon Jun 11 19:15:27 2001
@@ -139,7 +139,6 @@
int irq_bit,i;
unsigned char events;
- irq -= VEC_SPUR;
base_irq = irq << 3;
#ifdef DEBUG_IRQS
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mac/via.c linux/arch/m68k/mac/via.c
--- v2.4.5/linux/arch/m68k/mac/via.c Sun Dec 3 17:45:20 2000
+++ linux/arch/m68k/mac/via.c Mon Jun 11 19:15:27 2001
@@ -410,8 +410,6 @@
int irq_bit, i;
unsigned char events, mask;
- irq -= VEC_SPUR;
-
mask = via1[vIER] & 0x7F;
if (!(events = via1[vIFR] & mask)) return;
@@ -423,6 +421,7 @@
via1[vIER] = irq_bit | 0x80;
}
+#if 0 /* freakin' pmu is doing weird stuff */
if (!oss_present) {
/* This (still) seems to be necessary to get IDE
working. However, if you enable VBL interrupts,
@@ -435,14 +434,13 @@
mac_do_irq_list(IRQ_MAC_NUBUS, regs);
via_irq_enable(IRQ_MAC_NUBUS);
}
+#endif
}
void via2_irq(int irq, void *dev_id, struct pt_regs *regs)
{
int irq_bit, i;
unsigned char events, mask;
-
- irq -= VEC_SPUR;
mask = via2[gIER] & 0x7F;
if (!(events = via2[gIFR] & mask)) return;
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/math-emu/multi_arith.h linux/arch/m68k/math-emu/multi_arith.h
--- v2.4.5/linux/arch/m68k/math-emu/multi_arith.h Sun Aug 15 11:47:29 1999
+++ linux/arch/m68k/math-emu/multi_arith.h Mon Jun 11 19:15:27 2001
@@ -329,7 +329,7 @@
int carry;
/* we assume here, gcc only insert move and a clr instr */
- asm volatile ("add.b %1,%0" : "=d,=g" (dest->lowmant)
+ asm volatile ("add.b %1,%0" : "=d,g" (dest->lowmant)
: "g,d" (src->lowmant), "0,0" (dest->lowmant));
asm volatile ("addx.l %1,%0" : "=d" (dest->mant.m32[1])
: "d" (src->mant.m32[1]), "0" (dest->mant.m32[1]));
@@ -360,7 +360,7 @@
extern inline void fp_submant(struct fp_ext *dest, struct fp_ext *src1, struct fp_ext *src2)
{
/* we assume here, gcc only insert move and a clr instr */
- asm volatile ("sub.b %1,%0" : "=d,=g" (dest->lowmant)
+ asm volatile ("sub.b %1,%0" : "=d,g" (dest->lowmant)
: "g,d" (src2->lowmant), "0,0" (src1->lowmant));
asm volatile ("subx.l %1,%0" : "=d" (dest->mant.m32[1])
: "d" (src2->mant.m32[1]), "0" (src1->mant.m32[1]));
@@ -383,7 +383,7 @@
})
#define fp_addx96(dest, src) ({ \
/* we assume here, gcc only insert move and a clr instr */ \
- asm volatile ("add.l %1,%0" : "=d,=g" (dest->m32[2]) \
+ asm volatile ("add.l %1,%0" : "=d,g" (dest->m32[2]) \
: "g,d" (temp.m32[1]), "0,0" (dest->m32[2])); \
asm volatile ("addx.l %1,%0" : "=d" (dest->m32[1]) \
: "d" (temp.m32[0]), "0" (dest->m32[1])); \
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mm/init.c linux/arch/m68k/mm/init.c
--- v2.4.5/linux/arch/m68k/mm/init.c Mon Oct 16 12:58:51 2000
+++ linux/arch/m68k/mm/init.c Mon Jun 11 19:15:27 2001
@@ -32,11 +32,7 @@
#include
#endif
-static unsigned long totalram_pages;
-
-#ifdef CONFIG_SUN3
-void mmu_emu_reserve_pages(unsigned long max_page);
-#endif
+unsigned long totalram_pages = 0;
int do_check_pgt_cache(int low, int high)
{
@@ -86,7 +82,7 @@
void show_mem(void)
{
unsigned long i;
- int free = 0, total = 0, reserved = 0, nonshared = 0, shared = 0;
+ int free = 0, total = 0, reserved = 0, shared = 0;
int cached = 0;
printk("\nMem-info:\n");
@@ -101,15 +97,12 @@
cached++;
else if (!page_count(mem_map+i))
free++;
- else if (page_count(mem_map+i) == 1)
- nonshared++;
else
shared += page_count(mem_map+i) - 1;
}
printk("%d pages of RAM\n",total);
printk("%d free pages\n",free);
printk("%d reserved pages\n",reserved);
- printk("%d pages nonshared\n",nonshared);
printk("%d pages shared\n",shared);
printk("%d pages swap cached\n",cached);
printk("%ld pages in page table cache\n",pgtable_cache_size);
@@ -137,17 +130,11 @@
#ifdef CONFIG_ATARI
if (MACH_IS_ATARI)
- atari_stram_reserve_pages( start_mem );
-#endif
-
-#ifdef CONFIG_SUN3
- /* reserve rom pages */
- mmu_emu_reserve_pages(max_mapnr);
+ atari_stram_mem_init_hook();
#endif
/* this will put all memory onto the freelists */
totalram_pages = free_all_bootmem();
- printk("tp:%ld\n", totalram_pages);
for (tmp = PAGE_OFFSET ; tmp < (unsigned long)high_memory; tmp += PAGE_SIZE) {
#if 0
@@ -201,13 +188,15 @@
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
+ int pages = 0;
for (; start < end; start += PAGE_SIZE) {
ClearPageReserved(virt_to_page(start));
set_page_count(virt_to_page(start), 1);
free_page(start);
totalram_pages++;
+ pages++;
}
- printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
+ printk ("Freeing initrd memory: %dk freed\n", pages);
}
#endif
@@ -220,15 +209,8 @@
val->sharedram = 0;
val->freeram = nr_free_pages();
val->bufferram = atomic_read(&buffermem_pages);
- while (i-- > 0) {
- if (PageReserved(mem_map+i))
- continue;
- val->totalram++;
- if (!page_count(mem_map+i))
- continue;
- val->sharedram += page_count(mem_map+i) - 1;
- }
val->totalhigh = 0;
val->freehigh = 0;
+ val->mem_unit = PAGE_SIZE;
return;
}
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mm/memory.c linux/arch/m68k/mm/memory.c
--- v2.4.5/linux/arch/m68k/mm/memory.c Sat May 19 17:43:05 2001
+++ linux/arch/m68k/mm/memory.c Mon Jun 11 19:15:27 2001
@@ -39,6 +39,7 @@
pgd_set(pgd, (pmd_t *)BAD_PAGETABLE);
}
+#if 0
pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset)
{
pte_t *pte;
@@ -63,7 +64,9 @@
}
return (pte_t *)__pmd_page(*pmd) + offset;
}
+#endif
+#if 0
pmd_t *get_pmd_slow(pgd_t *pgd, unsigned long offset)
{
pmd_t *pmd;
@@ -84,7 +87,7 @@
}
return (pmd_t *)__pgd_page(*pgd) + offset;
}
-
+#endif
/* ++andreas: {get,free}_pointer_table rewritten to use unused fields from
struct page instead of separately kmalloced struct. Stolen from
@@ -250,6 +253,10 @@
if (voff == 0)
return m68k_memory[i-1].addr + m68k_memory[i-1].size;
+ /* As a special case allow `__pa(high_memory)'. */
+ if (voff == 0)
+ return m68k_memory[i-1].addr + m68k_memory[i-1].size;
+
return mm_vtop_fallback(vaddr);
}
#endif
@@ -454,16 +461,21 @@
".chip 68k" \
: : "a" (paddr))
-/* push and invalidate page in both caches */
+/* push and invalidate page in both caches, must disable ints
+ * to avoid invalidating valid data */
#define pushcl040(paddr) \
- do { push040(paddr); \
+ do { unsigned long flags; \
+ save_flags(flags); \
+ cli(); \
+ push040(paddr); \
if (CPU_IS_060) clear040(paddr); \
+ restore_flags(flags); \
} while(0)
/* push page in both caches, invalidate in i-cache */
+/* RZ: cpush %bc DOES invalidate %ic, regardless of DPI */
#define pushcli040(paddr) \
do { push040(paddr); \
- if (CPU_IS_060) cleari040(paddr); \
} while(0)
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mvme147/config.c linux/arch/m68k/mvme147/config.c
--- v2.4.5/linux/arch/m68k/mvme147/config.c Mon Nov 27 17:11:26 2000
+++ linux/arch/m68k/mvme147/config.c Mon Jun 11 19:15:27 2001
@@ -16,7 +16,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -29,6 +28,7 @@
#include
#include
#include
+#include
#include
#include
diff -u --recursive --new-file v2.4.5/linux/arch/m68k/mvme16x/config.c linux/arch/m68k/mvme16x/config.c
--- v2.4.5/linux/arch/m68k/mvme16x/config.c Mon Jan 31 10:32:53 2000
+++ linux/arch/m68k/mvme16x/config.c Mon Jun 11 19:15:27 2001
@@ -17,7 +17,6 @@
#include