Remove the arm26 port
Adrian Bunk [Tue, 31 Jul 2007 07:38:19 +0000 (00:38 -0700)]
The arm26 port has been in a state where it was far from even compiling
for quite some time.

Ian Molton agreed with the removal.

Signed-off-by: Adrian Bunk <bunk@stusta.de>
Cc: Ian Molton <spyro@f2s.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

248 files changed:
MAINTAINERS
arch/arm/nwfpe/Makefile
arch/arm/nwfpe/entry26.S [deleted file]
arch/arm26/ACKNOWLEDGEMENTS [deleted file]
arch/arm26/Kconfig [deleted file]
arch/arm26/Kconfig.debug [deleted file]
arch/arm26/Makefile [deleted file]
arch/arm26/boot/Makefile [deleted file]
arch/arm26/boot/compressed/Makefile [deleted file]
arch/arm26/boot/compressed/head.S [deleted file]
arch/arm26/boot/compressed/ll_char_wr.S [deleted file]
arch/arm26/boot/compressed/misc.c [deleted file]
arch/arm26/boot/compressed/uncompress.h [deleted file]
arch/arm26/boot/compressed/vmlinux.lds.in [deleted file]
arch/arm26/boot/install.sh [deleted file]
arch/arm26/defconfig [deleted file]
arch/arm26/kernel/Makefile [deleted file]
arch/arm26/kernel/armksyms.c [deleted file]
arch/arm26/kernel/asm-offsets.c [deleted file]
arch/arm26/kernel/calls.S [deleted file]
arch/arm26/kernel/compat.c [deleted file]
arch/arm26/kernel/dma.c [deleted file]
arch/arm26/kernel/ecard.c [deleted file]
arch/arm26/kernel/entry.S [deleted file]
arch/arm26/kernel/fiq.c [deleted file]
arch/arm26/kernel/head.S [deleted file]
arch/arm26/kernel/init_task.c [deleted file]
arch/arm26/kernel/irq.c [deleted file]
arch/arm26/kernel/process.c [deleted file]
arch/arm26/kernel/ptrace.c [deleted file]
arch/arm26/kernel/ptrace.h [deleted file]
arch/arm26/kernel/semaphore.c [deleted file]
arch/arm26/kernel/setup.c [deleted file]
arch/arm26/kernel/signal.c [deleted file]
arch/arm26/kernel/sys_arm.c [deleted file]
arch/arm26/kernel/time.c [deleted file]
arch/arm26/kernel/traps.c [deleted file]
arch/arm26/kernel/vmlinux-arm26-xip.lds.in [deleted file]
arch/arm26/kernel/vmlinux-arm26.lds.in [deleted file]
arch/arm26/kernel/vmlinux.lds.S [deleted file]
arch/arm26/lib/Makefile [deleted file]
arch/arm26/lib/ashldi3.c [deleted file]
arch/arm26/lib/ashrdi3.c [deleted file]
arch/arm26/lib/backtrace.S [deleted file]
arch/arm26/lib/changebit.S [deleted file]
arch/arm26/lib/clearbit.S [deleted file]
arch/arm26/lib/copy_page.S [deleted file]
arch/arm26/lib/csumipv6.S [deleted file]
arch/arm26/lib/csumpartial.S [deleted file]
arch/arm26/lib/csumpartialcopy.S [deleted file]
arch/arm26/lib/csumpartialcopygeneric.S [deleted file]
arch/arm26/lib/csumpartialcopyuser.S [deleted file]
arch/arm26/lib/delay.S [deleted file]
arch/arm26/lib/ecard.S [deleted file]
arch/arm26/lib/findbit.S [deleted file]
arch/arm26/lib/floppydma.S [deleted file]
arch/arm26/lib/gcclib.h [deleted file]
arch/arm26/lib/getuser.S [deleted file]
arch/arm26/lib/io-acorn.S [deleted file]
arch/arm26/lib/io-readsb.S [deleted file]
arch/arm26/lib/io-readsl.S [deleted file]
arch/arm26/lib/io-readsw.S [deleted file]
arch/arm26/lib/io-writesb.S [deleted file]
arch/arm26/lib/io-writesl.S [deleted file]
arch/arm26/lib/io-writesw.S [deleted file]
arch/arm26/lib/kbd.c [deleted file]
arch/arm26/lib/lib1funcs.S [deleted file]
arch/arm26/lib/longlong.h [deleted file]
arch/arm26/lib/lshrdi3.c [deleted file]
arch/arm26/lib/memchr.S [deleted file]
arch/arm26/lib/memcpy.S [deleted file]
arch/arm26/lib/memset.S [deleted file]
arch/arm26/lib/memzero.S [deleted file]
arch/arm26/lib/muldi3.c [deleted file]
arch/arm26/lib/putuser.S [deleted file]
arch/arm26/lib/setbit.S [deleted file]
arch/arm26/lib/strchr.S [deleted file]
arch/arm26/lib/strrchr.S [deleted file]
arch/arm26/lib/testchangebit.S [deleted file]
arch/arm26/lib/testclearbit.S [deleted file]
arch/arm26/lib/testsetbit.S [deleted file]
arch/arm26/lib/uaccess-kernel.S [deleted file]
arch/arm26/lib/uaccess-user.S [deleted file]
arch/arm26/lib/ucmpdi2.c [deleted file]
arch/arm26/lib/udivdi3.c [deleted file]
arch/arm26/machine/Makefile [deleted file]
arch/arm26/machine/dma.c [deleted file]
arch/arm26/machine/irq.c [deleted file]
arch/arm26/machine/latches.c [deleted file]
arch/arm26/mm/Makefile [deleted file]
arch/arm26/mm/extable.c [deleted file]
arch/arm26/mm/fault.c [deleted file]
arch/arm26/mm/fault.h [deleted file]
arch/arm26/mm/init.c [deleted file]
arch/arm26/mm/memc.c [deleted file]
arch/arm26/mm/proc-funcs.S [deleted file]
arch/arm26/mm/small_page.c [deleted file]
arch/arm26/nwfpe/ARM-gcc.h [deleted file]
arch/arm26/nwfpe/ChangeLog [deleted file]
arch/arm26/nwfpe/Makefile [deleted file]
arch/arm26/nwfpe/double_cpdo.c [deleted file]
arch/arm26/nwfpe/entry.S [deleted file]
arch/arm26/nwfpe/extended_cpdo.c [deleted file]
arch/arm26/nwfpe/fpa11.c [deleted file]
arch/arm26/nwfpe/fpa11.h [deleted file]
arch/arm26/nwfpe/fpa11.inl [deleted file]
arch/arm26/nwfpe/fpa11_cpdo.c [deleted file]
arch/arm26/nwfpe/fpa11_cpdt.c [deleted file]
arch/arm26/nwfpe/fpa11_cprt.c [deleted file]
arch/arm26/nwfpe/fpmodule.c [deleted file]
arch/arm26/nwfpe/fpmodule.h [deleted file]
arch/arm26/nwfpe/fpmodule.inl [deleted file]
arch/arm26/nwfpe/fpopcode.c [deleted file]
arch/arm26/nwfpe/fpopcode.h [deleted file]
arch/arm26/nwfpe/fpsr.h [deleted file]
arch/arm26/nwfpe/milieu.h [deleted file]
arch/arm26/nwfpe/single_cpdo.c [deleted file]
arch/arm26/nwfpe/softfloat-macros [deleted file]
arch/arm26/nwfpe/softfloat-specialize [deleted file]
arch/arm26/nwfpe/softfloat.c [deleted file]
arch/arm26/nwfpe/softfloat.h [deleted file]
drivers/acorn/README [deleted file]
drivers/acorn/block/Kconfig [deleted file]
drivers/acorn/block/Makefile [deleted file]
drivers/acorn/block/fd1772.c [deleted file]
drivers/acorn/block/fd1772dma.S [deleted file]
drivers/acorn/block/mfm.S [deleted file]
drivers/acorn/block/mfmhd.c [deleted file]
drivers/ide/Kconfig
drivers/ide/arm/ide_arm.c
drivers/rtc/Kconfig
drivers/scsi/arm/Kconfig
drivers/scsi/arm/Makefile
drivers/scsi/arm/ecoscsi.c [deleted file]
drivers/video/acornfb.c
include/asm-arm26/a.out.h [deleted file]
include/asm-arm26/assembler.h [deleted file]
include/asm-arm26/atomic.h [deleted file]
include/asm-arm26/auxvec.h [deleted file]
include/asm-arm26/bitops.h [deleted file]
include/asm-arm26/bug.h [deleted file]
include/asm-arm26/bugs.h [deleted file]
include/asm-arm26/byteorder.h [deleted file]
include/asm-arm26/cache.h [deleted file]
include/asm-arm26/cacheflush.h [deleted file]
include/asm-arm26/checksum.h [deleted file]
include/asm-arm26/constants.h [deleted file]
include/asm-arm26/cputime.h [deleted file]
include/asm-arm26/current.h [deleted file]
include/asm-arm26/delay.h [deleted file]
include/asm-arm26/device.h [deleted file]
include/asm-arm26/div64.h [deleted file]
include/asm-arm26/dma.h [deleted file]
include/asm-arm26/ecard.h [deleted file]
include/asm-arm26/elf.h [deleted file]
include/asm-arm26/emergency-restart.h [deleted file]
include/asm-arm26/errno.h [deleted file]
include/asm-arm26/fb.h [deleted file]
include/asm-arm26/fcntl.h [deleted file]
include/asm-arm26/fiq.h [deleted file]
include/asm-arm26/floppy.h [deleted file]
include/asm-arm26/fpstate.h [deleted file]
include/asm-arm26/futex.h [deleted file]
include/asm-arm26/hardirq.h [deleted file]
include/asm-arm26/hardware.h [deleted file]
include/asm-arm26/ide.h [deleted file]
include/asm-arm26/io.h [deleted file]
include/asm-arm26/ioc.h [deleted file]
include/asm-arm26/ioctl.h [deleted file]
include/asm-arm26/ioctls.h [deleted file]
include/asm-arm26/ipc.h [deleted file]
include/asm-arm26/ipcbuf.h [deleted file]
include/asm-arm26/irq.h [deleted file]
include/asm-arm26/irqchip.h [deleted file]
include/asm-arm26/kdebug.h [deleted file]
include/asm-arm26/kmap_types.h [deleted file]
include/asm-arm26/leds.h [deleted file]
include/asm-arm26/limits.h [deleted file]
include/asm-arm26/linkage.h [deleted file]
include/asm-arm26/local.h [deleted file]
include/asm-arm26/locks.h [deleted file]
include/asm-arm26/mach-types.h [deleted file]
include/asm-arm26/map.h [deleted file]
include/asm-arm26/mc146818rtc.h [deleted file]
include/asm-arm26/memory.h [deleted file]
include/asm-arm26/mman.h [deleted file]
include/asm-arm26/mmu.h [deleted file]
include/asm-arm26/mmu_context.h [deleted file]
include/asm-arm26/module.h [deleted file]
include/asm-arm26/msgbuf.h [deleted file]
include/asm-arm26/namei.h [deleted file]
include/asm-arm26/oldlatches.h [deleted file]
include/asm-arm26/page.h [deleted file]
include/asm-arm26/param.h [deleted file]
include/asm-arm26/parport.h [deleted file]
include/asm-arm26/pci.h [deleted file]
include/asm-arm26/percpu.h [deleted file]
include/asm-arm26/pgalloc.h [deleted file]
include/asm-arm26/pgtable.h [deleted file]
include/asm-arm26/poll.h [deleted file]
include/asm-arm26/posix_types.h [deleted file]
include/asm-arm26/proc-fns.h [deleted file]
include/asm-arm26/processor.h [deleted file]
include/asm-arm26/procinfo.h [deleted file]
include/asm-arm26/ptrace.h [deleted file]
include/asm-arm26/resource.h [deleted file]
include/asm-arm26/scatterlist.h [deleted file]
include/asm-arm26/sections.h [deleted file]
include/asm-arm26/segment.h [deleted file]
include/asm-arm26/semaphore-helper.h [deleted file]
include/asm-arm26/semaphore.h [deleted file]
include/asm-arm26/sembuf.h [deleted file]
include/asm-arm26/serial.h [deleted file]
include/asm-arm26/setup.h [deleted file]
include/asm-arm26/shmbuf.h [deleted file]
include/asm-arm26/shmparam.h [deleted file]
include/asm-arm26/sigcontext.h [deleted file]
include/asm-arm26/siginfo.h [deleted file]
include/asm-arm26/signal.h [deleted file]
include/asm-arm26/sizes.h [deleted file]
include/asm-arm26/smp.h [deleted file]
include/asm-arm26/socket.h [deleted file]
include/asm-arm26/sockios.h [deleted file]
include/asm-arm26/spinlock.h [deleted file]
include/asm-arm26/stat.h [deleted file]
include/asm-arm26/statfs.h [deleted file]
include/asm-arm26/string.h [deleted file]
include/asm-arm26/suspend.h [deleted file]
include/asm-arm26/sysirq.h [deleted file]
include/asm-arm26/system.h [deleted file]
include/asm-arm26/termbits.h [deleted file]
include/asm-arm26/termios.h [deleted file]
include/asm-arm26/thread_info.h [deleted file]
include/asm-arm26/timex.h [deleted file]
include/asm-arm26/tlb.h [deleted file]
include/asm-arm26/tlbflush.h [deleted file]
include/asm-arm26/topology.h [deleted file]
include/asm-arm26/types.h [deleted file]
include/asm-arm26/uaccess-asm.h [deleted file]
include/asm-arm26/uaccess.h [deleted file]
include/asm-arm26/ucontext.h [deleted file]
include/asm-arm26/unaligned.h [deleted file]
include/asm-arm26/uncompress.h [deleted file]
include/asm-arm26/unistd.h [deleted file]
include/asm-arm26/user.h [deleted file]
include/asm-arm26/xor.h [deleted file]
include/linux/mmzone.h
lib/Kconfig.debug

index ce8066d..c292897 100644 (file)
@@ -387,21 +387,6 @@ P: Jaya Kumar
 M:     jayalk@intworks.biz
 S:     Maintained
 
-ARM26 ARCHITECTURE
-P:     Ian Molton
-M:     spyro@f2s.com
-S:     Maintained
-
-ARM26/ARCHIMEDES
-P:     Ian Molton
-M:     spyro@f2s.com
-S:     Maintained
-
-ARM26/A5000
-P:     John Appleby
-M:     john@dnsworld.co.uk
-S:     Maintained
-
 ARM MFM AND FLOPPY DRIVERS
 P:     Ian Molton
 M:     spyro@f2s.com
index ed7b26b..b29178c 100644 (file)
@@ -9,5 +9,4 @@ nwfpe-y                         += fpa11.o fpa11_cpdo.o fpa11_cpdt.o \
                                   softfloat.o single_cpdo.o double_cpdo.o
 
 nwfpe-$(CONFIG_FPE_NWFPE_XP)   += extended_cpdo.o
-nwfpe-$(CONFIG_CPU_26)         += entry26.o
 nwfpe-$(CONFIG_CPU_32)         += entry.o
diff --git a/arch/arm/nwfpe/entry26.S b/arch/arm/nwfpe/entry26.S
deleted file mode 100644 (file)
index 3e6fb5d..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-    NetWinder Floating Point Emulator
-    (c) Rebel.COM, 1998
-    (c) Philip Blundell 1998-1999
-
-    Direct questions, comments to Scott Bambrough <scottb@netwinder.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <asm/asm-offsets.h>
-
-/* This is the kernel's entry point into the floating point emulator.
-It is called from the kernel with code similar to this:
-
-       mov     fp, #0
-       teqp    pc, #PSR_I_BIT | SVC_MODE
-       ldr     r4, .LC2
-       ldr     pc, [r4]                @ Call FP module USR entry point
-
-The kernel expects the emulator to return via one of two possible
-points of return it passes to the emulator.  The emulator, if
-successful in its emulation, jumps to ret_from_exception and the
-kernel takes care of returning control from the trap to the user code.
-If the emulator is unable to emulate the instruction, it returns to
-fpundefinstr and the kernel halts the user program with a core dump.
-
-This routine does four things:
-
-1) It saves SP into a variable called userRegisters.  The kernel has
-created a struct pt_regs on the stack and saved the user registers
-into it.  See /usr/include/asm/proc/ptrace.h for details.  The
-emulator code uses userRegisters as the base of an array of words from
-which the contents of the registers can be extracted.
-
-2) It locates the FP emulator work area within the TSS structure and
-points `fpa11' to it.
-
-3) It calls EmulateAll to emulate a floating point instruction.
-EmulateAll returns 1 if the emulation was successful, or 0 if not.
-
-4) If an instruction has been emulated successfully, it looks ahead at
-the next instruction.  If it is a floating point instruction, it
-executes the instruction, without returning to user space.  In this
-way it repeatedly looks ahead and executes floating point instructions
-until it encounters a non floating point instruction, at which time it
-returns via _fpreturn.
-
-This is done to reduce the effect of the trap overhead on each
-floating point instructions.  GCC attempts to group floating point
-instructions to allow the emulator to spread the cost of the trap over
-several floating point instructions.  */
-
-       .globl  nwfpe_enter
-nwfpe_enter:
-       mov     sl, sp
-       ldr     r5, [sp, #60]           @ get contents of PC
-       bic     r5, r5, #0xfc000003
-       ldr     r0, [r5, #-4]           @ get actual instruction into r0
-       bl      EmulateAll              @ emulate the instruction
-1:     cmp     r0, #0                  @ was emulation successful
-       beq     fpundefinstr            @ no, return failure
-
-next:
-.Lx1:  ldrt    r6, [r5], #4            @ get the next instruction and
-                                       @ increment PC
-
-       and     r2, r6, #0x0F000000     @ test for FP insns
-       teq     r2, #0x0C000000
-       teqne   r2, #0x0D000000
-       teqne   r2, #0x0E000000
-       bne     ret_from_exception      @ return ok if not a fp insn
-
-       ldr     r9, [sp, #60]           @ get new condition codes
-       and     r9, r9, #0xfc000003
-       orr     r7, r5, r9
-       str     r7, [sp, #60]           @ update PC copy in regs
-
-       mov     r0, r6                  @ save a copy
-       mov     r1, r9                  @ fetch the condition codes
-       bl      checkCondition          @ check the condition
-       cmp     r0, #0                  @ r0 = 0 ==> condition failed
-
-       @ if condition code failed to match, next insn
-       beq     next                    @ get the next instruction;
-
-       mov     r0, r6                  @ prepare for EmulateAll()
-       adr     lr, 1b
-       orr     lr, lr, #3
-       b       EmulateAll              @ if r0 != 0, goto EmulateAll
-
-.Lret: b       ret_from_exception      @ let the user eat segfaults
-       
-       @ We need to be prepared for the instruction at .Lx1 to fault.
-       @ Emit the appropriate exception gunk to fix things up.
-       .section __ex_table,"a"
-       .align  3
-       .long   .Lx1
-       ldr     lr, [lr, $(.Lret - .Lx1)/4]
-       .previous
diff --git a/arch/arm26/ACKNOWLEDGEMENTS b/arch/arm26/ACKNOWLEDGEMENTS
deleted file mode 100644 (file)
index 0a17a45..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-The work in this architecture (ARM26) is that of a great many people.
-
-This is what has happened:
-
-I [Ian Molton] have been trying to repair the ARM26 architecture support, but it has become an impossible task whilst it is still merged with the ARM32 (arch/arm) code. The ARM26 code is too different to be sensible to keep with the ARM32 code now, and Russell King really doesnt have the time to maintain the ARM26 code. Add to that that most ARM32 developers dont know about or care about ARM26 when writing patches, and you have a reall mess.
-
-As a result, I've split it off into a new architecture of its own. I've named it arm26 since these CPUs have only a 26 bit address space, unlike the other ARMs.
-
-The upheaval in moving around so many source files and chopping out vasty ammounts of cruft was enormous, and the copyright of many files is sometimes unclear. Because of this, I am writing this, in order that no-one is left out / misaccredited / blamed for any of the code.
-
-People I KNOW have made major contributions to the code:
-
-David Alan Gilbert (former maintainer of ARM26 bits)
-Philip Blundell
-Russell King
-Keith Owens
-
-also thanks to Nicholas Pitre for hints, and for the basis or our XIP support.
-
-Currently maintaing the code are
-
-Ian Molton (Maintainer / Archimedes)
-John Appleby (kernel / A5K)
-
-If anyone has a problem with attributions in header files / source files, please do contact me to straighten things out.
-
-Ian Molton (aka spyro)  -  ARM26 maintainer
-spyro@f2s.com
-
diff --git a/arch/arm26/Kconfig b/arch/arm26/Kconfig
deleted file mode 100644 (file)
index 9044f33..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-#
-# For a description of the syntax of this configuration file,
-# see Documentation/kbuild/kconfig-language.txt.
-#
-
-mainmenu "Linux Kernel Configuration"
-
-config ARM
-       bool
-       default y
-
-config ARM26
-       bool
-       default y
-
-config MMU
-       bool
-       default y
-
-config NO_DMA
-       def_bool y
-
-config ARCH_ACORN
-        bool
-        default y
-
-config CPU_26
-        bool
-        default y
-
-config FIQ
-        bool
-        default y
-
-# 9 = 512 pages 8 = 256 pages 7 = 128 pages
-config FORCE_MAX_ZONEORDER
-        int
-        default 9
-
-config RWSEM_GENERIC_SPINLOCK
-       bool
-       default y
-
-config RWSEM_XCHGADD_ALGORITHM
-       bool
-
-config ARCH_HAS_ILOG2_U32
-       bool
-       default n
-
-config ARCH_HAS_ILOG2_U64
-       bool
-       default n
-
-config GENERIC_HWEIGHT
-       bool
-       default y
-
-config GENERIC_CALIBRATE_DELAY
-       bool
-       default y
-
-config ZONE_DMA
-       bool
-       default y
-
-config GENERIC_ISA_DMA
-       bool
-
-config ARCH_MAY_HAVE_PC_FDC
-       bool
-
-source "init/Kconfig"
-
-
-menu "System Type"
-
-choice
-       prompt "Archimedes/A5000 Implementations"
-
-config ARCH_ARC
-        bool "Archimedes"
-        help
-          Say Y to support the Acorn Archimedes.
-
-         The Acorn Archimedes was an personal computer based on an 8MHz ARM2
-          processor, released in 1987.  It supported up to 16MB of RAM in
-         later models and floppy, harddisc, ethernet etc.
-
-config ARCH_A5K
-        bool "A5000"
-       select ARCH_MAY_HAVE_PC_FDC
-        help
-          Say Y here to support the Acorn A5000.
-
-         Linux can support the
-          internal IDE disk and CD-ROM interface, serial and parallel port,
-          and the floppy drive.  Note that on some A5000s the floppy is
-          plugged into the wrong socket on the motherboard.
-
-config PAGESIZE_16
-        bool "2MB physical memory (broken)"
-        help
-          Say Y here if your Archimedes or A5000 system has only 2MB of
-          memory, otherwise say N.  The resulting kernel will not run on a
-          machine with 4MB of memory.
-endchoice
-endmenu
-
-config ISA_DMA_API
-       bool
-       default y
-
-menu "General setup"
-
-# Compressed boot loader in ROM.  Yes, we really want to ask about
-# TEXT and BSS so we preserve their values in the config files.
-config ZBOOT_ROM
-       bool "Compressed boot loader in ROM/flash"
-       help
-         Say Y here if you intend to execute your compressed kernel image (zImage)
-         directly from ROM or flash.  If unsure, say N.
-
-config ZBOOT_ROM_TEXT
-       depends on ZBOOT_ROM
-       hex "Compressed ROM boot loader base address"
-       default "0"
-       help
-         The base address for zImage.  Unless you have special requirements, you
-         should not change this value.
-
-config ZBOOT_ROM_BSS
-       depends on ZBOOT_ROM
-       hex "Compressed ROM boot loader BSS address"
-       default "0"
-       help
-         The base address of 64KiB of read/write memory, which must be available
-         while the decompressor is running.  Unless you have special requirements,
-         you should not change this value.
-
-config XIP_KERNEL
-       bool "Execute In Place (XIP) kernel image"
-       help
-         Select this option to create a kernel that can be programmed into
-         the OS ROMs.
-
-comment "At least one math emulation must be selected"
-
-config FPE_NWFPE
-       tristate "NWFPE math emulation"
-       ---help---
-         Say Y to include the NWFPE floating point emulator in the kernel.
-         This is necessary to run most binaries. Linux does not currently
-         support floating point hardware so you need to say Y here even if
-         your machine has an FPA or floating point co-processor module.
-
-         It is also possible to say M to build the emulator as a module
-         (nwfpe) or indeed to leave it out altogether. However, unless you
-         know what you are doing this can easily render your machine
-         unbootable. Saying Y is the safe option.
-
-         You may say N here if you are going to load the Acorn FPEmulator
-         early in the bootup.
-
-source "fs/Kconfig.binfmt"
-
-config PREEMPT
-       bool "Preemptible Kernel (EXPERIMENTAL)"
-       depends on CPU_32 && EXPERIMENTAL
-       help
-         This option reduces the latency of the kernel when reacting to
-         real-time or interactive events by allowing a low priority process to
-         be preempted even if it is in kernel mode executing a system call.
-         This allows applications to run more reliably even when the system is
-         under load.
-
-         Say Y here if you are building a kernel for a desktop, embedded
-         or real-time system.  Say N if you are unsure.
-
-config ARTHUR
-       tristate "RISC OS personality"
-       depends on CPU_32
-       help
-         Say Y here to include the kernel code necessary if you want to run
-         Acorn RISC OS/Arthur binaries under Linux. This code is still very
-         experimental; if this sounds frightening, say N and sleep in peace.
-         You can also say M here to compile this support as a module (which
-         will be called arthur).
-
-config CMDLINE
-       string "Default kernel command string"
-       default ""
-       help
-         On some architectures (EBSA110 and CATS), there is currently no way
-         for the boot loader to pass arguments to the kernel. For these
-         architectures, you should supply some command-line options at build
-         time by entering them here. As a minimum, you should specify the
-         memory size and the root device (e.g., mem=64M root=/dev/nfs).
-
-source "mm/Kconfig"
-
-endmenu
-
-source "net/Kconfig"
-
-source "drivers/base/Kconfig"
-
-source "drivers/parport/Kconfig"
-
-source "drivers/pnp/Kconfig"
-
-source "drivers/block/Kconfig"
-
-source "drivers/md/Kconfig"
-
-source "drivers/net/Kconfig"
-
-source "drivers/ide/Kconfig"
-
-source "drivers/scsi/Kconfig"
-
-source "drivers/isdn/Kconfig"
-
-#
-# input before char - char/joystick depends on it. As does USB.
-#
-source "drivers/input/Kconfig"
-
-source "drivers/char/Kconfig"
-
-source "drivers/media/Kconfig"
-
-source "fs/Kconfig"
-
-source "drivers/video/Kconfig"
-
-if ARCH_ACORN
-
-source "sound/Kconfig"
-
-endif
-
-source "drivers/misc/Kconfig"
-
-source "drivers/usb/Kconfig"
-
-source "arch/arm26/Kconfig.debug"
-
-source "security/Kconfig"
-
-source "crypto/Kconfig"
-
-source "lib/Kconfig"
diff --git a/arch/arm26/Kconfig.debug b/arch/arm26/Kconfig.debug
deleted file mode 100644 (file)
index 611fc86..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-menu "Kernel hacking"
-
-source "lib/Kconfig.debug"
-
-# RMK wants arm kernels compiled with frame pointers so hardwire this to y.
-# If you know what you are doing and are willing to live without stack
-# traces, you can get a slightly smaller kernel by setting this option to
-# n, but then RMK will have to kill you ;).
-config FRAME_POINTER
-       bool
-       default y
-       help
-         If you say N here, the resulting kernel will be slightly smaller and
-         faster. However, when a problem occurs with the kernel, the
-         information that is reported is severely limited. Most people
-         should say Y here.
-
-config DEBUG_USER
-       bool "Verbose user fault messages"
-       help
-         When a user program crashes due to an exception, the kernel can
-         print a brief message explaining what the problem was. This is
-         sometimes helpful for debugging but serves no purpose on a
-         production system. Most people should say N here.
-
-config DEBUG_WAITQ
-       bool "Wait queue debugging"
-       depends on DEBUG_KERNEL
-
-config DEBUG_ERRORS
-       bool "Verbose kernel error messages"
-       depends on DEBUG_KERNEL
-       help
-         This option controls verbose debugging information which can be
-         printed when the kernel detects an internal error. This debugging
-         information is useful to kernel hackers when tracking down problems,
-         but mostly meaningless to other people. It's safe to say Y unless
-         you are concerned with the code size or don't want to see these
-         messages.
-
-# These options are only for real kernel hackers who want to get their hands dirty.
-config DEBUG_LL
-       bool "Kernel low-level debugging functions"
-       depends on DEBUG_KERNEL
-       help
-         Say Y here to include definitions of printascii, printchar, printhex
-         in the kernel.  This is helpful if you are debugging code that
-         executes before the console is initialized.
-
-endmenu
diff --git a/arch/arm26/Makefile b/arch/arm26/Makefile
deleted file mode 100644 (file)
index fe91eda..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#
-# arch/arm26/Makefile
-#
-# This file is included by the global makefile so that you can add your own
-# architecture-specific flags and dependencies.
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1995-2001 by Russell King
-# Copyright (c) 2004 Ian Molton
-
-LDFLAGS_vmlinux        :=-p -X
-CPPFLAGS_vmlinux.lds = -DTEXTADDR=$(TEXTADDR) -DDATAADDR=$(DATAADDR)
-OBJCOPYFLAGS   :=-O binary -R .note -R .comment -S
-GZFLAGS                :=-9
-
-ifeq ($(CONFIG_FRAME_POINTER),y)
-CFLAGS         +=-fno-omit-frame-pointer -mno-sched-prolog
-endif
-
-CFLAGS_BOOT    :=-mapcs-26 -mcpu=arm3 -msoft-float -Uarm
-CFLAGS         +=-mapcs-26 -mcpu=arm3 -msoft-float -Uarm
-AFLAGS         +=-mapcs-26 -mcpu=arm3 -msoft-float
-
-ifeq ($(CONFIG_XIP_KERNEL),y)
-  TEXTADDR      := 0x03880000
-  DATAADDR      := 0x02080000
-else
-  TEXTADDR      := 0x02080000
-  DATAADDR       := .
-endif
-
-head-y          := arch/arm26/kernel/head.o arch/arm26/kernel/init_task.o
-
-ifeq ($(incdir-y),)
-incdir-y :=
-endif
-INCDIR   :=
-  
-export MACHINE TEXTADDR GZFLAGS CFLAGS_BOOT
-
-# If we have a machine-specific directory, then include it in the build.
-core-y                         += arch/arm26/kernel/ arch/arm26/mm/ arch/arm26/machine/
-core-$(CONFIG_FPE_NWFPE)       += arch/arm26/nwfpe/
-
-libs-y                         += arch/arm26/lib/
-
-# Default target when executing plain make
-all: zImage
-
-boot := arch/arm26/boot
-
-PHONY += maketools FORCE
-maketools: FORCE
-
-
-# Convert bzImage to zImage
-bzImage: vmlinux
-       $(Q)$(MAKE) $(build)=$(boot) $(boot)/zImage
-
-zImage Image bootpImage xipImage: vmlinux
-       $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
-
-zinstall install: vmlinux
-       $(Q)$(MAKE) $(build)=$(boot) $@
-
-# We use MRPROPER_FILES and CLEAN_FILES now
-archclean:
-       $(Q)$(MAKE) $(clean)=$(boot)
-
-# My testing targets (that short circuit a few dependencies)
-zImg:; $(Q)$(MAKE) $(build)=$(boot) $(boot)/zImage
-Img:;  $(Q)$(MAKE) $(build)=$(boot) $(boot)/Image
-bp:;   $(Q)$(MAKE) $(build)=$(boot) $(boot)/bootpImage
-i:;    $(Q)$(MAKE) $(build)=$(boot) install
-zi:;   $(Q)$(MAKE) $(build)=$(boot) zinstall
-
-#
-# Configuration targets.  Use these to select a
-# configuration for your architecture
-%_config:
-       @( \
-       CFG=$(@:_config=); \
-       if [ -f arch/arm26/def-configs/$$CFG ]; then \
-         [ -f .config ] && mv -f .config .config.old; \
-         cp arch/arm26/def-configs/$$CFG .config; \
-         echo "*** Default configuration for $$CFG installed"; \
-         echo "*** Next, you may run 'make oldconfig'"; \
-       else \
-         echo "$$CFG does not exist"; \
-       fi; \
-       )
-
-define archhelp
-  echo  '* zImage        - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
-  echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
-  echo  '  bootpImage    - Combined zImage and initial RAM disk' 
-  echo  '  xipImage      - eXecute In Place capable image for ROM use (arch/$(ARCH)/boot/xipImage)'
-  echo  '  initrd        - Create an initial image'
-  echo  '  install       - Install uncompressed kernel'
-  echo  '  zinstall      - Install compressed kernel'
-  echo  '                  Install using (your) ~/bin/installkernel or'
-  echo  '                  (distribution) /sbin/installkernel or'
-  echo  '                  install to $$(INSTALL_PATH) and run lilo'
-endef
diff --git a/arch/arm26/boot/Makefile b/arch/arm26/boot/Makefile
deleted file mode 100644 (file)
index 68acb7b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#
-# arch/arm26/boot/Makefile
-#
-# This file is included by the global makefile so that you can add your own
-# architecture-specific flags and dependencies.
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1995-2002 Russell King
-#
-
-# Note: the following conditions must always be true:
-#   ZRELADDR == virt_to_phys(TEXTADDR)
-#   PARAMS_PHYS must be with 4MB of ZRELADDR
-#   INITRD_PHYS must be in RAM
-
-   zreladdr-y          := 0x02080000 
-params_phys-y          := 0x0207c000
-initrd_phys-y          := 0x02180000
-
-ZRELADDR    := 0x02080000
-ZTEXTADDR   := 0x0207c000
-PARAMS_PHYS := $(params_phys-y)
-INITRD_PHYS := 0x02180000
-
-# We now have a PIC decompressor implementation.  Decompressors running
-# from RAM should not define ZTEXTADDR.  Decompressors running directly
-# from ROM or Flash must define ZTEXTADDR (preferably via the config)
-# FIXME: Previous assignment to ztextaddr-y is lost here. See SHARK
-ifeq ($(CONFIG_ZBOOT_ROM),y)
-ZTEXTADDR      := $(CONFIG_ZBOOT_ROM_TEXT)
-ZBSSADDR       := $(CONFIG_ZBOOT_ROM_BSS)
-else
-ZTEXTADDR      := 0
-ZBSSADDR       := ALIGN(4)
-endif
-
-export ZTEXTADDR ZBSSADDR ZRELADDR INITRD_PHYS PARAMS_PHYS
-
-targets := Image zImage bootpImage xipImage
-
-$(obj)/Image: vmlinux FORCE
-       $(call if_changed,objcopy)
-       @echo '  Kernel: $@ is ready'
-
-$(obj)/zImage: $(obj)/compressed/vmlinux FORCE
-       $(call if_changed,objcopy)
-       @echo '  Kernel: $@ is ready'
-
-$(obj)/compressed/vmlinux: vmlinux FORCE
-       $(Q)$(MAKE) $(build)=$(obj)/compressed $@
-
-ifeq ($(CONFIG_XIP_KERNEL),y)
-$(obj)/xipImage: vmlinux FORCE
-#      $(OBJCOPY) -S -O binary -R .data -R .comment vmlinux vmlinux-text.bin
-# FIXME - where has .pci_fixup crept in from?
-       $(OBJCOPY) -S -O binary -R .data -R .pci_fixup -R .comment vmlinux vmlinux-text.bin
-       $(OBJCOPY) -S -O binary -R .init -R .text -R __ex_table -R .pci_fixup -R __ksymtab -R __ksymtab_gpl -R __kcrctab -R __kcrctab_gpl -R __param -R .comment vmlinux vmlinux-data.bin
-       cat vmlinux-text.bin vmlinux-data.bin > $@
-       $(RM) -f vmlinux-text.bin vmlinux-data.bin
-       @echo '  Kernel: $@ is ready'
-endif
-
-PHONY += initrd
-initrd:
-       @test "$(INITRD_PHYS)" != "" || \
-       (echo This machine does not support INITRD; exit -1)
-       @test "$(INITRD)" != "" || \
-       (echo You must specify INITRD; exit -1)
-
-install: $(obj)/Image
-       $(CONFIG_SHELL) $(obj)/install.sh \
-       $(KERNELRELEASE) \
-       $(obj)/Image System.map "$(INSTALL_PATH)"
-
-zinstall: $(obj)/zImage
-       $(CONFIG_SHELL) $(obj)/install.sh \
-       $(KERNELRELEASE) \
-       $(obj)/zImage System.map "$(INSTALL_PATH)"
-
-subdir-            := compressed
diff --git a/arch/arm26/boot/compressed/Makefile b/arch/arm26/boot/compressed/Makefile
deleted file mode 100644 (file)
index b1d9dde..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#
-# linux/arch/arm26/boot/compressed/Makefile
-#
-# create a compressed vmlinuz image from the original vmlinux
-#
-# Note! ZTEXTADDR, ZBSSADDR and ZRELADDR are now exported
-# from arch/arm26/boot/Makefile
-#
-
-HEAD   = head.o
-OBJS   = misc.o
-FONTC  = drivers/video/console/font_acorn_8x8.c
-
-OBJS           += ll_char_wr.o font.o
-CFLAGS_misc.o  := -DPARAMS_PHYS=$(PARAMS_PHYS)
-
-targets       := vmlinux vmlinux.lds piggy piggy.gz piggy.o font.o head.o $(OBJS)
-
-SEDFLAGS       = s/TEXT_START/$(ZTEXTADDR)/;s/LOAD_ADDR/$(ZRELADDR)/;s/BSS_START/$(ZBSSADDR)/
-
-EXTRA_CFLAGS  := $(CFLAGS_BOOT) -fpic
-EXTRA_AFLAGS  := -traditional
-
-LDFLAGS_vmlinux := -p -X \
-       $(shell $(CC) $(CFLAGS)) -T
-
-$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \
-               $(addprefix $(obj)/, $(OBJS)) FORCE
-       $(call if_changed,ld)
-       @:
-
-
-$(obj)/piggy: vmlinux FORCE
-       $(call if_changed,objcopy)
-
-$(obj)/piggy.gz: $(obj)/piggy FORCE
-       $(call if_changed,gzip)
-
-LDFLAGS_piggy.o := -r -b binary
-$(obj)/piggy.o:  $(obj)/piggy.gz FORCE
-       $(call if_changed,ld)
-
-$(obj)/font.o: $(FONTC)
-       $(CC) $(CFLAGS) -Dstatic= -c $(FONTC) -o $(obj)/font.o
-
-$(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in Makefile arch/arm26/boot/Makefile .config
-       @sed "$(SEDFLAGS)" < $< > $@
-
-$(obj)/misc.o: $(obj)/misc.c $(obj)/uncompress.h lib/inflate.c
-
diff --git a/arch/arm26/boot/compressed/head.S b/arch/arm26/boot/compressed/head.S
deleted file mode 100644 (file)
index 2a2cda3..0000000
+++ /dev/null
@@ -1,516 +0,0 @@
-/*
- *  linux/arch/arm26/boot/compressed/head.S
- *
- *  Copyright (C) 1996-2002 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/linkage.h>
-
-/*
- * Debugging stuff
- *
- * Note that these macros must not contain any code which is not
- * 100% relocatable.  Any attempt to do so will result in a crash.
- * Please select one of the following when turning on debugging.
- */
-
-               .macro  kputc,val
-               mov     r0, \val
-               bl      putc
-               .endm
-
-               .macro  kphex,val,len
-               mov     r0, \val
-               mov     r1, #\len
-               bl      phex
-               .endm
-
-               .macro  debug_reloc_start
-               .endm
-
-               .macro  debug_reloc_end
-               .endm
-
-               .section ".start", #alloc, #execinstr
-/*
- * sort out different calling conventions
- */
-               .align
-start:
-               .type   start,#function
-               .rept   8
-               mov     r0, r0
-               .endr
-
-               b       1f
-               .word   0x016f2818              @ Magic numbers to help the loader
-               .word   start                   @ absolute load/run zImage address
-               .word   _edata                  @ zImage end address
-1:             mov     r7, r1                  @ save architecture ID
-               mov     r8, #0                  @ save r0
-               teqp    pc, #0x0c000003         @ turn off interrupts
-
-               .text
-               adr     r0, LC0
-               ldmia   r0, {r1, r2, r3, r4, r5, r6, ip, sp}
-               subs    r0, r0, r1              @ calculate the delta offset
-
-               teq     r0, #0                  @ if delta is zero, we're
-               beq     not_relocated           @ running at the address we
-                                               @ were linked at.
-
-               add     r2, r2, r0              @ different address, so we
-               add     r3, r3, r0              @ need to fix up various
-               add     r5, r5, r0              @ pointers.
-               add     r6, r6, r0
-               add     ip, ip, r0
-               add     sp, sp, r0
-
-1:             ldr     r1, [r6, #0]            @ relocate entries in the GOT
-               add     r1, r1, r0              @ table.  This fixes up the
-               str     r1, [r6], #4            @ C references.
-               cmp     r6, ip
-               blo     1b
-
-not_relocated: mov     r0, #0
-1:             str     r0, [r2], #4            @ clear bss
-               str     r0, [r2], #4
-               str     r0, [r2], #4
-               str     r0, [r2], #4
-               cmp     r2, r3
-               blo     1b
-
-               bl      cache_on
-
-               mov     r1, sp                  @ malloc space above stack
-               add     r2, sp, #0x10000        @ 64k max
-
-/*
- * Check to see if we will overwrite ourselves.
- *   r4 = final kernel address
- *   r5 = start of this image
- *   r2 = end of malloc space (and therefore this image)
- * We basically want:
- *   r4 >= r2 -> OK
- *   r4 + image length <= r5 -> OK
- */
-               cmp     r4, r2
-               bhs     wont_overwrite
-               add     r0, r4, #4096*1024      @ 4MB largest kernel size
-               cmp     r0, r5
-               bls     wont_overwrite
-
-               mov     r5, r2                  @ decompress after malloc space
-               mov     r0, r5
-               mov     r3, r7
-               bl      decompress_kernel
-
-               add     r0, r0, #127
-               bic     r0, r0, #127            @ align the kernel length
-/*
- * r0     = decompressed kernel length
- * r1-r3  = unused
- * r4     = kernel execution address
- * r5     = decompressed kernel start
- * r6     = processor ID
- * r7     = architecture ID
- * r8-r14 = unused
- */
-               add     r1, r5, r0              @ end of decompressed kernel
-               adr     r2, reloc_start
-               ldr     r3, LC1
-               add     r3, r2, r3
-1:             ldmia   r2!, {r8 - r13}         @ copy relocation code
-               stmia   r1!, {r8 - r13}
-               ldmia   r2!, {r8 - r13}
-               stmia   r1!, {r8 - r13}
-               cmp     r2, r3
-               blo     1b
-
-               bl      cache_clean_flush
-               add     pc, r5, r0              @ call relocation code
-
-/*
- * We're not in danger of overwriting ourselves.  Do this the simple way.
- *
- * r4     = kernel execution address
- * r7     = architecture ID
- */
-wont_overwrite:        mov     r0, r4
-               mov     r3, r7
-               bl      decompress_kernel
-               b       call_kernel
-
-               .type   LC0, #object
-LC0:           .word   LC0                     @ r1
-               .word   __bss_start             @ r2
-               .word   _end                    @ r3
-               .word   _load_addr              @ r4
-               .word   _start                  @ r5
-               .word   _got_start              @ r6
-               .word   _got_end                @ ip
-               .word   user_stack+4096         @ sp
-LC1:           .word   reloc_end - reloc_start
-               .size   LC0, . - LC0
-
-/*
- * Turn on the cache.  We need to setup some page tables so that we
- * can have both the I and D caches on.
- *
- * We place the page tables 16k down from the kernel execution address,
- * and we hope that nothing else is using it.  If we're using it, we
- * will go pop!
- *
- * On entry,
- *  r4 = kernel execution address
- *  r6 = processor ID
- *  r7 = architecture number
- *  r8 = run-time address of "start"
- * On exit,
- *  r1, r2, r3, r8, r9, r12 corrupted
- * This routine must preserve:
- *  r4, r5, r6, r7
- */
-               .align  5
-cache_on:      mov     r3, #8                  @ cache_on function
-               b       call_cache_fn
-
-__setup_mmu:   sub     r3, r4, #16384          @ Page directory size
-               bic     r3, r3, #0xff           @ Align the pointer
-               bic     r3, r3, #0x3f00
-/*
- * Initialise the page tables, turning on the cacheable and bufferable
- * bits for the RAM area only.
- */
-               mov     r0, r3
-               mov     r8, r0, lsr #18
-               mov     r8, r8, lsl #18         @ start of RAM
-               add     r9, r8, #0x10000000     @ a reasonable RAM size
-               mov     r1, #0x12
-               orr     r1, r1, #3 << 10
-               add     r2, r3, #16384
-1:             cmp     r1, r8                  @ if virt > start of RAM
-               orrhs   r1, r1, #0x0c           @ set cacheable, bufferable
-               cmp     r1, r9                  @ if virt > end of RAM
-               bichs   r1, r1, #0x0c           @ clear cacheable, bufferable
-               str     r1, [r0], #4            @ 1:1 mapping
-               add     r1, r1, #1048576
-               teq     r0, r2
-               bne     1b
-/*
- * If ever we are running from Flash, then we surely want the cache
- * to be enabled also for our execution instance...  We map 2MB of it
- * so there is no map overlap problem for up to 1 MB compressed kernel.
- * If the execution is in RAM then we would only be duplicating the above.
- */
-               mov     r1, #0x1e
-               orr     r1, r1, #3 << 10
-               mov     r2, pc, lsr #20
-               orr     r1, r1, r2, lsl #20
-               add     r0, r3, r2, lsl #2
-               str     r1, [r0], #4
-               add     r1, r1, #1048576
-               str     r1, [r0]
-               mov     pc, lr
-
-__armv4_cache_on:
-               mov     r12, lr
-               bl      __setup_mmu
-               mov     r0, #0
-               mcr     p15, 0, r0, c7, c10, 4  @ drain write buffer
-               mcr     p15, 0, r0, c8, c7, 0   @ flush I,D TLBs
-               mrc     p15, 0, r0, c1, c0, 0   @ read control reg
-               orr     r0, r0, #0x1000         @ I-cache enable
-               orr     r0, r0, #0x0030
-               b       __common_cache_on
-
-__arm6_cache_on:
-               mov     r12, lr
-               bl      __setup_mmu
-               mov     r0, #0
-               mcr     p15, 0, r0, c7, c0, 0   @ invalidate whole cache v3
-               mcr     p15, 0, r0, c5, c0, 0   @ invalidate whole TLB v3
-               mov     r0, #0x30
-__common_cache_on:
-#ifndef DEBUG
-               orr     r0, r0, #0x000d         @ Write buffer, mmu
-#endif
-               mov     r1, #-1
-               mcr     p15, 0, r3, c2, c0, 0   @ load page table pointer
-               mcr     p15, 0, r1, c3, c0, 0   @ load domain access control
-               mcr     p15, 0, r0, c1, c0, 0   @ load control register
-               mov     pc, r12
-
-/*
- * All code following this line is relocatable.  It is relocated by
- * the above code to the end of the decompressed kernel image and
- * executed there.  During this time, we have no stacks.
- *
- * r0     = decompressed kernel length
- * r1-r3  = unused
- * r4     = kernel execution address
- * r5     = decompressed kernel start
- * r6     = processor ID
- * r7     = architecture ID
- * r8-r14 = unused
- */
-               .align  5
-reloc_start:   add     r8, r5, r0
-               debug_reloc_start
-               mov     r1, r4
-1:
-               .rept   4
-               ldmia   r5!, {r0, r2, r3, r9 - r13}     @ relocate kernel
-               stmia   r1!, {r0, r2, r3, r9 - r13}
-               .endr
-
-               cmp     r5, r8
-               blo     1b
-               debug_reloc_end
-
-call_kernel:   bl      cache_clean_flush
-               bl      cache_off
-               mov     r0, #0
-               mov     r1, r7                  @ restore architecture number
-               mov     pc, r4                  @ call kernel
-
-/*
- * Here follow the relocatable cache support functions for the
- * various processors.  This is a generic hook for locating an
- * entry and jumping to an instruction at the specified offset
- * from the start of the block.  Please note this is all position
- * independent code.
- *
- *  r1  = corrupted
- *  r2  = corrupted
- *  r3  = block offset
- *  r6  = corrupted
- *  r12 = corrupted
- */
-
-call_cache_fn: adr     r12, proc_types
-               mrc     p15, 0, r6, c0, c0      @ get processor ID
-1:             ldr     r1, [r12, #0]           @ get value
-               ldr     r2, [r12, #4]           @ get mask
-               eor     r1, r1, r6              @ (real ^ match)
-               tst     r1, r2                  @       & mask
-               addeq   pc, r12, r3             @ call cache function
-               add     r12, r12, #4*5
-               b       1b
-
-/*
- * Table for cache operations.  This is basically:
- *   - CPU ID match
- *   - CPU ID mask
- *   - 'cache on' method instruction
- *   - 'cache off' method instruction
- *   - 'cache flush' method instruction
- *
- * We match an entry using: ((real_id ^ match) & mask) == 0
- *
- * Writethrough caches generally only need 'on' and 'off'
- * methods.  Writeback caches _must_ have the flush method
- * defined.
- */
-               .type   proc_types,#object
-proc_types:
-               .word   0x41560600              @ ARM6/610
-               .word   0xffffffe0
-               b       __arm6_cache_off        @ works, but slow
-               b       __arm6_cache_off
-               mov     pc, lr
-@              b       __arm6_cache_on         @ untested
-@              b       __arm6_cache_off
-@              b       __armv3_cache_flush
-
-               .word   0x41007000              @ ARM7/710
-               .word   0xfff8fe00
-               b       __arm7_cache_off
-               b       __arm7_cache_off
-               mov     pc, lr
-
-               .word   0x41807200              @ ARM720T (writethrough)
-               .word   0xffffff00
-               b       __armv4_cache_on
-               b       __armv4_cache_off
-               mov     pc, lr
-
-               .word   0x41129200              @ ARM920T
-               .word   0xff00fff0
-               b       __armv4_cache_on
-               b       __armv4_cache_off
-               b       __armv4_cache_flush
-
-               .word   0x4401a100              @ sa110 / sa1100
-               .word   0xffffffe0
-               b       __armv4_cache_on
-               b       __armv4_cache_off
-               b       __armv4_cache_flush
-
-               .word   0x6901b110              @ sa1110
-               .word   0xfffffff0
-               b       __armv4_cache_on
-               b       __armv4_cache_off
-               b       __armv4_cache_flush
-
-               .word   0x69050000              @ xscale
-               .word   0xffff0000
-               b       __armv4_cache_on
-               b       __armv4_cache_off
-               b       __armv4_cache_flush
-
-               .word   0                       @ unrecognised type
-               .word   0
-               mov     pc, lr
-               mov     pc, lr
-               mov     pc, lr
-
-               .size   proc_types, . - proc_types
-
-/*
- * Turn off the Cache and MMU.  ARMv3 does not support
- * reading the control register, but ARMv4 does.
- *
- * On entry,  r6 = processor ID
- * On exit,   r0, r1, r2, r3, r12 corrupted
- * This routine must preserve: r4, r6, r7
- */
-               .align  5
-cache_off:     mov     r3, #12                 @ cache_off function
-               b       call_cache_fn
-
-__armv4_cache_off:
-               mrc     p15, 0, r0, c1, c0
-               bic     r0, r0, #0x000d
-               mcr     p15, 0, r0, c1, c0      @ turn MMU and cache off
-               mov     r0, #0
-               mcr     p15, 0, r0, c7, c7      @ invalidate whole cache v4
-               mcr     p15, 0, r0, c8, c7      @ invalidate whole TLB v4
-               mov     pc, lr
-
-__arm6_cache_off:
-               mov     r0, #0x00000030         @ ARM6 control reg.
-               b       __armv3_cache_off
-
-__arm7_cache_off:
-               mov     r0, #0x00000070         @ ARM7 control reg.
-               b       __armv3_cache_off
-
-__armv3_cache_off:
-               mcr     p15, 0, r0, c1, c0, 0   @ turn MMU and cache off
-               mov     r0, #0
-               mcr     p15, 0, r0, c7, c0, 0   @ invalidate whole cache v3
-               mcr     p15, 0, r0, c5, c0, 0   @ invalidate whole TLB v3
-               mov     pc, lr
-
-/*
- * Clean and flush the cache to maintain consistency.
- *
- * On entry,
- *  r6 = processor ID
- * On exit,
- *  r1, r2, r3, r12 corrupted
- * This routine must preserve:
- *  r0, r4, r5, r6, r7
- */
-               .align  5
-cache_clean_flush:
-               mov     r3, #16
-               b       call_cache_fn
-
-__armv4_cache_flush:
-               bic     r1, pc, #31
-               add     r2, r1, #65536          @ 2x the largest dcache size
-1:             ldr     r12, [r1], #32          @ s/w flush D cache
-               teq     r1, r2
-               bne     1b
-
-               mcr     p15, 0, r1, c7, c7, 0   @ flush I cache
-               mcr     p15, 0, r1, c7, c10, 4  @ drain WB
-               mov     pc, lr
-
-__armv3_cache_flush:
-               mov     r1, #0
-               mcr     p15, 0, r0, c7, c0, 0   @ invalidate whole cache v3
-               mov     pc, lr
-
-/*
- * Various debugging routines for printing hex characters and
- * memory, which again must be relocatable.
- */
-#ifdef DEBUG
-               .type   phexbuf,#object
-phexbuf:       .space  12
-               .size   phexbuf, . - phexbuf
-
-phex:          adr     r3, phexbuf
-               mov     r2, #0
-               strb    r2, [r3, r1]
-1:             subs    r1, r1, #1
-               movmi   r0, r3
-               bmi     puts
-               and     r2, r0, #15
-               mov     r0, r0, lsr #4
-               cmp     r2, #10
-               addge   r2, r2, #7
-               add     r2, r2, #'0'
-               strb    r2, [r3, r1]
-               b       1b
-
-puts:          loadsp  r3
-1:             ldrb    r2, [r0], #1
-               teq     r2, #0
-               moveq   pc, lr
-2:             writeb  r2
-               mov     r1, #0x00020000
-3:             subs    r1, r1, #1
-               bne     3b
-               teq     r2, #'\n'
-               moveq   r2, #'\r'
-               beq     2b
-               teq     r0, #0
-               bne     1b
-               mov     pc, lr
-putc:
-               mov     r2, r0
-               mov     r0, #0
-               loadsp  r3
-               b       2b
-
-memdump:       mov     r12, r0
-               mov     r10, lr
-               mov     r11, #0
-2:             mov     r0, r11, lsl #2
-               add     r0, r0, r12
-               mov     r1, #8
-               bl      phex
-               mov     r0, #':'
-               bl      putc
-1:             mov     r0, #' '
-               bl      putc
-               ldr     r0, [r12, r11, lsl #2]
-               mov     r1, #8
-               bl      phex
-               and     r0, r11, #7
-               teq     r0, #3
-               moveq   r0, #' '
-               bleq    putc
-               and     r0, r11, #7
-               add     r11, r11, #1
-               teq     r0, #7
-               bne     1b
-               mov     r0, #'\n'
-               bl      putc
-               cmp     r11, #64
-               blt     2b
-               mov     pc, r10
-#endif
-
-reloc_end:
-
-               .align
-               .section ".stack", "aw"
-user_stack:    .space  4096
diff --git a/arch/arm26/boot/compressed/ll_char_wr.S b/arch/arm26/boot/compressed/ll_char_wr.S
deleted file mode 100644 (file)
index f024c3e..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *  linux/arch/arm26/lib/ll_char_wr.S
- *
- *  Copyright (C) 1995, 1996 Russell King.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- *  Speedups & 1bpp code (C) 1996 Philip Blundell & Russell King.
- *
- *  10-04-96   RMK     Various cleanups & reduced register usage.
- *  08-04-98   RMK     Shifts re-ordered
- */
-
-@ Regs: [] = corruptible
-@       {} = used
-@       () = do not use
-
-#include <linux/linkage.h>
-#include <asm/assembler.h>
-               .text
-
-#define BOLD            0x01
-#define ITALIC          0x02
-#define UNDERLINE       0x04
-#define FLASH           0x08
-#define INVERSE         0x10
-
-LC0:           .word   bytes_per_char_h
-               .word   video_size_row
-               .word   acorndata_8x8
-               .word   con_charconvtable
-
-ENTRY(ll_write_char)
-               stmfd   sp!, {r4 - r7, lr}
-@
-@ Smashable regs: {r0 - r3}, [r4 - r7], (r8 - fp), [ip], (sp), [lr], (pc)
-@
-               eor     ip, r1, #UNDERLINE << 9
-/*
- * calculate colours
- */
-               tst     r1, #INVERSE << 9
-               moveq   r2, r1, lsr #16
-               moveq   r3, r1, lsr #24
-               movne   r2, r1, lsr #24
-               movne   r3, r1, lsr #16
-               and     r3, r3, #255
-               and     r2, r2, #255
-/*
- * calculate offset into character table
- */
-               mov     r1, r1, lsl #23
-               mov     r1, r1, lsr #20
-/*
- * calculate offset required for each row [maybe I should make this an argument to this fn.
- * Have to see what the register usage is like in the calling routines.
- */
-               adr     r4, LC0
-               ldmia   r4, {r4, r5, r6, lr}
-               ldr     r4, [r4]
-               ldr     r5, [r5]
-/*
- * Go to resolution-dependent routine...
- */
-               cmp     r4, #4
-               blt     Lrow1bpp
-               eor     r2, r3, r2                      @ Create eor mask to change colour from bg
-               orr     r3, r3, r3, lsl #8              @ to fg.
-               orr     r3, r3, r3, lsl #16
-               add     r0, r0, r5, lsl #3              @ Move to bottom of character
-               add     r1, r1, #7
-               ldrb    r7, [r6, r1]
-               tst     ip, #UNDERLINE << 9
-               eoreq   r7, r7, #255
-               teq     r4, #8
-               beq     Lrow8bpplp
-@
-@ Smashable regs: {r0 - r3}, [r4], {r5 - r7}, (r8 - fp), [ip], (sp), {lr}, (pc)
-@
-               orr     r3, r3, r3, lsl #4
-Lrow4bpplp:    ldr     r7, [lr, r7, lsl #2]
-               mul     r7, r2, r7
-               tst     r1, #7                          @ avoid using r7 directly after
-               eor     ip, r3, r7
-               str     ip, [r0, -r5]!
-               LOADREGS(eqfd, sp!, {r4 - r7, pc})
-               sub     r1, r1, #1
-               ldrb    r7, [r6, r1]
-               ldr     r7, [lr, r7, lsl #2]
-               mul     r7, r2, r7
-               tst     r1, #7                          @ avoid using r7 directly after
-               eor     ip, r3, r7
-               str     ip, [r0, -r5]!
-               subne   r1, r1, #1
-               ldrneb  r7, [r6, r1]
-               bne     Lrow4bpplp
-               LOADREGS(fd, sp!, {r4 - r7, pc})
-
-@
-@ Smashable regs: {r0 - r3}, [r4], {r5 - r7}, (r8 - fp), [ip], (sp), {lr}, (pc)
-@
-Lrow8bpplp:    mov     ip, r7, lsr #4
-               ldr     ip, [lr, ip, lsl #2]
-               mul     r4, r2, ip
-               and     ip, r7, #15                     @ avoid r4
-               ldr     ip, [lr, ip, lsl #2]            @ avoid r4
-               mul     ip, r2, ip                      @ avoid r4
-               eor     r4, r3, r4                      @ avoid ip
-               tst     r1, #7                          @ avoid ip
-               sub     r0, r0, r5                      @ avoid ip
-               eor     ip, r3, ip
-               stmia   r0, {r4, ip}
-               LOADREGS(eqfd, sp!, {r4 - r7, pc})
-               sub     r1, r1, #1
-               ldrb    r7, [r6, r1]
-               mov     ip, r7, lsr #4
-               ldr     ip, [lr, ip, lsl #2]
-               mul     r4, r2, ip
-               and     ip, r7, #15                     @ avoid r4
-               ldr     ip, [lr, ip, lsl #2]            @ avoid r4
-               mul     ip, r2, ip                      @ avoid r4
-               eor     r4, r3, r4                      @ avoid ip
-               tst     r1, #7                          @ avoid ip
-               sub     r0, r0, r5                      @ avoid ip
-               eor     ip, r3, ip
-               stmia   r0, {r4, ip}
-               subne   r1, r1, #1
-               ldrneb  r7, [r6, r1]
-               bne     Lrow8bpplp
-               LOADREGS(fd, sp!, {r4 - r7, pc})
-
-@
-@ Smashable regs: {r0 - r3}, [r4], {r5, r6}, [r7], (r8 - fp), [ip], (sp), [lr], (pc)
-@
-Lrow1bpp:      add     r6, r6, r1
-               ldmia   r6, {r4, r7}
-               tst     ip, #INVERSE << 9
-               mvnne   r4, r4
-               mvnne   r7, r7
-               strb    r4, [r0], r5
-               mov     r4, r4, lsr #8
-               strb    r4, [r0], r5
-               mov     r4, r4, lsr #8
-               strb    r4, [r0], r5
-               mov     r4, r4, lsr #8
-               strb    r4, [r0], r5
-               strb    r7, [r0], r5
-               mov     r7, r7, lsr #8
-               strb    r7, [r0], r5
-               mov     r7, r7, lsr #8
-               strb    r7, [r0], r5
-               mov     r7, r7, lsr #8
-               tst     ip, #UNDERLINE << 9
-               mvneq   r7, r7
-               strb    r7, [r0], r5
-               LOADREGS(fd, sp!, {r4 - r7, pc})
-
-               .bss
-ENTRY(con_charconvtable)
-               .space  1024
diff --git a/arch/arm26/boot/compressed/misc.c b/arch/arm26/boot/compressed/misc.c
deleted file mode 100644 (file)
index 0714d19..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * misc.c
- * 
- * This is a collection of several routines from gzip-1.0.3 
- * adapted for Linux.
- *
- * malloc by Hannu Savolainen 1993 and Matthias Urlichs 1994
- *
- * Modified for ARM Linux by Russell King
- *
- * Nicolas Pitre <nico@visuaide.com>  1999/04/14 :
- *  For this code to run directly from Flash, all constant variables must
- *  be marked with 'const' and all other variables initialized at run-time 
- *  only.  This way all non constant variables will end up in the bss segment,
- *  which should point to addresses in RAM and cleared to 0 on start.
- *  This allows for a much quicker boot time.
- */
-
-unsigned int __machine_arch_type;
-
-#include <linux/kernel.h>
-
-#include <asm/uaccess.h>
-#include "uncompress.h"
-
-#ifdef STANDALONE_DEBUG
-#define puts printf
-#endif
-
-#define __ptr_t void *
-
-/*
- * Optimised C version of memzero for the ARM.
- */
-void __memzero (__ptr_t s, size_t n)
-{
-       union { void *vp; unsigned long *ulp; unsigned char *ucp; } u;
-       int i;
-
-       u.vp = s;
-
-       for (i = n >> 5; i > 0; i--) {
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-       }
-
-       if (n & 1 << 4) {
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-       }
-
-       if (n & 1 << 3) {
-               *u.ulp++ = 0;
-               *u.ulp++ = 0;
-       }
-
-       if (n & 1 << 2)
-               *u.ulp++ = 0;
-
-       if (n & 1 << 1) {
-               *u.ucp++ = 0;
-               *u.ucp++ = 0;
-       }
-
-       if (n & 1)
-               *u.ucp++ = 0;
-}
-
-static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,
-                           size_t __n)
-{
-       int i = 0;
-       unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
-
-       for (i = __n >> 3; i > 0; i--) {
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-       }
-
-       if (__n & 1 << 2) {
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-               *d++ = *s++;
-       }
-
-       if (__n & 1 << 1) {
-               *d++ = *s++;
-               *d++ = *s++;
-       }
-
-       if (__n & 1)
-               *d++ = *s++;
-
-       return __dest;
-}
-
-/*
- * gzip delarations
- */
-#define OF(args)  args
-#define STATIC static
-
-typedef unsigned char  uch;
-typedef unsigned short ush;
-typedef unsigned long  ulg;
-
-#define WSIZE 0x8000           /* Window size must be at least 32k, */
-                               /* and a power of two */
-
-static uch *inbuf;             /* input buffer */
-static uch window[WSIZE];      /* Sliding window buffer */
-
-static unsigned insize;                /* valid bytes in inbuf */
-static unsigned inptr;         /* index of next byte to be processed in inbuf */
-static unsigned outcnt;                /* bytes in output buffer */
-
-/* gzip flag byte */
-#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
-#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
-#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
-#define COMMENT      0x10 /* bit 4 set: file comment present */
-#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
-#define RESERVED     0xC0 /* bit 6,7:   reserved */
-
-#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
-
-/* Diagnostic functions */
-#ifdef DEBUG
-#  define Assert(cond,msg) {if(!(cond)) error(msg);}
-#  define Trace(x) fprintf x
-#  define Tracev(x) {if (verbose) fprintf x ;}
-#  define Tracevv(x) {if (verbose>1) fprintf x ;}
-#  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
-#  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
-#else
-#  define Assert(cond,msg)
-#  define Trace(x)
-#  define Tracev(x)
-#  define Tracevv(x)
-#  define Tracec(c,x)
-#  define Tracecv(c,x)
-#endif
-
-static int  fill_inbuf(void);
-static void flush_window(void);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-extern char input_data[];
-extern char input_data_end[];
-
-static uch *output_data;
-static ulg output_ptr;
-static ulg bytes_out;
-
-static void *malloc(int size);
-static void free(void *where);
-static void error(char *m);
-static void gzip_mark(void **);
-static void gzip_release(void **);
-
-static void puts(const char *);
-
-extern int end;
-static ulg free_mem_ptr;
-static ulg free_mem_ptr_end;
-
-#define HEAP_SIZE 0x3000
-
-#include "../../../../lib/inflate.c"
-
-#ifndef STANDALONE_DEBUG
-static void *malloc(int size)
-{
-       void *p;
-
-       if (size <0) error("Malloc error");
-       if (free_mem_ptr <= 0) error("Memory error");
-
-       free_mem_ptr = (free_mem_ptr + 3) & ~3; /* Align */
-
-       p = (void *)free_mem_ptr;
-       free_mem_ptr += size;
-
-       if (free_mem_ptr >= free_mem_ptr_end)
-               error("Out of memory");
-       return p;
-}
-
-static void free(void *where)
-{ /* gzip_mark & gzip_release do the free */
-}
-
-static void gzip_mark(void **ptr)
-{
-       arch_decomp_wdog();
-       *ptr = (void *) free_mem_ptr;
-}
-
-static void gzip_release(void **ptr)
-{
-       arch_decomp_wdog();
-       free_mem_ptr = (long) *ptr;
-}
-#else
-static void gzip_mark(void **ptr)
-{
-}
-
-static void gzip_release(void **ptr)
-{
-}
-#endif
-
-/* ===========================================================================
- * Fill the input buffer. This is called only when the buffer is empty
- * and at least one byte is really needed.
- */
-int fill_inbuf(void)
-{
-       if (insize != 0)
-               error("ran out of input data");
-
-       inbuf = input_data;
-       insize = &input_data_end[0] - &input_data[0];
-
-       inptr = 1;
-       return inbuf[0];
-}
-
-/* ===========================================================================
- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
- * (Used for the decompressed data only.)
- */
-void flush_window(void)
-{
-       ulg c = crc;
-       unsigned n;
-       uch *in, *out, ch;
-
-       in = window;
-       out = &output_data[output_ptr];
-       for (n = 0; n < outcnt; n++) {
-               ch = *out++ = *in++;
-               c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
-       }
-       crc = c;
-       bytes_out += (ulg)outcnt;
-       output_ptr += (ulg)outcnt;
-       outcnt = 0;
-       puts(".");
-}
-
-static void error(char *x)
-{
-       int ptr;
-
-       puts("\n\n");
-       puts(x);
-       puts("\n\n -- System halted");
-
-       while(1);       /* Halt */
-}
-
-#ifndef STANDALONE_DEBUG
-
-ulg
-decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
-                 int arch_id)
-{
-       output_data             = (uch *)output_start;  /* Points to kernel start */
-       free_mem_ptr            = free_mem_ptr_p;
-       free_mem_ptr_end        = free_mem_ptr_end_p;
-       __machine_arch_type     = arch_id;
-
-       arch_decomp_setup();
-
-       makecrc();
-       puts("Uncompressing Linux...");
-       gunzip();
-       puts(" done, booting the kernel.\n");
-       return output_ptr;
-}
-#else
-
-char output_buffer[1500*1024];
-
-int main()
-{
-       output_data = output_buffer;
-
-       makecrc();
-       puts("Uncompressing Linux...");
-       gunzip();
-       puts("done.\n");
-       return 0;
-}
-#endif
-       
diff --git a/arch/arm26/boot/compressed/uncompress.h b/arch/arm26/boot/compressed/uncompress.h
deleted file mode 100644 (file)
index 66d9b93..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- *
- *  Copyright (C) 1996 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#define VIDMEM ((char *)0x02000000)
-int video_num_columns, video_num_lines, video_size_row;
-int white, bytes_per_char_h;
-extern unsigned long con_charconvtable[256];
-
-struct param_struct {
-       unsigned long page_size;
-       unsigned long nr_pages;
-       unsigned long ramdisk_size;
-       unsigned long mountrootrdonly;
-       unsigned long rootdev;
-       unsigned long video_num_cols;
-       unsigned long video_num_rows;
-       unsigned long video_x;
-       unsigned long video_y;
-       unsigned long memc_control_reg;
-       unsigned char sounddefault;
-       unsigned char adfsdrives;
-       unsigned char bytes_per_char_h;
-       unsigned char bytes_per_char_v;
-       unsigned long unused[256/4-11];
-};
-
-static struct param_struct *params = (struct param_struct *)0x0207c000;
-/*
- * This does not append a newline
- */
-static void puts(const char *s)
-{
-       extern void ll_write_char(char *, unsigned long);
-       int x,y;
-       unsigned char c;
-       char *ptr;
-
-       x = params->video_x;
-       y = params->video_y;
-
-       while ( ( c = *(unsigned char *)s++ ) != '\0' ) {
-               if ( c == '\n' ) {
-                       x = 0;
-                       if ( ++y >= video_num_lines ) {
-                               y--;
-                       }
-               } else {
-                       ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h);
-                       ll_write_char(ptr, c|(white<<16));
-                       if ( ++x >= video_num_columns ) {
-                               x = 0;
-                               if ( ++y >= video_num_lines ) {
-                                       y--;
-                               }
-                       }
-               }
-       }
-
-       params->video_x = x;
-       params->video_y = y;
-}
-
-static void error(char *x);
-
-/*
- * Setup for decompression
- */
-static void arch_decomp_setup(void)
-{
-       int i;
-       
-       video_num_lines = params->video_num_rows;
-       video_num_columns = params->video_num_cols;
-       bytes_per_char_h = params->bytes_per_char_h;
-       video_size_row = video_num_columns * bytes_per_char_h;
-       if (bytes_per_char_h == 4)
-               for (i = 0; i < 256; i++)
-                       con_charconvtable[i] =
-                               (i & 128 ? 1 << 0  : 0) |
-                               (i & 64  ? 1 << 4  : 0) |
-                               (i & 32  ? 1 << 8  : 0) |
-                               (i & 16  ? 1 << 12 : 0) |
-                               (i & 8   ? 1 << 16 : 0) |
-                               (i & 4   ? 1 << 20 : 0) |
-                               (i & 2   ? 1 << 24 : 0) |
-                               (i & 1   ? 1 << 28 : 0);
-       else
-               for (i = 0; i < 16; i++)
-                       con_charconvtable[i] =
-                               (i & 8   ? 1 << 0  : 0) |
-                               (i & 4   ? 1 << 8  : 0) |
-                               (i & 2   ? 1 << 16 : 0) |
-                               (i & 1   ? 1 << 24 : 0);
-
-       white = bytes_per_char_h == 8 ? 0xfc : 7;
-
-       if (params->nr_pages * params->page_size < 4096*1024) error("<4M of mem\n");
-}
-
-/*
- * nothing to do
- */
-#define arch_decomp_wdog()
diff --git a/arch/arm26/boot/compressed/vmlinux.lds.in b/arch/arm26/boot/compressed/vmlinux.lds.in
deleted file mode 100644 (file)
index 86d821d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  linux/arch/arm26/boot/compressed/vmlinux.lds.in
- *
- *  Copyright (C) 2000 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-SECTIONS
-{
-  . = LOAD_ADDR;
-  _load_addr = .;
-
-  . = TEXT_START;
-  _text = .;
-
-  .text : {
-    _start = .;
-    *(.start)
-    *(.text)
-    *(.fixup)
-    *(.gnu.warning)
-    *(.rodata)
-    *(.rodata.*)
-    *(.glue_7)
-    *(.glue_7t)
-    input_data = .;
-    arch/arm26/boot/compressed/piggy.o
-    input_data_end = .;
-    . = ALIGN(4);
-  }
-
-  _etext = .;
-
-  _got_start = .;
-  .got                 : { *(.got) }
-  _got_end = .;
-  .got.plt             : { *(.got.plt) }
-  .data                        : { *(.data) }
-  _edata = .;
-
-  . = BSS_START;
-  __bss_start = .;
-  .bss                 : { *(.bss) }
-  _end = .;
-
-  .stack (NOLOAD)      : { *(.stack) }
-
-  .stab 0              : { *(.stab) }
-  .stabstr 0           : { *(.stabstr) }
-  .stab.excl 0         : { *(.stab.excl) }
-  .stab.exclstr 0      : { *(.stab.exclstr) }
-  .stab.index 0                : { *(.stab.index) }
-  .stab.indexstr 0     : { *(.stab.indexstr) }
-  .comment 0           : { *(.comment) }
-}
-
diff --git a/arch/arm26/boot/install.sh b/arch/arm26/boot/install.sh
deleted file mode 100644 (file)
index 8a8399b..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-#
-# arch/arm26/boot/install.sh
-#
-# This file is subject to the terms and conditions of the GNU General Public
-# License.  See the file "COPYING" in the main directory of this archive
-# for more details.
-#
-# Copyright (C) 1995 by Linus Torvalds
-#
-# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
-# Adapted from code in arch/i386/boot/install.sh by Russell King
-# Stolen from arm32 by Ian Molton
-#
-# "make install" script for arm architecture
-#
-# Arguments:
-#   $1 - kernel version
-#   $2 - kernel image file
-#   $3 - kernel map file
-#   $4 - default install path (blank if root directory)
-#
-
-# User may have a custom install script
-
-if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then
-  exec /sbin/${CROSS_COMPILE}installkernel "$@"
-fi
-
-if [ "$2" = "zImage" ]; then
-# Compressed install
-  echo "Installing compressed kernel"
-  if [ -f $4/vmlinuz-$1 ]; then
-    mv $4/vmlinuz-$1 $4/vmlinuz.old
-  fi
-
-  if [ -f $4/System.map-$1 ]; then
-    mv $4/System.map-$1 $4/System.old
-  fi
-
-  cat $2 > $4/vmlinuz-$1
-  cp $3 $4/System.map-$1
-else
-# Normal install
-  echo "Installing normal kernel"
-  if [ -f $4/vmlinux-$1 ]; then
-    mv $4/vmlinux-$1 $4/vmlinux.old
-  fi
-
-  if [ -f $4/System.map ]; then
-    mv $4/System.map $4/System.old
-  fi
-
-  cat $2 > $4/vmlinux-$1
-  cp $3 $4/System.map
-fi
-
-if [ -x /sbin/loadmap ]; then
-  /sbin/loadmap --rdev /dev/ima
-else
-  echo "You have to install it yourself"
-fi
diff --git a/arch/arm26/defconfig b/arch/arm26/defconfig
deleted file mode 100644 (file)
index 2b7d44b..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-#
-# Automatically generated by make menuconfig: don't edit
-#
-CONFIG_ARM=y
-# CONFIG_EISA is not set
-# CONFIG_SBUS is not set
-# CONFIG_MCA is not set
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
-# CONFIG_GENERIC_BUST_SPINLOCK is not set
-# CONFIG_GENERIC_ISA_DMA is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-
-#
-# General setup
-#
-# CONFIG_NET is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_SYSCTL is not set
-
-#
-# Loadable module support
-#
-# CONFIG_MODULES is not set
-
-#
-# System Type
-#
-CONFIG_ARCH_ARC=y
-# CONFIG_ARCH_A5K is not set
-CONFIG_ARCH_ACORN=y
-# CONFIG_CPU_32 is not set
-CONFIG_CPU_26=y
-# CONFIG_PAGESIZE_16 is not set
-
-#
-# General setup
-#
-CONFIG_FIQ=y
-# CONFIG_ZBOOT_ROM is not set
-CONFIG_ZBOOT_ROM_TEXT=0
-CONFIG_ZBOOT_ROM_BSS=0
-CONFIG_FPE_NWFPE=y
-CONFIG_KCORE_ELF=y
-# CONFIG_KCORE_AOUT is not set
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_ELF is not set
-# CONFIG_BINFMT_MISC is not set
-CONFIG_CMDLINE=""
-# CONFIG_ALIGNMENT_TRAP is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play configuration
-#
-# CONFIG_PNP is not set
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_CISS_SCSI_TAPE is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_MD_RAID1 is not set
-# CONFIG_MD_RAID5 is not set
-# CONFIG_MD_MULTIPATH is not set
-# CONFIG_BLK_DEV_LVM is not set
-
-#
-# Acorn-specific block devices
-#
-# CONFIG_BLK_DEV_FD1772 is not set
-# CONFIG_BLK_DEV_MFM is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI support
-#
-# CONFIG_SCSI is not set
-
-#
-# ISDN subsystem
-#
-
-#
-# Input device support
-#
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_KEYBDEV is not set
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_TSLIBDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-# CONFIG_GAMEPORT_NS558 is not set
-# CONFIG_GAMEPORT_L4 is not set
-# CONFIG_GAMEPORT_EMU10K1 is not set
-# CONFIG_GAMEPORT_VORTEX is not set
-# CONFIG_GAMEPORT_FM801 is not set
-# CONFIG_GAMEPORT_CS461x is not set
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_ACORN is not set
-
-#
-# Character devices
-#
-# CONFIG_VT is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-# CONFIG_SERIAL_8250_CONSOLE is not set
-# CONFIG_SERIAL_8250_CS is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_SHARE_IRQ is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-# CONFIG_SERIAL_8250_MULTIPORT is not set
-# CONFIG_SERIAL_8250_RSA is not set
-# CONFIG_ATOMWIDE_SERIAL is not set
-# CONFIG_DUALSP_SERIAL is not set
-# CONFIG_SERIAL_AMBA is not set
-# CONFIG_SERIAL_AMBA_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X is not set
-# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
-# CONFIG_SERIAL_CLPS711X_OLD_NAME is not set
-# CONFIG_SERIAL_21285 is not set
-# CONFIG_SERIAL_21285_OLD is not set
-# CONFIG_SERIAL_21285_CONSOLE is not set
-# CONFIG_SERIAL_UART00 is not set
-# CONFIG_SERIAL_UART00_CONSOLE is not set
-# CONFIG_SERIAL_SA1100 is not set
-# CONFIG_SERIAL_SA1100_CONSOLE is not set
-# CONFIG_UNIX98_PTYS is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_ALGOBIT=y
-CONFIG_I2C_ALGOPCF=y
-# CONFIG_I2C_ELEKTOR is not set
-CONFIG_I2C_CHARDEV=y
-# CONFIG_I2C_PROC is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-# CONFIG_L3_ALGOBIT is not set
-# CONFIG_L3_BIT_SA1100_GPIO is not set
-# CONFIG_L3_SA1111 is not set
-# CONFIG_BIT_SA1100_GPIO is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-# CONFIG_PSMOUSE is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# File systems
-#
-# CONFIG_QUOTA is not set
-# CONFIG_QFMT_V1 is not set
-# CONFIG_QFMT_V2 is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADFS_FS_RW is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_FAT_FS is not set
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_TMPFS is not set
-CONFIG_RAMFS=y
-# CONFIG_ISO9660_FS is not set
-# CONFIG_JOLIET is not set
-# CONFIG_ZISOFS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_HPFS_FS is not set
-CONFIG_PROC_FS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVFS_MOUNT is not set
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_EXT2_FS=y
-# CONFIG_SYSV_FS is not set
-# CONFIG_UDF_FS is not set
-# CONFIG_UDF_RW is not set
-# CONFIG_UFS_FS is not set
-# CONFIG_UFS_FS_WRITE is not set
-# CONFIG_NCPFS_NLS is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_ZISOFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_ACORN_PARTITION=y
-# CONFIG_ACORN_PARTITION_EESOX is not set
-# CONFIG_ACORN_PARTITION_ICS is not set
-CONFIG_ACORN_PARTITION_ADFS=y
-# CONFIG_ACORN_PARTITION_POWERTEC is not set
-CONFIG_ACORN_PARTITION_RISCIX=y
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MSDOS_PARTITION is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SMB_NLS is not set
-# CONFIG_NLS is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP is not set
-# CONFIG_MCP_SA1100 is not set
-# CONFIG_MCP_UCB1200 is not set
-# CONFIG_MCP_UCB1200_AUDIO is not set
-# CONFIG_MCP_UCB1200_TS is not set
-
-#
-# Console Switches
-#
-# CONFIG_SWITCHES is not set
-# CONFIG_SWITCHES_SA1100 is not set
-# CONFIG_SWITCHES_UCB1X00 is not set
-
-#
-# USB support
-#
-# CONFIG_USB is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_NO_FRAME_POINTER is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_INFO=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_DEBUG_SLAB=y
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_SPINLOCK=y
-CONFIG_DEBUG_WAITQ=y
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-
-#
-# Security options
-#
-CONFIG_SECURITY_CAPABILITIES=y
-
-#
-# Library routines
-#
-CONFIG_CRC32=y
-# CONFIG_ZLIB_INFLATE is not set
-# CONFIG_ZLIB_DEFLATE is not set
diff --git a/arch/arm26/kernel/Makefile b/arch/arm26/kernel/Makefile
deleted file mode 100644 (file)
index ee9fb49..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Makefile for the linux kernel.
-#
-
-# Object file lists.
-
-AFLAGS_head.o           := -DTEXTADDR=$(TEXTADDR)
-
-obj-y          := compat.o dma.o entry.o irq.o process.o ptrace.o       \
-                  semaphore.o setup.o signal.o sys_arm.o time.o traps.o \
-                  ecard.o dma.o ecard.o fiq.o time.o
-
-extra-y                := head.o init_task.o vmlinux.lds
-
-obj-$(CONFIG_FIQ)              += fiq.o
-obj-$(CONFIG_MODULES)          += armksyms.o
-
diff --git a/arch/arm26/kernel/armksyms.c b/arch/arm26/kernel/armksyms.c
deleted file mode 100644 (file)
index fe1e3ce..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/armksyms.c
- *
- *  Copyright (C) 2003 Ian Molton
- *
- * 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.
- */
-#include <linux/module.h>
-#include <linux/module.h>
-#include <linux/user.h>
-#include <linux/string.h>
-#include <linux/fs.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/delay.h>
-#include <linux/in6.h>
-#include <linux/interrupt.h>
-#include <linux/pm.h>
-#include <linux/tty.h>
-#include <linux/vt_kern.h>
-#include <linux/syscalls.h>
-
-#include <asm/byteorder.h>
-#include <asm/elf.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/processor.h>
-#include <asm/semaphore.h>
-#include <asm/system.h>
-#include <asm/uaccess.h>
-#include <asm/checksum.h>
-#include <asm/mach-types.h>
-
-extern int dump_fpu(struct pt_regs *, struct user_fp_struct *);
-extern void inswb(unsigned int port, void *to, int len);
-extern void outswb(unsigned int port, const void *to, int len);
-
-extern void __bad_xchg(volatile void *ptr, int size);
-
-/*
- * libgcc functions - functions that are used internally by the
- * compiler...  (prototypes are not correct though, but that
- * doesn't really matter since they're not versioned).
- */
-extern void __ashldi3(void);
-extern void __ashrdi3(void);
-extern void __divsi3(void);
-extern void __lshrdi3(void);
-extern void __modsi3(void);
-extern void __muldi3(void);
-extern void __ucmpdi2(void);
-extern void __udivdi3(void);
-extern void __umoddi3(void);
-extern void __udivmoddi4(void);
-extern void __udivsi3(void);
-extern void __umodsi3(void);
-extern void abort(void);
-
-extern void ret_from_exception(void);
-extern void fpundefinstr(void);
-extern void fp_enter(void);
-
-/*
- * This has a special calling convention; it doesn't
- * modify any of the usual registers, except for LR.
- * FIXME - we used to use our own local version - looks to be in kernel/softirq now
- */
-//extern void __do_softirq(void);
-
-#define EXPORT_SYMBOL_ALIAS(sym,orig)          \
- const char __kstrtab_##sym[]                  \
-  __attribute__((section(".kstrtab"))) =       \
-    __MODULE_STRING(sym);                      \
- const struct module_symbol __ksymtab_##sym    \
-  __attribute__((section("__ksymtab"))) =      \
-    { (unsigned long)&orig, __kstrtab_##sym };
-
-/*
- * floating point math emulator support.
- * These symbols will never change their calling convention...
- */
-EXPORT_SYMBOL_ALIAS(kern_fp_enter,fp_enter);
-EXPORT_SYMBOL_ALIAS(fp_printk,printk);
-EXPORT_SYMBOL_ALIAS(fp_send_sig,send_sig);
-
-EXPORT_SYMBOL(fpundefinstr);
-EXPORT_SYMBOL(ret_from_exception);
-
-#ifdef CONFIG_VT
-EXPORT_SYMBOL(kd_mksound);
-#endif
-
-//EXPORT_SYMBOL(__do_softirq);
-
-       /* platform dependent support */
-EXPORT_SYMBOL(dump_thread);
-EXPORT_SYMBOL(dump_fpu);
-EXPORT_SYMBOL(udelay);
-EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(system_rev);
-EXPORT_SYMBOL(system_serial_low);
-EXPORT_SYMBOL(system_serial_high);
-#ifdef CONFIG_DEBUG_BUGVERBOSE
-EXPORT_SYMBOL(__bug);
-#endif
-EXPORT_SYMBOL(__bad_xchg);
-EXPORT_SYMBOL(__readwrite_bug);
-EXPORT_SYMBOL(set_irq_type);
-EXPORT_SYMBOL(pm_idle);
-EXPORT_SYMBOL(pm_power_off);
-
-       /* processor dependencies */
-EXPORT_SYMBOL(__machine_arch_type);
-
-       /* networking */
-EXPORT_SYMBOL(csum_partial_copy_nocheck);
-EXPORT_SYMBOL(__csum_ipv6_magic);
-
-       /* io */
-#ifndef __raw_readsb
-EXPORT_SYMBOL(__raw_readsb);
-#endif
-#ifndef __raw_readsw
-EXPORT_SYMBOL(__raw_readsw);
-#endif
-#ifndef __raw_readsl
-EXPORT_SYMBOL(__raw_readsl);
-#endif
-#ifndef __raw_writesb
-EXPORT_SYMBOL(__raw_writesb);
-#endif
-#ifndef __raw_writesw
-EXPORT_SYMBOL(__raw_writesw);
-#endif
-#ifndef __raw_writesl
-EXPORT_SYMBOL(__raw_writesl);
-#endif
-
-       /* string / mem functions */
-EXPORT_SYMBOL(strcpy);
-EXPORT_SYMBOL(strncpy);
-EXPORT_SYMBOL(strcat);
-EXPORT_SYMBOL(strncat);
-EXPORT_SYMBOL(strcmp);
-EXPORT_SYMBOL(strncmp);
-EXPORT_SYMBOL(strchr);
-EXPORT_SYMBOL(strlen);
-EXPORT_SYMBOL(strnlen);
-EXPORT_SYMBOL(strrchr);
-EXPORT_SYMBOL(strstr);
-EXPORT_SYMBOL(memset);
-EXPORT_SYMBOL(memcpy);
-EXPORT_SYMBOL(memmove);
-EXPORT_SYMBOL(memcmp);
-EXPORT_SYMBOL(memscan);
-EXPORT_SYMBOL(__memzero);
-
-       /* user mem (segment) */
-EXPORT_SYMBOL(uaccess_kernel);
-EXPORT_SYMBOL(uaccess_user);
-
-EXPORT_SYMBOL(__get_user_1);
-EXPORT_SYMBOL(__get_user_2);
-EXPORT_SYMBOL(__get_user_4);
-EXPORT_SYMBOL(__get_user_8);
-
-EXPORT_SYMBOL(__put_user_1);
-EXPORT_SYMBOL(__put_user_2);
-EXPORT_SYMBOL(__put_user_4);
-EXPORT_SYMBOL(__put_user_8);
-
-       /* gcc lib functions */
-EXPORT_SYMBOL(__ashldi3);
-EXPORT_SYMBOL(__ashrdi3);
-EXPORT_SYMBOL(__divsi3);
-EXPORT_SYMBOL(__lshrdi3);
-EXPORT_SYMBOL(__modsi3);
-EXPORT_SYMBOL(__muldi3);
-EXPORT_SYMBOL(__ucmpdi2);
-EXPORT_SYMBOL(__udivdi3);
-EXPORT_SYMBOL(__umoddi3);
-EXPORT_SYMBOL(__udivmoddi4);
-EXPORT_SYMBOL(__udivsi3);
-EXPORT_SYMBOL(__umodsi3);
-
-       /* bitops */
-EXPORT_SYMBOL(_set_bit_le);
-EXPORT_SYMBOL(_test_and_set_bit_le);
-EXPORT_SYMBOL(_clear_bit_le);
-EXPORT_SYMBOL(_test_and_clear_bit_le);
-EXPORT_SYMBOL(_change_bit_le);
-EXPORT_SYMBOL(_test_and_change_bit_le);
-EXPORT_SYMBOL(_find_first_zero_bit_le);
-EXPORT_SYMBOL(_find_next_zero_bit_le);
-
-       /* elf */
-EXPORT_SYMBOL(elf_platform);
-EXPORT_SYMBOL(elf_hwcap);
-
-#ifdef CONFIG_PREEMPT
-EXPORT_SYMBOL(kernel_flag);
-#endif
diff --git a/arch/arm26/kernel/asm-offsets.c b/arch/arm26/kernel/asm-offsets.c
deleted file mode 100644 (file)
index 76d9d7d..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 1995-2001 Russell King
- *               2001-2002 Keith Owens
- *               2003      Ian Molton
- *     
- * Generate definitions needed by assembly language modules.
- * This code generates raw asm output which is post-processed to extract
- * and format the required data.
- *
- * 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.
- */
-
-#include <linux/sched.h>
-#include <linux/mm.h>
-
-#include <asm/pgtable.h>
-#include <asm/uaccess.h>
-
-/*
- * Make sure that the compiler and target are compatible.
- */
-#if defined(__APCS_32__) && defined(CONFIG_CPU_26)
-#error Sorry, your compiler targets APCS-32 but this kernel requires APCS-26
-#endif
-
-/* Use marker if you need to separate the values later */
-
-#define DEFINE(sym, val) \
-        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
-
-#define BLANK() asm volatile("\n->" : : )
-
-int main(void)
-{
-  DEFINE(TSK_ACTIVE_MM,                offsetof(struct task_struct, active_mm));
-  BLANK();
-  DEFINE(VMA_VM_MM,            offsetof(struct vm_area_struct, vm_mm));
-  DEFINE(VMA_VM_FLAGS,         offsetof(struct vm_area_struct, vm_flags));
-  BLANK();
-  DEFINE(VM_EXEC,              VM_EXEC);
-  BLANK();
-  BLANK();
-  DEFINE(PAGE_PRESENT,         _PAGE_PRESENT);
-  DEFINE(PAGE_READONLY,                _PAGE_READONLY);
-  DEFINE(PAGE_NOT_USER,                _PAGE_NOT_USER);
-  DEFINE(PAGE_OLD,             _PAGE_OLD);
-  DEFINE(PAGE_CLEAN,           _PAGE_CLEAN);
-  BLANK();
-  DEFINE(PAGE_SZ,              PAGE_SIZE);
-  BLANK();
-  DEFINE(SYS_ERROR0,           0x9f0000);
-  return 0; 
-}
diff --git a/arch/arm26/kernel/calls.S b/arch/arm26/kernel/calls.S
deleted file mode 100644 (file)
index e3d2768..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/calls.S
- *
- *  Copyright (C) 2003 Ian Molton
- *
- * 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.
- *
- *  FIXME
- *  This file is included twice in entry.S which may not be necessary
- */
-
-//FIXME - clearly NR_syscalls is never defined here
-
-#ifndef NR_syscalls
-#define NR_syscalls 256
-#else
-
-__syscall_start:
-/* 0 */                .long   sys_ni_syscall
-               .long   sys_exit
-               .long   sys_fork_wrapper
-               .long   sys_read
-               .long   sys_write
-/* 5 */                .long   sys_open
-               .long   sys_close
-               .long   sys_ni_syscall          /* was sys_waitpid */
-               .long   sys_creat
-               .long   sys_link
-/* 10 */       .long   sys_unlink
-               .long   sys_execve_wrapper
-               .long   sys_chdir
-               .long   sys_time                /* used by libc4 */
-               .long   sys_mknod
-/* 15 */       .long   sys_chmod
-               .long   sys_lchown16
-               .long   sys_ni_syscall          /* was sys_break */
-               .long   sys_ni_syscall          /* was sys_stat */
-               .long   sys_lseek
-/* 20 */       .long   sys_getpid
-               .long   sys_mount
-               .long   sys_oldumount           /* used by libc4 */
-               .long   sys_setuid16
-               .long   sys_getuid16
-/* 25 */       .long   sys_stime
-               .long   sys_ptrace
-               .long   sys_alarm               /* used by libc4 */
-               .long   sys_ni_syscall          /* was sys_fstat */
-               .long   sys_pause
-/* 30 */       .long   sys_utime               /* used by libc4 */
-               .long   sys_ni_syscall          /* was sys_stty */
-               .long   sys_ni_syscall          /* was sys_getty */
-               .long   sys_access
-               .long   sys_nice
-/* 35 */       .long   sys_ni_syscall          /* was sys_ftime */
-               .long   sys_sync
-               .long   sys_kill
-               .long   sys_rename
-               .long   sys_mkdir
-/* 40 */       .long   sys_rmdir
-               .long   sys_dup
-               .long   sys_pipe
-               .long   sys_times
-               .long   sys_ni_syscall          /* was sys_prof */
-/* 45 */       .long   sys_brk
-               .long   sys_setgid16
-               .long   sys_getgid16
-               .long   sys_ni_syscall          /* was sys_signal */
-               .long   sys_geteuid16
-/* 50 */       .long   sys_getegid16
-               .long   sys_acct
-               .long   sys_umount
-               .long   sys_ni_syscall          /* was sys_lock */
-               .long   sys_ioctl
-/* 55 */       .long   sys_fcntl
-               .long   sys_ni_syscall          /* was sys_mpx */
-               .long   sys_setpgid
-               .long   sys_ni_syscall          /* was sys_ulimit */
-               .long   sys_ni_syscall          /* was sys_olduname */
-/* 60 */       .long   sys_umask
-               .long   sys_chroot
-               .long   sys_ustat
-               .long   sys_dup2
-               .long   sys_getppid
-/* 65 */       .long   sys_getpgrp
-               .long   sys_setsid
-               .long   sys_sigaction
-               .long   sys_ni_syscall          /* was sys_sgetmask */
-               .long   sys_ni_syscall          /* was sys_ssetmask */
-/* 70 */       .long   sys_setreuid16
-               .long   sys_setregid16
-               .long   sys_sigsuspend_wrapper
-               .long   sys_sigpending
-               .long   sys_sethostname
-/* 75 */       .long   sys_setrlimit
-               .long   sys_old_getrlimit       /* used by libc4 */
-               .long   sys_getrusage
-               .long   sys_gettimeofday
-               .long   sys_settimeofday
-/* 80 */       .long   sys_getgroups16
-               .long   sys_setgroups16
-               .long   old_select              /* used by libc4 */
-               .long   sys_symlink
-               .long   sys_ni_syscall          /* was sys_lstat */
-/* 85 */       .long   sys_readlink
-               .long   sys_uselib
-               .long   sys_swapon
-               .long   sys_reboot
-               .long   old_readdir             /* used by libc4 */
-/* 90 */       .long   old_mmap                /* used by libc4 */
-               .long   sys_munmap
-               .long   sys_truncate
-               .long   sys_ftruncate
-               .long   sys_fchmod
-/* 95 */       .long   sys_fchown16
-               .long   sys_getpriority
-               .long   sys_setpriority
-               .long   sys_ni_syscall          /* was sys_profil */
-               .long   sys_statfs
-/* 100 */      .long   sys_fstatfs
-               .long   sys_ni_syscall
-               .long   sys_socketcall
-               .long   sys_syslog
-               .long   sys_setitimer
-/* 105 */      .long   sys_getitimer
-               .long   sys_newstat
-               .long   sys_newlstat
-               .long   sys_newfstat
-               .long   sys_ni_syscall          /* was sys_uname */
-/* 110 */      .long   sys_ni_syscall          /* was sys_iopl */
-               .long   sys_vhangup
-               .long   sys_ni_syscall
-               .long   sys_syscall             /* call a syscall */
-               .long   sys_wait4
-/* 115 */      .long   sys_swapoff
-               .long   sys_sysinfo
-               .long   sys_ipc
-               .long   sys_fsync
-               .long   sys_sigreturn_wrapper
-/* 120 */      .long   sys_clone_wapper
-               .long   sys_setdomainname
-               .long   sys_newuname
-               .long   sys_ni_syscall
-               .long   sys_adjtimex
-/* 125 */      .long   sys_mprotect
-               .long   sys_sigprocmask
-               .long   sys_ni_syscall  /* WAS: sys_create_module */
-               .long   sys_init_module
-               .long   sys_delete_module
-/* 130 */      .long   sys_ni_syscall  /* WAS: sys_get_kernel_syms */
-               .long   sys_quotactl
-               .long   sys_getpgid
-               .long   sys_fchdir
-               .long   sys_bdflush
-/* 135 */      .long   sys_sysfs
-               .long   sys_personality
-               .long   sys_ni_syscall          /* .long        _sys_afs_syscall */
-               .long   sys_setfsuid16
-               .long   sys_setfsgid16
-/* 140 */      .long   sys_llseek
-               .long   sys_getdents
-               .long   sys_select
-               .long   sys_flock
-               .long   sys_msync
-/* 145 */      .long   sys_readv
-               .long   sys_writev
-               .long   sys_getsid
-               .long   sys_fdatasync
-               .long   sys_sysctl
-/* 150 */      .long   sys_mlock
-               .long   sys_munlock
-               .long   sys_mlockall
-               .long   sys_munlockall
-               .long   sys_sched_setparam
-/* 155 */      .long   sys_sched_getparam
-               .long   sys_sched_setscheduler
-               .long   sys_sched_getscheduler
-               .long   sys_sched_yield
-               .long   sys_sched_get_priority_max
-/* 160 */      .long   sys_sched_get_priority_min
-               .long   sys_sched_rr_get_interval
-               .long   sys_nanosleep
-               .long   sys_arm_mremap
-               .long   sys_setresuid16
-/* 165 */      .long   sys_getresuid16
-               .long   sys_ni_syscall
-               .long   sys_ni_syscall /* WAS: sys_query_module */
-               .long   sys_poll
-               .long   sys_nfsservctl
-/* 170 */      .long   sys_setresgid16
-               .long   sys_getresgid16
-               .long   sys_prctl
-               .long   sys_rt_sigreturn_wrapper
-               .long   sys_rt_sigaction
-/* 175 */      .long   sys_rt_sigprocmask
-               .long   sys_rt_sigpending
-               .long   sys_rt_sigtimedwait
-               .long   sys_rt_sigqueueinfo
-               .long   sys_rt_sigsuspend_wrapper
-/* 180 */      .long   sys_pread64
-               .long   sys_pwrite64
-               .long   sys_chown16
-               .long   sys_getcwd
-               .long   sys_capget
-/* 185 */      .long   sys_capset
-               .long   sys_sigaltstack_wrapper
-               .long   sys_sendfile
-               .long   sys_ni_syscall
-               .long   sys_ni_syscall
-/* 190 */      .long   sys_vfork_wrapper
-               .long   sys_getrlimit
-               .long   sys_mmap2
-               .long   sys_truncate64
-               .long   sys_ftruncate64
-/* 195 */      .long   sys_stat64
-               .long   sys_lstat64
-               .long   sys_fstat64
-               .long   sys_lchown
-               .long   sys_getuid
-/* 200 */      .long   sys_getgid
-               .long   sys_geteuid
-               .long   sys_getegid
-               .long   sys_setreuid
-               .long   sys_setregid
-/* 205 */      .long   sys_getgroups
-               .long   sys_setgroups
-               .long   sys_fchown
-               .long   sys_setresuid
-               .long   sys_getresuid
-/* 210 */      .long   sys_setresgid
-               .long   sys_getresgid
-               .long   sys_chown
-               .long   sys_setuid
-               .long   sys_setgid
-/* 215 */      .long   sys_setfsuid
-               .long   sys_setfsgid
-               .long   sys_getdents64
-               .long   sys_pivot_root
-               .long   sys_mincore
-/* 220 */      .long   sys_madvise
-               .long   sys_fcntl64
-               .long   sys_ni_syscall /* TUX */
-               .long   sys_ni_syscall /* WAS: sys_security */
-               .long   sys_gettid
-/* 225 */      .long   sys_readahead
-               .long   sys_setxattr
-               .long   sys_lsetxattr
-               .long   sys_fsetxattr
-               .long   sys_getxattr
-/* 230 */      .long   sys_lgetxattr
-               .long   sys_fgetxattr
-               .long   sys_listxattr
-               .long   sys_llistxattr
-               .long   sys_flistxattr
-/* 235 */      .long   sys_removexattr
-               .long   sys_lremovexattr
-               .long   sys_fremovexattr
-               .long   sys_tkill
-__syscall_end:
-
-               .rept   NR_syscalls - (__syscall_end - __syscall_start) / 4
-                       .long   sys_ni_syscall
-               .endr
-#endif
diff --git a/arch/arm26/kernel/compat.c b/arch/arm26/kernel/compat.c
deleted file mode 100644 (file)
index 21e966f..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/compat.c
- *
- *  Copyright (C) 2001 Russell King
- *                2003 Ian Molton
- *
- * 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.
- *
- * We keep the old params compatibility cruft in one place (here)
- * so we don't end up with lots of mess around other places.
- *
- * NOTE:
- *  The old struct param_struct is deprecated, but it will be kept in
- *  the kernel for 5 years from now (2001). This will allow boot loaders
- *  to convert to the new struct tag way.
- */
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/init.h>
-
-#include <asm/setup.h>
-#include <asm/mach-types.h>
-#include <asm/page.h>
-
-//#include <asm/arch.h>
-//#include <asm/mach/irq.h>
-
-/*
- * Usage:
- *  - do not go blindly adding fields, add them at the end
- *  - when adding fields, don't rely on the address until
- *    a patch from me has been released
- *  - unused fields should be zero (for future expansion)
- *  - this structure is relatively short-lived - only
- *    guaranteed to contain useful data in setup_arch()
- *
- * This is the old deprecated way to pass parameters to the kernel
- */
-struct param_struct {
-    union {
-       struct {
-           unsigned long page_size;            /*  0 */
-           unsigned long nr_pages;             /*  4 */
-           unsigned long ramdisk_size;         /*  8 */
-           unsigned long flags;                /* 12 */
-#define FLAG_READONLY  1
-#define FLAG_RDLOAD    4
-#define FLAG_RDPROMPT  8
-           unsigned long rootdev;              /* 16 */
-           unsigned long video_num_cols;       /* 20 */
-           unsigned long video_num_rows;       /* 24 */
-           unsigned long video_x;              /* 28 */
-           unsigned long video_y;              /* 32 */
-           unsigned long memc_control_reg;     /* 36 */
-           unsigned char sounddefault;         /* 40 */
-           unsigned char adfsdrives;           /* 41 */
-           unsigned char bytes_per_char_h;     /* 42 */
-           unsigned char bytes_per_char_v;     /* 43 */
-           unsigned long pages_in_bank[4];     /* 44 */
-           unsigned long pages_in_vram;        /* 60 */
-           unsigned long initrd_start;         /* 64 */
-           unsigned long initrd_size;          /* 68 */
-           unsigned long rd_start;             /* 72 */
-           unsigned long system_rev;           /* 76 */
-           unsigned long system_serial_low;    /* 80 */
-           unsigned long system_serial_high;   /* 84 */
-           unsigned long mem_fclk_21285;       /* 88 */
-       } s;
-       char unused[256];
-    } u1;
-    union {
-       char paths[8][128];
-       struct {
-           unsigned long magic;
-           char n[1024 - sizeof(unsigned long)];
-       } s;
-    } u2;
-    char commandline[COMMAND_LINE_SIZE];
-};
-
-static struct tag * __init memtag(struct tag *tag, unsigned long start, unsigned long size)
-{
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_MEM;
-       tag->hdr.size = tag_size(tag_mem32);
-       tag->u.mem.size = size;
-       tag->u.mem.start = start;
-
-       return tag;
-}
-
-static void __init build_tag_list(struct param_struct *params, void *taglist)
-{
-       struct tag *tag = taglist;
-
-       if (params->u1.s.page_size != PAGE_SIZE) {
-               printk(KERN_WARNING "Warning: bad configuration page, "
-                      "trying to continue\n");
-               return;
-       }
-
-       printk(KERN_DEBUG "Converting old-style param struct to taglist\n");
-
-       tag->hdr.tag  = ATAG_CORE;
-       tag->hdr.size = tag_size(tag_core);
-       tag->u.core.flags = params->u1.s.flags & FLAG_READONLY;
-       tag->u.core.pagesize = params->u1.s.page_size;
-       tag->u.core.rootdev = params->u1.s.rootdev;
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_RAMDISK;
-       tag->hdr.size = tag_size(tag_ramdisk);
-       tag->u.ramdisk.flags = (params->u1.s.flags & FLAG_RDLOAD ? 1 : 0) |
-                              (params->u1.s.flags & FLAG_RDPROMPT ? 2 : 0);
-       tag->u.ramdisk.size  = params->u1.s.ramdisk_size;
-       tag->u.ramdisk.start = params->u1.s.rd_start;
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_INITRD;
-       tag->hdr.size = tag_size(tag_initrd);
-       tag->u.initrd.start = params->u1.s.initrd_start;
-       tag->u.initrd.size  = params->u1.s.initrd_size;
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_SERIAL;
-       tag->hdr.size = tag_size(tag_serialnr);
-       tag->u.serialnr.low = params->u1.s.system_serial_low;
-       tag->u.serialnr.high = params->u1.s.system_serial_high;
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_REVISION;
-       tag->hdr.size = tag_size(tag_revision);
-       tag->u.revision.rev = params->u1.s.system_rev;
-
-       tag = memtag(tag, PHYS_OFFSET, params->u1.s.nr_pages * PAGE_SIZE);
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_ACORN;
-       tag->hdr.size = tag_size(tag_acorn);
-       tag->u.acorn.memc_control_reg = params->u1.s.memc_control_reg;
-       tag->u.acorn.vram_pages       = params->u1.s.pages_in_vram;
-       tag->u.acorn.sounddefault     = params->u1.s.sounddefault;
-       tag->u.acorn.adfsdrives       = params->u1.s.adfsdrives;
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_CMDLINE;
-       tag->hdr.size = (strlen(params->commandline) + 3 +
-                        sizeof(struct tag_header)) >> 2;
-       strcpy(tag->u.cmdline.cmdline, params->commandline);
-
-       tag = tag_next(tag);
-       tag->hdr.tag = ATAG_NONE;
-       tag->hdr.size = 0;
-
-       memmove(params, taglist, ((int)tag) - ((int)taglist) +
-                                sizeof(struct tag_header));
-}
-
-void __init convert_to_tag_list(struct tag *tags)
-{
-       struct param_struct *params = (struct param_struct *)tags;
-       build_tag_list(params, &params->u2);
-}
-
-void __init squash_mem_tags(struct tag *tag)
-{
-       for (; tag->hdr.size; tag = tag_next(tag))
-               if (tag->hdr.tag == ATAG_MEM)
-                       tag->hdr.tag = ATAG_NONE;
-}
diff --git a/arch/arm26/kernel/dma.c b/arch/arm26/kernel/dma.c
deleted file mode 100644 (file)
index 80b5a77..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/dma.c
- *
- *  Copyright (C) 1995-2000 Russell King
- *                2003      Ian Molton
- *
- * 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.
- *
- *  Front-end to the DMA handling.  This handles the allocation/freeing
- *  of DMA channels, and provides a unified interface to the machines
- *  DMA facilities.
- */
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/sched.h>
-#include <linux/mman.h>
-#include <linux/init.h>
-#include <linux/spinlock.h>
-#include <linux/errno.h>
-
-#include <asm/dma.h>
-
-DEFINE_SPINLOCK(dma_spin_lock);
-
-static dma_t dma_chan[MAX_DMA_CHANNELS];
-
-/*
- * Get dma list for /proc/dma
- */
-int get_dma_list(char *buf)
-{
-       dma_t *dma;
-       char *p = buf;
-       int i;
-
-       for (i = 0, dma = dma_chan; i < MAX_DMA_CHANNELS; i++, dma++)
-               if (dma->lock)
-                       p += sprintf(p, "%2d: %14s %s\n", i,
-                                    dma->d_ops->type, dma->device_id);
-
-       return p - buf;
-}
-
-/*
- * Request DMA channel
- *
- * On certain platforms, we have to allocate an interrupt as well...
- */
-int request_dma(dmach_t channel, const char *device_id)
-{
-       dma_t *dma = dma_chan + channel;
-       int ret;
-
-       if (channel >= MAX_DMA_CHANNELS || !dma->d_ops)
-               goto bad_dma;
-
-       if (xchg(&dma->lock, 1) != 0)
-               goto busy;
-
-       dma->device_id = device_id;
-       dma->active    = 0;
-       dma->invalid   = 1;
-
-       ret = 0;
-       if (dma->d_ops->request)
-               ret = dma->d_ops->request(channel, dma);
-
-       if (ret)
-               xchg(&dma->lock, 0);
-
-       return ret;
-
-bad_dma:
-       printk(KERN_ERR "dma: trying to allocate DMA%d\n", channel);
-       return -EINVAL;
-
-busy:
-       return -EBUSY;
-}
-
-/*
- * Free DMA channel
- *
- * On certain platforms, we have to free interrupt as well...
- */
-void free_dma(dmach_t channel)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (channel >= MAX_DMA_CHANNELS || !dma->d_ops)
-               goto bad_dma;
-
-       if (dma->active) {
-               printk(KERN_ERR "dma%d: freeing active DMA\n", channel);
-               dma->d_ops->disable(channel, dma);
-               dma->active = 0;
-       }
-
-       if (xchg(&dma->lock, 0) != 0) {
-               if (dma->d_ops->free)
-                       dma->d_ops->free(channel, dma);
-               return;
-       }
-
-       printk(KERN_ERR "dma%d: trying to free free DMA\n", channel);
-       return;
-
-bad_dma:
-       printk(KERN_ERR "dma: trying to free DMA%d\n", channel);
-}
-
-/* Set DMA Scatter-Gather list
- */
-void set_dma_sg (dmach_t channel, struct scatterlist *sg, int nr_sg)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (dma->active)
-               printk(KERN_ERR "dma%d: altering DMA SG while "
-                      "DMA active\n", channel);
-
-       dma->sg = sg;
-       dma->sgcount = nr_sg;
-       dma->using_sg = 1;
-       dma->invalid = 1;
-}
-
-/* Set DMA address
- *
- * Copy address to the structure, and set the invalid bit
- */
-void set_dma_addr (dmach_t channel, unsigned long physaddr)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (dma->active)
-               printk(KERN_ERR "dma%d: altering DMA address while "
-                      "DMA active\n", channel);
-
-       dma->sg = &dma->buf;
-       dma->sgcount = 1;
-       dma->buf.__address = (char *)physaddr;//FIXME - not pretty
-       dma->using_sg = 0;
-       dma->invalid = 1;
-}
-
-/* Set DMA byte count
- *
- * Copy address to the structure, and set the invalid bit
- */
-void set_dma_count (dmach_t channel, unsigned long count)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (dma->active)
-               printk(KERN_ERR "dma%d: altering DMA count while "
-                      "DMA active\n", channel);
-
-       dma->sg = &dma->buf;
-       dma->sgcount = 1;
-       dma->buf.length = count;
-       dma->using_sg = 0;
-       dma->invalid = 1;
-}
-
-/* Set DMA direction mode
- */
-void set_dma_mode (dmach_t channel, dmamode_t mode)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (dma->active)
-               printk(KERN_ERR "dma%d: altering DMA mode while "
-                      "DMA active\n", channel);
-
-       dma->dma_mode = mode;
-       dma->invalid = 1;
-}
-
-/* Enable DMA channel
- */
-void enable_dma (dmach_t channel)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (!dma->lock)
-               goto free_dma;
-
-       if (dma->active == 0) {
-               dma->active = 1;
-               dma->d_ops->enable(channel, dma);
-       }
-       return;
-
-free_dma:
-       printk(KERN_ERR "dma%d: trying to enable free DMA\n", channel);
-       BUG();
-}
-
-/* Disable DMA channel
- */
-void disable_dma (dmach_t channel)
-{
-       dma_t *dma = dma_chan + channel;
-
-       if (!dma->lock)
-               goto free_dma;
-
-       if (dma->active == 1) {
-               dma->active = 0;
-               dma->d_ops->disable(channel, dma);
-       }
-       return;
-
-free_dma:
-       printk(KERN_ERR "dma%d: trying to disable free DMA\n", channel);
-       BUG();
-}
-
-/*
- * Is the specified DMA channel active?
- */
-int dma_channel_active(dmach_t channel)
-{
-       return dma_chan[channel].active;
-}
-
-void set_dma_page(dmach_t channel, char pagenr)
-{
-       printk(KERN_ERR "dma%d: trying to set_dma_page\n", channel);
-}
-
-void set_dma_speed(dmach_t channel, int cycle_ns)
-{
-       dma_t *dma = dma_chan + channel;
-       int ret = 0;
-
-       if (dma->d_ops->setspeed)
-               ret = dma->d_ops->setspeed(channel, dma, cycle_ns);
-       dma->speed = ret;
-}
-
-int get_dma_residue(dmach_t channel)
-{
-       dma_t *dma = dma_chan + channel;
-       int ret = 0;
-
-       if (dma->d_ops->residue)
-               ret = dma->d_ops->residue(channel, dma);
-
-       return ret;
-}
-
-void __init init_dma(void)
-{
-       arch_dma_init(dma_chan);
-}
-
-EXPORT_SYMBOL(request_dma);
-EXPORT_SYMBOL(free_dma);
-EXPORT_SYMBOL(enable_dma);
-EXPORT_SYMBOL(disable_dma);
-EXPORT_SYMBOL(set_dma_addr);
-EXPORT_SYMBOL(set_dma_count);
-EXPORT_SYMBOL(set_dma_mode);
-EXPORT_SYMBOL(set_dma_page);
-EXPORT_SYMBOL(get_dma_residue);
-EXPORT_SYMBOL(set_dma_sg);
-EXPORT_SYMBOL(set_dma_speed);
-
-EXPORT_SYMBOL(dma_spin_lock);
diff --git a/arch/arm26/kernel/ecard.c b/arch/arm26/kernel/ecard.c
deleted file mode 100644 (file)
index e2bcefc..0000000
+++ /dev/null
@@ -1,847 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/ecard.c
- *
- *  Copyright 1995-2001 Russell King
- *  Copyright 2003 Ian Molton
- *
- * 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.
- *
- *  Find all installed expansion cards, and handle interrupts from them.
- *
- *  Created from information from Acorns RiscOS3 PRMs
- *  15-Jun-2003 IM      Modified from ARM32 (RiscPC capable) version
- *  10-Jan-1999        RMK     Run loaders in a simulated RISC OS environment.
- *  06-May-1997        RMK     Added blacklist for cards whose loader doesn't work.
- *  12-Sep-1997        RMK     Created new handling of interrupt enables/disables
- *                     - cards can now register their own routine to control
- *                     interrupts (recommended).
- *  29-Sep-1997        RMK     Expansion card interrupt hardware not being re-enabled
- *                     on reset from Linux. (Caused cards not to respond
- *                     under RiscOS without hard reset).
- *
- */
-#define ECARD_C
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/reboot.h>
-#include <linux/mm.h>
-#include <linux/slab.h>
-#include <linux/proc_fs.h>
-#include <linux/device.h>
-#include <linux/init.h>
-
-#include <asm/dma.h>
-#include <asm/ecard.h>
-#include <asm/hardware.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/mmu_context.h>
-#include <asm/irqchip.h>
-#include <asm/tlbflush.h>
-
-enum req {
-       req_readbytes,
-       req_reset
-};
-
-struct ecard_request {
-       enum req        req;
-       ecard_t         *ec;
-       unsigned int    address;
-       unsigned int    length;
-       unsigned int    use_loader;
-       void            *buffer;
-};
-
-struct expcard_blacklist {
-       unsigned short   manufacturer;
-       unsigned short   product;
-       const char      *type;
-};
-
-static ecard_t *cards;
-static ecard_t *slot_to_expcard[MAX_ECARDS];
-static unsigned int ectcr;
-
-/* List of descriptions of cards which don't have an extended
- * identification, or chunk directories containing a description.
- */
-static struct expcard_blacklist __initdata blacklist[] = {
-       { MANU_ACORN, PROD_ACORN_ETHER1, "Acorn Ether1" }
-};
-
-asmlinkage extern int
-ecard_loader_reset(volatile unsigned char *pa, loader_t loader);
-asmlinkage extern int
-ecard_loader_read(int off, volatile unsigned char *pa, loader_t loader);
-
-static const struct ecard_id *
-ecard_match_device(const struct ecard_id *ids, struct expansion_card *ec);
-
-static inline unsigned short
-ecard_getu16(unsigned char *v)
-{
-       return v[0] | v[1] << 8;
-}
-
-static inline signed long
-ecard_gets24(unsigned char *v)
-{
-       return v[0] | v[1] << 8 | v[2] << 16 | ((v[2] & 0x80) ? 0xff000000 : 0);
-}
-
-static inline ecard_t *
-slot_to_ecard(unsigned int slot)
-{
-       return slot < MAX_ECARDS ? slot_to_expcard[slot] : NULL;
-}
-
-/* ===================== Expansion card daemon ======================== */
-/*
- * Since the loader programs on the expansion cards need to be run
- * in a specific environment, create a separate task with this
- * environment up, and pass requests to this task as and when we
- * need to.
- *
- * This should allow 99% of loaders to be called from Linux.
- *
- * From a security standpoint, we trust the card vendors.  This
- * may be a misplaced trust.
- */
-#define BUS_ADDR(x) ((((unsigned long)(x)) << 2) + IO_BASE)
-#define POD_INT_ADDR(x)        ((volatile unsigned char *)\
-                        ((BUS_ADDR((x)) - IO_BASE) + IO_START))
-
-static inline void ecard_task_reset(struct ecard_request *req)
-{
-       struct expansion_card *ec = req->ec;
-       if (ec->loader)
-               ecard_loader_reset(POD_INT_ADDR(ec->podaddr), ec->loader);
-}
-
-static void
-ecard_task_readbytes(struct ecard_request *req)
-{
-       unsigned char *buf = (unsigned char *)req->buffer;
-       volatile unsigned char *base_addr =
-               (volatile unsigned char *)POD_INT_ADDR(req->ec->podaddr);
-       unsigned int len = req->length;
-       unsigned int off = req->address;
-
-       if (!req->use_loader || !req->ec->loader) {
-               off *= 4;
-               while (len--) {
-                       *buf++ = base_addr[off];
-                       off += 4;
-               }
-       } else {
-               while(len--) {
-                       /*
-                        * The following is required by some
-                        * expansion card loader programs.
-                        */
-                       *(unsigned long *)0x108 = 0;
-                       *buf++ = ecard_loader_read(off++, base_addr,
-                                                  req->ec->loader);
-               }
-       }
-}
-
-static void ecard_do_request(struct ecard_request *req)
-{
-       switch (req->req) {
-       case req_readbytes:
-               ecard_task_readbytes(req);
-               break;
-
-       case req_reset:
-               ecard_task_reset(req);
-               break;
-       }
-}
-
-/*
- * On 26-bit processors, we don't need the kcardd thread to access the
- * expansion card loaders.  We do it directly.
- */
-#define ecard_call(req)        ecard_do_request(req)
-
-/* ======================= Mid-level card control ===================== */
-
-static void
-ecard_readbytes(void *addr, ecard_t *ec, int off, int len, int useld)
-{
-       struct ecard_request req;
-
-       req.req         = req_readbytes;
-       req.ec          = ec;
-       req.address     = off;
-       req.length      = len;
-       req.use_loader  = useld;
-       req.buffer      = addr;
-
-       ecard_call(&req);
-}
-
-int ecard_readchunk(struct in_chunk_dir *cd, ecard_t *ec, int id, int num)
-{
-       struct ex_chunk_dir excd;
-       int index = 16;
-       int useld = 0;
-
-       if (!ec->cid.cd)
-               return 0;
-
-       while(1) {
-               ecard_readbytes(&excd, ec, index, 8, useld);
-               index += 8;
-               if (c_id(&excd) == 0) {
-                       if (!useld && ec->loader) {
-                               useld = 1;
-                               index = 0;
-                               continue;
-                       }
-                       return 0;
-               }
-               if (c_id(&excd) == 0xf0) { /* link */
-                       index = c_start(&excd);
-                       continue;
-               }
-               if (c_id(&excd) == 0x80) { /* loader */
-                       if (!ec->loader) {
-                               ec->loader = kmalloc(c_len(&excd),
-                                                              GFP_KERNEL);
-                               if (ec->loader)
-                                       ecard_readbytes(ec->loader, ec,
-                                                       (int)c_start(&excd),
-                                                       c_len(&excd), useld);
-                               else
-                                       return 0;
-                       }
-                       continue;
-               }
-               if (c_id(&excd) == id && num-- == 0)
-                       break;
-       }
-
-       if (c_id(&excd) & 0x80) {
-               switch (c_id(&excd) & 0x70) {
-               case 0x70:
-                       ecard_readbytes((unsigned char *)excd.d.string, ec,
-                                       (int)c_start(&excd), c_len(&excd),
-                                       useld);
-                       break;
-               case 0x00:
-                       break;
-               }
-       }
-       cd->start_offset = c_start(&excd);
-       memcpy(cd->d.string, excd.d.string, 256);
-       return 1;
-}
-
-/* ======================= Interrupt control ============================ */
-
-static void ecard_def_irq_enable(ecard_t *ec, int irqnr)
-{
-}
-
-static void ecard_def_irq_disable(ecard_t *ec, int irqnr)
-{
-}
-
-static int ecard_def_irq_pending(ecard_t *ec)
-{
-       return !ec->irqmask || ec->irqaddr[0] & ec->irqmask;
-}
-
-static void ecard_def_fiq_enable(ecard_t *ec, int fiqnr)
-{
-       panic("ecard_def_fiq_enable called - impossible");
-}
-
-static void ecard_def_fiq_disable(ecard_t *ec, int fiqnr)
-{
-       panic("ecard_def_fiq_disable called - impossible");
-}
-
-static int ecard_def_fiq_pending(ecard_t *ec)
-{
-       return !ec->fiqmask || ec->fiqaddr[0] & ec->fiqmask;
-}
-
-static expansioncard_ops_t ecard_default_ops = {
-       ecard_def_irq_enable,
-       ecard_def_irq_disable,
-       ecard_def_irq_pending,
-       ecard_def_fiq_enable,
-       ecard_def_fiq_disable,
-       ecard_def_fiq_pending
-};
-
-/*
- * Enable and disable interrupts from expansion cards.
- * (interrupts are disabled for these functions).
- *
- * They are not meant to be called directly, but via enable/disable_irq.
- */
-static void ecard_irq_unmask(unsigned int irqnr)
-{
-       ecard_t *ec = slot_to_ecard(irqnr - 32);
-
-       if (ec) {
-               if (!ec->ops)
-                       ec->ops = &ecard_default_ops;
-
-               if (ec->claimed && ec->ops->irqenable)
-                       ec->ops->irqenable(ec, irqnr);
-               else
-                       printk(KERN_ERR "ecard: rejecting request to "
-                               "enable IRQs for %d\n", irqnr);
-       }
-}
-
-static void ecard_irq_mask(unsigned int irqnr)
-{
-       ecard_t *ec = slot_to_ecard(irqnr - 32);
-
-       if (ec) {
-               if (!ec->ops)
-                       ec->ops = &ecard_default_ops;
-
-               if (ec->ops && ec->ops->irqdisable)
-                       ec->ops->irqdisable(ec, irqnr);
-       }
-}
-
-static struct irqchip ecard_chip = {
-       .ack    = ecard_irq_mask,
-       .mask   = ecard_irq_mask,
-       .unmask = ecard_irq_unmask,
-};
-
-void ecard_enablefiq(unsigned int fiqnr)
-{
-       ecard_t *ec = slot_to_ecard(fiqnr);
-
-       if (ec) {
-               if (!ec->ops)
-                       ec->ops = &ecard_default_ops;
-
-               if (ec->claimed && ec->ops->fiqenable)
-                       ec->ops->fiqenable(ec, fiqnr);
-               else
-                       printk(KERN_ERR "ecard: rejecting request to "
-                               "enable FIQs for %d\n", fiqnr);
-       }
-}
-
-void ecard_disablefiq(unsigned int fiqnr)
-{
-       ecard_t *ec = slot_to_ecard(fiqnr);
-
-       if (ec) {
-               if (!ec->ops)
-                       ec->ops = &ecard_default_ops;
-
-               if (ec->ops->fiqdisable)
-                       ec->ops->fiqdisable(ec, fiqnr);
-       }
-}
-
-static void
-ecard_dump_irq_state(ecard_t *ec)
-{
-       printk("  %d: %sclaimed, ",
-              ec->slot_no,
-              ec->claimed ? "" : "not ");
-
-       if (ec->ops && ec->ops->irqpending &&
-           ec->ops != &ecard_default_ops)
-               printk("irq %spending\n",
-                      ec->ops->irqpending(ec) ? "" : "not ");
-       else
-               printk("irqaddr %p, mask = %02X, status = %02X\n",
-                      ec->irqaddr, ec->irqmask, *ec->irqaddr);
-}
-
-static void ecard_check_lockup(struct irqdesc *desc)
-{
-       static int last, lockup;
-       ecard_t *ec;
-
-       /*
-        * If the timer interrupt has not run since the last million
-        * unrecognised expansion card interrupts, then there is
-        * something seriously wrong.  Disable the expansion card
-        * interrupts so at least we can continue.
-        *
-        * Maybe we ought to start a timer to re-enable them some time
-        * later?
-        */
-       if (last == jiffies) {
-               lockup += 1;
-               if (lockup > 1000000) {
-                       printk(KERN_ERR "\nInterrupt lockup detected - "
-                              "disabling all expansion card interrupts\n");
-
-                       desc->chip->mask(IRQ_EXPANSIONCARD);
-
-                       printk("Expansion card IRQ state:\n");
-
-                       for (ec = cards; ec; ec = ec->next)
-                               ecard_dump_irq_state(ec);
-               }
-       } else
-               lockup = 0;
-
-       /*
-        * If we did not recognise the source of this interrupt,
-        * warn the user, but don't flood the user with these messages.
-        */
-       if (!last || time_after(jiffies, (unsigned long)(last + 5*HZ))) {
-               last = jiffies;
-               printk(KERN_WARNING "Unrecognised interrupt from backplane\n");
-       }
-}
-
-static void
-ecard_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
-{
-       ecard_t *ec;
-       int called = 0;
-
-       desc->chip->mask(irq);
-       for (ec = cards; ec; ec = ec->next) {
-               int pending;
-
-               if (!ec->claimed || ec->irq == NO_IRQ)
-                       continue;
-
-               if (ec->ops && ec->ops->irqpending)
-                       pending = ec->ops->irqpending(ec);
-               else
-                       pending = ecard_default_ops.irqpending(ec);
-
-               if (pending) {
-                       struct irqdesc *d = irq_desc + ec->irq;
-                       d->handle(ec->irq, d, regs);
-                       called ++;
-               }
-       }
-       desc->chip->unmask(irq);
-
-       if (called == 0)
-               ecard_check_lockup(desc);
-}
-
-#define ecard_irqexp_handler NULL
-#define ecard_probeirqhw() (0)
-
-unsigned int ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed)
-{
-       unsigned long address = 0;
-       int slot = ec->slot_no;
-
-       ectcr &= ~(1 << slot);
-
-       switch (type) {
-       case ECARD_MEMC:
-               address = IO_EC_MEMC_BASE + (slot << 12);
-               break;
-
-       case ECARD_IOC:
-               address = IO_EC_IOC_BASE + (slot << 12) + (speed << 17);
-               break;
-
-       default:
-               break;
-       }
-
-       return address;
-}
-
-static int ecard_prints(char *buffer, ecard_t *ec)
-{
-       char *start = buffer;
-
-       buffer += sprintf(buffer, "  %d: ", ec->slot_no);
-
-       if (ec->cid.id == 0) {
-               struct in_chunk_dir incd;
-
-               buffer += sprintf(buffer, "[%04X:%04X] ",
-                       ec->cid.manufacturer, ec->cid.product);
-
-               if (!ec->card_desc && ec->cid.cd &&
-                   ecard_readchunk(&incd, ec, 0xf5, 0)) {
-                       ec->card_desc = kmalloc(strlen(incd.d.string)+1, GFP_KERNEL);
-
-                       if (ec->card_desc)
-                               strcpy((char *)ec->card_desc, incd.d.string);
-               }
-
-               buffer += sprintf(buffer, "%s\n", ec->card_desc ? ec->card_desc : "*unknown*");
-       } else
-               buffer += sprintf(buffer, "Simple card %d\n", ec->cid.id);
-
-       return buffer - start;
-}
-
-static int get_ecard_dev_info(char *buf, char **start, off_t pos, int count)
-{
-       ecard_t *ec = cards;
-       off_t at = 0;
-       int len, cnt;
-
-       cnt = 0;
-       while (ec && count > cnt) {
-               len = ecard_prints(buf, ec);
-               at += len;
-               if (at >= pos) {
-                       if (!*start) {
-                               *start = buf + (pos - (at - len));
-                               cnt = at - pos;
-                       } else
-                               cnt += len;
-                       buf += len;
-               }
-               ec = ec->next;
-       }
-       return (count > cnt) ? cnt : count;
-}
-
-static struct proc_dir_entry *proc_bus_ecard_dir = NULL;
-
-static void ecard_proc_init(void)
-{
-       proc_bus_ecard_dir = proc_mkdir("ecard", proc_bus);
-       create_proc_info_entry("devices", 0, proc_bus_ecard_dir,
-               get_ecard_dev_info);
-}
-
-#define ec_set_resource(ec,nr,st,sz,flg)                       \
-       do {                                                    \
-               (ec)->resource[nr].name = ec->dev.bus_id;       \
-               (ec)->resource[nr].start = st;                  \
-               (ec)->resource[nr].end = (st) + (sz) - 1;       \
-               (ec)->resource[nr].flags = flg;                 \
-       } while (0)
-
-static void __init ecard_init_resources(struct expansion_card *ec)
-{
-       unsigned long base = PODSLOT_IOC0_BASE;
-       unsigned int slot = ec->slot_no;
-       int i;
-
-       ec_set_resource(ec, ECARD_RES_MEMC,
-                       PODSLOT_MEMC_BASE + (slot << 14),
-                       PODSLOT_MEMC_SIZE, IORESOURCE_MEM);
-
-       for (i = 0; i < ECARD_RES_IOCSYNC - ECARD_RES_IOCSLOW; i++) {
-               ec_set_resource(ec, i + ECARD_RES_IOCSLOW,
-                               base + (slot << 14) + (i << 19),
-                               PODSLOT_IOC_SIZE, IORESOURCE_MEM);
-       }
-
-       for (i = 0; i < ECARD_NUM_RESOURCES; i++) {
-               if (ec->resource[i].start &&
-                   request_resource(&iomem_resource, &ec->resource[i])) {
-                       printk(KERN_ERR "%s: resource(s) not available\n",
-                               ec->dev.bus_id);
-                       ec->resource[i].end -= ec->resource[i].start;
-                       ec->resource[i].start = 0;
-               }
-       }
-}
-
-static ssize_t ecard_show_irq(struct device *dev, struct device_attribute *attr, char *buf)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       return sprintf(buf, "%u\n", ec->irq);
-}
-
-static ssize_t ecard_show_vendor(struct device *dev, struct device_attribute *attr, char *buf)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       return sprintf(buf, "%u\n", ec->cid.manufacturer);
-}
-
-static ssize_t ecard_show_device(struct device *dev, struct device_attribute *attr, char *buf)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       return sprintf(buf, "%u\n", ec->cid.product);
-}
-
-static ssize_t ecard_show_dma(struct device *dev, struct device_attribute *attr, char *buf)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       return sprintf(buf, "%u\n", ec->dma);
-}
-
-static ssize_t ecard_show_resources(struct device *dev, struct device_attribute *attr, char *buf)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       char *str = buf;
-       int i;
-
-       for (i = 0; i < ECARD_NUM_RESOURCES; i++)
-               str += sprintf(str, "%08lx %08lx %08lx\n",
-                               ec->resource[i].start,
-                               ec->resource[i].end,
-                               ec->resource[i].flags);
-
-       return str - buf;
-}
-
-static DEVICE_ATTR(irq, S_IRUGO, ecard_show_irq, NULL);
-static DEVICE_ATTR(vendor, S_IRUGO, ecard_show_vendor, NULL);
-static DEVICE_ATTR(device, S_IRUGO, ecard_show_device, NULL);
-static DEVICE_ATTR(dma, S_IRUGO, ecard_show_dma, NULL);
-static DEVICE_ATTR(resource, S_IRUGO, ecard_show_resources, NULL);
-
-/*
- * Probe for an expansion card.
- *
- * If bit 1 of the first byte of the card is set, then the
- * card does not exist.
- */
-static int __init
-ecard_probe(int slot, card_type_t type)
-{
-       ecard_t **ecp;
-       ecard_t *ec;
-       struct ex_ecid cid;
-       int i, rc = -ENOMEM;
-
-       ec = kzalloc(sizeof(ecard_t), GFP_KERNEL);
-       if (!ec)
-               goto nomem;
-
-       ec->slot_no     = slot;
-       ec->type        = type;
-       ec->irq         = NO_IRQ;
-       ec->fiq         = NO_IRQ;
-       ec->dma         = NO_DMA;
-       ec->card_desc   = NULL;
-       ec->ops         = &ecard_default_ops;
-
-       rc = -ENODEV;
-       if ((ec->podaddr = ecard_address(ec, type, ECARD_SYNC)) == 0)
-               goto nodev;
-
-       cid.r_zero = 1;
-       ecard_readbytes(&cid, ec, 0, 16, 0);
-       if (cid.r_zero)
-               goto nodev;
-
-       ec->cid.id      = cid.r_id;
-       ec->cid.cd      = cid.r_cd;
-       ec->cid.is      = cid.r_is;
-       ec->cid.w       = cid.r_w;
-       ec->cid.manufacturer = ecard_getu16(cid.r_manu);
-       ec->cid.product = ecard_getu16(cid.r_prod);
-       ec->cid.country = cid.r_country;
-       ec->cid.irqmask = cid.r_irqmask;
-       ec->cid.irqoff  = ecard_gets24(cid.r_irqoff);
-       ec->cid.fiqmask = cid.r_fiqmask;
-       ec->cid.fiqoff  = ecard_gets24(cid.r_fiqoff);
-       ec->fiqaddr     =
-       ec->irqaddr     = (unsigned char *)ioaddr(ec->podaddr);
-
-       if (ec->cid.is) {
-               ec->irqmask = ec->cid.irqmask;
-               ec->irqaddr += ec->cid.irqoff;
-               ec->fiqmask = ec->cid.fiqmask;
-               ec->fiqaddr += ec->cid.fiqoff;
-       } else {
-               ec->irqmask = 1;
-               ec->fiqmask = 4;
-       }
-
-       for (i = 0; i < ARRAY_SIZE(blacklist); i++)
-               if (blacklist[i].manufacturer == ec->cid.manufacturer &&
-                   blacklist[i].product == ec->cid.product) {
-                       ec->card_desc = blacklist[i].type;
-                       break;
-               }
-
-       snprintf(ec->dev.bus_id, sizeof(ec->dev.bus_id), "ecard%d", slot);
-       ec->dev.parent = NULL;
-       ec->dev.bus    = &ecard_bus_type;
-       ec->dev.dma_mask = &ec->dma_mask;
-       ec->dma_mask = (u64)0xffffffff;
-
-       ecard_init_resources(ec);
-
-       /*
-        * hook the interrupt handlers
-        */
-       ec->irq = 32 + slot;
-       set_irq_chip(ec->irq, &ecard_chip);
-       set_irq_handler(ec->irq, do_level_IRQ);
-       set_irq_flags(ec->irq, IRQF_VALID);
-
-       for (ecp = &cards; *ecp; ecp = &(*ecp)->next);
-
-       *ecp = ec;
-       slot_to_expcard[slot] = ec;
-
-       device_register(&ec->dev);
-       device_create_file(&ec->dev, &dev_attr_dma);
-       device_create_file(&ec->dev, &dev_attr_irq);
-       device_create_file(&ec->dev, &dev_attr_resource);
-       device_create_file(&ec->dev, &dev_attr_vendor);
-       device_create_file(&ec->dev, &dev_attr_device); 
-
-       return 0;
-
-nodev:
-       kfree(ec);
-nomem:
-       return rc;
-}
-
-/*
- * Initialise the expansion card system.
- * Locate all hardware - interrupt management and
- * actual cards.
- */
-static int __init ecard_init(void)
-{
-       int slot, irqhw;
-
-       printk("Probing expansion cards\n");
-
-       for (slot = 0; slot < MAX_ECARDS; slot ++) {
-               ecard_probe(slot, ECARD_IOC);
-       }
-
-       irqhw = ecard_probeirqhw();
-
-       set_irq_chained_handler(IRQ_EXPANSIONCARD,
-                               irqhw ? ecard_irqexp_handler : ecard_irq_handler);
-
-       ecard_proc_init();
-
-       return 0;
-}
-
-subsys_initcall(ecard_init);
-
-/*
- *     ECARD "bus"
- */
-static const struct ecard_id *
-ecard_match_device(const struct ecard_id *ids, struct expansion_card *ec)
-{
-       int i;
-
-       for (i = 0; ids[i].manufacturer != 65535; i++)
-               if (ec->cid.manufacturer == ids[i].manufacturer &&
-                   ec->cid.product == ids[i].product)
-                       return ids + i;
-
-       return NULL;
-}
-
-static int ecard_drv_probe(struct device *dev)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       struct ecard_driver *drv = ECARD_DRV(dev->driver);
-       const struct ecard_id *id;
-       int ret;
-
-       id = ecard_match_device(drv->id_table, ec);
-
-       ecard_claim(ec);
-       ret = drv->probe(ec, id);
-       if (ret)
-               ecard_release(ec);
-       return ret;
-}
-
-static int ecard_drv_remove(struct device *dev)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       struct ecard_driver *drv = ECARD_DRV(dev->driver);
-
-       drv->remove(ec);
-       ecard_release(ec);
-
-       return 0;
-}
-
-/*
- * Before rebooting, we must make sure that the expansion card is in a
- * sensible state, so it can be re-detected.  This means that the first
- * page of the ROM must be visible.  We call the expansion cards reset
- * handler, if any.
- */
-static void ecard_drv_shutdown(struct device *dev)
-{
-       struct expansion_card *ec = ECARD_DEV(dev);
-       struct ecard_driver *drv = ECARD_DRV(dev->driver);
-       struct ecard_request req;
-
-       if (drv->shutdown)
-               drv->shutdown(ec);
-       ecard_release(ec);
-       req.req = req_reset;
-       req.ec = ec;
-       ecard_call(&req);
-}
-
-int ecard_register_driver(struct ecard_driver *drv)
-{
-       drv->drv.bus = &ecard_bus_type;
-       drv->drv.probe = ecard_drv_probe;
-       drv->drv.remove = ecard_drv_remove;
-       drv->drv.shutdown = ecard_drv_shutdown;
-
-       return driver_register(&drv->drv);
-}
-
-void ecard_remove_driver(struct ecard_driver *drv)
-{
-       driver_unregister(&drv->drv);
-}
-
-static int ecard_match(struct device *_dev, struct device_driver *_drv)
-{
-       struct expansion_card *ec = ECARD_DEV(_dev);
-       struct ecard_driver *drv = ECARD_DRV(_drv);
-       int ret;
-
-       if (drv->id_table) {
-               ret = ecard_match_device(drv->id_table, ec) != NULL;
-       } else {
-               ret = ec->cid.id == drv->id;
-       }
-
-       return ret;
-}
-
-struct bus_type ecard_bus_type = {
-       .name   = "ecard",
-       .match  = ecard_match,
-};
-
-static int ecard_bus_init(void)
-{
-       return bus_register(&ecard_bus_type);
-}
-
-postcore_initcall(ecard_bus_init);
-
-EXPORT_SYMBOL(ecard_readchunk);
-EXPORT_SYMBOL(ecard_address);
-EXPORT_SYMBOL(ecard_register_driver);
-EXPORT_SYMBOL(ecard_remove_driver);
-EXPORT_SYMBOL(ecard_bus_type);
diff --git a/arch/arm26/kernel/entry.S b/arch/arm26/kernel/entry.S
deleted file mode 100644 (file)
index 7ffcc6e..0000000
+++ /dev/null
@@ -1,951 +0,0 @@
-/* arch/arm26/kernel/entry.S
- * 
- * Assembled from chunks of code in arch/arm
- *
- * Copyright (C) 2003 Ian Molton
- * Based on the work of RMK.
- *
- */
-
-#include <linux/linkage.h>
-
-#include <asm/assembler.h>
-#include <asm/asm-offsets.h>
-#include <asm/errno.h>
-#include <asm/hardware.h>
-#include <asm/sysirq.h>
-#include <asm/thread_info.h>
-#include <asm/page.h>
-#include <asm/ptrace.h>
-
-       .macro  zero_fp
-#ifndef CONFIG_NO_FRAME_POINTER
-       mov     fp, #0
-#endif
-       .endm
-
-       .text
-
-@ Bad Abort numbers
-@ -----------------
-@
-#define BAD_PREFETCH   0
-#define BAD_DATA       1
-#define BAD_ADDREXCPTN 2
-#define BAD_IRQ                3
-#define BAD_UNDEFINSTR 4
-
-@ OS version number used in SWIs
-@  RISC OS is 0
-@  RISC iX is 8
-@
-#define OS_NUMBER      9
-#define ARMSWI_OFFSET  0x000f0000
-
-@
-@ Stack format (ensured by USER_* and SVC_*)
-@ PSR and PC are comined on arm26
-@
-
-#define S_OFF          8
-
-#define S_OLD_R0       64
-#define S_PC           60
-#define S_LR           56
-#define S_SP           52
-#define S_IP           48
-#define S_FP           44
-#define S_R10          40
-#define S_R9           36
-#define S_R8           32
-#define S_R7           28
-#define S_R6           24
-#define S_R5           20
-#define S_R4           16
-#define S_R3           12
-#define S_R2           8
-#define S_R1           4
-#define S_R0           0
-
-       .macro  save_user_regs
-       str     r0, [sp, #-4]!   @ Store SVC r0
-       str     lr, [sp, #-4]!   @ Store user mode PC
-       sub     sp, sp, #15*4
-       stmia   sp, {r0 - lr}^   @ Store the other user-mode regs
-       mov     r0, r0
-       .endm
-
-       .macro  slow_restore_user_regs
-       ldmia   sp, {r0 - lr}^   @ restore the user regs not including PC
-       mov     r0, r0
-       ldr     lr, [sp, #15*4]  @ get user PC
-       add     sp, sp, #15*4+8  @ free stack
-       movs    pc, lr           @ return
-       .endm
-
-       .macro  fast_restore_user_regs
-       add     sp, sp, #S_OFF
-       ldmib   sp, {r1 - lr}^
-       mov     r0, r0
-       ldr     lr, [sp, #15*4]
-       add     sp, sp, #15*4+8
-       movs    pc, lr
-       .endm
-
-       .macro  save_svc_regs
-       str     sp, [sp, #-16]!
-       str     lr, [sp, #8]
-       str     lr, [sp, #4]
-       stmfd   sp!, {r0 - r12}
-       mov     r0, #-1
-       str     r0, [sp, #S_OLD_R0]
-       zero_fp
-       .endm
-
-       .macro  save_svc_regs_irq
-       str     sp, [sp, #-16]!
-       str     lr, [sp, #4]
-       ldr     lr, .LCirq
-       ldr     lr, [lr]
-       str     lr, [sp, #8]
-       stmfd   sp!, {r0 - r12}
-       mov     r0, #-1
-       str     r0, [sp, #S_OLD_R0]
-       zero_fp
-       .endm
-
-       .macro  restore_svc_regs
-                ldmfd   sp, {r0 - pc}^
-       .endm
-
-       .macro  mask_pc, rd, rm
-       bic     \rd, \rm, #PCMASK
-       .endm
-
-       .macro  disable_irqs, temp
-       mov     \temp, pc
-       orr     \temp, \temp, #PSR_I_BIT
-       teqp    \temp, #0
-       .endm
-
-       .macro  enable_irqs, temp
-       mov     \temp, pc
-       and     \temp, \temp, #~PSR_I_BIT
-       teqp    \temp, #0
-       .endm
-
-       .macro  initialise_traps_extra
-       .endm
-
-       .macro  get_thread_info, rd
-       mov     \rd, sp, lsr #13
-       mov     \rd, \rd, lsl #13
-       .endm
-
-/*
- * These are the registers used in the syscall handler, and allow us to
- * have in theory up to 7 arguments to a function - r0 to r6.
- *
- * Note that tbl == why is intentional.
- *
- * We must set at least "tsk" and "why" when calling ret_with_reschedule.
- */
-scno   .req    r7              @ syscall number
-tbl    .req    r8              @ syscall table pointer
-why    .req    r8              @ Linux syscall (!= 0)
-tsk    .req    r9              @ current thread_info
-
-/*
- * Get the system call number.
- */
-       .macro  get_scno
-       mask_pc lr, lr
-       ldr     scno, [lr, #-4]         @ get SWI instruction
-       .endm
-/*
- *  -----------------------------------------------------------------------
- */
-
-/* 
- * We rely on the fact that R0 is at the bottom of the stack (due to
- * slow/fast restore user regs).
- */
-#if S_R0 != 0
-#error "Please fix"
-#endif
-
-/*
- * This is the fast syscall return path.  We do as little as
- * possible here, and this includes saving r0 back into the SVC
- * stack.
- */
-ret_fast_syscall:
-       disable_irqs r1                         @ disable interrupts
-       ldr     r1, [tsk, #TI_FLAGS]
-       tst     r1, #_TIF_WORK_MASK
-       bne     fast_work_pending
-       fast_restore_user_regs
-
-/*
- * Ok, we need to do extra processing, enter the slow path.
- */
-fast_work_pending:
-       str     r0, [sp, #S_R0+S_OFF]!          @ returned r0
-work_pending:
-       tst     r1, #_TIF_NEED_RESCHED
-       bne     work_resched
-       tst     r1, #_TIF_SIGPENDING
-       beq     no_work_pending
-       mov     r0, sp                          @ 'regs'
-       mov     r2, why                         @ 'syscall'
-       bl      do_notify_resume
-       disable_irqs r1                         @ disable interrupts
-       b       no_work_pending
-
-work_resched:
-       bl      schedule
-/*
- * "slow" syscall return path.  "why" tells us if this was a real syscall.
- */
-ENTRY(ret_to_user)
-ret_slow_syscall:
-       disable_irqs r1                         @ disable interrupts
-       ldr     r1, [tsk, #TI_FLAGS]
-       tst     r1, #_TIF_WORK_MASK
-       bne     work_pending
-no_work_pending:
-       slow_restore_user_regs
-
-/*
- * This is how we return from a fork.
- */
-ENTRY(ret_from_fork)
-       bl      schedule_tail
-       get_thread_info tsk
-       ldr     r1, [tsk, #TI_FLAGS]            @ check for syscall tracing
-       mov     why, #1
-       tst     r1, #_TIF_SYSCALL_TRACE         @ are we tracing syscalls?
-       beq     ret_slow_syscall
-       mov     r1, sp
-       mov     r0, #1                          @ trace exit [IP = 1]
-       bl      syscall_trace
-       b       ret_slow_syscall
-       
-// FIXME - is this strictly necessary?
-#include "calls.S"
-
-/*=============================================================================
- * SWI handler
- *-----------------------------------------------------------------------------
- */
-
-       .align  5
-ENTRY(vector_swi)
-       save_user_regs
-       zero_fp
-       get_scno
-
-       enable_irqs ip
-
-       str     r4, [sp, #-S_OFF]!              @ push fifth arg
-
-       get_thread_info tsk
-       ldr     ip, [tsk, #TI_FLAGS]            @ check for syscall tracing
-       bic     scno, scno, #0xff000000         @ mask off SWI op-code
-       eor     scno, scno, #OS_NUMBER << 20    @ check OS number
-       adr     tbl, sys_call_table             @ load syscall table pointer
-       tst     ip, #_TIF_SYSCALL_TRACE         @ are we tracing syscalls?
-       bne     __sys_trace
-
-       adral   lr, ret_fast_syscall            @ set return address
-        orral  lr, lr, #PSR_I_BIT | MODE_SVC26 @ Force SVC mode on return
-       cmp     scno, #NR_syscalls              @ check upper syscall limit
-       ldrcc   pc, [tbl, scno, lsl #2]         @ call sys_* routine
-
-       add     r1, sp, #S_OFF
-2:     mov     why, #0                         @ no longer a real syscall
-       cmp     scno, #ARMSWI_OFFSET
-       eor     r0, scno, #OS_NUMBER << 20      @ put OS number back
-       bcs     arm_syscall     
-       b       sys_ni_syscall                  @ not private func
-
-       /*
-        * This is the really slow path.  We're going to be doing
-        * context switches, and waiting for our parent to respond.
-        */
-__sys_trace:
-       add     r1, sp, #S_OFF
-       mov     r0, #0                          @ trace entry [IP = 0]
-       bl      syscall_trace
-
-       adral   lr, __sys_trace_return          @ set return address
-        orral   lr, lr, #PSR_I_BIT | MODE_SVC26 @ Force SVC mode on return
-       add     r1, sp, #S_R0 + S_OFF           @ pointer to regs
-       cmp     scno, #NR_syscalls              @ check upper syscall limit
-       ldmccia r1, {r0 - r3}                   @ have to reload r0 - r3
-       ldrcc   pc, [tbl, scno, lsl #2]         @ call sys_* routine
-       b       2b
-
-__sys_trace_return:
-       str     r0, [sp, #S_R0 + S_OFF]!        @ save returned r0
-       mov     r1, sp
-       mov     r0, #1                          @ trace exit [IP = 1]
-       bl      syscall_trace
-       b       ret_slow_syscall
-
-       .align  5
-
-       .type   sys_call_table, #object
-ENTRY(sys_call_table)
-#include "calls.S"
-
-/*============================================================================
- * Special system call wrappers
- */
-@ r0 = syscall number
-@ r5 = syscall table
-               .type   sys_syscall, #function
-sys_syscall:
-               eor     scno, r0, #OS_NUMBER << 20
-               cmp     scno, #NR_syscalls      @ check range
-               stmleia sp, {r5, r6}            @ shuffle args
-               movle   r0, r1
-               movle   r1, r2
-               movle   r2, r3
-               movle   r3, r4
-               ldrle   pc, [tbl, scno, lsl #2]
-               b       sys_ni_syscall
-
-sys_fork_wrapper:
-               add     r0, sp, #S_OFF
-               b       sys_fork
-
-sys_vfork_wrapper:
-               add     r0, sp, #S_OFF
-               b       sys_vfork
-
-sys_execve_wrapper:
-               add     r3, sp, #S_OFF
-               b       sys_execve
-
-sys_clone_wapper:
-               add     r2, sp, #S_OFF
-               b       sys_clone
-
-sys_sigsuspend_wrapper:
-               add     r3, sp, #S_OFF
-               b       sys_sigsuspend
-
-sys_rt_sigsuspend_wrapper:
-               add     r2, sp, #S_OFF
-               b       sys_rt_sigsuspend
-
-sys_sigreturn_wrapper:
-               add     r0, sp, #S_OFF
-               b       sys_sigreturn
-
-sys_rt_sigreturn_wrapper:
-               add     r0, sp, #S_OFF
-               b       sys_rt_sigreturn
-
-sys_sigaltstack_wrapper:
-               ldr     r2, [sp, #S_OFF + S_SP]
-               b       do_sigaltstack
-
-/*
- * Note: off_4k (r5) is always units of 4K.  If we can't do the requested
- * offset, we return EINVAL.  FIXME - this lost some stuff from arm32 to
- * ifdefs. check it out.
- */
-sys_mmap2:
-               tst     r5, #((1 << (PAGE_SHIFT - 12)) - 1)
-               moveq   r5, r5, lsr #PAGE_SHIFT - 12
-               streq   r5, [sp, #4]
-               beq     do_mmap2
-               mov     r0, #-EINVAL
-               RETINSTR(mov,pc, lr)
-
-/*
- *  Design issues:
- *   - We have several modes that each vector can be called from,
- *     each with its own set of registers.  On entry to any vector,
- *     we *must* save the registers used in *that* mode.
- *
- *   - This code must be as fast as possible.
- *
- *  There are a few restrictions on the vectors:
- *   - the SWI vector cannot be called from *any* non-user mode
- *
- *   - the FP emulator is *never* called from *any* non-user mode undefined
- *     instruction.
- *
- */
-
-               .text
-
-               .macro handle_irq
-1:             mov     r4, #IOC_BASE
-               ldrb    r6, [r4, #0x24]            @ get high priority first
-               adr     r5, irq_prio_h
-               teq     r6, #0
-               ldreqb  r6, [r4, #0x14]            @ get low priority
-               adreq   r5, irq_prio_l
-
-                teq     r6, #0                     @ If an IRQ happened...
-                ldrneb  r0, [r5, r6]               @ get IRQ number
-                movne   r1, sp                     @ get struct pt_regs
-                adrne   lr, 1b                     @ Set return address to 1b
-                orrne   lr, lr, #PSR_I_BIT | MODE_SVC26  @ (and force SVC mode)
-                bne     asm_do_IRQ                 @ process IRQ (if asserted)
-               .endm
-
-
-/*
- * Interrupt table (incorporates priority)
- */
-               .macro  irq_prio_table
-irq_prio_l:    .byte    0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
-               .byte    4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
-               .byte    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-               .byte    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-               .byte    6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
-               .byte    6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
-               .byte    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-               .byte    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               .byte    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-irq_prio_h:    .byte    0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .byte   13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
-               .endm
-
-#if 1
-/*
- * Uncomment these if you wish to get more debugging into about data aborts.
- * FIXME - I bet we can find a way to encode these and keep performance.
- */
-#define FAULT_CODE_LDRSTRPOST  0x80
-#define FAULT_CODE_LDRSTRPRE   0x40
-#define FAULT_CODE_LDRSTRREG   0x20
-#define FAULT_CODE_LDMSTM      0x10
-#define FAULT_CODE_LDCSTC      0x08
-#endif
-#define FAULT_CODE_PREFETCH    0x04
-#define FAULT_CODE_WRITE       0x02
-#define FAULT_CODE_FORCECOW    0x01
-
-/*=============================================================================
- * Undefined FIQs
- *-----------------------------------------------------------------------------
- */
-_unexp_fiq:    ldr     sp, .LCfiq
-               mov     r12, #IOC_BASE
-               strb    r12, [r12, #0x38]       @ Disable FIQ register
-               teqp    pc, #PSR_I_BIT | PSR_F_BIT | MODE_SVC26
-               mov     r0, r0
-               stmfd   sp!, {r0 - r3, ip, lr}
-               adr     r0, Lfiqmsg
-               bl      printk
-               ldmfd   sp!, {r0 - r3, ip, lr}
-               teqp    pc, #PSR_I_BIT | PSR_F_BIT | MODE_FIQ26
-               mov     r0, r0
-               movs    pc, lr
-
-Lfiqmsg:       .ascii  "*** Unexpected FIQ\n\0"
-               .align
-
-.LCfiq:                .word   __temp_fiq
-.LCirq:                .word   __temp_irq
-
-/*=============================================================================
- * Undefined instruction handler
- *-----------------------------------------------------------------------------
- * Handles floating point instructions
- */
-vector_undefinstr:
-               tst     lr, #MODE_SVC26          @ did we come from a non-user mode?
-               bne     __und_svc                @ yes - deal with it.
-/* Otherwise, fall through for the user-space (common) case. */
-               save_user_regs
-               zero_fp                                 @ zero frame pointer
-               teqp    pc, #PSR_I_BIT | MODE_SVC26     @ disable IRQs
-.Lbug_undef:
-               ldr     r4, .LC2
-                ldr     pc, [r4]         @ Call FP module entry point
-/* FIXME - should we trap for a null pointer here? */
-
-/* The SVC mode case */
-__und_svc:     save_svc_regs                           @ Non-user mode
-                mask_pc r0, lr
-                and     r2, lr, #3
-                sub     r0, r0, #4
-                mov     r1, sp
-                bl      do_undefinstr
-                restore_svc_regs
-
-/* We get here if the FP emulator doesnt handle the undef instr.
- * If the insn WAS handled, the emulator jumps to ret_from_exception by itself/
- */
-               .globl  fpundefinstr 
-fpundefinstr:
-               mov     r0, lr
-               mov     r1, sp
-               teqp    pc, #MODE_SVC26
-               bl      do_undefinstr
-               b       ret_from_exception              @ Normal FP exit
-
-#if defined CONFIG_FPE_NWFPE || defined CONFIG_FPE_FASTFPE
-               /* The FPE is always present */
-               .equ    fpe_not_present, 0
-#else
-/* We get here if an undefined instruction happens and the floating
- * point emulator is not present.  If the offending instruction was
- * a WFS, we just perform a normal return as if we had emulated the
- * operation.  This is a hack to allow some basic userland binaries
- * to run so that the emulator module proper can be loaded. --philb
- * FIXME - probably a broken useless hack...
- */
-fpe_not_present:
-               adr     r10, wfs_mask_data
-               ldmia   r10, {r4, r5, r6, r7, r8}
-               ldr     r10, [sp, #S_PC]                @ Load PC
-               sub     r10, r10, #4
-               mask_pc r10, r10
-               ldrt    r10, [r10]                      @ get instruction
-               and     r5, r10, r5
-               teq     r5, r4                          @ Is it WFS?
-               beq     ret_from_exception
-               and     r5, r10, r8
-               teq     r5, r6                          @ Is it LDF/STF on sp or fp?
-               teqne   r5, r7
-               bne     fpundefinstr
-               tst     r10, #0x00200000                @ Does it have WB
-               beq     ret_from_exception
-               and     r4, r10, #255                   @ get offset
-               and     r6, r10, #0x000f0000
-               tst     r10, #0x00800000                @ +/-
-               ldr     r5, [sp, r6, lsr #14]           @ Load reg
-               rsbeq   r4, r4, #0
-               add     r5, r5, r4, lsl #2
-               str     r5, [sp, r6, lsr #14]           @ Save reg
-               b       ret_from_exception
-
-wfs_mask_data: .word   0x0e200110                      @ WFS/RFS
-               .word   0x0fef0fff
-               .word   0x0d0d0100                      @ LDF [sp]/STF [sp]
-               .word   0x0d0b0100                      @ LDF [fp]/STF [fp]
-               .word   0x0f0f0f00
-#endif
-
-.LC2:          .word   fp_enter
-
-/*=============================================================================
- * Prefetch abort handler
- *-----------------------------------------------------------------------------
- */
-#define DEBUG_UNDEF
-/* remember: lr = USR pc */
-vector_prefetch:
-               sub     lr, lr, #4
-               tst     lr, #MODE_SVC26
-               bne     __pabt_invalid
-               save_user_regs
-               teqp    pc, #MODE_SVC26         @ Enable IRQs...
-               mask_pc r0, lr                  @ Address of abort
-               mov     r1, sp                  @ Tasks registers
-               bl      do_PrefetchAbort
-               teq     r0, #0                  @ If non-zero, we believe this abort..
-               bne     ret_from_exception
-#ifdef DEBUG_UNDEF
-               adr     r0, t
-               bl      printk
-#endif
-               ldr     lr, [sp,#S_PC]          @ FIXME program to test this on.  I think its
-               b       .Lbug_undef             @ broken at the moment though!)
-
-__pabt_invalid:        save_svc_regs
-               mov     r0, sp                  @ Prefetch aborts are definitely *not*
-               mov     r1, #BAD_PREFETCH       @ allowed in non-user modes.  We cant
-               and     r2, lr, #3              @ recover from this problem.
-               b       bad_mode
-
-#ifdef DEBUG_UNDEF
-t:             .ascii "*** undef ***\r\n\0"
-               .align
-#endif
-
-/*=============================================================================
- * Address exception handler
- *-----------------------------------------------------------------------------
- * These aren't too critical.
- * (they're not supposed to happen).
- * In order to debug the reason for address exceptions in non-user modes,
- * we have to obtain all the registers so that we can see what's going on.
- */
-
-vector_addrexcptn:
-               sub     lr, lr, #8
-               tst     lr, #3
-               bne     Laddrexcptn_not_user
-               save_user_regs
-               teq     pc, #MODE_SVC26
-               mask_pc r0, lr                  @ Point to instruction
-               mov     r1, sp                  @ Point to registers
-               mov     r2, #0x400
-               mov     lr, pc
-               bl      do_excpt
-               b       ret_from_exception
-
-Laddrexcptn_not_user:
-               save_svc_regs
-               and     r2, lr, #3
-               teq     r2, #3
-               bne     Laddrexcptn_illegal_mode
-               teqp    pc, #MODE_SVC26
-               mask_pc r0, lr
-               mov     r1, sp
-               orr     r2, r2, #0x400
-               bl      do_excpt
-               ldmia   sp, {r0 - lr}           @ I cant remember the reason I changed this...
-               add     sp, sp, #15*4
-               movs    pc, lr
-
-Laddrexcptn_illegal_mode:
-               mov     r0, sp
-               str     lr, [sp, #-4]!
-               orr     r1, r2, #PSR_I_BIT | PSR_F_BIT
-               teqp    r1, #0                  @ change into mode (wont be user mode)
-               mov     r0, r0
-               mov     r1, r8                  @ Any register from r8 - r14 can be banked
-               mov     r2, r9
-               mov     r3, r10
-               mov     r4, r11
-               mov     r5, r12
-               mov     r6, r13
-               mov     r7, r14
-               teqp    pc, #PSR_F_BIT | MODE_SVC26 @ back to svc
-               mov     r0, r0
-               stmfd   sp!, {r1-r7}
-               ldmia   r0, {r0-r7}
-               stmfd   sp!, {r0-r7}
-               mov     r0, sp
-               mov     r1, #BAD_ADDREXCPTN
-               b       bad_mode
-
-/*=============================================================================
- * Interrupt (IRQ) handler
- *-----------------------------------------------------------------------------
- * Note: if the IRQ was taken whilst in user mode, then *no* kernel routine
- * is running, so do not have to save svc lr.
- *
- * Entered in IRQ mode.
- */
-
-vector_IRQ:    ldr     sp, .LCirq         @ Setup some temporary stack
-                sub     lr, lr, #4
-                str     lr, [sp]           @ push return address
-
-               tst     lr, #3
-               bne     __irq_non_usr
-
-__irq_usr:     teqp    pc, #PSR_I_BIT | MODE_SVC26     @ Enter SVC mode
-               mov     r0, r0
-
-               ldr     lr, .LCirq
-               ldr     lr, [lr]           @ Restore lr for jump back to USR
-
-               save_user_regs
-
-               handle_irq
-
-               mov     why, #0
-               get_thread_info tsk
-               b       ret_to_user
-
-@ Place the IRQ priority table here so that the handle_irq macros above
-@ and below here can access it.
-
-               irq_prio_table
-
-__irq_non_usr: teqp    pc, #PSR_I_BIT | MODE_SVC26     @ Enter SVC mode
-               mov     r0, r0
-
-               save_svc_regs_irq
-
-                and    r2, lr, #3
-               teq     r2, #3
-               bne     __irq_invalid                @ IRQ not from SVC mode
-
-               handle_irq
-
-               restore_svc_regs
-
-__irq_invalid: mov     r0, sp
-               mov     r1, #BAD_IRQ
-               b       bad_mode
-
-/*=============================================================================
- * Data abort handler code
- *-----------------------------------------------------------------------------
- *
- * This handles both exceptions from user and SVC modes, computes the address
- *  range of the problem, and does any correction that is required.  It then
- *  calls the kernel data abort routine.
- *
- * This is where I wish that the ARM would tell you which address aborted.
- */
-
-vector_data:   sub     lr, lr, #8              @ Correct lr
-               tst     lr, #3
-               bne     Ldata_not_user
-               save_user_regs
-               teqp    pc, #MODE_SVC26
-               mask_pc r0, lr
-               bl      Ldata_do
-               b       ret_from_exception
-
-Ldata_not_user:
-               save_svc_regs
-               and     r2, lr, #3
-               teq     r2, #3
-               bne     Ldata_illegal_mode
-               tst     lr, #PSR_I_BIT
-               teqeqp  pc, #MODE_SVC26
-               mask_pc r0, lr
-               bl      Ldata_do
-               restore_svc_regs
-
-Ldata_illegal_mode:
-               mov     r0, sp
-               mov     r1, #BAD_DATA
-               b       bad_mode
-
-Ldata_do:      mov     r3, sp
-               ldr     r4, [r0]                @ Get instruction
-               mov     r2, #0
-               tst     r4, #1 << 20            @ Check to see if it is a write instruction
-               orreq   r2, r2, #FAULT_CODE_WRITE @ Indicate write instruction
-               mov     r1, r4, lsr #22         @ Now branch to the relevent processing routine
-               and     r1, r1, #15 << 2
-               add     pc, pc, r1
-               movs    pc, lr
-               b       Ldata_unknown
-               b       Ldata_unknown
-               b       Ldata_unknown
-               b       Ldata_unknown
-               b       Ldata_ldrstr_post       @ ldr   rd, [rn], #m
-               b       Ldata_ldrstr_numindex   @ ldr   rd, [rn, #m]    @ RegVal
-               b       Ldata_ldrstr_post       @ ldr   rd, [rn], rm
-               b       Ldata_ldrstr_regindex   @ ldr   rd, [rn, rm]
-               b       Ldata_ldmstm            @ ldm*a rn, <rlist>
-               b       Ldata_ldmstm            @ ldm*b rn, <rlist>
-               b       Ldata_unknown
-               b       Ldata_unknown
-               b       Ldata_ldrstr_post       @ ldc   rd, [rn], #m    @ Same as ldr   rd, [rn], #m
-               b       Ldata_ldcstc_pre        @ ldc   rd, [rn, #m]
-               b       Ldata_unknown
-Ldata_unknown: @ Part of jumptable
-               mov     r0, r1
-               mov     r1, r4
-               mov     r2, r3
-               b       baddataabort
-
-Ldata_ldrstr_post:
-               mov     r0, r4, lsr #14         @ Get Rn
-               and     r0, r0, #15 << 2        @ Mask out reg.
-               teq     r0, #15 << 2
-               ldr     r0, [r3, r0]            @ Get register
-               biceq   r0, r0, #PCMASK
-               mov     r1, r0
-#ifdef FAULT_CODE_LDRSTRPOST
-               orr     r2, r2, #FAULT_CODE_LDRSTRPOST
-#endif
-               b       do_DataAbort
-
-Ldata_ldrstr_numindex:
-               mov     r0, r4, lsr #14         @ Get Rn
-               and     r0, r0, #15 << 2        @ Mask out reg.
-               teq     r0, #15 << 2
-               ldr     r0, [r3, r0]            @ Get register
-               mov     r1, r4, lsl #20
-               biceq   r0, r0, #PCMASK
-               tst     r4, #1 << 23
-               addne   r0, r0, r1, lsr #20
-               subeq   r0, r0, r1, lsr #20
-               mov     r1, r0
-#ifdef FAULT_CODE_LDRSTRPRE
-               orr     r2, r2, #FAULT_CODE_LDRSTRPRE
-#endif
-               b       do_DataAbort
-
-Ldata_ldrstr_regindex:
-               mov     r0, r4, lsr #14         @ Get Rn
-               and     r0, r0, #15 << 2        @ Mask out reg.
-               teq     r0, #15 << 2
-               ldr     r0, [r3, r0]            @ Get register
-               and     r7, r4, #15
-               biceq   r0, r0, #PCMASK
-               teq     r7, #15                 @ Check for PC
-               ldr     r7, [r3, r7, lsl #2]    @ Get Rm
-               and     r8, r4, #0x60           @ Get shift types
-               biceq   r7, r7, #PCMASK
-               mov     r9, r4, lsr #7          @ Get shift amount
-               and     r9, r9, #31
-               teq     r8, #0
-               moveq   r7, r7, lsl r9
-               teq     r8, #0x20               @ LSR shift
-               moveq   r7, r7, lsr r9
-               teq     r8, #0x40               @ ASR shift
-               moveq   r7, r7, asr r9
-               teq     r8, #0x60               @ ROR shift
-               moveq   r7, r7, ror r9
-               tst     r4, #1 << 23
-               addne   r0, r0, r7
-               subeq   r0, r0, r7              @ Apply correction
-               mov     r1, r0
-#ifdef FAULT_CODE_LDRSTRREG
-               orr     r2, r2, #FAULT_CODE_LDRSTRREG
-#endif
-               b       do_DataAbort
-
-Ldata_ldmstm:
-               mov     r7, #0x11
-               orr     r7, r7, r7, lsl #8
-               and     r0, r4, r7
-               and     r1, r4, r7, lsl #1
-               add     r0, r0, r1, lsr #1
-               and     r1, r4, r7, lsl #2
-               add     r0, r0, r1, lsr #2
-               and     r1, r4, r7, lsl #3
-               add     r0, r0, r1, lsr #3
-               add     r0, r0, r0, lsr #8
-               add     r0, r0, r0, lsr #4
-               and     r7, r0, #15             @ r7 = no. of registers to transfer.
-               mov     r5, r4, lsr #14         @ Get Rn
-               and     r5, r5, #15 << 2
-               ldr     r0, [r3, r5]            @ Get reg
-               eor     r6, r4, r4, lsl #2
-               tst     r6, #1 << 23            @ Check inc/dec ^ writeback
-               rsbeq   r7, r7, #0
-               add     r7, r0, r7, lsl #2      @ Do correction (signed)
-               subne   r1, r7, #1
-               subeq   r1, r0, #1
-               moveq   r0, r7
-               tst     r4, #1 << 21            @ Check writeback
-               strne   r7, [r3, r5]
-               eor     r6, r4, r4, lsl #1
-               tst     r6, #1 << 24            @ Check Pre/Post ^ inc/dec
-               addeq   r0, r0, #4
-               addeq   r1, r1, #4
-               teq     r5, #15*4               @ CHECK FOR PC
-               biceq   r1, r1, #PCMASK
-               biceq   r0, r0, #PCMASK
-#ifdef FAULT_CODE_LDMSTM
-               orr     r2, r2, #FAULT_CODE_LDMSTM
-#endif
-               b       do_DataAbort
-
-Ldata_ldcstc_pre:
-               mov     r0, r4, lsr #14         @ Get Rn
-               and     r0, r0, #15 << 2        @ Mask out reg.
-               teq     r0, #15 << 2
-               ldr     r0, [r3, r0]            @ Get register
-               mov     r1, r4, lsl #24         @ Get offset
-               biceq   r0, r0, #PCMASK
-               tst     r4, #1 << 23
-               addne   r0, r0, r1, lsr #24
-               subeq   r0, r0, r1, lsr #24
-               mov     r1, r0
-#ifdef FAULT_CODE_LDCSTC
-               orr     r2, r2, #FAULT_CODE_LDCSTC
-#endif
-               b       do_DataAbort
-
-
-/*
- * This is the return code to user mode for abort handlers
- */
-ENTRY(ret_from_exception)
-               get_thread_info tsk
-               mov     why, #0
-               b       ret_to_user
-
-               .data
-ENTRY(fp_enter)
-               .word   fpe_not_present
-               .text
-/*
- * Register switch for older 26-bit only ARMs
- */
-ENTRY(__switch_to)
-               add     r0, r0, #TI_CPU_SAVE
-               stmia   r0, {r4 - sl, fp, sp, lr}
-               add     r1, r1, #TI_CPU_SAVE
-               ldmia   r1, {r4 - sl, fp, sp, pc}^
-
-/*
- *=============================================================================
- *             Low-level interface code
- *-----------------------------------------------------------------------------
- *             Trap initialisation
- *-----------------------------------------------------------------------------
- *
- * Note - FIQ code has changed.  The default is a couple of words in 0x1c, 0x20
- * that call _unexp_fiq.  Nowever, we now copy the FIQ routine to 0x1c (removes
- * some excess cycles).
- *
- * What we need to put into 0-0x1c are branches to branch to the kernel.
- */
-
-               .section ".init.text",#alloc,#execinstr
-
-.Ljump_addresses:
-               swi     SYS_ERROR0
-               .word   vector_undefinstr       - 12
-               .word   vector_swi              - 16
-               .word   vector_prefetch         - 20
-               .word   vector_data             - 24
-               .word   vector_addrexcptn       - 28
-               .word   vector_IRQ              - 32
-               .word   _unexp_fiq              - 36
-               b       . + 8
-/*
- * initialise the trap system
- */
-ENTRY(__trap_init)
-               stmfd   sp!, {r4 - r7, lr}
-               adr     r1, .Ljump_addresses
-               ldmia   r1, {r1 - r7, ip, lr}
-               orr     r2, lr, r2, lsr #2
-               orr     r3, lr, r3, lsr #2
-               orr     r4, lr, r4, lsr #2
-               orr     r5, lr, r5, lsr #2
-               orr     r6, lr, r6, lsr #2
-               orr     r7, lr, r7, lsr #2
-               orr     ip, lr, ip, lsr #2
-               mov     r0, #0
-               stmia   r0, {r1 - r7, ip}
-               ldmfd   sp!, {r4 - r7, pc}^
-
-               .bss
-__temp_irq:    .space  4                               @ saved lr_irq
-__temp_fiq:    .space  128
diff --git a/arch/arm26/kernel/fiq.c b/arch/arm26/kernel/fiq.c
deleted file mode 100644 (file)
index c4776c9..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/fiq.c
- *
- *  Copyright (C) 1998 Russell King
- *  Copyright (C) 1998, 1999 Phil Blundell
- *  Copyright (C) 2003 Ian Molton
- *
- *  FIQ support written by Philip Blundell <philb@gnu.org>, 1998.
- *
- *  FIQ support re-written by Russell King to be more generic
- *
- * We now properly support a method by which the FIQ handlers can
- * be stacked onto the vector.  We still do not support sharing
- * the FIQ vector itself.
- *
- * Operation is as follows:
- *  1. Owner A claims FIQ:
- *     - default_fiq relinquishes control.
- *  2. Owner A:
- *     - inserts code.
- *     - sets any registers,
- *     - enables FIQ.
- *  3. Owner B claims FIQ:
- *     - if owner A has a relinquish function.
- *       - disable FIQs.
- *       - saves any registers.
- *       - returns zero.
- *  4. Owner B:
- *     - inserts code.
- *     - sets any registers,
- *     - enables FIQ.
- *  5. Owner B releases FIQ:
- *     - Owner A is asked to reacquire FIQ:
- *      - inserts code.
- *      - restores saved registers.
- *      - enables FIQ.
- *  6. Goto 3
- */
-#include <linux/module.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/init.h>
-#include <linux/seq_file.h>
-
-#include <asm/fiq.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/pgalloc.h>
-#include <asm/system.h>
-#include <asm/uaccess.h>
-
-#define FIQ_VECTOR (vectors_base() + 0x1c)
-
-static unsigned long no_fiq_insn;
-
-#define unprotect_page_0()
-#define protect_page_0()
-
-/* Default reacquire function
- * - we always relinquish FIQ control
- * - we always reacquire FIQ control
- */
-static int fiq_def_op(void *ref, int relinquish)
-{
-       if (!relinquish) {
-               unprotect_page_0();
-               *(unsigned long *)FIQ_VECTOR = no_fiq_insn;
-               protect_page_0();
-       }
-
-       return 0;
-}
-
-static struct fiq_handler default_owner = {
-       .name   = "default",
-       .fiq_op = fiq_def_op,
-};
-
-static struct fiq_handler *current_fiq = &default_owner;
-
-int show_fiq_list(struct seq_file *p, void *v)
-{
-       if (current_fiq != &default_owner)
-               seq_printf(p, "FIQ:              %s\n", current_fiq->name);
-
-       return 0;
-}
-
-void set_fiq_handler(void *start, unsigned int length)
-{
-       unprotect_page_0();
-
-       memcpy((void *)FIQ_VECTOR, start, length);
-
-       protect_page_0();
-}
-
-/*
- * Taking an interrupt in FIQ mode is death, so both these functions
- * disable irqs for the duration. 
- */
-void set_fiq_regs(struct pt_regs *regs)
-{
-       register unsigned long tmp, tmp2;
-       __asm__ volatile (
-       "mov    %0, pc                                  \n"
-       "bic    %1, %0, #0x3                            \n"
-       "orr    %1, %1, %3                              \n"
-       "teqp   %1, #0          @ select FIQ mode       \n"
-       "mov    r0, r0                                  \n"
-       "ldmia  %2, {r8 - r14}                          \n"
-       "teqp   %0, #0          @ return to SVC mode    \n"
-       "mov    r0, r0                                  "
-       : "=&r" (tmp), "=&r" (tmp2)
-       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26)
-       /* These registers aren't modified by the above code in a way
-          visible to the compiler, but we mark them as clobbers anyway
-          so that GCC won't put any of the input or output operands in
-          them.  */
-       : "r8", "r9", "r10", "r11", "r12", "r13", "r14");
-}
-
-void get_fiq_regs(struct pt_regs *regs)
-{
-       register unsigned long tmp, tmp2;
-       __asm__ volatile (
-       "mov    %0, pc                                  \n"
-       "bic    %1, %0, #0x3                            \n"
-       "orr    %1, %1, %3                              \n"
-       "teqp   %1, #0          @ select FIQ mode       \n"
-       "mov    r0, r0                                  \n"
-       "stmia  %2, {r8 - r14}                          \n"
-       "teqp   %0, #0          @ return to SVC mode    \n"
-       "mov    r0, r0                                  "
-       : "=&r" (tmp), "=&r" (tmp2)
-       : "r" (&regs->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | MODE_FIQ26)
-       /* These registers aren't modified by the above code in a way
-          visible to the compiler, but we mark them as clobbers anyway
-          so that GCC won't put any of the input or output operands in
-          them.  */
-       : "r8", "r9", "r10", "r11", "r12", "r13", "r14");
-}
-
-int claim_fiq(struct fiq_handler *f)
-{
-       int ret = 0;
-
-       if (current_fiq) {
-               ret = -EBUSY;
-
-               if (current_fiq->fiq_op != NULL)
-                       ret = current_fiq->fiq_op(current_fiq->dev_id, 1);
-       }
-
-       if (!ret) {
-               f->next = current_fiq;
-               current_fiq = f;
-       }
-
-       return ret;
-}
-
-void release_fiq(struct fiq_handler *f)
-{
-       if (current_fiq != f) {
-               printk(KERN_ERR "%s FIQ trying to release %s FIQ\n",
-                      f->name, current_fiq->name);
-#ifdef CONFIG_DEBUG_ERRORS
-               __backtrace();
-#endif
-               return;
-       }
-
-       do
-               current_fiq = current_fiq->next;
-       while (current_fiq->fiq_op(current_fiq->dev_id, 0));
-}
-
-void enable_fiq(int fiq)
-{
-       enable_irq(fiq + FIQ_START);
-}
-
-void disable_fiq(int fiq)
-{
-       disable_irq(fiq + FIQ_START);
-}
-
-EXPORT_SYMBOL(set_fiq_handler);
-EXPORT_SYMBOL(set_fiq_regs);
-EXPORT_SYMBOL(get_fiq_regs);
-EXPORT_SYMBOL(claim_fiq);
-EXPORT_SYMBOL(release_fiq);
-EXPORT_SYMBOL(enable_fiq);
-EXPORT_SYMBOL(disable_fiq);
-
-void __init init_FIQ(void)
-{
-       no_fiq_insn = *(unsigned long *)FIQ_VECTOR;
-       set_fs(get_fs());
-}
diff --git a/arch/arm26/kernel/head.S b/arch/arm26/kernel/head.S
deleted file mode 100644 (file)
index 93575e0..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/head.S
- *
- *  Copyright (C) 1994-2000 Russell King
- *  Copyright (C) 2003 Ian Molton
- *
- * 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.
- *
- *  26-bit kernel startup code
- */
-#include <linux/linkage.h>
-#include <asm/mach-types.h>
-
-               .globl  swapper_pg_dir
-               .equ    swapper_pg_dir, 0x0207d000
-
-/*
- * Entry point.
- */
-               .section ".init.text",#alloc,#execinstr
-ENTRY(stext)
-
-__entry:
-               cmp     pc, #0x02000000
-               ldrlt   pc, LC0                 @ if 0x01800000, call at 0x02080000
-               teq     r0, #0                  @ Check for old calling method
-               blne    oldparams               @ Move page if old
-
-               adr     r0, LC0
-               ldmib   r0, {r2-r5, sp}         @ Setup stack (and fetch other values)
-
-               mov     r0, #0                  @ Clear BSS
-1:             cmp     r2, r3
-               strcc   r0, [r2], #4
-               bcc     1b
-
-               bl      detect_proc_type
-               str     r0, [r4]
-               bl      detect_arch_type
-               str     r0, [r5]
-
-#ifdef CONFIG_XIP_KERNEL
-               ldr     r3, ETEXT                       @ data section copy
-               ldr     r4, SDATA
-               ldr     r5, EDATA
-1:
-               ldr     r6, [r3], #4
-               str     r6, [r4], #4
-               cmp     r4, r5
-               blt     1b
-#endif
-               mov     fp, #0
-               b       start_kernel
-
-LC0:           .word   _stext
-               .word   __bss_start             @ r2
-               .word   _end                    @ r3
-               .word   processor_id            @ r4
-               .word   __machine_arch_type     @ r5
-               .word   init_thread_union+8192  @ sp
-#ifdef CONFIG_XIP_KERNEL
-ETEXT:         .word   _endtext
-SDATA:         .word   _sdata
-EDATA:         .word   __bss_start
-#endif
-
-arm2_id:       .long   0x41560200  @ ARM2 and 250 dont have a CPUID
-arm250_id:     .long   0x41560250  @ So we create some after probing for them
-               .align
-
-oldparams:     mov     r4, #0x02000000
-               add     r3, r4, #0x00080000
-               add     r4, r4, #0x0007c000
-1:             ldmia   r0!, {r5 - r12}
-               stmia   r4!, {r5 - r12}
-               cmp     r4, r3
-               blt     1b
-               mov     pc, lr
-
-/*
- * We need some way to automatically detect the difference between
- * these two machines.  Unfortunately, it is not possible to detect
- * the presence of the SuperIO chip, because that will hang the old
- * Archimedes machines solid.
- */
-/* DAG: Outdated, these have been combined !!!!!!! */
-detect_arch_type:
-#if defined(CONFIG_ARCH_ARC)
-               mov     r0, #MACH_TYPE_ARCHIMEDES
-#elif defined(CONFIG_ARCH_A5K)
-               mov     r0, #MACH_TYPE_A5K
-#endif
-               mov     pc, lr
-
-detect_proc_type:
-               mov     ip, lr
-               mov     r2, #0xea000000         @ Point undef instr to continuation
-               adr     r0, continue - 12
-               orr     r0, r2, r0, lsr #2
-               mov     r1, #0
-               str     r0, [r1, #4]
-               ldr     r0, arm2_id
-               swp     r2, r2, [r1]            @ check for swp (ARM2 cant)
-               ldr     r0, arm250_id
-               mrc     15, 0, r3, c0, c0       @ check for CP#15 (ARM250 cant)
-               mov     r0, r3
-continue:      mov     r2, #0xeb000000         @ Make undef vector loop
-               sub     r2, r2, #2
-               str     r2, [r1, #4]
-               mov     pc, ip
diff --git a/arch/arm26/kernel/init_task.c b/arch/arm26/kernel/init_task.c
deleted file mode 100644 (file)
index 4191565..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/init_task.c
- *
- * Copyright (C) 2003 Ian Molton
- *
- */
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <linux/sched.h>
-#include <linux/init.h>
-#include <linux/init_task.h>
-#include <linux/mqueue.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-
-static struct fs_struct init_fs = INIT_FS;
-static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
-static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
-struct mm_struct init_mm = INIT_MM(init_mm);
-
-EXPORT_SYMBOL(init_mm);
-
-/*
- * Initial thread structure.
- *
- * We need to make sure that this is 8192-byte aligned due to the
- * way process stacks are handled. This is done by making sure
- * the linker maps this in the .text segment right after head.S,
- * and making the linker scripts ensure the proper alignment.
- *
- * FIXME - should this be 32K alignment on arm26?
- *
- * The things we do for performance...
- */
-union thread_union init_thread_union
-       __attribute__((__section__(".init.task"))) =
-               { INIT_THREAD_INFO(init_task) };
-
-/*
- * Initial task structure.
- *
- * All other task structs will be allocated on slabs in fork.c
- */
-struct task_struct init_task = INIT_TASK(init_task);
-
-EXPORT_SYMBOL(init_task);
diff --git a/arch/arm26/kernel/irq.c b/arch/arm26/kernel/irq.c
deleted file mode 100644 (file)
index 2ffe695..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-/*
- *  linux/arch/arm/kernel/irq.c
- *
- *  Copyright (C) 1992 Linus Torvalds
- *  Modifications for ARM processor Copyright (C) 1995-2000 Russell King.
- *  'Borrowed' for ARM26 and (C) 2003 Ian Molton.
- *
- * 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.
- *
- *  This file contains the code used by various IRQ handling routines:
- *  asking for different IRQ's should be done through these routines
- *  instead of just grabbing them. Thus setups with different IRQ numbers
- *  shouldn't result in any weird surprises, and installing new handlers
- *  should be easier.
- *
- *  IRQ's are in fact implemented a bit like signal handlers for the kernel.
- *  Naturally it's not a 1:1 relation, but there are similarities.
- */
-#include <linux/module.h>
-#include <linux/ptrace.h>
-#include <linux/kernel_stat.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/ioport.h>
-#include <linux/interrupt.h>
-#include <linux/slab.h>
-#include <linux/random.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#include <linux/seq_file.h>
-#include <linux/errno.h>
-
-#include <asm/irq.h>
-#include <asm/system.h>
-#include <asm/irqchip.h>
-
-//FIXME - this ought to be in a header IMO
-void __init arc_init_irq(void);
-
-/*
- * Maximum IRQ count.  Currently, this is arbitary.  However, it should
- * not be set too low to prevent false triggering.  Conversely, if it
- * is set too high, then you could miss a stuck IRQ.
- *
- * FIXME Maybe we ought to set a timer and re-enable the IRQ at a later time?
- */
-#define MAX_IRQ_CNT    100000
-
-static volatile unsigned long irq_err_count;
-static DEFINE_SPINLOCK(irq_controller_lock);
-
-struct irqdesc irq_desc[NR_IRQS];
-
-/*
- * Dummy mask/unmask handler
- */
-void dummy_mask_unmask_irq(unsigned int irq)
-{
-}
-
-void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
-{
-       irq_err_count += 1;
-       printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq);
-}
-
-static struct irqchip bad_chip = {
-       .ack    = dummy_mask_unmask_irq,
-       .mask   = dummy_mask_unmask_irq,
-       .unmask = dummy_mask_unmask_irq,
-};
-
-static struct irqdesc bad_irq_desc = {
-       .chip   = &bad_chip,
-       .handle = do_bad_IRQ,
-       .depth  = 1,
-};
-
-/**
- *     disable_irq - disable an irq and wait for completion
- *     @irq: Interrupt to disable
- *
- *     Disable the selected interrupt line.  We do this lazily.
- *
- *     This function may be called from IRQ context.
- */
-void disable_irq(unsigned int irq)
-{
-       struct irqdesc *desc = irq_desc + irq;
-       unsigned long flags;
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       if (!desc->depth++)
-               desc->enabled = 0;
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-EXPORT_SYMBOL(disable_irq);
-
-void disable_irq_nosync(unsigned int irq) __attribute__((alias("disable_irq")));
-
-EXPORT_SYMBOL(disable_irq_nosync);
-
-/**
- *     enable_irq - enable interrupt handling on an irq
- *     @irq: Interrupt to enable
- *
- *     Re-enables the processing of interrupts on this IRQ line.
- *     Note that this may call the interrupt handler, so you may
- *     get unexpected results if you hold IRQs disabled.
- *
- *     This function may be called from IRQ context.
- */
-void enable_irq(unsigned int irq)
-{
-       struct irqdesc *desc = irq_desc + irq;
-       unsigned long flags;
-       int pending = 0;
-
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       if (unlikely(!desc->depth)) {
-               printk("enable_irq(%u) unbalanced from %p\n", irq,
-                       __builtin_return_address(0)); //FIXME bum addresses reported - why?
-       } else if (!--desc->depth) {
-               desc->probing = 0;
-               desc->enabled = 1;
-               desc->chip->unmask(irq);
-               pending = desc->pending;
-               desc->pending = 0;
-               /*
-                * If the interrupt was waiting to be processed,
-                * retrigger it.
-                */
-               if (pending)
-                       desc->chip->rerun(irq);
-       }
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-EXPORT_SYMBOL(enable_irq);
-
-int show_interrupts(struct seq_file *p, void *v)
-{
-       int i = *(loff_t *) v;
-       struct irqaction * action;
-
-       if (i < NR_IRQS) {
-               action = irq_desc[i].action;
-               if (!action)
-                       goto out;
-               seq_printf(p, "%3d: %10u ", i, kstat_irqs(i));
-               seq_printf(p, "  %s", action->name);
-               for (action = action->next; action; action = action->next) {
-                       seq_printf(p, ", %s", action->name);
-               }
-               seq_putc(p, '\n');
-       } else if (i == NR_IRQS) {
-               show_fiq_list(p, v);
-               seq_printf(p, "Err: %10lu\n", irq_err_count);
-       }
-out:
-       return 0;
-}
-
-/*
- * IRQ lock detection.
- *
- * Hopefully, this should get us out of a few locked situations.
- * However, it may take a while for this to happen, since we need
- * a large number if IRQs to appear in the same jiffie with the
- * same instruction pointer (or within 2 instructions).
- */
-static int check_irq_lock(struct irqdesc *desc, int irq, struct pt_regs *regs)
-{
-       unsigned long instr_ptr = instruction_pointer(regs);
-
-       if (desc->lck_jif == jiffies &&
-           desc->lck_pc >= instr_ptr && desc->lck_pc < instr_ptr + 8) {
-               desc->lck_cnt += 1;
-
-               if (desc->lck_cnt > MAX_IRQ_CNT) {
-                       printk(KERN_ERR "IRQ LOCK: IRQ%d is locking the system, disabled\n", irq);
-                       return 1;
-               }
-       } else {
-               desc->lck_cnt = 0;
-               desc->lck_pc  = instruction_pointer(regs);
-               desc->lck_jif = jiffies;
-       }
-       return 0;
-}
-
-static void
-__do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
-{
-       unsigned int status;
-       int ret;
-
-       spin_unlock(&irq_controller_lock);
-       if (!(action->flags & IRQF_DISABLED))
-               local_irq_enable();
-
-       status = 0;
-       do {
-               ret = action->handler(irq, action->dev_id, regs);
-               if (ret == IRQ_HANDLED)
-                       status |= action->flags;
-               action = action->next;
-       } while (action);
-
-       if (status & IRQF_SAMPLE_RANDOM)
-               add_interrupt_randomness(irq);
-
-       spin_lock_irq(&irq_controller_lock);
-}
-
-/*
- * This is for software-decoded IRQs.  The caller is expected to
- * handle the ack, clear, mask and unmask issues.
- */
-void
-do_simple_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
-{
-       struct irqaction *action;
-       const int cpu = smp_processor_id();
-
-       desc->triggered = 1;
-
-       kstat_cpu(cpu).irqs[irq]++;
-
-       action = desc->action;
-       if (action)
-               __do_irq(irq, desc->action, regs);
-}
-
-/*
- * Most edge-triggered IRQ implementations seem to take a broken
- * approach to this.  Hence the complexity.
- */
-void
-do_edge_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
-{
-       const int cpu = smp_processor_id();
-
-       desc->triggered = 1;
-
-       /*
-        * If we're currently running this IRQ, or its disabled,
-        * we shouldn't process the IRQ.  Instead, turn on the
-        * hardware masks.
-        */
-       if (unlikely(desc->running || !desc->enabled))
-               goto running;
-
-       /*
-        * Acknowledge and clear the IRQ, but don't mask it.
-        */
-       desc->chip->ack(irq);
-
-       /*
-        * Mark the IRQ currently in progress.
-        */
-       desc->running = 1;
-
-       kstat_cpu(cpu).irqs[irq]++;
-
-       do {
-               struct irqaction *action;
-
-               action = desc->action;
-               if (!action)
-                       break;
-
-               if (desc->pending && desc->enabled) {
-                       desc->pending = 0;
-                       desc->chip->unmask(irq);
-               }
-
-               __do_irq(irq, action, regs);
-       } while (desc->pending);
-
-       desc->running = 0;
-
-       /*
-        * If we were disabled or freed, shut down the handler.
-        */
-       if (likely(desc->action && !check_irq_lock(desc, irq, regs)))
-               return;
-
- running:
-       /*
-        * We got another IRQ while this one was masked or
-        * currently running.  Delay it.
-        */
-       desc->pending = 1;
-       desc->chip->mask(irq);
-       desc->chip->ack(irq);
-}
-
-/*
- * Level-based IRQ handler.  Nice and simple.
- */
-void
-do_level_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
-{
-       struct irqaction *action;
-       const int cpu = smp_processor_id();
-
-       desc->triggered = 1;
-
-       /*
-        * Acknowledge, clear _AND_ disable the interrupt.
-        */
-       desc->chip->ack(irq);
-
-       if (likely(desc->enabled)) {
-               kstat_cpu(cpu).irqs[irq]++;
-
-               /*
-                * Return with this interrupt masked if no action
-                */
-               action = desc->action;
-               if (action) {
-                       __do_irq(irq, desc->action, regs);
-
-                       if (likely(desc->enabled &&
-                                  !check_irq_lock(desc, irq, regs)))
-                               desc->chip->unmask(irq);
-               }
-       }
-}
-
-/*
- * do_IRQ handles all hardware IRQ's.  Decoded IRQs should not
- * come via this function.  Instead, they should provide their
- * own 'handler'
- */
-asmlinkage void asm_do_IRQ(int irq, struct pt_regs *regs)
-{
-       struct irqdesc *desc = irq_desc + irq;
-
-       /*
-        * Some hardware gives randomly wrong interrupts.  Rather
-        * than crashing, do something sensible.
-        */
-       if (irq >= NR_IRQS)
-               desc = &bad_irq_desc;
-
-       irq_enter();
-       spin_lock(&irq_controller_lock);
-       desc->handle(irq, desc, regs);
-       spin_unlock(&irq_controller_lock);
-       irq_exit();
-}
-
-void __set_irq_handler(unsigned int irq, irq_handler_t handle, int is_chained)
-{
-       struct irqdesc *desc;
-       unsigned long flags;
-
-       if (irq >= NR_IRQS) {
-               printk(KERN_ERR "Trying to install handler for IRQ%d\n", irq);
-               return;
-       }
-
-       if (handle == NULL)
-               handle = do_bad_IRQ;
-
-       desc = irq_desc + irq;
-
-       if (is_chained && desc->chip == &bad_chip)
-               printk(KERN_WARNING "Trying to install chained handler for IRQ%d\n", irq);
-
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       if (handle == do_bad_IRQ) {
-               desc->chip->mask(irq);
-               desc->chip->ack(irq);
-               desc->depth = 1;
-               desc->enabled = 0;
-       }
-       desc->handle = handle;
-       if (handle != do_bad_IRQ && is_chained) {
-               desc->valid = 0;
-               desc->probe_ok = 0;
-               desc->depth = 0;
-               desc->chip->unmask(irq);
-       }
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-
-void set_irq_chip(unsigned int irq, struct irqchip *chip)
-{
-       struct irqdesc *desc;
-       unsigned long flags;
-
-       if (irq >= NR_IRQS) {
-               printk(KERN_ERR "Trying to install chip for IRQ%d\n", irq);
-               return;
-       }
-
-       if (chip == NULL)
-               chip = &bad_chip;
-
-       desc = irq_desc + irq;
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       desc->chip = chip;
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-
-int set_irq_type(unsigned int irq, unsigned int type)
-{
-       struct irqdesc *desc;
-       unsigned long flags;
-       int ret = -ENXIO;
-
-       if (irq >= NR_IRQS) {
-               printk(KERN_ERR "Trying to set irq type for IRQ%d\n", irq);
-               return -ENODEV;
-       }
-
-       desc = irq_desc + irq;
-       if (desc->chip->type) {
-               spin_lock_irqsave(&irq_controller_lock, flags);
-               ret = desc->chip->type(irq, type);
-               spin_unlock_irqrestore(&irq_controller_lock, flags);
-       }
-
-       return ret;
-}
-
-void set_irq_flags(unsigned int irq, unsigned int iflags)
-{
-       struct irqdesc *desc;
-       unsigned long flags;
-
-       if (irq >= NR_IRQS) {
-               printk(KERN_ERR "Trying to set irq flags for IRQ%d\n", irq);
-               return;
-       }
-
-       desc = irq_desc + irq;
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       desc->valid = (iflags & IRQF_VALID) != 0;
-       desc->probe_ok = (iflags & IRQF_PROBE) != 0;
-       desc->noautoenable = (iflags & IRQF_NOAUTOEN) != 0;
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-
-int setup_irq(unsigned int irq, struct irqaction *new)
-{
-       int shared = 0;
-       struct irqaction *old, **p;
-       unsigned long flags;
-       struct irqdesc *desc;
-
-       /*
-        * Some drivers like serial.c use request_irq() heavily,
-        * so we have to be careful not to interfere with a
-        * running system.
-        */
-       if (new->flags & IRQF_SAMPLE_RANDOM) {
-               /*
-                * This function might sleep, we want to call it first,
-                * outside of the atomic block.
-                * Yes, this might clear the entropy pool if the wrong
-                * driver is attempted to be loaded, without actually
-                * installing a new handler, but is this really a problem,
-                * only the sysadmin is able to do this.
-                */
-               rand_initialize_irq(irq);
-       }
-
-       /*
-        * The following block of code has to be executed atomically
-        */
-       desc = irq_desc + irq;
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       p = &desc->action;
-       if ((old = *p) != NULL) {
-               /* Can't share interrupts unless both agree to */
-               if (!(old->flags & new->flags & IRQF_SHARED)) {
-                       spin_unlock_irqrestore(&irq_controller_lock, flags);
-                       return -EBUSY;
-               }
-
-               /* add new interrupt at end of irq queue */
-               do {
-                       p = &old->next;
-                       old = *p;
-               } while (old);
-               shared = 1;
-       }
-
-       *p = new;
-
-       if (!shared) {
-               desc->probing = 0;
-               desc->running = 0;
-               desc->pending = 0;
-               desc->depth = 1;
-               if (!desc->noautoenable) {
-                       desc->depth = 0;
-                       desc->enabled = 1;
-                       desc->chip->unmask(irq);
-               }
-       }
-
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-       return 0;
-}
-
-/**
- *     request_irq - allocate an interrupt line
- *     @irq: Interrupt line to allocate
- *     @handler: Function to be called when the IRQ occurs
- *     @irqflags: Interrupt type flags
- *     @devname: An ascii name for the claiming device
- *     @dev_id: A cookie passed back to the handler function
- *
- *     This call allocates interrupt resources and enables the
- *     interrupt line and IRQ handling. From the point this
- *     call is made your handler function may be invoked. Since
- *     your handler function must clear any interrupt the board
- *     raises, you must take care both to initialise your hardware
- *     and to set up the interrupt handler in the right order.
- *
- *     Dev_id must be globally unique. Normally the address of the
- *     device data structure is used as the cookie. Since the handler
- *     receives this value it makes sense to use it.
- *
- *     If your interrupt is shared you must pass a non NULL dev_id
- *     as this is required when freeing the interrupt.
- *
- *     Flags:
- *
- *     IRQF_SHARED             Interrupt is shared
- *
- *     IRQF_DISABLED   Disable local interrupts while processing
- *
- *     IRQF_SAMPLE_RANDOM      The interrupt can be used for entropy
- *
- */
-
-//FIXME - handler used to return void - whats the significance of the change?
-int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *),
-                unsigned long irq_flags, const char * devname, void *dev_id)
-{
-       unsigned long retval;
-       struct irqaction *action;
-
-       if (irq >= NR_IRQS || !irq_desc[irq].valid || !handler ||
-           (irq_flags & IRQF_SHARED && !dev_id))
-               return -EINVAL;
-
-       action = kmalloc(sizeof(struct irqaction), GFP_KERNEL);
-       if (!action)
-               return -ENOMEM;
-
-       action->handler = handler;
-       action->flags = irq_flags;
-       cpus_clear(action->mask);
-       action->name = devname;
-       action->next = NULL;
-       action->dev_id = dev_id;
-
-       retval = setup_irq(irq, action);
-
-       if (retval)
-               kfree(action);
-       return retval;
-}
-
-EXPORT_SYMBOL(request_irq);
-
-/**
- *     free_irq - free an interrupt
- *     @irq: Interrupt line to free
- *     @dev_id: Device identity to free
- *
- *     Remove an interrupt handler. The handler is removed and if the
- *     interrupt line is no longer in use by any driver it is disabled.
- *     On a shared IRQ the caller must ensure the interrupt is disabled
- *     on the card it drives before calling this function.
- *
- *     This function may be called from interrupt context.
- */
-void free_irq(unsigned int irq, void *dev_id)
-{
-       struct irqaction * action, **p;
-       unsigned long flags;
-
-       if (irq >= NR_IRQS || !irq_desc[irq].valid) {
-               printk(KERN_ERR "Trying to free IRQ%d\n",irq);
-#ifdef CONFIG_DEBUG_ERRORS
-               __backtrace();
-#endif
-               return;
-       }
-
-       spin_lock_irqsave(&irq_controller_lock, flags);
-       for (p = &irq_desc[irq].action; (action = *p) != NULL; p = &action->next) {
-               if (action->dev_id != dev_id)
-                       continue;
-
-               /* Found it - now free it */
-               *p = action->next;
-               kfree(action);
-               goto out;
-       }
-       printk(KERN_ERR "Trying to free free IRQ%d\n",irq);
-#ifdef CONFIG_DEBUG_ERRORS
-       __backtrace();
-#endif
-out:
-       spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-
-EXPORT_SYMBOL(free_irq);
-
-/* Start the interrupt probing.  Unlike other architectures,
- * we don't return a mask of interrupts from probe_irq_on,
- * but return the number of interrupts enabled for the probe.
- * The interrupts which have been enabled for probing is
- * instead recorded in the irq_desc structure.
- */
-unsigned long probe_irq_on(void)
-{
-       unsigned int i, irqs = 0;
-       unsigned long delay;
-
-       /*
-        * first snaffle up any unassigned but
-        * probe-able interrupts
-        */
-       spin_lock_irq(&irq_controller_lock);
-       for (i = 0; i < NR_IRQS; i++) {
-               if (!irq_desc[i].probe_ok || irq_desc[i].action)
-                       continue;
-
-               irq_desc[i].probing = 1;
-               irq_desc[i].triggered = 0;
-               if (irq_desc[i].chip->type)
-                       irq_desc[i].chip->type(i, IRQT_PROBE);
-               irq_desc[i].chip->unmask(i);
-               irqs += 1;
-       }
-       spin_unlock_irq(&irq_controller_lock);
-
-       /*
-        * wait for spurious interrupts to mask themselves out again
-        */
-       for (delay = jiffies + HZ/10; time_before(jiffies, delay); )
-               /* min 100ms delay */;
-
-       /*
-        * now filter out any obviously spurious interrupts
-        */
-       spin_lock_irq(&irq_controller_lock);
-       for (i = 0; i < NR_IRQS; i++) {
-               if (irq_desc[i].probing && irq_desc[i].triggered) {
-                       irq_desc[i].probing = 0;
-                       irqs -= 1;
-               }
-       }
-       spin_unlock_irq(&irq_controller_lock);
-
-       return irqs;
-}
-
-EXPORT_SYMBOL(probe_irq_on);
-
-/*
- * Possible return values:
- *  >= 0 - interrupt number
- *    -1 - no interrupt/many interrupts
- */
-int probe_irq_off(unsigned long irqs)
-{
-       unsigned int i;
-       int irq_found = NO_IRQ;
-
-       /*
-        * look at the interrupts, and find exactly one
-        * that we were probing has been triggered
-        */
-       spin_lock_irq(&irq_controller_lock);
-       for (i = 0; i < NR_IRQS; i++) {
-               if (irq_desc[i].probing &&
-                   irq_desc[i].triggered) {
-                       if (irq_found != NO_IRQ) {
-                               irq_found = NO_IRQ;
-                               goto out;
-                       }
-                       irq_found = i;
-               }
-       }
-
-       if (irq_found == -1)
-               irq_found = NO_IRQ;
-out:
-       spin_unlock_irq(&irq_controller_lock);
-
-       return irq_found;
-}
-
-EXPORT_SYMBOL(probe_irq_off);
-
-void __init init_irq_proc(void)
-{
-}
-
-void __init init_IRQ(void)
-{
-       struct irqdesc *desc;
-       extern void init_dma(void);
-       int irq;
-
-       for (irq = 0, desc = irq_desc; irq < NR_IRQS; irq++, desc++)
-               *desc = bad_irq_desc;
-
-       arc_init_irq();
-       init_dma();
-}
diff --git a/arch/arm26/kernel/process.c b/arch/arm26/kernel/process.c
deleted file mode 100644 (file)
index dcd81e6..0000000
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/process.c
- *
- *  Copyright (C) 2003 Ian Molton - adapted for ARM26
- *  Copyright (C) 1996-2000 Russell King - Converted to ARM.
- *  Origional Copyright (C) 1995  Linus Torvalds
- *
- * 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.
- */
-#include <stdarg.h>
-
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/stddef.h>
-#include <linux/unistd.h>
-#include <linux/ptrace.h>
-#include <linux/slab.h>
-#include <linux/user.h>
-#include <linux/a.out.h>
-#include <linux/delay.h>
-#include <linux/reboot.h>
-#include <linux/interrupt.h>
-#include <linux/init.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/leds.h>
-#include <asm/processor.h>
-#include <asm/uaccess.h>
-
-extern const char *processor_modes[];
-extern void setup_mm_for_reboot(char mode);
-
-static volatile int hlt_counter;
-
-void disable_hlt(void)
-{
-       hlt_counter++;
-}
-
-EXPORT_SYMBOL(disable_hlt);
-
-void enable_hlt(void)
-{
-       hlt_counter--;
-}
-
-EXPORT_SYMBOL(enable_hlt);
-
-static int __init nohlt_setup(char *__unused)
-{
-       hlt_counter = 1;
-       return 1;
-}
-
-static int __init hlt_setup(char *__unused)
-{
-       hlt_counter = 0;
-       return 1;
-}
-
-__setup("nohlt", nohlt_setup);
-__setup("hlt", hlt_setup);
-
-/*
- * This is our default idle handler.  We need to disable
- * interrupts here to ensure we don't miss a wakeup call.
- */
-void cpu_idle(void)
-{
-       /* endless idle loop with no priority at all */
-       while (1) {
-               while (!need_resched())
-                       cpu_relax();
-               preempt_enable_no_resched();
-               schedule();
-               preempt_disable();
-       }
-}
-
-static char reboot_mode = 'h';
-
-int __init reboot_setup(char *str)
-{
-       reboot_mode = str[0];
-       return 1;
-}
-
-__setup("reboot=", reboot_setup);
-
-/* ARM26 cant do these but we still need to define them. */
-void machine_halt(void)
-{
-}
-void machine_power_off(void)
-{
-}
-
-void machine_restart(char * __unused)
-{
-       /*
-        * Clean and disable cache, and turn off interrupts
-        */
-       cpu_proc_fin();
-
-       /*
-        * Tell the mm system that we are going to reboot -
-        * we may need it to insert some 1:1 mappings so that
-        * soft boot works.
-        */
-       setup_mm_for_reboot(reboot_mode);
-
-       /*
-         * copy branch instruction to reset location and call it
-         */
-
-        *(unsigned long *)0 = *(unsigned long *)0x03800000;
-        ((void(*)(void))0)();
-
-       /*
-        * Whoops - the architecture was unable to reboot.
-        * Tell the user! Should never happen...
-        */
-       mdelay(1000);
-       printk("Reboot failed -- System halted\n");
-       while (1);
-}
-
-void show_regs(struct pt_regs * regs)
-{
-       unsigned long flags;
-
-       flags = condition_codes(regs);
-
-       printk("pc : [<%08lx>]    lr : [<%08lx>]    %s\n"
-              "sp : %08lx  ip : %08lx  fp : %08lx\n",
-               instruction_pointer(regs),
-               regs->ARM_lr, print_tainted(), regs->ARM_sp,
-               regs->ARM_ip, regs->ARM_fp);
-       printk("r10: %08lx  r9 : %08lx  r8 : %08lx\n",
-               regs->ARM_r10, regs->ARM_r9,
-               regs->ARM_r8);
-       printk("r7 : %08lx  r6 : %08lx  r5 : %08lx  r4 : %08lx\n",
-               regs->ARM_r7, regs->ARM_r6,
-               regs->ARM_r5, regs->ARM_r4);
-       printk("r3 : %08lx  r2 : %08lx  r1 : %08lx  r0 : %08lx\n",
-               regs->ARM_r3, regs->ARM_r2,
-               regs->ARM_r1, regs->ARM_r0);
-       printk("Flags: %c%c%c%c",
-               flags & PSR_N_BIT ? 'N' : 'n',
-               flags & PSR_Z_BIT ? 'Z' : 'z',
-               flags & PSR_C_BIT ? 'C' : 'c',
-               flags & PSR_V_BIT ? 'V' : 'v');
-       printk("  IRQs o%s  FIQs o%s  Mode %s  Segment %s\n",
-               interrupts_enabled(regs) ? "n" : "ff",
-               fast_interrupts_enabled(regs) ? "n" : "ff",
-               processor_modes[processor_mode(regs)],
-               get_fs() == get_ds() ? "kernel" : "user");
-}
-
-void show_fpregs(struct user_fp *regs)
-{
-       int i;
-
-       for (i = 0; i < 8; i++) {
-               unsigned long *p;
-               char type;
-
-               p = (unsigned long *)(regs->fpregs + i);
-
-               switch (regs->ftype[i]) {
-                       case 1: type = 'f'; break;
-                       case 2: type = 'd'; break;
-                       case 3: type = 'e'; break;
-                       default: type = '?'; break;
-               }
-               if (regs->init_flag)
-                       type = '?';
-
-               printk("  f%d(%c): %08lx %08lx %08lx%c",
-                       i, type, p[0], p[1], p[2], i & 1 ? '\n' : ' ');
-       }
-                       
-
-       printk("FPSR: %08lx FPCR: %08lx\n",
-               (unsigned long)regs->fpsr,
-               (unsigned long)regs->fpcr);
-}
-
-/*
- * Task structure and kernel stack allocation.
- */
-static unsigned long *thread_info_head;
-static unsigned int nr_thread_info;
-
-extern unsigned long get_page_8k(int priority);
-extern void free_page_8k(unsigned long page);
-
-// FIXME - is this valid?
-#define EXTRA_TASK_STRUCT      0
-#define ll_alloc_task_struct() ((struct thread_info *)get_page_8k(GFP_KERNEL))
-#define ll_free_task_struct(p)  free_page_8k((unsigned long)(p))
-
-//FIXME - do we use *task param below looks like we dont, which is ok?
-//FIXME - if EXTRA_TASK_STRUCT is zero we can optimise the below away permanently. *IF* its supposed to be zero.
-struct thread_info *alloc_thread_info(struct task_struct *task)
-{
-       struct thread_info *thread = NULL;
-
-       if (EXTRA_TASK_STRUCT) {
-               unsigned long *p = thread_info_head;
-
-               if (p) {
-                       thread_info_head = (unsigned long *)p[0];
-                       nr_thread_info -= 1;
-               }
-               thread = (struct thread_info *)p;
-       }
-
-       if (!thread)
-               thread = ll_alloc_task_struct();
-
-#ifdef CONFIG_MAGIC_SYSRQ
-       /*
-        * The stack must be cleared if you want SYSRQ-T to
-        * give sensible stack usage information
-        */
-       if (thread) {
-               char *p = (char *)thread;
-               memzero(p+KERNEL_STACK_SIZE, KERNEL_STACK_SIZE);
-       }
-#endif
-       return thread;
-}
-
-void free_thread_info(struct thread_info *thread)
-{
-       if (EXTRA_TASK_STRUCT && nr_thread_info < EXTRA_TASK_STRUCT) {
-               unsigned long *p = (unsigned long *)thread;
-               p[0] = (unsigned long)thread_info_head;
-               thread_info_head = p;
-               nr_thread_info += 1;
-       } else
-               ll_free_task_struct(thread);
-}
-
-/*
- * Free current thread data structures etc..
- */
-void exit_thread(void)
-{
-}
-
-void flush_thread(void)
-{
-       struct thread_info *thread = current_thread_info();
-       struct task_struct *tsk = current;
-
-       memset(&tsk->thread.debug, 0, sizeof(struct debug_info));
-       memset(&thread->fpstate, 0, sizeof(union fp_state));
-
-       clear_used_math();
-}
-
-void release_thread(struct task_struct *dead_task)
-{
-}
-
-asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
-
-int
-copy_thread(int nr, unsigned long clone_flags, unsigned long stack_start,
-           unsigned long unused, struct task_struct *p, struct pt_regs *regs)
-{
-       struct thread_info *thread = task_thread_info(p);
-       struct pt_regs *childregs = task_pt_regs(p);
-
-       *childregs = *regs;
-       childregs->ARM_r0 = 0;
-       childregs->ARM_sp = stack_start;
-
-       memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save));
-       thread->cpu_context.sp = (unsigned long)childregs;
-       thread->cpu_context.pc = (unsigned long)ret_from_fork | MODE_SVC26 | PSR_I_BIT;
-
-       return 0;
-}
-
-/*
- * fill in the fpe structure for a core dump...
- */
-int dump_fpu (struct pt_regs *regs, struct user_fp *fp)
-{
-       struct thread_info *thread = current_thread_info();
-       int used_math = !!used_math();
-
-       if (used_math)
-               memcpy(fp, &thread->fpstate.soft, sizeof (*fp));
-
-       return used_math;
-}
-
-/*
- * fill in the user structure for a core dump..
- */
-void dump_thread(struct pt_regs * regs, struct user * dump)
-{
-       struct task_struct *tsk = current;
-
-       dump->magic = CMAGIC;
-       dump->start_code = tsk->mm->start_code;
-       dump->start_stack = regs->ARM_sp & ~(PAGE_SIZE - 1);
-
-       dump->u_tsize = (tsk->mm->end_code - tsk->mm->start_code) >> PAGE_SHIFT;
-       dump->u_dsize = (tsk->mm->brk - tsk->mm->start_data + PAGE_SIZE - 1) >> PAGE_SHIFT;
-       dump->u_ssize = 0;
-
-       dump->u_debugreg[0] = tsk->thread.debug.bp[0].address;
-       dump->u_debugreg[1] = tsk->thread.debug.bp[1].address;
-       dump->u_debugreg[2] = tsk->thread.debug.bp[0].insn;
-       dump->u_debugreg[3] = tsk->thread.debug.bp[1].insn;
-       dump->u_debugreg[4] = tsk->thread.debug.nsaved;
-
-       if (dump->start_stack < 0x04000000)
-               dump->u_ssize = (0x04000000 - dump->start_stack) >> PAGE_SHIFT;
-
-       dump->regs = *regs;
-       dump->u_fpvalid = dump_fpu (regs, &dump->u_fp);
-}
-
-/*
- * Shuffle the argument into the correct register before calling the
- * thread function.  r1 is the thread argument, r2 is the pointer to
- * the thread function, and r3 points to the exit function.
- * FIXME - make sure this is right - the older code used to zero fp
- * and cause the parent to call sys_exit (do_exit in this version)
- */
-extern void kernel_thread_helper(void);
-
-asm(    ".section .text\n"
-"       .align\n"
-"       .type   kernel_thread_helper, #function\n"
-"kernel_thread_helper:\n"
-"       mov     r0, r1\n"
-"       mov     lr, r3\n"
-"       mov     pc, r2\n"
-"       .size   kernel_thread_helper, . - kernel_thread_helper\n"
-"       .previous");
-
-/*
- * Create a kernel thread.
- */
-pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
-{
-        struct pt_regs regs;
-
-        memset(&regs, 0, sizeof(regs));
-
-        regs.ARM_r1 = (unsigned long)arg;
-        regs.ARM_r2 = (unsigned long)fn;
-        regs.ARM_r3 = (unsigned long)do_exit;
-        regs.ARM_pc = (unsigned long)kernel_thread_helper | MODE_SVC26;
-
-        return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
-}
-EXPORT_SYMBOL(kernel_thread);
-
-
-unsigned long get_wchan(struct task_struct *p)
-{
-       unsigned long fp, lr;
-       unsigned long stack_page;
-       int count = 0;
-       if (!p || p == current || p->state == TASK_RUNNING)
-               return 0;
-
-       stack_page = 4096 + (unsigned long)p;
-       fp = thread_saved_fp(p);
-       do {
-               if (fp < stack_page || fp > 4092+stack_page)
-                       return 0;
-               lr = pc_pointer (((unsigned long *)fp)[-1]);
-               if (!in_sched_functions(lr))
-                       return lr;
-               fp = *(unsigned long *) (fp - 12);
-       } while (count ++ < 16);
-       return 0;
-}
diff --git a/arch/arm26/kernel/ptrace.c b/arch/arm26/kernel/ptrace.c
deleted file mode 100644 (file)
index 0fefb86..0000000
+++ /dev/null
@@ -1,670 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/ptrace.c
- *
- *  By Ross Biro 1/23/92
- * edited by Linus Torvalds
- * ARM modifications Copyright (C) 2000 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/ptrace.h>
-#include <linux/user.h>
-#include <linux/security.h>
-#include <linux/signal.h>
-
-#include <asm/uaccess.h>
-#include <asm/pgtable.h>
-#include <asm/system.h>
-//#include <asm/processor.h>
-
-#include "ptrace.h"
-
-#define REG_PC 15
-#define REG_PSR 15
-/*
- * does not yet catch signals sent when the child dies.
- * in exit.c or in signal.c.
- */
-
-/*
- * Breakpoint SWI instruction: SWI &9F0001
- */
-#define BREAKINST_ARM  0xef9f0001
-
-/*
- * this routine will get a word off of the processes privileged stack.
- * the offset is how far from the base addr as stored in the THREAD.
- * this routine assumes that all the privileged stacks are in our
- * data space.
- */
-static inline long get_user_reg(struct task_struct *task, int offset)
-{
-       return task_pt_regs(task)->uregs[offset];
-}
-
-/*
- * this routine will put a word on the processes privileged stack.
- * the offset is how far from the base addr as stored in the THREAD.
- * this routine assumes that all the privileged stacks are in our
- * data space.
- */
-static inline int
-put_user_reg(struct task_struct *task, int offset, long data)
-{
-       struct pt_regs newregs, *regs = task_pt_regs(task);
-       int ret = -EINVAL;
-
-       newregs = *regs;
-       newregs.uregs[offset] = data;
-
-       if (valid_user_regs(&newregs)) {
-               regs->uregs[offset] = data;
-               ret = 0;
-       }
-
-       return ret;
-}
-
-static inline int
-read_u32(struct task_struct *task, unsigned long addr, u32 *res)
-{
-       int ret;
-
-       ret = access_process_vm(task, addr, res, sizeof(*res), 0);
-
-       return ret == sizeof(*res) ? 0 : -EIO;
-}
-
-static inline int
-read_instr(struct task_struct *task, unsigned long addr, u32 *res)
-{
-       int ret;
-       u32 val;
-       ret = access_process_vm(task, addr & ~3, &val, sizeof(val), 0);
-       ret = ret == sizeof(val) ? 0 : -EIO;
-       *res = val;
-       return ret;
-}
-
-/*
- * Get value of register `rn' (in the instruction)
- */
-static unsigned long
-ptrace_getrn(struct task_struct *child, unsigned long insn)
-{
-       unsigned int reg = (insn >> 16) & 15;
-       unsigned long val;
-
-       val = get_user_reg(child, reg);
-       if (reg == 15)
-               val = pc_pointer(val + 8); //FIXME - correct for arm26?
-
-       return val;
-}
-
-/*
- * Get value of operand 2 (in an ALU instruction)
- */
-static unsigned long
-ptrace_getaluop2(struct task_struct *child, unsigned long insn)
-{
-       unsigned long val;
-       int shift;
-       int type;
-
-       if (insn & 1 << 25) {
-               val = insn & 255;
-               shift = (insn >> 8) & 15;
-               type = 3;
-       } else {
-               val = get_user_reg (child, insn & 15);
-
-               if (insn & (1 << 4))
-                       shift = (int)get_user_reg (child, (insn >> 8) & 15);
-               else
-                       shift = (insn >> 7) & 31;
-
-               type = (insn >> 5) & 3;
-       }
-
-       switch (type) {
-       case 0: val <<= shift;  break;
-       case 1: val >>= shift;  break;
-       case 2:
-               val = (((signed long)val) >> shift);
-               break;
-       case 3:
-               val = (val >> shift) | (val << (32 - shift));
-               break;
-       }
-       return val;
-}
-
-/*
- * Get value of operand 2 (in a LDR instruction)
- */
-static unsigned long
-ptrace_getldrop2(struct task_struct *child, unsigned long insn)
-{
-       unsigned long val;
-       int shift;
-       int type;
-
-       val = get_user_reg(child, insn & 15);
-       shift = (insn >> 7) & 31;
-       type = (insn >> 5) & 3;
-
-       switch (type) {
-       case 0: val <<= shift;  break;
-       case 1: val >>= shift;  break;
-       case 2:
-               val = (((signed long)val) >> shift);
-               break;
-       case 3:
-               val = (val >> shift) | (val << (32 - shift));
-               break;
-       }
-       return val;
-}
-
-#define OP_MASK        0x01e00000
-#define OP_AND 0x00000000
-#define OP_EOR 0x00200000
-#define OP_SUB 0x00400000
-#define OP_RSB 0x00600000
-#define OP_ADD 0x00800000
-#define OP_ADC 0x00a00000
-#define OP_SBC 0x00c00000
-#define OP_RSC 0x00e00000
-#define OP_ORR 0x01800000
-#define OP_MOV 0x01a00000
-#define OP_BIC 0x01c00000
-#define OP_MVN 0x01e00000
-
-static unsigned long
-get_branch_address(struct task_struct *child, unsigned long pc, unsigned long insn)
-{
-       u32 alt = 0;
-
-       switch (insn & 0x0e000000) {
-       case 0x00000000:
-       case 0x02000000: {
-               /*
-                * data processing
-                */
-               long aluop1, aluop2, ccbit;
-
-               if ((insn & 0xf000) != 0xf000)
-                       break;
-
-               aluop1 = ptrace_getrn(child, insn);
-               aluop2 = ptrace_getaluop2(child, insn);
-               ccbit  = get_user_reg(child, REG_PSR) & PSR_C_BIT ? 1 : 0;
-
-               switch (insn & OP_MASK) {
-               case OP_AND: alt = aluop1 & aluop2;             break;
-               case OP_EOR: alt = aluop1 ^ aluop2;             break;
-               case OP_SUB: alt = aluop1 - aluop2;             break;
-               case OP_RSB: alt = aluop2 - aluop1;             break;
-               case OP_ADD: alt = aluop1 + aluop2;             break;
-               case OP_ADC: alt = aluop1 + aluop2 + ccbit;     break;
-               case OP_SBC: alt = aluop1 - aluop2 + ccbit;     break;
-               case OP_RSC: alt = aluop2 - aluop1 + ccbit;     break;
-               case OP_ORR: alt = aluop1 | aluop2;             break;
-               case OP_MOV: alt = aluop2;                      break;
-               case OP_BIC: alt = aluop1 & ~aluop2;            break;
-               case OP_MVN: alt = ~aluop2;                     break;
-               }
-               break;
-       }
-
-       case 0x04000000:
-       case 0x06000000:
-               /*
-                * ldr
-                */
-               if ((insn & 0x0010f000) == 0x0010f000) {
-                       unsigned long base;
-
-                       base = ptrace_getrn(child, insn);
-                       if (insn & 1 << 24) {
-                               long aluop2;
-
-                               if (insn & 0x02000000)
-                                       aluop2 = ptrace_getldrop2(child, insn);
-                               else
-                                       aluop2 = insn & 0xfff;
-
-                               if (insn & 1 << 23)
-                                       base += aluop2;
-                               else
-                                       base -= aluop2;
-                       }
-                       if (read_u32(child, base, &alt) == 0)
-                               alt = pc_pointer(alt);
-               }
-               break;
-
-       case 0x08000000:
-               /*
-                * ldm
-                */
-               if ((insn & 0x00108000) == 0x00108000) {
-                       unsigned long base;
-                       unsigned int nr_regs;
-
-                       if (insn & (1 << 23)) {
-                               nr_regs = hweight16(insn & 65535) << 2;
-
-                               if (!(insn & (1 << 24)))
-                                       nr_regs -= 4;
-                       } else {
-                               if (insn & (1 << 24))
-                                       nr_regs = -4;
-                               else
-                                       nr_regs = 0;
-                       }
-
-                       base = ptrace_getrn(child, insn);
-
-                       if (read_u32(child, base + nr_regs, &alt) == 0)
-                               alt = pc_pointer(alt);
-                       break;
-               }
-               break;
-
-       case 0x0a000000: {
-               /*
-                * bl or b
-                */
-               signed long displ;
-               /* It's a branch/branch link: instead of trying to
-                * figure out whether the branch will be taken or not,
-                * we'll put a breakpoint at both locations.  This is
-                * simpler, more reliable, and probably not a whole lot
-                * slower than the alternative approach of emulating the
-                * branch.
-                */
-               displ = (insn & 0x00ffffff) << 8;
-               displ = (displ >> 6) + 8;
-               if (displ != 0 && displ != 4)
-                       alt = pc + displ;
-           }
-           break;
-       }
-
-       return alt;
-}
-
-static int
-swap_insn(struct task_struct *task, unsigned long addr,
-         void *old_insn, void *new_insn, int size)
-{
-       int ret;
-
-       ret = access_process_vm(task, addr, old_insn, size, 0);
-       if (ret == size)
-               ret = access_process_vm(task, addr, new_insn, size, 1);
-       return ret;
-}
-
-static void
-add_breakpoint(struct task_struct *task, struct debug_info *dbg, unsigned long addr)
-{
-       int nr = dbg->nsaved;
-
-       if (nr < 2) {
-               u32 new_insn = BREAKINST_ARM;
-               int res;
-
-               res = swap_insn(task, addr, &dbg->bp[nr].insn, &new_insn, 4);
-
-               if (res == 4) {
-                       dbg->bp[nr].address = addr;
-                       dbg->nsaved += 1;
-               }
-       } else
-               printk(KERN_ERR "ptrace: too many breakpoints\n");
-}
-
-/*
- * Clear one breakpoint in the user program.  We copy what the hardware
- * does and use bit 0 of the address to indicate whether this is a Thumb
- * breakpoint or an ARM breakpoint.
- */
-static void clear_breakpoint(struct task_struct *task, struct debug_entry *bp)
-{
-       unsigned long addr = bp->address;
-       u32 old_insn;
-       int ret;
-
-       ret = swap_insn(task, addr & ~3, &old_insn,
-                       &bp->insn, 4);
-
-       if (ret != 4 || old_insn != BREAKINST_ARM)
-               printk(KERN_ERR "%s:%d: corrupted ARM breakpoint at "
-                       "0x%08lx (0x%08x)\n", task->comm, task->pid,
-                       addr, old_insn);
-}
-
-void ptrace_set_bpt(struct task_struct *child)
-{
-       struct pt_regs *regs;
-       unsigned long pc;
-       u32 insn;
-       int res;
-
-       regs = task_pt_regs(child);
-       pc = instruction_pointer(regs);
-
-       res = read_instr(child, pc, &insn);
-       if (!res) {
-               struct debug_info *dbg = &child->thread.debug;
-               unsigned long alt;
-
-               dbg->nsaved = 0;
-
-               alt = get_branch_address(child, pc, insn);
-               if (alt)
-                       add_breakpoint(child, dbg, alt);
-
-               /*
-                * Note that we ignore the result of setting the above
-                * breakpoint since it may fail.  When it does, this is
-                * not so much an error, but a forewarning that we may
-                * be receiving a prefetch abort shortly.
-                *
-                * If we don't set this breakpoint here, then we can
-                * lose control of the thread during single stepping.
-                */
-               if (!alt || predicate(insn) != PREDICATE_ALWAYS)
-                       add_breakpoint(child, dbg, pc + 4);
-       }
-}
-
-/*
- * Ensure no single-step breakpoint is pending.  Returns non-zero
- * value if child was being single-stepped.
- */
-void ptrace_cancel_bpt(struct task_struct *child)
-{
-       int i, nsaved = child->thread.debug.nsaved;
-
-       child->thread.debug.nsaved = 0;
-
-       if (nsaved > 2) {
-               printk("ptrace_cancel_bpt: bogus nsaved: %d!\n", nsaved);
-               nsaved = 2;
-       }
-
-       for (i = 0; i < nsaved; i++)
-               clear_breakpoint(child, &child->thread.debug.bp[i]);
-}
-
-/*
- * Called by kernel/ptrace.c when detaching..
- *
- * Make sure the single step bit is not set.
- */
-void ptrace_disable(struct task_struct *child)
-{
-       child->ptrace &= ~PT_SINGLESTEP;
-       ptrace_cancel_bpt(child);
-}
-
-/*
- * Handle hitting a breakpoint.
- */
-void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
-{
-       siginfo_t info;
-
-       /*
-        * The PC is always left pointing at the next instruction.  Fix this.
-        */
-       regs->ARM_pc -= 4;
-
-       if (tsk->thread.debug.nsaved == 0)
-               printk(KERN_ERR "ptrace: bogus breakpoint trap\n");
-
-       ptrace_cancel_bpt(tsk);
-
-       info.si_signo = SIGTRAP;
-       info.si_errno = 0;
-       info.si_code  = TRAP_BRKPT;
-       info.si_addr  = (void *)instruction_pointer(regs) - 4;
-
-       force_sig_info(SIGTRAP, &info, tsk);
-}
-
-/*
- * Read the word at offset "off" into the "struct user".  We
- * actually access the pt_regs stored on the kernel stack.
- */
-static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
-                           unsigned long *ret)
-{
-       unsigned long tmp;
-
-       if (off & 3 || off >= sizeof(struct user))
-               return -EIO;
-
-       tmp = 0;
-       if (off < sizeof(struct pt_regs))
-               tmp = get_user_reg(tsk, off >> 2);
-
-       return put_user(tmp, ret);
-}
-
-/*
- * Write the word at offset "off" into "struct user".  We
- * actually access the pt_regs stored on the kernel stack.
- */
-static int ptrace_write_user(struct task_struct *tsk, unsigned long off,
-                            unsigned long val)
-{
-       if (off & 3 || off >= sizeof(struct user))
-               return -EIO;
-
-       if (off >= sizeof(struct pt_regs))
-               return 0;
-
-       return put_user_reg(tsk, off >> 2, val);
-}
-
-/*
- * Get all user integer registers.
- */
-static int ptrace_getregs(struct task_struct *tsk, void *uregs)
-{
-       struct pt_regs *regs = task_pt_regs(tsk);
-
-       return copy_to_user(uregs, regs, sizeof(struct pt_regs)) ? -EFAULT : 0;
-}
-
-/*
- * Set all user integer registers.
- */
-static int ptrace_setregs(struct task_struct *tsk, void *uregs)
-{
-       struct pt_regs newregs;
-       int ret;
-
-       ret = -EFAULT;
-       if (copy_from_user(&newregs, uregs, sizeof(struct pt_regs)) == 0) {
-               struct pt_regs *regs = task_pt_regs(tsk);
-
-               ret = -EINVAL;
-               if (valid_user_regs(&newregs)) {
-                       *regs = newregs;
-                       ret = 0;
-               }
-       }
-
-       return ret;
-}
-
-/*
- * Get the child FPU state.
- */
-static int ptrace_getfpregs(struct task_struct *tsk, void *ufp)
-{
-       return copy_to_user(ufp, &task_thread_info(tsk)->fpstate,
-                           sizeof(struct user_fp)) ? -EFAULT : 0;
-}
-
-/*
- * Set the child FPU state.
- */
-static int ptrace_setfpregs(struct task_struct *tsk, void *ufp)
-{
-       set_stopped_child_used_math(tsk);
-       return copy_from_user(&task_thread_info(tsk)->fpstate, ufp,
-                             sizeof(struct user_fp)) ? -EFAULT : 0;
-}
-
-long arch_ptrace(struct task_struct *child, long request, long addr, long data)
-{
-       int ret;
-
-       switch (request) {
-               /*
-                * read word at location "addr" in the child process.
-                */
-               case PTRACE_PEEKTEXT:
-               case PTRACE_PEEKDATA:
-                       ret = generic_ptrace_peekdata(child, addr, data);
-                       break;
-
-               case PTRACE_PEEKUSR:
-                       ret = ptrace_read_user(child, addr, (unsigned long *)data);
-                       break;
-
-               /*
-                * write the word at location addr.
-                */
-               case PTRACE_POKETEXT:
-               case PTRACE_POKEDATA:
-                       ret = generic_ptrace_pokedata(child, addr, data);
-                       break;
-
-               case PTRACE_POKEUSR:
-                       ret = ptrace_write_user(child, addr, data);
-                       break;
-
-               /*
-                * continue/restart and stop at next (return from) syscall
-                */
-               case PTRACE_SYSCALL:
-               case PTRACE_CONT:
-                       ret = -EIO;
-                       if (!valid_signal(data))
-                               break;
-                       if (request == PTRACE_SYSCALL)
-                               set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-                       else
-                               clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-                       child->exit_code = data;
-                       /* make sure single-step breakpoint is gone. */
-                       child->ptrace &= ~PT_SINGLESTEP;
-                       ptrace_cancel_bpt(child);
-                       wake_up_process(child);
-                       ret = 0;
-                       break;
-
-               /*
-                * make the child exit.  Best I can do is send it a sigkill.
-                * perhaps it should be put in the status that it wants to
-                * exit.
-                */
-               case PTRACE_KILL:
-                       /* make sure single-step breakpoint is gone. */
-                       child->ptrace &= ~PT_SINGLESTEP;
-                       ptrace_cancel_bpt(child);
-                       if (child->exit_state != EXIT_ZOMBIE) {
-                               child->exit_code = SIGKILL;
-                               wake_up_process(child);
-                       }
-                       ret = 0;
-                       break;
-
-               /*
-                * execute single instruction.
-                */
-               case PTRACE_SINGLESTEP:
-                       ret = -EIO;
-                       if (!valid_signal(data))
-                               break;
-                       child->ptrace |= PT_SINGLESTEP;
-                       clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
-                       child->exit_code = data;
-                       /* give it a chance to run. */
-                       wake_up_process(child);
-                       ret = 0;
-                       break;
-
-               case PTRACE_DETACH:
-                       ret = ptrace_detach(child, data);
-                       break;
-
-               case PTRACE_GETREGS:
-                       ret = ptrace_getregs(child, (void *)data);
-                       break;
-
-               case PTRACE_SETREGS:
-                       ret = ptrace_setregs(child, (void *)data);
-                       break;
-
-               case PTRACE_GETFPREGS:
-                       ret = ptrace_getfpregs(child, (void *)data);
-                       break;
-               
-               case PTRACE_SETFPREGS:
-                       ret = ptrace_setfpregs(child, (void *)data);
-                       break;
-
-               default:
-                       ret = ptrace_request(child, request, addr, data);
-                       break;
-       }
-
-       return ret;
-}
-
-asmlinkage void syscall_trace(int why, struct pt_regs *regs)
-{
-       unsigned long ip;
-
-       if (!test_thread_flag(TIF_SYSCALL_TRACE))
-               return;
-       if (!(current->ptrace & PT_PTRACED))
-               return;
-
-       /*
-        * Save IP.  IP is used to denote syscall entry/exit:
-        *  IP = 0 -> entry, = 1 -> exit
-        */
-       ip = regs->ARM_ip;
-       regs->ARM_ip = why;
-
-       /* the 0x80 provides a way for the tracing parent to distinguish
-          between a syscall stop and SIGTRAP delivery */
-       ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-                                ? 0x80 : 0));
-       /*
-        * this isn't the same as continuing with a signal, but it will do
-        * for normal use.  strace only continues with a signal if the
-        * stopping signal is not SIGTRAP.  -brl
-        */
-       if (current->exit_code) {
-               send_sig(current->exit_code, current, 1);
-               current->exit_code = 0;
-       }
-       regs->ARM_ip = ip;
-}
diff --git a/arch/arm26/kernel/ptrace.h b/arch/arm26/kernel/ptrace.h
deleted file mode 100644 (file)
index 846c9d8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/ptrace.h
- *
- *  Copyright (C) 2000-2003 Russell King
- *  Copyright (C) 2003 Ian Molton
- *
- * 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.
- */
-extern void ptrace_cancel_bpt(struct task_struct *);
-extern void ptrace_set_bpt(struct task_struct *);
-extern void ptrace_break(struct task_struct *, struct pt_regs *);
diff --git a/arch/arm26/kernel/semaphore.c b/arch/arm26/kernel/semaphore.c
deleted file mode 100644 (file)
index 5447a06..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- *  ARM semaphore implementation, taken from
- *
- *  i386 semaphore implementation.
- *
- *  (C) Copyright 1999 Linus Torvalds
- *  (C) Copyright 2003 Ian Molton (ARM26 mods)
- *
- *  Modified for ARM by Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/module.h>
-#include <linux/sched.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-
-#include <asm/semaphore.h>
-
-/*
- * Semaphores are implemented using a two-way counter:
- * The "count" variable is decremented for each process
- * that tries to acquire the semaphore, while the "sleeping"
- * variable is a count of such acquires.
- *
- * Notably, the inline "up()" and "down()" functions can
- * efficiently test if they need to do any extra work (up
- * needs to do something only if count was negative before
- * the increment operation.
- *
- * "sleeping" and the contention routine ordering is
- * protected by the semaphore spinlock.
- *
- * Note that these functions are only called when there is
- * contention on the lock, and as such all this is the
- * "non-critical" part of the whole semaphore business. The
- * critical part is the inline stuff in <asm/semaphore.h>
- * where we want to avoid any extra jumps and calls.
- */
-
-/*
- * Logic:
- *  - only on a boundary condition do we need to care. When we go
- *    from a negative count to a non-negative, we wake people up.
- *  - when we go from a non-negative count to a negative do we
- *    (a) synchronize with the "sleeper" count and (b) make sure
- *    that we're on the wakeup list before we synchronize so that
- *    we cannot lose wakeup events.
- */
-
-void __up(struct semaphore *sem)
-{
-       wake_up(&sem->wait);
-}
-
-static DEFINE_SPINLOCK(semaphore_lock);
-
-void __sched __down(struct semaphore * sem)
-{
-       struct task_struct *tsk = current;
-       DECLARE_WAITQUEUE(wait, tsk);
-       tsk->state = TASK_UNINTERRUPTIBLE;
-       add_wait_queue_exclusive(&sem->wait, &wait);
-
-       spin_lock_irq(&semaphore_lock);
-       sem->sleepers++;
-       for (;;) {
-               int sleepers = sem->sleepers;
-
-               /*
-                * Add "everybody else" into it. They aren't
-                * playing, because we own the spinlock.
-                */
-               if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-                       sem->sleepers = 0;
-                       break;
-               }
-               sem->sleepers = 1;      /* us - see -1 above */
-               spin_unlock_irq(&semaphore_lock);
-
-               schedule();
-               tsk->state = TASK_UNINTERRUPTIBLE;
-               spin_lock_irq(&semaphore_lock);
-       }
-       spin_unlock_irq(&semaphore_lock);
-       remove_wait_queue(&sem->wait, &wait);
-       tsk->state = TASK_RUNNING;
-       wake_up(&sem->wait);
-}
-
-int __sched __down_interruptible(struct semaphore * sem)
-{
-       int retval = 0;
-       struct task_struct *tsk = current;
-       DECLARE_WAITQUEUE(wait, tsk);
-       tsk->state = TASK_INTERRUPTIBLE;
-       add_wait_queue_exclusive(&sem->wait, &wait);
-
-       spin_lock_irq(&semaphore_lock);
-       sem->sleepers ++;
-       for (;;) {
-               int sleepers = sem->sleepers;
-
-               /*
-                * With signals pending, this turns into
-                * the trylock failure case - we won't be
-                * sleeping, and we* can't get the lock as
-                * it has contention. Just correct the count
-                * and exit.
-                */
-               if (signal_pending(current)) {
-                       retval = -EINTR;
-                       sem->sleepers = 0;
-                       atomic_add(sleepers, &sem->count);
-                       break;
-               }
-
-               /*
-                * Add "everybody else" into it. They aren't
-                * playing, because we own the spinlock. The
-                * "-1" is because we're still hoping to get
-                * the lock.
-                */
-               if (!atomic_add_negative(sleepers - 1, &sem->count)) {
-                       sem->sleepers = 0;
-                       break;
-               }
-               sem->sleepers = 1;      /* us - see -1 above */
-               spin_unlock_irq(&semaphore_lock);
-
-               schedule();
-               tsk->state = TASK_INTERRUPTIBLE;
-               spin_lock_irq(&semaphore_lock);
-       }
-       spin_unlock_irq(&semaphore_lock);
-       tsk->state = TASK_RUNNING;
-       remove_wait_queue(&sem->wait, &wait);
-       wake_up(&sem->wait);
-       return retval;
-}
-
-/*
- * Trylock failed - make sure we correct for
- * having decremented the count.
- *
- * We could have done the trylock with a
- * single "cmpxchg" without failure cases,
- * but then it wouldn't work on a 386.
- */
-int __down_trylock(struct semaphore * sem)
-{
-       int sleepers;
-       unsigned long flags;
-
-       spin_lock_irqsave(&semaphore_lock, flags);
-       sleepers = sem->sleepers + 1;
-       sem->sleepers = 0;
-
-       /*
-        * Add "everybody else" and us into it. They aren't
-        * playing, because we own the spinlock.
-        */
-       if (!atomic_add_negative(sleepers, &sem->count))
-               wake_up(&sem->wait);
-
-       spin_unlock_irqrestore(&semaphore_lock, flags);
-       return 1;
-}
-
-/*
- * The semaphore operations have a special calling sequence that
- * allow us to do a simpler in-line version of them. These routines
- * need to convert that sequence back into the C sequence when
- * there is contention on the semaphore.
- *
- * ip contains the semaphore pointer on entry. Save the C-clobbered
- * registers (r0 to r3 and lr), but not ip, as we use it as a return
- * value in some cases..
- */
-asm("  .section .sched.text , #alloc, #execinstr       \n\
-       .align  5                               \n\
-       .globl  __down_failed                   \n\
-__down_failed:                                 \n\
-       stmfd   sp!, {r0 - r3, lr}              \n\
-       mov     r0, ip                          \n\
-       bl      __down                          \n\
-       ldmfd   sp!, {r0 - r3, pc}^             \n\
-                                               \n\
-       .align  5                               \n\
-       .globl  __down_interruptible_failed     \n\
-__down_interruptible_failed:                   \n\
-       stmfd   sp!, {r0 - r3, lr}              \n\
-       mov     r0, ip                          \n\
-       bl      __down_interruptible            \n\
-       mov     ip, r0                          \n\
-       ldmfd   sp!, {r0 - r3, pc}^             \n\
-                                               \n\
-       .align  5                               \n\
-       .globl  __down_trylock_failed           \n\
-__down_trylock_failed:                         \n\
-       stmfd   sp!, {r0 - r3, lr}              \n\
-       mov     r0, ip                          \n\
-       bl      __down_trylock                  \n\
-       mov     ip, r0                          \n\
-       ldmfd   sp!, {r0 - r3, pc}^             \n\
-                                               \n\
-       .align  5                               \n\
-       .globl  __up_wakeup                     \n\
-__up_wakeup:                                   \n\
-       stmfd   sp!, {r0 - r3, lr}              \n\
-       mov     r0, ip                          \n\
-       bl      __up                            \n\
-       ldmfd   sp!, {r0 - r3, pc}^             \n\
-       ");
-
-EXPORT_SYMBOL(__down_failed);
-EXPORT_SYMBOL(__down_interruptible_failed);
-EXPORT_SYMBOL(__down_trylock_failed);
-EXPORT_SYMBOL(__up_wakeup);
-
diff --git a/arch/arm26/kernel/setup.c b/arch/arm26/kernel/setup.c
deleted file mode 100644 (file)
index 0e006c6..0000000
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- *  linux/arch/arm26/kernel/setup.c
- *
- *  Copyright (C) 1995-2001 Russell King
- *  Copyright (C) 2003 Ian Molton
- *
- * 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.
- */
-#include <linux/kernel.h>
-#include <linux/stddef.h>
-#include <linux/ioport.h>
-#include <linux/delay.h>
-#include <linux/utsname.h>
-#include <linux/blkdev.h>
-#include <linux/console.h>
-#include <linux/bootmem.h>
-#include <linux/seq_file.h>
-#include <linux/screen_info.h>
-#include <linux/init.h>
-#include <linux/root_dev.h>
-
-#include <asm/elf.h>
-#include <asm/hardware.h>
-#include <asm/io.h>
-#include <asm/procinfo.h>
-#include <asm/setup.h>
-#include <asm/mach-types.h>
-#include <asm/tlbflush.h>
-
-#include <asm/irqchip.h>
-
-#ifndef MEM_SIZE
-#define MEM_SIZE       (16*1024*1024)
-#endif
-
-#ifdef CONFIG_PREEMPT
-DEFINE_SPINLOCK(kernel_flag);
-#endif
-
-#if defined(CONFIG_FPE_NWFPE)
-char fpe_type[8];
-
-static int __init fpe_setup(char *line)
-{
-       memcpy(fpe_type, line, 8);
-       return 1;
-}
-
-__setup("fpe=", fpe_setup);
-#endif
-
-extern void paging_init(struct meminfo *);
-extern void convert_to_tag_list(struct tag *tags);
-extern void squash_mem_tags(struct tag *tag);
-extern void bootmem_init(struct meminfo *);
-extern int root_mountflags;
-extern int _stext, _text, _etext, _edata, _end;
-#ifdef CONFIG_XIP_KERNEL
-extern int _endtext, _sdata;
-#endif
-
-
-unsigned int processor_id;
-unsigned int __machine_arch_type;
-unsigned int system_rev;
-unsigned int system_serial_low;
-unsigned int system_serial_high;
-unsigned int elf_hwcap;
-unsigned int memc_ctrl_reg;
-unsigned int number_mfm_drives;
-
-struct processor processor;
-
-char elf_platform[ELF_PLATFORM_SIZE];
-
-unsigned long phys_initrd_start __initdata = 0;
-unsigned long phys_initrd_size __initdata = 0;
-static struct meminfo meminfo __initdata = { 0, };
-static struct proc_info_item proc_info;
-static const char *machine_name;
-static char __initdata command_line[COMMAND_LINE_SIZE];
-
-static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
-
-/*
- * Standard memory resources
- */
-static struct resource mem_res[] = {
-       { "Video RAM",   0,     0,     IORESOURCE_MEM                   },
-       { "Kernel code", 0,     0,     IORESOURCE_MEM                   },
-       { "Kernel data", 0,     0,     IORESOURCE_MEM                   }
-};
-
-#define video_ram   mem_res[0]
-#define kernel_code mem_res[1]
-#define kernel_data mem_res[2]
-
-static struct resource io_res[] = {
-       { "reserved",    0x3bc, 0x3be, IORESOURCE_IO | IORESOURCE_BUSY },
-       { "reserved",    0x378, 0x37f, IORESOURCE_IO | IORESOURCE_BUSY },
-       { "reserved",    0x278, 0x27f, IORESOURCE_IO | IORESOURCE_BUSY }
-};
-
-#define lp0 io_res[0]
-#define lp1 io_res[1]
-#define lp2 io_res[2]
-
-#define dump_cpu_info() do { } while (0)
-
-static void __init setup_processor(void)
-{
-       extern struct proc_info_list __proc_info_begin, __proc_info_end;
-       struct proc_info_list *list;
-
-       /*
-        * locate processor in the list of supported processor
-        * types.  The linker builds this table for us from the
-        * entries in arch/arm26/mm/proc-*.S
-        */
-       for (list = &__proc_info_begin; list < &__proc_info_end ; list++)
-               if ((processor_id & list->cpu_mask) == list->cpu_val)
-                       break;
-
-       /*
-        * If processor type is unrecognised, then we
-        * can do nothing...
-        */
-       if (list >= &__proc_info_end) {
-               printk("CPU configuration botched (ID %08x), unable "
-                      "to continue.\n", processor_id);
-               while (1);
-       }
-
-       proc_info = *list->info;
-       processor = *list->proc;
-
-
-       printk("CPU: %s %s revision %d\n",
-              proc_info.manufacturer, proc_info.cpu_name,
-              (int)processor_id & 15);
-
-       dump_cpu_info();
-
-       sprintf(init_utsname()->machine, "%s", list->arch_name);
-       sprintf(elf_platform, "%s", list->elf_name);
-       elf_hwcap = list->elf_hwcap;
-
-       cpu_proc_init();
-}
-
-/*
- * Initial parsing of the command line.  We need to pick out the
- * memory size.  We look for mem=size@start, where start and size
- * are "size[KkMm]"
- */
-static void __init
-parse_cmdline(struct meminfo *mi, char **cmdline_p, char *from)
-{
-       char c = ' ', *to = command_line;
-       int usermem = 0, len = 0;
-
-       for (;;) {
-               if (c == ' ' && !memcmp(from, "mem=", 4)) {
-                       unsigned long size, start;
-
-                       if (to != command_line)
-                               to -= 1;
-
-                       /*
-                        * If the user specifies memory size, we
-                        * blow away any automatically generated
-                        * size.
-                        */
-                       if (usermem == 0) {
-                               usermem = 1;
-                               mi->nr_banks = 0;
-                       }
-
-                       start = PHYS_OFFSET;
-                       size  = memparse(from + 4, &from);
-                       if (*from == '@')
-                               start = memparse(from + 1, &from);
-
-                       mi->bank[mi->nr_banks].start = start;
-                       mi->bank[mi->nr_banks].size  = size;
-                       mi->bank[mi->nr_banks].node  = PHYS_TO_NID(start);
-                       mi->nr_banks += 1;
-               }
-               c = *from++;
-               if (!c)
-                       break;
-               if (COMMAND_LINE_SIZE <= ++len)
-                       break;
-               *to++ = c;
-       }
-       *to = '\0';
-       *cmdline_p = command_line;
-}
-
-static void __init
-setup_ramdisk(int doload, int prompt, int image_start, unsigned int rd_sz)
-{
-#ifdef CONFIG_BLK_DEV_RAM
-       extern int rd_size, rd_image_start, rd_prompt, rd_doload;
-
-       rd_image_start = image_start;
-       rd_prompt = prompt;
-       rd_doload = doload;
-
-       if (rd_sz)
-               rd_size = rd_sz;
-#endif
-}
-
-static void __init
-request_standard_resources(struct meminfo *mi)
-{
-       struct resource *res;
-       int i;
-
-       kernel_code.start  = init_mm.start_code;
-       kernel_code.end    = init_mm.end_code - 1;
-#ifdef CONFIG_XIP_KERNEL
-       kernel_data.start&