Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
commit
0ed3f64ec3
228 changed files with 2562 additions and 2006 deletions
234
Documentation/fujitsu/frv/kernel-ABI.txt
Normal file
234
Documentation/fujitsu/frv/kernel-ABI.txt
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
=================================
|
||||||
|
INTERNAL KERNEL ABI FOR FR-V ARCH
|
||||||
|
=================================
|
||||||
|
|
||||||
|
The internal FRV kernel ABI is not quite the same as the userspace ABI. A number of the registers
|
||||||
|
are used for special purposed, and the ABI is not consistent between modules vs core, and MMU vs
|
||||||
|
no-MMU.
|
||||||
|
|
||||||
|
This partly stems from the fact that FRV CPUs do not have a separate supervisor stack pointer, and
|
||||||
|
most of them do not have any scratch registers, thus requiring at least one general purpose
|
||||||
|
register to be clobbered in such an event. Also, within the kernel core, it is possible to simply
|
||||||
|
jump or call directly between functions using a relative offset. This cannot be extended to modules
|
||||||
|
for the displacement is likely to be too far. Thus in modules the address of a function to call
|
||||||
|
must be calculated in a register and then used, requiring two extra instructions.
|
||||||
|
|
||||||
|
This document has the following sections:
|
||||||
|
|
||||||
|
(*) System call register ABI
|
||||||
|
(*) CPU operating modes
|
||||||
|
(*) Internal kernel-mode register ABI
|
||||||
|
(*) Internal debug-mode register ABI
|
||||||
|
(*) Virtual interrupt handling
|
||||||
|
|
||||||
|
|
||||||
|
========================
|
||||||
|
SYSTEM CALL REGISTER ABI
|
||||||
|
========================
|
||||||
|
|
||||||
|
When a system call is made, the following registers are effective:
|
||||||
|
|
||||||
|
REGISTERS CALL RETURN
|
||||||
|
=============== ======================= =======================
|
||||||
|
GR7 System call number Preserved
|
||||||
|
GR8 Syscall arg #1 Return value
|
||||||
|
GR9-GR13 Syscall arg #2-6 Preserved
|
||||||
|
|
||||||
|
|
||||||
|
===================
|
||||||
|
CPU OPERATING MODES
|
||||||
|
===================
|
||||||
|
|
||||||
|
The FR-V CPU has three basic operating modes. In order of increasing capability:
|
||||||
|
|
||||||
|
(1) User mode.
|
||||||
|
|
||||||
|
Basic userspace running mode.
|
||||||
|
|
||||||
|
(2) Kernel mode.
|
||||||
|
|
||||||
|
Normal kernel mode. There are many additional control registers available that may be
|
||||||
|
accessed in this mode, in addition to all the stuff available to user mode. This has two
|
||||||
|
submodes:
|
||||||
|
|
||||||
|
(a) Exceptions enabled (PSR.T == 1).
|
||||||
|
|
||||||
|
Exceptions will invoke the appropriate normal kernel mode handler. On entry to the
|
||||||
|
handler, the PSR.T bit will be cleared.
|
||||||
|
|
||||||
|
(b) Exceptions disabled (PSR.T == 0).
|
||||||
|
|
||||||
|
No exceptions or interrupts may happen. Any mandatory exceptions will cause the CPU to
|
||||||
|
halt unless the CPU is told to jump into debug mode instead.
|
||||||
|
|
||||||
|
(3) Debug mode.
|
||||||
|
|
||||||
|
No exceptions may happen in this mode. Memory protection and management exceptions will be
|
||||||
|
flagged for later consideration, but the exception handler won't be invoked. Debugging traps
|
||||||
|
such as hardware breakpoints and watchpoints will be ignored. This mode is entered only by
|
||||||
|
debugging events obtained from the other two modes.
|
||||||
|
|
||||||
|
All kernel mode registers may be accessed, plus a few extra debugging specific registers.
|
||||||
|
|
||||||
|
|
||||||
|
=================================
|
||||||
|
INTERNAL KERNEL-MODE REGISTER ABI
|
||||||
|
=================================
|
||||||
|
|
||||||
|
There are a number of permanent register assignments that are set up by entry.S in the exception
|
||||||
|
prologue. Note that there is a complete set of exception prologues for each of user->kernel
|
||||||
|
transition and kernel->kernel transition. There are also user->debug and kernel->debug mode
|
||||||
|
transition prologues.
|
||||||
|
|
||||||
|
|
||||||
|
REGISTER FLAVOUR USE
|
||||||
|
=============== ======= ====================================================
|
||||||
|
GR1 Supervisor stack pointer
|
||||||
|
GR15 Current thread info pointer
|
||||||
|
GR16 GP-Rel base register for small data
|
||||||
|
GR28 Current exception frame pointer (__frame)
|
||||||
|
GR29 Current task pointer (current)
|
||||||
|
GR30 Destroyed by kernel mode entry
|
||||||
|
GR31 NOMMU Destroyed by debug mode entry
|
||||||
|
GR31 MMU Destroyed by TLB miss kernel mode entry
|
||||||
|
CCR.ICC2 Virtual interrupt disablement tracking
|
||||||
|
CCCR.CC3 Cleared by exception prologue (atomic op emulation)
|
||||||
|
SCR0 MMU See mmu-layout.txt.
|
||||||
|
SCR1 MMU See mmu-layout.txt.
|
||||||
|
SCR2 MMU Save for EAR0 (destroyed by icache insns in debug mode)
|
||||||
|
SCR3 MMU Save for GR31 during debug exceptions
|
||||||
|
DAMR/IAMR NOMMU Fixed memory protection layout.
|
||||||
|
DAMR/IAMR MMU See mmu-layout.txt.
|
||||||
|
|
||||||
|
|
||||||
|
Certain registers are also used or modified across function calls:
|
||||||
|
|
||||||
|
REGISTER CALL RETURN
|
||||||
|
=============== =============================== ===============================
|
||||||
|
GR0 Fixed Zero -
|
||||||
|
GR2 Function call frame pointer
|
||||||
|
GR3 Special Preserved
|
||||||
|
GR3-GR7 - Clobbered
|
||||||
|
GR8 Function call arg #1 Return value (or clobbered)
|
||||||
|
GR9 Function call arg #2 Return value MSW (or clobbered)
|
||||||
|
GR10-GR13 Function call arg #3-#6 Clobbered
|
||||||
|
GR14 - Clobbered
|
||||||
|
GR15-GR16 Special Preserved
|
||||||
|
GR17-GR27 - Preserved
|
||||||
|
GR28-GR31 Special Only accessed explicitly
|
||||||
|
LR Return address after CALL Clobbered
|
||||||
|
CCR/CCCR - Mostly Clobbered
|
||||||
|
|
||||||
|
|
||||||
|
================================
|
||||||
|
INTERNAL DEBUG-MODE REGISTER ABI
|
||||||
|
================================
|
||||||
|
|
||||||
|
This is the same as the kernel-mode register ABI for functions calls. The difference is that in
|
||||||
|
debug-mode there's a different stack and a different exception frame. Almost all the global
|
||||||
|
registers from kernel-mode (including the stack pointer) may be changed.
|
||||||
|
|
||||||
|
REGISTER FLAVOUR USE
|
||||||
|
=============== ======= ====================================================
|
||||||
|
GR1 Debug stack pointer
|
||||||
|
GR16 GP-Rel base register for small data
|
||||||
|
GR31 Current debug exception frame pointer (__debug_frame)
|
||||||
|
SCR3 MMU Saved value of GR31
|
||||||
|
|
||||||
|
|
||||||
|
Note that debug mode is able to interfere with the kernel's emulated atomic ops, so it must be
|
||||||
|
exceedingly careful not to do any that would interact with the main kernel in this regard. Hence
|
||||||
|
the debug mode code (gdbstub) is almost completely self-contained. The only external code used is
|
||||||
|
the sprintf family of functions.
|
||||||
|
|
||||||
|
Futhermore, break.S is so complicated because single-step mode does not switch off on entry to an
|
||||||
|
exception. That means unless manually disabled, single-stepping will blithely go on stepping into
|
||||||
|
things like interrupts. See gdbstub.txt for more information.
|
||||||
|
|
||||||
|
|
||||||
|
==========================
|
||||||
|
VIRTUAL INTERRUPT HANDLING
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Because accesses to the PSR is so slow, and to disable interrupts we have to access it twice (once
|
||||||
|
to read and once to write), we don't actually disable interrupts at all if we don't have to. What
|
||||||
|
we do instead is use the ICC2 condition code flags to note virtual disablement, such that if we
|
||||||
|
then do take an interrupt, we note the flag, really disable interrupts, set another flag and resume
|
||||||
|
execution at the point the interrupt happened. Setting condition flags as a side effect of an
|
||||||
|
arithmetic or logical instruction is really fast. This use of the ICC2 only occurs within the
|
||||||
|
kernel - it does not affect userspace.
|
||||||
|
|
||||||
|
The flags we use are:
|
||||||
|
|
||||||
|
(*) CCR.ICC2.Z [Zero flag]
|
||||||
|
|
||||||
|
Set to virtually disable interrupts, clear when interrupts are virtually enabled. Can be
|
||||||
|
modified by logical instructions without affecting the Carry flag.
|
||||||
|
|
||||||
|
(*) CCR.ICC2.C [Carry flag]
|
||||||
|
|
||||||
|
Clear to indicate hardware interrupts are really disabled, set otherwise.
|
||||||
|
|
||||||
|
|
||||||
|
What happens is this:
|
||||||
|
|
||||||
|
(1) Normal kernel-mode operation.
|
||||||
|
|
||||||
|
ICC2.Z is 0, ICC2.C is 1.
|
||||||
|
|
||||||
|
(2) An interrupt occurs. The exception prologue examines ICC2.Z and determines that nothing needs
|
||||||
|
doing. This is done simply with an unlikely BEQ instruction.
|
||||||
|
|
||||||
|
(3) The interrupts are disabled (local_irq_disable)
|
||||||
|
|
||||||
|
ICC2.Z is set to 1.
|
||||||
|
|
||||||
|
(4) If interrupts were then re-enabled (local_irq_enable):
|
||||||
|
|
||||||
|
ICC2.Z would be set to 0.
|
||||||
|
|
||||||
|
A TIHI #2 instruction (trap #2 if condition HI - Z==0 && C==0) would be used to trap if
|
||||||
|
interrupts were now virtually enabled, but physically disabled - which they're not, so the
|
||||||
|
trap isn't taken. The kernel would then be back to state (1).
|
||||||
|
|
||||||
|
(5) An interrupt occurs. The exception prologue examines ICC2.Z and determines that the interrupt
|
||||||
|
shouldn't actually have happened. It jumps aside, and there disabled interrupts by setting
|
||||||
|
PSR.PIL to 14 and then it clears ICC2.C.
|
||||||
|
|
||||||
|
(6) If interrupts were then saved and disabled again (local_irq_save):
|
||||||
|
|
||||||
|
ICC2.Z would be shifted into the save variable and masked off (giving a 1).
|
||||||
|
|
||||||
|
ICC2.Z would then be set to 1 (thus unchanged), and ICC2.C would be unaffected (ie: 0).
|
||||||
|
|
||||||
|
(7) If interrupts were then restored from state (6) (local_irq_restore):
|
||||||
|
|
||||||
|
ICC2.Z would be set to indicate the result of XOR'ing the saved value (ie: 1) with 1, which
|
||||||
|
gives a result of 0 - thus leaving ICC2.Z set.
|
||||||
|
|
||||||
|
ICC2.C would remain unaffected (ie: 0).
|
||||||
|
|
||||||
|
A TIHI #2 instruction would be used to again assay the current state, but this would do
|
||||||
|
nothing as Z==1.
|
||||||
|
|
||||||
|
(8) If interrupts were then enabled (local_irq_enable):
|
||||||
|
|
||||||
|
ICC2.Z would be cleared. ICC2.C would be left unaffected. Both flags would now be 0.
|
||||||
|
|
||||||
|
A TIHI #2 instruction again issued to assay the current state would then trap as both Z==0
|
||||||
|
[interrupts virtually enabled] and C==0 [interrupts really disabled] would then be true.
|
||||||
|
|
||||||
|
(9) The trap #2 handler would simply enable hardware interrupts (set PSR.PIL to 0), set ICC2.C to
|
||||||
|
1 and return.
|
||||||
|
|
||||||
|
(10) Immediately upon returning, the pending interrupt would be taken.
|
||||||
|
|
||||||
|
(11) The interrupt handler would take the path of actually processing the interrupt (ICC2.Z is
|
||||||
|
clear, BEQ fails as per step (2)).
|
||||||
|
|
||||||
|
(12) The interrupt handler would then set ICC2.C to 1 since hardware interrupts are definitely
|
||||||
|
enabled - or else the kernel wouldn't be here.
|
||||||
|
|
||||||
|
(13) On return from the interrupt handler, things would be back to state (1).
|
||||||
|
|
||||||
|
This trap (#2) is only available in kernel mode. In user mode it will result in SIGILL.
|
|
@ -36,6 +36,10 @@ Module Parameters
|
||||||
(default is 1)
|
(default is 1)
|
||||||
Use 'init=0' to bypass initializing the chip.
|
Use 'init=0' to bypass initializing the chip.
|
||||||
Try this if your computer crashes when you load the module.
|
Try this if your computer crashes when you load the module.
|
||||||
|
* reset: int
|
||||||
|
(default is 0)
|
||||||
|
The driver used to reset the chip on load, but does no more. Use
|
||||||
|
'reset=1' to restore the old behavior. Report if you need to do this.
|
||||||
|
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
|
|
|
@ -136,17 +136,20 @@ Kprobes, jprobes, and return probes are implemented on the following
|
||||||
architectures:
|
architectures:
|
||||||
|
|
||||||
- i386
|
- i386
|
||||||
- x86_64 (AMD-64, E64MT)
|
- x86_64 (AMD-64, EM64T)
|
||||||
- ppc64
|
- ppc64
|
||||||
- ia64 (Support for probes on certain instruction types is still in progress.)
|
- ia64 (Does not support probes on instruction slot1.)
|
||||||
- sparc64 (Return probes not yet implemented.)
|
- sparc64 (Return probes not yet implemented.)
|
||||||
|
|
||||||
3. Configuring Kprobes
|
3. Configuring Kprobes
|
||||||
|
|
||||||
When configuring the kernel using make menuconfig/xconfig/oldconfig,
|
When configuring the kernel using make menuconfig/xconfig/oldconfig,
|
||||||
ensure that CONFIG_KPROBES is set to "y". Under "Kernel hacking",
|
ensure that CONFIG_KPROBES is set to "y". Under "Instrumentation
|
||||||
look for "Kprobes". You may have to enable "Kernel debugging"
|
Support", look for "Kprobes".
|
||||||
(CONFIG_DEBUG_KERNEL) before you can enable Kprobes.
|
|
||||||
|
So that you can load and unload Kprobes-based instrumentation modules,
|
||||||
|
make sure "Loadable module support" (CONFIG_MODULES) and "Module
|
||||||
|
unloading" (CONFIG_MODULE_UNLOAD) are set to "y".
|
||||||
|
|
||||||
You may also want to ensure that CONFIG_KALLSYMS and perhaps even
|
You may also want to ensure that CONFIG_KALLSYMS and perhaps even
|
||||||
CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
|
CONFIG_KALLSYMS_ALL are set to "y", since kallsyms_lookup_name()
|
||||||
|
@ -262,18 +265,18 @@ at any time after the probe has been registered.
|
||||||
|
|
||||||
5. Kprobes Features and Limitations
|
5. Kprobes Features and Limitations
|
||||||
|
|
||||||
As of Linux v2.6.12, Kprobes allows multiple probes at the same
|
Kprobes allows multiple probes at the same address. Currently,
|
||||||
address. Currently, however, there cannot be multiple jprobes on
|
however, there cannot be multiple jprobes on the same function at
|
||||||
the same function at the same time.
|
the same time.
|
||||||
|
|
||||||
In general, you can install a probe anywhere in the kernel.
|
In general, you can install a probe anywhere in the kernel.
|
||||||
In particular, you can probe interrupt handlers. Known exceptions
|
In particular, you can probe interrupt handlers. Known exceptions
|
||||||
are discussed in this section.
|
are discussed in this section.
|
||||||
|
|
||||||
For obvious reasons, it's a bad idea to install a probe in
|
The register_*probe functions will return -EINVAL if you attempt
|
||||||
the code that implements Kprobes (mostly kernel/kprobes.c and
|
to install a probe in the code that implements Kprobes (mostly
|
||||||
arch/*/kernel/kprobes.c). A patch in the v2.6.13 timeframe instructs
|
kernel/kprobes.c and arch/*/kernel/kprobes.c, but also functions such
|
||||||
Kprobes to reject such requests.
|
as do_page_fault and notifier_call_chain).
|
||||||
|
|
||||||
If you install a probe in an inline-able function, Kprobes makes
|
If you install a probe in an inline-able function, Kprobes makes
|
||||||
no attempt to chase down all inline instances of the function and
|
no attempt to chase down all inline instances of the function and
|
||||||
|
@ -290,18 +293,14 @@ from the accidental ones. Don't drink and probe.
|
||||||
|
|
||||||
Kprobes makes no attempt to prevent probe handlers from stepping on
|
Kprobes makes no attempt to prevent probe handlers from stepping on
|
||||||
each other -- e.g., probing printk() and then calling printk() from a
|
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,
|
probe handler. If a probe handler hits a probe, that second probe's
|
||||||
that second probe's handlers won't be run in that instance.
|
handlers won't be run in that instance, and the kprobe.nmissed member
|
||||||
|
of the second probe will be incremented.
|
||||||
|
|
||||||
In Linux v2.6.12 and previous versions, Kprobes' data structures are
|
As of Linux v2.6.15-rc1, multiple handlers (or multiple instances of
|
||||||
protected by a single lock that is held during probe registration and
|
the same handler) may run concurrently on different CPUs.
|
||||||
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
|
Kprobes does not use mutexes or allocate memory except during
|
||||||
registration and unregistration.
|
registration and unregistration.
|
||||||
|
|
||||||
Probe handlers are run with preemption disabled. Depending on the
|
Probe handlers are run with preemption disabled. Depending on the
|
||||||
|
@ -316,11 +315,18 @@ address instead of the real return address for kretprobed functions.
|
||||||
(As far as we can tell, __builtin_return_address() is used only
|
(As far as we can tell, __builtin_return_address() is used only
|
||||||
for instrumentation and error reporting.)
|
for instrumentation and error reporting.)
|
||||||
|
|
||||||
If the number of times a function is called does not match the
|
If the number of times a function is called does not match the number
|
||||||
number of times it returns, registering a return probe on that
|
of times it returns, registering a return probe on that function may
|
||||||
function may produce undesirable results. We have the do_exit()
|
produce undesirable results. We have the do_exit() case covered.
|
||||||
and do_execve() cases covered. do_fork() is not an issue. We're
|
do_execve() and do_fork() are not an issue. We're unaware of other
|
||||||
unaware of other specific cases where this could be a problem.
|
specific cases where this could be a problem.
|
||||||
|
|
||||||
|
If, upon entry to or exit from a function, the CPU is running on
|
||||||
|
a stack other than that of the current task, registering a return
|
||||||
|
probe on that function may produce undesirable results. For this
|
||||||
|
reason, Kprobes doesn't support return probes (or kprobes or jprobes)
|
||||||
|
on the x86_64 version of __switch_to(); the registration functions
|
||||||
|
return -EINVAL.
|
||||||
|
|
||||||
6. Probe Overhead
|
6. Probe Overhead
|
||||||
|
|
||||||
|
@ -347,14 +353,12 @@ k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
|
||||||
|
|
||||||
7. TODO
|
7. TODO
|
||||||
|
|
||||||
a. SystemTap (http://sourceware.org/systemtap): Work in progress
|
a. SystemTap (http://sourceware.org/systemtap): Provides a simplified
|
||||||
to provide a simplified programming interface for probe-based
|
programming interface for probe-based instrumentation. Try it out.
|
||||||
instrumentation.
|
b. Kernel return probes for sparc64.
|
||||||
b. Improved SMP scalability: Currently, work is in progress to handle
|
c. Support for other architectures.
|
||||||
multiple kprobes in parallel.
|
d. User-space probes.
|
||||||
c. Kernel return probes for sparc64.
|
e. Watchpoint probes (which fire on data references).
|
||||||
d. Support for other architectures.
|
|
||||||
e. User-space probes.
|
|
||||||
|
|
||||||
8. Kprobes Example
|
8. Kprobes Example
|
||||||
|
|
||||||
|
@ -411,8 +415,7 @@ int init_module(void)
|
||||||
printk("Couldn't find %s to plant kprobe\n", "do_fork");
|
printk("Couldn't find %s to plant kprobe\n", "do_fork");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ret = register_kprobe(&kp);
|
if ((ret = register_kprobe(&kp) < 0)) {
|
||||||
if (ret < 0) {
|
|
||||||
printk("register_kprobe failed, returned %d\n", ret);
|
printk("register_kprobe failed, returned %d\n", ret);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,11 +95,13 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||||
CONFIG_IDEDMA_PCI_AUTO=y
|
CONFIG_IDEDMA_PCI_AUTO=y
|
||||||
CONFIG_BLK_DEV_IDE_AU1XXX=y
|
CONFIG_BLK_DEV_IDE_AU1XXX=y
|
||||||
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
|
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
|
||||||
CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON=y
|
|
||||||
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
|
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
|
||||||
CONFIG_BLK_DEV_IDEDMA=y
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
CONFIG_IDEDMA_AUTO=y
|
CONFIG_IDEDMA_AUTO=y
|
||||||
|
|
||||||
|
Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable
|
||||||
|
the burst support on DBDMA controller.
|
||||||
|
|
||||||
If the used system need the USB support enable the following kernel configs for
|
If the used system need the USB support enable the following kernel configs for
|
||||||
high IDE to USB throughput.
|
high IDE to USB throughput.
|
||||||
|
|
||||||
|
@ -115,6 +117,8 @@ CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
|
||||||
CONFIG_BLK_DEV_IDEDMA=y
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
CONFIG_IDEDMA_AUTO=y
|
CONFIG_IDEDMA_AUTO=y
|
||||||
|
|
||||||
|
Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to
|
||||||
|
disable the burst support on DBDMA controller.
|
||||||
|
|
||||||
ADD NEW HARD DISC TO WHITE OR BLACK LIST
|
ADD NEW HARD DISC TO WHITE OR BLACK LIST
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
compiler and the textural representation of
|
compiler and the textural representation of
|
||||||
the tree that can be "compiled" by dtc.
|
the tree that can be "compiled" by dtc.
|
||||||
|
|
||||||
|
|
||||||
November 21, 2005: Rev 0.5
|
November 21, 2005: Rev 0.5
|
||||||
- Additions/generalizations for 32-bit
|
- Additions/generalizations for 32-bit
|
||||||
- Changed to reflect the new arch/powerpc
|
- Changed to reflect the new arch/powerpc
|
||||||
|
@ -1307,6 +1306,65 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
f) Freescale SOC USB controllers
|
||||||
|
|
||||||
|
The device node for a USB controller that is part of a Freescale
|
||||||
|
SOC is as described in the document "Open Firmware Recommended
|
||||||
|
Practice : Universal Serial Bus" with the following modifications
|
||||||
|
and additions :
|
||||||
|
|
||||||
|
Required properties :
|
||||||
|
- compatible : Should be "fsl-usb2-mph" for multi port host usb
|
||||||
|
controllers, or "fsl-usb2-dr" for dual role usb controllers
|
||||||
|
- phy_type : For multi port host usb controllers, should be one of
|
||||||
|
"ulpi", or "serial". For dual role usb controllers, should be
|
||||||
|
one of "ulpi", "utmi", "utmi_wide", or "serial".
|
||||||
|
- reg : Offset and length of the register set for the device
|
||||||
|
- port0 : boolean; if defined, indicates port0 is connected for
|
||||||
|
fsl-usb2-mph compatible controllers. Either this property or
|
||||||
|
"port1" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||||
|
controllers.
|
||||||
|
- port1 : boolean; if defined, indicates port1 is connected for
|
||||||
|
fsl-usb2-mph compatible controllers. Either this property or
|
||||||
|
"port0" (or both) must be defined for "fsl-usb2-mph" compatible
|
||||||
|
controllers.
|
||||||
|
|
||||||
|
Recommended properties :
|
||||||
|
- interrupts : <a b> where a is the interrupt number and b is a
|
||||||
|
field that represents an encoding of the sense and level
|
||||||
|
information for the interrupt. This should be encoded based on
|
||||||
|
the information in section 2) depending on the type of interrupt
|
||||||
|
controller you have.
|
||||||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||||||
|
services interrupts for this device.
|
||||||
|
|
||||||
|
Example multi port host usb controller device node :
|
||||||
|
usb@22000 {
|
||||||
|
device_type = "usb";
|
||||||
|
compatible = "fsl-usb2-mph";
|
||||||
|
reg = <22000 1000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
interrupt-parent = <700>;
|
||||||
|
interrupts = <27 1>;
|
||||||
|
phy_type = "ulpi";
|
||||||
|
port0;
|
||||||
|
port1;
|
||||||
|
};
|
||||||
|
|
||||||
|
Example dual role usb controller device node :
|
||||||
|
usb@23000 {
|
||||||
|
device_type = "usb";
|
||||||
|
compatible = "fsl-usb2-dr";
|
||||||
|
reg = <23000 1000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
interrupt-parent = <700>;
|
||||||
|
interrupts = <26 1>;
|
||||||
|
phy = "ulpi";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
More devices will be defined as this spec matures.
|
More devices will be defined as this spec matures.
|
||||||
|
|
||||||
|
|
||||||
|
|
18
MAINTAINERS
18
MAINTAINERS
|
@ -2232,7 +2232,23 @@ P: Martin Schwidefsky
|
||||||
M: schwidefsky@de.ibm.com
|
M: schwidefsky@de.ibm.com
|
||||||
M: linux390@de.ibm.com
|
M: linux390@de.ibm.com
|
||||||
L: linux-390@vm.marist.edu
|
L: linux-390@vm.marist.edu
|
||||||
W: http://oss.software.ibm.com/developerworks/opensource/linux390
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
|
S: Supported
|
||||||
|
|
||||||
|
S390 NETWORK DRIVERS
|
||||||
|
P: Frank Pavlic
|
||||||
|
M: fpavlic@de.ibm.com
|
||||||
|
M: linux390@de.ibm.com
|
||||||
|
L: linux-390@vm.marist.edu
|
||||||
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
|
S: Supported
|
||||||
|
|
||||||
|
S390 ZFCP DRIVER
|
||||||
|
P: Andreas Herrmann
|
||||||
|
M: aherrman@de.ibm.com
|
||||||
|
M: linux390@de.ibm.com
|
||||||
|
L: linux-390@vm.marist.edu
|
||||||
|
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
SAA7146 VIDEO4LINUX-2 DRIVER
|
SAA7146 VIDEO4LINUX-2 DRIVER
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 16
|
SUBLEVEL = 16
|
||||||
EXTRAVERSION =-rc2
|
EXTRAVERSION =-rc3
|
||||||
NAME=Sliding Snow Leopard
|
NAME=Sliding Snow Leopard
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -46,10 +46,11 @@
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
//#include <asm/debug-ll.h>
|
|
||||||
#include <asm/arch/regs-serial.h>
|
#include <asm/arch/regs-serial.h>
|
||||||
#include <asm/arch/regs-lcd.h>
|
#include <asm/arch/regs-lcd.h>
|
||||||
|
|
||||||
|
#include <asm/arch/h1940-latch.h>
|
||||||
#include <asm/arch/fb.h>
|
#include <asm/arch/fb.h>
|
||||||
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
|
@ -59,7 +60,12 @@
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
static struct map_desc h1940_iodesc[] __initdata = {
|
static struct map_desc h1940_iodesc[] __initdata = {
|
||||||
/* nothing here yet */
|
[0] = {
|
||||||
|
.virtual = (unsigned long)H1940_LATCH,
|
||||||
|
.pfn = __phys_to_pfn(H1940_PA_LATCH),
|
||||||
|
.length = SZ_16K,
|
||||||
|
.type = MT_DEVICE
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||||
|
@ -92,6 +98,25 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Board control latch control */
|
||||||
|
|
||||||
|
static unsigned int latch_state = H1940_LATCH_DEFAULT;
|
||||||
|
|
||||||
|
void h1940_latch_control(unsigned int clear, unsigned int set)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
local_irq_save(flags);
|
||||||
|
|
||||||
|
latch_state &= ~clear;
|
||||||
|
latch_state |= set;
|
||||||
|
|
||||||
|
__raw_writel(latch_state, H1940_LATCH);
|
||||||
|
|
||||||
|
local_irq_restore(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL_GPL(h1940_latch_control);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
31
arch/arm/mach-s3c2410/s3c2400.h
Normal file
31
arch/arm/mach-s3c2410/s3c2400.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
/* arch/arm/mach-s3c2410/s3c2400.h
|
||||||
|
*
|
||||||
|
* Copyright (c) 2004 Simtec Electronics
|
||||||
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
|
*
|
||||||
|
* Header file for S3C2400 cpu support
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Modifications:
|
||||||
|
* 09-Fev-2006 LCVR First version, based on s3c2410.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_S3C2400
|
||||||
|
|
||||||
|
extern int s3c2400_init(void);
|
||||||
|
|
||||||
|
extern void s3c2400_map_io(struct map_desc *mach_desc, int size);
|
||||||
|
|
||||||
|
extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no);
|
||||||
|
|
||||||
|
extern void s3c2400_init_clocks(int xtal);
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define s3c2400_init_clocks NULL
|
||||||
|
#define s3c2400_init_uarts NULL
|
||||||
|
#define s3c2400_map_io NULL
|
||||||
|
#define s3c2400_init NULL
|
||||||
|
#endif
|
|
@ -25,6 +25,10 @@ config GENERIC_HARDIRQS
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
mainmenu "Fujitsu FR-V Kernel Configuration"
|
mainmenu "Fujitsu FR-V Kernel Configuration"
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|
|
@ -81,7 +81,7 @@ endif
|
||||||
# - reserve CC3 for use with atomic ops
|
# - reserve CC3 for use with atomic ops
|
||||||
# - all the extra registers are dealt with only at context switch time
|
# - all the extra registers are dealt with only at context switch time
|
||||||
CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media
|
CFLAGS += -mno-fdpic -mgpr-32 -msoft-float -mno-media
|
||||||
CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15
|
CFLAGS += -ffixed-fcc3 -ffixed-cc3 -ffixed-gr15 -ffixed-icc2
|
||||||
AFLAGS += -mno-fdpic
|
AFLAGS += -mno-fdpic
|
||||||
ASFLAGS += -mno-fdpic
|
ASFLAGS += -mno-fdpic
|
||||||
|
|
||||||
|
|
|
@ -200,12 +200,20 @@ __break_step:
|
||||||
movsg bpcsr,gr2
|
movsg bpcsr,gr2
|
||||||
sethi.p %hi(__entry_kernel_external_interrupt),gr3
|
sethi.p %hi(__entry_kernel_external_interrupt),gr3
|
||||||
setlo %lo(__entry_kernel_external_interrupt),gr3
|
setlo %lo(__entry_kernel_external_interrupt),gr3
|
||||||
subcc gr2,gr3,gr0,icc0
|
subcc.p gr2,gr3,gr0,icc0
|
||||||
|
sethi %hi(__entry_uspace_external_interrupt),gr3
|
||||||
|
setlo.p %lo(__entry_uspace_external_interrupt),gr3
|
||||||
beq icc0,#2,__break_step_kernel_external_interrupt
|
beq icc0,#2,__break_step_kernel_external_interrupt
|
||||||
sethi.p %hi(__entry_uspace_external_interrupt),gr3
|
subcc.p gr2,gr3,gr0,icc0
|
||||||
setlo %lo(__entry_uspace_external_interrupt),gr3
|
sethi %hi(__entry_kernel_external_interrupt_virtually_disabled),gr3
|
||||||
subcc gr2,gr3,gr0,icc0
|
setlo.p %lo(__entry_kernel_external_interrupt_virtually_disabled),gr3
|
||||||
beq icc0,#2,__break_step_uspace_external_interrupt
|
beq icc0,#2,__break_step_uspace_external_interrupt
|
||||||
|
subcc.p gr2,gr3,gr0,icc0
|
||||||
|
sethi %hi(__entry_kernel_external_interrupt_virtual_reenable),gr3
|
||||||
|
setlo.p %lo(__entry_kernel_external_interrupt_virtual_reenable),gr3
|
||||||
|
beq icc0,#2,__break_step_kernel_external_interrupt_virtually_disabled
|
||||||
|
subcc gr2,gr3,gr0,icc0
|
||||||
|
beq icc0,#2,__break_step_kernel_external_interrupt_virtual_reenable
|
||||||
|
|
||||||
LEDS 0x2007,gr2
|
LEDS 0x2007,gr2
|
||||||
|
|
||||||
|
@ -254,6 +262,9 @@ __break_step_kernel_softprog_interrupt:
|
||||||
# step through an external interrupt from kernel mode
|
# step through an external interrupt from kernel mode
|
||||||
.globl __break_step_kernel_external_interrupt
|
.globl __break_step_kernel_external_interrupt
|
||||||
__break_step_kernel_external_interrupt:
|
__break_step_kernel_external_interrupt:
|
||||||
|
# deal with virtual interrupt disablement
|
||||||
|
beq icc2,#0,__break_step_kernel_external_interrupt_virtually_disabled
|
||||||
|
|
||||||
sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3
|
sethi.p %hi(__entry_kernel_external_interrupt_reentry),gr3
|
||||||
setlo %lo(__entry_kernel_external_interrupt_reentry),gr3
|
setlo %lo(__entry_kernel_external_interrupt_reentry),gr3
|
||||||
|
|
||||||
|
@ -294,6 +305,64 @@ __break_return_as_kernel_prologue:
|
||||||
#endif
|
#endif
|
||||||
rett #1
|
rett #1
|
||||||
|
|
||||||
|
# we single-stepped into an interrupt handler whilst interrupts were merely virtually disabled
|
||||||
|
# need to really disable interrupts, set flag, fix up and return
|
||||||
|
__break_step_kernel_external_interrupt_virtually_disabled:
|
||||||
|
movsg psr,gr2
|
||||||
|
andi gr2,#~PSR_PIL,gr2
|
||||||
|
ori gr2,#PSR_PIL_14,gr2 /* debugging interrupts only */
|
||||||
|
movgs gr2,psr
|
||||||
|
|
||||||
|
ldi @(gr31,#REG_CCR),gr3
|
||||||
|
movgs gr3,ccr
|
||||||
|
subcc.p gr0,gr0,gr0,icc2 /* leave Z set, clear C */
|
||||||
|
|
||||||
|
# exceptions must've been enabled and we must've been in supervisor mode
|
||||||
|
setlos BPSR_BET|BPSR_BS,gr3
|
||||||
|
movgs gr3,bpsr
|
||||||
|
|
||||||
|
# return to where the interrupt happened
|
||||||
|
movsg pcsr,gr2
|
||||||
|
movgs gr2,bpcsr
|
||||||
|
|
||||||
|
lddi.p @(gr31,#REG_GR(2)),gr2
|
||||||
|
|
||||||
|
xor gr31,gr31,gr31
|
||||||
|
movgs gr0,brr
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
|
movsg scr3,gr31
|
||||||
|
#endif
|
||||||
|
rett #1
|
||||||
|
|
||||||
|
# we stepped through into the virtual interrupt reenablement trap
|
||||||
|
#
|
||||||
|
# we also want to single step anyway, but after fixing up so that we get an event on the
|
||||||
|
# instruction after the broken-into exception returns
|
||||||
|
.globl __break_step_kernel_external_interrupt_virtual_reenable
|
||||||
|
__break_step_kernel_external_interrupt_virtual_reenable:
|
||||||
|
movsg psr,gr2
|
||||||
|
andi gr2,#~PSR_PIL,gr2
|
||||||
|
movgs gr2,psr
|
||||||
|
|
||||||
|
ldi @(gr31,#REG_CCR),gr3
|
||||||
|
movgs gr3,ccr
|
||||||
|
subicc gr0,#1,gr0,icc2 /* clear Z, set C */
|
||||||
|
|
||||||
|
# save the adjusted ICC2
|
||||||
|
movsg ccr,gr3
|
||||||
|
sti gr3,@(gr31,#REG_CCR)
|
||||||
|
|
||||||
|
# exceptions must've been enabled and we must've been in supervisor mode
|
||||||
|
setlos BPSR_BET|BPSR_BS,gr3
|
||||||
|
movgs gr3,bpsr
|
||||||
|
|
||||||
|
# return to where the trap happened
|
||||||
|
movsg pcsr,gr2
|
||||||
|
movgs gr2,bpcsr
|
||||||
|
|
||||||
|
# and then process the single step
|
||||||
|
bra __break_continue
|
||||||
|
|
||||||
# step through an internal exception from uspace mode
|
# step through an internal exception from uspace mode
|
||||||
.globl __break_step_uspace_softprog_interrupt
|
.globl __break_step_uspace_softprog_interrupt
|
||||||
__break_step_uspace_softprog_interrupt:
|
__break_step_uspace_softprog_interrupt:
|
||||||
|
|
|
@ -116,6 +116,8 @@ __break_kerneltrap_fixup_table:
|
||||||
.long __break_step_uspace_external_interrupt
|
.long __break_step_uspace_external_interrupt
|
||||||
.section .trap.kernel
|
.section .trap.kernel
|
||||||
.org \tbr_tt
|
.org \tbr_tt
|
||||||
|
# deal with virtual interrupt disablement
|
||||||
|
beq icc2,#0,__entry_kernel_external_interrupt_virtually_disabled
|
||||||
bra __entry_kernel_external_interrupt
|
bra __entry_kernel_external_interrupt
|
||||||
.section .trap.fixup.kernel
|
.section .trap.fixup.kernel
|
||||||
.org \tbr_tt >> 2
|
.org \tbr_tt >> 2
|
||||||
|
@ -259,25 +261,52 @@ __trap_fixup_kernel_data_tlb_miss:
|
||||||
.org TBR_TT_TRAP0
|
.org TBR_TT_TRAP0
|
||||||
.rept 127
|
.rept 127
|
||||||
bra __entry_uspace_softprog_interrupt
|
bra __entry_uspace_softprog_interrupt
|
||||||
bra __break_step_uspace_softprog_interrupt
|
.long 0,0,0
|
||||||
.long 0,0
|
|
||||||
.endr
|
.endr
|
||||||
.org TBR_TT_BREAK
|
.org TBR_TT_BREAK
|
||||||
bra __entry_break
|
bra __entry_break
|
||||||
.long 0,0,0
|
.long 0,0,0
|
||||||
|
|
||||||
|
.section .trap.fixup.user
|
||||||
|
.org TBR_TT_TRAP0 >> 2
|
||||||
|
.rept 127
|
||||||
|
.long __break_step_uspace_softprog_interrupt
|
||||||
|
.endr
|
||||||
|
.org TBR_TT_BREAK >> 2
|
||||||
|
.long 0
|
||||||
|
|
||||||
# miscellaneous kernel mode entry points
|
# miscellaneous kernel mode entry points
|
||||||
.section .trap.kernel
|
.section .trap.kernel
|
||||||
.org TBR_TT_TRAP0
|
.org TBR_TT_TRAP0
|
||||||
.rept 127
|
|
||||||
bra __entry_kernel_softprog_interrupt
|
bra __entry_kernel_softprog_interrupt
|
||||||
bra __break_step_kernel_softprog_interrupt
|
.org TBR_TT_TRAP1
|
||||||
.long 0,0
|
bra __entry_kernel_softprog_interrupt
|
||||||
|
|
||||||
|
# trap #2 in kernel - reenable interrupts
|
||||||
|
.org TBR_TT_TRAP2
|
||||||
|
bra __entry_kernel_external_interrupt_virtual_reenable
|
||||||
|
|
||||||
|
# miscellaneous kernel traps
|
||||||
|
.org TBR_TT_TRAP3
|
||||||
|
.rept 124
|
||||||
|
bra __entry_kernel_softprog_interrupt
|
||||||
|
.long 0,0,0
|
||||||
.endr
|
.endr
|
||||||
.org TBR_TT_BREAK
|
.org TBR_TT_BREAK
|
||||||
bra __entry_break
|
bra __entry_break
|
||||||
.long 0,0,0
|
.long 0,0,0
|
||||||
|
|
||||||
|
.section .trap.fixup.kernel
|
||||||
|
.org TBR_TT_TRAP0 >> 2
|
||||||
|
.long __break_step_kernel_softprog_interrupt
|
||||||
|
.long __break_step_kernel_softprog_interrupt
|
||||||
|
.long __break_step_kernel_external_interrupt_virtual_reenable
|
||||||
|
.rept 124
|
||||||
|
.long __break_step_kernel_softprog_interrupt
|
||||||
|
.endr
|
||||||
|
.org TBR_TT_BREAK >> 2
|
||||||
|
.long 0
|
||||||
|
|
||||||
# miscellaneous debug mode entry points
|
# miscellaneous debug mode entry points
|
||||||
.section .trap.break
|
.section .trap.break
|
||||||
.org TBR_TT_BREAK
|
.org TBR_TT_BREAK
|
||||||
|
|
|
@ -141,7 +141,10 @@ __entry_uspace_external_interrupt_reentry:
|
||||||
|
|
||||||
movsg gner0,gr4
|
movsg gner0,gr4
|
||||||
movsg gner1,gr5
|
movsg gner1,gr5
|
||||||
stdi gr4,@(gr28,#REG_GNER0)
|
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||||
|
|
||||||
|
# interrupts start off fully disabled in the interrupt handler
|
||||||
|
subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
|
||||||
|
|
||||||
# set up kernel global registers
|
# set up kernel global registers
|
||||||
sethi.p %hi(__kernel_current_task),gr5
|
sethi.p %hi(__kernel_current_task),gr5
|
||||||
|
@ -193,9 +196,8 @@ __entry_uspace_external_interrupt_reentry:
|
||||||
.type __entry_kernel_external_interrupt,@function
|
.type __entry_kernel_external_interrupt,@function
|
||||||
__entry_kernel_external_interrupt:
|
__entry_kernel_external_interrupt:
|
||||||
LEDS 0x6210
|
LEDS 0x6210
|
||||||
|
// sub sp,gr15,gr31
|
||||||
sub sp,gr15,gr31
|
// LEDS32
|
||||||
LEDS32
|
|
||||||
|
|
||||||
# set up the stack pointer
|
# set up the stack pointer
|
||||||
or.p sp,gr0,gr30
|
or.p sp,gr0,gr30
|
||||||
|
@ -231,7 +233,10 @@ __entry_kernel_external_interrupt_reentry:
|
||||||
stdi gr24,@(gr28,#REG_GR(24))
|
stdi gr24,@(gr28,#REG_GR(24))
|
||||||
stdi gr26,@(gr28,#REG_GR(26))
|
stdi gr26,@(gr28,#REG_GR(26))
|
||||||
sti gr29,@(gr28,#REG_GR(29))
|
sti gr29,@(gr28,#REG_GR(29))
|
||||||
stdi gr30,@(gr28,#REG_GR(30))
|
stdi.p gr30,@(gr28,#REG_GR(30))
|
||||||
|
|
||||||
|
# note virtual interrupts will be fully enabled upon return
|
||||||
|
subicc gr0,#1,gr0,icc2 /* clear Z, set C */
|
||||||
|
|
||||||
movsg tbr ,gr20
|
movsg tbr ,gr20
|
||||||
movsg psr ,gr22
|
movsg psr ,gr22
|
||||||
|
@ -267,7 +272,10 @@ __entry_kernel_external_interrupt_reentry:
|
||||||
|
|
||||||
movsg gner0,gr4
|
movsg gner0,gr4
|
||||||
movsg gner1,gr5
|
movsg gner1,gr5
|
||||||
stdi gr4,@(gr28,#REG_GNER0)
|
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||||
|
|
||||||
|
# interrupts start off fully disabled in the interrupt handler
|
||||||
|
subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
|
||||||
|
|
||||||
# set the return address
|
# set the return address
|
||||||
sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
|
sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
|
||||||
|
@ -291,6 +299,45 @@ __entry_kernel_external_interrupt_reentry:
|
||||||
|
|
||||||
.size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
|
.size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# deal with interrupts that were actually virtually disabled
|
||||||
|
# - we need to really disable them, flag the fact and return immediately
|
||||||
|
# - if you change this, you must alter break.S also
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
.balign L1_CACHE_BYTES
|
||||||
|
.globl __entry_kernel_external_interrupt_virtually_disabled
|
||||||
|
.type __entry_kernel_external_interrupt_virtually_disabled,@function
|
||||||
|
__entry_kernel_external_interrupt_virtually_disabled:
|
||||||
|
movsg psr,gr30
|
||||||
|
andi gr30,#~PSR_PIL,gr30
|
||||||
|
ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only
|
||||||
|
movgs gr30,psr
|
||||||
|
subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C
|
||||||
|
rett #0
|
||||||
|
|
||||||
|
.size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# deal with re-enablement of interrupts that were pending when virtually re-enabled
|
||||||
|
# - set ICC2.C, re-enable the real interrupts and return
|
||||||
|
# - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
|
||||||
|
# - if you change this, you must alter break.S also
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
.balign L1_CACHE_BYTES
|
||||||
|
.globl __entry_kernel_external_interrupt_virtual_reenable
|
||||||
|
.type __entry_kernel_external_interrupt_virtual_reenable,@function
|
||||||
|
__entry_kernel_external_interrupt_virtual_reenable:
|
||||||
|
movsg psr,gr30
|
||||||
|
andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts
|
||||||
|
movgs gr30,psr
|
||||||
|
subicc gr0,#1,gr0,icc2 ; clear Z, set C
|
||||||
|
rett #0
|
||||||
|
|
||||||
|
.size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
|
@ -335,6 +382,7 @@ __entry_uspace_softprog_interrupt_reentry:
|
||||||
|
|
||||||
sethi.p %hi(__entry_return_from_user_exception),gr23
|
sethi.p %hi(__entry_return_from_user_exception),gr23
|
||||||
setlo %lo(__entry_return_from_user_exception),gr23
|
setlo %lo(__entry_return_from_user_exception),gr23
|
||||||
|
|
||||||
bra __entry_common
|
bra __entry_common
|
||||||
|
|
||||||
.size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
|
.size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
|
||||||
|
@ -495,7 +543,10 @@ __entry_common:
|
||||||
|
|
||||||
movsg gner0,gr4
|
movsg gner0,gr4
|
||||||
movsg gner1,gr5
|
movsg gner1,gr5
|
||||||
stdi gr4,@(gr28,#REG_GNER0)
|
stdi.p gr4,@(gr28,#REG_GNER0)
|
||||||
|
|
||||||
|
# set up virtual interrupt disablement
|
||||||
|
subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */
|
||||||
|
|
||||||
# set up kernel global registers
|
# set up kernel global registers
|
||||||
sethi.p %hi(__kernel_current_task),gr5
|
sethi.p %hi(__kernel_current_task),gr5
|
||||||
|
@ -1418,11 +1469,27 @@ sys_call_table:
|
||||||
.long sys_add_key
|
.long sys_add_key
|
||||||
.long sys_request_key
|
.long sys_request_key
|
||||||
.long sys_keyctl
|
.long sys_keyctl
|
||||||
.long sys_ni_syscall // sys_vperfctr_open
|
.long sys_ioprio_set
|
||||||
.long sys_ni_syscall // sys_vperfctr_control /* 290 */
|
.long sys_ioprio_get /* 290 */
|
||||||
.long sys_ni_syscall // sys_vperfctr_unlink
|
.long sys_inotify_init
|
||||||
.long sys_ni_syscall // sys_vperfctr_iresume
|
.long sys_inotify_add_watch
|
||||||
.long sys_ni_syscall // sys_vperfctr_read
|
.long sys_inotify_rm_watch
|
||||||
|
.long sys_migrate_pages
|
||||||
|
.long sys_openat /* 295 */
|
||||||
|
.long sys_mkdirat
|
||||||
|
.long sys_mknodat
|
||||||
|
.long sys_fchownat
|
||||||
|
.long sys_futimesat
|
||||||
|
.long sys_newfstatat /* 300 */
|
||||||
|
.long sys_unlinkat
|
||||||
|
.long sys_renameat
|
||||||
|
.long sys_linkat
|
||||||
|
.long sys_symlinkat
|
||||||
|
.long sys_readlinkat /* 305 */
|
||||||
|
.long sys_fchmodat
|
||||||
|
.long sys_faccessat
|
||||||
|
.long sys_pselect6
|
||||||
|
.long sys_ppoll
|
||||||
|
|
||||||
|
|
||||||
syscall_table_size = (. - sys_call_table)
|
syscall_table_size = (. - sys_call_table)
|
||||||
|
|
|
@ -513,6 +513,9 @@ __head_mmu_enabled:
|
||||||
movgs gr0,ccr
|
movgs gr0,ccr
|
||||||
movgs gr0,cccr
|
movgs gr0,cccr
|
||||||
|
|
||||||
|
# initialise the virtual interrupt handling
|
||||||
|
subcc gr0,gr0,gr0,icc2 /* set Z, clear C */
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
movgs gr3,scr2
|
movgs gr3,scr2
|
||||||
movgs gr3,scr3
|
movgs gr3,scr3
|
||||||
|
|
|
@ -287,18 +287,11 @@ asmlinkage void do_IRQ(void)
|
||||||
struct irq_source *source;
|
struct irq_source *source;
|
||||||
int level, cpu;
|
int level, cpu;
|
||||||
|
|
||||||
|
irq_enter();
|
||||||
|
|
||||||
level = (__frame->tbr >> 4) & 0xf;
|
level = (__frame->tbr >> 4) & 0xf;
|
||||||
cpu = smp_processor_id();
|
cpu = smp_processor_id();
|
||||||
|
|
||||||
#if 0
|
|
||||||
{
|
|
||||||
static u32 irqcount;
|
|
||||||
*(volatile u32 *) 0xe1200004 = ~((irqcount++ << 8) | level);
|
|
||||||
*(volatile u16 *) 0xffc00100 = (u16) ~0x9999;
|
|
||||||
mb();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
|
if ((unsigned long) __frame - (unsigned long) (current + 1) < 512)
|
||||||
BUG();
|
BUG();
|
||||||
|
|
||||||
|
@ -308,40 +301,12 @@ asmlinkage void do_IRQ(void)
|
||||||
|
|
||||||
kstat_this_cpu.irqs[level]++;
|
kstat_this_cpu.irqs[level]++;
|
||||||
|
|
||||||
irq_enter();
|
|
||||||
|
|
||||||
for (source = frv_irq_levels[level].sources; source; source = source->next)
|
for (source = frv_irq_levels[level].sources; source; source = source->next)
|
||||||
source->doirq(source);
|
source->doirq(source);
|
||||||
|
|
||||||
irq_exit();
|
|
||||||
|
|
||||||
__clr_MASK(level);
|
__clr_MASK(level);
|
||||||
|
|
||||||
/* only process softirqs if we didn't interrupt another interrupt handler */
|
irq_exit();
|
||||||
if ((__frame->psr & PSR_PIL) == PSR_PIL_0)
|
|
||||||
if (local_softirq_pending())
|
|
||||||
do_softirq();
|
|
||||||
|
|
||||||
#ifdef CONFIG_PREEMPT
|
|
||||||
local_irq_disable();
|
|
||||||
while (--current->preempt_count == 0) {
|
|
||||||
if (!(__frame->psr & PSR_S) ||
|
|
||||||
current->need_resched == 0 ||
|
|
||||||
in_interrupt())
|
|
||||||
break;
|
|
||||||
current->preempt_count++;
|
|
||||||
local_irq_enable();
|
|
||||||
preempt_schedule();
|
|
||||||
local_irq_disable();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
{
|
|
||||||
*(volatile u16 *) 0xffc00100 = (u16) ~0x6666;
|
|
||||||
mb();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* end do_IRQ() */
|
} /* end do_IRQ() */
|
||||||
|
|
||||||
|
|
|
@ -43,15 +43,6 @@ void iounmap(void *addr)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* __iounmap unmaps nearly everything, so be careful
|
|
||||||
* it doesn't free currently pointer/page tables anymore but it
|
|
||||||
* wans't used anyway and might be added later.
|
|
||||||
*/
|
|
||||||
void __iounmap(void *addr, unsigned long size)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set new cache mode for some kernel address space.
|
* Set new cache mode for some kernel address space.
|
||||||
* The caller must push data for that range itself, if such data may already
|
* The caller must push data for that range itself, if such data may already
|
||||||
|
|
|
@ -33,6 +33,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
config ISA
|
config ISA
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -169,7 +169,7 @@ endif
|
||||||
|
|
||||||
config CPU_H8300H
|
config CPU_H8300H
|
||||||
bool
|
bool
|
||||||
depends on (H8002 || H83007 || H83048 || H83068)
|
depends on (H83002 || H83007 || H83048 || H83068)
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config CPU_H8S
|
config CPU_H8S
|
||||||
|
|
3
arch/i386/boot/.gitignore
vendored
Normal file
3
arch/i386/boot/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
bootsect
|
||||||
|
bzImage
|
||||||
|
setup
|
1
arch/i386/boot/tools/.gitignore
vendored
Normal file
1
arch/i386/boot/tools/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
build
|
1
arch/i386/kernel/.gitignore
vendored
Normal file
1
arch/i386/kernel/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
vsyscall.lds
|
|
@ -398,7 +398,11 @@ ignore_int:
|
||||||
pushl 32(%esp)
|
pushl 32(%esp)
|
||||||
pushl 40(%esp)
|
pushl 40(%esp)
|
||||||
pushl $int_msg
|
pushl $int_msg
|
||||||
|
#ifdef CONFIG_EARLY_PRINTK
|
||||||
|
call early_printk
|
||||||
|
#else
|
||||||
call printk
|
call printk
|
||||||
|
#endif
|
||||||
addl $(5*4),%esp
|
addl $(5*4),%esp
|
||||||
popl %ds
|
popl %ds
|
||||||
popl %es
|
popl %es
|
||||||
|
|
|
@ -299,7 +299,7 @@ ENTRY(sys_call_table)
|
||||||
.long sys_mknodat
|
.long sys_mknodat
|
||||||
.long sys_fchownat
|
.long sys_fchownat
|
||||||
.long sys_futimesat
|
.long sys_futimesat
|
||||||
.long sys_newfstatat /* 300 */
|
.long sys_fstatat64 /* 300 */
|
||||||
.long sys_unlinkat
|
.long sys_unlinkat
|
||||||
.long sys_renameat
|
.long sys_renameat
|
||||||
.long sys_linkat
|
.long sys_linkat
|
||||||
|
|
|
@ -282,6 +282,10 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||||
if (val != CPUFREQ_RESUMECHANGE)
|
if (val != CPUFREQ_RESUMECHANGE)
|
||||||
write_seqlock_irq(&xtime_lock);
|
write_seqlock_irq(&xtime_lock);
|
||||||
if (!ref_freq) {
|
if (!ref_freq) {
|
||||||
|
if (!freq->old){
|
||||||
|
ref_freq = freq->new;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
ref_freq = freq->old;
|
ref_freq = freq->old;
|
||||||
loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
|
loops_per_jiffy_ref = cpu_data[freq->cpu].loops_per_jiffy;
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
|
@ -307,6 +311,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
if (val != CPUFREQ_RESUMECHANGE)
|
if (val != CPUFREQ_RESUMECHANGE)
|
||||||
write_sequnlock_irq(&xtime_lock);
|
write_sequnlock_irq(&xtime_lock);
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,21 @@
|
||||||
* for details.
|
* for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The caller puts arg2 in %ecx, which gets pushed. The kernel will use
|
||||||
|
* %ecx itself for arg2. The pushing is because the sysexit instruction
|
||||||
|
* (found in entry.S) requires that we clobber %ecx with the desired %esp.
|
||||||
|
* User code might expect that %ecx is unclobbered though, as it would be
|
||||||
|
* for returning via the iret instruction, so we must push and pop.
|
||||||
|
*
|
||||||
|
* The caller puts arg3 in %edx, which the sysexit instruction requires
|
||||||
|
* for %eip. Thus, exactly as for arg2, we must push and pop.
|
||||||
|
*
|
||||||
|
* Arg6 is different. The caller puts arg6 in %ebp. Since the sysenter
|
||||||
|
* instruction clobbers %esp, the user's %esp won't even survive entry
|
||||||
|
* into the kernel. We store %esp in %ebp. Code in entry.S must fetch
|
||||||
|
* arg6 from the stack.
|
||||||
|
*/
|
||||||
.text
|
.text
|
||||||
.globl __kernel_vsyscall
|
.globl __kernel_vsyscall
|
||||||
.type __kernel_vsyscall,@function
|
.type __kernel_vsyscall,@function
|
||||||
|
|
|
@ -20,7 +20,20 @@ struct frame_head {
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
static struct frame_head *
|
static struct frame_head *
|
||||||
dump_backtrace(struct frame_head * head)
|
dump_kernel_backtrace(struct frame_head * head)
|
||||||
|
{
|
||||||
|
oprofile_add_trace(head->ret);
|
||||||
|
|
||||||
|
/* frame pointers should strictly progress back up the stack
|
||||||
|
* (towards higher addresses) */
|
||||||
|
if (head >= head->ebp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return head->ebp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct frame_head *
|
||||||
|
dump_user_backtrace(struct frame_head * head)
|
||||||
{
|
{
|
||||||
struct frame_head bufhead[2];
|
struct frame_head bufhead[2];
|
||||||
|
|
||||||
|
@ -105,10 +118,10 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
|
||||||
|
|
||||||
if (!user_mode_vm(regs)) {
|
if (!user_mode_vm(regs)) {
|
||||||
while (depth-- && valid_kernel_stack(head, regs))
|
while (depth-- && valid_kernel_stack(head, regs))
|
||||||
head = dump_backtrace(head);
|
head = dump_kernel_backtrace(head);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (depth-- && head)
|
while (depth-- && head)
|
||||||
head = dump_backtrace(head);
|
head = dump_user_backtrace(head);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
config ARCH_MAY_HAVE_PC_FDC
|
config ARCH_MAY_HAVE_PC_FDC
|
||||||
bool
|
bool
|
||||||
depends on Q40 || (BROKEN && SUN3X)
|
depends on Q40 || (BROKEN && SUN3X)
|
||||||
|
|
|
@ -131,9 +131,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package
|
|BINDEC idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package
|
|BINSTR idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -152,9 +152,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package
|
|BUGFIX idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -69,9 +69,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
|DECBIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
DO_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
| fpsp.h --- stack frame offsets during FPSP exception handling
|
| fpsp.h --- stack frame offsets during FPSP exception handling
|
||||||
|
|
|
|
||||||
|
|
|
@ -29,9 +29,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
GEN_EXCEPT: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
GET_OP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
KERNEL_EX: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
RES_FUNC: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|ROUND idnt 2,1 | Motorola 040 Floating Point Software Package
|
|ROUND idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SACOS idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SACOS idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -38,9 +38,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SASIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SASIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|satan idnt 2,1 | Motorola 040 Floating Point Software Package
|
|satan idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -45,9 +45,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|satanh idnt 2,1 | Motorola 040 Floating Point Software Package
|
|satanh idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SCALE idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SCALE idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SCOSH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -331,9 +331,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|setox idnt 2,1 | Motorola 040 Floating Point Software Package
|
|setox idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -51,9 +51,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SINT idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SINT idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|
|
|
|
||||||
| Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)
|
| Modified for Linux-1.3.x by Jes Sorensen (jds@kom.auc.dk)
|
||||||
|
|
|
@ -96,9 +96,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SLOG2 idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -63,9 +63,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|slogn idnt 2,1 | Motorola 040 Floating Point Software Package
|
|slogn idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SMOVECR idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -66,9 +66,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
SREM_MOD: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -83,9 +83,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SSIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SSIN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|SSINH idnt 2,1 | Motorola 040 Floating Point Software Package
|
|SSINH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|STAN idnt 2,1 | Motorola 040 Floating Point Software Package
|
|STAN idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|STANH idnt 2,1 | Motorola 040 Floating Point Software Package
|
|STANH idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
STO_RES: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -76,9 +76,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package
|
|STWOTOX idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package
|
|TBLDO idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
|UTIL idnt 2,1 | Motorola 040 Floating Point Software Package
|
|UTIL idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_BSUN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_FLINE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_OPERR: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_OVFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_SNAN: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_STORE: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_UNFL: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_UNIMP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,8 @@
|
||||||
| Copyright (C) Motorola, Inc. 1990
|
| Copyright (C) Motorola, Inc. 1990
|
||||||
| All Rights Reserved
|
| All Rights Reserved
|
||||||
|
|
|
|
||||||
| THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
|
| For details on the license for this file, please see the
|
||||||
| The copyright notice above does not evidence any
|
| file, README, in this same directory.
|
||||||
| actual or intended publication of such source code.
|
|
||||||
|
|
||||||
X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
X_UNSUPP: |idnt 2,1 | Motorola 040 Floating Point Software Package
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,10 @@ config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|
||||||
menu "Processor type and features"
|
menu "Processor type and features"
|
||||||
|
|
|
@ -94,7 +94,6 @@ endif
|
||||||
# machines may also. Since BFD is incredibly buggy with respect to
|
# machines may also. Since BFD is incredibly buggy with respect to
|
||||||
# crossformat linking we rely on the elf2ecoff tool for format conversion.
|
# crossformat linking we rely on the elf2ecoff tool for format conversion.
|
||||||
#
|
#
|
||||||
cflags-y += -I $(TOPDIR)/include/asm/gcc
|
|
||||||
cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
|
cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
|
||||||
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
||||||
MODFLAGS += -mlong-calls
|
MODFLAGS += -mlong-calls
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <linux/a.out.h>
|
#include <linux/a.out.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
|
||||||
#include <asm/abi.h>
|
#include <asm/abi.h>
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
|
@ -272,46 +273,19 @@ long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
|
||||||
|
|
||||||
static struct mips_frame_info {
|
static struct mips_frame_info {
|
||||||
void *func;
|
void *func;
|
||||||
int omit_fp; /* compiled without fno-omit-frame-pointer */
|
unsigned long func_size;
|
||||||
int frame_offset;
|
int frame_size;
|
||||||
int pc_offset;
|
int pc_offset;
|
||||||
} schedule_frame, mfinfo[] = {
|
} *schedule_frame, mfinfo[64];
|
||||||
{ schedule, 0 }, /* must be first */
|
static int mfinfo_num;
|
||||||
/* arch/mips/kernel/semaphore.c */
|
|
||||||
{ __down, 1 },
|
|
||||||
{ __down_interruptible, 1 },
|
|
||||||
/* kernel/sched.c */
|
|
||||||
#ifdef CONFIG_PREEMPT
|
|
||||||
{ preempt_schedule, 0 },
|
|
||||||
#endif
|
|
||||||
{ wait_for_completion, 0 },
|
|
||||||
{ interruptible_sleep_on, 0 },
|
|
||||||
{ interruptible_sleep_on_timeout, 0 },
|
|
||||||
{ sleep_on, 0 },
|
|
||||||
{ sleep_on_timeout, 0 },
|
|
||||||
{ yield, 0 },
|
|
||||||
{ io_schedule, 0 },
|
|
||||||
{ io_schedule_timeout, 0 },
|
|
||||||
#if defined(CONFIG_SMP) && defined(CONFIG_PREEMPT)
|
|
||||||
{ __preempt_spin_lock, 0 },
|
|
||||||
{ __preempt_write_lock, 0 },
|
|
||||||
#endif
|
|
||||||
/* kernel/timer.c */
|
|
||||||
{ schedule_timeout, 1 },
|
|
||||||
/* { nanosleep_restart, 1 }, */
|
|
||||||
/* lib/rwsem-spinlock.c */
|
|
||||||
{ __down_read, 1 },
|
|
||||||
{ __down_write, 1 },
|
|
||||||
};
|
|
||||||
|
|
||||||
static int mips_frame_info_initialized;
|
|
||||||
static int __init get_frame_info(struct mips_frame_info *info)
|
static int __init get_frame_info(struct mips_frame_info *info)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *func = info->func;
|
void *func = info->func;
|
||||||
union mips_instruction *ip = (union mips_instruction *)func;
|
union mips_instruction *ip = (union mips_instruction *)func;
|
||||||
info->pc_offset = -1;
|
info->pc_offset = -1;
|
||||||
info->frame_offset = info->omit_fp ? 0 : -1;
|
info->frame_size = 0;
|
||||||
for (i = 0; i < 128; i++, ip++) {
|
for (i = 0; i < 128; i++, ip++) {
|
||||||
/* if jal, jalr, jr, stop. */
|
/* if jal, jalr, jr, stop. */
|
||||||
if (ip->j_format.opcode == jal_op ||
|
if (ip->j_format.opcode == jal_op ||
|
||||||
|
@ -320,6 +294,23 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||||
ip->r_format.func == jr_op)))
|
ip->r_format.func == jr_op)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (info->func_size && i >= info->func_size / 4)
|
||||||
|
break;
|
||||||
|
if (
|
||||||
|
#ifdef CONFIG_32BIT
|
||||||
|
ip->i_format.opcode == addiu_op &&
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
ip->i_format.opcode == daddiu_op &&
|
||||||
|
#endif
|
||||||
|
ip->i_format.rs == 29 &&
|
||||||
|
ip->i_format.rt == 29) {
|
||||||
|
/* addiu/daddiu sp,sp,-imm */
|
||||||
|
if (info->frame_size)
|
||||||
|
continue;
|
||||||
|
info->frame_size = - ip->i_format.simmediate;
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
#ifdef CONFIG_32BIT
|
#ifdef CONFIG_32BIT
|
||||||
ip->i_format.opcode == sw_op &&
|
ip->i_format.opcode == sw_op &&
|
||||||
|
@ -327,31 +318,20 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
ip->i_format.opcode == sd_op &&
|
ip->i_format.opcode == sd_op &&
|
||||||
#endif
|
#endif
|
||||||
ip->i_format.rs == 29)
|
ip->i_format.rs == 29 &&
|
||||||
{
|
ip->i_format.rt == 31) {
|
||||||
/* sw / sd $ra, offset($sp) */
|
/* sw / sd $ra, offset($sp) */
|
||||||
if (ip->i_format.rt == 31) {
|
if (info->pc_offset != -1)
|
||||||
if (info->pc_offset != -1)
|
continue;
|
||||||
continue;
|
info->pc_offset =
|
||||||
info->pc_offset =
|
ip->i_format.simmediate / sizeof(long);
|
||||||
ip->i_format.simmediate / sizeof(long);
|
|
||||||
}
|
|
||||||
/* sw / sd $s8, offset($sp) */
|
|
||||||
if (ip->i_format.rt == 30) {
|
|
||||||
//#if 0 /* gcc 3.4 does aggressive optimization... */
|
|
||||||
if (info->frame_offset != -1)
|
|
||||||
continue;
|
|
||||||
//#endif
|
|
||||||
info->frame_offset =
|
|
||||||
ip->i_format.simmediate / sizeof(long);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (info->pc_offset == -1 || info->frame_offset == -1) {
|
if (info->pc_offset == -1 || info->frame_size == 0) {
|
||||||
printk("Can't analyze prologue code at %p\n", func);
|
if (func == schedule)
|
||||||
|
printk("Can't analyze prologue code at %p\n", func);
|
||||||
info->pc_offset = -1;
|
info->pc_offset = -1;
|
||||||
info->frame_offset = -1;
|
info->frame_size = 0;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -359,25 +339,36 @@ static int __init get_frame_info(struct mips_frame_info *info)
|
||||||
|
|
||||||
static int __init frame_info_init(void)
|
static int __init frame_info_init(void)
|
||||||
{
|
{
|
||||||
int i, found;
|
int i;
|
||||||
for (i = 0; i < ARRAY_SIZE(mfinfo); i++)
|
#ifdef CONFIG_KALLSYMS
|
||||||
if (get_frame_info(&mfinfo[i]))
|
char *modname;
|
||||||
return -1;
|
char namebuf[KSYM_NAME_LEN + 1];
|
||||||
schedule_frame = mfinfo[0];
|
unsigned long start, size, ofs;
|
||||||
/* bubble sort */
|
extern char __sched_text_start[], __sched_text_end[];
|
||||||
do {
|
extern char __lock_text_start[], __lock_text_end[];
|
||||||
struct mips_frame_info tmp;
|
|
||||||
found = 0;
|
start = (unsigned long)__sched_text_start;
|
||||||
for (i = 1; i < ARRAY_SIZE(mfinfo); i++) {
|
for (i = 0; i < ARRAY_SIZE(mfinfo); i++) {
|
||||||
if (mfinfo[i-1].func > mfinfo[i].func) {
|
if (start == (unsigned long)schedule)
|
||||||
tmp = mfinfo[i];
|
schedule_frame = &mfinfo[i];
|
||||||
mfinfo[i] = mfinfo[i-1];
|
if (!kallsyms_lookup(start, &size, &ofs, &modname, namebuf))
|
||||||
mfinfo[i-1] = tmp;
|
break;
|
||||||
found = 1;
|
mfinfo[i].func = (void *)(start + ofs);
|
||||||
}
|
mfinfo[i].func_size = size;
|
||||||
}
|
start += size - ofs;
|
||||||
} while (found);
|
if (start >= (unsigned long)__lock_text_end)
|
||||||
mips_frame_info_initialized = 1;
|
break;
|
||||||
|
if (start == (unsigned long)__sched_text_end)
|
||||||
|
start = (unsigned long)__lock_text_start;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
mfinfo[0].func = schedule;
|
||||||
|
schedule_frame = &mfinfo[0];
|
||||||
|
#endif
|
||||||
|
for (i = 0; i < ARRAY_SIZE(mfinfo) && mfinfo[i].func; i++)
|
||||||
|
get_frame_info(&mfinfo[i]);
|
||||||
|
|
||||||
|
mfinfo_num = i;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,47 +385,52 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
|
||||||
if (t->reg31 == (unsigned long) ret_from_fork)
|
if (t->reg31 == (unsigned long) ret_from_fork)
|
||||||
return t->reg31;
|
return t->reg31;
|
||||||
|
|
||||||
if (schedule_frame.pc_offset < 0)
|
if (!schedule_frame || schedule_frame->pc_offset < 0)
|
||||||
return 0;
|
return 0;
|
||||||
return ((unsigned long *)t->reg29)[schedule_frame.pc_offset];
|
return ((unsigned long *)t->reg29)[schedule_frame->pc_offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */
|
/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
unsigned long stack_page;
|
unsigned long stack_page;
|
||||||
unsigned long frame, pc;
|
unsigned long pc;
|
||||||
|
#ifdef CONFIG_KALLSYMS
|
||||||
|
unsigned long frame;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!p || p == current || p->state == TASK_RUNNING)
|
if (!p || p == current || p->state == TASK_RUNNING)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
stack_page = (unsigned long)task_stack_page(p);
|
stack_page = (unsigned long)task_stack_page(p);
|
||||||
if (!stack_page || !mips_frame_info_initialized)
|
if (!stack_page || !mfinfo_num)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pc = thread_saved_pc(p);
|
pc = thread_saved_pc(p);
|
||||||
|
#ifdef CONFIG_KALLSYMS
|
||||||
if (!in_sched_functions(pc))
|
if (!in_sched_functions(pc))
|
||||||
return pc;
|
return pc;
|
||||||
|
|
||||||
frame = ((unsigned long *)p->thread.reg30)[schedule_frame.frame_offset];
|
frame = p->thread.reg29 + schedule_frame->frame_size;
|
||||||
do {
|
do {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
|
if (frame < stack_page || frame > stack_page + THREAD_SIZE - 32)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for (i = ARRAY_SIZE(mfinfo) - 1; i >= 0; i--) {
|
for (i = mfinfo_num - 1; i >= 0; i--) {
|
||||||
if (pc >= (unsigned long) mfinfo[i].func)
|
if (pc >= (unsigned long) mfinfo[i].func)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (mfinfo[i].omit_fp)
|
|
||||||
break;
|
|
||||||
pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
|
pc = ((unsigned long *)frame)[mfinfo[i].pc_offset];
|
||||||
frame = ((unsigned long *)frame)[mfinfo[i].frame_offset];
|
if (!mfinfo[i].frame_size)
|
||||||
|
break;
|
||||||
|
frame += mfinfo[i].frame_size;
|
||||||
} while (in_sched_functions(pc));
|
} while (in_sched_functions(pc));
|
||||||
|
#endif
|
||||||
|
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -623,7 +623,7 @@ einval: li v0, -EINVAL
|
||||||
sys sys_mknodat 4 /* 4290 */
|
sys sys_mknodat 4 /* 4290 */
|
||||||
sys sys_fchownat 5
|
sys sys_fchownat 5
|
||||||
sys sys_futimesat 3
|
sys sys_futimesat 3
|
||||||
sys sys_newfstatat 4
|
sys sys_fstatat64 4
|
||||||
sys sys_unlinkat 3
|
sys sys_unlinkat 3
|
||||||
sys sys_renameat 4 /* 4295 */
|
sys sys_renameat 4 /* 4295 */
|
||||||
sys sys_linkat 4
|
sys sys_linkat 4
|
||||||
|
|
|
@ -176,7 +176,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
|
||||||
if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
|
if ((ka->sa.sa_flags & SA_ONSTACK) && (sas_ss_flags (sp) == 0))
|
||||||
sp = current->sas_ss_sp + current->sas_ss_size;
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
|
|
||||||
return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? 32 : ALMASK));
|
return (void __user *)((sp - frame_size) & (ICACHE_REFILLS_WORKAROUND_WAR ? ~(cpu_icache_line_size()-1) : ALMASK));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int install_sigtramp(unsigned int __user *tramp,
|
static inline int install_sigtramp(unsigned int __user *tramp,
|
||||||
|
|
|
@ -537,7 +537,7 @@ _sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
|
||||||
/* The ucontext contains a stack32_t, so we must convert! */
|
/* The ucontext contains a stack32_t, so we must convert! */
|
||||||
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
st.ss_size = (long) sp;
|
st.ss_sp = (void *)(long) sp;
|
||||||
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
||||||
|
|
|
@ -108,7 +108,7 @@ _sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
|
||||||
/* The ucontext contains a stack32_t, so we must convert! */
|
/* The ucontext contains a stack32_t, so we must convert! */
|
||||||
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
if (__get_user(sp, &frame->rs_uc.uc_stack.ss_sp))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
st.ss_size = (long) sp;
|
st.ss_sp = (void *)(long) sp;
|
||||||
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
if (__get_user(st.ss_size, &frame->rs_uc.uc_stack.ss_size))
|
||||||
goto badframe;
|
goto badframe;
|
||||||
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
if (__get_user(st.ss_flags, &frame->rs_uc.uc_stack.ss_flags))
|
||||||
|
|
|
@ -68,6 +68,8 @@ void __init sanitize_tlb_entries(void)
|
||||||
|
|
||||||
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||||
|
|
||||||
|
back_to_back_c0_hazard();
|
||||||
|
|
||||||
/* Disable TLB sharing */
|
/* Disable TLB sharing */
|
||||||
clear_c0_mvpcontrol(MVPCONTROL_STLB);
|
clear_c0_mvpcontrol(MVPCONTROL_STLB);
|
||||||
|
|
||||||
|
@ -102,35 +104,6 @@ void __init sanitize_tlb_entries(void)
|
||||||
clear_c0_mvpcontrol(MVPCONTROL_VPC);
|
clear_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Use c0_MVPConf0 to find out how many CPUs are available, setting up
|
|
||||||
* phys_cpu_present_map and the logical/physical mappings.
|
|
||||||
*/
|
|
||||||
void __init prom_build_cpu_map(void)
|
|
||||||
{
|
|
||||||
int i, num, ncpus;
|
|
||||||
|
|
||||||
cpus_clear(phys_cpu_present_map);
|
|
||||||
|
|
||||||
/* assume we boot on cpu 0.... */
|
|
||||||
cpu_set(0, phys_cpu_present_map);
|
|
||||||
__cpu_number_map[0] = 0;
|
|
||||||
__cpu_logical_map[0] = 0;
|
|
||||||
|
|
||||||
if (cpu_has_mipsmt) {
|
|
||||||
ncpus = ((read_c0_mvpconf0() & (MVPCONF0_PVPE)) >> MVPCONF0_PVPE_SHIFT) + 1;
|
|
||||||
for (i=1, num=0; i< NR_CPUS && i<ncpus; i++) {
|
|
||||||
cpu_set(i, phys_cpu_present_map);
|
|
||||||
__cpu_number_map[i] = ++num;
|
|
||||||
__cpu_logical_map[num] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
printk(KERN_INFO "%i available secondary CPU(s)\n", num);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void ipi_resched_dispatch (struct pt_regs *regs)
|
static void ipi_resched_dispatch (struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
|
do_IRQ(MIPS_CPU_IPI_RESCHED_IRQ, regs);
|
||||||
|
@ -222,6 +195,9 @@ void prom_prepare_cpus(unsigned int max_cpus)
|
||||||
|
|
||||||
/* set config to be the same as vpe0, particularly kseg0 coherency alg */
|
/* set config to be the same as vpe0, particularly kseg0 coherency alg */
|
||||||
write_vpe_c0_config( read_c0_config());
|
write_vpe_c0_config( read_c0_config());
|
||||||
|
|
||||||
|
/* Propagate Config7 */
|
||||||
|
write_vpe_c0_config7(read_c0_config7());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -471,61 +471,29 @@ struct flush_icache_range_args {
|
||||||
static inline void local_r4k_flush_icache_range(void *args)
|
static inline void local_r4k_flush_icache_range(void *args)
|
||||||
{
|
{
|
||||||
struct flush_icache_range_args *fir_args = args;
|
struct flush_icache_range_args *fir_args = args;
|
||||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
|
||||||
unsigned long ic_lsize = cpu_icache_line_size();
|
|
||||||
unsigned long sc_lsize = cpu_scache_line_size();
|
|
||||||
unsigned long start = fir_args->start;
|
unsigned long start = fir_args->start;
|
||||||
unsigned long end = fir_args->end;
|
unsigned long end = fir_args->end;
|
||||||
unsigned long addr, aend;
|
|
||||||
|
|
||||||
if (!cpu_has_ic_fills_f_dc) {
|
if (!cpu_has_ic_fills_f_dc) {
|
||||||
if (end - start > dcache_size) {
|
if (end - start > dcache_size) {
|
||||||
r4k_blast_dcache();
|
r4k_blast_dcache();
|
||||||
} else {
|
} else {
|
||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
addr = start & ~(dc_lsize - 1);
|
protected_blast_dcache_range(start, end);
|
||||||
aend = (end - 1) & ~(dc_lsize - 1);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
/* Hit_Writeback_Inv_D */
|
|
||||||
protected_writeback_dcache_line(addr);
|
|
||||||
if (addr == aend)
|
|
||||||
break;
|
|
||||||
addr += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cpu_icache_snoops_remote_store) {
|
if (!cpu_icache_snoops_remote_store) {
|
||||||
if (end - start > scache_size) {
|
if (end - start > scache_size)
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
} else {
|
else
|
||||||
addr = start & ~(sc_lsize - 1);
|
protected_blast_scache_range(start, end);
|
||||||
aend = (end - 1) & ~(sc_lsize - 1);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
/* Hit_Writeback_Inv_SD */
|
|
||||||
protected_writeback_scache_line(addr);
|
|
||||||
if (addr == aend)
|
|
||||||
break;
|
|
||||||
addr += sc_lsize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end - start > icache_size)
|
if (end - start > icache_size)
|
||||||
r4k_blast_icache();
|
r4k_blast_icache();
|
||||||
else {
|
else
|
||||||
addr = start & ~(ic_lsize - 1);
|
protected_blast_icache_range(start, end);
|
||||||
aend = (end - 1) & ~(ic_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
/* Hit_Invalidate_I */
|
|
||||||
protected_flush_icache_line(addr);
|
|
||||||
if (addr == aend)
|
|
||||||
break;
|
|
||||||
addr += ic_lsize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void r4k_flush_icache_range(unsigned long start, unsigned long end)
|
static void r4k_flush_icache_range(unsigned long start, unsigned long end)
|
||||||
|
@ -619,27 +587,14 @@ static void r4k_flush_icache_page(struct vm_area_struct *vma,
|
||||||
|
|
||||||
static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long end, a;
|
|
||||||
|
|
||||||
/* Catch bad driver code */
|
/* Catch bad driver code */
|
||||||
BUG_ON(size == 0);
|
BUG_ON(size == 0);
|
||||||
|
|
||||||
if (cpu_has_subset_pcaches) {
|
if (cpu_has_subset_pcaches) {
|
||||||
unsigned long sc_lsize = cpu_scache_line_size();
|
if (size >= scache_size)
|
||||||
|
|
||||||
if (size >= scache_size) {
|
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
return;
|
else
|
||||||
}
|
blast_scache_range(addr, addr + size);
|
||||||
|
|
||||||
a = addr & ~(sc_lsize - 1);
|
|
||||||
end = (addr + size - 1) & ~(sc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
flush_scache_line(a); /* Hit_Writeback_Inv_SD */
|
|
||||||
if (a == end)
|
|
||||||
break;
|
|
||||||
a += sc_lsize;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,17 +606,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
if (size >= dcache_size) {
|
if (size >= dcache_size) {
|
||||||
r4k_blast_dcache();
|
r4k_blast_dcache();
|
||||||
} else {
|
} else {
|
||||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
|
||||||
|
|
||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
a = addr & ~(dc_lsize - 1);
|
blast_dcache_range(addr, addr + size);
|
||||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
|
||||||
if (a == end)
|
|
||||||
break;
|
|
||||||
a += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bc_wback_inv(addr, size);
|
bc_wback_inv(addr, size);
|
||||||
|
@ -669,44 +615,22 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
|
|
||||||
static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long end, a;
|
|
||||||
|
|
||||||
/* Catch bad driver code */
|
/* Catch bad driver code */
|
||||||
BUG_ON(size == 0);
|
BUG_ON(size == 0);
|
||||||
|
|
||||||
if (cpu_has_subset_pcaches) {
|
if (cpu_has_subset_pcaches) {
|
||||||
unsigned long sc_lsize = cpu_scache_line_size();
|
if (size >= scache_size)
|
||||||
|
|
||||||
if (size >= scache_size) {
|
|
||||||
r4k_blast_scache();
|
r4k_blast_scache();
|
||||||
return;
|
else
|
||||||
}
|
blast_scache_range(addr, addr + size);
|
||||||
|
|
||||||
a = addr & ~(sc_lsize - 1);
|
|
||||||
end = (addr + size - 1) & ~(sc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
flush_scache_line(a); /* Hit_Writeback_Inv_SD */
|
|
||||||
if (a == end)
|
|
||||||
break;
|
|
||||||
a += sc_lsize;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size >= dcache_size) {
|
if (size >= dcache_size) {
|
||||||
r4k_blast_dcache();
|
r4k_blast_dcache();
|
||||||
} else {
|
} else {
|
||||||
unsigned long dc_lsize = cpu_dcache_line_size();
|
|
||||||
|
|
||||||
R4600_HIT_CACHEOP_WAR_IMPL;
|
R4600_HIT_CACHEOP_WAR_IMPL;
|
||||||
a = addr & ~(dc_lsize - 1);
|
blast_dcache_range(addr, addr + size);
|
||||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
|
||||||
if (a == end)
|
|
||||||
break;
|
|
||||||
a += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bc_inv(addr, size);
|
bc_inv(addr, size);
|
||||||
|
|
|
@ -44,8 +44,6 @@ __asm__ __volatile__( \
|
||||||
/* TX39H-style cache flush routines. */
|
/* TX39H-style cache flush routines. */
|
||||||
static void tx39h_flush_icache_all(void)
|
static void tx39h_flush_icache_all(void)
|
||||||
{
|
{
|
||||||
unsigned long start = KSEG0;
|
|
||||||
unsigned long end = (start + icache_size);
|
|
||||||
unsigned long flags, config;
|
unsigned long flags, config;
|
||||||
|
|
||||||
/* disable icache (set ICE#) */
|
/* disable icache (set ICE#) */
|
||||||
|
@ -53,33 +51,18 @@ static void tx39h_flush_icache_all(void)
|
||||||
config = read_c0_conf();
|
config = read_c0_conf();
|
||||||
write_c0_conf(config & ~TX39_CONF_ICE);
|
write_c0_conf(config & ~TX39_CONF_ICE);
|
||||||
TX39_STOP_STREAMING();
|
TX39_STOP_STREAMING();
|
||||||
|
blast_icache16();
|
||||||
/* invalidate icache */
|
|
||||||
while (start < end) {
|
|
||||||
cache16_unroll32(start, Index_Invalidate_I);
|
|
||||||
start += 0x200;
|
|
||||||
}
|
|
||||||
|
|
||||||
write_c0_conf(config);
|
write_c0_conf(config);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
static void tx39h_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long end, a;
|
|
||||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
|
||||||
|
|
||||||
/* Catch bad driver code */
|
/* Catch bad driver code */
|
||||||
BUG_ON(size == 0);
|
BUG_ON(size == 0);
|
||||||
|
|
||||||
iob();
|
iob();
|
||||||
a = addr & ~(dc_lsize - 1);
|
blast_inv_dcache_range(addr, addr + size);
|
||||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
invalidate_dcache_line(a); /* Hit_Invalidate_D */
|
|
||||||
if (a == end) break;
|
|
||||||
a += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -241,42 +224,21 @@ static void tx39_flush_data_cache_page(unsigned long addr)
|
||||||
|
|
||||||
static void tx39_flush_icache_range(unsigned long start, unsigned long end)
|
static void tx39_flush_icache_range(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
|
||||||
unsigned long addr, aend;
|
|
||||||
|
|
||||||
if (end - start > dcache_size)
|
if (end - start > dcache_size)
|
||||||
tx39_blast_dcache();
|
tx39_blast_dcache();
|
||||||
else {
|
else
|
||||||
addr = start & ~(dc_lsize - 1);
|
protected_blast_dcache_range(start, end);
|
||||||
aend = (end - 1) & ~(dc_lsize - 1);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
/* Hit_Writeback_Inv_D */
|
|
||||||
protected_writeback_dcache_line(addr);
|
|
||||||
if (addr == aend)
|
|
||||||
break;
|
|
||||||
addr += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (end - start > icache_size)
|
if (end - start > icache_size)
|
||||||
tx39_blast_icache();
|
tx39_blast_icache();
|
||||||
else {
|
else {
|
||||||
unsigned long flags, config;
|
unsigned long flags, config;
|
||||||
addr = start & ~(dc_lsize - 1);
|
|
||||||
aend = (end - 1) & ~(dc_lsize - 1);
|
|
||||||
/* disable icache (set ICE#) */
|
/* disable icache (set ICE#) */
|
||||||
local_irq_save(flags);
|
local_irq_save(flags);
|
||||||
config = read_c0_conf();
|
config = read_c0_conf();
|
||||||
write_c0_conf(config & ~TX39_CONF_ICE);
|
write_c0_conf(config & ~TX39_CONF_ICE);
|
||||||
TX39_STOP_STREAMING();
|
TX39_STOP_STREAMING();
|
||||||
while (1) {
|
protected_blast_icache_range(start, end);
|
||||||
/* Hit_Invalidate_I */
|
|
||||||
protected_flush_icache_line(addr);
|
|
||||||
if (addr == aend)
|
|
||||||
break;
|
|
||||||
addr += dc_lsize;
|
|
||||||
}
|
|
||||||
write_c0_conf(config);
|
write_c0_conf(config);
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
@ -311,7 +273,7 @@ static void tx39_flush_icache_page(struct vm_area_struct *vma, struct page *page
|
||||||
|
|
||||||
static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long end, a;
|
unsigned long end;
|
||||||
|
|
||||||
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
||||||
end = addr + size;
|
end = addr + size;
|
||||||
|
@ -322,20 +284,13 @@ static void tx39_dma_cache_wback_inv(unsigned long addr, unsigned long size)
|
||||||
} else if (size > dcache_size) {
|
} else if (size > dcache_size) {
|
||||||
tx39_blast_dcache();
|
tx39_blast_dcache();
|
||||||
} else {
|
} else {
|
||||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
blast_dcache_range(addr, addr + size);
|
||||||
a = addr & ~(dc_lsize - 1);
|
|
||||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
flush_dcache_line(a); /* Hit_Writeback_Inv_D */
|
|
||||||
if (a == end) break;
|
|
||||||
a += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
|
static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long end, a;
|
unsigned long end;
|
||||||
|
|
||||||
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
if (((size | addr) & (PAGE_SIZE - 1)) == 0) {
|
||||||
end = addr + size;
|
end = addr + size;
|
||||||
|
@ -346,14 +301,7 @@ static void tx39_dma_cache_inv(unsigned long addr, unsigned long size)
|
||||||
} else if (size > dcache_size) {
|
} else if (size > dcache_size) {
|
||||||
tx39_blast_dcache();
|
tx39_blast_dcache();
|
||||||
} else {
|
} else {
|
||||||
unsigned long dc_lsize = current_cpu_data.dcache.linesz;
|
blast_inv_dcache_range(addr, addr + size);
|
||||||
a = addr & ~(dc_lsize - 1);
|
|
||||||
end = (addr + size - 1) & ~(dc_lsize - 1);
|
|
||||||
while (1) {
|
|
||||||
invalidate_dcache_line(a); /* Hit_Invalidate_D */
|
|
||||||
if (a == end) break;
|
|
||||||
a += dc_lsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,11 @@ config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
depends on SMP
|
||||||
|
default y
|
||||||
|
|
||||||
config GENERIC_ISA_DMA
|
config GENERIC_ISA_DMA
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -377,15 +377,15 @@
|
||||||
ENTRY_SAME(inotify_init)
|
ENTRY_SAME(inotify_init)
|
||||||
ENTRY_SAME(inotify_add_watch) /* 270 */
|
ENTRY_SAME(inotify_add_watch) /* 270 */
|
||||||
ENTRY_SAME(inotify_rm_watch)
|
ENTRY_SAME(inotify_rm_watch)
|
||||||
ENTRY_COMP(pselect6)
|
ENTRY_SAME(ni_syscall) /* 271 ENTRY_COMP(pselect6) */
|
||||||
ENTRY_COMP(ppoll)
|
ENTRY_SAME(ni_syscall) /* 272 ENTRY_COMP(ppoll) */
|
||||||
ENTRY_SAME(migrate_pages)
|
ENTRY_SAME(migrate_pages)
|
||||||
ENTRY_COMP(openat) /* 275 */
|
ENTRY_COMP(openat) /* 275 */
|
||||||
ENTRY_SAME(mkdirat)
|
ENTRY_SAME(mkdirat)
|
||||||
ENTRY_SAME(mknodat)
|
ENTRY_SAME(mknodat)
|
||||||
ENTRY_SAME(fchownat)
|
ENTRY_SAME(fchownat)
|
||||||
ENTRY_COMP(futimesat)
|
ENTRY_COMP(futimesat)
|
||||||
ENTRY_COMP(newfstatat) /* 280 */
|
ENTRY_SAME(fstatat64) /* 280 */
|
||||||
ENTRY_SAME(unlinkat)
|
ENTRY_SAME(unlinkat)
|
||||||
ENTRY_SAME(renameat)
|
ENTRY_SAME(renameat)
|
||||||
ENTRY_SAME(linkat)
|
ENTRY_SAME(linkat)
|
||||||
|
|
|
@ -83,6 +83,12 @@ config GENERIC_TBSYNC
|
||||||
default y if PPC32 && SMP
|
default y if PPC32 && SMP
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
config DEFAULT_UIMAGE
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Used to allow a board to specify it wants a uImage built by default
|
||||||
|
default n
|
||||||
|
|
||||||
menu "Processor support"
|
menu "Processor support"
|
||||||
choice
|
choice
|
||||||
prompt "Processor Type"
|
prompt "Processor Type"
|
||||||
|
|
|
@ -142,6 +142,7 @@ drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
|
||||||
# Default to zImage, override when needed
|
# Default to zImage, override when needed
|
||||||
defaultimage-y := zImage
|
defaultimage-y := zImage
|
||||||
defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
|
defaultimage-$(CONFIG_PPC_ISERIES) := vmlinux
|
||||||
|
defaultimage-$(CONFIG_DEFAULT_UIMAGE) := uImage
|
||||||
KBUILD_IMAGE := $(defaultimage-y)
|
KBUILD_IMAGE := $(defaultimage-y)
|
||||||
all: $(KBUILD_IMAGE)
|
all: $(KBUILD_IMAGE)
|
||||||
|
|
||||||
|
|
|
@ -12,10 +12,10 @@ endif
|
||||||
|
|
||||||
obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
|
obj-y := semaphore.o cputable.o ptrace.o syscalls.o \
|
||||||
irq.o align.o signal_32.o pmc.o vdso.o \
|
irq.o align.o signal_32.o pmc.o vdso.o \
|
||||||
init_task.o process.o
|
init_task.o process.o systbl.o
|
||||||
obj-y += vdso32/
|
obj-y += vdso32/
|
||||||
obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
|
obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \
|
||||||
signal_64.o ptrace32.o systbl.o \
|
signal_64.o ptrace32.o \
|
||||||
paca.o cpu_setup_power4.o \
|
paca.o cpu_setup_power4.o \
|
||||||
firmware.o sysfs.o idle_64.o
|
firmware.o sysfs.o idle_64.o
|
||||||
obj-$(CONFIG_PPC64) += vdso64/
|
obj-$(CONFIG_PPC64) += vdso64/
|
||||||
|
@ -46,7 +46,7 @@ extra-$(CONFIG_8xx) := head_8xx.o
|
||||||
extra-y += vmlinux.lds
|
extra-y += vmlinux.lds
|
||||||
|
|
||||||
obj-y += time.o prom.o traps.o setup-common.o udbg.o
|
obj-y += time.o prom.o traps.o setup-common.o udbg.o
|
||||||
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o systbl.o
|
obj-$(CONFIG_PPC32) += entry_32.o setup_32.o misc_32.o
|
||||||
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
|
obj-$(CONFIG_PPC64) += misc_64.o dma_64.o iommu.o
|
||||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
|
obj-$(CONFIG_PPC_MULTIPLATFORM) += prom_init.o
|
||||||
obj-$(CONFIG_MODULES) += ppc_ksyms.o
|
obj-$(CONFIG_MODULES) += ppc_ksyms.o
|
||||||
|
|
|
@ -36,8 +36,6 @@
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
#define sys_sigpending sys_ni_syscall
|
#define sys_sigpending sys_ni_syscall
|
||||||
#define sys_old_getrlimit sys_ni_syscall
|
#define sys_old_getrlimit sys_ni_syscall
|
||||||
#else
|
|
||||||
#define ppc_rtas sys_ni_syscall
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_GLOBAL(sys_call_table)
|
_GLOBAL(sys_call_table)
|
||||||
|
@ -323,3 +321,4 @@ SYSCALL(spu_run)
|
||||||
SYSCALL(spu_create)
|
SYSCALL(spu_create)
|
||||||
COMPAT_SYS(pselect6)
|
COMPAT_SYS(pselect6)
|
||||||
COMPAT_SYS(ppoll)
|
COMPAT_SYS(ppoll)
|
||||||
|
SYSCALL(unshare)
|
||||||
|
|
|
@ -1048,286 +1048,3 @@ _GLOBAL(name) \
|
||||||
blr
|
blr
|
||||||
|
|
||||||
SYSCALL(execve)
|
SYSCALL(execve)
|
||||||
|
|
||||||
/* Why isn't this a) automatic, b) written in 'C'? */
|
|
||||||
.data
|
|
||||||
.align 4
|
|
||||||
_GLOBAL(sys_call_table)
|
|
||||||
.long sys_restart_syscall /* 0 */
|
|
||||||
.long sys_exit
|
|
||||||
.long ppc_fork
|
|
||||||
.long sys_read
|
|
||||||
.long sys_write
|
|
||||||
.long sys_open /* 5 */
|
|
||||||
.long sys_close
|
|
||||||
.long sys_waitpid
|
|
||||||
.long sys_creat
|
|
||||||
.long sys_link
|
|
||||||
.long sys_unlink /* 10 */
|
|
||||||
.long sys_execve
|
|
||||||
.long sys_chdir
|
|
||||||
.long sys_time
|
|
||||||
.long sys_mknod
|
|
||||||
.long sys_chmod /* 15 */
|
|
||||||
.long sys_lchown
|
|
||||||
.long sys_ni_syscall /* old break syscall holder */
|
|
||||||
.long sys_stat
|
|
||||||
.long sys_lseek
|
|
||||||
.long sys_getpid /* 20 */
|
|
||||||
.long sys_mount
|
|
||||||
.long sys_oldumount
|
|
||||||
.long sys_setuid
|
|
||||||
.long sys_getuid
|
|
||||||
.long sys_stime /* 25 */
|
|
||||||
.long sys_ptrace
|
|
||||||
.long sys_alarm
|
|
||||||
.long sys_fstat
|
|
||||||
.long sys_pause
|
|
||||||
.long sys_utime /* 30 */
|
|
||||||
.long sys_ni_syscall /* old stty syscall holder */
|
|
||||||
.long sys_ni_syscall /* old gtty syscall holder */
|
|
||||||
.long sys_access
|
|
||||||
.long sys_nice
|
|
||||||
.long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
|
|
||||||
.long sys_sync
|
|
||||||
.long sys_kill
|
|
||||||
.long sys_rename
|
|
||||||
.long sys_mkdir
|
|
||||||
.long sys_rmdir /* 40 */
|
|
||||||
.long sys_dup
|
|
||||||
.long sys_pipe
|
|
||||||
.long sys_times
|
|
||||||
.long sys_ni_syscall /* old prof syscall holder */
|
|
||||||
.long sys_brk /* 45 */
|
|
||||||
.long sys_setgid
|
|
||||||
.long sys_getgid
|
|
||||||
.long sys_signal
|
|
||||||
.long sys_geteuid
|
|
||||||
.long sys_getegid /* 50 */
|
|
||||||
.long sys_acct
|
|
||||||
.long sys_umount /* recycled never used phys() */
|
|
||||||
.long sys_ni_syscall /* old lock syscall holder */
|
|
||||||
.long sys_ioctl
|
|
||||||
.long sys_fcntl /* 55 */
|
|
||||||
.long sys_ni_syscall /* old mpx syscall holder */
|
|
||||||
.long sys_setpgid
|
|
||||||
.long sys_ni_syscall /* old ulimit syscall holder */
|
|
||||||
.long sys_olduname
|
|
||||||
.long sys_umask /* 60 */
|
|
||||||
.long sys_chroot
|
|
||||||
.long sys_ustat
|
|
||||||
.long sys_dup2
|
|
||||||
.long sys_getppid
|
|
||||||
.long sys_getpgrp /* 65 */
|
|
||||||
.long sys_setsid
|
|
||||||
.long sys_sigaction
|
|
||||||
.long sys_sgetmask
|
|
||||||
.long sys_ssetmask
|
|
||||||
.long sys_setreuid /* 70 */
|
|
||||||
.long sys_setregid
|
|
||||||
.long sys_sigsuspend
|
|
||||||
.long sys_sigpending
|
|
||||||
.long sys_sethostname
|
|
||||||
.long sys_setrlimit /* 75 */
|
|
||||||
.long sys_old_getrlimit
|
|
||||||
.long sys_getrusage
|
|
||||||
.long sys_gettimeofday
|
|
||||||
.long sys_settimeofday
|
|
||||||
.long sys_getgroups /* 80 */
|
|
||||||
.long sys_setgroups
|
|
||||||
.long ppc_select
|
|
||||||
.long sys_symlink
|
|
||||||
.long sys_lstat
|
|
||||||
.long sys_readlink /* 85 */
|
|
||||||
.long sys_uselib
|
|
||||||
.long sys_swapon
|
|
||||||
.long sys_reboot
|
|
||||||
.long old_readdir
|
|
||||||
.long sys_mmap /* 90 */
|
|
||||||
.long sys_munmap
|
|
||||||
.long sys_truncate
|
|
||||||
.long sys_ftruncate
|
|
||||||
.long sys_fchmod
|
|
||||||
.long sys_fchown /* 95 */
|
|
||||||
.long sys_getpriority
|
|
||||||
.long sys_setpriority
|
|
||||||
.long sys_ni_syscall /* old profil syscall holder */
|
|
||||||
.long sys_statfs
|
|
||||||
.long sys_fstatfs /* 100 */
|
|
||||||
.long sys_ni_syscall
|
|
||||||
.long sys_socketcall
|
|
||||||
.long sys_syslog
|
|
||||||
.long sys_setitimer
|
|
||||||
.long sys_getitimer /* 105 */
|
|
||||||
.long sys_newstat
|
|
||||||
.long sys_newlstat
|
|
||||||
.long sys_newfstat
|
|
||||||
.long sys_uname
|
|
||||||
.long sys_ni_syscall /* 110 */
|
|
||||||
.long sys_vhangup
|
|
||||||
.long sys_ni_syscall /* old 'idle' syscall */
|
|
||||||
.long sys_ni_syscall
|
|
||||||
.long sys_wait4
|
|
||||||
.long sys_swapoff /* 115 */
|
|
||||||
.long sys_sysinfo
|
|
||||||
.long sys_ipc
|
|
||||||
.long sys_fsync
|
|
||||||
.long sys_sigreturn
|
|
||||||
.long ppc_clone /* 120 */
|
|
||||||
.long sys_setdomainname
|
|
||||||
.long sys_newuname
|
|
||||||
.long sys_ni_syscall
|
|
||||||
.long sys_adjtimex
|
|
||||||
.long sys_mprotect /* 125 */
|
|
||||||
.long sys_sigprocmask
|
|
||||||
.long sys_ni_syscall /* old sys_create_module */
|
|
||||||
.long sys_init_module
|
|
||||||
.long sys_delete_module
|
|
||||||
.long sys_ni_syscall /* old sys_get_kernel_syms */ /* 130 */
|
|
||||||
.long sys_quotactl
|
|
||||||
.long sys_getpgid
|
|
||||||
.long sys_fchdir
|
|
||||||
.long sys_bdflush
|
|
||||||
.long sys_sysfs /* 135 */
|
|
||||||
.long sys_personality
|
|
||||||
.long sys_ni_syscall /* for afs_syscall */
|
|
||||||
.long sys_setfsuid
|
|
||||||
.long sys_setfsgid
|
|
||||||
.long sys_llseek /* 140 */
|
|
||||||
.long sys_getdents
|
|
||||||
.long ppc_select
|
|
||||||
.long sys_flock
|
|
||||||
.long sys_msync
|
|
||||||
.long sys_readv /* 145 */
|
|
||||||
.long sys_writev
|
|
||||||
.long sys_getsid
|
|
||||||
.long sys_fdatasync
|
|
||||||
.long sys_sysctl
|
|
||||||
.long sys_mlock /* 150 */
|
|
||||||
.long sys_munlock
|
|
||||||
.long sys_mlockall
|
|
||||||
.long sys_munlockall
|
|
||||||
.long sys_sched_setparam
|
|
||||||
.long sys_sched_getparam /* 155 */
|
|
||||||
.long sys_sched_setscheduler
|
|
||||||
.long sys_sched_getscheduler
|
|
||||||
.long sys_sched_yield
|
|
||||||
.long sys_sched_get_priority_max
|
|
||||||
.long sys_sched_get_priority_min /* 160 */
|
|
||||||
.long sys_sched_rr_get_interval
|
|
||||||
.long sys_nanosleep
|
|
||||||
.long sys_mremap
|
|
||||||
.long sys_setresuid
|
|
||||||
.long sys_getresuid /* 165 */
|
|
||||||
.long sys_ni_syscall /* old sys_query_module */
|
|
||||||
.long sys_poll
|
|
||||||
.long sys_nfsservctl
|
|
||||||
.long sys_setresgid
|
|
||||||
.long sys_getresgid /* 170 */
|
|
||||||
.long sys_prctl
|
|
||||||
.long sys_rt_sigreturn
|
|
||||||
.long sys_rt_sigaction
|
|
||||||
.long sys_rt_sigprocmask
|
|
||||||
.long sys_rt_sigpending /* 175 */
|
|
||||||
.long sys_rt_sigtimedwait
|
|
||||||
.long sys_rt_sigqueueinfo
|
|
||||||
.long sys_rt_sigsuspend
|
|
||||||
.long sys_pread64
|
|
||||||
.long sys_pwrite64 /* 180 */
|
|
||||||
.long sys_chown
|
|
||||||
.long sys_getcwd
|
|
||||||
.long sys_capget
|
|
||||||
.long sys_capset
|
|
||||||
.long sys_sigaltstack /* 185 */
|
|
||||||
.long sys_sendfile
|
|
||||||
.long sys_ni_syscall /* streams1 */
|
|
||||||
.long sys_ni_syscall /* streams2 */
|
|
||||||
.long ppc_vfork
|
|
||||||
.long sys_getrlimit /* 190 */
|
|
||||||
.long sys_readahead
|
|
||||||
.long sys_mmap2
|
|
||||||
.long sys_truncate64
|
|
||||||
.long sys_ftruncate64
|
|
||||||
.long sys_stat64 /* 195 */
|
|
||||||
.long sys_lstat64
|
|
||||||
.long sys_fstat64
|
|
||||||
.long sys_pciconfig_read
|
|
||||||
.long sys_pciconfig_write
|
|
||||||
.long sys_pciconfig_iobase /* 200 */
|
|
||||||
.long sys_ni_syscall /* 201 - reserved - MacOnLinux - new */
|
|
||||||
.long sys_getdents64
|
|
||||||
.long sys_pivot_root
|
|
||||||
.long sys_fcntl64
|
|
||||||
.long sys_madvise /* 205 */
|
|
||||||
.long sys_mincore
|
|
||||||
.long sys_gettid
|
|
||||||
.long sys_tkill
|
|
||||||
.long sys_setxattr
|
|
||||||
.long sys_lsetxattr /* 210 */
|
|
||||||
.long sys_fsetxattr
|
|
||||||
.long sys_getxattr
|
|
||||||
.long sys_lgetxattr
|
|
||||||
.long sys_fgetxattr
|
|
||||||
.long sys_listxattr /* 215 */
|
|
||||||
.long sys_llistxattr
|
|
||||||
.long sys_flistxattr
|
|
||||||
.long sys_removexattr
|
|
||||||
.long sys_lremovexattr
|
|
||||||
.long sys_fremovexattr /* 220 */
|
|
||||||
.long sys_futex
|
|
||||||
.long sys_sched_setaffinity
|
|
||||||
.long sys_sched_getaffinity
|
|
||||||
.long sys_ni_syscall
|
|
||||||
.long sys_ni_syscall /* 225 - reserved for Tux */
|
|
||||||
.long sys_sendfile64
|
|
||||||
.long sys_io_setup
|
|
||||||
.long sys_io_destroy
|
|
||||||
.long sys_io_getevents
|
|
||||||
.long sys_io_submit /* 230 */
|
|
||||||
.long sys_io_cancel
|
|
||||||
.long sys_set_tid_address
|
|
||||||
.long sys_fadvise64
|
|
||||||
.long sys_exit_group
|
|
||||||
.long sys_lookup_dcookie /* 235 */
|
|
||||||
.long sys_epoll_create
|
|
||||||
.long sys_epoll_ctl
|
|
||||||
.long sys_epoll_wait
|
|
||||||
.long sys_remap_file_pages
|
|
||||||
.long sys_timer_create /* 240 */
|
|
||||||
.long sys_timer_settime
|
|
||||||
.long sys_timer_gettime
|
|
||||||
.long sys_timer_getoverrun
|
|
||||||
.long sys_timer_delete
|
|
||||||
.long sys_clock_settime /* 245 */
|
|
||||||
.long sys_clock_gettime
|
|
||||||
.long sys_clock_getres
|
|
||||||
.long sys_clock_nanosleep
|
|
||||||
.long sys_swapcontext
|
|
||||||
.long sys_tgkill /* 250 */
|
|
||||||
.long sys_utimes
|
|
||||||
.long sys_statfs64
|
|
||||||
.long sys_fstatfs64
|
|
||||||
.long ppc_fadvise64_64
|
|
||||||
.long sys_ni_syscall /* 255 - rtas (used on ppc64) */
|
|
||||||
.long sys_debug_setcontext
|
|
||||||
.long sys_ni_syscall /* 257 reserved for vserver */
|
|
||||||
.long sys_ni_syscall /* 258 reserved for new sys_remap_file_pages */
|
|
||||||
.long sys_ni_syscall /* 259 reserved for new sys_mbind */
|
|
||||||
.long sys_ni_syscall /* 260 reserved for new sys_get_mempolicy */
|
|
||||||
.long sys_ni_syscall /* 261 reserved for new sys_set_mempolicy */
|
|
||||||
.long sys_mq_open
|
|
||||||
.long sys_mq_unlink
|
|
||||||
.long sys_mq_timedsend
|
|
||||||
.long sys_mq_timedreceive /* 265 */
|
|
||||||
.long sys_mq_notify
|
|
||||||
.long sys_mq_getsetattr
|
|
||||||
.long sys_kexec_load
|
|
||||||
.long sys_add_key
|
|
||||||
.long sys_request_key /* 270 */
|
|
||||||
.long sys_keyctl
|
|
||||||
.long sys_waitid
|
|
||||||
.long sys_ioprio_set
|
|
||||||
.long sys_ioprio_get
|
|
||||||
.long sys_inotify_init /* 275 */
|
|
||||||
.long sys_inotify_add_watch
|
|
||||||
.long sys_inotify_rm_watch
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.16-rc1
|
# Linux kernel version: 2.6.16-rc2
|
||||||
# Thu Jan 19 10:58:53 2006
|
# Wed Feb 8 10:44:39 2006
|
||||||
#
|
#
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
|
@ -12,7 +12,6 @@ CONFIG_S390=y
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
#
|
#
|
||||||
CONFIG_EXPERIMENTAL=y
|
CONFIG_EXPERIMENTAL=y
|
||||||
CONFIG_CLEAN_COMPILE=y
|
|
||||||
CONFIG_LOCK_KERNEL=y
|
CONFIG_LOCK_KERNEL=y
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
@ -154,6 +153,7 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
# CONFIG_NETDEBUG is not set
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
# CONFIG_PACKET_MMAP is not set
|
# CONFIG_PACKET_MMAP is not set
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -607,6 +607,7 @@ CONFIG_MSDOS_PARTITION=y
|
||||||
# Instrumentation Support
|
# Instrumentation Support
|
||||||
#
|
#
|
||||||
# CONFIG_PROFILING is not set
|
# CONFIG_PROFILING is not set
|
||||||
|
# CONFIG_STATISTICS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
|
@ -624,7 +625,7 @@ CONFIG_DEBUG_MUTEXES=y
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_FS is not set
|
CONFIG_DEBUG_FS=y
|
||||||
# CONFIG_DEBUG_VM is not set
|
# CONFIG_DEBUG_VM is not set
|
||||||
CONFIG_FORCED_INLINING=y
|
CONFIG_FORCED_INLINING=y
|
||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
|
|
|
@ -905,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * sta
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename,
|
||||||
|
struct stat64_emu31 __user* statbuf, int flag)
|
||||||
|
{
|
||||||
|
struct kstat stat;
|
||||||
|
int error = -EINVAL;
|
||||||
|
|
||||||
|
if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||||
|
error = vfs_lstat_fd(dfd, filename, &stat);
|
||||||
|
else
|
||||||
|
error = vfs_stat_fd(dfd, filename, &stat);
|
||||||
|
|
||||||
|
if (!error)
|
||||||
|
error = cp_stat64(statbuf, &stat);
|
||||||
|
out:
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Linux/i386 didn't use to be able to handle more than
|
* Linux/i386 didn't use to be able to handle more than
|
||||||
* 4 system call parameters, so these system calls used a memory
|
* 4 system call parameters, so these system calls used a memory
|
||||||
|
|
|
@ -195,9 +195,6 @@ sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact);
|
|
||||||
|
|
||||||
asmlinkage long
|
asmlinkage long
|
||||||
sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
|
sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
|
||||||
struct sigaction32 __user *oact, size_t sigsetsize)
|
struct sigaction32 __user *oact, size_t sigsetsize)
|
||||||
|
|
|
@ -1523,13 +1523,13 @@ compat_sys_futimesat_wrapper:
|
||||||
llgtr %r4,%r4 # struct timeval *
|
llgtr %r4,%r4 # struct timeval *
|
||||||
jg compat_sys_futimesat
|
jg compat_sys_futimesat
|
||||||
|
|
||||||
.globl compat_sys_newfstatat_wrapper
|
.globl sys32_fstatat_wrapper
|
||||||
compat_sys_newfstatat_wrapper:
|
sys32_fstatat_wrapper:
|
||||||
llgfr %r2,%r2 # unsigned int
|
llgfr %r2,%r2 # unsigned int
|
||||||
llgtr %r3,%r3 # char *
|
llgtr %r3,%r3 # char *
|
||||||
llgtr %r4,%r4 # struct stat *
|
llgtr %r4,%r4 # struct stat64 *
|
||||||
lgfr %r5,%r5 # int
|
lgfr %r5,%r5 # int
|
||||||
jg compat_sys_newfstatat
|
jg sys32_fstatat
|
||||||
|
|
||||||
.globl sys_unlinkat_wrapper
|
.globl sys_unlinkat_wrapper
|
||||||
sys_unlinkat_wrapper:
|
sys_unlinkat_wrapper:
|
||||||
|
@ -1602,3 +1602,8 @@ compat_sys_ppoll_wrapper:
|
||||||
llgtr %r5,%r5 # const sigset_t *
|
llgtr %r5,%r5 # const sigset_t *
|
||||||
llgfr %r6,%r6 # size_t
|
llgfr %r6,%r6 # size_t
|
||||||
jg compat_sys_ppoll
|
jg compat_sys_ppoll
|
||||||
|
|
||||||
|
.globl sys_unshare_wrapper
|
||||||
|
sys_unshare_wrapper:
|
||||||
|
llgfr %r2,%r2 # unsigned long
|
||||||
|
jg sys_unshare
|
||||||
|
|
|
@ -12,15 +12,16 @@
|
||||||
* on the S390 architecture.
|
* on the S390 architecture.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/cio.h>
|
|
||||||
#include <asm/setup.h>
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <asm/cio.h>
|
||||||
|
#include <asm/setup.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
static void kexec_halt_all_cpus(void *);
|
static void kexec_halt_all_cpus(void *);
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ extern volatile int __cpu_logical_map[];
|
||||||
struct _lowcore *lowcore_ptr[NR_CPUS];
|
struct _lowcore *lowcore_ptr[NR_CPUS];
|
||||||
|
|
||||||
cpumask_t cpu_online_map;
|
cpumask_t cpu_online_map;
|
||||||
cpumask_t cpu_possible_map;
|
cpumask_t cpu_possible_map = CPU_MASK_ALL;
|
||||||
|
|
||||||
static struct task_struct *current_set[NR_CPUS];
|
static struct task_struct *current_set[NR_CPUS];
|
||||||
|
|
||||||
|
@ -514,9 +514,6 @@ __init smp_check_cpus(unsigned int max_cpus)
|
||||||
num_cpus++;
|
num_cpus++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (cpu = 1; cpu < max_cpus; cpu++)
|
|
||||||
cpu_set(cpu, cpu_possible_map);
|
|
||||||
|
|
||||||
printk("Detected %d CPU's\n",(int) num_cpus);
|
printk("Detected %d CPU's\n",(int) num_cpus);
|
||||||
printk("Boot cpu address %2X\n", boot_cpu_addr);
|
printk("Boot cpu address %2X\n", boot_cpu_addr);
|
||||||
}
|
}
|
||||||
|
@ -810,7 +807,6 @@ void __devinit smp_prepare_boot_cpu(void)
|
||||||
|
|
||||||
cpu_set(0, cpu_online_map);
|
cpu_set(0, cpu_online_map);
|
||||||
cpu_set(0, cpu_present_map);
|
cpu_set(0, cpu_present_map);
|
||||||
cpu_set(0, cpu_possible_map);
|
|
||||||
S390_lowcore.percpu_offset = __per_cpu_offset[0];
|
S390_lowcore.percpu_offset = __per_cpu_offset[0];
|
||||||
current_set[0] = current;
|
current_set[0] = current;
|
||||||
}
|
}
|
||||||
|
|
|
@ -301,7 +301,7 @@ SYSCALL(sys_mkdirat,sys_mkdirat,sys_mkdirat_wrapper)
|
||||||
SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper) /* 290 */
|
SYSCALL(sys_mknodat,sys_mknodat,sys_mknodat_wrapper) /* 290 */
|
||||||
SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
|
SYSCALL(sys_fchownat,sys_fchownat,sys_fchownat_wrapper)
|
||||||
SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
|
SYSCALL(sys_futimesat,sys_futimesat,compat_sys_futimesat_wrapper)
|
||||||
SYSCALL(sys_newfstatat,sys_newfstatat,compat_sys_newfstatat_wrapper)
|
SYSCALL(sys_fstatat64,sys_newfstatat,sys32_fstatat_wrapper)
|
||||||
SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
|
SYSCALL(sys_unlinkat,sys_unlinkat,sys_unlinkat_wrapper)
|
||||||
SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper) /* 295 */
|
SYSCALL(sys_renameat,sys_renameat,sys_renameat_wrapper) /* 295 */
|
||||||
SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
|
SYSCALL(sys_linkat,sys_linkat,sys_linkat_wrapper)
|
||||||
|
@ -311,3 +311,4 @@ SYSCALL(sys_fchmodat,sys_fchmodat,sys_fchmodat_wrapper)
|
||||||
SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */
|
SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */
|
||||||
SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
|
SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper)
|
||||||
SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
|
SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper)
|
||||||
|
SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper)
|
||||||
|
|
|
@ -30,7 +30,7 @@ void __delay(unsigned long loops)
|
||||||
*/
|
*/
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"0: brct %0,0b"
|
"0: brct %0,0b"
|
||||||
: /* no outputs */ : "r" (loops/2) );
|
: /* no outputs */ : "r" ((loops/2) + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -76,7 +76,7 @@ sys_call_table:
|
||||||
/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
/*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
||||||
/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
/*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
||||||
/*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
/*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
||||||
/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
|
/*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
|
||||||
/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
/*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||||
/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
/*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
||||||
|
|
||||||
|
|
|
@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd,
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename,
|
||||||
|
struct compat_stat64 __user * statbuf, int flag)
|
||||||
|
{
|
||||||
|
struct kstat stat;
|
||||||
|
int error = -EINVAL;
|
||||||
|
|
||||||
|
if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||||
|
error = vfs_lstat_fd(dfd, filename, &stat);
|
||||||
|
else
|
||||||
|
error = vfs_stat_fd(dfd, filename, &stat);
|
||||||
|
|
||||||
|
if (!error)
|
||||||
|
error = cp_compat_stat64(&stat, statbuf);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
|
asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2)
|
||||||
{
|
{
|
||||||
return sys_sysfs(option, arg1, arg2);
|
return sys_sysfs(option, arg1, arg2);
|
||||||
|
|
|
@ -77,7 +77,7 @@ sys_call_table32:
|
||||||
/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
|
/*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink
|
||||||
.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
|
.word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid
|
||||||
/*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
|
/*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat
|
||||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat
|
.word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64
|
||||||
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||||
.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
|
.word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ sys_call_table:
|
||||||
/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink
|
||||||
.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
.word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid
|
||||||
/*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
/*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat
|
||||||
.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat
|
.word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64
|
||||||
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
/*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat
|
||||||
.word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
.word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,10 @@ config GENERIC_IRQ_PROBE
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config TIME_LOW_RES
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
|
||||||
# Turn off some random 386 crap that can affect device config
|
# Turn off some random 386 crap that can affect device config
|
||||||
config ISA
|
config ISA
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -677,7 +677,7 @@ ia32_sys_call_table:
|
||||||
.quad sys_mknodat
|
.quad sys_mknodat
|
||||||
.quad sys_fchownat
|
.quad sys_fchownat
|
||||||
.quad compat_sys_futimesat
|
.quad compat_sys_futimesat
|
||||||
.quad compat_sys_newfstatat /* 300 */
|
.quad sys32_fstatat /* 300 */
|
||||||
.quad sys_unlinkat
|
.quad sys_unlinkat
|
||||||
.quad sys_renameat
|
.quad sys_renameat
|
||||||
.quad sys_linkat
|
.quad sys_linkat
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue