Commit a3c57c1b authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.20pre1

parent 6f412f83
......@@ -254,11 +254,13 @@ Your cooperation is appreciated.
\major{86}{}{char }{SCSI media changer}
\major{87}{}{char }{Sony Control-A1 stereo control bus}
\major{88}{}{char }{COMX synchronous serial card}
\major{ }{}{block}{Sixth IDE hard disk/CD-ROM interface}
\major{89}{}{char }{I$^2$C bus interface}
\major{ }{}{block}{Seventh IDE hard disk/CD-ROM interface}
\major{89}{}{char }{I$^2$C bus interface}
\major{ }{}{block}{Eighth IDE hard disk/CD-ROM interface}
\major{90}{}{char }{Memory Technology Device (RAM, ROM, Flash)}
\major{ }{}{block}{Ninth IDE hard disk/CD-ROM interface}
\major{91}{}{char }{CAN-Bus controller}
\major{ }{}{block}{Tenth IDE hard disk/CD-ROM interface}
\major{92}{}{char }{Reserved for ith Kommunikationstechnik MIC ISDN card}
\major{93}{}{char }{IBM Smart Capture Card frame grabber}
\major{94}{}{char }{miroVIDEO DC10/30 capture/playback device}
......@@ -1748,7 +1750,7 @@ on {\url http://home.pages.de/~videotext/\/}.
\end{devicelist}
\begin{devicelist}
\major{ }{}{block}{Sixth IDE hard disk/CD-ROM interface}
\major{ }{}{block}{Seventh IDE hard disk/CD-ROM interface}
\minor{0}{/dev/hdm}{Master: whole disk (or CD-ROM)}
\minor{64}{/dev/hdn}{Slave: whole disk (or CD-ROM)}
\end{devicelist}
......@@ -1765,7 +1767,7 @@ major number 3).
\end{devicelist}
\begin{devicelist}
\major{ }{}{block}{Seventh IDE hard disk/CD-ROM interface}
\major{ }{}{block}{Eighth IDE hard disk/CD-ROM interface}
\minor{0}{/dev/hdo}{Master: whole disk (or CD-ROM)}
\minor{64}{/dev/hdp}{Slave: whole disk (or CD-ROM)}
\end{devicelist}
......@@ -1784,7 +1786,7 @@ major number 3).
\end{devicelist}
\begin{devicelist}
\major{ }{}{block}{Eighth IDE hard disk/CD-ROM interface}
\major{ }{}{block}{Ninth IDE hard disk/CD-ROM interface}
\minor{0}{/dev/hdq}{Master: whole disk (or CD-ROM)}
\minor{64}{/dev/hdr}{Slave: whole disk (or CD-ROM)}
\end{devicelist}
......@@ -1801,7 +1803,7 @@ major number 3).
\end{devicelist}
\begin{devicelist}
\major{ }{}{block}{Ninth IDE hard disk/CD-ROM interface}
\major{ }{}{block}{Tenth IDE hard disk/CD-ROM interface}
\minor{0}{/dev/hds}{Master: whole disk (or CD-ROM)}
\minor{64}{/dev/hdt}{Slave: whole disk (or CD-ROM)}
\end{devicelist}
......
......@@ -1215,7 +1215,7 @@ Your cooperation is appreciated.
1 = /dev/comx1 COMX channel 1
...
block Sixth IDE hard disk/CD-ROM interface
block Seventh IDE hard disk/CD-ROM interface
0 = /dev/hdm Master: whole disk (or CD-ROM)
64 = /dev/hdn Slave: whole disk (or CD-ROM)
......@@ -1227,7 +1227,7 @@ Your cooperation is appreciated.
1 = /dev/i2c1 Second I2C adapter
...
block Seventh IDE hard disk/CD-ROM interface
block Eighth IDE hard disk/CD-ROM interface
0 = /dev/hdo Master: whole disk (or CD-ROM)
64 = /dev/hdp Slave: whole disk (or CD-ROM)
......@@ -1241,7 +1241,7 @@ Your cooperation is appreciated.
30 = /dev/mtd15 16th MTD (rw)
31 = /dev/mtdr15 16th MTD (ro)
block Eighth IDE hard disk/CD-ROM interface
block Ninth IDE hard disk/CD-ROM interface
0 = /dev/hdq Master: whole disk (or CD-ROM)
64 = /dev/hdr Slave: whole disk (or CD-ROM)
......@@ -1253,7 +1253,7 @@ Your cooperation is appreciated.
1 = /dev/can1 Second CAN-Bus controller
...
block Ninth IDE hard disk/CD-ROM interface
block Tenth IDE hard disk/CD-ROM interface
0 = /dev/hds Master: whole disk (or CD-ROM)
64 = /dev/hdt Slave: whole disk (or CD-ROM)
......
Config Language Specification
21 January 1999
28 September 1999
Michael Elizabeth Chastain, <mailto:mec@shout.net>
......@@ -82,7 +82,10 @@ Here are the basic grammar elements.
double-quoted string. If the word is unquoted or double quoted,
then $-substition will be performed on the word.
A /symbol/ is a single unquoted word.
A /symbol/ is a single unquoted word. A symbol must have a name of
the form CONFIG_*. scripts/mkdep.c relies on this convention in order
to generate dependencies on individual CONFIG_* symbols instead of
making one massive dependency on include/linux/autoconf.h.
A /dep/ is a dependency. Syntactically, it is a /word/. At run
time, a /dep/ must evaluate to "y", "m", "n", or "".
......@@ -355,8 +358,8 @@ This verb assigns the value of /word/ to /symbol/. Any hexadecimal
number is a legal value.
Configure: implemented
Menuconfig: not implemented
Xconfig: not implemented
Menuconfig: implemented
Xconfig: implemented
mconfig: implemented
Example:
......@@ -377,8 +380,8 @@ This verb assigns /symbol/ the value /word/. Any decimal number is a
legal value.
Configure: implemented
Menuconfig: not implemented
Xconfig: not implemented
Menuconfig: implemented
Xconfig: implemented
mconfig: implemented
Example:
......@@ -394,8 +397,8 @@ This verb assigns the value of /word/ to /symbol/. Legal input values
are any ASCII string, except for the characters '"' and '\\'.
Configure: implemented
Menuconfig: not implemented
Xconfig: not implemented
Menuconfig: implemented
Xconfig: implemented
mconfig: implemented
Example
......@@ -414,9 +417,9 @@ As soon as this verb is implemented in all interpreters, please use it
instead of define_bool to define tristate values. This aids in static
type checking.
Configure: not implemented
Menuconfig: not implemented
Xconfig: not implemented
Configure: implemented
Menuconfig: implemented
Xconfig: implemented
mconfig: implemented
Example:
......@@ -433,22 +436,27 @@ Example:
This verb evaluates all of the dependencies in the dependency list.
Any dependency which has a value of "y" does not restrict the input
range. Any dependency which has a value of "n", or which has some
other value, restricts the input range to "n".
range. Any dependency which has an empty value is ignored.
Any dependency which has a value of "n", or which has some other value,
restricts the input range to "n". Quoting dependencies is not allowed.
Using dependencies with an empty value possible is not recommended.
If the input range is restricted to the single choice "n", dep_bool
silently assigns "n" to /symbol/. If the input range has more than
one choice, dep_bool displays /prompt/ to the user, accepts a value
from the user, and assigns that value to /symbol/.
Configure: not implemented
Menuconfig: not implemented
XConfig: not implemented
Configure: implemented
Menuconfig: implemented
XConfig: implemented
mconfig: implemented
# not from the corpus
dep_bool 'RZ1000 chipset bugfix/support' CONFIG_BLK_DEV_RZ1000 $CONFIG_PCI
Known bugs:
- Xconfig does not write "# foo is not set" to .config (as well as
"#unset foo" to autoconf.h) if command is disabled by its dependencies.
=== dep_hex /prompt/ /symbol/ /word/ /dep/ ...
......@@ -464,13 +472,15 @@ mconfig: not implemented
=== dep_tristate /prompt/ /symbol /dep/ ...
=== dep_tristate /prompt/ /symbol/ /dep/ ...
This verb evaluates all of the dependencies in the dependency list.
Any dependency which as a value of "y" does not restrict the input range.
Any dependency which has a value of "y" does not restrict the input range.
Any dependency which has a value of "m" restricts the input range to
"m" or "n". Any dependency which has a value of "n", or which has some
other value, restricts the input range to "n".
"m" or "n". Any dependency which has an empty value is ignored.
Any dependency which has a value of "n", or which has some other value,
restricts the input range to "n". Quoting dependencies is not allowed.
Using dependencies with an empty value possible is not recommended.
If the input range is restricted to the single choice "n", dep_tristate
silently assigns "n" to /symbol/. If the input range has more than
......@@ -478,10 +488,13 @@ one choice, dep_tristate displays /prompt/ to the user, accepts a value
from the user, and assigns that value to /symbol/.
Configure: implemented
Menuconfig: implemented (but silently ignores dependencies after the first)
Xconfig: implemented (but silently ignores dependencies after the first)
Menuconfig: implemented
Xconfig: implemented
mconfig: implemented
Known bugs:
- Xconfig does not write "# foo is not set" to .config (as well as
"#unset foo" to autoconf.h) if command is disabled by its dependencies.
=== unset /symbol/ ...
......@@ -492,7 +505,7 @@ up deeper problems with variable semantics in a random-execution language.
Configure: implemented
Menuconfig: implemented
Xconfig: not implemented
Xconfig: implemented (with bugs)
mconfig: implemented
......@@ -570,14 +583,9 @@ Menuconfig: implemented
XConfig: implemented, with bugs
mconfig: implemented
Xconfig has several known bugs, and probably some unknown bugs too:
- In a comparison, if the left-hand atom is a variable and that variable
is from a choice list, the right-hand atom must be "y".
Xconfig has some known bugs, and probably some unknown bugs too:
- In a comparison, if the right-hand atom is a variable and that variable
is from a choice list, you lose. tkparse will throw a segmentation
violation, silently generate bizarre TCL code, or something else.
- literals with an empty "" value are not properly handled.
- tkparse gives the wrong precedence to -o, -a, and !. Don't use both
-o and -a in an expression. Don't use ! at all.
......
......@@ -266,9 +266,11 @@ or parport=0xBBB[,IRQ[,DMA]] to use any IRQ/DMA settings detected
IRQ/DMA settings because of possible
conflicts). You can specify the base
address, IRQ, and DMA settings; IRQ
and DMA should be numbers or 'auto'
and DMA should be numbers, or 'auto'
(for using detected settings on that
particular port). Parallel ports are
particular port), or 'nofifo' (to
avoid using a FIFO even if it is
detected). Parallel ports are
assigned in the order they are
specified on the command line,
starting with parport0.
......
September 21, 1999
Copyright (c) 1998 Corey Thomas (corey@world.std.com)
This file is the documentation for the Raylink Wireless LAN card driver for
Linux. The Raylink wireless LAN card is a PCMCIA card which provides IEEE
802.11 compatible wireless network connectivity at 1 and 2 megabits/second.
See http://www.raytheon.com/micro/raylink/ for more information on the Raylink
card. This driver is in early development and does have bugs. See the known
bugs and limitations at the end of this document for more information.
This driver also works with WebGear's Aviator 2.4 and Aviator Pro
wireless LAN cards.
As of kernel 2.3.18, the ray_cs driver is part of the Linux kernel
source. My web page for the development of ray_cs is at
http://world.std.com/~corey/raylink.html and I can be emailed at
corey@world.std.com
The kernel driver is based on ray_cs-1.62.tgz
The driver at my web page is intended to be used as an add on to
David Hinds pcmcia package. All the command line parameters are
available when compiled as a module. When built into the kernel, only
the essid= string parameter is available via the kernel command line.
This will change after the method of sorting out parameters for all
the PCMCIA drivers is agreed upon. If you must have a built in driver
with nondefault parameters, they can be edited in
/usr/src/linux/drivers/net/pcmcia/ray_cs.c. Searching for MODULE_PARM
will find them all.
Information on card services is available at:
ftp://hyper.stanford.edu/pub/pcmcia/doc
http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html
Card services user programs are still required for PCMCIA devices.
pcmcia-cs-3.1.1 or greater is required for the kernel version of
the driver.
Currently, ray_cs is not part of David Hinds card services package,
so the following magic is required.
At the end of the /etc/pcmcia/config.opts file, add the line:
source ./ray_cs.opts
This will make card services read the ray_cs.opts file
when starting. Create the file /etc/pcmcia/ray_cs.opts containing the
following:
#### start of /etc/pcmcia/ray_cs.opts ###################
# Configuration options for Raylink Wireless LAN PCMCIA card
device "ray_cs"
class "network" module "misc/ray_cs"
card "RayLink PC Card WLAN Adapter"
manfid 0x01a6, 0x0000
bind "ray_cs"
module "misc/ray_cs" opts ""
#### end of /etc/pcmcia/ray_cs.opts #####################
To join an existing network with
different parameters, contact the network administrator for the
configuration information, and edit /etc/pcmcia/ray_cs.opts.
Add the parameters below between the empty quotes.
Parameters for ray_cs driver which may be specified in ray_cs.opts:
bc integer 0 = normal mode (802.11 timing)
1 = slow down inter frame timing to allow
operation with older breezecom access
points.
beacon_period integer beacon period in Kilo-microseconds
legal values = must be integer multiple
of hop dwell
default = 256
country integer 1 = USA (default)
2 = Europe
3 = Japan
4 = Korea
5 = Spain
6 = France
7 = Israel
8 = Australia
essid string ESS ID - network name to join
string with maximum length of 32 chars
default value = "ADHOC_ESSID"
hop_dwell integer hop dwell time in Kilo-microseconds
legal values = 16,32,64,128(default),256
irq_mask integer linux standard 16 bit value 1bit/IRQ
lsb is IRQ 0, bit 1 is IRQ 1 etc.
Used to restrict choice of IRQ's to use.
Recommended method for controlling
interrupts is in /etc/pcmcia/config.opts
net_type integer 0 (default) = adhoc network,
1 = infrastructure
phy_addr string string containing new MAC address in
hex, must start with x eg
x00008f123456
psm integer 0 = continuously active
1 = power save mode (not useful yet)
pc_debug integer (0-5) larger values for more verbose
logging. Replaces ray_debug.
ray_debug integer Replaced with pc_debug
ray_mem_speed integer defaults to 500
sniffer integer 0 = not sniffer (default)
1 = sniffer which can be used to record all
network traffic using tcpdump or similar,
but no normal network use is allowed.
translate integer 0 = no translation (encapsulate frames)
1 = translation (RFC1042/802.1)
More on sniffer mode:
tcpdump does not understand 802.11 headers, so it can't
interpret the contents, but it can record to a file. This is only
useful for debugging 802.11 lowlevel protocols that are not visible to
linux. If you want to watch ftp xfers, or do similar things, you
don't need to use sniffer mode. Also, some packet types are never
sent up by the card, so you will never see them (ack, rts, cts, probe
etc.) There is a simple program (showcap) included in the ray_cs
package which parses the 802.11 headers.
Known Problems and missing features
Does not work with non x86
Does not work with SMP
Support for defragmenting frames is not yet debugged, and in
fact is known to not work. I have never encountered a net set
up to fragment, but still, it should be fixed.
The ioctl support is incomplete. The hardware address cannot be set
using ifconfig yet. If a different hardware address is needed, it may
be set using the phy_addr parameter in ray_cs.opts. This requires
a card insertion to take effect.
Is your SMP system locking up unpredictably? No keyboard activity, just
a frustrating complete hard lockup? Do you want to help us debugging
such lockups? If all yes then this document is definitely for you.
on Intel SMP hardware there is a feature that enables us to generate
'watchdog NMI interrupts'. (NMI: Non Maskable Interrupt - these get
executed even if the system is otherwise locked up hard) This can be
used to debug hard kernel lockups. By executing periodic NMI interrupts,
the kernel can monitor wether any CPU has locked up, and print out
debugging messages if so. You can enable/disable the NMI watchdog at boot
time with the 'nmi_watchdog=1' boot parameter. Eg. the relevant
lilo.conf entry:
append="nmi_watchdog=1"
A 'lockup' is the following scenario: if any CPU in the system does not
execute the period local timer interrupt for more than 5 seconds, then
the NMI handler generates an oops and kills the process. This
'controlled crash' (and the resulting kernel messages) can be used to
debug the lockup. Thus whenever the lockup happens, wait 5 seconds and
the oops will show up automatically. If the kernel produces no messages
then the system has crashed so hard (eg. hardware-wise) that either it
cannot even accept NMI interrupts, or the crash has made the kernel
unable to print messages.
NOTE: currently the NMI-oopser is enabled unconditionally on x86 SMP
boxes.
[ feel free to send bug reports, suggestions and patches to
Ingo Molnar <mingo@redhat.com> or the Linux SMP mailing
list at <linux-smp@vger.rutgers.edu> ]
......@@ -67,7 +67,7 @@ If you compile the parport code into the kernel, then you can use
kernel boot parameters to get the same effect. Add something like the
following to your LILO command line:
parport=0x3bc parport=0x378,7 parport=0x278,auto
parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo
You can have many `parport=...' statements, one for each port you want
to add. Adding `parport=0' to the kernel command-line will disable
......
......@@ -434,6 +434,11 @@ M: Gadi Oxman <gadio@netvision.net.il>
L: linux-kernel@vger.rutgers.edu
S: Maintained
INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT
P: Ingo Molnar
M: mingo@redhat.com
S: Maintained
IP MASQUERADING:
P: Juanjo Ciarlante
M: jjciarla@raiz.uncu.edu.ar
......
VERSION = 2
PATCHLEVEL = 3
SUBLEVEL = 19
SUBLEVEL = 20
EXTRAVERSION =
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
......
......@@ -18,7 +18,6 @@
#include <asm/system.h>
#include <asm/ptrace.h>
#include <asm/smp.h>
#include <asm/pci.h>
#define __EXTERN_INLINE inline
#include <asm/io.h>
......
......@@ -19,7 +19,6 @@
#include <asm/system.h>
#include <asm/ptrace.h>
#include <asm/pci.h>
#define __EXTERN_INLINE inline
#include <asm/io.h>
......
......@@ -17,7 +17,6 @@
#include <asm/ptrace.h>
#include <asm/system.h>
#include <asm/smp.h>
#include <asm/pci.h>
#define __EXTERN_INLINE inline
#include <asm/io.h>
......
......@@ -15,7 +15,6 @@
#include <asm/ptrace.h>
#include <asm/system.h>
#include <asm/pci.h>
#include <asm/hwrpb.h>
#define __EXTERN_INLINE inline
......
......@@ -12,7 +12,6 @@
#include <asm/system.h>
#include <asm/ptrace.h>
#include <asm/pci.h>
#define __EXTERN_INLINE inline
#include <asm/io.h>
......
......@@ -14,7 +14,6 @@
#include <asm/ptrace.h>
#include <asm/system.h>
#include <asm/pci.h>
#define __EXTERN_INLINE inline
#include <asm/io.h>
......
......@@ -17,7 +17,6 @@
#include <asm/ptrace.h>
#include <asm/system.h>
#include <asm/pci.h>
#define __EXTERN_INLINE
#include <asm/io.h>
......
......@@ -14,7 +14,6 @@
#include <asm/ptrace.h>
#include <asm/system.h>
#include <asm/pci.h>
#include <asm/smp.h>
#define __EXTERN_INLINE inline
......
......@@ -10,7 +10,6 @@
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <asm/pci.h>
#include <asm/machvec.h>
#include "proto.h"
......@@ -81,6 +80,13 @@ pcibios_assign_special(void)
for (dev = pci_devices; dev; dev = dev->next) {
if (dev->class >> 8 != PCI_CLASS_STORAGE_IDE)
continue;
/* Resource 1 of IDE controller is the address of HD_CMD
register which actually occupies a single byte (0x3f6
for ide0) in reported 0x3f4-3f7 range. We have to fix
that to avoid resource conflict with AT-style floppy
controller. */
dev->resource[1].start += 2;
dev->resource[1].end = dev->resource[1].start;
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
if (dev->resource[i].flags)
pci_claim_resource(dev, i);
......
......@@ -40,7 +40,6 @@
#include <asm/hwrpb.h>
#include <asm/dma.h>
#include <asm/io.h>
#include <asm/pci.h>
#include "proto.h"
#include "pci_impl.h"
......
......@@ -22,7 +22,6 @@
#include <asm/bitops.h>
#include <asm/mmu_context.h>
#include <asm/io.h>
#include <asm/pci.h>
#include <asm/pgtable.h>
#include <asm/core_tsunami.h>
#include <asm/hwrpb.h>
......
......@@ -19,7 +19,6 @@
#include <asm/system.h>
#include <asm/dma.h>
#include <asm/irq.h>
#include <asm/pci.h>
#include <asm/mmu_context.h>
#include <asm/io.h>
#include <asm/pgtable.h>
......
......@@ -28,7 +28,6 @@
#include <asm/pgtable.h>
#include <asm/core_apecs.h>
#include <asm/core_lca.h>
#include <asm/pci.h>
#include "proto.h"
#include "irq_impl.h"
......
This diff is collapsed.
......@@ -641,36 +641,9 @@ a20_wait:
out #0xf1,al
call delay
! well, that went ok, I hope. Now we have to reprogram the interrupts :-(
! we put them right after the intel-reserved hardware interrupts, at
! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really
! messed this up with the original PC, and they haven't been able to
! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f,
! which is used for the internal hardware interrupts as well. We just
! have to reprogram the 8259's, and it isn't fun.
mov al,#0x11 ! initialization sequence
out #0x20,al ! send it to 8259A-1
call delay
out #0xA0,al ! and to 8259A-2
call delay
mov al,#0x20 ! start of hardware int's (0x20)
out #0x21,al
call delay
mov al,#0x28 ! start of hardware int's 2 (0x28)
out #0xA1,al
call delay
mov al,#0x04 ! 8259-1 is master
out #0x21,al
call delay
mov al,#0x02 ! 8259-2 is slave
out #0xA1,al
call delay
mov al,#0x01 ! 8086 mode for both
out #0x21,al
call delay
out #0xA1,al
call delay
! well, that went ok, I hope. Now we mask all interrupts - the rest
! is done in init_IRQ().
mov al,#0xFF ! mask off all interrupts for now
out #0xA1,al
call delay
......
......@@ -360,6 +360,7 @@ CONFIG_82C710_MOUSE=y
#
# Misc devices
#
CONFIG_ACPI=y
#
# Filesystems
......
......@@ -43,7 +43,7 @@ else
endif
ifdef CONFIG_SMP
O_OBJS += smp.o trampoline.o
O_OBJS += smp.o smpboot.o trampoline.o
endif
ifdef CONFIG_X86_IO_APIC
......
This diff is collapsed.
......@@ -323,9 +323,14 @@ ENTRY(debug)
jmp error_code
ENTRY(nmi)
pushl %eax
SAVE_ALL
movl %esp,%edx
pushl $0
pushl $ SYMBOL_NAME(do_nmi)
jmp error_code
pushl %edx
call SYMBOL_NAME(do_nmi)
addl $8,%esp
RESTORE_ALL
ENTRY(int3)
pushl $0
......
......@@ -243,6 +243,15 @@ is386: pushl %ecx # restore original EFLAGS
xorl %eax,%eax
lldt %ax
cld # gcc2 wants the direction flag cleared at all times
#ifdef __SMP__
movb ready, %cl
cmpb $1,%cl
je 1f # the first CPU calls start_kernel
# all other CPUs call initialize_secondary
call SYMBOL_NAME(initialize_secondary)
jmp L6
1:
#endif
call SYMBOL_NAME(start_kernel)
L6:
jmp L6 # main should never return here, but
......
......@@ -8,6 +8,7 @@
#include <linux/in6.h>
#include <linux/interrupt.h>
#include <linux/smp_lock.h>
#include <linux/acpi.h>
#include <asm/semaphore.h>
#include <asm/processor.h>
......@@ -41,6 +42,7 @@ EXPORT_SYMBOL(enable_irq);
EXPORT_SYMBOL(disable_irq);
EXPORT_SYMBOL(disable_irq_nosync);
EXPORT_SYMBOL(kernel_thread);
EXPORT_SYMBOL(acpi_idle);
EXPORT_SYMBOL_NOVERS(__down_failed);
EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
......
This diff is collapsed.
This diff is collapsed.
......@@ -22,7 +22,6 @@
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/kernel_stat.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/ioport.h>
......@@ -30,14 +29,13 @@
#include <linux/timex.h>
#include <linux/malloc.h>
#include <linux/random.h>
#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/init.h>
#include <linux/kernel_stat.h>
#include <asm/system.h>
#include <asm/io.h>
#include <asm/bitops.h>
#include <asm/smp.h>
#include <asm/pgtable.h>
#include <asm/delay.h>
#include <asm/desc.h>
......@@ -48,7 +46,7 @@
unsigned int local_bh_count[NR_CPUS];
unsigned int local_irq_count[NR_CPUS];
atomic_t nmi_counter;
extern atomic_t nmi_counter[NR_CPUS];
/*
* Linux has a controller-independent x86 interrupt architecture.
......@@ -75,7 +73,8 @@ spinlock_t irq_controller_lock = SPIN_LOCK_UNLOCKED;
/*
* Controller mappings for all interrupt sources:
*/
irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = { [0 ... NR_IRQS-1] = { 0, &no_irq_type, }};
irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
{ [0 ... NR_IRQS-1] = { 0, &no_irq_type, }};
/*
* Special irq handlers.
......@@ -83,6 +82,52 @@ irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = { [0 ... NR_IRQS-1] = { 0, &n
void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
/*
* Generic no controller code
*/
static void enable_none(unsigned int irq) { }
static unsigned int startup_none(unsigned int irq) { return 0; }
static void disable_none(unsigned int irq) { }
static void ack_none(unsigned int irq)
{
/*
* 'what should we do if we get a hw irq event on an illegal vector'.
* each architecture has to answer this themselves, it doesnt deserve
* a generic callback i think.
*/
#if CONFIG_X86
printk("unexpected IRQ trap at vector %02x\n", irq);
#ifdef __SMP__
/*
* Currently unexpected vectors happen only on SMP and APIC.
* We _must_ ack these because every local APIC has only N
* irq slots per priority level, and a 'hanging, unacked' IRQ
* holds up an irq slot - in excessive cases (when multiple
* unexpected vectors occur) that might lock up the APIC
* completely.
*/
ack_APIC_irq();
#endif
#endif
}
/* startup is the same as "enable", shutdown is same as "disable" */
#define shutdown_none disable_none
#define end_none enable_none
struct hw_interrupt_type no_irq_type = {
"none",
startup_none,
shutdown_none,
enable_none,
disable_none,
ack_none,
end_none
};
volatile unsigned long irq_err_count;
/*
* Generic, controller-independent functions:
*/
......@@ -106,22 +151,30 @@ int get_irq_list(char *buf)
#ifndef __SMP__
p += sprintf(p, "%10u ", kstat_irqs(i));
#else
for (j=0; j<smp_num_cpus; j++)
for (j = 0; j < smp_num_cpus; j++)
p += sprintf(p, "%10u ",
kstat.irqs[cpu_logical_map(j)][i]);
#endif
p += sprintf(p, " %14s", irq_desc[i].handler->typename);
p += sprintf(p, " %s", action->name);
for (action=action->next; action; action = action->next) {
for (action=action->next; action; action = action->next)
p += sprintf(p, ", %s", action->name);
}
*p++ = '\n';
}
p += sprintf(p, "NMI: %10u\n", atomic_read(&nmi_counter));
#ifdef __SMP__
p += sprintf(p, "ERR: %10lu\n", ipi_count);
#endif
p += sprintf(p, "NMI: ");
for (j = 0; j < smp_num_cpus; j++)
p += sprintf(p, "%10u ",
atomic_read(nmi_counter+cpu_logical_map(j)));
p += sprintf(p, "\n");
#if CONFIG_SMP
p += sprintf(p, "LOC: ");
for (j = 0; j < smp_num_cpus; j++)
p += sprintf(p, "%10u ",
apic_timer_irqs[cpu_logical_map(j)]);
p += sprintf(p, "\n");
#endif
p += sprintf(p, "ERR: %10lu\n", irq_err_count);
return p - buf;
}
......@@ -520,7 +573,7 @@ asmlinkage unsigned int do_IRQ(struct pt_regs regs)
kstat.irqs[cpu][irq]++;
desc = irq_desc + irq;
spin_lock(&irq_controller_lock);
irq_desc[irq].handler->ack(irq);
desc->handler->ack(irq);
/*
REPLAY is when Linux resends an IRQ that was dropped earlier
WAITING is used by probe to mark irqs that are being tested
......@@ -570,9 +623,8 @@ asmlinkage unsigned int do_IRQ(struct pt_regs regs)
spin_unlock(&irq_controller_lock);
}
desc->status &= ~IRQ_INPROGRESS;
if (!(desc->status & IRQ_DISABLED)){
irq_desc[irq].handler->end(irq);
}
if (!(desc->status & IRQ_DISABLED))
desc->handler->end(irq);
spin_unlock(&irq_controller_lock);
/*
......
This diff is collapsed.
This diff is collapsed.
......@@ -74,7 +74,7 @@ static unsigned long last_tsc_low; /* lsb 32 bits of Time Stamp Counter */
* Equal to 2^32 * (1 / (clocks per usec) ).
* Initialized in time_init.
*/
static unsigned long fast_gettimeoffset_quotient=0;
unsigned long fast_gettimeoffset_quotient=0;
extern rwlock_t xtime_lock;
......
......@@ -58,10 +58,17 @@ struct desc_struct default_ldt[] = { { 0, 0 }, { 0, 0 }, { 0, 0 },
*/
struct desc_struct idt_table[256] __attribute__((__section__(".data.idt"))) = { {0, 0}, };
extern int console_loglevel;
static inline void console_silent(void)
{
console_loglevel = 0;
}
static inline void console_verbose(void)
{
extern int console_loglevel;
console_loglevel = 15;
if (console_loglevel)
console_loglevel = 15;
}
#define DO_ERROR(trapnr, signr, str, name, tsk) \
......@@ -202,8 +209,6 @@ void die(const char * str, struct pt_regs * regs, long err)
printk("%s: %04lx\n", str, err & 0xffff);
show_registers(regs);
spin_lock_irq(&die_lock);
spin_unlock_irq(&die_lock);
do_exit(SIGSEGV);
}
......@@ -292,7 +297,11 @@ static void mem_parity_error(unsigned char reason, struct pt_regs * regs)
{
printk("Uhhuh. NMI received. Dazed and confused, but trying to continue\n");
printk("You probably have a hardware problem with your RAM chips\n");
}
/* Clear and disable the memory parity error line. */
reason = (reason & 0xf) | 4;
outb(reason, 0x61);
}
static void io_check_error(unsigned char reason, struct pt_regs * regs)
{
......@@ -301,8 +310,8 @@ static void io_check_error(unsigned char reason, struct pt_regs * regs)
printk("NMI: IOCK error (debug interrupt?)\n");
show_registers(regs);
/* Re-enable theIOCK line, wait for a few seconds */
reason |= 8;
/* Re-enable the IOCK line, wait for a few seconds */
reason = (reason & 0xf) | 8;
outb(reason, 0x61);
i = 2000;
while (--i) udelay(1000);
......@@ -325,18 +334,107 @@ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
printk("Do you have a strange power saving mode enabled?\n");
}
atomic_t nmi_counter[NR_CPUS];
#if CONFIG_SMP
int nmi_watchdog = 1;
static int __init setup_nmi_watchdog(char *str)
{
get_option(&str, &nmi_watchdog);
return 1;
}
__setup("nmi_watchdog=", setup_nmi_watchdog);
extern spinlock_t console_lock;
static spinlock_t nmi_print_lock = SPIN_LOCK_UNLOCKED;
inline void nmi_watchdog_tick(struct pt_regs * regs)
{
/*
* the best way to detect wether a CPU has a 'hard lockup' problem
* is to check it's local APIC timer IRQ counts. If they are not
* changing then that CPU has some problem.
*
* as these watchdog NMI IRQs are broadcasted to every CPU, here
* we only have to check the current processor.
*
* since NMIs dont listen to _any_ locks, we have to be extremely
* careful not to rely on unsafe variables. The printk might lock
* up though, so we have to break up console_lock first ...
* [when there will be more tty-related locks, break them up
* here too!]
*/
static unsigned int last_irq_sums [NR_CPUS] = { 0, },
alert_counter [NR_CPUS] = { 0, };
/*
* Since current-> is always on the stack, and we always switch
* the stack NMI-atomically, it's safe to use smp_processor_id().
*/
int sum, cpu = smp_processor_id();
sum = apic_timer_irqs[cpu];
if (last_irq_sums[cpu] == sum) {
/*
* Ayiee, looks like this CPU is stuck ...
* wait a few IRQs (5 seconds) before doing the oops ...
*/
alert_counter[cpu]++;
if (alert_counter[cpu] == 5*HZ) {
spin_lock(&nmi_print_lock);
spin_unlock(&console_lock); // we are in trouble anyway
printk("NMI Watchdog detected LOCKUP on CPU%d, registers:\n", cpu);
show_registers(regs);
printk("console shuts up ...\n");
console_silent();
spin_unlock(&nmi_print_lock);
do_exit(SIGSEGV);
}
} else {
last_irq_sums[cpu] = sum;
alert_counter[cpu] = 0;
}
}
#endif
asmlinkage void do_nmi(struct pt_regs * regs, long error_code)
{
unsigned char reason = inb(0x61);
extern atomic_t nmi_counter;
atomic_inc(&nmi_counter);
atomic_inc(nmi_counter+smp_processor_id());
if (!(reason & 0xc0)) {
#if CONFIG_SMP
/*
* Ok, so this is none of the documented NMI sources,
* so it must be the NMI watchdog.
*/
if (nmi_watchdog) {
nmi_watchdog_tick(regs);
return;
} else
unknown_nmi_error(reason, regs);
#else
unknown_nmi_error(reason, regs);
#endif
return;
}
if (reason & 0x80)
mem_parity_error(reason, regs);
if (reason & 0x40)
io_check_error(reason, regs);
if (!(reason & 0xc0))
unknown_nmi_error(reason, regs);
/*
* Reassert NMI in case it became active meanwhile
* as it's edge-triggered.
*/
outb(0x8f, 0x70);
inb(0x71); /* dummy */
outb(0x0f, 0x70);
inb(0x71); /* dummy */
}
/*
......@@ -455,6 +553,7 @@ asmlinkage void do_spurious_interrupt_bug(struct pt_regs * regs,
asmlinkage void math_state_restore(struct pt_regs regs)
{
__asm__ __volatile__("clts"); /* Allow maths ops (or we recurse) */
if(current->used_math)
__asm__("frstor %0": :"m" (current->thread.i387));
else
......@@ -489,7 +588,6 @@ void __init trap_init_f00f_bug(void)
pmd_t * pmd;
pte_t * pte;
return;
/*
* Allocate a new page in virtual address space,
* move the IDT into it and write protect this page.
......@@ -658,7 +756,7 @@ cobalt_init(void)
*/
set_fixmap(FIX_APIC_BASE, APIC_PHYS_BASE);
printk("Local APIC ID %lx\n", apic_read(APIC_ID));
printk("Local APIC Version %lx\n", apic_read(APIC_VERSION));
printk("Local APIC Version %lx\n", apic_read(APIC_LVR));
set_fixmap(FIX_CO_CPU, CO_CPU_PHYS);
printk("Cobalt Revision %lx\n", co_cpu_read(CO_CPU_REV));
......@@ -679,7 +777,7 @@ void __init trap_init(void)
set_trap_gate(0,&divide_error);
set_trap_gate(1,&debug);
set_trap_gate(2,&nmi);
set_intr_gate(2,&nmi);
set_system_gate(3,&int3); /* int3-5 can be called from all */
set_system_gate(4,&overflow);
set_system_gate(5,&bounds);
......
This diff is collapsed.
This diff is collapsed.
......@@ -13,7 +13,6 @@
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/types.h>
#include <asm/pci.h>
#ifdef CONFIG_PCI
......
......@@ -13,7 +13,6 @@
#include <linux/pci.h>
#include <linux/types.h>
#include <asm/byteorder.h>
#include <asm/pci.h>
#include <asm/sni.h>
#ifdef CONFIG_PCI
......
......@@ -31,7 +31,6 @@
#include <asm/processor.h>
#include <asm/reboot.h>
#include <asm/sni.h>
#include <asm/pci.h>
/*
* Initial irq handlers.
......
#
# MPC8xx Communication options
#
if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
mainmenu_option next_comment
comment 'MPC8xx Communication Options'
bool 'CPM SCC Ethernet' CONFIG_SCC_ENET
if [ "$CONFIG_SCC_ENET" = "y" ]; then
bool 'Ethernet on SCC1' CONFIG_SCC1_ENET
if [ "$CONFIG_SCC1_ENET" != "y" ]; then
bool 'Ethernet on SCC2' CONFIG_SCC2_ENET
fi
fi
bool '860T FEC Ethernet' CONFIG_FEC_ENET
endmenu
fi
......@@ -9,11 +9,12 @@
O_TARGET := 8xx_io.a
O_OBJS = commproc.o uart.o
ifdef CONFIG_MBX
O_OBJS += enet.o
endif
ifdef CONFIG_FADS
ifdef CONFIG_FEC_ENET
O_OBJS += fec.o
endif
ifdef CONFIG_SCC_ENET
O_OBJS += enet.o
endif
include $(TOPDIR)/Rules.make
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -27,7 +27,7 @@ CFLAGS := $(CFLAGS) -I$(HPATH) -D__powerpc__ -fsigned-char -msoft-float \
CPP = $(CC) -E $(CFLAGS)
ifdef CONFIG_8xx
CFLAGS := $(CFLAGS) -mcpu=860
CFLAGS := $(CFLAGS) -mcpu=860 -I../8xx_io
endif
ifdef CONFIG_PPC64
......@@ -45,7 +45,7 @@ SUBDIRS := $(SUBDIRS) $(ARCH_SUBDIRS)
ARCHIVES := arch/ppc/kernel/kernel.o arch/ppc/mm/mm.o arch/ppc/lib/lib.o $(ARCHIVES)
CORE_FILES := arch/ppc/kernel/kernel.o arch/ppc/mm/mm.o arch/ppc/lib/lib.o $(CORE_FILES)
ifdef CONFIG_8xx
ifdef CONFIG_MATH_EMULATION
SUBDIRS += arch/ppc/math-emu
ARCHIVES += arch/ppc/math-emu/math-emu.o
CORE_FILES += arch/ppc/math-emu/math-emu.o
......@@ -77,7 +77,7 @@ checks:
BOOT_TARGETS = zImage znetboot.initrd zImage.initrd
ifdef CONFIG_MBX
ifdef CONFIG_8xx
$(BOOT_TARGETS): $(CHECKS) vmlinux
@$(MAKECOFFBOOT) $@
@$(MAKEMBXBOOT) $@
......
......@@ -12,4 +12,8 @@ O_OBJS := config.o amiints.o cia.o time.o \
bootinfo.o amisound.o chipram.o ints.o
OX_OBJS := amiga_ksyms.o
ifdef CONFIG_AMIGA_PCMCIA
O_OBJS := $(O_OBJS) pcmcia.o
endif
include $(TOPDIR)/Rules.make
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#include "../../m68k/amiga/pcmcia.c"
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment