mirror of https://gitee.com/openkylin/linux.git
Merge /spare/repo/linux-2.6/
This commit is contained in:
commit
a7144b23da
4
CREDITS
4
CREDITS
|
@ -2380,8 +2380,8 @@ E: tmolina@cablespeed.com
|
||||||
D: bug fixes, documentation, minor hackery
|
D: bug fixes, documentation, minor hackery
|
||||||
|
|
||||||
N: James Morris
|
N: James Morris
|
||||||
E: jmorris@redhat.com
|
E: jmorris@namei.org
|
||||||
W: http://www.intercode.com.au/jmorris/
|
W: http://namei.org/
|
||||||
D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec,
|
D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec,
|
||||||
D: Crypto API, general networking, miscellaneous.
|
D: Crypto API, general networking, miscellaneous.
|
||||||
S: PO Box 707
|
S: PO Box 707
|
||||||
|
|
|
@ -149,6 +149,11 @@ USB, framebuffer devices, the VFS, the SCSI subsystem, etc. See the
|
||||||
MAINTAINERS file for a mailing list that relates specifically to
|
MAINTAINERS file for a mailing list that relates specifically to
|
||||||
your change.
|
your change.
|
||||||
|
|
||||||
|
If changes affect userland-kernel interfaces, please send
|
||||||
|
the MAN-PAGES maintainer (as listed in the MAINTAINERS file)
|
||||||
|
a man-pages patch, or at least a notification of the change,
|
||||||
|
so that some information makes its way into the manual pages.
|
||||||
|
|
||||||
Even if the maintainer did not respond in step #4, make sure to ALWAYS
|
Even if the maintainer did not respond in step #4, make sure to ALWAYS
|
||||||
copy the maintainer when you change their code.
|
copy the maintainer when you change their code.
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ logo_*.c
|
||||||
logo_*_clut224.c
|
logo_*_clut224.c
|
||||||
logo_*_mono.c
|
logo_*_mono.c
|
||||||
lxdialog
|
lxdialog
|
||||||
|
mach-types
|
||||||
mach-types.h
|
mach-types.h
|
||||||
make_times_h
|
make_times_h
|
||||||
map
|
map
|
||||||
|
|
|
@ -144,7 +144,21 @@ vgapal Use the standard vga registers for palette changes.
|
||||||
This is the default.
|
This is the default.
|
||||||
pmipal Use the protected mode interface for palette changes.
|
pmipal Use the protected mode interface for palette changes.
|
||||||
|
|
||||||
mtrr setup memory type range registers for the vesafb framebuffer.
|
mtrr:n setup memory type range registers for the vesafb framebuffer
|
||||||
|
where n:
|
||||||
|
0 - disabled (equivalent to nomtrr)
|
||||||
|
1 - uncachable
|
||||||
|
2 - write-back
|
||||||
|
3 - write-combining (default)
|
||||||
|
4 - write-through
|
||||||
|
|
||||||
|
If you see the following in dmesg, choose the type that matches the
|
||||||
|
old one. In this example, use "mtrr:2".
|
||||||
|
...
|
||||||
|
mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
|
||||||
|
...
|
||||||
|
|
||||||
|
nomtrr disable mtrr
|
||||||
|
|
||||||
vremap:n
|
vremap:n
|
||||||
remap 'n' MiB of video RAM. If 0 or not specified, remap memory
|
remap 'n' MiB of video RAM. If 0 or not specified, remap memory
|
||||||
|
|
|
@ -0,0 +1,588 @@
|
||||||
|
Title : Kernel Probes (Kprobes)
|
||||||
|
Authors : Jim Keniston <jkenisto@us.ibm.com>
|
||||||
|
: Prasanna S Panchamukhi <prasanna@in.ibm.com>
|
||||||
|
|
||||||
|
CONTENTS
|
||||||
|
|
||||||
|
1. Concepts: Kprobes, Jprobes, Return Probes
|
||||||
|
2. Architectures Supported
|
||||||
|
3. Configuring Kprobes
|
||||||
|
4. API Reference
|
||||||
|
5. Kprobes Features and Limitations
|
||||||
|
6. Probe Overhead
|
||||||
|
7. TODO
|
||||||
|
8. Kprobes Example
|
||||||
|
9. Jprobes Example
|
||||||
|
10. Kretprobes Example
|
||||||
|
|
||||||
|
1. Concepts: Kprobes, Jprobes, Return Probes
|
||||||
|
|
||||||
|
Kprobes enables you to dynamically break into any kernel routine and
|
||||||
|
collect debugging and performance information non-disruptively. You
|
||||||
|
can trap at almost any kernel code address, specifying a handler
|
||||||
|
routine to be invoked when the breakpoint is hit.
|
||||||
|
|
||||||
|
There are currently three types of probes: kprobes, jprobes, and
|
||||||
|
kretprobes (also called return probes). A kprobe can be inserted
|
||||||
|
on virtually any instruction in the kernel. A jprobe is inserted at
|
||||||
|
the entry to a kernel function, and provides convenient access to the
|
||||||
|
function's arguments. A return probe fires when a specified function
|
||||||
|
returns.
|
||||||
|
|
||||||
|
In the typical case, Kprobes-based instrumentation is packaged as
|
||||||
|
a kernel module. The module's init function installs ("registers")
|
||||||
|
one or more probes, and the exit function unregisters them. A
|
||||||
|
registration function such as register_kprobe() specifies where
|
||||||
|
the probe is to be inserted and what handler is to be called when
|
||||||
|
the probe is hit.
|
||||||
|
|
||||||
|
The next three subsections explain how the different types of
|
||||||
|
probes work. They explain certain things that you'll need to
|
||||||
|
know in order to make the best use of Kprobes -- e.g., the
|
||||||
|
difference between a pre_handler and a post_handler, and how
|
||||||
|
to use the maxactive and nmissed fields of a kretprobe. But
|
||||||
|
if you're in a hurry to start using Kprobes, you can skip ahead
|
||||||
|
to section 2.
|
||||||
|
|
||||||
|
1.1 How Does a Kprobe Work?
|
||||||
|
|
||||||
|
When a kprobe is registered, Kprobes makes a copy of the probed
|
||||||
|
instruction and replaces the first byte(s) of the probed instruction
|
||||||
|
with a breakpoint instruction (e.g., int3 on i386 and x86_64).
|
||||||
|
|
||||||
|
When a CPU hits the breakpoint instruction, a trap occurs, the CPU's
|
||||||
|
registers are saved, and control passes to Kprobes via the
|
||||||
|
notifier_call_chain mechanism. Kprobes executes the "pre_handler"
|
||||||
|
associated with the kprobe, passing the handler the addresses of the
|
||||||
|
kprobe struct and the saved registers.
|
||||||
|
|
||||||
|
Next, Kprobes single-steps its copy of the probed instruction.
|
||||||
|
(It would be simpler to single-step the actual instruction in place,
|
||||||
|
but then Kprobes would have to temporarily remove the breakpoint
|
||||||
|
instruction. This would open a small time window when another CPU
|
||||||
|
could sail right past the probepoint.)
|
||||||
|
|
||||||
|
After the instruction is single-stepped, Kprobes executes the
|
||||||
|
"post_handler," if any, that is associated with the kprobe.
|
||||||
|
Execution then continues with the instruction following the probepoint.
|
||||||
|
|
||||||
|
1.2 How Does a Jprobe Work?
|
||||||
|
|
||||||
|
A jprobe is implemented using a kprobe that is placed on a function's
|
||||||
|
entry point. It employs a simple mirroring principle to allow
|
||||||
|
seamless access to the probed function's arguments. The jprobe
|
||||||
|
handler routine should have the same signature (arg list and return
|
||||||
|
type) as the function being probed, and must always end by calling
|
||||||
|
the Kprobes function jprobe_return().
|
||||||
|
|
||||||
|
Here's how it works. When the probe is hit, Kprobes makes a copy of
|
||||||
|
the saved registers and a generous portion of the stack (see below).
|
||||||
|
Kprobes then points the saved instruction pointer at the jprobe's
|
||||||
|
handler routine, and returns from the trap. As a result, control
|
||||||
|
passes to the handler, which is presented with the same register and
|
||||||
|
stack contents as the probed function. When it is done, the handler
|
||||||
|
calls jprobe_return(), which traps again to restore the original stack
|
||||||
|
contents and processor state and switch to the probed function.
|
||||||
|
|
||||||
|
By convention, the callee owns its arguments, so gcc may produce code
|
||||||
|
that unexpectedly modifies that portion of the stack. This is why
|
||||||
|
Kprobes saves a copy of the stack and restores it after the jprobe
|
||||||
|
handler has run. Up to MAX_STACK_SIZE bytes are copied -- e.g.,
|
||||||
|
64 bytes on i386.
|
||||||
|
|
||||||
|
Note that the probed function's args may be passed on the stack
|
||||||
|
or in registers (e.g., for x86_64 or for an i386 fastcall function).
|
||||||
|
The jprobe will work in either case, so long as the handler's
|
||||||
|
prototype matches that of the probed function.
|
||||||
|
|
||||||
|
1.3 How Does a Return Probe Work?
|
||||||
|
|
||||||
|
When you call register_kretprobe(), Kprobes establishes a kprobe at
|
||||||
|
the entry to the function. When the probed function is called and this
|
||||||
|
probe is hit, Kprobes saves a copy of the return address, and replaces
|
||||||
|
the return address with the address of a "trampoline." The trampoline
|
||||||
|
is an arbitrary piece of code -- typically just a nop instruction.
|
||||||
|
At boot time, Kprobes registers a kprobe at the trampoline.
|
||||||
|
|
||||||
|
When the probed function executes its return instruction, control
|
||||||
|
passes to the trampoline and that probe is hit. Kprobes' trampoline
|
||||||
|
handler calls the user-specified handler associated with the kretprobe,
|
||||||
|
then sets the saved instruction pointer to the saved return address,
|
||||||
|
and that's where execution resumes upon return from the trap.
|
||||||
|
|
||||||
|
While the probed function is executing, its return address is
|
||||||
|
stored in an object of type kretprobe_instance. Before calling
|
||||||
|
register_kretprobe(), the user sets the maxactive field of the
|
||||||
|
kretprobe struct to specify how many instances of the specified
|
||||||
|
function can be probed simultaneously. register_kretprobe()
|
||||||
|
pre-allocates the indicated number of kretprobe_instance objects.
|
||||||
|
|
||||||
|
For example, if the function is non-recursive and is called with a
|
||||||
|
spinlock held, maxactive = 1 should be enough. If the function is
|
||||||
|
non-recursive and can never relinquish the CPU (e.g., via a semaphore
|
||||||
|
or preemption), NR_CPUS should be enough. If maxactive <= 0, it is
|
||||||
|
set to a default value. If CONFIG_PREEMPT is enabled, the default
|
||||||
|
is max(10, 2*NR_CPUS). Otherwise, the default is NR_CPUS.
|
||||||
|
|
||||||
|
It's not a disaster if you set maxactive too low; you'll just miss
|
||||||
|
some probes. In the kretprobe struct, the nmissed field is set to
|
||||||
|
zero when the return probe is registered, and is incremented every
|
||||||
|
time the probed function is entered but there is no kretprobe_instance
|
||||||
|
object available for establishing the return probe.
|
||||||
|
|
||||||
|
2. Architectures Supported
|
||||||
|
|
||||||
|
Kprobes, jprobes, and return probes are implemented on the following
|
||||||
|
architectures:
|
||||||
|
|
||||||
|
- i386
|
||||||
|
- x86_64 (AMD-64, E64MT)
|
||||||
|
- ppc64
|
||||||
|
- ia64 (Support for probes on certain instruction types is still in progress.)
|
||||||
|
- sparc64 (Return probes not yet implemented.)
|
||||||
|
|
||||||
|
3. Configuring Kprobes
|
||||||
|
|
||||||
|
When configuring the kernel using make menuconfig/xconfig/oldconfig,
|
||||||
|
ensure that CONFIG_KPROBES is set to "y". Under "Kernel hacking",
|
||||||
|
look for "Kprobes". You may have to enable "Kernel debugging"
|
||||||
|
(CONFIG_DEBUG_KERNEL) before you can enable Kprobes.
|
||||||
|
|
||||||
|
You may also want to ensure that CONFIG_KALLSYMS and perhaps even
|
||||||
|
CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
|
||||||
|
is a handy, version-independent way to find a function's address.
|
||||||
|
|
||||||
|
If you need to insert a probe in the middle of a function, you may find
|
||||||
|
it useful to "Compile the kernel with debug info" (CONFIG_DEBUG_INFO),
|
||||||
|
so you can use "objdump -d -l vmlinux" to see the source-to-object
|
||||||
|
code mapping.
|
||||||
|
|
||||||
|
4. API Reference
|
||||||
|
|
||||||
|
The Kprobes API includes a "register" function and an "unregister"
|
||||||
|
function for each type of probe. Here are terse, mini-man-page
|
||||||
|
specifications for these functions and the associated probe handlers
|
||||||
|
that you'll write. See the latter half of this document for examples.
|
||||||
|
|
||||||
|
4.1 register_kprobe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
int register_kprobe(struct kprobe *kp);
|
||||||
|
|
||||||
|
Sets a breakpoint at the address kp->addr. When the breakpoint is
|
||||||
|
hit, Kprobes calls kp->pre_handler. After the probed instruction
|
||||||
|
is single-stepped, Kprobe calls kp->post_handler. If a fault
|
||||||
|
occurs during execution of kp->pre_handler or kp->post_handler,
|
||||||
|
or during single-stepping of the probed instruction, Kprobes calls
|
||||||
|
kp->fault_handler. Any or all handlers can be NULL.
|
||||||
|
|
||||||
|
register_kprobe() returns 0 on success, or a negative errno otherwise.
|
||||||
|
|
||||||
|
User's pre-handler (kp->pre_handler):
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
int pre_handler(struct kprobe *p, struct pt_regs *regs);
|
||||||
|
|
||||||
|
Called with p pointing to the kprobe associated with the breakpoint,
|
||||||
|
and regs pointing to the struct containing the registers saved when
|
||||||
|
the breakpoint was hit. Return 0 here unless you're a Kprobes geek.
|
||||||
|
|
||||||
|
User's post-handler (kp->post_handler):
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
void post_handler(struct kprobe *p, struct pt_regs *regs,
|
||||||
|
unsigned long flags);
|
||||||
|
|
||||||
|
p and regs are as described for the pre_handler. flags always seems
|
||||||
|
to be zero.
|
||||||
|
|
||||||
|
User's fault-handler (kp->fault_handler):
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
int fault_handler(struct kprobe *p, struct pt_regs *regs, int trapnr);
|
||||||
|
|
||||||
|
p and regs are as described for the pre_handler. trapnr is the
|
||||||
|
architecture-specific trap number associated with the fault (e.g.,
|
||||||
|
on i386, 13 for a general protection fault or 14 for a page fault).
|
||||||
|
Returns 1 if it successfully handled the exception.
|
||||||
|
|
||||||
|
4.2 register_jprobe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
int register_jprobe(struct jprobe *jp)
|
||||||
|
|
||||||
|
Sets a breakpoint at the address jp->kp.addr, which must be the address
|
||||||
|
of the first instruction of a function. When the breakpoint is hit,
|
||||||
|
Kprobes runs the handler whose address is jp->entry.
|
||||||
|
|
||||||
|
The handler should have the same arg list and return type as the probed
|
||||||
|
function; and just before it returns, it must call jprobe_return().
|
||||||
|
(The handler never actually returns, since jprobe_return() returns
|
||||||
|
control to Kprobes.) If the probed function is declared asmlinkage,
|
||||||
|
fastcall, or anything else that affects how args are passed, the
|
||||||
|
handler's declaration must match.
|
||||||
|
|
||||||
|
register_jprobe() returns 0 on success, or a negative errno otherwise.
|
||||||
|
|
||||||
|
4.3 register_kretprobe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
int register_kretprobe(struct kretprobe *rp);
|
||||||
|
|
||||||
|
Establishes a return probe for the function whose address is
|
||||||
|
rp->kp.addr. When that function returns, Kprobes calls rp->handler.
|
||||||
|
You must set rp->maxactive appropriately before you call
|
||||||
|
register_kretprobe(); see "How Does a Return Probe Work?" for details.
|
||||||
|
|
||||||
|
register_kretprobe() returns 0 on success, or a negative errno
|
||||||
|
otherwise.
|
||||||
|
|
||||||
|
User's return-probe handler (rp->handler):
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/ptrace.h>
|
||||||
|
int kretprobe_handler(struct kretprobe_instance *ri, struct pt_regs *regs);
|
||||||
|
|
||||||
|
regs is as described for kprobe.pre_handler. ri points to the
|
||||||
|
kretprobe_instance object, of which the following fields may be
|
||||||
|
of interest:
|
||||||
|
- ret_addr: the return address
|
||||||
|
- rp: points to the corresponding kretprobe object
|
||||||
|
- task: points to the corresponding task struct
|
||||||
|
The handler's return value is currently ignored.
|
||||||
|
|
||||||
|
4.4 unregister_*probe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
void unregister_kprobe(struct kprobe *kp);
|
||||||
|
void unregister_jprobe(struct jprobe *jp);
|
||||||
|
void unregister_kretprobe(struct kretprobe *rp);
|
||||||
|
|
||||||
|
Removes the specified probe. The unregister function can be called
|
||||||
|
at any time after the probe has been registered.
|
||||||
|
|
||||||
|
5. Kprobes Features and Limitations
|
||||||
|
|
||||||
|
As of Linux v2.6.12, Kprobes allows multiple probes at the same
|
||||||
|
address. Currently, however, there cannot be multiple jprobes on
|
||||||
|
the same function at the same time.
|
||||||
|
|
||||||
|
In general, you can install a probe anywhere in the kernel.
|
||||||
|
In particular, you can probe interrupt handlers. Known exceptions
|
||||||
|
are discussed in this section.
|
||||||
|
|
||||||
|
For obvious reasons, it's a bad idea to install a probe in
|
||||||
|
the code that implements Kprobes (mostly kernel/kprobes.c and
|
||||||
|
arch/*/kernel/kprobes.c). A patch in the v2.6.13 timeframe instructs
|
||||||
|
Kprobes to reject such requests.
|
||||||
|
|
||||||
|
If you install a probe in an inline-able function, Kprobes makes
|
||||||
|
no attempt to chase down all inline instances of the function and
|
||||||
|
install probes there. gcc may inline a function without being asked,
|
||||||
|
so keep this in mind if you're not seeing the probe hits you expect.
|
||||||
|
|
||||||
|
A probe handler can modify the environment of the probed function
|
||||||
|
-- e.g., by modifying kernel data structures, or by modifying the
|
||||||
|
contents of the pt_regs struct (which are restored to the registers
|
||||||
|
upon return from the breakpoint). So Kprobes can be used, for example,
|
||||||
|
to install a bug fix or to inject faults for testing. Kprobes, of
|
||||||
|
course, has no way to distinguish the deliberately injected faults
|
||||||
|
from the accidental ones. Don't drink and probe.
|
||||||
|
|
||||||
|
Kprobes makes no attempt to prevent probe handlers from stepping on
|
||||||
|
each other -- e.g., probing printk() and then calling printk() from a
|
||||||
|
probe handler. As of Linux v2.6.12, if a probe handler hits a probe,
|
||||||
|
that second probe's handlers won't be run in that instance.
|
||||||
|
|
||||||
|
In Linux v2.6.12 and previous versions, Kprobes' data structures are
|
||||||
|
protected by a single lock that is held during probe registration and
|
||||||
|
unregistration and while handlers are run. Thus, no two handlers
|
||||||
|
can run simultaneously. To improve scalability on SMP systems,
|
||||||
|
this restriction will probably be removed soon, in which case
|
||||||
|
multiple handlers (or multiple instances of the same handler) may
|
||||||
|
run concurrently on different CPUs. Code your handlers accordingly.
|
||||||
|
|
||||||
|
Kprobes does not use semaphores or allocate memory except during
|
||||||
|
registration and unregistration.
|
||||||
|
|
||||||
|
Probe handlers are run with preemption disabled. Depending on the
|
||||||
|
architecture, handlers may also run with interrupts disabled. In any
|
||||||
|
case, your handler should not yield the CPU (e.g., by attempting to
|
||||||
|
acquire a semaphore).
|
||||||
|
|
||||||
|
Since a return probe is implemented by replacing the return
|
||||||
|
address with the trampoline's address, stack backtraces and calls
|
||||||
|
to __builtin_return_address() will typically yield the trampoline's
|
||||||
|
address instead of the real return address for kretprobed functions.
|
||||||
|
(As far as we can tell, __builtin_return_address() is used only
|
||||||
|
for instrumentation and error reporting.)
|
||||||
|
|
||||||
|
If the number of times a function is called does not match the
|
||||||
|
number of times it returns, registering a return probe on that
|
||||||
|
function may produce undesirable results. We have the do_exit()
|
||||||
|
and do_execve() cases covered. do_fork() is not an issue. We're
|
||||||
|
unaware of other specific cases where this could be a problem.
|
||||||
|
|
||||||
|
6. Probe Overhead
|
||||||
|
|
||||||
|
On a typical CPU in use in 2005, a kprobe hit takes 0.5 to 1.0
|
||||||
|
microseconds to process. Specifically, a benchmark that hits the same
|
||||||
|
probepoint repeatedly, firing a simple handler each time, reports 1-2
|
||||||
|
million hits per second, depending on the architecture. A jprobe or
|
||||||
|
return-probe hit typically takes 50-75% longer than a kprobe hit.
|
||||||
|
When you have a return probe set on a function, adding a kprobe at
|
||||||
|
the entry to that function adds essentially no overhead.
|
||||||
|
|
||||||
|
Here are sample overhead figures (in usec) for different architectures.
|
||||||
|
k = kprobe; j = jprobe; r = return probe; kr = kprobe + return probe
|
||||||
|
on same function; jr = jprobe + return probe on same function
|
||||||
|
|
||||||
|
i386: Intel Pentium M, 1495 MHz, 2957.31 bogomips
|
||||||
|
k = 0.57 usec; j = 1.00; r = 0.92; kr = 0.99; jr = 1.40
|
||||||
|
|
||||||
|
x86_64: AMD Opteron 246, 1994 MHz, 3971.48 bogomips
|
||||||
|
k = 0.49 usec; j = 0.76; r = 0.80; kr = 0.82; jr = 1.07
|
||||||
|
|
||||||
|
ppc64: POWER5 (gr), 1656 MHz (SMT disabled, 1 virtual CPU per physical CPU)
|
||||||
|
k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
|
||||||
|
|
||||||
|
7. TODO
|
||||||
|
|
||||||
|
a. SystemTap (http://sourceware.org/systemtap): Work in progress
|
||||||
|
to provide a simplified programming interface for probe-based
|
||||||
|
instrumentation.
|
||||||
|
b. Improved SMP scalability: Currently, work is in progress to handle
|
||||||
|
multiple kprobes in parallel.
|
||||||
|
c. Kernel return probes for sparc64.
|
||||||
|
d. Support for other architectures.
|
||||||
|
e. User-space probes.
|
||||||
|
|
||||||
|
8. Kprobes Example
|
||||||
|
|
||||||
|
Here's a sample kernel module showing the use of kprobes to dump a
|
||||||
|
stack trace and selected i386 registers when do_fork() is called.
|
||||||
|
----- cut here -----
|
||||||
|
/*kprobe_example.c*/
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
|
||||||
|
/*For each probe you need to allocate a kprobe structure*/
|
||||||
|
static struct kprobe kp;
|
||||||
|
|
||||||
|
/*kprobe pre_handler: called just before the probed instruction is executed*/
|
||||||
|
int handler_pre(struct kprobe *p, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
printk("pre_handler: p->addr=0x%p, eip=%lx, eflags=0x%lx\n",
|
||||||
|
p->addr, regs->eip, regs->eflags);
|
||||||
|
dump_stack();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*kprobe post_handler: called after the probed instruction is executed*/
|
||||||
|
void handler_post(struct kprobe *p, struct pt_regs *regs, unsigned long flags)
|
||||||
|
{
|
||||||
|
printk("post_handler: p->addr=0x%p, eflags=0x%lx\n",
|
||||||
|
p->addr, regs->eflags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fault_handler: this is called if an exception is generated for any
|
||||||
|
* instruction within the pre- or post-handler, or when Kprobes
|
||||||
|
* single-steps the probed instruction.
|
||||||
|
*/
|
||||||
|
int handler_fault(struct kprobe *p, struct pt_regs *regs, int trapnr)
|
||||||
|
{
|
||||||
|
printk("fault_handler: p->addr=0x%p, trap #%dn",
|
||||||
|
p->addr, trapnr);
|
||||||
|
/* Return 0 because we don't handle the fault. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_module(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
kp.pre_handler = handler_pre;
|
||||||
|
kp.post_handler = handler_post;
|
||||||
|
kp.fault_handler = handler_fault;
|
||||||
|
kp.addr = (kprobe_opcode_t*) kallsyms_lookup_name("do_fork");
|
||||||
|
/* register the kprobe now */
|
||||||
|
if (!kp.addr) {
|
||||||
|
printk("Couldn't find %s to plant kprobe\n", "do_fork");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((ret = register_kprobe(&kp) < 0)) {
|
||||||
|
printk("register_kprobe failed, returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printk("kprobe registered\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanup_module(void)
|
||||||
|
{
|
||||||
|
unregister_kprobe(&kp);
|
||||||
|
printk("kprobe unregistered\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
----- cut here -----
|
||||||
|
|
||||||
|
You can build the kernel module, kprobe-example.ko, using the following
|
||||||
|
Makefile:
|
||||||
|
----- cut here -----
|
||||||
|
obj-m := kprobe-example.o
|
||||||
|
KDIR := /lib/modules/$(shell uname -r)/build
|
||||||
|
PWD := $(shell pwd)
|
||||||
|
default:
|
||||||
|
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
|
||||||
|
clean:
|
||||||
|
rm -f *.mod.c *.ko *.o
|
||||||
|
----- cut here -----
|
||||||
|
|
||||||
|
$ make
|
||||||
|
$ su -
|
||||||
|
...
|
||||||
|
# insmod kprobe-example.ko
|
||||||
|
|
||||||
|
You will see the trace data in /var/log/messages and on the console
|
||||||
|
whenever do_fork() is invoked to create a new process.
|
||||||
|
|
||||||
|
9. Jprobes Example
|
||||||
|
|
||||||
|
Here's a sample kernel module showing the use of jprobes to dump
|
||||||
|
the arguments of do_fork().
|
||||||
|
----- cut here -----
|
||||||
|
/*jprobe-example.c */
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/fs.h>
|
||||||
|
#include <linux/uio.h>
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Jumper probe for do_fork.
|
||||||
|
* Mirror principle enables access to arguments of the probed routine
|
||||||
|
* from the probe handler.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Proxy routine having the same arguments as actual do_fork() routine */
|
||||||
|
long jdo_fork(unsigned long clone_flags, unsigned long stack_start,
|
||||||
|
struct pt_regs *regs, unsigned long stack_size,
|
||||||
|
int __user * parent_tidptr, int __user * child_tidptr)
|
||||||
|
{
|
||||||
|
printk("jprobe: clone_flags=0x%lx, stack_size=0x%lx, regs=0x%p\n",
|
||||||
|
clone_flags, stack_size, regs);
|
||||||
|
/* Always end with a call to jprobe_return(). */
|
||||||
|
jprobe_return();
|
||||||
|
/*NOTREACHED*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct jprobe my_jprobe = {
|
||||||
|
.entry = (kprobe_opcode_t *) jdo_fork
|
||||||
|
};
|
||||||
|
|
||||||
|
int init_module(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
my_jprobe.kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork");
|
||||||
|
if (!my_jprobe.kp.addr) {
|
||||||
|
printk("Couldn't find %s to plant jprobe\n", "do_fork");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = register_jprobe(&my_jprobe)) <0) {
|
||||||
|
printk("register_jprobe failed, returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printk("Planted jprobe at %p, handler addr %p\n",
|
||||||
|
my_jprobe.kp.addr, my_jprobe.entry);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanup_module(void)
|
||||||
|
{
|
||||||
|
unregister_jprobe(&my_jprobe);
|
||||||
|
printk("jprobe unregistered\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
----- cut here -----
|
||||||
|
|
||||||
|
Build and insert the kernel module as shown in the above kprobe
|
||||||
|
example. You will see the trace data in /var/log/messages and on
|
||||||
|
the console whenever do_fork() is invoked to create a new process.
|
||||||
|
(Some messages may be suppressed if syslogd is configured to
|
||||||
|
eliminate duplicate messages.)
|
||||||
|
|
||||||
|
10. Kretprobes Example
|
||||||
|
|
||||||
|
Here's a sample kernel module showing the use of return probes to
|
||||||
|
report failed calls to sys_open().
|
||||||
|
----- cut here -----
|
||||||
|
/*kretprobe-example.c*/
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
|
||||||
|
static const char *probed_func = "sys_open";
|
||||||
|
|
||||||
|
/* Return-probe handler: If the probed function fails, log the return value. */
|
||||||
|
static int ret_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
// Substitute the appropriate register name for your architecture --
|
||||||
|
// e.g., regs->rax for x86_64, regs->gpr[3] for ppc64.
|
||||||
|
int retval = (int) regs->eax;
|
||||||
|
if (retval < 0) {
|
||||||
|
printk("%s returns %d\n", probed_func, retval);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct kretprobe my_kretprobe = {
|
||||||
|
.handler = ret_handler,
|
||||||
|
/* Probe up to 20 instances concurrently. */
|
||||||
|
.maxactive = 20
|
||||||
|
};
|
||||||
|
|
||||||
|
int init_module(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
my_kretprobe.kp.addr =
|
||||||
|
(kprobe_opcode_t *) kallsyms_lookup_name(probed_func);
|
||||||
|
if (!my_kretprobe.kp.addr) {
|
||||||
|
printk("Couldn't find %s to plant return probe\n", probed_func);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if ((ret = register_kretprobe(&my_kretprobe)) < 0) {
|
||||||
|
printk("register_kretprobe failed, returned %d\n", ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printk("Planted return probe at %p\n", my_kretprobe.kp.addr);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cleanup_module(void)
|
||||||
|
{
|
||||||
|
unregister_kretprobe(&my_kretprobe);
|
||||||
|
printk("kretprobe unregistered\n");
|
||||||
|
/* nmissed > 0 suggests that maxactive was set too low. */
|
||||||
|
printk("Missed probing %d instances of %s\n",
|
||||||
|
my_kretprobe.nmissed, probed_func);
|
||||||
|
}
|
||||||
|
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
----- cut here -----
|
||||||
|
|
||||||
|
Build and insert the kernel module as shown in the above kprobe
|
||||||
|
example. You will see the trace data in /var/log/messages and on the
|
||||||
|
console whenever sys_open() returns a negative value. (Some messages
|
||||||
|
may be suppressed if syslogd is configured to eliminate duplicate
|
||||||
|
messages.)
|
||||||
|
|
||||||
|
For additional information on Kprobes, refer to the following URLs:
|
||||||
|
http://www-106.ibm.com/developerworks/library/l-kprobes.html?ca=dgr-lnxw42Kprobe
|
||||||
|
http://www.redhat.com/magazine/005mar05/features/kprobes/
|
File diff suppressed because it is too large
Load Diff
|
@ -102,7 +102,7 @@ Here is the list of words, from left to right:
|
||||||
- URB Status. This field makes no sense for submissions, but is present
|
- URB Status. This field makes no sense for submissions, but is present
|
||||||
to help scripts with parsing. In error case, it contains the error code.
|
to help scripts with parsing. In error case, it contains the error code.
|
||||||
In case of a setup packet, it contains a Setup Tag. If scripts read a number
|
In case of a setup packet, it contains a Setup Tag. If scripts read a number
|
||||||
in this field, the proceed to read Data Length. Otherwise, they read
|
in this field, they proceed to read Data Length. Otherwise, they read
|
||||||
the setup packet before reading the Data Length.
|
the setup packet before reading the Data Length.
|
||||||
- Setup packet, if present, consists of 5 words: one of each for bmRequestType,
|
- Setup packet, if present, consists of 5 words: one of each for bmRequestType,
|
||||||
bRequest, wValue, wIndex, wLength, as specified by the USB Specification 2.0.
|
bRequest, wValue, wIndex, wLength, as specified by the USB Specification 2.0.
|
||||||
|
|
|
@ -29,3 +29,4 @@ card=27 - PixelView PlayTV Ultra Pro (Stereo)
|
||||||
card=28 - DViCO FusionHDTV 3 Gold-T
|
card=28 - DViCO FusionHDTV 3 Gold-T
|
||||||
card=29 - ADS Tech Instant TV DVB-T PCI
|
card=29 - ADS Tech Instant TV DVB-T PCI
|
||||||
card=30 - TerraTec Cinergy 1400 DVB-T
|
card=30 - TerraTec Cinergy 1400 DVB-T
|
||||||
|
card=31 - DViCO FusionHDTV 5 Gold
|
||||||
|
|
|
@ -62,3 +62,5 @@ tuner=60 - Thomson DDT 7611 (ATSC/NTSC)
|
||||||
tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
|
tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
|
||||||
tuner=62 - Philips TEA5767HN FM Radio
|
tuner=62 - Philips TEA5767HN FM Radio
|
||||||
tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
|
tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
|
||||||
|
tuner=64 - LG TDVS-H062F/TUA6034
|
||||||
|
tuner=65 - Ymec TVF66T5-B/DFF
|
||||||
|
|
|
@ -44,6 +44,9 @@ bttv.o
|
||||||
push used by bttv. bttv will disable overlay
|
push used by bttv. bttv will disable overlay
|
||||||
by default on this hardware to avoid crashes.
|
by default on this hardware to avoid crashes.
|
||||||
With this insmod option you can override this.
|
With this insmod option you can override this.
|
||||||
|
no_overlay=1 Disable overlay. It should be used by broken
|
||||||
|
hardware that doesn't support PCI2PCI direct
|
||||||
|
transfers.
|
||||||
automute=0/1 Automatically mutes the sound if there is
|
automute=0/1 Automatically mutes the sound if there is
|
||||||
no TV signal, on by default. You might try
|
no TV signal, on by default. You might try
|
||||||
to disable this if you have bad input signal
|
to disable this if you have bad input signal
|
||||||
|
|
|
@ -6,6 +6,11 @@ only the AMD64 specific ones are listed here.
|
||||||
Machine check
|
Machine check
|
||||||
|
|
||||||
mce=off disable machine check
|
mce=off disable machine check
|
||||||
|
mce=bootlog Enable logging of machine checks left over from booting.
|
||||||
|
Disabled by default because some BIOS leave bogus ones.
|
||||||
|
If your BIOS doesn't do that it's a good idea to enable though
|
||||||
|
to make sure you log even machine check events that result
|
||||||
|
in a reboot.
|
||||||
|
|
||||||
nomce (for compatibility with i386): same as mce=off
|
nomce (for compatibility with i386): same as mce=off
|
||||||
|
|
||||||
|
|
10
MAINTAINERS
10
MAINTAINERS
|
@ -1521,6 +1521,12 @@ P: Zach Brown
|
||||||
M: zab@zabbo.net
|
M: zab@zabbo.net
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
|
||||||
|
MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
|
||||||
|
P: Michael Kerrisk
|
||||||
|
M: mtk-manpages@gmx.net
|
||||||
|
W: ftp://ftp.kernel.org/pub/linux/docs/manpages
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
MARVELL MV64340 ETHERNET DRIVER
|
MARVELL MV64340 ETHERNET DRIVER
|
||||||
P: Manish Lachwani
|
P: Manish Lachwani
|
||||||
M: Manish_Lachwani@pmc-sierra.com
|
M: Manish_Lachwani@pmc-sierra.com
|
||||||
|
@ -1652,7 +1658,7 @@ M: kuznet@ms2.inr.ac.ru
|
||||||
P: Pekka Savola (ipv6)
|
P: Pekka Savola (ipv6)
|
||||||
M: pekkas@netcore.fi
|
M: pekkas@netcore.fi
|
||||||
P: James Morris
|
P: James Morris
|
||||||
M: jmorris@redhat.com
|
M: jmorris@namei.org
|
||||||
P: Hideaki YOSHIFUJI
|
P: Hideaki YOSHIFUJI
|
||||||
M: yoshfuji@linux-ipv6.org
|
M: yoshfuji@linux-ipv6.org
|
||||||
P: Patrick McHardy
|
P: Patrick McHardy
|
||||||
|
@ -2041,7 +2047,7 @@ SELINUX SECURITY MODULE
|
||||||
P: Stephen Smalley
|
P: Stephen Smalley
|
||||||
M: sds@epoch.ncsc.mil
|
M: sds@epoch.ncsc.mil
|
||||||
P: James Morris
|
P: James Morris
|
||||||
M: jmorris@redhat.com
|
M: jmorris@namei.org
|
||||||
L: linux-kernel@vger.kernel.org (kernel issues)
|
L: linux-kernel@vger.kernel.org (kernel issues)
|
||||||
L: selinux@tycho.nsa.gov (general discussion)
|
L: selinux@tycho.nsa.gov (general discussion)
|
||||||
W: http://www.nsa.gov/selinux
|
W: http://www.nsa.gov/selinux
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 13
|
SUBLEVEL = 13
|
||||||
EXTRAVERSION =-rc4
|
EXTRAVERSION =-rc6
|
||||||
NAME=Woozy Numbat
|
NAME=Woozy Numbat
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -41,18 +41,19 @@ summary from [1.]>" for easy identification by the developers
|
||||||
[2.] Full description of the problem/report:
|
[2.] Full description of the problem/report:
|
||||||
[3.] Keywords (i.e., modules, networking, kernel):
|
[3.] Keywords (i.e., modules, networking, kernel):
|
||||||
[4.] Kernel version (from /proc/version):
|
[4.] Kernel version (from /proc/version):
|
||||||
[5.] Output of Oops.. message (if applicable) with symbolic information
|
[5.] Most recent kernel version which did not have the bug:
|
||||||
|
[6.] Output of Oops.. message (if applicable) with symbolic information
|
||||||
resolved (see Documentation/oops-tracing.txt)
|
resolved (see Documentation/oops-tracing.txt)
|
||||||
[6.] A small shell script or example program which triggers the
|
[7.] A small shell script or example program which triggers the
|
||||||
problem (if possible)
|
problem (if possible)
|
||||||
[7.] Environment
|
[8.] Environment
|
||||||
[7.1.] Software (add the output of the ver_linux script here)
|
[8.1.] Software (add the output of the ver_linux script here)
|
||||||
[7.2.] Processor information (from /proc/cpuinfo):
|
[8.2.] Processor information (from /proc/cpuinfo):
|
||||||
[7.3.] Module information (from /proc/modules):
|
[8.3.] Module information (from /proc/modules):
|
||||||
[7.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
|
[8.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
|
||||||
[7.5.] PCI information ('lspci -vvv' as root)
|
[8.5.] PCI information ('lspci -vvv' as root)
|
||||||
[7.6.] SCSI information (from /proc/scsi/scsi)
|
[8.6.] SCSI information (from /proc/scsi/scsi)
|
||||||
[7.7.] Other information that might be relevant to the problem
|
[8.7.] Other information that might be relevant to the problem
|
||||||
(please look in /proc and include all information that you
|
(please look in /proc and include all information that you
|
||||||
think to be relevant):
|
think to be relevant):
|
||||||
[X.] Other notes, patches, fixes, workarounds:
|
[X.] Other notes, patches, fixes, workarounds:
|
||||||
|
|
|
@ -350,8 +350,24 @@ pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
|
||||||
region->end = res->end - offset;
|
region->end = res->end - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
|
||||||
|
struct pci_bus_region *region)
|
||||||
|
{
|
||||||
|
struct pci_controller *hose = (struct pci_controller *)dev->sysdata;
|
||||||
|
unsigned long offset = 0;
|
||||||
|
|
||||||
|
if (res->flags & IORESOURCE_IO)
|
||||||
|
offset = hose->io_space->start;
|
||||||
|
else if (res->flags & IORESOURCE_MEM)
|
||||||
|
offset = hose->mem_space->start;
|
||||||
|
|
||||||
|
res->start = region->start + offset;
|
||||||
|
res->end = region->end + offset;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG
|
#ifdef CONFIG_HOTPLUG
|
||||||
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
||||||
|
EXPORT_SYMBOL(pcibios_bus_to_resource);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -447,9 +447,26 @@ pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
|
||||||
region->end = res->end - offset;
|
region->end = res->end - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __devinit
|
||||||
|
pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
|
||||||
|
struct pci_bus_region *region)
|
||||||
|
{
|
||||||
|
struct pci_sys_data *root = dev->sysdata;
|
||||||
|
unsigned long offset = 0;
|
||||||
|
|
||||||
|
if (res->flags & IORESOURCE_IO)
|
||||||
|
offset = root->io_offset;
|
||||||
|
if (res->flags & IORESOURCE_MEM)
|
||||||
|
offset = root->mem_offset;
|
||||||
|
|
||||||
|
res->start = region->start + offset;
|
||||||
|
res->end = region->end + offset;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG
|
#ifdef CONFIG_HOTPLUG
|
||||||
EXPORT_SYMBOL(pcibios_fixup_bus);
|
EXPORT_SYMBOL(pcibios_fixup_bus);
|
||||||
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
||||||
|
EXPORT_SYMBOL(pcibios_bus_to_resource);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -61,7 +61,7 @@ static struct plat_serial8250_port coyote_uart_data[] = {
|
||||||
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
||||||
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
||||||
.irq = IRQ_IXP4XX_UART2,
|
.irq = IRQ_IXP4XX_UART2,
|
||||||
.flags = UPF_BOOT_AUTOCONF,
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||||
.iotype = UPIO_MEM,
|
.iotype = UPIO_MEM,
|
||||||
.regshift = 2,
|
.regshift = 2,
|
||||||
.uartclk = IXP4XX_UART_XTAL,
|
.uartclk = IXP4XX_UART_XTAL,
|
||||||
|
|
|
@ -83,7 +83,7 @@ static struct plat_serial8250_port gtwx5715_uart_platform_data[] = {
|
||||||
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
||||||
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
||||||
.irq = IRQ_IXP4XX_UART2,
|
.irq = IRQ_IXP4XX_UART2,
|
||||||
.flags = UPF_BOOT_AUTOCONF,
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||||
.iotype = UPIO_MEM,
|
.iotype = UPIO_MEM,
|
||||||
.regshift = 2,
|
.regshift = 2,
|
||||||
.uartclk = IXP4XX_UART_XTAL,
|
.uartclk = IXP4XX_UART_XTAL,
|
||||||
|
|
|
@ -82,7 +82,7 @@ static struct plat_serial8250_port ixdp425_uart_data[] = {
|
||||||
.mapbase = IXP4XX_UART1_BASE_PHYS,
|
.mapbase = IXP4XX_UART1_BASE_PHYS,
|
||||||
.membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
|
.membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
|
||||||
.irq = IRQ_IXP4XX_UART1,
|
.irq = IRQ_IXP4XX_UART1,
|
||||||
.flags = UPF_BOOT_AUTOCONF,
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||||
.iotype = UPIO_MEM,
|
.iotype = UPIO_MEM,
|
||||||
.regshift = 2,
|
.regshift = 2,
|
||||||
.uartclk = IXP4XX_UART_XTAL,
|
.uartclk = IXP4XX_UART_XTAL,
|
||||||
|
@ -91,7 +91,7 @@ static struct plat_serial8250_port ixdp425_uart_data[] = {
|
||||||
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
.mapbase = IXP4XX_UART2_BASE_PHYS,
|
||||||
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
|
||||||
.irq = IRQ_IXP4XX_UART1,
|
.irq = IRQ_IXP4XX_UART1,
|
||||||
.flags = UPF_BOOT_AUTOCONF,
|
.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
|
||||||
.iotype = UPIO_MEM,
|
.iotype = UPIO_MEM,
|
||||||
.regshift = 2,
|
.regshift = 2,
|
||||||
.uartclk = IXP4XX_UART_XTAL,
|
.uartclk = IXP4XX_UART_XTAL,
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
* 28-Jun-2005 BJD Moved pm functionality out to common code
|
* 28-Jun-2005 BJD Moved pm functionality out to common code
|
||||||
* 17-Jul-2005 BJD Changed to platform device for SuperIO 16550s
|
* 17-Jul-2005 BJD Changed to platform device for SuperIO 16550s
|
||||||
* 25-Jul-2005 BJD Removed ASIX static mappings
|
* 25-Jul-2005 BJD Removed ASIX static mappings
|
||||||
|
* 27-Jul-2005 BJD Ensure maximum frequency of i2c bus
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
@ -60,6 +61,7 @@
|
||||||
#include <asm/arch/regs-mem.h>
|
#include <asm/arch/regs-mem.h>
|
||||||
#include <asm/arch/regs-lcd.h>
|
#include <asm/arch/regs-lcd.h>
|
||||||
#include <asm/arch/nand.h>
|
#include <asm/arch/nand.h>
|
||||||
|
#include <asm/arch/iic.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
|
@ -304,7 +306,7 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct s3c2410_platform_nand bast_nand_info = {
|
static struct s3c2410_platform_nand bast_nand_info = {
|
||||||
.tacls = 80,
|
.tacls = 40,
|
||||||
.twrph0 = 80,
|
.twrph0 = 80,
|
||||||
.twrph1 = 80,
|
.twrph1 = 80,
|
||||||
.nr_sets = ARRAY_SIZE(bast_nand_sets),
|
.nr_sets = ARRAY_SIZE(bast_nand_sets),
|
||||||
|
@ -385,6 +387,17 @@ static struct platform_device bast_sio = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* we have devices on the bus which cannot work much over the
|
||||||
|
* standard 100KHz i2c bus frequency
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct s3c2410_platform_i2c bast_i2c_info = {
|
||||||
|
.flags = 0,
|
||||||
|
.slave_addr = 0x10,
|
||||||
|
.bus_freq = 100*1000,
|
||||||
|
.max_freq = 130*1000,
|
||||||
|
};
|
||||||
|
|
||||||
/* Standard BAST devices */
|
/* Standard BAST devices */
|
||||||
|
|
||||||
static struct platform_device *bast_devices[] __initdata = {
|
static struct platform_device *bast_devices[] __initdata = {
|
||||||
|
@ -431,6 +444,7 @@ void __init bast_map_io(void)
|
||||||
s3c24xx_uclk.parent = &s3c24xx_clkout1;
|
s3c24xx_uclk.parent = &s3c24xx_clkout1;
|
||||||
|
|
||||||
s3c_device_nand.dev.platform_data = &bast_nand_info;
|
s3c_device_nand.dev.platform_data = &bast_nand_info;
|
||||||
|
s3c_device_i2c.dev.platform_data = &bast_i2c_info;
|
||||||
|
|
||||||
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
|
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
|
||||||
s3c24xx_init_clocks(0);
|
s3c24xx_init_clocks(0);
|
||||||
|
|
|
@ -97,6 +97,7 @@ static void __init jornada720_map_io(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(JORNADA720, "HP Jornada 720")
|
MACHINE_START(JORNADA720, "HP Jornada 720")
|
||||||
|
/* Maintainer: Michael Gernoth <michael@gernoth.net> */
|
||||||
.phys_ram = 0xc0000000,
|
.phys_ram = 0xc0000000,
|
||||||
.phys_io = 0x80000000,
|
.phys_io = 0x80000000,
|
||||||
.io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
|
.io_pg_offst = ((0xf8000000) >> 18) & 0xfffc,
|
||||||
|
|
|
@ -238,9 +238,9 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle the "normal" case first
|
* Handle the "normal" case first - VM_FAULT_MAJOR / VM_FAULT_MINOR
|
||||||
*/
|
*/
|
||||||
if (fault > 0)
|
if (fault >= VM_FAULT_MINOR)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -261,7 +261,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
do_exit(SIGKILL);
|
do_exit(SIGKILL);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
/*
|
/*
|
||||||
* We had some memory, but were unable to
|
* We had some memory, but were unable to
|
||||||
* successfully fix up this page fault.
|
* successfully fix up this page fault.
|
||||||
|
|
|
@ -370,142 +370,6 @@ ENTRY(cpu_xscale_dcache_clean_area)
|
||||||
bhi 1b
|
bhi 1b
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
/* ================================ CACHE LOCKING============================
|
|
||||||
*
|
|
||||||
* The XScale MicroArchitecture implements support for locking entries into
|
|
||||||
* the data and instruction cache. The following functions implement the core
|
|
||||||
* low level instructions needed to accomplish the locking. The developer's
|
|
||||||
* manual states that the code that performs the locking must be in non-cached
|
|
||||||
* memory. To accomplish this, the code in xscale-cache-lock.c copies the
|
|
||||||
* following functions from the cache into a non-cached memory region that
|
|
||||||
* is allocated through consistent_alloc().
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.align 5
|
|
||||||
/*
|
|
||||||
* xscale_icache_lock
|
|
||||||
*
|
|
||||||
* r0: starting address to lock
|
|
||||||
* r1: end address to lock
|
|
||||||
*/
|
|
||||||
ENTRY(xscale_icache_lock)
|
|
||||||
|
|
||||||
iLockLoop:
|
|
||||||
bic r0, r0, #CACHELINESIZE - 1
|
|
||||||
mcr p15, 0, r0, c9, c1, 0 @ lock into cache
|
|
||||||
cmp r0, r1 @ are we done?
|
|
||||||
add r0, r0, #CACHELINESIZE @ advance to next cache line
|
|
||||||
bls iLockLoop
|
|
||||||
mov pc, lr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* xscale_icache_unlock
|
|
||||||
*/
|
|
||||||
ENTRY(xscale_icache_unlock)
|
|
||||||
mcr p15, 0, r0, c9, c1, 1 @ Unlock icache
|
|
||||||
mov pc, lr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* xscale_dcache_lock
|
|
||||||
*
|
|
||||||
* r0: starting address to lock
|
|
||||||
* r1: end address to lock
|
|
||||||
*/
|
|
||||||
ENTRY(xscale_dcache_lock)
|
|
||||||
mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer
|
|
||||||
mov r2, #1
|
|
||||||
mcr p15, 0, r2, c9, c2, 0 @ Put dcache in lock mode
|
|
||||||
cpwait ip @ Wait for completion
|
|
||||||
|
|
||||||
mrs r2, cpsr
|
|
||||||
orr r3, r2, #PSR_F_BIT | PSR_I_BIT
|
|
||||||
dLockLoop:
|
|
||||||
msr cpsr_c, r3
|
|
||||||
mcr p15, 0, r0, c7, c10, 1 @ Write back line if it is dirty
|
|
||||||
mcr p15, 0, r0, c7, c6, 1 @ Flush/invalidate line
|
|
||||||
msr cpsr_c, r2
|
|
||||||
ldr ip, [r0], #CACHELINESIZE @ Preload 32 bytes into cache from
|
|
||||||
@ location [r0]. Post-increment
|
|
||||||
@ r3 to next cache line
|
|
||||||
cmp r0, r1 @ Are we done?
|
|
||||||
bls dLockLoop
|
|
||||||
|
|
||||||
mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer
|
|
||||||
mov r2, #0
|
|
||||||
mcr p15, 0, r2, c9, c2, 0 @ Get out of lock mode
|
|
||||||
cpwait_ret lr, ip
|
|
||||||
|
|
||||||
/*
|
|
||||||
* xscale_dcache_unlock
|
|
||||||
*/
|
|
||||||
ENTRY(xscale_dcache_unlock)
|
|
||||||
mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer
|
|
||||||
mcr p15, 0, ip, c9, c2, 1 @ Unlock cache
|
|
||||||
mov pc, lr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Needed to determine the length of the code that needs to be copied.
|
|
||||||
*/
|
|
||||||
.align 5
|
|
||||||
ENTRY(xscale_cache_dummy)
|
|
||||||
mov pc, lr
|
|
||||||
|
|
||||||
/* ================================ TLB LOCKING==============================
|
|
||||||
*
|
|
||||||
* The XScale MicroArchitecture implements support for locking entries into
|
|
||||||
* the Instruction and Data TLBs. The following functions provide the
|
|
||||||
* low level support for supporting these under Linux. xscale-lock.c
|
|
||||||
* implements some higher level management code. Most of the following
|
|
||||||
* is taken straight out of the Developer's Manual.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lock I-TLB entry
|
|
||||||
*
|
|
||||||
* r0: Virtual address to translate and lock
|
|
||||||
*/
|
|
||||||
.align 5
|
|
||||||
ENTRY(xscale_itlb_lock)
|
|
||||||
mrs r2, cpsr
|
|
||||||
orr r3, r2, #PSR_F_BIT | PSR_I_BIT
|
|
||||||
msr cpsr_c, r3 @ Disable interrupts
|
|
||||||
mcr p15, 0, r0, c8, c5, 1 @ Invalidate I-TLB entry
|
|
||||||
mcr p15, 0, r0, c10, c4, 0 @ Translate and lock
|
|
||||||
msr cpsr_c, r2 @ Restore interrupts
|
|
||||||
cpwait_ret lr, ip
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lock D-TLB entry
|
|
||||||
*
|
|
||||||
* r0: Virtual address to translate and lock
|
|
||||||
*/
|
|
||||||
.align 5
|
|
||||||
ENTRY(xscale_dtlb_lock)
|
|
||||||
mrs r2, cpsr
|
|
||||||
orr r3, r2, #PSR_F_BIT | PSR_I_BIT
|
|
||||||
msr cpsr_c, r3 @ Disable interrupts
|
|
||||||
mcr p15, 0, r0, c8, c6, 1 @ Invalidate D-TLB entry
|
|
||||||
mcr p15, 0, r0, c10, c8, 0 @ Translate and lock
|
|
||||||
msr cpsr_c, r2 @ Restore interrupts
|
|
||||||
cpwait_ret lr, ip
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Unlock all I-TLB entries
|
|
||||||
*/
|
|
||||||
.align 5
|
|
||||||
ENTRY(xscale_itlb_unlock)
|
|
||||||
mcr p15, 0, ip, c10, c4, 1 @ Unlock I-TLB
|
|
||||||
mcr p15, 0, ip, c8, c5, 0 @ Invalidate I-TLB
|
|
||||||
cpwait_ret lr, ip
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Unlock all D-TLB entries
|
|
||||||
*/
|
|
||||||
ENTRY(xscale_dtlb_unlock)
|
|
||||||
mcr p15, 0, ip, c10, c8, 1 @ Unlock D-TBL
|
|
||||||
mcr p15, 0, ip, c8, c6, 0 @ Invalidate D-TLB
|
|
||||||
cpwait_ret lr, ip
|
|
||||||
|
|
||||||
/* =============================== PageTable ============================== */
|
/* =============================== PageTable ============================== */
|
||||||
|
|
||||||
#define PTE_CACHE_WRITE_ALLOCATE 0
|
#define PTE_CACHE_WRITE_ALLOCATE 0
|
||||||
|
|
|
@ -40,17 +40,17 @@ float64 float64_arccos(float64 rFm);
|
||||||
float64 float64_pow(float64 rFn, float64 rFm);
|
float64 float64_pow(float64 rFn, float64 rFm);
|
||||||
float64 float64_pol(float64 rFn, float64 rFm);
|
float64 float64_pol(float64 rFn, float64 rFm);
|
||||||
|
|
||||||
static float64 float64_rsf(float64 rFn, float64 rFm)
|
static float64 float64_rsf(struct roundingData *roundData, float64 rFn, float64 rFm)
|
||||||
{
|
{
|
||||||
return float64_sub(rFm, rFn);
|
return float64_sub(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float64 float64_rdv(float64 rFn, float64 rFm)
|
static float64 float64_rdv(struct roundingData *roundData, float64 rFn, float64 rFm)
|
||||||
{
|
{
|
||||||
return float64_div(rFm, rFn);
|
return float64_div(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float64 (*const dyadic_double[16])(float64 rFn, float64 rFm) = {
|
static float64 (*const dyadic_double[16])(struct roundingData*, float64 rFn, float64 rFm) = {
|
||||||
[ADF_CODE >> 20] = float64_add,
|
[ADF_CODE >> 20] = float64_add,
|
||||||
[MUF_CODE >> 20] = float64_mul,
|
[MUF_CODE >> 20] = float64_mul,
|
||||||
[SUF_CODE >> 20] = float64_sub,
|
[SUF_CODE >> 20] = float64_sub,
|
||||||
|
@ -65,12 +65,12 @@ static float64 (*const dyadic_double[16])(float64 rFn, float64 rFm) = {
|
||||||
[FRD_CODE >> 20] = float64_rdv,
|
[FRD_CODE >> 20] = float64_rdv,
|
||||||
};
|
};
|
||||||
|
|
||||||
static float64 float64_mvf(float64 rFm)
|
static float64 float64_mvf(struct roundingData *roundData,float64 rFm)
|
||||||
{
|
{
|
||||||
return rFm;
|
return rFm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float64 float64_mnf(float64 rFm)
|
static float64 float64_mnf(struct roundingData *roundData,float64 rFm)
|
||||||
{
|
{
|
||||||
union float64_components u;
|
union float64_components u;
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ static float64 float64_mnf(float64 rFm)
|
||||||
return u.f64;
|
return u.f64;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float64 float64_abs(float64 rFm)
|
static float64 float64_abs(struct roundingData *roundData,float64 rFm)
|
||||||
{
|
{
|
||||||
union float64_components u;
|
union float64_components u;
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ static float64 float64_abs(float64 rFm)
|
||||||
return u.f64;
|
return u.f64;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float64 (*const monadic_double[16])(float64 rFm) = {
|
static float64 (*const monadic_double[16])(struct roundingData *, float64 rFm) = {
|
||||||
[MVF_CODE >> 20] = float64_mvf,
|
[MVF_CODE >> 20] = float64_mvf,
|
||||||
[MNF_CODE >> 20] = float64_mnf,
|
[MNF_CODE >> 20] = float64_mnf,
|
||||||
[ABS_CODE >> 20] = float64_abs,
|
[ABS_CODE >> 20] = float64_abs,
|
||||||
|
@ -108,7 +108,7 @@ static float64 (*const monadic_double[16])(float64 rFm) = {
|
||||||
[NRM_CODE >> 20] = float64_mvf,
|
[NRM_CODE >> 20] = float64_mvf,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int DoubleCPDO(const unsigned int opcode, FPREG * rFd)
|
unsigned int DoubleCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
float64 rFm;
|
float64 rFm;
|
||||||
|
@ -151,13 +151,13 @@ unsigned int DoubleCPDO(const unsigned int opcode, FPREG * rFd)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dyadic_double[opc_mask_shift]) {
|
if (dyadic_double[opc_mask_shift]) {
|
||||||
rFd->fDouble = dyadic_double[opc_mask_shift](rFn, rFm);
|
rFd->fDouble = dyadic_double[opc_mask_shift](roundData, rFn, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (monadic_double[opc_mask_shift]) {
|
if (monadic_double[opc_mask_shift]) {
|
||||||
rFd->fDouble = monadic_double[opc_mask_shift](rFm);
|
rFd->fDouble = monadic_double[opc_mask_shift](roundData, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,17 +35,17 @@ floatx80 floatx80_arccos(floatx80 rFm);
|
||||||
floatx80 floatx80_pow(floatx80 rFn, floatx80 rFm);
|
floatx80 floatx80_pow(floatx80 rFn, floatx80 rFm);
|
||||||
floatx80 floatx80_pol(floatx80 rFn, floatx80 rFm);
|
floatx80 floatx80_pol(floatx80 rFn, floatx80 rFm);
|
||||||
|
|
||||||
static floatx80 floatx80_rsf(floatx80 rFn, floatx80 rFm)
|
static floatx80 floatx80_rsf(struct roundingData *roundData, floatx80 rFn, floatx80 rFm)
|
||||||
{
|
{
|
||||||
return floatx80_sub(rFm, rFn);
|
return floatx80_sub(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static floatx80 floatx80_rdv(floatx80 rFn, floatx80 rFm)
|
static floatx80 floatx80_rdv(struct roundingData *roundData, floatx80 rFn, floatx80 rFm)
|
||||||
{
|
{
|
||||||
return floatx80_div(rFm, rFn);
|
return floatx80_div(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static floatx80 (*const dyadic_extended[16])(floatx80 rFn, floatx80 rFm) = {
|
static floatx80 (*const dyadic_extended[16])(struct roundingData*, floatx80 rFn, floatx80 rFm) = {
|
||||||
[ADF_CODE >> 20] = floatx80_add,
|
[ADF_CODE >> 20] = floatx80_add,
|
||||||
[MUF_CODE >> 20] = floatx80_mul,
|
[MUF_CODE >> 20] = floatx80_mul,
|
||||||
[SUF_CODE >> 20] = floatx80_sub,
|
[SUF_CODE >> 20] = floatx80_sub,
|
||||||
|
@ -60,24 +60,24 @@ static floatx80 (*const dyadic_extended[16])(floatx80 rFn, floatx80 rFm) = {
|
||||||
[FRD_CODE >> 20] = floatx80_rdv,
|
[FRD_CODE >> 20] = floatx80_rdv,
|
||||||
};
|
};
|
||||||
|
|
||||||
static floatx80 floatx80_mvf(floatx80 rFm)
|
static floatx80 floatx80_mvf(struct roundingData *roundData, floatx80 rFm)
|
||||||
{
|
{
|
||||||
return rFm;
|
return rFm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static floatx80 floatx80_mnf(floatx80 rFm)
|
static floatx80 floatx80_mnf(struct roundingData *roundData, floatx80 rFm)
|
||||||
{
|
{
|
||||||
rFm.high ^= 0x8000;
|
rFm.high ^= 0x8000;
|
||||||
return rFm;
|
return rFm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static floatx80 floatx80_abs(floatx80 rFm)
|
static floatx80 floatx80_abs(struct roundingData *roundData, floatx80 rFm)
|
||||||
{
|
{
|
||||||
rFm.high &= 0x7fff;
|
rFm.high &= 0x7fff;
|
||||||
return rFm;
|
return rFm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static floatx80 (*const monadic_extended[16])(floatx80 rFm) = {
|
static floatx80 (*const monadic_extended[16])(struct roundingData*, floatx80 rFm) = {
|
||||||
[MVF_CODE >> 20] = floatx80_mvf,
|
[MVF_CODE >> 20] = floatx80_mvf,
|
||||||
[MNF_CODE >> 20] = floatx80_mnf,
|
[MNF_CODE >> 20] = floatx80_mnf,
|
||||||
[ABS_CODE >> 20] = floatx80_abs,
|
[ABS_CODE >> 20] = floatx80_abs,
|
||||||
|
@ -87,7 +87,7 @@ static floatx80 (*const monadic_extended[16])(floatx80 rFm) = {
|
||||||
[NRM_CODE >> 20] = floatx80_mvf,
|
[NRM_CODE >> 20] = floatx80_mvf,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int ExtendedCPDO(const unsigned int opcode, FPREG * rFd)
|
unsigned int ExtendedCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
floatx80 rFm;
|
floatx80 rFm;
|
||||||
|
@ -138,13 +138,13 @@ unsigned int ExtendedCPDO(const unsigned int opcode, FPREG * rFd)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dyadic_extended[opc_mask_shift]) {
|
if (dyadic_extended[opc_mask_shift]) {
|
||||||
rFd->fExtended = dyadic_extended[opc_mask_shift](rFn, rFm);
|
rFd->fExtended = dyadic_extended[opc_mask_shift](roundData, rFn, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (monadic_extended[opc_mask_shift]) {
|
if (monadic_extended[opc_mask_shift]) {
|
||||||
rFd->fExtended = monadic_extended[opc_mask_shift](rFm);
|
rFd->fExtended = monadic_extended[opc_mask_shift](roundData, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,48 +51,42 @@ static void resetFPA11(void)
|
||||||
fpa11->fpsr = FP_EMULATOR | BIT_AC;
|
fpa11->fpsr = FP_EMULATOR | BIT_AC;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetRoundingMode(const unsigned int opcode)
|
int8 SetRoundingMode(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
switch (opcode & MASK_ROUNDING_MODE) {
|
switch (opcode & MASK_ROUNDING_MODE) {
|
||||||
default:
|
default:
|
||||||
case ROUND_TO_NEAREST:
|
case ROUND_TO_NEAREST:
|
||||||
float_rounding_mode = float_round_nearest_even;
|
return float_round_nearest_even;
|
||||||
break;
|
|
||||||
|
|
||||||
case ROUND_TO_PLUS_INFINITY:
|
case ROUND_TO_PLUS_INFINITY:
|
||||||
float_rounding_mode = float_round_up;
|
return float_round_up;
|
||||||
break;
|
|
||||||
|
|
||||||
case ROUND_TO_MINUS_INFINITY:
|
case ROUND_TO_MINUS_INFINITY:
|
||||||
float_rounding_mode = float_round_down;
|
return float_round_down;
|
||||||
break;
|
|
||||||
|
|
||||||
case ROUND_TO_ZERO:
|
case ROUND_TO_ZERO:
|
||||||
float_rounding_mode = float_round_to_zero;
|
return float_round_to_zero;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetRoundingPrecision(const unsigned int opcode)
|
int8 SetRoundingPrecision(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
switch (opcode & MASK_ROUNDING_PRECISION) {
|
switch (opcode & MASK_ROUNDING_PRECISION) {
|
||||||
case ROUND_SINGLE:
|
case ROUND_SINGLE:
|
||||||
floatx80_rounding_precision = 32;
|
return 32;
|
||||||
break;
|
|
||||||
|
|
||||||
case ROUND_DOUBLE:
|
case ROUND_DOUBLE:
|
||||||
floatx80_rounding_precision = 64;
|
return 64;
|
||||||
break;
|
|
||||||
|
|
||||||
case ROUND_EXTENDED:
|
case ROUND_EXTENDED:
|
||||||
floatx80_rounding_precision = 80;
|
return 80;
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
floatx80_rounding_precision = 80;
|
return 80;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
return 80;
|
||||||
}
|
}
|
||||||
|
|
||||||
void nwfpe_init_fpa(union fp_state *fp)
|
void nwfpe_init_fpa(union fp_state *fp)
|
||||||
|
@ -103,8 +97,6 @@ void nwfpe_init_fpa(union fp_state *fp)
|
||||||
#endif
|
#endif
|
||||||
memset(fpa11, 0, sizeof(FPA11));
|
memset(fpa11, 0, sizeof(FPA11));
|
||||||
resetFPA11();
|
resetFPA11();
|
||||||
SetRoundingMode(ROUND_TO_NEAREST);
|
|
||||||
SetRoundingPrecision(ROUND_EXTENDED);
|
|
||||||
fpa11->initflag = 1;
|
fpa11->initflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,13 @@
|
||||||
/* includes */
|
/* includes */
|
||||||
#include "fpsr.h" /* FP control and status register definitions */
|
#include "fpsr.h" /* FP control and status register definitions */
|
||||||
#include "milieu.h"
|
#include "milieu.h"
|
||||||
|
|
||||||
|
struct roundingData {
|
||||||
|
int8 mode;
|
||||||
|
int8 precision;
|
||||||
|
signed char exception;
|
||||||
|
};
|
||||||
|
|
||||||
#include "softfloat.h"
|
#include "softfloat.h"
|
||||||
|
|
||||||
#define typeNone 0x00
|
#define typeNone 0x00
|
||||||
|
@ -84,8 +91,8 @@ typedef struct tagFPA11 {
|
||||||
initialised. */
|
initialised. */
|
||||||
} FPA11;
|
} FPA11;
|
||||||
|
|
||||||
extern void SetRoundingMode(const unsigned int);
|
extern int8 SetRoundingMode(const unsigned int);
|
||||||
extern void SetRoundingPrecision(const unsigned int);
|
extern int8 SetRoundingPrecision(const unsigned int);
|
||||||
extern void nwfpe_init_fpa(union fp_state *fp);
|
extern void nwfpe_init_fpa(union fp_state *fp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -24,15 +24,16 @@
|
||||||
#include "fpa11.h"
|
#include "fpa11.h"
|
||||||
#include "fpopcode.h"
|
#include "fpopcode.h"
|
||||||
|
|
||||||
unsigned int SingleCPDO(const unsigned int opcode, FPREG * rFd);
|
unsigned int SingleCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd);
|
||||||
unsigned int DoubleCPDO(const unsigned int opcode, FPREG * rFd);
|
unsigned int DoubleCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd);
|
||||||
unsigned int ExtendedCPDO(const unsigned int opcode, FPREG * rFd);
|
unsigned int ExtendedCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd);
|
||||||
|
|
||||||
unsigned int EmulateCPDO(const unsigned int opcode)
|
unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
FPREG *rFd;
|
FPREG *rFd;
|
||||||
unsigned int nType, nDest, nRc;
|
unsigned int nType, nDest, nRc;
|
||||||
|
struct roundingData roundData;
|
||||||
|
|
||||||
/* Get the destination size. If not valid let Linux perform
|
/* Get the destination size. If not valid let Linux perform
|
||||||
an invalid instruction trap. */
|
an invalid instruction trap. */
|
||||||
|
@ -40,7 +41,9 @@ unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
if (typeNone == nDest)
|
if (typeNone == nDest)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
SetRoundingMode(opcode);
|
roundData.mode = SetRoundingMode(opcode);
|
||||||
|
roundData.precision = SetRoundingPrecision(opcode);
|
||||||
|
roundData.exception = 0;
|
||||||
|
|
||||||
/* Compare the size of the operands in Fn and Fm.
|
/* Compare the size of the operands in Fn and Fm.
|
||||||
Choose the largest size and perform operations in that size,
|
Choose the largest size and perform operations in that size,
|
||||||
|
@ -63,14 +66,14 @@ unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
|
|
||||||
switch (nType) {
|
switch (nType) {
|
||||||
case typeSingle:
|
case typeSingle:
|
||||||
nRc = SingleCPDO(opcode, rFd);
|
nRc = SingleCPDO(&roundData, opcode, rFd);
|
||||||
break;
|
break;
|
||||||
case typeDouble:
|
case typeDouble:
|
||||||
nRc = DoubleCPDO(opcode, rFd);
|
nRc = DoubleCPDO(&roundData, opcode, rFd);
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
case typeExtended:
|
case typeExtended:
|
||||||
nRc = ExtendedCPDO(opcode, rFd);
|
nRc = ExtendedCPDO(&roundData, opcode, rFd);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
@ -93,9 +96,9 @@ unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
case typeSingle:
|
case typeSingle:
|
||||||
{
|
{
|
||||||
if (typeDouble == nType)
|
if (typeDouble == nType)
|
||||||
rFd->fSingle = float64_to_float32(rFd->fDouble);
|
rFd->fSingle = float64_to_float32(&roundData, rFd->fDouble);
|
||||||
else
|
else
|
||||||
rFd->fSingle = floatx80_to_float32(rFd->fExtended);
|
rFd->fSingle = floatx80_to_float32(&roundData, rFd->fExtended);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -104,7 +107,7 @@ unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
if (typeSingle == nType)
|
if (typeSingle == nType)
|
||||||
rFd->fDouble = float32_to_float64(rFd->fSingle);
|
rFd->fDouble = float32_to_float64(rFd->fSingle);
|
||||||
else
|
else
|
||||||
rFd->fDouble = floatx80_to_float64(rFd->fExtended);
|
rFd->fDouble = floatx80_to_float64(&roundData, rFd->fExtended);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -121,12 +124,15 @@ unsigned int EmulateCPDO(const unsigned int opcode)
|
||||||
#else
|
#else
|
||||||
if (nDest != nType) {
|
if (nDest != nType) {
|
||||||
if (nDest == typeSingle)
|
if (nDest == typeSingle)
|
||||||
rFd->fSingle = float64_to_float32(rFd->fDouble);
|
rFd->fSingle = float64_to_float32(&roundData, rFd->fDouble);
|
||||||
else
|
else
|
||||||
rFd->fDouble = float32_to_float64(rFd->fSingle);
|
rFd->fDouble = float32_to_float64(rFd->fSingle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (roundData.exception)
|
||||||
|
float_raise(roundData.exception);
|
||||||
|
|
||||||
return nRc;
|
return nRc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ static inline void loadMultiple(const unsigned int Fn, const unsigned int __user
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void storeSingle(const unsigned int Fn, unsigned int __user *pMem)
|
static inline void storeSingle(struct roundingData *roundData, const unsigned int Fn, unsigned int __user *pMem)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
union {
|
union {
|
||||||
|
@ -106,12 +106,12 @@ static inline void storeSingle(const unsigned int Fn, unsigned int __user *pMem)
|
||||||
|
|
||||||
switch (fpa11->fType[Fn]) {
|
switch (fpa11->fType[Fn]) {
|
||||||
case typeDouble:
|
case typeDouble:
|
||||||
val.f = float64_to_float32(fpa11->fpreg[Fn].fDouble);
|
val.f = float64_to_float32(roundData, fpa11->fpreg[Fn].fDouble);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
case typeExtended:
|
case typeExtended:
|
||||||
val.f = floatx80_to_float32(fpa11->fpreg[Fn].fExtended);
|
val.f = floatx80_to_float32(roundData, fpa11->fpreg[Fn].fExtended);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ static inline void storeSingle(const unsigned int Fn, unsigned int __user *pMem)
|
||||||
put_user(val.i[0], pMem);
|
put_user(val.i[0], pMem);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void storeDouble(const unsigned int Fn, unsigned int __user *pMem)
|
static inline void storeDouble(struct roundingData *roundData, const unsigned int Fn, unsigned int __user *pMem)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
union {
|
union {
|
||||||
|
@ -137,7 +137,7 @@ static inline void storeDouble(const unsigned int Fn, unsigned int __user *pMem)
|
||||||
|
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
case typeExtended:
|
case typeExtended:
|
||||||
val.f = floatx80_to_float64(fpa11->fpreg[Fn].fExtended);
|
val.f = floatx80_to_float64(roundData, fpa11->fpreg[Fn].fExtended);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -259,8 +259,11 @@ unsigned int PerformSTF(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
unsigned int __user *pBase, *pAddress, *pFinal;
|
unsigned int __user *pBase, *pAddress, *pFinal;
|
||||||
unsigned int nRc = 1, write_back = WRITE_BACK(opcode);
|
unsigned int nRc = 1, write_back = WRITE_BACK(opcode);
|
||||||
|
struct roundingData roundData;
|
||||||
|
|
||||||
SetRoundingMode(ROUND_TO_NEAREST);
|
roundData.mode = SetRoundingMode(opcode);
|
||||||
|
roundData.precision = SetRoundingPrecision(opcode);
|
||||||
|
roundData.exception = 0;
|
||||||
|
|
||||||
pBase = (unsigned int __user *) readRegister(getRn(opcode));
|
pBase = (unsigned int __user *) readRegister(getRn(opcode));
|
||||||
if (REG_PC == getRn(opcode)) {
|
if (REG_PC == getRn(opcode)) {
|
||||||
|
@ -281,10 +284,10 @@ unsigned int PerformSTF(const unsigned int opcode)
|
||||||
|
|
||||||
switch (opcode & MASK_TRANSFER_LENGTH) {
|
switch (opcode & MASK_TRANSFER_LENGTH) {
|
||||||
case TRANSFER_SINGLE:
|
case TRANSFER_SINGLE:
|
||||||
storeSingle(getFd(opcode), pAddress);
|
storeSingle(&roundData, getFd(opcode), pAddress);
|
||||||
break;
|
break;
|
||||||
case TRANSFER_DOUBLE:
|
case TRANSFER_DOUBLE:
|
||||||
storeDouble(getFd(opcode), pAddress);
|
storeDouble(&roundData, getFd(opcode), pAddress);
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
case TRANSFER_EXTENDED:
|
case TRANSFER_EXTENDED:
|
||||||
|
@ -295,6 +298,9 @@ unsigned int PerformSTF(const unsigned int opcode)
|
||||||
nRc = 0;
|
nRc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (roundData.exception)
|
||||||
|
float_raise(roundData.exception);
|
||||||
|
|
||||||
if (write_back)
|
if (write_back)
|
||||||
writeRegister(getRn(opcode), (unsigned long) pFinal);
|
writeRegister(getRn(opcode), (unsigned long) pFinal);
|
||||||
return nRc;
|
return nRc;
|
||||||
|
|
|
@ -33,8 +33,6 @@ extern flag floatx80_is_nan(floatx80);
|
||||||
extern flag float64_is_nan(float64);
|
extern flag float64_is_nan(float64);
|
||||||
extern flag float32_is_nan(float32);
|
extern flag float32_is_nan(float32);
|
||||||
|
|
||||||
void SetRoundingMode(const unsigned int opcode);
|
|
||||||
|
|
||||||
unsigned int PerformFLT(const unsigned int opcode);
|
unsigned int PerformFLT(const unsigned int opcode);
|
||||||
unsigned int PerformFIX(const unsigned int opcode);
|
unsigned int PerformFIX(const unsigned int opcode);
|
||||||
|
|
||||||
|
@ -77,14 +75,17 @@ unsigned int EmulateCPRT(const unsigned int opcode)
|
||||||
unsigned int PerformFLT(const unsigned int opcode)
|
unsigned int PerformFLT(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
SetRoundingMode(opcode);
|
struct roundingData roundData;
|
||||||
SetRoundingPrecision(opcode);
|
|
||||||
|
roundData.mode = SetRoundingMode(opcode);
|
||||||
|
roundData.precision = SetRoundingPrecision(opcode);
|
||||||
|
roundData.exception = 0;
|
||||||
|
|
||||||
switch (opcode & MASK_ROUNDING_PRECISION) {
|
switch (opcode & MASK_ROUNDING_PRECISION) {
|
||||||
case ROUND_SINGLE:
|
case ROUND_SINGLE:
|
||||||
{
|
{
|
||||||
fpa11->fType[getFn(opcode)] = typeSingle;
|
fpa11->fType[getFn(opcode)] = typeSingle;
|
||||||
fpa11->fpreg[getFn(opcode)].fSingle = int32_to_float32(readRegister(getRd(opcode)));
|
fpa11->fpreg[getFn(opcode)].fSingle = int32_to_float32(&roundData, readRegister(getRd(opcode)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -108,6 +109,9 @@ unsigned int PerformFLT(const unsigned int opcode)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (roundData.exception)
|
||||||
|
float_raise(roundData.exception);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,26 +119,29 @@ unsigned int PerformFIX(const unsigned int opcode)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
unsigned int Fn = getFm(opcode);
|
unsigned int Fn = getFm(opcode);
|
||||||
|
struct roundingData roundData;
|
||||||
|
|
||||||
SetRoundingMode(opcode);
|
roundData.mode = SetRoundingMode(opcode);
|
||||||
|
roundData.precision = SetRoundingPrecision(opcode);
|
||||||
|
roundData.exception = 0;
|
||||||
|
|
||||||
switch (fpa11->fType[Fn]) {
|
switch (fpa11->fType[Fn]) {
|
||||||
case typeSingle:
|
case typeSingle:
|
||||||
{
|
{
|
||||||
writeRegister(getRd(opcode), float32_to_int32(fpa11->fpreg[Fn].fSingle));
|
writeRegister(getRd(opcode), float32_to_int32(&roundData, fpa11->fpreg[Fn].fSingle));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case typeDouble:
|
case typeDouble:
|
||||||
{
|
{
|
||||||
writeRegister(getRd(opcode), float64_to_int32(fpa11->fpreg[Fn].fDouble));
|
writeRegister(getRd(opcode), float64_to_int32(&roundData, fpa11->fpreg[Fn].fDouble));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef CONFIG_FPE_NWFPE_XP
|
#ifdef CONFIG_FPE_NWFPE_XP
|
||||||
case typeExtended:
|
case typeExtended:
|
||||||
{
|
{
|
||||||
writeRegister(getRd(opcode), floatx80_to_int32(fpa11->fpreg[Fn].fExtended));
|
writeRegister(getRd(opcode), floatx80_to_int32(&roundData, fpa11->fpreg[Fn].fExtended));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -143,6 +150,9 @@ unsigned int PerformFIX(const unsigned int opcode)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (roundData.exception)
|
||||||
|
float_raise(roundData.exception);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,8 +116,6 @@ fpmodule.c to integrate with the NetBSD kernel (I hope!).
|
||||||
code to access data in user space in some other source files at the
|
code to access data in user space in some other source files at the
|
||||||
moment (grep for get_user / put_user calls). --philb]
|
moment (grep for get_user / put_user calls). --philb]
|
||||||
|
|
||||||
float_exception_flags is a global variable in SoftFloat.
|
|
||||||
|
|
||||||
This function is called by the SoftFloat routines to raise a floating
|
This function is called by the SoftFloat routines to raise a floating
|
||||||
point exception. We check the trap enable byte in the FPSR, and raise
|
point exception. We check the trap enable byte in the FPSR, and raise
|
||||||
a SIGFPE exception if necessary. If not the relevant bits in the
|
a SIGFPE exception if necessary. If not the relevant bits in the
|
||||||
|
@ -129,15 +127,14 @@ void float_raise(signed char flags)
|
||||||
register unsigned int fpsr, cumulativeTraps;
|
register unsigned int fpsr, cumulativeTraps;
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_USER
|
#ifdef CONFIG_DEBUG_USER
|
||||||
printk(KERN_DEBUG
|
/* Ignore inexact errors as there are far too many of them to log */
|
||||||
"NWFPE: %s[%d] takes exception %08x at %p from %08lx\n",
|
if (flags & ~BIT_IXC)
|
||||||
current->comm, current->pid, flags,
|
printk(KERN_DEBUG
|
||||||
__builtin_return_address(0), GET_USERREG()->ARM_pc);
|
"NWFPE: %s[%d] takes exception %08x at %p from %08lx\n",
|
||||||
|
current->comm, current->pid, flags,
|
||||||
|
__builtin_return_address(0), GET_USERREG()->ARM_pc);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Keep SoftFloat exception flags up to date. */
|
|
||||||
float_exception_flags |= flags;
|
|
||||||
|
|
||||||
/* Read fpsr and initialize the cumulativeTraps. */
|
/* Read fpsr and initialize the cumulativeTraps. */
|
||||||
fpsr = readFPSR();
|
fpsr = readFPSR();
|
||||||
cumulativeTraps = 0;
|
cumulativeTraps = 0;
|
||||||
|
|
|
@ -36,17 +36,17 @@ float32 float32_arccos(float32 rFm);
|
||||||
float32 float32_pow(float32 rFn, float32 rFm);
|
float32 float32_pow(float32 rFn, float32 rFm);
|
||||||
float32 float32_pol(float32 rFn, float32 rFm);
|
float32 float32_pol(float32 rFn, float32 rFm);
|
||||||
|
|
||||||
static float32 float32_rsf(float32 rFn, float32 rFm)
|
static float32 float32_rsf(struct roundingData *roundData, float32 rFn, float32 rFm)
|
||||||
{
|
{
|
||||||
return float32_sub(rFm, rFn);
|
return float32_sub(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float32 float32_rdv(float32 rFn, float32 rFm)
|
static float32 float32_rdv(struct roundingData *roundData, float32 rFn, float32 rFm)
|
||||||
{
|
{
|
||||||
return float32_div(rFm, rFn);
|
return float32_div(roundData, rFm, rFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float32 (*const dyadic_single[16])(float32 rFn, float32 rFm) = {
|
static float32 (*const dyadic_single[16])(struct roundingData *, float32 rFn, float32 rFm) = {
|
||||||
[ADF_CODE >> 20] = float32_add,
|
[ADF_CODE >> 20] = float32_add,
|
||||||
[MUF_CODE >> 20] = float32_mul,
|
[MUF_CODE >> 20] = float32_mul,
|
||||||
[SUF_CODE >> 20] = float32_sub,
|
[SUF_CODE >> 20] = float32_sub,
|
||||||
|
@ -60,22 +60,22 @@ static float32 (*const dyadic_single[16])(float32 rFn, float32 rFm) = {
|
||||||
[FRD_CODE >> 20] = float32_rdv,
|
[FRD_CODE >> 20] = float32_rdv,
|
||||||
};
|
};
|
||||||
|
|
||||||
static float32 float32_mvf(float32 rFm)
|
static float32 float32_mvf(struct roundingData *roundData, float32 rFm)
|
||||||
{
|
{
|
||||||
return rFm;
|
return rFm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float32 float32_mnf(float32 rFm)
|
static float32 float32_mnf(struct roundingData *roundData, float32 rFm)
|
||||||
{
|
{
|
||||||
return rFm ^ 0x80000000;
|
return rFm ^ 0x80000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float32 float32_abs(float32 rFm)
|
static float32 float32_abs(struct roundingData *roundData, float32 rFm)
|
||||||
{
|
{
|
||||||
return rFm & 0x7fffffff;
|
return rFm & 0x7fffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float32 (*const monadic_single[16])(float32 rFm) = {
|
static float32 (*const monadic_single[16])(struct roundingData*, float32 rFm) = {
|
||||||
[MVF_CODE >> 20] = float32_mvf,
|
[MVF_CODE >> 20] = float32_mvf,
|
||||||
[MNF_CODE >> 20] = float32_mnf,
|
[MNF_CODE >> 20] = float32_mnf,
|
||||||
[ABS_CODE >> 20] = float32_abs,
|
[ABS_CODE >> 20] = float32_abs,
|
||||||
|
@ -85,7 +85,7 @@ static float32 (*const monadic_single[16])(float32 rFm) = {
|
||||||
[NRM_CODE >> 20] = float32_mvf,
|
[NRM_CODE >> 20] = float32_mvf,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int SingleCPDO(const unsigned int opcode, FPREG * rFd)
|
unsigned int SingleCPDO(struct roundingData *roundData, const unsigned int opcode, FPREG * rFd)
|
||||||
{
|
{
|
||||||
FPA11 *fpa11 = GET_FPA11();
|
FPA11 *fpa11 = GET_FPA11();
|
||||||
float32 rFm;
|
float32 rFm;
|
||||||
|
@ -108,13 +108,13 @@ unsigned int SingleCPDO(const unsigned int opcode, FPREG * rFd)
|
||||||
if (fpa11->fType[Fn] == typeSingle &&
|
if (fpa11->fType[Fn] == typeSingle &&
|
||||||
dyadic_single[opc_mask_shift]) {
|
dyadic_single[opc_mask_shift]) {
|
||||||
rFn = fpa11->fpreg[Fn].fSingle;
|
rFn = fpa11->fpreg[Fn].fSingle;
|
||||||
rFd->fSingle = dyadic_single[opc_mask_shift](rFn, rFm);
|
rFd->fSingle = dyadic_single[opc_mask_shift](roundData, rFn, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (monadic_single[opc_mask_shift]) {
|
if (monadic_single[opc_mask_shift]) {
|
||||||
rFd->fSingle = monadic_single[opc_mask_shift](rFm);
|
rFd->fSingle = monadic_single[opc_mask_shift](roundData, rFm);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -74,7 +74,7 @@ enum {
|
||||||
Software IEC/IEEE floating-point rounding mode.
|
Software IEC/IEEE floating-point rounding mode.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
extern signed char float_rounding_mode;
|
//extern int8 float_rounding_mode;
|
||||||
enum {
|
enum {
|
||||||
float_round_nearest_even = 0,
|
float_round_nearest_even = 0,
|
||||||
float_round_to_zero = 1,
|
float_round_to_zero = 1,
|
||||||
|
@ -86,7 +86,6 @@ enum {
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Software IEC/IEEE floating-point exception flags.
|
Software IEC/IEEE floating-point exception flags.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
extern signed char float_exception_flags;
|
|
||||||
enum {
|
enum {
|
||||||
float_flag_inexact = 1,
|
float_flag_inexact = 1,
|
||||||
float_flag_underflow = 2,
|
float_flag_underflow = 2,
|
||||||
|
@ -99,7 +98,6 @@ ScottB: November 4, 1998
|
||||||
Changed the enumeration to match the bit order in the FPA11.
|
Changed the enumeration to match the bit order in the FPA11.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern signed char float_exception_flags;
|
|
||||||
enum {
|
enum {
|
||||||
float_flag_invalid = 1,
|
float_flag_invalid = 1,
|
||||||
float_flag_divbyzero = 2,
|
float_flag_divbyzero = 2,
|
||||||
|
@ -121,7 +119,7 @@ void float_raise( signed char );
|
||||||
Software IEC/IEEE integer-to-floating-point conversion routines.
|
Software IEC/IEEE integer-to-floating-point conversion routines.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
float32 int32_to_float32( signed int );
|
float32 int32_to_float32( struct roundingData *, signed int );
|
||||||
float64 int32_to_float64( signed int );
|
float64 int32_to_float64( signed int );
|
||||||
#ifdef FLOATX80
|
#ifdef FLOATX80
|
||||||
floatx80 int32_to_floatx80( signed int );
|
floatx80 int32_to_floatx80( signed int );
|
||||||
|
@ -132,7 +130,7 @@ floatx80 int32_to_floatx80( signed int );
|
||||||
Software IEC/IEEE single-precision conversion routines.
|
Software IEC/IEEE single-precision conversion routines.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
signed int float32_to_int32( float32 );
|
signed int float32_to_int32( struct roundingData *, float32 );
|
||||||
signed int float32_to_int32_round_to_zero( float32 );
|
signed int float32_to_int32_round_to_zero( float32 );
|
||||||
float64 float32_to_float64( float32 );
|
float64 float32_to_float64( float32 );
|
||||||
#ifdef FLOATX80
|
#ifdef FLOATX80
|
||||||
|
@ -144,13 +142,13 @@ floatx80 float32_to_floatx80( float32 );
|
||||||
Software IEC/IEEE single-precision operations.
|
Software IEC/IEEE single-precision operations.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
float32 float32_round_to_int( float32 );
|
float32 float32_round_to_int( struct roundingData*, float32 );
|
||||||
float32 float32_add( float32, float32 );
|
float32 float32_add( struct roundingData *, float32, float32 );
|
||||||
float32 float32_sub( float32, float32 );
|
float32 float32_sub( struct roundingData *, float32, float32 );
|
||||||
float32 float32_mul( float32, float32 );
|
float32 float32_mul( struct roundingData *, float32, float32 );
|
||||||
float32 float32_div( float32, float32 );
|
float32 float32_div( struct roundingData *, float32, float32 );
|
||||||
float32 float32_rem( float32, float32 );
|
float32 float32_rem( struct roundingData *, float32, float32 );
|
||||||
float32 float32_sqrt( float32 );
|
float32 float32_sqrt( struct roundingData*, float32 );
|
||||||
char float32_eq( float32, float32 );
|
char float32_eq( float32, float32 );
|
||||||
char float32_le( float32, float32 );
|
char float32_le( float32, float32 );
|
||||||
char float32_lt( float32, float32 );
|
char float32_lt( float32, float32 );
|
||||||
|
@ -164,9 +162,9 @@ char float32_is_signaling_nan( float32 );
|
||||||
Software IEC/IEEE double-precision conversion routines.
|
Software IEC/IEEE double-precision conversion routines.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
signed int float64_to_int32( float64 );
|
signed int float64_to_int32( struct roundingData *, float64 );
|
||||||
signed int float64_to_int32_round_to_zero( float64 );
|
signed int float64_to_int32_round_to_zero( float64 );
|
||||||
float32 float64_to_float32( float64 );
|
float32 float64_to_float32( struct roundingData *, float64 );
|
||||||
#ifdef FLOATX80
|
#ifdef FLOATX80
|
||||||
floatx80 float64_to_floatx80( float64 );
|
floatx80 float64_to_floatx80( float64 );
|
||||||
#endif
|
#endif
|
||||||
|
@ -176,13 +174,13 @@ floatx80 float64_to_floatx80( float64 );
|
||||||
Software IEC/IEEE double-precision operations.
|
Software IEC/IEEE double-precision operations.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
float64 float64_round_to_int( float64 );
|
float64 float64_round_to_int( struct roundingData *, float64 );
|
||||||
float64 float64_add( float64, float64 );
|
float64 float64_add( struct roundingData *, float64, float64 );
|
||||||
float64 float64_sub( float64, float64 );
|
float64 float64_sub( struct roundingData *, float64, float64 );
|
||||||
float64 float64_mul( float64, float64 );
|
float64 float64_mul( struct roundingData *, float64, float64 );
|
||||||
float64 float64_div( float64, float64 );
|
float64 float64_div( struct roundingData *, float64, float64 );
|
||||||
float64 float64_rem( float64, float64 );
|
float64 float64_rem( struct roundingData *, float64, float64 );
|
||||||
float64 float64_sqrt( float64 );
|
float64 float64_sqrt( struct roundingData *, float64 );
|
||||||
char float64_eq( float64, float64 );
|
char float64_eq( float64, float64 );
|
||||||
char float64_le( float64, float64 );
|
char float64_le( float64, float64 );
|
||||||
char float64_lt( float64, float64 );
|
char float64_lt( float64, float64 );
|
||||||
|
@ -198,31 +196,23 @@ char float64_is_signaling_nan( float64 );
|
||||||
Software IEC/IEEE extended double-precision conversion routines.
|
Software IEC/IEEE extended double-precision conversion routines.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
signed int floatx80_to_int32( floatx80 );
|
signed int floatx80_to_int32( struct roundingData *, floatx80 );
|
||||||
signed int floatx80_to_int32_round_to_zero( floatx80 );
|
signed int floatx80_to_int32_round_to_zero( floatx80 );
|
||||||
float32 floatx80_to_float32( floatx80 );
|
float32 floatx80_to_float32( struct roundingData *, floatx80 );
|
||||||
float64 floatx80_to_float64( floatx80 );
|
float64 floatx80_to_float64( struct roundingData *, floatx80 );
|
||||||
|
|
||||||
/*
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Software IEC/IEEE extended double-precision rounding precision. Valid
|
|
||||||
values are 32, 64, and 80.
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
extern signed char floatx80_rounding_precision;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Software IEC/IEEE extended double-precision operations.
|
Software IEC/IEEE extended double-precision operations.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
floatx80 floatx80_round_to_int( floatx80 );
|
floatx80 floatx80_round_to_int( struct roundingData *, floatx80 );
|
||||||
floatx80 floatx80_add( floatx80, floatx80 );
|
floatx80 floatx80_add( struct roundingData *, floatx80, floatx80 );
|
||||||
floatx80 floatx80_sub( floatx80, floatx80 );
|
floatx80 floatx80_sub( struct roundingData *, floatx80, floatx80 );
|
||||||
floatx80 floatx80_mul( floatx80, floatx80 );
|
floatx80 floatx80_mul( struct roundingData *, floatx80, floatx80 );
|
||||||
floatx80 floatx80_div( floatx80, floatx80 );
|
floatx80 floatx80_div( struct roundingData *, floatx80, floatx80 );
|
||||||
floatx80 floatx80_rem( floatx80, floatx80 );
|
floatx80 floatx80_rem( struct roundingData *, floatx80, floatx80 );
|
||||||
floatx80 floatx80_sqrt( floatx80 );
|
floatx80 floatx80_sqrt( struct roundingData *, floatx80 );
|
||||||
char floatx80_eq( floatx80, floatx80 );
|
char floatx80_eq( floatx80, floatx80 );
|
||||||
char floatx80_le( floatx80, floatx80 );
|
char floatx80_le( floatx80, floatx80 );
|
||||||
char floatx80_lt( floatx80, floatx80 );
|
char floatx80_lt( floatx80, floatx80 );
|
||||||
|
|
|
@ -115,7 +115,7 @@ static int valid_kernel_stack(struct frame_tail *tail, struct pt_regs *regs)
|
||||||
return (tailaddr > stack) && (tailaddr < stack_base);
|
return (tailaddr > stack) && (tailaddr < stack_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arm_backtrace(struct pt_regs const *regs, unsigned int depth)
|
void arm_backtrace(struct pt_regs * const regs, unsigned int depth)
|
||||||
{
|
{
|
||||||
struct frame_tail *tail;
|
struct frame_tail *tail;
|
||||||
unsigned long last_address = 0;
|
unsigned long last_address = 0;
|
||||||
|
|
|
@ -770,6 +770,9 @@ vfp_double_add(struct vfp_double *vdd, struct vfp_double *vdn,
|
||||||
if ((s64)m_sig < 0) {
|
if ((s64)m_sig < 0) {
|
||||||
vdd->sign = vfp_sign_negate(vdd->sign);
|
vdd->sign = vfp_sign_negate(vdd->sign);
|
||||||
m_sig = -m_sig;
|
m_sig = -m_sig;
|
||||||
|
} else if (m_sig == 0) {
|
||||||
|
vdd->sign = (fpscr & FPSCR_RMODE_MASK) ==
|
||||||
|
FPSCR_ROUND_MINUSINF ? 0x8000 : 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_sig += vdn->significand;
|
m_sig += vdn->significand;
|
||||||
|
|
|
@ -176,12 +176,12 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
|
||||||
* Handle the "normal" cases first - successful and sigbus
|
* Handle the "normal" cases first - successful and sigbus
|
||||||
*/
|
*/
|
||||||
switch (fault) {
|
switch (fault) {
|
||||||
case 2:
|
case VM_FAULT_MAJOR:
|
||||||
tsk->maj_flt++;
|
tsk->maj_flt++;
|
||||||
return fault;
|
return fault;
|
||||||
case 1:
|
case VM_FAULT_MINOR:
|
||||||
tsk->min_flt++;
|
tsk->min_flt++;
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
return fault;
|
return fault;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,14 +226,11 @@ int do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||||
/*
|
/*
|
||||||
* Handle the "normal" case first
|
* Handle the "normal" case first
|
||||||
*/
|
*/
|
||||||
if (fault > 0)
|
switch (fault) {
|
||||||
|
case VM_FAULT_MINOR:
|
||||||
|
case VM_FAULT_MAJOR:
|
||||||
return 0;
|
return 0;
|
||||||
|
case VM_FAULT_SIGBUS:
|
||||||
/*
|
|
||||||
* We had some memory, but were unable to
|
|
||||||
* successfully fix up this page fault.
|
|
||||||
*/
|
|
||||||
if (fault == 0){
|
|
||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -284,13 +284,13 @@ do_page_fault(unsigned long address, struct pt_regs *regs,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (handle_mm_fault(mm, vma, address, writeaccess & 1)) {
|
switch (handle_mm_fault(mm, vma, address, writeaccess & 1)) {
|
||||||
case 1:
|
case VM_FAULT_MINOR:
|
||||||
tsk->min_flt++;
|
tsk->min_flt++;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case VM_FAULT_MAJOR:
|
||||||
tsk->maj_flt++;
|
tsk->maj_flt++;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
default:
|
default:
|
||||||
goto out_of_memory;
|
goto out_of_memory;
|
||||||
|
|
|
@ -163,13 +163,13 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
|
||||||
* the fault.
|
* the fault.
|
||||||
*/
|
*/
|
||||||
switch (handle_mm_fault(mm, vma, ear0, write)) {
|
switch (handle_mm_fault(mm, vma, ear0, write)) {
|
||||||
case 1:
|
case VM_FAULT_MINOR:
|
||||||
current->min_flt++;
|
current->min_flt++;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case VM_FAULT_MAJOR:
|
||||||
current->maj_flt++;
|
current->maj_flt++;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
default:
|
default:
|
||||||
goto out_of_memory;
|
goto out_of_memory;
|
||||||
|
|
|
@ -454,8 +454,9 @@ config HPET_TIMER
|
||||||
Choose N to continue using the legacy 8254 timer.
|
Choose N to continue using the legacy 8254 timer.
|
||||||
|
|
||||||
config HPET_EMULATE_RTC
|
config HPET_EMULATE_RTC
|
||||||
bool "Provide RTC interrupt"
|
bool
|
||||||
depends on HPET_TIMER && RTC=y
|
depends on HPET_TIMER && RTC=y
|
||||||
|
default y
|
||||||
|
|
||||||
config SMP
|
config SMP
|
||||||
bool "Symmetric multi-processing support"
|
bool "Symmetric multi-processing support"
|
||||||
|
|
|
@ -442,6 +442,13 @@ acpi_cpufreq_cpu_init (
|
||||||
(u32) data->acpi_data.states[i].transition_latency);
|
(u32) data->acpi_data.states[i].transition_latency);
|
||||||
|
|
||||||
cpufreq_frequency_table_get_attr(data->freq_table, policy->cpu);
|
cpufreq_frequency_table_get_attr(data->freq_table, policy->cpu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the first call to ->target() should result in us actually
|
||||||
|
* writing something to the appropriate registers.
|
||||||
|
*/
|
||||||
|
data->resume = 1;
|
||||||
|
|
||||||
return (result);
|
return (result);
|
||||||
|
|
||||||
err_freqfree:
|
err_freqfree:
|
||||||
|
|
|
@ -76,6 +76,12 @@ static void __init init_transmeta(struct cpuinfo_x86 *c)
|
||||||
#define USER686 (X86_FEATURE_TSC|X86_FEATURE_CX8|X86_FEATURE_CMOV)
|
#define USER686 (X86_FEATURE_TSC|X86_FEATURE_CX8|X86_FEATURE_CMOV)
|
||||||
if ( c->x86 == 5 && (c->x86_capability[0] & USER686) == USER686 )
|
if ( c->x86 == 5 && (c->x86_capability[0] & USER686) == USER686 )
|
||||||
c->x86 = 6;
|
c->x86 = 6;
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYSCTL
|
||||||
|
/* randomize_va_space slows us down enormously;
|
||||||
|
it probably triggers retranslation of x86->native bytecode */
|
||||||
|
randomize_va_space = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void transmeta_identify(struct cpuinfo_x86 * c)
|
static void transmeta_identify(struct cpuinfo_x86 * c)
|
||||||
|
|
|
@ -251,7 +251,7 @@ ENTRY(sys_call_table)
|
||||||
.long sys_io_submit
|
.long sys_io_submit
|
||||||
.long sys_io_cancel
|
.long sys_io_cancel
|
||||||
.long sys_fadvise64 /* 250 */
|
.long sys_fadvise64 /* 250 */
|
||||||
.long sys_set_zone_reclaim
|
.long sys_ni_syscall
|
||||||
.long sys_exit_group
|
.long sys_exit_group
|
||||||
.long sys_lookup_dcookie
|
.long sys_lookup_dcookie
|
||||||
.long sys_epoll_create
|
.long sys_epoll_create
|
||||||
|
|
|
@ -9,12 +9,15 @@
|
||||||
void (*pm_power_off)(void);
|
void (*pm_power_off)(void);
|
||||||
EXPORT_SYMBOL(pm_power_off);
|
EXPORT_SYMBOL(pm_power_off);
|
||||||
|
|
||||||
void machine_restart(char * __unused)
|
void machine_shutdown(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
smp_send_stop();
|
smp_send_stop();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void machine_emergency_restart(void)
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* Visual Workstations restart after this
|
* Visual Workstations restart after this
|
||||||
* register is poked on the PIIX4
|
* register is poked on the PIIX4
|
||||||
|
@ -22,6 +25,12 @@ void machine_restart(char * __unused)
|
||||||
outb(PIIX4_RESET_VAL, PIIX4_RESET_PORT);
|
outb(PIIX4_RESET_VAL, PIIX4_RESET_PORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void machine_restart(char * __unused)
|
||||||
|
{
|
||||||
|
machine_shutdown();
|
||||||
|
machine_emergency_restart();
|
||||||
|
}
|
||||||
|
|
||||||
void machine_power_off(void)
|
void machine_power_off(void)
|
||||||
{
|
{
|
||||||
unsigned short pm_status;
|
unsigned short pm_status;
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include "cobalt.h"
|
#include "cobalt.h"
|
||||||
#include "piix4.h"
|
#include "piix4.h"
|
||||||
|
|
||||||
|
int no_broadcast;
|
||||||
|
|
||||||
char visws_board_type = -1;
|
char visws_board_type = -1;
|
||||||
char visws_board_rev = -1;
|
char visws_board_rev = -1;
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,12 @@ kb_wait(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
machine_shutdown(void)
|
||||||
|
{
|
||||||
|
/* Architecture specific shutdown needed before a kexec */
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
machine_restart(char *cmd)
|
machine_restart(char *cmd)
|
||||||
{
|
{
|
||||||
|
@ -278,6 +284,13 @@ machine_restart(char *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
machine_emergency_restart(void)
|
||||||
|
{
|
||||||
|
/*for now, just hook this to a warm restart */
|
||||||
|
machine_restart(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
mca_nmi_hook(void)
|
mca_nmi_hook(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -243,14 +243,6 @@ static unsigned long calculate_numa_remap_pages(void)
|
||||||
/* now the roundup is correct, convert to PAGE_SIZE pages */
|
/* now the roundup is correct, convert to PAGE_SIZE pages */
|
||||||
size = size * PTRS_PER_PTE;
|
size = size * PTRS_PER_PTE;
|
||||||
|
|
||||||
if (node_end_pfn[nid] & (PTRS_PER_PTE-1)) {
|
|
||||||
/*
|
|
||||||
* Adjust size if node_end_pfn is not on a proper
|
|
||||||
* pmd boundary. remap_numa_kva will barf otherwise.
|
|
||||||
*/
|
|
||||||
size += node_end_pfn[nid] & (PTRS_PER_PTE-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Validate the region we are allocating only contains valid
|
* Validate the region we are allocating only contains valid
|
||||||
* pages.
|
* pages.
|
||||||
|
@ -270,6 +262,17 @@ static unsigned long calculate_numa_remap_pages(void)
|
||||||
reserve_pages += size;
|
reserve_pages += size;
|
||||||
printk("Shrinking node %d from %ld pages to %ld pages\n",
|
printk("Shrinking node %d from %ld pages to %ld pages\n",
|
||||||
nid, node_end_pfn[nid], node_end_pfn[nid] - size);
|
nid, node_end_pfn[nid], node_end_pfn[nid] - size);
|
||||||
|
|
||||||
|
if (node_end_pfn[nid] & (PTRS_PER_PTE-1)) {
|
||||||
|
/*
|
||||||
|
* Align node_end_pfn[] and node_remap_start_pfn[] to
|
||||||
|
* pmd boundary. remap_numa_kva will barf otherwise.
|
||||||
|
*/
|
||||||
|
printk("Shrinking node %d further by %ld pages for proper alignment\n",
|
||||||
|
nid, node_end_pfn[nid] & (PTRS_PER_PTE-1));
|
||||||
|
size += node_end_pfn[nid] & (PTRS_PER_PTE-1);
|
||||||
|
}
|
||||||
|
|
||||||
node_end_pfn[nid] -= size;
|
node_end_pfn[nid] -= size;
|
||||||
node_remap_start_pfn[nid] = node_end_pfn[nid];
|
node_remap_start_pfn[nid] = node_end_pfn[nid];
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ static int __init pci_acpi_init(void)
|
||||||
acpi_irq_penalty_init();
|
acpi_irq_penalty_init();
|
||||||
pcibios_scanned++;
|
pcibios_scanned++;
|
||||||
pcibios_enable_irq = acpi_pci_irq_enable;
|
pcibios_enable_irq = acpi_pci_irq_enable;
|
||||||
|
pcibios_disable_irq = acpi_pci_irq_disable;
|
||||||
|
|
||||||
if (pci_routeirq) {
|
if (pci_routeirq) {
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -254,3 +254,9 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
|
||||||
|
|
||||||
return pcibios_enable_irq(dev);
|
return pcibios_enable_irq(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pcibios_disable_device (struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
if (pcibios_disable_irq)
|
||||||
|
pcibios_disable_irq(dev);
|
||||||
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ struct irq_router_handler {
|
||||||
};
|
};
|
||||||
|
|
||||||
int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL;
|
int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL;
|
||||||
|
void (*pcibios_disable_irq)(struct pci_dev *dev) = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check passed address for the PCI IRQ Routing Table signature
|
* Check passed address for the PCI IRQ Routing Table signature
|
||||||
|
|
|
@ -73,3 +73,4 @@ extern int pcibios_scanned;
|
||||||
extern spinlock_t pci_config_lock;
|
extern spinlock_t pci_config_lock;
|
||||||
|
|
||||||
extern int (*pcibios_enable_irq)(struct pci_dev *dev);
|
extern int (*pcibios_enable_irq)(struct pci_dev *dev);
|
||||||
|
extern void (*pcibios_disable_irq)(struct pci_dev *dev);
|
||||||
|
|
|
@ -18,8 +18,10 @@
|
||||||
extern struct pci_raw_ops pci_direct_conf1;
|
extern struct pci_raw_ops pci_direct_conf1;
|
||||||
|
|
||||||
static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
|
static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; }
|
||||||
|
static void pci_visws_disable_irq(struct pci_dev *dev) { }
|
||||||
|
|
||||||
int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq;
|
int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq;
|
||||||
|
void (*pcibios_disable_irq)(struct pci_dev *dev) = &pci_visws_disable_irq;
|
||||||
|
|
||||||
void __init pcibios_penalize_isa_irq(int irq, int active) {}
|
void __init pcibios_penalize_isa_irq(int irq, int active) {}
|
||||||
|
|
||||||
|
|
|
@ -1573,7 +1573,7 @@ sys_call_table:
|
||||||
data8 sys_keyctl
|
data8 sys_keyctl
|
||||||
data8 sys_ioprio_set
|
data8 sys_ioprio_set
|
||||||
data8 sys_ioprio_get // 1275
|
data8 sys_ioprio_get // 1275
|
||||||
data8 sys_set_zone_reclaim
|
data8 sys_ni_syscall
|
||||||
data8 sys_inotify_init
|
data8 sys_inotify_init
|
||||||
data8 sys_inotify_add_watch
|
data8 sys_inotify_add_watch
|
||||||
data8 sys_inotify_rm_watch
|
data8 sys_inotify_rm_watch
|
||||||
|
|
|
@ -179,7 +179,7 @@ static int can_do_pal_halt = 1;
|
||||||
|
|
||||||
static int __init nohalt_setup(char * str)
|
static int __init nohalt_setup(char * str)
|
||||||
{
|
{
|
||||||
pal_halt = 0;
|
pal_halt = can_do_pal_halt = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("nohalt", nohalt_setup);
|
__setup("nohalt", nohalt_setup);
|
||||||
|
|
|
@ -205,8 +205,7 @@ static long last_rtc_update = 0;
|
||||||
* timer_interrupt() needs to keep up the real-time clock,
|
* timer_interrupt() needs to keep up the real-time clock,
|
||||||
* as well as call the "do_timer()" routine every clocktick
|
* as well as call the "do_timer()" routine every clocktick
|
||||||
*/
|
*/
|
||||||
static inline void
|
irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||||
do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
profile_tick(CPU_PROFILING, regs);
|
profile_tick(CPU_PROFILING, regs);
|
||||||
|
@ -221,6 +220,7 @@ do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||||
* CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
|
* CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
|
||||||
* called as close as possible to 500 ms before the new second starts.
|
* called as close as possible to 500 ms before the new second starts.
|
||||||
*/
|
*/
|
||||||
|
write_seqlock(&xtime_lock);
|
||||||
if ((time_status & STA_UNSYNC) == 0
|
if ((time_status & STA_UNSYNC) == 0
|
||||||
&& xtime.tv_sec > last_rtc_update + 660
|
&& xtime.tv_sec > last_rtc_update + 660
|
||||||
&& (xtime.tv_nsec / 1000) >= 500000 - ((unsigned)TICK_SIZE) / 2
|
&& (xtime.tv_nsec / 1000) >= 500000 - ((unsigned)TICK_SIZE) / 2
|
||||||
|
@ -231,6 +231,7 @@ do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||||
else /* do it again in 60 s */
|
else /* do it again in 60 s */
|
||||||
last_rtc_update = xtime.tv_sec - 600;
|
last_rtc_update = xtime.tv_sec - 600;
|
||||||
}
|
}
|
||||||
|
write_sequnlock(&xtime_lock);
|
||||||
/* As we return to user mode fire off the other CPU schedulers..
|
/* As we return to user mode fire off the other CPU schedulers..
|
||||||
this is basically because we don't yet share IRQ's around.
|
this is basically because we don't yet share IRQ's around.
|
||||||
This message is rigged to be safe on the 386 - basically it's
|
This message is rigged to be safe on the 386 - basically it's
|
||||||
|
@ -238,14 +239,8 @@ do_timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
smp_local_timer_interrupt(regs);
|
smp_local_timer_interrupt(regs);
|
||||||
|
smp_send_timer();
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
write_seqlock(&xtime_lock);
|
|
||||||
do_timer_interrupt(irq, NULL, regs);
|
|
||||||
write_sequnlock(&xtime_lock);
|
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,13 +160,13 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
|
||||||
printk("handle_mm_fault returns %d\n",fault);
|
printk("handle_mm_fault returns %d\n",fault);
|
||||||
#endif
|
#endif
|
||||||
switch (fault) {
|
switch (fault) {
|
||||||
case 1:
|
case VM_FAULT_MINOR:
|
||||||
current->min_flt++;
|
current->min_flt++;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case VM_FAULT_MAJOR:
|
||||||
current->maj_flt++;
|
current->maj_flt++;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
goto bus_err;
|
goto bus_err;
|
||||||
default:
|
default:
|
||||||
goto out_of_memory;
|
goto out_of_memory;
|
||||||
|
|
|
@ -178,17 +178,17 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
switch (handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) != 0)) {
|
switch (handle_mm_fault(mm, vma, address, (acc_type & VM_WRITE) != 0)) {
|
||||||
case 1:
|
case VM_FAULT_MINOR:
|
||||||
++current->min_flt;
|
++current->min_flt;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case VM_FAULT_MAJOR:
|
||||||
++current->maj_flt;
|
++current->maj_flt;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case VM_FAULT_SIGBUS:
|
||||||
/*
|
/*
|
||||||
* We ran out of memory, or some other thing happened
|
* We hit a hared mapping outside of the file, or some
|
||||||
* to us that made us unable to handle the page fault
|
* other thing happened to us that made us unable to
|
||||||
* gracefully.
|
* handle the page fault gracefully.
|
||||||
*/
|
*/
|
||||||
goto bad_area;
|
goto bad_area;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -69,9 +69,9 @@ config FEC_QS6612
|
||||||
|
|
||||||
config ENET_BIG_BUFFERS
|
config ENET_BIG_BUFFERS
|
||||||
bool "Use Big CPM Ethernet Buffers"
|
bool "Use Big CPM Ethernet Buffers"
|
||||||
depends on NET_ETHERNET
|
depends on SCC_ENET || FEC_ENET
|
||||||
help
|
help
|
||||||
Allocate large buffers for MPC8xx Etherenet. Increases throughput
|
Allocate large buffers for MPC8xx Ethernet. Increases throughput
|
||||||
and decreases the likelihood of dropped packets, but costs memory.
|
and decreases the likelihood of dropped packets, but costs memory.
|
||||||
|
|
||||||
config HTDMSOUND
|
config HTDMSOUND
|
||||||
|
|
|
@ -39,8 +39,6 @@
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/rheap.h>
|
#include <asm/rheap.h>
|
||||||
|
|
||||||
extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep);
|
|
||||||
|
|
||||||
static void m8xx_cpm_dpinit(void);
|
static void m8xx_cpm_dpinit(void);
|
||||||
static uint host_buffer; /* One page of host buffer */
|
static uint host_buffer; /* One page of host buffer */
|
||||||
static uint host_end; /* end + 1 */
|
static uint host_end; /* end + 1 */
|
||||||
|
@ -108,14 +106,11 @@ struct hw_interrupt_type cpm_pic = {
|
||||||
.end = cpm_eoi,
|
.end = cpm_eoi,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
m8xx_cpm_reset(uint bootpage)
|
m8xx_cpm_reset(void)
|
||||||
{
|
{
|
||||||
volatile immap_t *imp;
|
volatile immap_t *imp;
|
||||||
volatile cpm8xx_t *commproc;
|
volatile cpm8xx_t *commproc;
|
||||||
pte_t *pte;
|
|
||||||
|
|
||||||
imp = (immap_t *)IMAP_ADDR;
|
imp = (immap_t *)IMAP_ADDR;
|
||||||
commproc = (cpm8xx_t *)&imp->im_cpm;
|
commproc = (cpm8xx_t *)&imp->im_cpm;
|
||||||
|
@ -143,17 +138,6 @@ m8xx_cpm_reset(uint bootpage)
|
||||||
/* Reclaim the DP memory for our use. */
|
/* Reclaim the DP memory for our use. */
|
||||||
m8xx_cpm_dpinit();
|
m8xx_cpm_dpinit();
|
||||||
|
|
||||||
/* get the PTE for the bootpage */
|
|
||||||
if (!get_pteptr(&init_mm, bootpage, &pte))
|
|
||||||
panic("get_pteptr failed\n");
|
|
||||||
|
|
||||||
/* and make it uncachable */
|
|
||||||
pte_val(*pte) |= _PAGE_NO_CACHE;
|
|
||||||
_tlbie(bootpage);
|
|
||||||
|
|
||||||
host_buffer = bootpage;
|
|
||||||
host_end = host_buffer + PAGE_SIZE;
|
|
||||||
|
|
||||||
/* Tell everyone where the comm processor resides.
|
/* Tell everyone where the comm processor resides.
|
||||||
*/
|
*/
|
||||||
cpmp = (cpm8xx_t *)commproc;
|
cpmp = (cpm8xx_t *)commproc;
|
||||||
|
@ -384,8 +368,6 @@ static rh_info_t cpm_dpmem_info;
|
||||||
|
|
||||||
void m8xx_cpm_dpinit(void)
|
void m8xx_cpm_dpinit(void)
|
||||||
{
|
{
|
||||||
cpm8xx_t *cp = &((immap_t *)IMAP_ADDR)->im_cpm;
|
|
||||||
|
|
||||||
spin_lock_init(&cpm_dpmem_lock);
|
spin_lock_init(&cpm_dpmem_lock);
|
||||||
|
|
||||||
/* Initialize the info header */
|
/* Initialize the info header */
|
||||||
|
|
|
@ -173,7 +173,7 @@ struct fec_enet_private {
|
||||||
uint phy_status;
|
uint phy_status;
|
||||||
uint phy_speed;
|
uint phy_speed;
|
||||||
phy_info_t *phy;
|
phy_info_t *phy;
|
||||||
struct tq_struct phy_task;
|
struct work_struct phy_task;
|
||||||
|
|
||||||
uint sequence_done;
|
uint sequence_done;
|
||||||
|
|
||||||
|
@ -199,7 +199,8 @@ static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||||
#ifdef CONFIG_USE_MDIO
|
#ifdef CONFIG_USE_MDIO
|
||||||
static void fec_enet_mii(struct net_device *dev);
|
static void fec_enet_mii(struct net_device *dev);
|
||||||
#endif /* CONFIG_USE_MDIO */
|
#endif /* CONFIG_USE_MDIO */
|
||||||
static void fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs);
|
static irqreturn_t fec_enet_interrupt(int irq, void * dev_id,
|
||||||
|
struct pt_regs * regs);
|
||||||
#ifdef CONFIG_FEC_PACKETHOOK
|
#ifdef CONFIG_FEC_PACKETHOOK
|
||||||
static void fec_enet_tx(struct net_device *dev, __u32 regval);
|
static void fec_enet_tx(struct net_device *dev, __u32 regval);
|
||||||
static void fec_enet_rx(struct net_device *dev, __u32 regval);
|
static void fec_enet_rx(struct net_device *dev, __u32 regval);
|
||||||
|
@ -471,7 +472,7 @@ fec_timeout(struct net_device *dev)
|
||||||
/* The interrupt handler.
|
/* The interrupt handler.
|
||||||
* This is called from the MPC core interrupt.
|
* This is called from the MPC core interrupt.
|
||||||
*/
|
*/
|
||||||
static void
|
static irqreturn_t
|
||||||
fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs)
|
fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs)
|
||||||
{
|
{
|
||||||
struct net_device *dev = dev_id;
|
struct net_device *dev = dev_id;
|
||||||
|
@ -525,6 +526,7 @@ printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__,__LINE__,__FUNCTIO
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return IRQ_RETVAL(IRQ_HANDLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1263,8 +1265,9 @@ static void mii_display_status(struct net_device *dev)
|
||||||
printk(".\n");
|
printk(".\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mii_display_config(struct net_device *dev)
|
static void mii_display_config(void *priv)
|
||||||
{
|
{
|
||||||
|
struct net_device *dev = (struct net_device *)priv;
|
||||||
struct fec_enet_private *fep = dev->priv;
|
struct fec_enet_private *fep = dev->priv;
|
||||||
volatile uint *s = &(fep->phy_status);
|
volatile uint *s = &(fep->phy_status);
|
||||||
|
|
||||||
|
@ -1294,8 +1297,9 @@ static void mii_display_config(struct net_device *dev)
|
||||||
fep->sequence_done = 1;
|
fep->sequence_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mii_relink(struct net_device *dev)
|
static void mii_relink(void *priv)
|
||||||
{
|
{
|
||||||
|
struct net_device *dev = (struct net_device *)priv;
|
||||||
struct fec_enet_private *fep = dev->priv;
|
struct fec_enet_private *fep = dev->priv;
|
||||||
int duplex;
|
int duplex;
|
||||||
|
|
||||||
|
@ -1323,18 +1327,16 @@ static void mii_queue_relink(uint mii_reg, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct fec_enet_private *fep = dev->priv;
|
struct fec_enet_private *fep = dev->priv;
|
||||||
|
|
||||||
fep->phy_task.routine = (void *)mii_relink;
|
INIT_WORK(&fep->phy_task, mii_relink, (void *)dev);
|
||||||
fep->phy_task.data = dev;
|
schedule_work(&fep->phy_task);
|
||||||
schedule_task(&fep->phy_task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mii_queue_config(uint mii_reg, struct net_device *dev)
|
static void mii_queue_config(uint mii_reg, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct fec_enet_private *fep = dev->priv;
|
struct fec_enet_private *fep = dev->priv;
|
||||||
|
|
||||||
fep->phy_task.routine = (void *)mii_display_config;
|
INIT_WORK(&fep->phy_task, mii_display_config, (void *)dev);
|
||||||
fep->phy_task.data = dev;
|
schedule_work(&fep->phy_task);
|
||||||
schedule_task(&fep->phy_task);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1403,11 +1405,11 @@ mii_discover_phy(uint mii_reg, struct net_device *dev)
|
||||||
|
|
||||||
/* This interrupt occurs when the PHY detects a link change.
|
/* This interrupt occurs when the PHY detects a link change.
|
||||||
*/
|
*/
|
||||||
static void
|
static
|
||||||
#ifdef CONFIG_RPXCLASSIC
|
#ifdef CONFIG_RPXCLASSIC
|
||||||
mii_link_interrupt(void *dev_id)
|
void mii_link_interrupt(void *dev_id)
|
||||||
#else
|
#else
|
||||||
mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs)
|
irqreturn_t mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USE_MDIO
|
#ifdef CONFIG_USE_MDIO
|
||||||
|
@ -1440,6 +1442,9 @@ mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs)
|
||||||
printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__);
|
printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__);
|
||||||
#endif /* CONFIG_USE_MDIO */
|
#endif /* CONFIG_USE_MDIO */
|
||||||
|
|
||||||
|
#ifndef CONFIG_RPXCLASSIC
|
||||||
|
return IRQ_RETVAL(IRQ_HANDLED);
|
||||||
|
#endif /* CONFIG_RPXCLASSIC */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1575,7 +1580,7 @@ static int __init fec_enet_init(void)
|
||||||
struct fec_enet_private *fep;
|
struct fec_enet_private *fep;
|
||||||
int i, j, k, err;
|
int i, j, k, err;
|
||||||
unsigned char *eap, *iap, *ba;
|
unsigned char *eap, *iap, *ba;
|
||||||
unsigned long mem_addr;
|
dma_addr_t mem_addr;
|
||||||
volatile cbd_t *bdp;
|
volatile cbd_t *bdp;
|
||||||
cbd_t *cbd_base;
|
cbd_t *cbd_base;
|
||||||
volatile immap_t *immap;
|
volatile immap_t *immap;
|
||||||
|
@ -1640,7 +1645,8 @@ static int __init fec_enet_init(void)
|
||||||
printk("FEC initialization failed.\n");
|
printk("FEC initialization failed.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
cbd_base = (cbd_t *)consistent_alloc(GFP_KERNEL, PAGE_SIZE, &mem_addr);
|
cbd_base = (cbd_t *)dma_alloc_coherent(dev->class_dev.dev, PAGE_SIZE,
|
||||||
|
&mem_addr, GFP_KERNEL);
|
||||||
|
|
||||||
/* Set receive and transmit descriptor base.
|
/* Set receive and transmit descriptor base.
|
||||||
*/
|
*/
|
||||||
|
@ -1657,7 +1663,10 @@ static int __init fec_enet_init(void)
|
||||||
|
|
||||||
/* Allocate a page.
|
/* Allocate a page.
|
||||||
*/
|
*/
|
||||||
ba = (unsigned char *)consistent_alloc(GFP_KERNEL, PAGE_SIZE, &mem_addr);
|
ba = (unsigned char *)dma_alloc_coherent(dev->class_dev.dev,
|
||||||
|
PAGE_SIZE,
|
||||||
|
&mem_addr,
|
||||||
|
GFP_KERNEL);
|
||||||
/* BUG: no check for failure */
|
/* BUG: no check for failure */
|
||||||
|
|
||||||
/* Initialize the BD for every fragment in the page.
|
/* Initialize the BD for every fragment in the page.
|
||||||
|
|
|
@ -558,6 +558,7 @@ config PPC_MULTIPLATFORM
|
||||||
|
|
||||||
config APUS
|
config APUS
|
||||||
bool "Amiga-APUS"
|
bool "Amiga-APUS"
|
||||||
|
depends on BROKEN
|
||||||
help
|
help
|
||||||
Select APUS if configuring for a PowerUP Amiga.
|
Select APUS if configuring for a PowerUP Amiga.
|
||||||
More information is available at:
|
More information is available at:
|
||||||
|
@ -647,6 +648,7 @@ config PAL4
|
||||||
|
|
||||||
config GEMINI
|
config GEMINI
|
||||||
bool "Synergy-Gemini"
|
bool "Synergy-Gemini"
|
||||||
|
depends on BROKEN
|
||||||
help
|
help
|
||||||
Select Gemini if configuring for a Synergy Microsystems' Gemini
|
Select Gemini if configuring for a Synergy Microsystems' Gemini
|
||||||
series Single Board Computer. More information is available at:
|
series Single Board Computer. More information is available at:
|
||||||
|
|
|
@ -61,6 +61,12 @@ zimageinitrd-$(CONFIG_IBM_OPENBIOS) := zImage.initrd-TREE
|
||||||
end-$(CONFIG_EMBEDDEDBOOT) := embedded
|
end-$(CONFIG_EMBEDDEDBOOT) := embedded
|
||||||
misc-$(CONFIG_EMBEDDEDBOOT) := misc-embedded.o
|
misc-$(CONFIG_EMBEDDEDBOOT) := misc-embedded.o
|
||||||
|
|
||||||
|
zimage-$(CONFIG_BAMBOO) := zImage-TREE
|
||||||
|
zimageinitrd-$(CONFIG_BAMBOO) := zImage.initrd-TREE
|
||||||
|
end-$(CONFIG_BAMBOO) := bamboo
|
||||||
|
entrypoint-$(CONFIG_BAMBOO) := 0x01000000
|
||||||
|
extra.o-$(CONFIG_BAMBOO) := pibs.o
|
||||||
|
|
||||||
zimage-$(CONFIG_EBONY) := zImage-TREE
|
zimage-$(CONFIG_EBONY) := zImage-TREE
|
||||||
zimageinitrd-$(CONFIG_EBONY) := zImage.initrd-TREE
|
zimageinitrd-$(CONFIG_EBONY) := zImage.initrd-TREE
|
||||||
end-$(CONFIG_EBONY) := ebony
|
end-$(CONFIG_EBONY) := ebony
|
||||||
|
|
|
@ -91,9 +91,11 @@ load_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
|
||||||
|
|
||||||
mac64 = simple_strtoull((char *)PIBS_MAC_BASE, 0, 16);
|
mac64 = simple_strtoull((char *)PIBS_MAC_BASE, 0, 16);
|
||||||
memcpy(hold_residual->bi_enetaddr, (char *)&mac64+2, 6);
|
memcpy(hold_residual->bi_enetaddr, (char *)&mac64+2, 6);
|
||||||
#ifdef CONFIG_440GX
|
#if defined(CONFIG_440GX) || defined(CONFIG_440EP)
|
||||||
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET), 0, 16);
|
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET), 0, 16);
|
||||||
memcpy(hold_residual->bi_enet1addr, (char *)&mac64+2, 6);
|
memcpy(hold_residual->bi_enet1addr, (char *)&mac64+2, 6);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_440GX
|
||||||
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET*2), 0, 16);
|
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET*2), 0, 16);
|
||||||
memcpy(hold_residual->bi_enet2addr, (char *)&mac64+2, 6);
|
memcpy(hold_residual->bi_enet2addr, (char *)&mac64+2, 6);
|
||||||
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET*3), 0, 16);
|
mac64 = simple_strtoull((char *)(PIBS_MAC_BASE+PIBS_MAC_OFFSET*3), 0, 16);
|
||||||
|
|
|
@ -0,0 +1,943 @@
|
||||||
|
#
|
||||||
|
# Automatically generated make config: don't edit
|
||||||
|
# Linux kernel version: 2.6.12
|
||||||
|
# Tue Jun 28 15:24:25 2005
|
||||||
|
#
|
||||||
|
CONFIG_MMU=y
|
||||||
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
CONFIG_HAVE_DEC_LOCK=y
|
||||||
|
CONFIG_PPC=y
|
||||||
|
CONFIG_PPC32=y
|
||||||
|
CONFIG_GENERIC_NVRAM=y
|
||||||
|
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Code maturity level options
|
||||||
|
#
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_CLEAN_COMPILE=y
|
||||||
|
CONFIG_BROKEN_ON_SMP=y
|
||||||
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
#
|
||||||
|
# General setup
|
||||||
|
#
|
||||||
|
CONFIG_LOCALVERSION=""
|
||||||
|
CONFIG_SWAP=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
# CONFIG_POSIX_MQUEUE is not set
|
||||||
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
CONFIG_SYSCTL=y
|
||||||
|
# CONFIG_AUDIT is not set
|
||||||
|
# CONFIG_HOTPLUG is not set
|
||||||
|
CONFIG_KOBJECT_UEVENT=y
|
||||||
|
# CONFIG_IKCONFIG is not set
|
||||||
|
CONFIG_EMBEDDED=y
|
||||||
|
CONFIG_KALLSYMS=y
|
||||||
|
# CONFIG_KALLSYMS_ALL is not set
|
||||||
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_PRINTK=y
|
||||||
|
CONFIG_BUG=y
|
||||||
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_FUTEX=y
|
||||||
|
CONFIG_EPOLL=y
|
||||||
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
|
CONFIG_SHMEM=y
|
||||||
|
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
# CONFIG_TINY_SHMEM is not set
|
||||||
|
CONFIG_BASE_SMALL=0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Loadable module support
|
||||||
|
#
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
|
CONFIG_OBSOLETE_MODPARM=y
|
||||||
|
# CONFIG_MODVERSIONS is not set
|
||||||
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
|
CONFIG_KMOD=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Processor
|
||||||
|
#
|
||||||
|
# CONFIG_6xx is not set
|
||||||
|
# CONFIG_40x is not set
|
||||||
|
CONFIG_44x=y
|
||||||
|
# CONFIG_POWER3 is not set
|
||||||
|
# CONFIG_POWER4 is not set
|
||||||
|
# CONFIG_8xx is not set
|
||||||
|
# CONFIG_E200 is not set
|
||||||
|
# CONFIG_E500 is not set
|
||||||
|
CONFIG_PPC_FPU=y
|
||||||
|
CONFIG_BOOKE=y
|
||||||
|
CONFIG_PTE_64BIT=y
|
||||||
|
CONFIG_PHYS_64BIT=y
|
||||||
|
# CONFIG_MATH_EMULATION is not set
|
||||||
|
# CONFIG_KEXEC is not set
|
||||||
|
# CONFIG_CPU_FREQ is not set
|
||||||
|
CONFIG_4xx=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# IBM 4xx options
|
||||||
|
#
|
||||||
|
CONFIG_BAMBOO=y
|
||||||
|
# CONFIG_EBONY is not set
|
||||||
|
# CONFIG_LUAN is not set
|
||||||
|
# CONFIG_OCOTEA is not set
|
||||||
|
CONFIG_440EP=y
|
||||||
|
CONFIG_440=y
|
||||||
|
CONFIG_IBM440EP_ERR42=y
|
||||||
|
CONFIG_IBM_OCP=y
|
||||||
|
# CONFIG_PPC4xx_DMA is not set
|
||||||
|
CONFIG_PPC_GEN550=y
|
||||||
|
# CONFIG_PM is not set
|
||||||
|
CONFIG_NOT_COHERENT_CACHE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Platform options
|
||||||
|
#
|
||||||
|
# CONFIG_PC_KEYBOARD is not set
|
||||||
|
# CONFIG_SMP is not set
|
||||||
|
# CONFIG_PREEMPT is not set
|
||||||
|
# CONFIG_HIGHMEM is not set
|
||||||
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
|
CONFIG_FLATMEM_MANUAL=y
|
||||||
|
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||||
|
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||||
|
CONFIG_FLATMEM=y
|
||||||
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
|
CONFIG_BINFMT_ELF=y
|
||||||
|
# CONFIG_BINFMT_MISC is not set
|
||||||
|
CONFIG_CMDLINE_BOOL=y
|
||||||
|
CONFIG_CMDLINE="ip=on"
|
||||||
|
CONFIG_SECCOMP=y
|
||||||
|
CONFIG_ISA_DMA_API=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bus options
|
||||||
|
#
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
# CONFIG_PCI_LEGACY_PROC is not set
|
||||||
|
# CONFIG_PCI_NAMES is not set
|
||||||
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCCARD (PCMCIA/CardBus) support
|
||||||
|
#
|
||||||
|
# CONFIG_PCCARD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Advanced setup
|
||||||
|
#
|
||||||
|
# CONFIG_ADVANCED_OPTIONS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Default settings for advanced configuration options are used
|
||||||
|
#
|
||||||
|
CONFIG_HIGHMEM_START=0xfe000000
|
||||||
|
CONFIG_LOWMEM_SIZE=0x30000000
|
||||||
|
CONFIG_KERNEL_START=0xc0000000
|
||||||
|
CONFIG_TASK_SIZE=0x80000000
|
||||||
|
CONFIG_CONSISTENT_START=0xff100000
|
||||||
|
CONFIG_CONSISTENT_SIZE=0x00200000
|
||||||
|
CONFIG_BOOT_LOAD=0x01000000
|
||||||
|
|
||||||
|
#
|
||||||
|
# Device Drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generic Driver Options
|
||||||
|
#
|
||||||
|
# CONFIG_STANDALONE is not set
|
||||||
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
|
# CONFIG_FW_LOADER is not set
|
||||||
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Memory Technology Devices (MTD)
|
||||||
|
#
|
||||||
|
# CONFIG_MTD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Parallel port support
|
||||||
|
#
|
||||||
|
# CONFIG_PARPORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Plug and Play support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Block devices
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_FD is not set
|
||||||
|
# CONFIG_BLK_CPQ_DA is not set
|
||||||
|
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||||
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
|
# CONFIG_BLK_DEV_LOOP is not set
|
||||||
|
# CONFIG_BLK_DEV_NBD is not set
|
||||||
|
# CONFIG_BLK_DEV_SX8 is not set
|
||||||
|
# CONFIG_BLK_DEV_UB is not set
|
||||||
|
# CONFIG_BLK_DEV_RAM is not set
|
||||||
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
# CONFIG_LBD is not set
|
||||||
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IO Schedulers
|
||||||
|
#
|
||||||
|
CONFIG_IOSCHED_NOOP=y
|
||||||
|
CONFIG_IOSCHED_AS=y
|
||||||
|
CONFIG_IOSCHED_DEADLINE=y
|
||||||
|
CONFIG_IOSCHED_CFQ=y
|
||||||
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ATA/ATAPI/MFM/RLL support
|
||||||
|
#
|
||||||
|
CONFIG_IDE=y
|
||||||
|
CONFIG_BLK_DEV_IDE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDISK=y
|
||||||
|
# CONFIG_IDEDISK_MULTI_MODE is not set
|
||||||
|
# CONFIG_BLK_DEV_IDECD is not set
|
||||||
|
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||||
|
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||||
|
# CONFIG_BLK_DEV_IDESCSI is not set
|
||||||
|
# CONFIG_IDE_TASK_IOCTL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IDE chipset support/bugfixes
|
||||||
|
#
|
||||||
|
CONFIG_IDE_GENERIC=y
|
||||||
|
CONFIG_BLK_DEV_IDEPCI=y
|
||||||
|
# CONFIG_IDEPCI_SHARE_IRQ is not set
|
||||||
|
# CONFIG_BLK_DEV_OFFBOARD is not set
|
||||||
|
# CONFIG_BLK_DEV_GENERIC is not set
|
||||||
|
# CONFIG_BLK_DEV_OPTI621 is not set
|
||||||
|
# CONFIG_BLK_DEV_SL82C105 is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||||
|
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
|
||||||
|
# CONFIG_IDEDMA_PCI_AUTO is not set
|
||||||
|
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||||
|
# CONFIG_BLK_DEV_ALI15X3 is not set
|
||||||
|
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||||
|
CONFIG_BLK_DEV_CMD64X=y
|
||||||
|
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||||
|
# CONFIG_BLK_DEV_CY82C693 is not set
|
||||||
|
# CONFIG_BLK_DEV_CS5520 is not set
|
||||||
|
# CONFIG_BLK_DEV_CS5530 is not set
|
||||||
|
# CONFIG_BLK_DEV_HPT34X is not set
|
||||||
|
# CONFIG_BLK_DEV_HPT366 is not set
|
||||||
|
# CONFIG_BLK_DEV_SC1200 is not set
|
||||||
|
# CONFIG_BLK_DEV_PIIX is not set
|
||||||
|
# CONFIG_BLK_DEV_IT821X is not set
|
||||||
|
# CONFIG_BLK_DEV_NS87415 is not set
|
||||||
|
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||||
|
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||||
|
# CONFIG_BLK_DEV_SVWKS is not set
|
||||||
|
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||||
|
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||||
|
# CONFIG_BLK_DEV_TRM290 is not set
|
||||||
|
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||||
|
# CONFIG_IDE_ARM is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
|
# CONFIG_IDEDMA_IVB is not set
|
||||||
|
# CONFIG_IDEDMA_AUTO is not set
|
||||||
|
# CONFIG_BLK_DEV_HD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI device support
|
||||||
|
#
|
||||||
|
CONFIG_SCSI=y
|
||||||
|
CONFIG_SCSI_PROC_FS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI support type (disk, tape, CD-ROM)
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_SD is not set
|
||||||
|
CONFIG_CHR_DEV_ST=y
|
||||||
|
# CONFIG_CHR_DEV_OSST is not set
|
||||||
|
# CONFIG_BLK_DEV_SR is not set
|
||||||
|
# CONFIG_CHR_DEV_SG is not set
|
||||||
|
# CONFIG_CHR_DEV_SCH is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||||
|
#
|
||||||
|
# CONFIG_SCSI_MULTI_LUN is not set
|
||||||
|
# CONFIG_SCSI_CONSTANTS is not set
|
||||||
|
# CONFIG_SCSI_LOGGING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI Transport Attributes
|
||||||
|
#
|
||||||
|
CONFIG_SCSI_SPI_ATTRS=y
|
||||||
|
# CONFIG_SCSI_FC_ATTRS is not set
|
||||||
|
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI low-level drivers
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||||
|
# CONFIG_SCSI_3W_9XXX is not set
|
||||||
|
# CONFIG_SCSI_ACARD is not set
|
||||||
|
# CONFIG_SCSI_AACRAID is not set
|
||||||
|
# CONFIG_SCSI_AIC7XXX is not set
|
||||||
|
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
||||||
|
# CONFIG_SCSI_AIC79XX is not set
|
||||||
|
# CONFIG_SCSI_DPT_I2O is not set
|
||||||
|
# CONFIG_MEGARAID_NEWGEN is not set
|
||||||
|
# CONFIG_MEGARAID_LEGACY is not set
|
||||||
|
# CONFIG_SCSI_SATA is not set
|
||||||
|
# CONFIG_SCSI_BUSLOGIC is not set
|
||||||
|
# CONFIG_SCSI_DMX3191D is not set
|
||||||
|
# CONFIG_SCSI_EATA is not set
|
||||||
|
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||||
|
# CONFIG_SCSI_GDTH is not set
|
||||||
|
# CONFIG_SCSI_IPS is not set
|
||||||
|
# CONFIG_SCSI_INITIO is not set
|
||||||
|
# CONFIG_SCSI_INIA100 is not set
|
||||||
|
CONFIG_SCSI_SYM53C8XX_2=y
|
||||||
|
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
|
||||||
|
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
||||||
|
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
||||||
|
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
|
||||||
|
# CONFIG_SCSI_IPR is not set
|
||||||
|
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||||
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
|
CONFIG_SCSI_QLA2XXX=y
|
||||||
|
# CONFIG_SCSI_QLA21XX is not set
|
||||||
|
# CONFIG_SCSI_QLA22XX is not set
|
||||||
|
# CONFIG_SCSI_QLA2300 is not set
|
||||||
|
# CONFIG_SCSI_QLA2322 is not set
|
||||||
|
# CONFIG_SCSI_QLA6312 is not set
|
||||||
|
# CONFIG_SCSI_LPFC is not set
|
||||||
|
# CONFIG_SCSI_DC395x is not set
|
||||||
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
# CONFIG_SCSI_NSP32 is not set
|
||||||
|
# CONFIG_SCSI_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multi-device support (RAID and LVM)
|
||||||
|
#
|
||||||
|
# CONFIG_MD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Fusion MPT device support
|
||||||
|
#
|
||||||
|
# CONFIG_FUSION is not set
|
||||||
|
# CONFIG_FUSION_SPI is not set
|
||||||
|
# CONFIG_FUSION_FC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IEEE 1394 (FireWire) support
|
||||||
|
#
|
||||||
|
# CONFIG_IEEE1394 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2O device support
|
||||||
|
#
|
||||||
|
# CONFIG_I2O is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Macintosh device drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Networking support
|
||||||
|
#
|
||||||
|
CONFIG_NET=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Networking options
|
||||||
|
#
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
# CONFIG_PACKET_MMAP is not set
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
# CONFIG_NET_KEY is not set
|
||||||
|
CONFIG_INET=y
|
||||||
|
# CONFIG_IP_MULTICAST is not set
|
||||||
|
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||||
|
CONFIG_IP_FIB_HASH=y
|
||||||
|
CONFIG_IP_PNP=y
|
||||||
|
# CONFIG_IP_PNP_DHCP is not set
|
||||||
|
CONFIG_IP_PNP_BOOTP=y
|
||||||
|
# CONFIG_IP_PNP_RARP is not set
|
||||||
|
# CONFIG_NET_IPIP is not set
|
||||||
|
# CONFIG_NET_IPGRE is not set
|
||||||
|
# CONFIG_ARPD is not set
|
||||||
|
# CONFIG_SYN_COOKIES is not set
|
||||||
|
# CONFIG_INET_AH is not set
|
||||||
|
# CONFIG_INET_ESP is not set
|
||||||
|
# CONFIG_INET_IPCOMP is not set
|
||||||
|
# CONFIG_INET_TUNNEL is not set
|
||||||
|
CONFIG_IP_TCPDIAG=y
|
||||||
|
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||||
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
CONFIG_TCP_CONG_BIC=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# IP: Virtual Server Configuration
|
||||||
|
#
|
||||||
|
# CONFIG_IP_VS is not set
|
||||||
|
# CONFIG_IPV6 is not set
|
||||||
|
CONFIG_NETFILTER=y
|
||||||
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IP: Netfilter Configuration
|
||||||
|
#
|
||||||
|
# CONFIG_IP_NF_CONNTRACK is not set
|
||||||
|
# CONFIG_IP_NF_CONNTRACK_MARK is not set
|
||||||
|
# CONFIG_IP_NF_QUEUE is not set
|
||||||
|
# CONFIG_IP_NF_IPTABLES is not set
|
||||||
|
# CONFIG_IP_NF_ARPTABLES is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_IP_SCTP is not set
|
||||||
|
# CONFIG_ATM is not set
|
||||||
|
# CONFIG_BRIDGE is not set
|
||||||
|
# CONFIG_VLAN_8021Q is not set
|
||||||
|
# CONFIG_DECNET is not set
|
||||||
|
# CONFIG_LLC2 is not set
|
||||||
|
# CONFIG_IPX is not set
|
||||||
|
# CONFIG_ATALK is not set
|
||||||
|
# CONFIG_X25 is not set
|
||||||
|
# CONFIG_LAPB is not set
|
||||||
|
# CONFIG_NET_DIVERT is not set
|
||||||
|
# CONFIG_ECONET is not set
|
||||||
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# QoS and/or fair queueing
|
||||||
|
#
|
||||||
|
# CONFIG_NET_SCHED is not set
|
||||||
|
# CONFIG_NET_CLS_ROUTE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network testing
|
||||||
|
#
|
||||||
|
# CONFIG_NET_PKTGEN is not set
|
||||||
|
# CONFIG_NETPOLL is not set
|
||||||
|
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||||
|
# CONFIG_HAMRADIO is not set
|
||||||
|
# CONFIG_IRDA is not set
|
||||||
|
# CONFIG_BT is not set
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
# CONFIG_DUMMY is not set
|
||||||
|
# CONFIG_BONDING is not set
|
||||||
|
# CONFIG_EQUALIZER is not set
|
||||||
|
# CONFIG_TUN is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ARCnet devices
|
||||||
|
#
|
||||||
|
# CONFIG_ARCNET is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (10 or 100Mbit)
|
||||||
|
#
|
||||||
|
CONFIG_NET_ETHERNET=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
# CONFIG_HAPPYMEAL is not set
|
||||||
|
# CONFIG_SUNGEM is not set
|
||||||
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tulip family network device support
|
||||||
|
#
|
||||||
|
# CONFIG_NET_TULIP is not set
|
||||||
|
# CONFIG_HP100 is not set
|
||||||
|
CONFIG_IBM_EMAC=y
|
||||||
|
# CONFIG_IBM_EMAC_ERRMSG is not set
|
||||||
|
CONFIG_IBM_EMAC_RXB=64
|
||||||
|
CONFIG_IBM_EMAC_TXB=8
|
||||||
|
CONFIG_IBM_EMAC_FGAP=8
|
||||||
|
CONFIG_IBM_EMAC_SKBRES=0
|
||||||
|
CONFIG_NET_PCI=y
|
||||||
|
# CONFIG_PCNET32 is not set
|
||||||
|
# CONFIG_AMD8111_ETH is not set
|
||||||
|
# CONFIG_ADAPTEC_STARFIRE is not set
|
||||||
|
# CONFIG_B44 is not set
|
||||||
|
# CONFIG_FORCEDETH is not set
|
||||||
|
# CONFIG_DGRS is not set
|
||||||
|
CONFIG_EEPRO100=y
|
||||||
|
# CONFIG_E100 is not set
|
||||||
|
# CONFIG_FEALNX is not set
|
||||||
|
CONFIG_NATSEMI=y
|
||||||
|
# CONFIG_NE2K_PCI is not set
|
||||||
|
# CONFIG_8139CP is not set
|
||||||
|
# CONFIG_8139TOO is not set
|
||||||
|
# CONFIG_SIS900 is not set
|
||||||
|
# CONFIG_EPIC100 is not set
|
||||||
|
# CONFIG_SUNDANCE is not set
|
||||||
|
# CONFIG_TLAN is not set
|
||||||
|
# CONFIG_VIA_RHINE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (1000 Mbit)
|
||||||
|
#
|
||||||
|
# CONFIG_ACENIC is not set
|
||||||
|
# CONFIG_DL2K is not set
|
||||||
|
CONFIG_E1000=y
|
||||||
|
# CONFIG_E1000_NAPI is not set
|
||||||
|
# CONFIG_NS83820 is not set
|
||||||
|
# CONFIG_HAMACHI is not set
|
||||||
|
# CONFIG_YELLOWFIN is not set
|
||||||
|
# CONFIG_R8169 is not set
|
||||||
|
# CONFIG_SKGE is not set
|
||||||
|
# CONFIG_SK98LIN is not set
|
||||||
|
# CONFIG_VIA_VELOCITY is not set
|
||||||
|
# CONFIG_TIGON3 is not set
|
||||||
|
# CONFIG_BNX2 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (10000 Mbit)
|
||||||
|
#
|
||||||
|
# CONFIG_IXGB is not set
|
||||||
|
# CONFIG_S2IO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Token Ring devices
|
||||||
|
#
|
||||||
|
# CONFIG_TR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wireless LAN (non-hamradio)
|
||||||
|
#
|
||||||
|
# CONFIG_NET_RADIO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wan interfaces
|
||||||
|
#
|
||||||
|
# CONFIG_WAN is not set
|
||||||
|
# CONFIG_FDDI is not set
|
||||||
|
# CONFIG_HIPPI is not set
|
||||||
|
# CONFIG_PPP is not set
|
||||||
|
# CONFIG_SLIP is not set
|
||||||
|
# CONFIG_NET_FC is not set
|
||||||
|
# CONFIG_SHAPER is not set
|
||||||
|
# CONFIG_NETCONSOLE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ISDN subsystem
|
||||||
|
#
|
||||||
|
# CONFIG_ISDN is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Telephony Support
|
||||||
|
#
|
||||||
|
# CONFIG_PHONE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input device support
|
||||||
|
#
|
||||||
|
CONFIG_INPUT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Userland interfaces
|
||||||
|
#
|
||||||
|
CONFIG_INPUT_MOUSEDEV=y
|
||||||
|
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||||
|
# CONFIG_INPUT_JOYDEV is not set
|
||||||
|
# CONFIG_INPUT_TSDEV is not set
|
||||||
|
# CONFIG_INPUT_EVDEV is not set
|
||||||
|
# CONFIG_INPUT_EVBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
# CONFIG_INPUT_JOYSTICK is not set
|
||||||
|
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||||
|
# CONFIG_INPUT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware I/O ports
|
||||||
|
#
|
||||||
|
CONFIG_SERIO=y
|
||||||
|
# CONFIG_SERIO_I8042 is not set
|
||||||
|
# CONFIG_SERIO_SERPORT is not set
|
||||||
|
# CONFIG_SERIO_PCIPS2 is not set
|
||||||
|
# CONFIG_SERIO_LIBPS2 is not set
|
||||||
|
# CONFIG_SERIO_RAW is not set
|
||||||
|
# CONFIG_GAMEPORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Character devices
|
||||||
|
#
|
||||||
|
# CONFIG_VT is not set
|
||||||
|
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Serial drivers
|
||||||
|
#
|
||||||
|
CONFIG_SERIAL_8250=y
|
||||||
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||||
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
|
# CONFIG_SERIAL_8250_MANY_PORTS is not set
|
||||||
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
|
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||||
|
# CONFIG_SERIAL_8250_RSA is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Non-8250 serial port support
|
||||||
|
#
|
||||||
|
CONFIG_SERIAL_CORE=y
|
||||||
|
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||||
|
# CONFIG_SERIAL_JSM is not set
|
||||||
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
CONFIG_LEGACY_PTYS=y
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPMI
|
||||||
|
#
|
||||||
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Cards
|
||||||
|
#
|
||||||
|
# CONFIG_WATCHDOG is not set
|
||||||
|
# CONFIG_NVRAM is not set
|
||||||
|
# CONFIG_GEN_RTC is not set
|
||||||
|
# CONFIG_DTLK is not set
|
||||||
|
# CONFIG_R3964 is not set
|
||||||
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ftape, the floppy tape device driver
|
||||||
|
#
|
||||||
|
# CONFIG_AGP is not set
|
||||||
|
# CONFIG_DRM is not set
|
||||||
|
# CONFIG_RAW_DRIVER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TPM devices
|
||||||
|
#
|
||||||
|
# CONFIG_TCG_TPM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C support
|
||||||
|
#
|
||||||
|
# CONFIG_I2C is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dallas's 1-wire bus
|
||||||
|
#
|
||||||
|
# CONFIG_W1 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Misc devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multimedia devices
|
||||||
|
#
|
||||||
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Digital Video Broadcasting Devices
|
||||||
|
#
|
||||||
|
# CONFIG_DVB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Graphics support
|
||||||
|
#
|
||||||
|
# CONFIG_FB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sound
|
||||||
|
#
|
||||||
|
# CONFIG_SOUND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB support
|
||||||
|
#
|
||||||
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
|
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_DEBUG=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous USB options
|
||||||
|
#
|
||||||
|
# CONFIG_USB_DEVICEFS is not set
|
||||||
|
# CONFIG_USB_BANDWIDTH is not set
|
||||||
|
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||||
|
# CONFIG_USB_OTG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Host Controller Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_USB_EHCI_HCD is not set
|
||||||
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
|
# CONFIG_USB_OHCI_HCD is not set
|
||||||
|
# CONFIG_USB_UHCI_HCD is not set
|
||||||
|
# CONFIG_USB_SL811_HCD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Device Class drivers
|
||||||
|
#
|
||||||
|
# CONFIG_USB_BLUETOOTH_TTY is not set
|
||||||
|
# CONFIG_USB_ACM is not set
|
||||||
|
# CONFIG_USB_PRINTER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||||
|
#
|
||||||
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Input Devices
|
||||||
|
#
|
||||||
|
# CONFIG_USB_HID is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB HID Boot Protocol drivers
|
||||||
|
#
|
||||||
|
# CONFIG_USB_KBD is not set
|
||||||
|
# CONFIG_USB_MOUSE is not set
|
||||||
|
# CONFIG_USB_AIPTEK is not set
|
||||||
|
# CONFIG_USB_WACOM is not set
|
||||||
|
# CONFIG_USB_ACECAD is not set
|
||||||
|
# CONFIG_USB_KBTAB is not set
|
||||||
|
# CONFIG_USB_POWERMATE is not set
|
||||||
|
# CONFIG_USB_MTOUCH is not set
|
||||||
|
# CONFIG_USB_ITMTOUCH is not set
|
||||||
|
# CONFIG_USB_EGALAX is not set
|
||||||
|
# CONFIG_USB_XPAD is not set
|
||||||
|
# CONFIG_USB_ATI_REMOTE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Imaging devices
|
||||||
|
#
|
||||||
|
# CONFIG_USB_MDC800 is not set
|
||||||
|
# CONFIG_USB_MICROTEK is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Multimedia devices
|
||||||
|
#
|
||||||
|
# CONFIG_USB_DABUSB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Video4Linux support is needed for USB Multimedia device support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Network Adapters
|
||||||
|
#
|
||||||
|
# CONFIG_USB_CATC is not set
|
||||||
|
# CONFIG_USB_KAWETH is not set
|
||||||
|
CONFIG_USB_PEGASUS=y
|
||||||
|
# CONFIG_USB_RTL8150 is not set
|
||||||
|
# CONFIG_USB_USBNET is not set
|
||||||
|
CONFIG_USB_MON=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB port drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Serial Converter support
|
||||||
|
#
|
||||||
|
# CONFIG_USB_SERIAL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Miscellaneous drivers
|
||||||
|
#
|
||||||
|
# CONFIG_USB_EMI62 is not set
|
||||||
|
# CONFIG_USB_EMI26 is not set
|
||||||
|
# CONFIG_USB_AUERSWALD is not set
|
||||||
|
# CONFIG_USB_RIO500 is not set
|
||||||
|
# CONFIG_USB_LEGOTOWER is not set
|
||||||
|
# CONFIG_USB_LCD is not set
|
||||||
|
# CONFIG_USB_LED is not set
|
||||||
|
# CONFIG_USB_CYTHERM is not set
|
||||||
|
# CONFIG_USB_PHIDGETKIT is not set
|
||||||
|
# CONFIG_USB_PHIDGETSERVO is not set
|
||||||
|
# CONFIG_USB_IDMOUSE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB DSL modem support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Gadget Support
|
||||||
|
#
|
||||||
|
# CONFIG_USB_GADGET is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# MMC/SD Card support
|
||||||
|
#
|
||||||
|
# CONFIG_MMC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# InfiniBand support
|
||||||
|
#
|
||||||
|
# CONFIG_INFINIBAND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SN Devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# File systems
|
||||||
|
#
|
||||||
|
# CONFIG_EXT2_FS is not set
|
||||||
|
# CONFIG_EXT3_FS is not set
|
||||||
|
# CONFIG_JBD is not set
|
||||||
|
# CONFIG_REISERFS_FS is not set
|
||||||
|
# CONFIG_JFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# XFS support
|
||||||
|
#
|
||||||
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_MINIX_FS is not set
|
||||||
|
# CONFIG_ROMFS_FS is not set
|
||||||
|
# CONFIG_QUOTA is not set
|
||||||
|
CONFIG_DNOTIFY=y
|
||||||
|
# CONFIG_AUTOFS_FS is not set
|
||||||
|
# CONFIG_AUTOFS4_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# CD-ROM/DVD Filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_ISO9660_FS is not set
|
||||||
|
# CONFIG_UDF_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DOS/FAT/NT Filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_MSDOS_FS is not set
|
||||||
|
# CONFIG_VFAT_FS is not set
|
||||||
|
# CONFIG_NTFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pseudo filesystems
|
||||||
|
#
|
||||||
|
CONFIG_PROC_FS=y
|
||||||
|
CONFIG_PROC_KCORE=y
|
||||||
|
CONFIG_SYSFS=y
|
||||||
|
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||||
|
# CONFIG_TMPFS is not set
|
||||||
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
|
CONFIG_RAMFS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_ADFS_FS is not set
|
||||||
|
# CONFIG_AFFS_FS is not set
|
||||||
|
# CONFIG_HFS_FS is not set
|
||||||
|
# CONFIG_HFSPLUS_FS is not set
|
||||||
|
# CONFIG_BEFS_FS is not set
|
||||||
|
# CONFIG_BFS_FS is not set
|
||||||
|
# CONFIG_EFS_FS is not set
|
||||||
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_VXFS_FS is not set
|
||||||
|
# CONFIG_HPFS_FS is not set
|
||||||
|
# CONFIG_QNX4FS_FS is not set
|
||||||
|
# CONFIG_SYSV_FS is not set
|
||||||
|
# CONFIG_UFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network File Systems
|
||||||
|
#
|
||||||
|
CONFIG_NFS_FS=y
|
||||||
|
# CONFIG_NFS_V3 is not set
|
||||||
|
# CONFIG_NFS_V4 is not set
|
||||||
|
# CONFIG_NFS_DIRECTIO is not set
|
||||||
|
# CONFIG_NFSD is not set
|
||||||
|
CONFIG_ROOT_NFS=y
|
||||||
|
CONFIG_LOCKD=y
|
||||||
|
CONFIG_NFS_COMMON=y
|
||||||
|
CONFIG_SUNRPC=y
|
||||||
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
|
# CONFIG_SMB_FS is not set
|
||||||
|
# CONFIG_CIFS is not set
|
||||||
|
# CONFIG_NCP_FS is not set
|
||||||
|
# CONFIG_CODA_FS is not set
|
||||||
|
# CONFIG_AFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Partition Types
|
||||||
|
#
|
||||||
|
# CONFIG_PARTITION_ADVANCED is not set
|
||||||
|
CONFIG_MSDOS_PARTITION=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Native Language Support
|
||||||
|
#
|
||||||
|
# CONFIG_NLS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Library routines
|
||||||
|
#
|
||||||
|
# CONFIG_CRC_CCITT is not set
|
||||||
|
CONFIG_CRC32=y
|
||||||
|
# CONFIG_LIBCRC32C is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Profiling support
|
||||||
|
#
|
||||||
|
# CONFIG_PROFILING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kernel hacking
|
||||||
|
#
|
||||||
|
# CONFIG_PRINTK_TIME is not set
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
|
# CONFIG_SCHEDSTATS is not set
|
||||||
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
|
CONFIG_DEBUG_INFO=y
|
||||||
|
# CONFIG_DEBUG_FS is not set
|
||||||
|
# CONFIG_KGDB is not set
|
||||||
|
# CONFIG_XMON is not set
|
||||||
|
CONFIG_BDI_SWITCH=y
|
||||||
|
# CONFIG_SERIAL_TEXT_DEBUG is not set
|
||||||
|
CONFIG_PPC_OCP=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Security options
|
||||||
|
#
|
||||||
|
# CONFIG_KEYS is not set
|
||||||
|
# CONFIG_SECURITY is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cryptographic options
|
||||||
|
#
|
||||||
|
# CONFIG_CRYPTO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware crypto devices
|
||||||
|
#
|
|
@ -852,6 +852,26 @@ struct cpu_spec cpu_specs[] = {
|
||||||
|
|
||||||
#endif /* CONFIG_40x */
|
#endif /* CONFIG_40x */
|
||||||
#ifdef CONFIG_44x
|
#ifdef CONFIG_44x
|
||||||
|
{
|
||||||
|
.pvr_mask = 0xf0000fff,
|
||||||
|
.pvr_value = 0x40000850,
|
||||||
|
.cpu_name = "440EP Rev. A",
|
||||||
|
.cpu_features = CPU_FTR_SPLIT_ID_CACHE |
|
||||||
|
CPU_FTR_USE_TB,
|
||||||
|
.cpu_user_features = COMMON_PPC, /* 440EP has an FPU */
|
||||||
|
.icache_bsize = 32,
|
||||||
|
.dcache_bsize = 32,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.pvr_mask = 0xf0000fff,
|
||||||
|
.pvr_value = 0x400008d3,
|
||||||
|
.cpu_name = "440EP Rev. B",
|
||||||
|
.cpu_features = CPU_FTR_SPLIT_ID_CACHE |
|
||||||
|
CPU_FTR_USE_TB,
|
||||||
|
.cpu_user_features = COMMON_PPC, /* 440EP has an FPU */
|
||||||
|
.icache_bsize = 32,
|
||||||
|
.dcache_bsize = 32,
|
||||||
|
},
|
||||||
{ /* 440GP Rev. B */
|
{ /* 440GP Rev. B */
|
||||||
.pvr_mask = 0xf0000fff,
|
.pvr_mask = 0xf0000fff,
|
||||||
.pvr_value = 0x40000440,
|
.pvr_value = 0x40000440,
|
||||||
|
|
|
@ -215,6 +215,7 @@ syscall_dotrace_cont:
|
||||||
lwzx r10,r10,r0 /* Fetch system call handler [ptr] */
|
lwzx r10,r10,r0 /* Fetch system call handler [ptr] */
|
||||||
mtlr r10
|
mtlr r10
|
||||||
addi r9,r1,STACK_FRAME_OVERHEAD
|
addi r9,r1,STACK_FRAME_OVERHEAD
|
||||||
|
PPC440EP_ERR42
|
||||||
blrl /* Call handler */
|
blrl /* Call handler */
|
||||||
.globl ret_from_syscall
|
.globl ret_from_syscall
|
||||||
ret_from_syscall:
|
ret_from_syscall:
|
||||||
|
|
|
@ -179,24 +179,26 @@ skpinv: addi r4,r4,1 /* Increment */
|
||||||
4:
|
4:
|
||||||
#ifdef CONFIG_SERIAL_TEXT_DEBUG
|
#ifdef CONFIG_SERIAL_TEXT_DEBUG
|
||||||
/*
|
/*
|
||||||
* Add temporary UART mapping for early debug. This
|
* Add temporary UART mapping for early debug.
|
||||||
* mapping must be identical to that used by the early
|
* We can map UART registers wherever we want as long as they don't
|
||||||
* bootloader code since the same asm/serial.h parameters
|
* interfere with other system mappings (e.g. with pinned entries).
|
||||||
* are used for polled operation.
|
* For an example of how we handle this - see ocotea.h. --ebs
|
||||||
*/
|
*/
|
||||||
/* pageid fields */
|
/* pageid fields */
|
||||||
lis r3,UART0_IO_BASE@h
|
lis r3,UART0_IO_BASE@h
|
||||||
ori r3,r3,PPC44x_TLB_VALID | PPC44x_TLB_256M
|
ori r3,r3,PPC44x_TLB_VALID | PPC44x_TLB_4K
|
||||||
|
|
||||||
/* xlat fields */
|
/* xlat fields */
|
||||||
lis r4,UART0_PHYS_IO_BASE@h /* RPN depends on SoC */
|
lis r4,UART0_PHYS_IO_BASE@h /* RPN depends on SoC */
|
||||||
|
#ifndef CONFIG_440EP
|
||||||
ori r4,r4,0x0001 /* ERPN is 1 for second 4GB page */
|
ori r4,r4,0x0001 /* ERPN is 1 for second 4GB page */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* attrib fields */
|
/* attrib fields */
|
||||||
li r5,0
|
li r5,0
|
||||||
ori r5,r5,(PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_I | PPC44x_TLB_G)
|
ori r5,r5,(PPC44x_TLB_SW | PPC44x_TLB_SR | PPC44x_TLB_I | PPC44x_TLB_G)
|
||||||
|
|
||||||
li r0,1 /* TLB slot 1 */
|
li r0,0 /* TLB slot 0 */
|
||||||
|
|
||||||
tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */
|
tlbwe r3,r0,PPC44x_TLB_PAGEID /* Load the pageid fields */
|
||||||
tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields */
|
tlbwe r4,r0,PPC44x_TLB_XLAT /* Load the translation fields */
|
||||||
|
@ -228,6 +230,16 @@ skpinv: addi r4,r4,1 /* Increment */
|
||||||
lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
|
lis r4,interrupt_base@h /* IVPR only uses the high 16-bits */
|
||||||
mtspr SPRN_IVPR,r4
|
mtspr SPRN_IVPR,r4
|
||||||
|
|
||||||
|
#ifdef CONFIG_440EP
|
||||||
|
/* Clear DAPUIB flag in CCR0 (enable APU between CPU and FPU) */
|
||||||
|
mfspr r2,SPRN_CCR0
|
||||||
|
lis r3,0xffef
|
||||||
|
ori r3,r3,0xffff
|
||||||
|
and r2,r2,r3
|
||||||
|
mtspr SPRN_CCR0,r2
|
||||||
|
isync
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is where the main kernel code starts.
|
* This is where the main kernel code starts.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1145,6 +1145,7 @@ _GLOBAL(kernel_thread)
|
||||||
stwu r0,-16(r1)
|
stwu r0,-16(r1)
|
||||||
mtlr r30 /* fn addr in lr */
|
mtlr r30 /* fn addr in lr */
|
||||||
mr r3,r31 /* load arg and call fn */
|
mr r3,r31 /* load arg and call fn */
|
||||||
|
PPC440EP_ERR42
|
||||||
blrl
|
blrl
|
||||||
li r0,__NR_exit /* exit if function returns */
|
li r0,__NR_exit /* exit if function returns */
|
||||||
li r3,0
|
li r3,0
|
||||||
|
@ -1451,3 +1452,6 @@ _GLOBAL(sys_call_table)
|
||||||
.long sys_waitid
|
.long sys_waitid
|
||||||
.long sys_ioprio_set
|
.long sys_ioprio_set
|
||||||
.long sys_ioprio_get
|
.long sys_ioprio_get
|
||||||
|
.long sys_inotify_init /* 275 */
|
||||||
|
.long sys_inotify_add_watch
|
||||||
|
.long sys_inotify_rm_watch
|
||||||
|
|
|
@ -160,6 +160,21 @@ void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
||||||
|
|
||||||
|
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
|
||||||
|
struct pci_bus_region *region)
|
||||||
|
{
|
||||||
|
unsigned long offset = 0;
|
||||||
|
struct pci_controller *hose = dev->sysdata;
|
||||||
|
|
||||||
|
if (hose && res->flags & IORESOURCE_IO)
|
||||||
|
offset = (unsigned long)hose->io_base_virt - isa_io_base;
|
||||||
|
else if (hose && res->flags & IORESOURCE_MEM)
|
||||||
|
offset = hose->pci_mem_offset;
|
||||||
|
res->start = region->start + offset;
|
||||||
|
res->end = region->end + offset;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(pcibios_bus_to_resource);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to avoid collisions with `mirrored' VGA ports
|
* We need to avoid collisions with `mirrored' VGA ports
|
||||||
* and other strange ISA hardware, so we always want the
|
* and other strange ISA hardware, so we always want the
|
||||||
|
|
|
@ -324,7 +324,7 @@ EXPORT_SYMBOL(__res);
|
||||||
|
|
||||||
EXPORT_SYMBOL(next_mmu_context);
|
EXPORT_SYMBOL(next_mmu_context);
|
||||||
EXPORT_SYMBOL(set_context);
|
EXPORT_SYMBOL(set_context);
|
||||||
EXPORT_SYMBOL(handle_mm_fault); /* For MOL */
|
EXPORT_SYMBOL_GPL(__handle_mm_fault); /* For MOL */
|
||||||
EXPORT_SYMBOL(disarm_decr);
|
EXPORT_SYMBOL(disarm_decr);
|
||||||
#ifdef CONFIG_PPC_STD_MMU
|
#ifdef CONFIG_PPC_STD_MMU
|
||||||
extern long mol_trampoline;
|
extern long mol_trampoline;
|
||||||
|
|
|
@ -68,6 +68,11 @@ choice
|
||||||
depends on 44x
|
depends on 44x
|
||||||
default EBONY
|
default EBONY
|
||||||
|
|
||||||
|
config BAMBOO
|
||||||
|
bool "Bamboo"
|
||||||
|
help
|
||||||
|
This option enables support for the IBM PPC440EP evaluation board.
|
||||||
|
|
||||||
config EBONY
|
config EBONY
|
||||||
bool "Ebony"
|
bool "Ebony"
|
||||||
help
|
help
|
||||||
|
@ -98,6 +103,12 @@ config NP405H
|
||||||
depends on ASH
|
depends on ASH
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config 440EP
|
||||||
|
bool
|
||||||
|
depends on BAMBOO
|
||||||
|
select PPC_FPU
|
||||||
|
default y
|
||||||
|
|
||||||
config 440GP
|
config 440GP
|
||||||
bool
|
bool
|
||||||
depends on EBONY
|
depends on EBONY
|
||||||
|
@ -115,7 +126,7 @@ config 440SP
|
||||||
|
|
||||||
config 440
|
config 440
|
||||||
bool
|
bool
|
||||||
depends on 440GP || 440SP
|
depends on 440GP || 440SP || 440EP
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config 440A
|
config 440A
|
||||||
|
@ -123,6 +134,11 @@ config 440A
|
||||||
depends on 440GX
|
depends on 440GX
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config IBM440EP_ERR42
|
||||||
|
bool
|
||||||
|
depends on 440EP
|
||||||
|
default y
|
||||||
|
|
||||||
# All 405-based cores up until the 405GPR and 405EP have this errata.
|
# All 405-based cores up until the 405GPR and 405EP have this errata.
|
||||||
config IBM405_ERR77
|
config IBM405_ERR77
|
||||||
bool
|
bool
|
||||||
|
@ -142,7 +158,7 @@ config BOOKE
|
||||||
|
|
||||||
config IBM_OCP
|
config IBM_OCP
|
||||||
bool
|
bool
|
||||||
depends on ASH || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
|
depends on ASH || BAMBOO || BUBINGA || CPCI405 || EBONY || EP405 || LUAN || OCOTEA || REDWOOD_5 || REDWOOD_6 || SYCAMORE || WALNUT
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config XILINX_OCP
|
config XILINX_OCP
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
# Makefile for the PowerPC 4xx linux kernel.
|
# Makefile for the PowerPC 4xx linux kernel.
|
||||||
|
|
||||||
obj-$(CONFIG_ASH) += ash.o
|
obj-$(CONFIG_ASH) += ash.o
|
||||||
|
obj-$(CONFIG_BAMBOO) += bamboo.o
|
||||||
obj-$(CONFIG_CPCI405) += cpci405.o
|
obj-$(CONFIG_CPCI405) += cpci405.o
|
||||||
obj-$(CONFIG_EBONY) += ebony.o
|
obj-$(CONFIG_EBONY) += ebony.o
|
||||||
obj-$(CONFIG_EP405) += ep405.o
|
obj-$(CONFIG_EP405) += ep405.o
|
||||||
|
@ -19,6 +20,7 @@ obj-$(CONFIG_405GP) += ibm405gp.o
|
||||||
obj-$(CONFIG_REDWOOD_5) += ibmstb4.o
|
obj-$(CONFIG_REDWOOD_5) += ibmstb4.o
|
||||||
obj-$(CONFIG_NP405H) += ibmnp405h.o
|
obj-$(CONFIG_NP405H) += ibmnp405h.o
|
||||||
obj-$(CONFIG_REDWOOD_6) += ibmstbx25.o
|
obj-$(CONFIG_REDWOOD_6) += ibmstbx25.o
|
||||||
|
obj-$(CONFIG_440EP) += ibm440ep.o
|
||||||
obj-$(CONFIG_440GP) += ibm440gp.o
|
obj-$(CONFIG_440GP) += ibm440gp.o
|
||||||
obj-$(CONFIG_440GX) += ibm440gx.o
|
obj-$(CONFIG_440GX) += ibm440gx.o
|
||||||
obj-$(CONFIG_440SP) += ibm440sp.o
|
obj-$(CONFIG_440SP) += ibm440sp.o
|
||||||
|
|
|
@ -0,0 +1,427 @@
|
||||||
|
/*
|
||||||
|
* arch/ppc/platforms/4xx/bamboo.c
|
||||||
|
*
|
||||||
|
* Bamboo board specific routines
|
||||||
|
*
|
||||||
|
* Wade Farnsworth <wfarnsworth@mvista.com>
|
||||||
|
* Copyright 2004 MontaVista Software Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/stddef.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/reboot.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/kdev_t.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/major.h>
|
||||||
|
#include <linux/blkdev.h>
|
||||||
|
#include <linux/console.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/ide.h>
|
||||||
|
#include <linux/initrd.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
#include <linux/seq_file.h>
|
||||||
|
#include <linux/root_dev.h>
|
||||||
|
#include <linux/tty.h>
|
||||||
|
#include <linux/serial.h>
|
||||||
|
#include <linux/serial_core.h>
|
||||||
|
#include <linux/ethtool.h>
|
||||||
|
|
||||||
|
#include <asm/system.h>
|
||||||
|
#include <asm/pgtable.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
#include <asm/dma.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/machdep.h>
|
||||||
|
#include <asm/ocp.h>
|
||||||
|
#include <asm/pci-bridge.h>
|
||||||
|
#include <asm/time.h>
|
||||||
|
#include <asm/todc.h>
|
||||||
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/ppc4xx_pic.h>
|
||||||
|
#include <asm/ppcboot.h>
|
||||||
|
|
||||||
|
#include <syslib/gen550.h>
|
||||||
|
#include <syslib/ibm440gx_common.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a horrible kludge, we eventually need to abstract this
|
||||||
|
* generic PHY stuff, so the standard phy mode defines can be
|
||||||
|
* easily used from arch code.
|
||||||
|
*/
|
||||||
|
#include "../../../../drivers/net/ibm_emac/ibm_emac_phy.h"
|
||||||
|
|
||||||
|
bd_t __res;
|
||||||
|
|
||||||
|
static struct ibm44x_clocks clocks __initdata;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bamboo external IRQ triggering/polarity settings
|
||||||
|
*/
|
||||||
|
unsigned char ppc4xx_uic_ext_irq_cfg[] __initdata = {
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ0: Ethernet transceiver */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_POSITIVE), /* IRQ1: Expansion connector */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ2: PCI slot 0 */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ3: PCI slot 1 */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ4: PCI slot 2 */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ5: PCI slot 3 */
|
||||||
|
(IRQ_SENSE_EDGE | IRQ_POLARITY_NEGATIVE), /* IRQ6: SMI pushbutton */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ7: EXT */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ8: EXT */
|
||||||
|
(IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* IRQ9: EXT */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
bamboo_calibrate_decr(void)
|
||||||
|
{
|
||||||
|
unsigned int freq;
|
||||||
|
|
||||||
|
if (mfspr(SPRN_CCR1) & CCR1_TCS)
|
||||||
|
freq = BAMBOO_TMRCLK;
|
||||||
|
else
|
||||||
|
freq = clocks.cpu;
|
||||||
|
|
||||||
|
ibm44x_calibrate_decr(freq);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bamboo_show_cpuinfo(struct seq_file *m)
|
||||||
|
{
|
||||||
|
seq_printf(m, "vendor\t\t: IBM\n");
|
||||||
|
seq_printf(m, "machine\t\t: PPC440EP EVB (Bamboo)\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
bamboo_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
|
||||||
|
{
|
||||||
|
static char pci_irq_table[][4] =
|
||||||
|
/*
|
||||||
|
* PCI IDSEL/INTPIN->INTLINE
|
||||||
|
* A B C D
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
{ 28, 28, 28, 28 }, /* IDSEL 1 - PCI Slot 0 */
|
||||||
|
{ 27, 27, 27, 27 }, /* IDSEL 2 - PCI Slot 1 */
|
||||||
|
{ 26, 26, 26, 26 }, /* IDSEL 3 - PCI Slot 2 */
|
||||||
|
{ 25, 25, 25, 25 }, /* IDSEL 4 - PCI Slot 3 */
|
||||||
|
};
|
||||||
|
|
||||||
|
const long min_idsel = 1, max_idsel = 4, irqs_per_slot = 4;
|
||||||
|
return PCI_IRQ_TABLE_LOOKUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init bamboo_set_emacdata(void)
|
||||||
|
{
|
||||||
|
unsigned char * selection1_base;
|
||||||
|
struct ocp_def *def;
|
||||||
|
struct ocp_func_emac_data *emacdata;
|
||||||
|
u8 selection1_val;
|
||||||
|
int mode;
|
||||||
|
|
||||||
|
selection1_base = ioremap64(BAMBOO_FPGA_SELECTION1_REG_ADDR, 16);
|
||||||
|
selection1_val = readb(selection1_base);
|
||||||
|
iounmap((void *) selection1_base);
|
||||||
|
if (BAMBOO_SEL_MII(selection1_val))
|
||||||
|
mode = PHY_MODE_MII;
|
||||||
|
else if (BAMBOO_SEL_RMII(selection1_val))
|
||||||
|
mode = PHY_MODE_RMII;
|
||||||
|
else
|
||||||
|
mode = PHY_MODE_SMII;
|
||||||
|
|
||||||
|
/* Set mac_addr and phy mode for each EMAC */
|
||||||
|
|
||||||
|
def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 0);
|
||||||
|
emacdata = def->additions;
|
||||||
|
memcpy(emacdata->mac_addr, __res.bi_enetaddr, 6);
|
||||||
|
emacdata->phy_mode = mode;
|
||||||
|
|
||||||
|
def = ocp_get_one_device(OCP_VENDOR_IBM, OCP_FUNC_EMAC, 1);
|
||||||
|
emacdata = def->additions;
|
||||||
|
memcpy(emacdata->mac_addr, __res.bi_enet1addr, 6);
|
||||||
|
emacdata->phy_mode = mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bamboo_exclude_device(unsigned char bus, unsigned char devfn)
|
||||||
|
{
|
||||||
|
return (bus == 0 && devfn == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define PCI_READW(offset) \
|
||||||
|
(readw((void *)((u32)pci_reg_base+offset)))
|
||||||
|
|
||||||
|
#define PCI_WRITEW(value, offset) \
|
||||||
|
(writew(value, (void *)((u32)pci_reg_base+offset)))
|
||||||
|
|
||||||
|
#define PCI_WRITEL(value, offset) \
|
||||||
|
(writel(value, (void *)((u32)pci_reg_base+offset)))
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
bamboo_setup_pci(void)
|
||||||
|
{
|
||||||
|
void *pci_reg_base;
|
||||||
|
unsigned long memory_size;
|
||||||
|
memory_size = ppc_md.find_end_of_memory();
|
||||||
|
|
||||||
|
pci_reg_base = ioremap64(BAMBOO_PCIL0_BASE, BAMBOO_PCIL0_SIZE);
|
||||||
|
|
||||||
|
/* Enable PCI I/O, Mem, and Busmaster cycles */
|
||||||
|
PCI_WRITEW(PCI_READW(PCI_COMMAND) |
|
||||||
|
PCI_COMMAND_MEMORY |
|
||||||
|
PCI_COMMAND_MASTER, PCI_COMMAND);
|
||||||
|
|
||||||
|
/* Disable region first */
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM0MA);
|
||||||
|
|
||||||
|
/* PLB starting addr: 0x00000000A0000000 */
|
||||||
|
PCI_WRITEL(BAMBOO_PCI_PHY_MEM_BASE, BAMBOO_PCIL0_PMM0LA);
|
||||||
|
|
||||||
|
/* PCI start addr, 0xA0000000 (PCI Address) */
|
||||||
|
PCI_WRITEL(BAMBOO_PCI_MEM_BASE, BAMBOO_PCIL0_PMM0PCILA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM0PCIHA);
|
||||||
|
|
||||||
|
/* Enable no pre-fetch, enable region */
|
||||||
|
PCI_WRITEL(((0xffffffff -
|
||||||
|
(BAMBOO_PCI_UPPER_MEM - BAMBOO_PCI_MEM_BASE)) | 0x01),
|
||||||
|
BAMBOO_PCIL0_PMM0MA);
|
||||||
|
|
||||||
|
/* Disable region one */
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM1MA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM1LA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM1PCILA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM1PCIHA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM1MA);
|
||||||
|
|
||||||
|
/* Disable region two */
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM2MA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM2LA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM2PCILA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM2PCIHA);
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PMM2MA);
|
||||||
|
|
||||||
|
/* Now configure the PCI->PLB windows, we only use PTM1
|
||||||
|
*
|
||||||
|
* For Inbound flow, set the window size to all available memory
|
||||||
|
* This is required because if size is smaller,
|
||||||
|
* then Eth/PCI DD would fail as PCI card not able to access
|
||||||
|
* the memory allocated by DD.
|
||||||
|
*/
|
||||||
|
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PTM1MS); /* disabled region 1 */
|
||||||
|
PCI_WRITEL(0, BAMBOO_PCIL0_PTM1LA); /* begin of address map */
|
||||||
|
|
||||||
|
memory_size = 1 << fls(memory_size - 1);
|
||||||
|
|
||||||
|
/* Size low + Enabled */
|
||||||
|
PCI_WRITEL((0xffffffff - (memory_size - 1)) | 0x1, BAMBOO_PCIL0_PTM1MS);
|
||||||
|
|
||||||
|
eieio();
|
||||||
|
iounmap(pci_reg_base);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
bamboo_setup_hose(void)
|
||||||
|
{
|
||||||
|
unsigned int bar_response, bar;
|
||||||
|
struct pci_controller *hose;
|
||||||
|
|
||||||
|
bamboo_setup_pci();
|
||||||
|
|
||||||
|
hose = pcibios_alloc_controller();
|
||||||
|
|
||||||
|
if (!hose)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hose->first_busno = 0;
|
||||||
|
hose->last_busno = 0xff;
|
||||||
|
|
||||||
|
hose->pci_mem_offset = BAMBOO_PCI_MEM_OFFSET;
|
||||||
|
|
||||||
|
pci_init_resource(&hose->io_resource,
|
||||||
|
BAMBOO_PCI_LOWER_IO,
|
||||||
|
BAMBOO_PCI_UPPER_IO,
|
||||||
|
IORESOURCE_IO,
|
||||||
|
"PCI host bridge");
|
||||||
|
|
||||||
|
pci_init_resource(&hose->mem_resources[0],
|
||||||
|
BAMBOO_PCI_LOWER_MEM,
|
||||||
|
BAMBOO_PCI_UPPER_MEM,
|
||||||
|
IORESOURCE_MEM,
|
||||||
|
"PCI host bridge");
|
||||||
|
|
||||||
|
ppc_md.pci_exclude_device = bamboo_exclude_device;
|
||||||
|
|
||||||
|
hose->io_space.start = BAMBOO_PCI_LOWER_IO;
|
||||||
|
hose->io_space.end = BAMBOO_PCI_UPPER_IO;
|
||||||
|
hose->mem_space.start = BAMBOO_PCI_LOWER_MEM;
|
||||||
|
hose->mem_space.end = BAMBOO_PCI_UPPER_MEM;
|
||||||
|
isa_io_base =
|
||||||
|
(unsigned long)ioremap64(BAMBOO_PCI_IO_BASE, BAMBOO_PCI_IO_SIZE);
|
||||||
|
hose->io_base_virt = (void *)isa_io_base;
|
||||||
|
|
||||||
|
setup_indirect_pci(hose,
|
||||||
|
BAMBOO_PCI_CFGA_PLB32,
|
||||||
|
BAMBOO_PCI_CFGD_PLB32);
|
||||||
|
hose->set_cfg_type = 1;
|
||||||
|
|
||||||
|
/* Zero config bars */
|
||||||
|
for (bar = PCI_BASE_ADDRESS_1; bar <= PCI_BASE_ADDRESS_2; bar += 4) {
|
||||||
|
early_write_config_dword(hose, hose->first_busno,
|
||||||
|
PCI_FUNC(hose->first_busno), bar,
|
||||||
|
0x00000000);
|
||||||
|
early_read_config_dword(hose, hose->first_busno,
|
||||||
|
PCI_FUNC(hose->first_busno), bar,
|
||||||
|
&bar_response);
|
||||||
|
}
|
||||||
|
|
||||||
|
hose->last_busno = pciauto_bus_scan(hose, hose->first_busno);
|
||||||
|
|
||||||
|
ppc_md.pci_swizzle = common_swizzle;
|
||||||
|
ppc_md.pci_map_irq = bamboo_map_irq;
|
||||||
|
}
|
||||||
|
|
||||||
|
TODC_ALLOC();
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
bamboo_early_serial_map(void)
|
||||||
|
{
|
||||||
|
struct uart_port port;
|
||||||
|
|
||||||
|
/* Setup ioremapped serial port access */
|
||||||
|
memset(&port, 0, sizeof(port));
|
||||||
|
port.membase = ioremap64(PPC440EP_UART0_ADDR, 8);
|
||||||
|
port.irq = 0;
|
||||||
|
port.uartclk = clocks.uart0;
|
||||||
|
port.regshift = 0;
|
||||||
|
port.iotype = SERIAL_IO_MEM;
|
||||||
|
port.flags = ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST;
|
||||||
|
port.line = 0;
|
||||||
|
|
||||||
|
if (early_serial_setup(&port) != 0) {
|
||||||
|
printk("Early serial init of port 0 failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
||||||
|
/* Configure debug serial access */
|
||||||
|
gen550_init(0, &port);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
port.membase = ioremap64(PPC440EP_UART1_ADDR, 8);
|
||||||
|
port.irq = 1;
|
||||||
|
port.uartclk = clocks.uart1;
|
||||||
|
port.line = 1;
|
||||||
|
|
||||||
|
if (early_serial_setup(&port) != 0) {
|
||||||
|
printk("Early serial init of port 1 failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
||||||
|
/* Configure debug serial access */
|
||||||
|
gen550_init(1, &port);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
port.membase = ioremap64(PPC440EP_UART2_ADDR, 8);
|
||||||
|
port.irq = 3;
|
||||||
|
port.uartclk = clocks.uart2;
|
||||||
|
port.line = 2;
|
||||||
|
|
||||||
|
if (early_serial_setup(&port) != 0) {
|
||||||
|
printk("Early serial init of port 2 failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
||||||
|
/* Configure debug serial access */
|
||||||
|
gen550_init(2, &port);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
port.membase = ioremap64(PPC440EP_UART3_ADDR, 8);
|
||||||
|
port.irq = 4;
|
||||||
|
port.uartclk = clocks.uart3;
|
||||||
|
port.line = 3;
|
||||||
|
|
||||||
|
if (early_serial_setup(&port) != 0) {
|
||||||
|
printk("Early serial init of port 3 failed\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init
|
||||||
|
bamboo_setup_arch(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
bamboo_set_emacdata();
|
||||||
|
|
||||||
|
ibm440gx_get_clocks(&clocks, 33333333, 6 * 1843200);
|
||||||
|
ocp_sys_info.opb_bus_freq = clocks.opb;
|
||||||
|
|
||||||
|
/* Setup TODC access */
|
||||||
|
TODC_INIT(TODC_TYPE_DS1743,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
ioremap64(BAMBOO_RTC_ADDR, BAMBOO_RTC_SIZE),
|
||||||
|
8);
|
||||||
|
|
||||||
|
/* init to some ~sane value until calibrate_delay() runs */
|
||||||
|
loops_per_jiffy = 50000000/HZ;
|
||||||
|
|
||||||
|
/* Setup PCI host bridge */
|
||||||
|
bamboo_setup_hose();
|
||||||
|
|
||||||
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
|
if (initrd_start)
|
||||||
|
ROOT_DEV = Root_RAM0;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ROOT_NFS
|
||||||
|
ROOT_DEV = Root_NFS;
|
||||||
|
#else
|
||||||
|
ROOT_DEV = Root_HDA1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bamboo_early_serial_map();
|
||||||
|
|
||||||
|
/* Identify the system */
|
||||||
|
printk("IBM Bamboo port (MontaVista Software, Inc. (source@mvista.com))\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init platform_init(unsigned long r3, unsigned long r4,
|
||||||
|
unsigned long r5, unsigned long r6, unsigned long r7)
|
||||||
|
{
|
||||||
|
parse_bootinfo(find_bootinfo());
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we were passed in a board information, copy it into the
|
||||||
|
* residual data area.
|
||||||
|
*/
|
||||||
|
if (r3)
|
||||||
|
__res = *(bd_t *)(r3 + KERNELBASE);
|
||||||
|
|
||||||
|
|
||||||
|
ibm44x_platform_init();
|
||||||
|
|
||||||
|
ppc_md.setup_arch = bamboo_setup_arch;
|
||||||
|
ppc_md.show_cpuinfo = bamboo_show_cpuinfo;
|
||||||
|
ppc_md.get_irq = NULL; /* Set in ppc4xx_pic_init() */
|
||||||
|
|
||||||
|
ppc_md.calibrate_decr = bamboo_calibrate_decr;
|
||||||
|
ppc_md.time_init = todc_time_init;
|
||||||
|
ppc_md.set_rtc_time = todc_set_rtc_time;
|
||||||
|
ppc_md.get_rtc_time = todc_get_rtc_time;
|
||||||
|
|
||||||
|
ppc_md.nvram_read_val = todc_direct_read_val;
|
||||||
|
ppc_md.nvram_write_val = todc_direct_write_val;
|
||||||
|
#ifdef CONFIG_KGDB
|
||||||
|
ppc_md.early_serial_map = bamboo_early_serial_map;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
* arch/ppc/platforms/bamboo.h
|
||||||
|
*
|
||||||
|
* Bamboo board definitions
|
||||||
|
*
|
||||||
|
* Wade Farnsworth <wfarnsworth@mvista.com>
|
||||||
|
*
|
||||||
|
* Copyright 2004 MontaVista Software Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
#ifndef __ASM_BAMBOO_H__
|
||||||
|
#define __ASM_BAMBOO_H__
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <platforms/4xx/ibm440ep.h>
|
||||||
|
|
||||||
|
/* F/W TLB mapping used in bootloader glue to reset EMAC */
|
||||||
|
#define PPC44x_EMAC0_MR0 0x0EF600E00
|
||||||
|
|
||||||
|
/* Location of MAC addresses in PIBS image */
|
||||||
|
#define PIBS_FLASH_BASE 0xfff00000
|
||||||
|
#define PIBS_MAC_BASE (PIBS_FLASH_BASE+0xc0400)
|
||||||
|
#define PIBS_MAC_SIZE 0x200
|
||||||
|
#define PIBS_MAC_OFFSET 0x100
|
||||||
|
|
||||||
|
/* Default clock rate */
|
||||||
|
#define BAMBOO_TMRCLK 25000000
|
||||||
|
|
||||||
|
/* RTC/NVRAM location */
|
||||||
|
#define BAMBOO_RTC_ADDR 0x080000000ULL
|
||||||
|
#define BAMBOO_RTC_SIZE 0x2000
|
||||||
|
|
||||||
|
/* FPGA Registers */
|
||||||
|
#define BAMBOO_FPGA_ADDR 0x080002000ULL
|
||||||
|
|
||||||
|
#define BAMBOO_FPGA_CONFIG2_REG_ADDR (BAMBOO_FPGA_ADDR + 0x1)
|
||||||
|
#define BAMBOO_FULL_DUPLEX_EN(x) (x & 0x08)
|
||||||
|
#define BAMBOO_FORCE_100Mbps(x) (x & 0x04)
|
||||||
|
#define BAMBOO_AUTONEGOTIATE(x) (x & 0x02)
|
||||||
|
|
||||||
|
#define BAMBOO_FPGA_SETTING_REG_ADDR (BAMBOO_FPGA_ADDR + 0x3)
|
||||||
|
#define BAMBOO_BOOT_SMALL_FLASH(x) (!(x & 0x80))
|
||||||
|
#define BAMBOO_LARGE_FLASH_EN(x) (!(x & 0x40))
|
||||||
|
#define BAMBOO_BOOT_NAND_FLASH(x) (!(x & 0x20))
|
||||||
|
|
||||||
|
#define BAMBOO_FPGA_SELECTION1_REG_ADDR (BAMBOO_FPGA_ADDR + 0x4)
|
||||||
|
#define BAMBOO_SEL_MII(x) (x & 0x80)
|
||||||
|
#define BAMBOO_SEL_RMII(x) (x & 0x40)
|
||||||
|
#define BAMBOO_SEL_SMII(x) (x & 0x20)
|
||||||
|
|
||||||
|
/* Flash */
|
||||||
|
#define BAMBOO_SMALL_FLASH_LOW 0x087f00000ULL
|
||||||
|
#define BAMBOO_SMALL_FLASH_HIGH 0x0fff00000ULL
|
||||||
|
#define BAMBOO_SMALL_FLASH_SIZE 0x100000
|
||||||
|
#define BAMBOO_LARGE_FLASH_LOW 0x087800000ULL
|
||||||
|
#define BAMBOO_LARGE_FLASH_HIGH1 0x0ff800000ULL
|
||||||
|
#define BAMBOO_LARGE_FLASH_HIGH2 0x0ffc00000ULL
|
||||||
|
#define BAMBOO_LARGE_FLASH_SIZE 0x400000
|
||||||
|
#define BAMBOO_SRAM_LOW 0x087f00000ULL
|
||||||
|
#define BAMBOO_SRAM_HIGH1 0x0fff00000ULL
|
||||||
|
#define BAMBOO_SRAM_HIGH2 0x0ff800000ULL
|
||||||
|
#define BAMBOO_SRAM_SIZE 0x100000
|
||||||
|
#define BAMBOO_NAND_FLASH_REG_ADDR 0x090000000ULL
|
||||||
|
#define BAMBOO_NAND_FLASH_REG_SIZE 0x2000
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Serial port defines
|
||||||
|
*/
|
||||||
|
#define RS_TABLE_SIZE 4
|
||||||
|
|
||||||
|
#define UART0_IO_BASE 0xEF600300
|
||||||
|
#define UART1_IO_BASE 0xEF600400
|
||||||
|
#define UART2_IO_BASE 0xEF600500
|
||||||
|
#define UART3_IO_BASE 0xEF600600
|
||||||
|
|
||||||
|
#define BASE_BAUD 33177600/3/16
|
||||||
|
#define UART0_INT 0
|
||||||
|
#define UART1_INT 1
|
||||||
|
#define UART2_INT 3
|
||||||
|
#define UART3_INT 4
|
||||||
|
|
||||||
|
#define STD_UART_OP(num) \
|
||||||
|
{ 0, BASE_BAUD, 0, UART##num##_INT, \
|
||||||
|
(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \
|
||||||
|
iomem_base: UART##num##_IO_BASE, \
|
||||||
|
io_type: SERIAL_IO_MEM},
|
||||||
|
|
||||||
|
#define SERIAL_PORT_DFNS \
|
||||||
|
STD_UART_OP(0) \
|
||||||
|
STD_UART_OP(1) \
|
||||||
|
STD_UART_OP(2) \
|
||||||
|
STD_UART_OP(3)
|
||||||
|
|
||||||
|
/* PCI support */
|
||||||
|
#define BAMBOO_PCI_CFGA_PLB32 0xeec00000
|
||||||
|
#define BAMBOO_PCI_CFGD_PLB32 0xeec00004
|
||||||
|
|
||||||
|
#define BAMBOO_PCI_IO_BASE 0x00000000e8000000ULL
|
||||||
|
#define BAMBOO_PCI_IO_SIZE 0x00010000
|
||||||
|
#define BAMBOO_PCI_MEM_OFFSET 0x00000000
|
||||||
|
#define BAMBOO_PCI_PHY_MEM_BASE 0x00000000a0000000ULL
|
||||||
|
|
||||||
|
#define BAMBOO_PCI_LOWER_IO 0x00000000
|
||||||
|
#define BAMBOO_PCI_UPPER_IO 0x0000ffff
|
||||||
|
#define BAMBOO_PCI_LOWER_MEM 0xa0000000
|
||||||
|
#define BAMBOO_PCI_UPPER_MEM 0xafffffff
|
||||||
|
#define BAMBOO_PCI_MEM_BASE 0xa0000000
|
||||||
|
|
||||||
|
#define BAMBOO_PCIL0_BASE 0x00000000ef400000ULL
|
||||||
|
#define BAMBOO_PCIL0_SIZE 0x40
|
||||||
|
|
||||||
|
#define BAMBOO_PCIL0_PMM0LA 0x000
|
||||||
|
#define BAMBOO_PCIL0_PMM0MA 0x004
|
||||||
|
#define BAMBOO_PCIL0_PMM0PCILA 0x008
|
||||||
|
#define BAMBOO_PCIL0_PMM0PCIHA 0x00C
|
||||||
|
#define BAMBOO_PCIL0_PMM1LA 0x010
|
||||||
|
#define BAMBOO_PCIL0_PMM1MA 0x014
|
||||||
|
#define BAMBOO_PCIL0_PMM1PCILA 0x018
|
||||||
|
#define BAMBOO_PCIL0_PMM1PCIHA 0x01C
|
||||||
|
#define BAMBOO_PCIL0_PMM2LA 0x020
|
||||||
|
#define BAMBOO_PCIL0_PMM2MA 0x024
|
||||||
|
#define BAMBOO_PCIL0_PMM2PCILA 0x028
|
||||||
|
#define BAMBOO_PCIL0_PMM2PCIHA 0x02C
|
||||||
|
#define BAMBOO_PCIL0_PTM1MS 0x030
|
||||||
|
#define BAMBOO_PCIL0_PTM1LA 0x034
|
||||||
|
#define BAMBOO_PCIL0_PTM2MS 0x038
|
||||||
|
#define BAMBOO_PCIL0_PTM2LA 0x03C
|
||||||
|
|
||||||
|
#endif /* __ASM_BAMBOO_H__ */
|
||||||
|
#endif /* __KERNEL__ */
|
|
@ -7,7 +7,7 @@
|
||||||
* Copyright 2002-2005 MontaVista Software Inc.
|
* Copyright 2002-2005 MontaVista Software Inc.
|
||||||
*
|
*
|
||||||
* Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
|
* Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
|
||||||
* Copyright (c) 2003, 2004 Zultys Technologies
|
* Copyright (c) 2003-2005 Zultys Technologies
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
@ -50,6 +50,7 @@
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/ppc4xx_pic.h>
|
#include <asm/ppc4xx_pic.h>
|
||||||
#include <asm/ppcboot.h>
|
#include <asm/ppcboot.h>
|
||||||
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
#include <syslib/gen550.h>
|
#include <syslib/gen550.h>
|
||||||
#include <syslib/ibm440gp_common.h>
|
#include <syslib/ibm440gp_common.h>
|
||||||
|
@ -248,6 +249,9 @@ ebony_early_serial_map(void)
|
||||||
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
||||||
/* Configure debug serial access */
|
/* Configure debug serial access */
|
||||||
gen550_init(0, &port);
|
gen550_init(0, &port);
|
||||||
|
|
||||||
|
/* Purge TLB entry added in head_44x.S for early serial access */
|
||||||
|
_tlbie(UART0_IO_BASE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
port.membase = ioremap64(PPC440GP_UART1_ADDR, 8);
|
port.membase = ioremap64(PPC440GP_UART1_ADDR, 8);
|
||||||
|
|
|
@ -56,9 +56,18 @@
|
||||||
* Serial port defines
|
* Serial port defines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* OpenBIOS defined UART mappings, used before early_serial_setup */
|
#if defined(__BOOTER__)
|
||||||
|
/* OpenBIOS defined UART mappings, used by bootloader shim */
|
||||||
#define UART0_IO_BASE 0xE0000200
|
#define UART0_IO_BASE 0xE0000200
|
||||||
#define UART1_IO_BASE 0xE0000300
|
#define UART1_IO_BASE 0xE0000300
|
||||||
|
#else
|
||||||
|
/* head_44x.S created UART mapping, used before early_serial_setup.
|
||||||
|
* We cannot use default OpenBIOS UART mappings because they
|
||||||
|
* don't work for configurations with more than 512M RAM. --ebs
|
||||||
|
*/
|
||||||
|
#define UART0_IO_BASE 0xF0000200
|
||||||
|
#define UART1_IO_BASE 0xF0000300
|
||||||
|
#endif
|
||||||
|
|
||||||
/* external Epson SG-615P */
|
/* external Epson SG-615P */
|
||||||
#define BASE_BAUD 691200
|
#define BASE_BAUD 691200
|
||||||
|
@ -66,7 +75,7 @@
|
||||||
#define STD_UART_OP(num) \
|
#define STD_UART_OP(num) \
|
||||||
{ 0, BASE_BAUD, 0, UART##num##_INT, \
|
{ 0, BASE_BAUD, 0, UART##num##_INT, \
|
||||||
(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \
|
(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \
|
||||||
iomem_base: UART##num##_IO_BASE, \
|
iomem_base: (void*)UART##num##_IO_BASE, \
|
||||||
io_type: SERIAL_IO_MEM},
|
io_type: SERIAL_IO_MEM},
|
||||||
|
|
||||||
#define SERIAL_PORT_DFNS \
|
#define SERIAL_PORT_DFNS \
|
||||||
|
|
|
@ -0,0 +1,220 @@
|
||||||
|
/*
|
||||||
|
* arch/ppc/platforms/4xx/ibm440ep.c
|
||||||
|
*
|
||||||
|
* PPC440EP I/O descriptions
|
||||||
|
*
|
||||||
|
* Wade Farnsworth <wfarnsworth@mvista.com>
|
||||||
|
* Copyright 2004 MontaVista Software Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <platforms/4xx/ibm440ep.h>
|
||||||
|
#include <asm/ocp.h>
|
||||||
|
#include <asm/ppc4xx_pic.h>
|
||||||
|
|
||||||
|
static struct ocp_func_emac_data ibm440ep_emac0_def = {
|
||||||
|
.rgmii_idx = -1, /* No RGMII */
|
||||||
|
.rgmii_mux = -1, /* No RGMII */
|
||||||
|
.zmii_idx = 0, /* ZMII device index */
|
||||||
|
.zmii_mux = 0, /* ZMII input of this EMAC */
|
||||||
|
.mal_idx = 0, /* MAL device index */
|
||||||
|
.mal_rx_chan = 0, /* MAL rx channel number */
|
||||||
|
.mal_tx_chan = 0, /* MAL tx channel number */
|
||||||
|
.wol_irq = 61, /* WOL interrupt number */
|
||||||
|
.mdio_idx = -1, /* No shared MDIO */
|
||||||
|
.tah_idx = -1, /* No TAH */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ocp_func_emac_data ibm440ep_emac1_def = {
|
||||||
|
.rgmii_idx = -1, /* No RGMII */
|
||||||
|
.rgmii_mux = -1, /* No RGMII */
|
||||||
|
.zmii_idx = 0, /* ZMII device index */
|
||||||
|
.zmii_mux = 1, /* ZMII input of this EMAC */
|
||||||
|
.mal_idx = 0, /* MAL device index */
|
||||||
|
.mal_rx_chan = 1, /* MAL rx channel number */
|
||||||
|
.mal_tx_chan = 2, /* MAL tx channel number */
|
||||||
|
.wol_irq = 63, /* WOL interrupt number */
|
||||||
|
.mdio_idx = -1, /* No shared MDIO */
|
||||||
|
.tah_idx = -1, /* No TAH */
|
||||||
|
};
|
||||||
|
OCP_SYSFS_EMAC_DATA()
|
||||||
|
|
||||||
|
static struct ocp_func_mal_data ibm440ep_mal0_def = {
|
||||||
|
.num_tx_chans = 4, /* Number of TX channels */
|
||||||
|
.num_rx_chans = 2, /* Number of RX channels */
|
||||||
|
.txeob_irq = 10, /* TX End Of Buffer IRQ */
|
||||||
|
.rxeob_irq = 11, /* RX End Of Buffer IRQ */
|
||||||
|
.txde_irq = 33, /* TX Descriptor Error IRQ */
|
||||||
|
.rxde_irq = 34, /* RX Descriptor Error IRQ */
|
||||||
|
.serr_irq = 32, /* MAL System Error IRQ */
|
||||||
|
};
|
||||||
|
OCP_SYSFS_MAL_DATA()
|
||||||
|
|
||||||
|
static struct ocp_func_iic_data ibm440ep_iic0_def = {
|
||||||
|
.fast_mode = 0, /* Use standad mode (100Khz) */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ocp_func_iic_data ibm440ep_iic1_def = {
|
||||||
|
.fast_mode = 0, /* Use standad mode (100Khz) */
|
||||||
|
};
|
||||||
|
OCP_SYSFS_IIC_DATA()
|
||||||
|
|
||||||
|
struct ocp_def core_ocp[] = {
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_OPB,
|
||||||
|
.index = 0,
|
||||||
|
.paddr = 0x0EF600000ULL,
|
||||||
|
.irq = OCP_IRQ_NA,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_16550,
|
||||||
|
.index = 0,
|
||||||
|
.paddr = PPC440EP_UART0_ADDR,
|
||||||
|
.irq = UART0_INT,
|
||||||
|
.pm = IBM_CPM_UART0,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_16550,
|
||||||
|
.index = 1,
|
||||||
|
.paddr = PPC440EP_UART1_ADDR,
|
||||||
|
.irq = UART1_INT,
|
||||||
|
.pm = IBM_CPM_UART1,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_16550,
|
||||||
|
.index = 2,
|
||||||
|
.paddr = PPC440EP_UART2_ADDR,
|
||||||
|
.irq = UART2_INT,
|
||||||
|
.pm = IBM_CPM_UART2,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_16550,
|
||||||
|
.index = 3,
|
||||||
|
.paddr = PPC440EP_UART3_ADDR,
|
||||||
|
.irq = UART3_INT,
|
||||||
|
.pm = IBM_CPM_UART3,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_IIC,
|
||||||
|
.index = 0,
|
||||||
|
.paddr = 0x0EF600700ULL,
|
||||||
|
.irq = 2,
|
||||||
|
.pm = IBM_CPM_IIC0,
|
||||||
|
.additions = &ibm440ep_iic0_def,
|
||||||
|
.show = &ocp_show_iic_data
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_IIC,
|
||||||
|
.index = 1,
|
||||||
|
.paddr = 0x0EF600800ULL,
|
||||||
|
.irq = 7,
|
||||||
|
.pm = IBM_CPM_IIC1,
|
||||||
|
.additions = &ibm440ep_iic1_def,
|
||||||
|
.show = &ocp_show_iic_data
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_GPIO,
|
||||||
|
.index = 0,
|
||||||
|
.paddr = 0x0EF600B00ULL,
|
||||||
|
.irq = OCP_IRQ_NA,
|
||||||
|
.pm = IBM_CPM_GPIO0,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_GPIO,
|
||||||
|
.index = 1,
|
||||||
|
.paddr = 0x0EF600C00ULL,
|
||||||
|
.irq = OCP_IRQ_NA,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_MAL,
|
||||||
|
.paddr = OCP_PADDR_NA,
|
||||||
|
.irq = OCP_IRQ_NA,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
.additions = &ibm440ep_mal0_def,
|
||||||
|
.show = &ocp_show_mal_data,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_EMAC,
|
||||||
|
.index = 0,
|
||||||
|
.paddr = 0x0EF600E00ULL,
|
||||||
|
.irq = 60,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
.additions = &ibm440ep_emac0_def,
|
||||||
|
.show = &ocp_show_emac_data,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_EMAC,
|
||||||
|
.index = 1,
|
||||||
|
.paddr = 0x0EF600F00ULL,
|
||||||
|
.irq = 62,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
.additions = &ibm440ep_emac1_def,
|
||||||
|
.show = &ocp_show_emac_data,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_IBM,
|
||||||
|
.function = OCP_FUNC_ZMII,
|
||||||
|
.paddr = 0x0EF600D00ULL,
|
||||||
|
.irq = OCP_IRQ_NA,
|
||||||
|
.pm = OCP_CPM_NA,
|
||||||
|
},
|
||||||
|
{ .vendor = OCP_VENDOR_INVALID
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Polarity and triggering settings for internal interrupt sources */
|
||||||
|
struct ppc4xx_uic_settings ppc4xx_core_uic_cfg[] __initdata = {
|
||||||
|
{ .polarity = 0xffbffe03,
|
||||||
|
.triggering = 0xfffffe00,
|
||||||
|
.ext_irq_mask = 0x000001fc, /* IRQ0 - IRQ6 */
|
||||||
|
},
|
||||||
|
{ .polarity = 0xffffc6ef,
|
||||||
|
.triggering = 0xffffc7ff,
|
||||||
|
.ext_irq_mask = 0x00003800, /* IRQ7 - IRQ9 */
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource usb_gadget_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.start = 0x050000100ULL,
|
||||||
|
.end = 0x05000017FULL,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = 55,
|
||||||
|
.end = 55,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static u64 dma_mask = 0xffffffffULL;
|
||||||
|
|
||||||
|
static struct platform_device usb_gadget_device = {
|
||||||
|
.name = "musbhsfc",
|
||||||
|
.id = 0,
|
||||||
|
.num_resources = ARRAY_SIZE(usb_gadget_resources),
|
||||||
|
.resource = usb_gadget_resources,
|
||||||
|
.dev = {
|
||||||
|
.dma_mask = &dma_mask,
|
||||||
|
.coherent_dma_mask = 0xffffffffULL,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device *ibm440ep_devs[] __initdata = {
|
||||||
|
&usb_gadget_device,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init
|
||||||
|
ibm440ep_platform_add_devices(void)
|
||||||
|
{
|
||||||
|
return platform_add_devices(ibm440ep_devs, ARRAY_SIZE(ibm440ep_devs));
|
||||||
|
}
|
||||||
|
arch_initcall(ibm440ep_platform_add_devices);
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
* arch/ppc/platforms/4xx/ibm440ep.h
|
||||||
|
*
|
||||||
|
* PPC440EP definitions
|
||||||
|
*
|
||||||
|
* Wade Farnsworth <wfarnsworth@mvista.com>
|
||||||
|
*
|
||||||
|
* Copyright 2002 Roland Dreier
|
||||||
|
* Copyright 2004 MontaVista Software, Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
#ifndef __PPC_PLATFORMS_IBM440EP_H
|
||||||
|
#define __PPC_PLATFORMS_IBM440EP_H
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <asm/ibm44x.h>
|
||||||
|
|
||||||
|
/* UART */
|
||||||
|
#define PPC440EP_UART0_ADDR 0x0EF600300
|
||||||
|
#define PPC440EP_UART1_ADDR 0x0EF600400
|
||||||
|
#define PPC440EP_UART2_ADDR 0x0EF600500
|
||||||
|
#define PPC440EP_UART3_ADDR 0x0EF600600
|
||||||
|
#define UART0_INT 0
|
||||||
|
#define UART1_INT 1
|
||||||
|
#define UART2_INT 3
|
||||||
|
#define UART3_INT 4
|
||||||
|
|
||||||
|
/* Clock and Power Management */
|
||||||
|
#define IBM_CPM_IIC0 0x80000000 /* IIC interface */
|
||||||
|
#define IBM_CPM_IIC1 0x40000000 /* IIC interface */
|
||||||
|
#define IBM_CPM_PCI 0x20000000 /* PCI bridge */
|
||||||
|
#define IBM_CPM_USB1H 0x08000000 /* USB 1.1 Host */
|
||||||
|
#define IBM_CPM_FPU 0x04000000 /* floating point unit */
|
||||||
|
#define IBM_CPM_CPU 0x02000000 /* processor core */
|
||||||
|
#define IBM_CPM_DMA 0x01000000 /* DMA controller */
|
||||||
|
#define IBM_CPM_BGO 0x00800000 /* PLB to OPB bus arbiter */
|
||||||
|
#define IBM_CPM_BGI 0x00400000 /* OPB to PLB bridge */
|
||||||
|
#define IBM_CPM_EBC 0x00200000 /* External Bus Controller */
|
||||||
|
#define IBM_CPM_EBM 0x00100000 /* Ext Bus Master Interface */
|
||||||
|
#define IBM_CPM_DMC 0x00080000 /* SDRAM peripheral controller */
|
||||||
|
#define IBM_CPM_PLB4 0x00040000 /* PLB4 bus arbiter */
|
||||||
|
#define IBM_CPM_PLB4x3 0x00020000 /* PLB4 to PLB3 bridge controller */
|
||||||
|
#define IBM_CPM_PLB3x4 0x00010000 /* PLB3 to PLB4 bridge controller */
|
||||||
|
#define IBM_CPM_PLB3 0x00008000 /* PLB3 bus arbiter */
|
||||||
|
#define IBM_CPM_PPM 0x00002000 /* PLB Performance Monitor */
|
||||||
|
#define IBM_CPM_UIC1 0x00001000 /* Universal Interrupt Controller */
|
||||||
|
#define IBM_CPM_GPIO0 0x00000800 /* General Purpose IO (??) */
|
||||||
|
#define IBM_CPM_GPT 0x00000400 /* General Purpose Timers */
|
||||||
|
#define IBM_CPM_UART0 0x00000200 /* serial port 0 */
|
||||||
|
#define IBM_CPM_UART1 0x00000100 /* serial port 1 */
|
||||||
|
#define IBM_CPM_UIC0 0x00000080 /* Universal Interrupt Controller */
|
||||||
|
#define IBM_CPM_TMRCLK 0x00000040 /* CPU timers */
|
||||||
|
#define IBM_CPM_EMAC0 0x00000020 /* ethernet port 0 */
|
||||||
|
#define IBM_CPM_EMAC1 0x00000010 /* ethernet port 1 */
|
||||||
|
#define IBM_CPM_UART2 0x00000008 /* serial port 2 */
|
||||||
|
#define IBM_CPM_UART3 0x00000004 /* serial port 3 */
|
||||||
|
#define IBM_CPM_USB2D 0x00000002 /* USB 2.0 Device */
|
||||||
|
#define IBM_CPM_USB2H 0x00000001 /* USB 2.0 Host */
|
||||||
|
|
||||||
|
#define DFLT_IBM4xx_PM ~(IBM_CPM_UIC0 | IBM_CPM_UIC1 | IBM_CPM_CPU \
|
||||||
|
| IBM_CPM_EBC | IBM_CPM_BGO | IBM_CPM_FPU \
|
||||||
|
| IBM_CPM_EBM | IBM_CPM_PLB4 | IBM_CPM_3x4 \
|
||||||
|
| IBM_CPM_PLB3 | IBM_CPM_PLB4x3 \
|
||||||
|
| IBM_CPM_EMAC0 | IBM_CPM_TMRCLK \
|
||||||
|
| IBM_CPM_DMA | IBM_CPM_PCI | IBM_CPM_EMAC1)
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __PPC_PLATFORMS_IBM440EP_H */
|
||||||
|
#endif /* __KERNEL__ */
|
|
@ -48,6 +48,7 @@
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/ppc4xx_pic.h>
|
#include <asm/ppc4xx_pic.h>
|
||||||
#include <asm/ppcboot.h>
|
#include <asm/ppcboot.h>
|
||||||
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
#include <syslib/gen550.h>
|
#include <syslib/gen550.h>
|
||||||
#include <syslib/ibm440gx_common.h>
|
#include <syslib/ibm440gx_common.h>
|
||||||
|
@ -266,6 +267,9 @@ ocotea_early_serial_map(void)
|
||||||
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
#if defined(CONFIG_SERIAL_TEXT_DEBUG) || defined(CONFIG_KGDB)
|
||||||
/* Configure debug serial access */
|
/* Configure debug serial access */
|
||||||
gen550_init(0, &port);
|
gen550_init(0, &port);
|
||||||
|
|
||||||
|
/* Purge TLB entry added in head_44x.S for early serial access */
|
||||||
|
_tlbie(UART0_IO_BASE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
port.membase = ioremap64(PPC440GX_UART1_ADDR, 8);
|
port.membase = ioremap64(PPC440GX_UART1_ADDR, 8);
|
||||||
|
|
|
@ -55,15 +55,24 @@
|
||||||
*/
|
*/
|
||||||
#define RS_TABLE_SIZE 2
|
#define RS_TABLE_SIZE 2
|
||||||
|
|
||||||
/* OpenBIOS defined UART mappings, used before early_serial_setup */
|
#if defined(__BOOTER__)
|
||||||
|
/* OpenBIOS defined UART mappings, used by bootloader shim */
|
||||||
#define UART0_IO_BASE 0xE0000200
|
#define UART0_IO_BASE 0xE0000200
|
||||||
#define UART1_IO_BASE 0xE0000300
|
#define UART1_IO_BASE 0xE0000300
|
||||||
|
#else
|
||||||
|
/* head_44x.S created UART mapping, used before early_serial_setup.
|
||||||
|
* We cannot use default OpenBIOS UART mappings because they
|
||||||
|
* don't work for configurations with more than 512M RAM. --ebs
|
||||||
|
*/
|
||||||
|
#define UART0_IO_BASE 0xF0000200
|
||||||
|
#define UART1_IO_BASE 0xF0000300
|
||||||
|
#endif
|
||||||
|
|
||||||
#define BASE_BAUD 11059200/16
|
#define BASE_BAUD 11059200/16
|
||||||
#define STD_UART_OP(num) \
|
#define STD_UART_OP(num) \
|
||||||
{ 0, BASE_BAUD, 0, UART##num##_INT, \
|
{ 0, BASE_BAUD, 0, UART##num##_INT, \
|
||||||
(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \
|
(ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST), \
|
||||||
iomem_base: UART##num##_IO_BASE, \
|
iomem_base: (void*)UART##num##_IO_BASE, \
|
||||||
io_type: SERIAL_IO_MEM},
|
io_type: SERIAL_IO_MEM},
|
||||||
|
|
||||||
#define SERIAL_PORT_DFNS \
|
#define SERIAL_PORT_DFNS \
|
||||||
|
|
|
@ -11,6 +11,7 @@ obj-$(CONFIG_PPCBUG_NVRAM) += prep_nvram.o
|
||||||
obj-$(CONFIG_PPC_OCP) += ocp.o
|
obj-$(CONFIG_PPC_OCP) += ocp.o
|
||||||
obj-$(CONFIG_IBM_OCP) += ibm_ocp.o
|
obj-$(CONFIG_IBM_OCP) += ibm_ocp.o
|
||||||
obj-$(CONFIG_44x) += ibm44x_common.o
|
obj-$(CONFIG_44x) += ibm44x_common.o
|
||||||
|
obj-$(CONFIG_440EP) += ibm440gx_common.o
|
||||||
obj-$(CONFIG_440GP) += ibm440gp_common.o
|
obj-$(CONFIG_440GP) += ibm440gp_common.o
|
||||||
obj-$(CONFIG_440GX) += ibm440gx_common.o
|
obj-$(CONFIG_440GX) += ibm440gx_common.o
|
||||||
obj-$(CONFIG_440SP) += ibm440gx_common.o ibm440sp_common.o
|
obj-$(CONFIG_440SP) += ibm440gx_common.o ibm440sp_common.o
|
||||||
|
@ -44,6 +45,7 @@ obj-$(CONFIG_PPC_CHRP) += open_pic.o indirect_pci.o i8259.o
|
||||||
obj-$(CONFIG_PPC_PREP) += open_pic.o indirect_pci.o i8259.o todc_time.o
|
obj-$(CONFIG_PPC_PREP) += open_pic.o indirect_pci.o i8259.o todc_time.o
|
||||||
obj-$(CONFIG_ADIR) += i8259.o indirect_pci.o pci_auto.o \
|
obj-$(CONFIG_ADIR) += i8259.o indirect_pci.o pci_auto.o \
|
||||||
todc_time.o
|
todc_time.o
|
||||||
|
obj-$(CONFIG_BAMBOO) += indirect_pci.o pci_auto.o todc_time.o
|
||||||
obj-$(CONFIG_CPCI690) += todc_time.o pci_auto.o
|
obj-$(CONFIG_CPCI690) += todc_time.o pci_auto.o
|
||||||
obj-$(CONFIG_EBONY) += indirect_pci.o pci_auto.o todc_time.o
|
obj-$(CONFIG_EBONY) += indirect_pci.o pci_auto.o todc_time.o
|
||||||
obj-$(CONFIG_EV64260) += todc_time.o pci_auto.o
|
obj-$(CONFIG_EV64260) += todc_time.o pci_auto.o
|
||||||
|
|
|
@ -34,6 +34,10 @@ void __init ibm440gx_get_clocks(struct ibm44x_clocks* p, unsigned int sys_clk,
|
||||||
u32 plld = CPR_READ(DCRN_CPR_PLLD);
|
u32 plld = CPR_READ(DCRN_CPR_PLLD);
|
||||||
u32 uart0 = SDR_READ(DCRN_SDR_UART0);
|
u32 uart0 = SDR_READ(DCRN_SDR_UART0);
|
||||||
u32 uart1 = SDR_READ(DCRN_SDR_UART1);
|
u32 uart1 = SDR_READ(DCRN_SDR_UART1);
|
||||||
|
#ifdef CONFIG_440EP
|
||||||
|
u32 uart2 = SDR_READ(DCRN_SDR_UART2);
|
||||||
|
u32 uart3 = SDR_READ(DCRN_SDR_UART3);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Dividers */
|
/* Dividers */
|
||||||
u32 fbdv = __fix_zero((plld >> 24) & 0x1f, 32);
|
u32 fbdv = __fix_zero((plld >> 24) & 0x1f, 32);
|
||||||
|
@ -96,6 +100,17 @@ void __init ibm440gx_get_clocks(struct ibm44x_clocks* p, unsigned int sys_clk,
|
||||||
p->uart1 = ser_clk;
|
p->uart1 = ser_clk;
|
||||||
else
|
else
|
||||||
p->uart1 = p->plb / __fix_zero(uart1 & 0xff, 256);
|
p->uart1 = p->plb / __fix_zero(uart1 & 0xff, 256);
|
||||||
|
#ifdef CONFIG_440EP
|
||||||
|
if (uart2 & 0x00800000)
|
||||||
|
p->uart2 = ser_clk;
|
||||||
|
else
|
||||||
|
p->uart2 = p->plb / __fix_zero(uart2 & 0xff, 256);
|
||||||
|
|
||||||
|
if (uart3 & 0x00800000)
|
||||||
|
p->uart3 = ser_clk;
|
||||||
|
else
|
||||||
|
p->uart3 = p->plb / __fix_zero(uart3 & 0xff, 256);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Issue L2C diagnostic command */
|
/* Issue L2C diagnostic command */
|
||||||
|
|
|
@ -29,6 +29,10 @@ struct ibm44x_clocks {
|
||||||
unsigned int ebc; /* PerClk */
|
unsigned int ebc; /* PerClk */
|
||||||
unsigned int uart0;
|
unsigned int uart0;
|
||||||
unsigned int uart1;
|
unsigned int uart1;
|
||||||
|
#ifdef CONFIG_440EP
|
||||||
|
unsigned int uart2;
|
||||||
|
unsigned int uart3;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/* common 44x platform init */
|
/* common 44x platform init */
|
||||||
|
|
|
@ -57,7 +57,7 @@ unsigned char __res[sizeof(bd_t)];
|
||||||
extern void m8xx_ide_init(void);
|
extern void m8xx_ide_init(void);
|
||||||
|
|
||||||
extern unsigned long find_available_memory(void);
|
extern unsigned long find_available_memory(void);
|
||||||
extern void m8xx_cpm_reset(uint cpm_page);
|
extern void m8xx_cpm_reset();
|
||||||
extern void m8xx_wdt_handler_install(bd_t *bp);
|
extern void m8xx_wdt_handler_install(bd_t *bp);
|
||||||
extern void rpxfb_alloc_pages(void);
|
extern void rpxfb_alloc_pages(void);
|
||||||
extern void cpm_interrupt_init(void);
|
extern void cpm_interrupt_init(void);
|
||||||
|
@ -70,13 +70,9 @@ board_init(void)
|
||||||
void __init
|
void __init
|
||||||
m8xx_setup_arch(void)
|
m8xx_setup_arch(void)
|
||||||
{
|
{
|
||||||
int cpm_page;
|
|
||||||
|
|
||||||
cpm_page = (int) alloc_bootmem_pages(PAGE_SIZE);
|
|
||||||
|
|
||||||
/* Reset the Communication Processor Module.
|
/* Reset the Communication Processor Module.
|
||||||
*/
|
*/
|
||||||
m8xx_cpm_reset(cpm_page);
|
m8xx_cpm_reset();
|
||||||
|
|
||||||
#ifdef CONFIG_FB_RPX
|
#ifdef CONFIG_FB_RPX
|
||||||
rpxfb_alloc_pages();
|
rpxfb_alloc_pages();
|
||||||
|
|
|
@ -191,8 +191,8 @@ struct platform_device ppc_sys_platform_devices[] = {
|
||||||
.num_resources = 2,
|
.num_resources = 2,
|
||||||
.resource = (struct resource[]) {
|
.resource = (struct resource[]) {
|
||||||
{
|
{
|
||||||
.start = 0x22000,
|
.start = 0x23000,
|
||||||
.end = 0x22fff,
|
.end = 0x23fff,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -208,8 +208,8 @@ struct platform_device ppc_sys_platform_devices[] = {
|
||||||
.num_resources = 2,
|
.num_resources = 2,
|
||||||
.resource = (struct resource[]) {
|
.resource = (struct resource[]) {
|
||||||
{
|
{
|
||||||
.start = 0x23000,
|
.start = 0x22000,
|
||||||
.end = 0x23fff,
|
.end = 0x22fff,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -1307,7 +1307,7 @@ local int huft_build(
|
||||||
{
|
{
|
||||||
*t = (inflate_huft *)Z_NULL;
|
*t = (inflate_huft *)Z_NULL;
|
||||||
*m = 0;
|
*m = 0;
|
||||||
return Z_OK;
|
return Z_DATA_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1351,6 +1351,7 @@ local int huft_build(
|
||||||
if ((j = *p++) != 0)
|
if ((j = *p++) != 0)
|
||||||
v[x[j]++] = i;
|
v[x[j]++] = i;
|
||||||
} while (++i < n);
|
} while (++i < n);
|
||||||
|
n = x[g]; /* set n to length of v */
|
||||||
|
|
||||||
|
|
||||||
/* Generate the Huffman codes and for each, make the table entries */
|
/* Generate the Huffman codes and for each, make the table entries */
|
||||||
|
|
|
@ -0,0 +1,987 @@
|
||||||
|
#
|
||||||
|
# Automatically generated make config: don't edit
|
||||||
|
# Linux kernel version: 2.6.13-rc6
|
||||||
|
# Mon Aug 8 14:12:19 2005
|
||||||
|
#
|
||||||
|
CONFIG_64BIT=y
|
||||||
|
CONFIG_MMU=y
|
||||||
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
CONFIG_GENERIC_ISA_DMA=y
|
||||||
|
CONFIG_HAVE_DEC_LOCK=y
|
||||||
|
CONFIG_EARLY_PRINTK=y
|
||||||
|
CONFIG_COMPAT=y
|
||||||
|
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||||
|
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||||
|
|
||||||
|
#
|
||||||
|
# Code maturity level options
|
||||||
|
#
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_CLEAN_COMPILE=y
|
||||||
|
CONFIG_LOCK_KERNEL=y
|
||||||
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
#
|
||||||
|
# General setup
|
||||||
|
#
|
||||||
|
CONFIG_LOCALVERSION=""
|
||||||
|
CONFIG_SWAP=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
# CONFIG_POSIX_MQUEUE is not set
|
||||||
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
CONFIG_SYSCTL=y
|
||||||
|
# CONFIG_AUDIT is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
|
CONFIG_KOBJECT_UEVENT=y
|
||||||
|
# CONFIG_IKCONFIG is not set
|
||||||
|
# CONFIG_CPUSETS is not set
|
||||||
|
# CONFIG_EMBEDDED is not set
|
||||||
|
CONFIG_KALLSYMS=y
|
||||||
|
# CONFIG_KALLSYMS_ALL is not set
|
||||||
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_PRINTK=y
|
||||||
|
CONFIG_BUG=y
|
||||||
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_FUTEX=y
|
||||||
|
CONFIG_EPOLL=y
|
||||||
|
CONFIG_SHMEM=y
|
||||||
|
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
# CONFIG_TINY_SHMEM is not set
|
||||||
|
CONFIG_BASE_SMALL=0
|
||||||
|
|
||||||
|
#
|
||||||
|
# Loadable module support
|
||||||
|
#
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
|
CONFIG_OBSOLETE_MODPARM=y
|
||||||
|
# CONFIG_MODVERSIONS is not set
|
||||||
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
|
# CONFIG_KMOD is not set
|
||||||
|
CONFIG_STOP_MACHINE=y
|
||||||
|
CONFIG_SYSVIPC_COMPAT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Platform support
|
||||||
|
#
|
||||||
|
# CONFIG_PPC_ISERIES is not set
|
||||||
|
CONFIG_PPC_MULTIPLATFORM=y
|
||||||
|
# CONFIG_PPC_PSERIES is not set
|
||||||
|
CONFIG_PPC_BPA=y
|
||||||
|
# CONFIG_PPC_PMAC is not set
|
||||||
|
# CONFIG_PPC_MAPLE is not set
|
||||||
|
CONFIG_PPC=y
|
||||||
|
CONFIG_PPC64=y
|
||||||
|
CONFIG_PPC_OF=y
|
||||||
|
CONFIG_BPA_IIC=y
|
||||||
|
CONFIG_ALTIVEC=y
|
||||||
|
CONFIG_KEXEC=y
|
||||||
|
# CONFIG_U3_DART is not set
|
||||||
|
# CONFIG_BOOTX_TEXT is not set
|
||||||
|
# CONFIG_POWER4_ONLY is not set
|
||||||
|
# CONFIG_IOMMU_VMERGE is not set
|
||||||
|
CONFIG_SMP=y
|
||||||
|
CONFIG_NR_CPUS=4
|
||||||
|
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||||
|
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||||
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
|
CONFIG_FLATMEM_MANUAL=y
|
||||||
|
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||||
|
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||||
|
CONFIG_FLATMEM=y
|
||||||
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
|
# CONFIG_NUMA is not set
|
||||||
|
CONFIG_SCHED_SMT=y
|
||||||
|
CONFIG_PREEMPT_NONE=y
|
||||||
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
|
# CONFIG_PREEMPT is not set
|
||||||
|
CONFIG_PREEMPT_BKL=y
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
CONFIG_HZ_250=y
|
||||||
|
# CONFIG_HZ_1000 is not set
|
||||||
|
CONFIG_HZ=250
|
||||||
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_PPC_RTAS=y
|
||||||
|
CONFIG_RTAS_PROC=y
|
||||||
|
CONFIG_RTAS_FLASH=y
|
||||||
|
CONFIG_SECCOMP=y
|
||||||
|
CONFIG_ISA_DMA_API=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# General setup
|
||||||
|
#
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
CONFIG_BINFMT_ELF=y
|
||||||
|
# CONFIG_BINFMT_MISC is not set
|
||||||
|
CONFIG_PCI_LEGACY_PROC=y
|
||||||
|
CONFIG_PCI_NAMES=y
|
||||||
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCCARD (PCMCIA/CardBus) support
|
||||||
|
#
|
||||||
|
# CONFIG_PCCARD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI Hotplug Support
|
||||||
|
#
|
||||||
|
# CONFIG_HOTPLUG_PCI is not set
|
||||||
|
CONFIG_PROC_DEVICETREE=y
|
||||||
|
# CONFIG_CMDLINE_BOOL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Networking
|
||||||
|
#
|
||||||
|
CONFIG_NET=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Networking options
|
||||||
|
#
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
# CONFIG_PACKET_MMAP is not set
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_XFRM=y
|
||||||
|
# CONFIG_XFRM_USER is not set
|
||||||
|
# CONFIG_NET_KEY is not set
|
||||||
|
CONFIG_INET=y
|
||||||
|
CONFIG_IP_MULTICAST=y
|
||||||
|
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||||
|
CONFIG_IP_FIB_HASH=y
|
||||||
|
# CONFIG_IP_PNP is not set
|
||||||
|
CONFIG_NET_IPIP=y
|
||||||
|
# CONFIG_NET_IPGRE is not set
|
||||||
|
# CONFIG_IP_MROUTE is not set
|
||||||
|
# CONFIG_ARPD is not set
|
||||||
|
CONFIG_SYN_COOKIES=y
|
||||||
|
# CONFIG_INET_AH is not set
|
||||||
|
# CONFIG_INET_ESP is not set
|
||||||
|
# CONFIG_INET_IPCOMP is not set
|
||||||
|
CONFIG_INET_TUNNEL=y
|
||||||
|
CONFIG_IP_TCPDIAG=y
|
||||||
|
CONFIG_IP_TCPDIAG_IPV6=y
|
||||||
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
CONFIG_TCP_CONG_BIC=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# IP: Virtual Server Configuration
|
||||||
|
#
|
||||||
|
# CONFIG_IP_VS is not set
|
||||||
|
CONFIG_IPV6=y
|
||||||
|
# CONFIG_IPV6_PRIVACY is not set
|
||||||
|
CONFIG_INET6_AH=m
|
||||||
|
CONFIG_INET6_ESP=m
|
||||||
|
CONFIG_INET6_IPCOMP=m
|
||||||
|
CONFIG_INET6_TUNNEL=m
|
||||||
|
CONFIG_IPV6_TUNNEL=m
|
||||||
|
CONFIG_NETFILTER=y
|
||||||
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IP: Netfilter Configuration
|
||||||
|
#
|
||||||
|
CONFIG_IP_NF_CONNTRACK=y
|
||||||
|
# CONFIG_IP_NF_CT_ACCT is not set
|
||||||
|
# CONFIG_IP_NF_CONNTRACK_MARK is not set
|
||||||
|
CONFIG_IP_NF_CT_PROTO_SCTP=y
|
||||||
|
CONFIG_IP_NF_FTP=m
|
||||||
|
CONFIG_IP_NF_IRC=m
|
||||||
|
CONFIG_IP_NF_TFTP=m
|
||||||
|
CONFIG_IP_NF_AMANDA=m
|
||||||
|
CONFIG_IP_NF_QUEUE=m
|
||||||
|
CONFIG_IP_NF_IPTABLES=m
|
||||||
|
CONFIG_IP_NF_MATCH_LIMIT=m
|
||||||
|
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||||
|
CONFIG_IP_NF_MATCH_MAC=m
|
||||||
|
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
||||||
|
CONFIG_IP_NF_MATCH_MARK=m
|
||||||
|
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
||||||
|
CONFIG_IP_NF_MATCH_TOS=m
|
||||||
|
CONFIG_IP_NF_MATCH_RECENT=m
|
||||||
|
CONFIG_IP_NF_MATCH_ECN=m
|
||||||
|
CONFIG_IP_NF_MATCH_DSCP=m
|
||||||
|
CONFIG_IP_NF_MATCH_AH_ESP=m
|
||||||
|
CONFIG_IP_NF_MATCH_LENGTH=m
|
||||||
|
CONFIG_IP_NF_MATCH_TTL=m
|
||||||
|
CONFIG_IP_NF_MATCH_TCPMSS=m
|
||||||
|
CONFIG_IP_NF_MATCH_HELPER=m
|
||||||
|
CONFIG_IP_NF_MATCH_STATE=m
|
||||||
|
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
||||||
|
CONFIG_IP_NF_MATCH_OWNER=m
|
||||||
|
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||||
|
CONFIG_IP_NF_MATCH_REALM=m
|
||||||
|
CONFIG_IP_NF_MATCH_SCTP=m
|
||||||
|
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||||
|
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||||
|
CONFIG_IP_NF_FILTER=m
|
||||||
|
CONFIG_IP_NF_TARGET_REJECT=m
|
||||||
|
CONFIG_IP_NF_TARGET_LOG=m
|
||||||
|
CONFIG_IP_NF_TARGET_ULOG=m
|
||||||
|
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||||
|
CONFIG_IP_NF_NAT=m
|
||||||
|
CONFIG_IP_NF_NAT_NEEDED=y
|
||||||
|
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||||
|
CONFIG_IP_NF_TARGET_REDIRECT=m
|
||||||
|
CONFIG_IP_NF_TARGET_NETMAP=m
|
||||||
|
CONFIG_IP_NF_TARGET_SAME=m
|
||||||
|
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
||||||
|
CONFIG_IP_NF_NAT_IRC=m
|
||||||
|
CONFIG_IP_NF_NAT_FTP=m
|
||||||
|
CONFIG_IP_NF_NAT_TFTP=m
|
||||||
|
CONFIG_IP_NF_NAT_AMANDA=m
|
||||||
|
CONFIG_IP_NF_MANGLE=m
|
||||||
|
CONFIG_IP_NF_TARGET_TOS=m
|
||||||
|
CONFIG_IP_NF_TARGET_ECN=m
|
||||||
|
CONFIG_IP_NF_TARGET_DSCP=m
|
||||||
|
CONFIG_IP_NF_TARGET_MARK=m
|
||||||
|
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
||||||
|
CONFIG_IP_NF_RAW=m
|
||||||
|
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||||
|
CONFIG_IP_NF_ARPTABLES=m
|
||||||
|
CONFIG_IP_NF_ARPFILTER=m
|
||||||
|
CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPv6: Netfilter Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_IP6_NF_QUEUE is not set
|
||||||
|
# CONFIG_IP6_NF_IPTABLES is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_IP_SCTP is not set
|
||||||
|
# CONFIG_ATM is not set
|
||||||
|
# CONFIG_BRIDGE is not set
|
||||||
|
# CONFIG_VLAN_8021Q is not set
|
||||||
|
# CONFIG_DECNET is not set
|
||||||
|
# CONFIG_LLC2 is not set
|
||||||
|
# CONFIG_IPX is not set
|
||||||
|
# CONFIG_ATALK is not set
|
||||||
|
# CONFIG_X25 is not set
|
||||||
|
# CONFIG_LAPB is not set
|
||||||
|
# CONFIG_NET_DIVERT is not set
|
||||||
|
# CONFIG_ECONET is not set
|
||||||
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
# CONFIG_NET_SCHED is not set
|
||||||
|
CONFIG_NET_CLS_ROUTE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network testing
|
||||||
|
#
|
||||||
|
# CONFIG_NET_PKTGEN is not set
|
||||||
|
# CONFIG_HAMRADIO is not set
|
||||||
|
# CONFIG_IRDA is not set
|
||||||
|
# CONFIG_BT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Device Drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generic Driver Options
|
||||||
|
#
|
||||||
|
CONFIG_STANDALONE=y
|
||||||
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
|
CONFIG_FW_LOADER=y
|
||||||
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Memory Technology Devices (MTD)
|
||||||
|
#
|
||||||
|
# CONFIG_MTD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Parallel port support
|
||||||
|
#
|
||||||
|
# CONFIG_PARPORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Plug and Play support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Block devices
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_FD is not set
|
||||||
|
# CONFIG_BLK_CPQ_DA is not set
|
||||||
|
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||||
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
|
# CONFIG_BLK_DEV_UMEM is not set
|
||||||
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||||
|
CONFIG_BLK_DEV_NBD=y
|
||||||
|
# CONFIG_BLK_DEV_SX8 is not set
|
||||||
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
|
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IO Schedulers
|
||||||
|
#
|
||||||
|
CONFIG_IOSCHED_NOOP=y
|
||||||
|
CONFIG_IOSCHED_AS=y
|
||||||
|
CONFIG_IOSCHED_DEADLINE=y
|
||||||
|
CONFIG_IOSCHED_CFQ=y
|
||||||
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ATA/ATAPI/MFM/RLL support
|
||||||
|
#
|
||||||
|
CONFIG_IDE=y
|
||||||
|
CONFIG_BLK_DEV_IDE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||||
|
#
|
||||||
|
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDISK=y
|
||||||
|
CONFIG_IDEDISK_MULTI_MODE=y
|
||||||
|
# CONFIG_BLK_DEV_IDECD is not set
|
||||||
|
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||||
|
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||||
|
# CONFIG_IDE_TASK_IOCTL is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IDE chipset support/bugfixes
|
||||||
|
#
|
||||||
|
CONFIG_IDE_GENERIC=y
|
||||||
|
CONFIG_BLK_DEV_IDEPCI=y
|
||||||
|
CONFIG_IDEPCI_SHARE_IRQ=y
|
||||||
|
# CONFIG_BLK_DEV_OFFBOARD is not set
|
||||||
|
CONFIG_BLK_DEV_GENERIC=y
|
||||||
|
# CONFIG_BLK_DEV_OPTI621 is not set
|
||||||
|
# CONFIG_BLK_DEV_SL82C105 is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||||
|
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
|
||||||
|
CONFIG_IDEDMA_PCI_AUTO=y
|
||||||
|
# CONFIG_IDEDMA_ONLYDISK is not set
|
||||||
|
CONFIG_BLK_DEV_AEC62XX=y
|
||||||
|
# CONFIG_BLK_DEV_ALI15X3 is not set
|
||||||
|
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||||
|
# CONFIG_BLK_DEV_CMD64X is not set
|
||||||
|
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||||
|
# CONFIG_BLK_DEV_CY82C693 is not set
|
||||||
|
# CONFIG_BLK_DEV_CS5520 is not set
|
||||||
|
# CONFIG_BLK_DEV_CS5530 is not set
|
||||||
|
# CONFIG_BLK_DEV_HPT34X is not set
|
||||||
|
# CONFIG_BLK_DEV_HPT366 is not set
|
||||||
|
# CONFIG_BLK_DEV_SC1200 is not set
|
||||||
|
# CONFIG_BLK_DEV_PIIX is not set
|
||||||
|
# CONFIG_BLK_DEV_IT821X is not set
|
||||||
|
# CONFIG_BLK_DEV_NS87415 is not set
|
||||||
|
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||||
|
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||||
|
# CONFIG_BLK_DEV_SVWKS is not set
|
||||||
|
CONFIG_BLK_DEV_SIIMAGE=y
|
||||||
|
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||||
|
# CONFIG_BLK_DEV_TRM290 is not set
|
||||||
|
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||||
|
# CONFIG_IDE_ARM is not set
|
||||||
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
|
# CONFIG_IDEDMA_IVB is not set
|
||||||
|
CONFIG_IDEDMA_AUTO=y
|
||||||
|
# CONFIG_BLK_DEV_HD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI device support
|
||||||
|
#
|
||||||
|
# CONFIG_SCSI is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multi-device support (RAID and LVM)
|
||||||
|
#
|
||||||
|
# CONFIG_MD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Fusion MPT device support
|
||||||
|
#
|
||||||
|
# CONFIG_FUSION is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IEEE 1394 (FireWire) support
|
||||||
|
#
|
||||||
|
# CONFIG_IEEE1394 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2O device support
|
||||||
|
#
|
||||||
|
# CONFIG_I2O is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Macintosh device drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network device support
|
||||||
|
#
|
||||||
|
CONFIG_NETDEVICES=y
|
||||||
|
# CONFIG_DUMMY is not set
|
||||||
|
# CONFIG_BONDING is not set
|
||||||
|
# CONFIG_EQUALIZER is not set
|
||||||
|
# CONFIG_TUN is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ARCnet devices
|
||||||
|
#
|
||||||
|
# CONFIG_ARCNET is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (10 or 100Mbit)
|
||||||
|
#
|
||||||
|
CONFIG_NET_ETHERNET=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
# CONFIG_HAPPYMEAL is not set
|
||||||
|
# CONFIG_SUNGEM is not set
|
||||||
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Tulip family network device support
|
||||||
|
#
|
||||||
|
# CONFIG_NET_TULIP is not set
|
||||||
|
# CONFIG_HP100 is not set
|
||||||
|
# CONFIG_NET_PCI is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (1000 Mbit)
|
||||||
|
#
|
||||||
|
# CONFIG_ACENIC is not set
|
||||||
|
# CONFIG_DL2K is not set
|
||||||
|
CONFIG_E1000=m
|
||||||
|
# CONFIG_E1000_NAPI is not set
|
||||||
|
# CONFIG_NS83820 is not set
|
||||||
|
# CONFIG_HAMACHI is not set
|
||||||
|
# CONFIG_YELLOWFIN is not set
|
||||||
|
# CONFIG_R8169 is not set
|
||||||
|
CONFIG_SKGE=m
|
||||||
|
# CONFIG_SK98LIN is not set
|
||||||
|
# CONFIG_TIGON3 is not set
|
||||||
|
# CONFIG_BNX2 is not set
|
||||||
|
# CONFIG_MV643XX_ETH is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ethernet (10000 Mbit)
|
||||||
|
#
|
||||||
|
# CONFIG_IXGB is not set
|
||||||
|
# CONFIG_S2IO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Token Ring devices
|
||||||
|
#
|
||||||
|
# CONFIG_TR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wireless LAN (non-hamradio)
|
||||||
|
#
|
||||||
|
# CONFIG_NET_RADIO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wan interfaces
|
||||||
|
#
|
||||||
|
# CONFIG_WAN is not set
|
||||||
|
# CONFIG_FDDI is not set
|
||||||
|
# CONFIG_HIPPI is not set
|
||||||
|
# CONFIG_PPP is not set
|
||||||
|
# CONFIG_SLIP is not set
|
||||||
|
# CONFIG_SHAPER is not set
|
||||||
|
# CONFIG_NETCONSOLE is not set
|
||||||
|
# CONFIG_NETPOLL is not set
|
||||||
|
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# ISDN subsystem
|
||||||
|
#
|
||||||
|
# CONFIG_ISDN is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Telephony Support
|
||||||
|
#
|
||||||
|
# CONFIG_PHONE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input device support
|
||||||
|
#
|
||||||
|
CONFIG_INPUT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Userland interfaces
|
||||||
|
#
|
||||||
|
CONFIG_INPUT_MOUSEDEV=y
|
||||||
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||||
|
# CONFIG_INPUT_JOYDEV is not set
|
||||||
|
# CONFIG_INPUT_TSDEV is not set
|
||||||
|
# CONFIG_INPUT_EVDEV is not set
|
||||||
|
# CONFIG_INPUT_EVBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_INPUT_KEYBOARD is not set
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
# CONFIG_INPUT_JOYSTICK is not set
|
||||||
|
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||||
|
# CONFIG_INPUT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware I/O ports
|
||||||
|
#
|
||||||
|
CONFIG_SERIO=y
|
||||||
|
# CONFIG_SERIO_I8042 is not set
|
||||||
|
CONFIG_SERIO_SERPORT=y
|
||||||
|
# CONFIG_SERIO_PCIPS2 is not set
|
||||||
|
# CONFIG_SERIO_RAW is not set
|
||||||
|
# CONFIG_GAMEPORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Character devices
|
||||||
|
#
|
||||||
|
CONFIG_VT=y
|
||||||
|
CONFIG_VT_CONSOLE=y
|
||||||
|
CONFIG_HW_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_NONSTANDARD=y
|
||||||
|
# CONFIG_ROCKETPORT is not set
|
||||||
|
# CONFIG_CYCLADES is not set
|
||||||
|
# CONFIG_MOXA_SMARTIO is not set
|
||||||
|
# CONFIG_ISI is not set
|
||||||
|
# CONFIG_SYNCLINK is not set
|
||||||
|
# CONFIG_SYNCLINKMP is not set
|
||||||
|
# CONFIG_N_HDLC is not set
|
||||||
|
# CONFIG_SPECIALIX is not set
|
||||||
|
# CONFIG_SX is not set
|
||||||
|
# CONFIG_STALDRV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Serial drivers
|
||||||
|
#
|
||||||
|
CONFIG_SERIAL_8250=y
|
||||||
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
|
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||||
|
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Non-8250 serial port support
|
||||||
|
#
|
||||||
|
CONFIG_SERIAL_CORE=y
|
||||||
|
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||||
|
# CONFIG_SERIAL_JSM is not set
|
||||||
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
# CONFIG_LEGACY_PTYS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# IPMI
|
||||||
|
#
|
||||||
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Cards
|
||||||
|
#
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SOFT_WATCHDOG is not set
|
||||||
|
CONFIG_WATCHDOG_RTAS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI-based Watchdog Cards
|
||||||
|
#
|
||||||
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
|
# CONFIG_WDTPCI is not set
|
||||||
|
# CONFIG_RTC is not set
|
||||||
|
# CONFIG_DTLK is not set
|
||||||
|
# CONFIG_R3964 is not set
|
||||||
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ftape, the floppy tape device driver
|
||||||
|
#
|
||||||
|
# CONFIG_AGP is not set
|
||||||
|
# CONFIG_DRM is not set
|
||||||
|
# CONFIG_RAW_DRIVER is not set
|
||||||
|
# CONFIG_HANGCHECK_TIMER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TPM devices
|
||||||
|
#
|
||||||
|
# CONFIG_TCG_TPM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C support
|
||||||
|
#
|
||||||
|
CONFIG_I2C=y
|
||||||
|
# CONFIG_I2C_CHARDEV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Algorithms
|
||||||
|
#
|
||||||
|
CONFIG_I2C_ALGOBIT=y
|
||||||
|
# CONFIG_I2C_ALGOPCF is not set
|
||||||
|
# CONFIG_I2C_ALGOPCA is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Hardware Bus support
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_ALI1535 is not set
|
||||||
|
# CONFIG_I2C_ALI1563 is not set
|
||||||
|
# CONFIG_I2C_ALI15X3 is not set
|
||||||
|
# CONFIG_I2C_AMD756 is not set
|
||||||
|
# CONFIG_I2C_AMD8111 is not set
|
||||||
|
# CONFIG_I2C_I801 is not set
|
||||||
|
# CONFIG_I2C_I810 is not set
|
||||||
|
# CONFIG_I2C_PIIX4 is not set
|
||||||
|
# CONFIG_I2C_ISA is not set
|
||||||
|
# CONFIG_I2C_NFORCE2 is not set
|
||||||
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
|
# CONFIG_I2C_PROSAVAGE is not set
|
||||||
|
# CONFIG_I2C_SAVAGE4 is not set
|
||||||
|
# CONFIG_SCx200_ACB is not set
|
||||||
|
# CONFIG_I2C_SIS5595 is not set
|
||||||
|
# CONFIG_I2C_SIS630 is not set
|
||||||
|
# CONFIG_I2C_SIS96X is not set
|
||||||
|
# CONFIG_I2C_STUB is not set
|
||||||
|
# CONFIG_I2C_VIA is not set
|
||||||
|
# CONFIG_I2C_VIAPRO is not set
|
||||||
|
# CONFIG_I2C_VOODOO3 is not set
|
||||||
|
# CONFIG_I2C_PCA_ISA is not set
|
||||||
|
# CONFIG_I2C_SENSOR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous I2C Chip support
|
||||||
|
#
|
||||||
|
# CONFIG_SENSORS_DS1337 is not set
|
||||||
|
# CONFIG_SENSORS_DS1374 is not set
|
||||||
|
# CONFIG_SENSORS_EEPROM is not set
|
||||||
|
# CONFIG_SENSORS_PCF8574 is not set
|
||||||
|
# CONFIG_SENSORS_PCA9539 is not set
|
||||||
|
# CONFIG_SENSORS_PCF8591 is not set
|
||||||
|
# CONFIG_SENSORS_RTC8564 is not set
|
||||||
|
# CONFIG_SENSORS_MAX6875 is not set
|
||||||
|
# CONFIG_I2C_DEBUG_CORE is not set
|
||||||
|
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||||
|
# CONFIG_I2C_DEBUG_BUS is not set
|
||||||
|
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dallas's 1-wire bus
|
||||||
|
#
|
||||||
|
# CONFIG_W1 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware Monitoring support
|
||||||
|
#
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Misc devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multimedia devices
|
||||||
|
#
|
||||||
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Digital Video Broadcasting Devices
|
||||||
|
#
|
||||||
|
# CONFIG_DVB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Graphics support
|
||||||
|
#
|
||||||
|
# CONFIG_FB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Console display driver support
|
||||||
|
#
|
||||||
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sound
|
||||||
|
#
|
||||||
|
# CONFIG_SOUND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB support
|
||||||
|
#
|
||||||
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
|
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||||
|
# CONFIG_USB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# USB Gadget Support
|
||||||
|
#
|
||||||
|
# CONFIG_USB_GADGET is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# MMC/SD Card support
|
||||||
|
#
|
||||||
|
# CONFIG_MMC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# InfiniBand support
|
||||||
|
#
|
||||||
|
# CONFIG_INFINIBAND is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SN Devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# File systems
|
||||||
|
#
|
||||||
|
CONFIG_EXT2_FS=y
|
||||||
|
# CONFIG_EXT2_FS_XATTR is not set
|
||||||
|
# CONFIG_EXT2_FS_XIP is not set
|
||||||
|
CONFIG_EXT3_FS=y
|
||||||
|
CONFIG_EXT3_FS_XATTR=y
|
||||||
|
# CONFIG_EXT3_FS_POSIX_ACL is not set
|
||||||
|
# CONFIG_EXT3_FS_SECURITY is not set
|
||||||
|
CONFIG_JBD=y
|
||||||
|
# CONFIG_JBD_DEBUG is not set
|
||||||
|
CONFIG_FS_MBCACHE=y
|
||||||
|
# CONFIG_REISERFS_FS is not set
|
||||||
|
# CONFIG_JFS_FS is not set
|
||||||
|
CONFIG_FS_POSIX_ACL=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# XFS support
|
||||||
|
#
|
||||||
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_MINIX_FS is not set
|
||||||
|
# CONFIG_ROMFS_FS is not set
|
||||||
|
CONFIG_INOTIFY=y
|
||||||
|
# CONFIG_QUOTA is not set
|
||||||
|
CONFIG_DNOTIFY=y
|
||||||
|
# CONFIG_AUTOFS_FS is not set
|
||||||
|
# CONFIG_AUTOFS4_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# CD-ROM/DVD Filesystems
|
||||||
|
#
|
||||||
|
CONFIG_ISO9660_FS=m
|
||||||
|
CONFIG_JOLIET=y
|
||||||
|
# CONFIG_ZISOFS is not set
|
||||||
|
CONFIG_UDF_FS=m
|
||||||
|
CONFIG_UDF_NLS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# DOS/FAT/NT Filesystems
|
||||||
|
#
|
||||||
|
CONFIG_FAT_FS=m
|
||||||
|
CONFIG_MSDOS_FS=m
|
||||||
|
CONFIG_VFAT_FS=m
|
||||||
|
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||||
|
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||||
|
# CONFIG_NTFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pseudo filesystems
|
||||||
|
#
|
||||||
|
CONFIG_PROC_FS=y
|
||||||
|
CONFIG_PROC_KCORE=y
|
||||||
|
CONFIG_SYSFS=y
|
||||||
|
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
CONFIG_TMPFS_XATTR=y
|
||||||
|
# CONFIG_TMPFS_SECURITY is not set
|
||||||
|
CONFIG_HUGETLBFS=y
|
||||||
|
CONFIG_HUGETLB_PAGE=y
|
||||||
|
CONFIG_RAMFS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_ADFS_FS is not set
|
||||||
|
# CONFIG_AFFS_FS is not set
|
||||||
|
# CONFIG_HFS_FS is not set
|
||||||
|
# CONFIG_HFSPLUS_FS is not set
|
||||||
|
# CONFIG_BEFS_FS is not set
|
||||||
|
# CONFIG_BFS_FS is not set
|
||||||
|
# CONFIG_EFS_FS is not set
|
||||||
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_VXFS_FS is not set
|
||||||
|
# CONFIG_HPFS_FS is not set
|
||||||
|
# CONFIG_QNX4FS_FS is not set
|
||||||
|
# CONFIG_SYSV_FS is not set
|
||||||
|
# CONFIG_UFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network File Systems
|
||||||
|
#
|
||||||
|
CONFIG_NFS_FS=m
|
||||||
|
CONFIG_NFS_V3=y
|
||||||
|
CONFIG_NFS_V3_ACL=y
|
||||||
|
# CONFIG_NFS_V4 is not set
|
||||||
|
# CONFIG_NFS_DIRECTIO is not set
|
||||||
|
CONFIG_NFSD=m
|
||||||
|
CONFIG_NFSD_V2_ACL=y
|
||||||
|
CONFIG_NFSD_V3=y
|
||||||
|
CONFIG_NFSD_V3_ACL=y
|
||||||
|
# CONFIG_NFSD_V4 is not set
|
||||||
|
CONFIG_NFSD_TCP=y
|
||||||
|
CONFIG_LOCKD=m
|
||||||
|
CONFIG_LOCKD_V4=y
|
||||||
|
CONFIG_EXPORTFS=m
|
||||||
|
CONFIG_NFS_ACL_SUPPORT=m
|
||||||
|
CONFIG_NFS_COMMON=y
|
||||||
|
CONFIG_SUNRPC=m
|
||||||
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
|
# CONFIG_SMB_FS is not set
|
||||||
|
# CONFIG_CIFS is not set
|
||||||
|
# CONFIG_NCP_FS is not set
|
||||||
|
# CONFIG_CODA_FS is not set
|
||||||
|
# CONFIG_AFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Partition Types
|
||||||
|
#
|
||||||
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
|
# CONFIG_ACORN_PARTITION is not set
|
||||||
|
# CONFIG_OSF_PARTITION is not set
|
||||||
|
# CONFIG_AMIGA_PARTITION is not set
|
||||||
|
# CONFIG_ATARI_PARTITION is not set
|
||||||
|
# CONFIG_MAC_PARTITION is not set
|
||||||
|
CONFIG_MSDOS_PARTITION=y
|
||||||
|
# CONFIG_BSD_DISKLABEL is not set
|
||||||
|
# CONFIG_MINIX_SUBPARTITION is not set
|
||||||
|
# CONFIG_SOLARIS_X86_PARTITION is not set
|
||||||
|
# CONFIG_UNIXWARE_DISKLABEL is not set
|
||||||
|
# CONFIG_LDM_PARTITION is not set
|
||||||
|
# CONFIG_SGI_PARTITION is not set
|
||||||
|
# CONFIG_ULTRIX_PARTITION is not set
|
||||||
|
# CONFIG_SUN_PARTITION is not set
|
||||||
|
CONFIG_EFI_PARTITION=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Native Language Support
|
||||||
|
#
|
||||||
|
CONFIG_NLS=m
|
||||||
|
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
|
# CONFIG_NLS_CODEPAGE_437 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_866 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_8 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||||
|
# CONFIG_NLS_ASCII is not set
|
||||||
|
CONFIG_NLS_ISO8859_1=m
|
||||||
|
CONFIG_NLS_ISO8859_2=m
|
||||||
|
CONFIG_NLS_ISO8859_3=m
|
||||||
|
CONFIG_NLS_ISO8859_4=m
|
||||||
|
CONFIG_NLS_ISO8859_5=m
|
||||||
|
CONFIG_NLS_ISO8859_6=m
|
||||||
|
CONFIG_NLS_ISO8859_7=m
|
||||||
|
CONFIG_NLS_ISO8859_9=m
|
||||||
|
CONFIG_NLS_ISO8859_13=m
|
||||||
|
CONFIG_NLS_ISO8859_14=m
|
||||||
|
CONFIG_NLS_ISO8859_15=m
|
||||||
|
# CONFIG_NLS_KOI8_R is not set
|
||||||
|
# CONFIG_NLS_KOI8_U is not set
|
||||||
|
# CONFIG_NLS_UTF8 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Profiling support
|
||||||
|
#
|
||||||
|
# CONFIG_PROFILING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kernel hacking
|
||||||
|
#
|
||||||
|
# CONFIG_PRINTK_TIME is not set
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_LOG_BUF_SHIFT=15
|
||||||
|
# CONFIG_SCHEDSTATS is not set
|
||||||
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||||
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
|
# CONFIG_DEBUG_INFO is not set
|
||||||
|
CONFIG_DEBUG_FS=y
|
||||||
|
# CONFIG_DEBUG_STACKOVERFLOW is not set
|
||||||
|
# CONFIG_KPROBES is not set
|
||||||
|
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||||
|
CONFIG_DEBUGGER=y
|
||||||
|
# CONFIG_XMON is not set
|
||||||
|
# CONFIG_PPCDBG is not set
|
||||||
|
CONFIG_IRQSTACKS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Security options
|
||||||
|
#
|
||||||
|
# CONFIG_KEYS is not set
|
||||||
|
# CONFIG_SECURITY is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cryptographic options
|
||||||
|
#
|
||||||
|
CONFIG_CRYPTO=y
|
||||||
|
CONFIG_CRYPTO_HMAC=y
|
||||||
|
# CONFIG_CRYPTO_NULL is not set
|
||||||
|
# CONFIG_CRYPTO_MD4 is not set
|
||||||
|
CONFIG_CRYPTO_MD5=m
|
||||||
|
CONFIG_CRYPTO_SHA1=m
|
||||||
|
# CONFIG_CRYPTO_SHA256 is not set
|
||||||
|
# CONFIG_CRYPTO_SHA512 is not set
|
||||||
|
# CONFIG_CRYPTO_WP512 is not set
|
||||||
|
# CONFIG_CRYPTO_TGR192 is not set
|
||||||
|
CONFIG_CRYPTO_DES=m
|
||||||
|
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||||
|
# CONFIG_CRYPTO_TWOFISH is not set
|
||||||
|
# CONFIG_CRYPTO_SERPENT is not set
|
||||||
|
# CONFIG_CRYPTO_AES is not set
|
||||||
|
# CONFIG_CRYPTO_CAST5 is not set
|
||||||
|
# CONFIG_CRYPTO_CAST6 is not set
|
||||||
|
# CONFIG_CRYPTO_TEA is not set
|
||||||
|
# CONFIG_CRYPTO_ARC4 is not set
|
||||||
|
# CONFIG_CRYPTO_KHAZAD is not set
|
||||||
|
# CONFIG_CRYPTO_ANUBIS is not set
|
||||||
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
|
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||||
|
# CONFIG_CRYPTO_CRC32C is not set
|
||||||
|
# CONFIG_CRYPTO_TEST is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware crypto devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Library routines
|
||||||
|
#
|
||||||
|
# CONFIG_CRC_CCITT is not set
|
||||||
|
CONFIG_CRC32=y
|
||||||
|
# CONFIG_LIBCRC32C is not set
|
||||||
|
CONFIG_ZLIB_INFLATE=m
|
||||||
|
CONFIG_ZLIB_DEFLATE=m
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.13-rc3
|
# Linux kernel version: 2.6.13-rc6
|
||||||
# Wed Jul 13 14:40:34 2005
|
# Mon Aug 8 14:16:59 2005
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -267,8 +267,6 @@ CONFIG_NET_CLS_ROUTE=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
# CONFIG_NETPOLL is not set
|
|
||||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -468,6 +466,7 @@ CONFIG_SCSI_QLA2XXX=y
|
||||||
# CONFIG_SCSI_QLA2300 is not set
|
# CONFIG_SCSI_QLA2300 is not set
|
||||||
# CONFIG_SCSI_QLA2322 is not set
|
# CONFIG_SCSI_QLA2322 is not set
|
||||||
# CONFIG_SCSI_QLA6312 is not set
|
# CONFIG_SCSI_QLA6312 is not set
|
||||||
|
# CONFIG_SCSI_QLA24XX is not set
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -539,11 +538,9 @@ CONFIG_IEEE1394_RAWIO=y
|
||||||
#
|
#
|
||||||
# Macintosh device drivers
|
# Macintosh device drivers
|
||||||
#
|
#
|
||||||
CONFIG_ADB=y
|
|
||||||
CONFIG_ADB_PMU=y
|
CONFIG_ADB_PMU=y
|
||||||
CONFIG_PMAC_SMU=y
|
CONFIG_PMAC_SMU=y
|
||||||
# CONFIG_PMAC_BACKLIGHT is not set
|
# CONFIG_PMAC_BACKLIGHT is not set
|
||||||
# CONFIG_INPUT_ADBHID is not set
|
|
||||||
CONFIG_THERM_PM72=y
|
CONFIG_THERM_PM72=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -631,6 +628,8 @@ CONFIG_PPPOE=m
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
# CONFIG_NETCONSOLE is not set
|
# CONFIG_NETCONSOLE is not set
|
||||||
|
# CONFIG_NETPOLL is not set
|
||||||
|
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# ISDN subsystem
|
# ISDN subsystem
|
||||||
|
@ -718,7 +717,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.13-rc3
|
# Linux kernel version: 2.6.13-rc6
|
||||||
# Wed Jul 13 14:43:39 2005
|
# Mon Aug 8 14:17:02 2005
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -257,10 +257,6 @@ CONFIG_NET_CLS_ROUTE=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
CONFIG_NETPOLL=y
|
|
||||||
CONFIG_NETPOLL_RX=y
|
|
||||||
CONFIG_NETPOLL_TRAP=y
|
|
||||||
CONFIG_NET_POLL_CONTROLLER=y
|
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -388,6 +384,7 @@ CONFIG_SCSI_QLA2XXX=y
|
||||||
# CONFIG_SCSI_QLA2300 is not set
|
# CONFIG_SCSI_QLA2300 is not set
|
||||||
# CONFIG_SCSI_QLA2322 is not set
|
# CONFIG_SCSI_QLA2322 is not set
|
||||||
# CONFIG_SCSI_QLA6312 is not set
|
# CONFIG_SCSI_QLA6312 is not set
|
||||||
|
# CONFIG_SCSI_QLA24XX is not set
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -537,6 +534,10 @@ CONFIG_PPPOE=m
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
CONFIG_NETCONSOLE=y
|
CONFIG_NETCONSOLE=y
|
||||||
|
CONFIG_NETPOLL=y
|
||||||
|
CONFIG_NETPOLL_RX=y
|
||||||
|
CONFIG_NETPOLL_TRAP=y
|
||||||
|
CONFIG_NET_POLL_CONTROLLER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# ISDN subsystem
|
# ISDN subsystem
|
||||||
|
@ -610,7 +611,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.13-rc3
|
# Linux kernel version: 2.6.13-rc6
|
||||||
# Wed Jul 13 14:46:18 2005
|
# Mon Aug 8 14:17:04 2005
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -193,8 +193,6 @@ CONFIG_TCP_CONG_BIC=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
# CONFIG_NETPOLL is not set
|
|
||||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -433,6 +431,8 @@ CONFIG_E1000=y
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
# CONFIG_NETCONSOLE is not set
|
# CONFIG_NETCONSOLE is not set
|
||||||
|
# CONFIG_NETPOLL is not set
|
||||||
|
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# ISDN subsystem
|
# ISDN subsystem
|
||||||
|
@ -512,7 +512,6 @@ CONFIG_LEGACY_PTY_COUNT=256
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.13-rc3
|
# Linux kernel version: 2.6.13-rc6
|
||||||
# Wed Jul 13 14:47:54 2005
|
# Mon Aug 8 14:17:07 2005
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -287,10 +287,6 @@ CONFIG_NET_CLS_ROUTE=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
CONFIG_NETPOLL=y
|
|
||||||
CONFIG_NETPOLL_RX=y
|
|
||||||
CONFIG_NETPOLL_TRAP=y
|
|
||||||
CONFIG_NET_POLL_CONTROLLER=y
|
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -488,6 +484,7 @@ CONFIG_SCSI_QLA22XX=m
|
||||||
CONFIG_SCSI_QLA2300=m
|
CONFIG_SCSI_QLA2300=m
|
||||||
CONFIG_SCSI_QLA2322=m
|
CONFIG_SCSI_QLA2322=m
|
||||||
CONFIG_SCSI_QLA6312=m
|
CONFIG_SCSI_QLA6312=m
|
||||||
|
CONFIG_SCSI_QLA24XX=m
|
||||||
CONFIG_SCSI_LPFC=m
|
CONFIG_SCSI_LPFC=m
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -645,6 +642,10 @@ CONFIG_PPPOE=m
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
CONFIG_NETCONSOLE=y
|
CONFIG_NETCONSOLE=y
|
||||||
|
CONFIG_NETPOLL=y
|
||||||
|
CONFIG_NETPOLL_RX=y
|
||||||
|
CONFIG_NETPOLL_TRAP=y
|
||||||
|
CONFIG_NET_POLL_CONTROLLER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# ISDN subsystem
|
# ISDN subsystem
|
||||||
|
@ -746,7 +747,6 @@ CONFIG_HVCS=m
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.13-rc3
|
# Linux kernel version: 2.6.13-rc6
|
||||||
# Wed Jul 13 14:37:07 2005
|
# Mon Aug 8 14:16:54 2005
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -289,10 +289,6 @@ CONFIG_NET_CLS_ROUTE=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
CONFIG_NETPOLL=y
|
|
||||||
CONFIG_NETPOLL_RX=y
|
|
||||||
CONFIG_NETPOLL_TRAP=y
|
|
||||||
CONFIG_NET_POLL_CONTROLLER=y
|
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -506,6 +502,7 @@ CONFIG_SCSI_QLA22XX=m
|
||||||
CONFIG_SCSI_QLA2300=m
|
CONFIG_SCSI_QLA2300=m
|
||||||
CONFIG_SCSI_QLA2322=m
|
CONFIG_SCSI_QLA2322=m
|
||||||
CONFIG_SCSI_QLA6312=m
|
CONFIG_SCSI_QLA6312=m
|
||||||
|
CONFIG_SCSI_QLA24XX=m
|
||||||
CONFIG_SCSI_LPFC=m
|
CONFIG_SCSI_LPFC=m
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -579,11 +576,9 @@ CONFIG_IEEE1394_AMDTP=m
|
||||||
#
|
#
|
||||||
# Macintosh device drivers
|
# Macintosh device drivers
|
||||||
#
|
#
|
||||||
CONFIG_ADB=y
|
|
||||||
CONFIG_ADB_PMU=y
|
CONFIG_ADB_PMU=y
|
||||||
CONFIG_PMAC_SMU=y
|
CONFIG_PMAC_SMU=y
|
||||||
# CONFIG_PMAC_BACKLIGHT is not set
|
# CONFIG_PMAC_BACKLIGHT is not set
|
||||||
# CONFIG_INPUT_ADBHID is not set
|
|
||||||
CONFIG_THERM_PM72=y
|
CONFIG_THERM_PM72=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -694,6 +689,10 @@ CONFIG_PPPOE=m
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
CONFIG_NETCONSOLE=y
|
CONFIG_NETCONSOLE=y
|
||||||
|
CONFIG_NETPOLL=y
|
||||||
|
CONFIG_NETPOLL_RX=y
|
||||||
|
CONFIG_NETPOLL_TRAP=y
|
||||||
|
CONFIG_NET_POLL_CONTROLLER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# ISDN subsystem
|
# ISDN subsystem
|
||||||
|
@ -797,7 +796,6 @@ CONFIG_HVCS=m
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_GEN_RTC is not set
|
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
|
|
|
@ -2071,7 +2071,7 @@ _GLOBAL(hmt_start_secondary)
|
||||||
blr
|
blr
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_SMP) && !defined(CONFIG_PPC_ISERIES)
|
#if defined(CONFIG_KEXEC) || (defined(CONFIG_SMP) && !defined(CONFIG_PPC_ISERIES))
|
||||||
_GLOBAL(smp_release_cpus)
|
_GLOBAL(smp_release_cpus)
|
||||||
/* All secondary cpus are spinning on a common
|
/* All secondary cpus are spinning on a common
|
||||||
* spinloop, release them all now so they can start
|
* spinloop, release them all now so they can start
|
||||||
|
|
|
@ -185,7 +185,7 @@ void kexec_copy_flush(struct kimage *image)
|
||||||
void kexec_smp_down(void *arg)
|
void kexec_smp_down(void *arg)
|
||||||
{
|
{
|
||||||
if (ppc_md.cpu_irq_down)
|
if (ppc_md.cpu_irq_down)
|
||||||
ppc_md.cpu_irq_down();
|
ppc_md.cpu_irq_down(1);
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
kexec_smp_wait();
|
kexec_smp_wait();
|
||||||
|
@ -232,7 +232,7 @@ static void kexec_prepare_cpus(void)
|
||||||
|
|
||||||
/* after we tell the others to go down */
|
/* after we tell the others to go down */
|
||||||
if (ppc_md.cpu_irq_down)
|
if (ppc_md.cpu_irq_down)
|
||||||
ppc_md.cpu_irq_down();
|
ppc_md.cpu_irq_down(0);
|
||||||
|
|
||||||
put_cpu();
|
put_cpu();
|
||||||
|
|
||||||
|
@ -243,15 +243,19 @@ static void kexec_prepare_cpus(void)
|
||||||
|
|
||||||
static void kexec_prepare_cpus(void)
|
static void kexec_prepare_cpus(void)
|
||||||
{
|
{
|
||||||
|
extern void smp_release_cpus(void);
|
||||||
/*
|
/*
|
||||||
* move the secondarys to us so that we can copy
|
* move the secondarys to us so that we can copy
|
||||||
* the new kernel 0-0x100 safely
|
* the new kernel 0-0x100 safely
|
||||||
*
|
*
|
||||||
* do this if kexec in setup.c ?
|
* do this if kexec in setup.c ?
|
||||||
|
*
|
||||||
|
* We need to release the cpus if we are ever going from an
|
||||||
|
* UP to an SMP kernel.
|
||||||
*/
|
*/
|
||||||
smp_relase_cpus();
|
smp_release_cpus();
|
||||||
if (ppc_md.cpu_irq_down)
|
if (ppc_md.cpu_irq_down)
|
||||||
ppc_md.cpu_irq_down();
|
ppc_md.cpu_irq_down(0);
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1129,6 +1129,9 @@ _GLOBAL(sys_call_table32)
|
||||||
.llong .compat_sys_waitid
|
.llong .compat_sys_waitid
|
||||||
.llong .sys32_ioprio_set
|
.llong .sys32_ioprio_set
|
||||||
.llong .sys32_ioprio_get
|
.llong .sys32_ioprio_get
|
||||||
|
.llong .sys_inotify_init /* 275 */
|
||||||
|
.llong .sys_inotify_add_watch
|
||||||
|
.llong .sys_inotify_rm_watch
|
||||||
|
|
||||||
.balign 8
|
.balign 8
|
||||||
_GLOBAL(sys_call_table)
|
_GLOBAL(sys_call_table)
|
||||||
|
@ -1407,3 +1410,6 @@ _GLOBAL(sys_call_table)
|
||||||
.llong .sys_waitid
|
.llong .sys_waitid
|
||||||
.llong .sys_ioprio_set
|
.llong .sys_ioprio_set
|
||||||
.llong .sys_ioprio_get
|
.llong .sys_ioprio_get
|
||||||
|
.llong .sys_inotify_init /* 275 */
|
||||||
|
.llong .sys_inotify_add_watch
|
||||||
|
.llong .sys_inotify_rm_watch
|
||||||
|
|
|
@ -794,10 +794,10 @@ void mpic_setup_this_cpu(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX: someone who knows mpic should check this.
|
* XXX: someone who knows mpic should check this.
|
||||||
* do we need to eoi the ipi here (see xics comments)?
|
* do we need to eoi the ipi including for kexec cpu here (see xics comments)?
|
||||||
* or can we reset the mpic in the new kernel?
|
* or can we reset the mpic in the new kernel?
|
||||||
*/
|
*/
|
||||||
void mpic_teardown_this_cpu(void)
|
void mpic_teardown_this_cpu(int secondary)
|
||||||
{
|
{
|
||||||
struct mpic *mpic = mpic_primary;
|
struct mpic *mpic = mpic_primary;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
|
@ -256,7 +256,7 @@ extern unsigned int mpic_irq_get_priority(unsigned int irq);
|
||||||
extern void mpic_setup_this_cpu(void);
|
extern void mpic_setup_this_cpu(void);
|
||||||
|
|
||||||
/* Clean up for kexec (or cpu offline or ...) */
|
/* Clean up for kexec (or cpu offline or ...) */
|
||||||
extern void mpic_teardown_this_cpu(void);
|
extern void mpic_teardown_this_cpu(int secondary);
|
||||||
|
|
||||||
/* Request IPIs on primary mpic */
|
/* Request IPIs on primary mpic */
|
||||||
extern void mpic_request_ipis(void);
|
extern void mpic_request_ipis(void);
|
||||||
|
|
|
@ -108,8 +108,28 @@ void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region
|
||||||
region->end = res->end - offset;
|
region->end = res->end - offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
|
||||||
|
struct pci_bus_region *region)
|
||||||
|
{
|
||||||
|
unsigned long offset = 0;
|
||||||
|
struct pci_controller *hose = pci_bus_to_host(dev->bus);
|
||||||
|
|
||||||
|
if (!hose)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (res->flags & IORESOURCE_IO)
|
||||||
|
offset = (unsigned long)hose->io_base_virt - pci_io_base;
|
||||||
|
|
||||||
|
if (res->flags & IORESOURCE_MEM)
|
||||||
|
offset = hose->pci_mem_offset;
|
||||||
|
|
||||||
|
res->start = region->start + offset;
|
||||||
|
res->end = region->end + offset;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG
|
#ifdef CONFIG_HOTPLUG
|
||||||
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
EXPORT_SYMBOL(pcibios_resource_to_bus);
|
||||||
|
EXPORT_SYMBOL(pcibios_bus_to_resource);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -916,6 +916,7 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ALTIVEC
|
||||||
/* Check if we have a VMX and eventually update CPU features */
|
/* Check if we have a VMX and eventually update CPU features */
|
||||||
prop = (u32 *)get_flat_dt_prop(node, "ibm,vmx", NULL);
|
prop = (u32 *)get_flat_dt_prop(node, "ibm,vmx", NULL);
|
||||||
if (prop && (*prop) > 0) {
|
if (prop && (*prop) > 0) {
|
||||||
|
@ -929,6 +930,7 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||||
cur_cpu_spec->cpu_features |= CPU_FTR_ALTIVEC;
|
cur_cpu_spec->cpu_features |= CPU_FTR_ALTIVEC;
|
||||||
cur_cpu_spec->cpu_user_features |= PPC_FEATURE_HAS_ALTIVEC;
|
cur_cpu_spec->cpu_user_features |= PPC_FEATURE_HAS_ALTIVEC;
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_ALTIVEC */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for an SMT capable CPU and set the CPU feature. We do
|
* Check for an SMT capable CPU and set the CPU feature. We do
|
||||||
|
|
|
@ -647,29 +647,30 @@ static void xics_set_affinity(unsigned int virq, cpumask_t cpumask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void xics_teardown_cpu(void)
|
void xics_teardown_cpu(int secondary)
|
||||||
{
|
{
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
int status;
|
|
||||||
|
|
||||||
ops->cppr_info(cpu, 0x00);
|
ops->cppr_info(cpu, 0x00);
|
||||||
iosync();
|
iosync();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* we need to EOI the IPI if we got here from kexec down IPI
|
* Some machines need to have at least one cpu in the GIQ,
|
||||||
*
|
* so leave the master cpu in the group.
|
||||||
* xics doesn't care if we duplicate an EOI as long as we
|
|
||||||
* don't EOI and raise priority.
|
|
||||||
*
|
|
||||||
* probably need to check all the other interrupts too
|
|
||||||
* should we be flagging idle loop instead?
|
|
||||||
* or creating some task to be scheduled?
|
|
||||||
*/
|
*/
|
||||||
ops->xirr_info_set(cpu, XICS_IPI);
|
if (secondary) {
|
||||||
|
/*
|
||||||
status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
* we need to EOI the IPI if we got here from kexec down IPI
|
||||||
(1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
|
*
|
||||||
WARN_ON(status != 0);
|
* probably need to check all the other interrupts too
|
||||||
|
* should we be flagging idle loop instead?
|
||||||
|
* or creating some task to be scheduled?
|
||||||
|
*/
|
||||||
|
ops->xirr_info_set(cpu, XICS_IPI);
|
||||||
|
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
||||||
|
(1UL << interrupt_server_size) - 1 -
|
||||||
|
default_distrib_server, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue