summaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Makefile4
-rw-r--r--arch/arm/boot/compressed/Makefile6
-rw-r--r--arch/arm/boot/compressed/head-sa1100.S65
-rw-r--r--arch/arm/boot/compressed/head-victor.S45
-rw-r--r--arch/arm/boot/compressed/head.S8
-rw-r--r--arch/arm/config.in22
-rw-r--r--arch/arm/def-configs/a5k260
-rw-r--r--arch/arm/def-configs/footbridge172
-rw-r--r--arch/arm/def-configs/rpc224
-rw-r--r--arch/arm/defconfig285
-rw-r--r--arch/arm/kernel/armksyms.c7
-rw-r--r--arch/arm/kernel/bios32.c65
-rw-r--r--arch/arm/kernel/bios32.h1
-rw-r--r--arch/arm/kernel/calls.S71
-rw-r--r--arch/arm/kernel/debug-armv.S15
-rw-r--r--arch/arm/kernel/dec21285.c4
-rw-r--r--arch/arm/kernel/entry-armo.S1
-rw-r--r--arch/arm/kernel/entry-armv.S10
-rw-r--r--arch/arm/kernel/entry-common.S129
-rw-r--r--arch/arm/kernel/head-armv.S70
-rw-r--r--arch/arm/kernel/process.c7
-rw-r--r--arch/arm/kernel/setup.c91
-rw-r--r--arch/arm/kernel/signal.c3
-rw-r--r--arch/arm/kernel/sys_arm.c84
-rw-r--r--arch/arm/kernel/time.c2
-rw-r--r--arch/arm/kernel/traps.c58
-rw-r--r--arch/arm/lib/Makefile22
-rw-r--r--arch/arm/lib/bitops.S152
-rw-r--r--arch/arm/lib/changebit.S26
-rw-r--r--arch/arm/lib/clearbit.S26
-rw-r--r--arch/arm/lib/copy_page.S35
-rw-r--r--arch/arm/lib/csumipv6.S28
-rw-r--r--arch/arm/lib/csumpartial.S64
-rw-r--r--arch/arm/lib/csumpartialcopy.S257
-rw-r--r--arch/arm/lib/csumpartialcopyuser.S (renamed from arch/arm/lib/checksum.S)327
-rw-r--r--arch/arm/lib/findbit.S65
-rw-r--r--arch/arm/lib/getconsdata.c10
-rw-r--r--arch/arm/lib/io-footbridge.S2
-rw-r--r--arch/arm/lib/memchr.S24
-rw-r--r--arch/arm/lib/memcpy.S (renamed from arch/arm/lib/string.S)255
-rw-r--r--arch/arm/lib/memset.S88
-rw-r--r--arch/arm/lib/memzero.S80
-rw-r--r--arch/arm/lib/setbit.S26
-rw-r--r--arch/arm/lib/strchr.S26
-rw-r--r--arch/arm/lib/strrchr.S25
-rw-r--r--arch/arm/lib/system.c22
-rw-r--r--arch/arm/lib/testchangebit.S25
-rw-r--r--arch/arm/lib/testclearbit.S25
-rw-r--r--arch/arm/lib/testsetbit.S25
-rw-r--r--arch/arm/lib/uaccess.S16
-rw-r--r--arch/arm/mm/fault-armv.c184
-rw-r--r--arch/arm/mm/fault-common.c15
-rw-r--r--arch/arm/mm/init.c31
-rw-r--r--arch/arm/mm/mm-armo.c14
-rw-r--r--arch/arm/mm/mm-armv.c139
-rw-r--r--arch/arm/mm/mm-sa1100.c53
-rw-r--r--arch/arm/mm/proc-arm6,7.S14
-rw-r--r--arch/arm/mm/proc-sa110.S17
-rw-r--r--arch/arm/vmlinux-armv.lds.in134
59 files changed, 2323 insertions, 1638 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 2c81731b9..0df16ffa4 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -136,7 +136,7 @@ MACHINE = nexuspci
ARCHDIR = nexuspci
endif
-ifeq ($(CONFIG_ARCH_SA1100),u)
+ifeq ($(CONFIG_ARCH_SA1100),y)
MACHINE = sa1100
ARCHDIR = sa1100
endif
@@ -146,7 +146,7 @@ HEAD := arch/arm/kernel/head-$(PROCESSOR).o \
SUBDIRS += arch/arm/kernel arch/arm/mm arch/arm/lib \
arch/arm/special arch/arm/nwfpe
CORE_FILES := arch/arm/kernel/kernel.o arch/arm/mm/mm.o $(CORE_FILES)
-LIBS := arch/arm/lib/lib.a $(LIBS) $(GCCLIB)
+LIBS := arch/arm/lib/lib.o arch/arm/lib/lib.a $(LIBS) $(GCCLIB)
DRIVERS += arch/arm/special/special.a
ifeq ($(CONFIG_NWFPE),y)
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 8a100eb77..d2992a491 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -44,9 +44,9 @@ ZTEXTADDR = 0x40200000
ZRELADDR = 0x40008000
endif
-ifeq ($(CONFIG_ARCH_SA110),y)
+ifeq ($(CONFIG_ARCH_SA1100),y)
+OBJS += head-sa1100.o
ifeq ($(CONFIG_SA1100_VICTOR),y)
-HEAD = head-victor.o
ZTEXTADDR = 0x00002000
ZBSSADDR = 0xc0100000
else
@@ -91,7 +91,7 @@ font.o: $(FONTC)
vmlinux.lds: vmlinux.lds.in
@sed "$(SEDFLAGS)" < vmlinux.lds.in > $@
-clean:; rm -f vmlinux core piggy*
+clean:; rm -f vmlinux core piggy* vmlinux.lds
.PHONY: vmlinux.lds clean
diff --git a/arch/arm/boot/compressed/head-sa1100.S b/arch/arm/boot/compressed/head-sa1100.S
new file mode 100644
index 000000000..90018e52b
--- /dev/null
+++ b/arch/arm/boot/compressed/head-sa1100.S
@@ -0,0 +1,65 @@
+/*
+ * linux/arch/arm/boot/compressed/head-sa1100.S
+ *
+ * Copyright (C) 1999 Nicolas Pitre <nico@cam.org>
+ *
+ * SA1100 specific tweaks. This is merged with head.S by the linker.
+ */
+
+#include <linux/config.h>
+
+
+ .section ".start", #alloc, #execinstr
+
+#ifndef CONFIG_ARCH_SA1100
+#error What am I doing here...
+#endif
+
+#ifdef CONFIG_SA1100_BRUTUS
+@ need to enter SVC mode
+#define angel_SWIreason_EnterSVC 0x17 /* from arm.h, in angel source */
+#define angel_SWI_ARM (0xEF123456 & 0xffffff)
+ mov r0, #angel_SWIreason_EnterSVC
+ swi #angel_SWI_ARM
+
+ @ turn off interrupts to prevent the angel from running
+ mrs r0, cpsr
+ orr r0, r0, #0xc0
+ msr cpsr, r0
+#endif
+
+#ifdef CONFIG_SA1100_VICTOR
+ @ Copy cmdline to 0xc0000000
+ mov r1, #0xc0000000
+ cmp r0, #0
+ moveq r2, #0
+1: ldrneb r2, [r0], #1
+ cmpne r2, #0
+ strb r2, [r1], #1
+ bne 1b
+#endif
+
+ @ Data cache might be active.
+ @ Be sure to flush kernel binary out of the cache,
+ @ whatever state it is, before it is turned off.
+ @ This is done by fetching through currently executed
+ @ memory to be sure we hit the same cache.
+ bic r2, pc, #0x1f
+ add r3, r2, #0x4000 @ 16 kb is quite enough...
+1: ldr r0, [r2], #32
+ teq r2, r3
+ bne 1b
+ mcr p15, 0, r0, c7, c10, 4 @ drain WB
+ mcr p15, 0, r0, c7, c7, 0 @ flush I & D caches
+
+ @ disabling MMU, enabling I cache
+ mrc p15, 0, r0, c1, c0, 0 @ read control reg
+ bic r0, r0, #0x0d @ clear WB, DC, MMU
+ orr r0, r0, #0x1000 @ set Icache
+ mcr p15, 0, r0, c1, c0, 0
+
+ @ set registers for entry
+ mov r0, #0
+ mov r1, #16
+
+
diff --git a/arch/arm/boot/compressed/head-victor.S b/arch/arm/boot/compressed/head-victor.S
deleted file mode 100644
index e556383ba..000000000
--- a/arch/arm/boot/compressed/head-victor.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * linux/arch/arm/boot/compressed/head-victor.S
- *
- * Copyright (C) 1998 Nicolas Pitre <nico@visuaide.com>
- */
-
-#include <linux/linkage.h>
-
- .text
- .globl _start
-_start:
- @ just in case we still use an a.out loader...
- nop
- nop
- nop
- nop
- nop
- nop
- nop
- nop
-
- @ load different addresses
- adr r2, LC0
- ldmia r2, {r4, r5, r6, sp}
-
- @ clear BSS
- mov r2, #0
-1: str r2, [r5], #4
- cmp r5, r6
- blt 1b
-
- @ uncompress the kernel
- mov r8, r0 @ save cmdline ptr
- mov r0, r4 @ where to put uncompressed data
- add r1, r6, #31
- bic r1, r1, #31 @ free memory space
- add r2, r1, #65536 @ end of free mem space
- bl SYMBOL_NAME(decompress_kernel)
- mov r0, r8 @ retrieve cmdline ptr
- mov pc, r4 @ call via EXEC entry
-
-LC0: .word _load_addr
- .word __bss_start
- .word SYMBOL_NAME(_end)
- .word SYMBOL_NAME(user_stack)+4096
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index e87c0a72e..796f812ab 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -77,10 +77,10 @@ start:
cmp r2, r3
blt 1b
- eor r1, r6, #0x44 << 24 @ SA-110?
+ eor r1, r6, #0x44 << 24 @ SA-110 or SA-1100?
eor r1, r1, #0x01 << 16
eor r1, r1, #0xa1 << 8
- movs r1, r1, lsr #4
+ movs r1, r1, lsr #5
mcreq p15, 0, r1, c7, c7, 0 @ flush I & D-cache
mcreq p15, 0, r1, c7, c10, 4 @ drain WB
add pc, r5, r0 @ call relocation code
@@ -144,10 +144,10 @@ reloc_start: add r8, r5, r0
mov r0, r4
bl memdump
#endif
- eor r0, r6, #0x44 << 24 @ SA-110?
+ eor r0, r6, #0x44 << 24 @ SA-110 or SA-1100?
eor r0, r0, #0x01 << 16
eor r0, r0, #0xa1 << 8
- movs r0, r0, lsr #4
+ movs r0, r0, lsr #5
mcreq p15, 0, r0, c7, c7, 0 @ flush I cache
mcreq p15, 0, r1, c7, c10, 4 @ drain WB
diff --git a/arch/arm/config.in b/arch/arm/config.in
index e1d54c4e7..be7102698 100644
--- a/arch/arm/config.in
+++ b/arch/arm/config.in
@@ -6,6 +6,8 @@ mainmenu_name "Linux Kernel Configuration"
define_bool CONFIG_ARM y
+define_bool CONFIG_UID16 y
+
mainmenu_option next_comment
comment 'Code maturity level options'
bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
@@ -44,7 +46,6 @@ if [ "$CONFIG_ADDIN_FOOTBRIDGE" = "y" ]; then
fi
if [ "$CONFIG_ARCH_SA1100" = "y" ]; then
- define_bool CONFIG_CPU_SA1100 y
choice 'SA1100 implementation' \
"Brutus CONFIG_SA1100_BRUTUS \
Empeg CONFIG_SA1100_EMPEG \
@@ -93,7 +94,11 @@ else
"$CONFIG_FOOTBRIDGE" = "y" -o \
"$CONFIG_ARCH_NEXUSPCI" = "y" ]; then
define_bool CONFIG_CPU_32v4 y
- define_bool CONFIG_CPU_SA110 y
+ if [ "$CONFIG_ARCH_SA1100" = "y" ]; then
+ define_bool CONFIG_CPU_SA1100 y
+ else
+ define_bool CONFIG_CPU_SA110 y
+ fi
else
if [ "$CONFIG_ARCH_RPC" = "y" ]; then
define_bool CONFIG_CPU_32v3 y
@@ -110,7 +115,7 @@ fi
if [ "$CONFIG_ARCH_NEXUSPCI" = "y" -o \
"$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
define_bool CONFIG_PCI y
- source drivers/pci/Config.h
+ source drivers/pci/Config.in
fi
#
@@ -123,8 +128,8 @@ else
define_bool CONFIG_ISA_DMA n
fi
-if [ "$CONFIG_CPU_32" = "y" -a "$CONFIG_ARCH_EBSA110" != "y" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
- bool 'Enable kernel-mode alignment trap handler (EXPERIMENTAL)' CONFIG_ALIGNMENT_TRAP
+if [ "$CONFIG_CPU_32" = "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then
+ bool 'Kernel-mode alignment trap handler' CONFIG_ALIGNMENT_TRAP
fi
#bool 'Split text into discardable sections' CONFIG_TEXT_SECTIONS
endmenu
@@ -273,11 +278,10 @@ bool 'Verbose user fault messages' CONFIG_DEBUG_USER
bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO
#bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
+if [ "$CONFIG_CPU_26" = "y" ]; then
+ bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE
+fi
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- if [ "$CONFIG_CPU_26" = "y" ]; then
- bool 'Disable pgtable cache (EXPERIMENTAL)' CONFIG_NO_PGT_CACHE
- fi
-
# These options are only for real kernel hackers
# who want to get their hands dirty.
bool 'Kernel low-level debugging functions' CONFIG_DEBUG_LL
diff --git a/arch/arm/def-configs/a5k b/arch/arm/def-configs/a5k
index 8b402a59e..b5fd4b315 100644
--- a/arch/arm/def-configs/a5k
+++ b/arch/arm/def-configs/a5k
@@ -4,6 +4,11 @@
CONFIG_ARM=y
#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
# System and processor type
#
# CONFIG_ARCH_ARC is not set
@@ -12,22 +17,10 @@ CONFIG_ARCH_A5K=y
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_FOOTBRIDGE is not set
CONFIG_ARCH_ACORN=y
-# CONFIG_ISA_DMA is not set
# CONFIG_CPU_32 is not set
CONFIG_CPU_26=y
-# CONFIG_CPU_ARM2 is not set
-CONFIG_CPU_ARM3=y
-# CONFIG_CPU_ARM6 is not set
-# CONFIG_CPU_ARM7 is not set
-# CONFIG_CPU_SA110 is not set
-CONFIG_PAGESIZE_32=y
# CONFIG_PAGESIZE_16 is not set
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_TEXT_SECTIONS is not set
+# CONFIG_ISA_DMA is not set
#
# Loadable module support
@@ -43,17 +36,38 @@ CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
-# CONFIG_NWFPE is not set
+CONFIG_NWFPE=y
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_ELF=m
+# CONFIG_BINFMT_ELF is not set
# CONFIG_BINFMT_MISC is not set
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_ARC is not set
+# CONFIG_PARPORT_AMIGA is not set
+# CONFIG_PARPORT_MFC3 is not set
+# CONFIG_PARPORT_ATARI is not set
+# CONFIG_PARPORT_SUNBPP is not set
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
#
-# Plug and Play support
+# Plug and Play configuration
#
# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
#
# Block devices
@@ -66,11 +80,19 @@ CONFIG_BLK_DEV_IDE=y
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
# CONFIG_BLK_DEV_CMD640 is not set
+CONFIG_BLK_DEV_IDE_ICSIDE=y
+# CONFIG_BLK_DEV_IDEDMA_ICS is not set
+# CONFIG_BLK_DEV_IDE_RAPIDE is not set
# CONFIG_IDE_CHIPSETS is not set
#
@@ -82,16 +104,14 @@ CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
-CONFIG_PARIDE_PARPORT=y
+CONFIG_PARIDE_PARPORT=m
# CONFIG_PARIDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
# Acorn-specific block devices
#
-CONFIG_BLK_DEV_IDE_CARDS=y
-CONFIG_BLK_DEV_IDE_ICSIDE=y
-# CONFIG_BLK_DEV_IDE_RAPIDE is not set
# CONFIG_BLK_DEV_FD1772 is not set
CONFIG_BLK_DEV_MFM=m
CONFIG_BLK_DEV_MFM_AUTODETECT=y
@@ -102,26 +122,33 @@ CONFIG_BLK_DEV_MFM_AUTODETECT=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
-# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_ATOMWIDE_SERIAL is not set
+# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
-CONFIG_ATOMWIDE_SERIAL=y
-CONFIG_DUALSP_SERIAL=y
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_UNIX98_PTYS is not set
-CONFIG_PRINTER=y
-CONFIG_PRINTER_READBACK=y
-CONFIG_MOUSE=y
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
#
# Mice
#
-# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
-# CONFIG_MS_BUSMOUSE is not set
+CONFIG_MOUSE=y
# CONFIG_PSMOUSE is not set
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK 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
@@ -130,27 +157,38 @@ CONFIG_MOUSE=y
# Video For Linux
#
# CONFIG_VIDEO_DEV is not set
-
-#
-# Joystick support
-#
-# CONFIG_JOYSTICK 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_KBDMOUSE=y
+# CONFIG_DRM is not set
+# CONFIG_DRM_TDFX is not set
+# CONFIG_AGP is not set
+
+#
+# Support for USB
+#
+# CONFIG_USB is not set
#
# Console drivers
#
CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FB_ACORN=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_3DFX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
CONFIG_FBCON_MFB=y
@@ -158,9 +196,13 @@ CONFIG_FBCON_CFB2=y
CONFIG_FBCON_CFB4=y
CONFIG_FBCON_CFB8=y
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-# CONFIG_FBCON_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
CONFIG_FONT_ACORN_8x8=y
#
@@ -168,7 +210,7 @@ CONFIG_FONT_ACORN_8x8=y
#
# CONFIG_PACKET is not set
# CONFIG_NETLINK is not set
-# CONFIG_FIREWALL is not set
+# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
@@ -184,15 +226,17 @@ CONFIG_INET=y
#
# (it is safe to leave these untouched)
#
-# CONFIG_INET_RARP is not set
# CONFIG_SKB_LARGE is not set
# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
@@ -201,7 +245,6 @@ CONFIG_INET=y
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
-# CONFIG_CPU_IS_SLOW is not set
#
# QoS and/or fair queueing
@@ -214,7 +257,7 @@ CONFIG_INET=y
# CONFIG_HAMRADIO is not set
#
-# IrDA subsystem support
+# IrDA (infrared) support
#
# CONFIG_IRDA is not set
@@ -222,9 +265,18 @@ CONFIG_INET=y
# Network device support
#
CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
CONFIG_NET_ETHERNET=y
CONFIG_ARM_ETHER1=y
CONFIG_ARM_ETHER3=y
@@ -234,96 +286,47 @@ CONFIG_ARM_ETHER3=y
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_ACENIC is not set
+# CONFIG_DM9102 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_EISA is not set
# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
+# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_DLCI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring driver support
+#
# CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_HOSTESS_SV11 is not set
-# CONFIG_COSA is not set
+# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
#
# SCSI support
#
-CONFIG_SCSI=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-CONFIG_BLK_DEV_SR=y
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-# CONFIG_CHR_DEV_SG is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AHA1740 is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_AM53C974 is not set
-# CONFIG_SCSI_MEGARAID is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_EATA_DMA is not set
-# CONFIG_SCSI_EATA_PIO is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-CONFIG_SCSI_PPA=m
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_IZIP_EPP16 is not set
-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_DEBUG is not set
-CONFIG_SCSI_ACORNSCSI_3=y
-CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE=y
-CONFIG_SCSI_ACORNSCSI_SYNC=y
-CONFIG_SCSI_ARXESCSI=m
-# CONFIG_SCSI_CUMANA_2 is not set
-CONFIG_SCSI_EESOXSCSI=y
-# CONFIG_SCSI_POWERTECSCSI is not set
-
-#
-# The following drivers are not fully supported
-#
-# CONFIG_SCSI_CUMANA_1 is not set
-# CONFIG_SCSI_ECOSCSI is not set
-# CONFIG_SCSI_OAK1 is not set
+# CONFIG_SCSI is not set
#
# Sound
@@ -338,12 +341,14 @@ CONFIG_SCSI_EESOXSCSI=y
CONFIG_ADFS_FS=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
# CONFIG_UMSDOS_FS is not set
-CONFIG_VFAT_FS=m
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -352,6 +357,7 @@ CONFIG_PROC_FS=y
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
# CONFIG_UFS_FS is not set
#
@@ -359,8 +365,7 @@ CONFIG_EXT2_FS=y
#
# CONFIG_CODA_FS is not set
CONFIG_NFS_FS=y
-CONFIG_NFSD=y
-# CONFIG_NFSD_SUN is not set
+# CONFIG_NFSD is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_SMB_FS is not set
@@ -369,12 +374,10 @@ CONFIG_LOCKD=y
#
# Partition Types
#
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_SGI_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_ICS=y
@@ -410,6 +413,7 @@ CONFIG_NLS=y
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
@@ -418,8 +422,8 @@ CONFIG_NLS=y
#
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_INFO is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_NO_PGT_CACHE=y
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
diff --git a/arch/arm/def-configs/footbridge b/arch/arm/def-configs/footbridge
index fa410d522..d68d0b358 100644
--- a/arch/arm/def-configs/footbridge
+++ b/arch/arm/def-configs/footbridge
@@ -4,6 +4,11 @@
CONFIG_ARM=y
#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
# System and processor type
#
# CONFIG_ARCH_ARC is not set
@@ -23,11 +28,6 @@ CONFIG_CPU_32v4=y
CONFIG_CPU_SA110=y
CONFIG_PCI=y
CONFIG_ISA_DMA=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
# CONFIG_ALIGNMENT_TRAP is not set
#
@@ -45,6 +45,8 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_NWFPE=y
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
@@ -52,7 +54,6 @@ CONFIG_BINFMT_ELF=y
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
CONFIG_PARPORT_PC_FIFO=y
-# CONFIG_PARPORT_PC_PCMCIA is not set
# CONFIG_PARPORT_ARC is not set
# CONFIG_PARPORT_AMIGA is not set
# CONFIG_PARPORT_MFC3 is not set
@@ -60,7 +61,7 @@ CONFIG_PARPORT_PC_FIFO=y
# CONFIG_PARPORT_SUNBPP is not set
# CONFIG_PARPORT_OTHER is not set
CONFIG_PARPORT_1284=y
-CONFIG_CMDLINE="root=/dev/hda2 ro mem=32M parport=0x378,7 ide0=autotune"
+CONFIG_CMDLINE="root=/dev/hda1 ro mem=32M parport=0x378,7 ide0=autotune"
CONFIG_LEDS=y
CONFIG_LEDS_TIMER=y
# CONFIG_LEDS_CPU is not set
@@ -97,15 +98,20 @@ CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
-# IDEDMA_NEW_DRIVE_LISTINGS is not set
-IDEDMA_PCI_EXPERIMENTAL=y
+CONFIG_IDEDMA_NEW_DRIVE_LISTINGS=y
+CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
CONFIG_BLK_DEV_OFFBOARD=y
# CONFIG_BLK_DEV_AEC6210 is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_BLK_DEV_CMD646 is not set
CONFIG_BLK_DEV_CY82C693=y
# CONFIG_BLK_DEV_HPT34X is not set
@@ -113,8 +119,8 @@ CONFIG_BLK_DEV_CY82C693=y
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_PDC202XX=y
-# PDC202XX_FORCE_BURST_BIT is not set
-# PDC202XX_FORCE_MASTER_MODE is not set
+# CONFIG_PDC202XX_FORCE_BURST_BIT is not set
+# CONFIG_PDC202XX_FORCE_MASTER_MODE is not set
# CONFIG_BLK_DEV_TRM290 is not set
CONFIG_BLK_DEV_SL82C105=y
CONFIG_BLK_DEV_IDEDMA=y
@@ -135,6 +141,7 @@ CONFIG_MD_RAID5=m
CONFIG_BLK_DEV_RAM=y
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BLK_DEV_XD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
CONFIG_PARIDE_PARPORT=y
CONFIG_PARIDE=m
@@ -176,7 +183,8 @@ CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
CONFIG_PRINTER=m
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
@@ -189,12 +197,17 @@ CONFIG_MOUSE=y
CONFIG_PSMOUSE=y
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
# CONFIG_QIC02_TAPE is not set
-CONFIG_WATCHDOG=y
#
# Watchdog Cards
#
+CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# CONFIG_WDT is not set
CONFIG_SOFT_WATCHDOG=y
@@ -212,12 +225,33 @@ CONFIG_RTC=y
#
# Video For Linux
#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Joystick support
-#
-# CONFIG_JOYSTICK is not set
+CONFIG_VIDEO_DEV=y
+# CONFIG_I2C_PARPORT is not set
+
+#
+# Radio/Video Adapters
+#
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_VIDEO_BT848 is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_BUZ is not set
+# CONFIG_VIDEO_ZR36120 is not set
+CONFIG_VIDEO_CYBERPRO=m
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
@@ -226,41 +260,64 @@ CONFIG_RTC=y
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
+# CONFIG_DRM is not set
+# CONFIG_DRM_TDFX is not set
#
-# USB drivers - not for the faint of heart
+# Support for USB
#
CONFIG_USB=m
+
+#
+# USB Controllers
+#
# CONFIG_USB_UHCI is not set
CONFIG_USB_OHCI=m
CONFIG_USB_OHCI_DEBUG=y
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_OHCI_VROOTHUB=y
+
+#
+# Miscellaneous USB options
+#
# CONFIG_USB_DEBUG_ISOC is not set
-CONFIG_USB_HUB=m
+CONFIG_USB_PROC=y
+# CONFIG_USB_EZUSB is not set
+
+#
+# USB Devices
+#
CONFIG_USB_MOUSE=m
+# CONFIG_USB_HP_SCANNER is not set
CONFIG_USB_KBD=m
CONFIG_USB_AUDIO=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
+# CONFIG_USB_SERIAL is not set
# CONFIG_USB_CPIA is not set
-CONFIG_USB_SCSI=m
-CONFIG_USB_SCSI_DEBUG=m
-# CONFIG_USB_EZUSB is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_SCSI is not set
# CONFIG_USB_USS720 is not set
-CONFIG_USB_PROC=y
#
# Console drivers
#
CONFIG_VGA_CONSOLE=y
CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_RIVA is not set
# CONFIG_FB_CLGEN is not set
# CONFIG_FB_PM2 is not set
CONFIG_FB_CYBER2000=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_3DFX is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
# CONFIG_FBCON_MFB is not set
@@ -377,12 +434,13 @@ CONFIG_VORTEX=y
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_YELLOWFIN is not set
+# CONFIG_DM9102 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_EISA=y
# CONFIG_PCNET32 is not set
-# CONFIG_ACENIC is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
@@ -393,27 +451,40 @@ CONFIG_DEC_ELCP=m
# CONFIG_LNE390 is not set
# CONFIG_NE3210 is not set
CONFIG_NE2K_PCI=y
+# CONFIG_SIS900 is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_ES3210 is not set
# CONFIG_EPIC100 is not set
# CONFIG_ZNET is not set
# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
+# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=m
CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_SLIP=m
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
+
+#
+# Wireless LAN (non-hamradio)
+#
# CONFIG_NET_RADIO is not set
#
-# Token ring devices
+# Token Ring driver support
#
# CONFIG_TR is not set
# CONFIG_NET_FC is not set
@@ -423,10 +494,7 @@ CONFIG_SLIP_MODE_SLIP6=y
#
# Wan interfaces
#
-# CONFIG_HOSTESS_SV11 is not set
-# CONFIG_COSA is not set
-# CONFIG_SEALEVEL_4021 is not set
-# CONFIG_DLCI is not set
+# CONFIG_WAN is not set
#
# SCSI support
@@ -441,30 +509,33 @@ CONFIG_SOUND=m
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_PAS is not set
-CONFIG_SOUND_SB=m
-CONFIG_SOUND_ADLIB=m
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_CS4232 is not set
# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SOFTOSS is not set
+CONFIG_SOUND_SB=m
# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_SOFTOSS is not set
+# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_UART6850 is not set
# CONFIG_SOUND_VIDC is not set
CONFIG_SOUND_WAVEARTIST=m
@@ -482,10 +553,11 @@ CONFIG_WAVEARTIST_DMA2=7
# Filesystems
#
# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS_FS=y
CONFIG_ADFS_FS=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
# CONFIG_UMSDOS_FS is not set
@@ -497,10 +569,12 @@ CONFIG_JOLIET=y
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
+CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS 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_UFS_FS is not set
#
@@ -510,7 +584,7 @@ CONFIG_EXT2_FS=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_NFSD=m
-# CONFIG_NFSD_SUN is not set
+# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_SMB_FS is not set
diff --git a/arch/arm/def-configs/rpc b/arch/arm/def-configs/rpc
index 904bb0724..e801bf641 100644
--- a/arch/arm/def-configs/rpc
+++ b/arch/arm/def-configs/rpc
@@ -4,6 +4,11 @@
CONFIG_ARM=y
#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
# System and processor type
#
# CONFIG_ARCH_ARC is not set
@@ -12,21 +17,14 @@ CONFIG_ARCH_RPC=y
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_FOOTBRIDGE is not set
CONFIG_ARCH_ACORN=y
-# CONFIG_ISA_DMA is not set
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM2 is not set
-# CONFIG_CPU_ARM3 is not set
-# CONFIG_CPU_ARM6 is not set
-# CONFIG_CPU_ARM7 is not set
+CONFIG_CPU_32v3=y
+CONFIG_CPU_ARM6=y
+CONFIG_CPU_ARM7=y
CONFIG_CPU_SA110=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
+# CONFIG_ISA_DMA is not set
# CONFIG_ALIGNMENT_TRAP is not set
-# CONFIG_TEXT_SECTIONS is not set
#
# Loadable module support
@@ -43,16 +41,38 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_NWFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_ARC is not set
+# CONFIG_PARPORT_AMIGA is not set
+# CONFIG_PARPORT_MFC3 is not set
+# CONFIG_PARPORT_ATARI is not set
+# CONFIG_PARPORT_SUNBPP is not set
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_1284 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
#
-# Plug and Play support
+# Plug and Play configuration
#
# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
#
# Block devices
@@ -65,11 +85,22 @@ CONFIG_BLK_DEV_IDE=y
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=y
-CONFIG_BLK_DEV_IDEFLOPPY=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
# CONFIG_BLK_DEV_CMD640 is not set
+CONFIG_BLK_DEV_IDE_ICSIDE=y
+CONFIG_BLK_DEV_IDEDMA_ICS=y
+CONFIG_IDEDMA_ICS_AUTO=y
+CONFIG_BLK_DEV_IDE_RAPIDE=y
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_AUTO=y
# CONFIG_IDE_CHIPSETS is not set
#
@@ -83,14 +114,12 @@ CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
CONFIG_PARIDE_PARPORT=y
# CONFIG_PARIDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
#
# Acorn-specific block devices
#
-CONFIG_BLK_DEV_IDE_CARDS=y
-CONFIG_BLK_DEV_IDE_ICSIDE=y
-CONFIG_BLK_DEV_IDE_RAPIDE=y
#
# Character devices
@@ -99,25 +128,36 @@ CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
# CONFIG_SERIAL_CONSOLE is not set
-# CONFIG_SERIAL_EXTENDED is not set
CONFIG_ATOMWIDE_SERIAL=y
CONFIG_DUALSP_SERIAL=y
+# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_UNIX98_PTYS is not set
CONFIG_PRINTER=m
-CONFIG_PRINTER_READBACK=y
-CONFIG_MOUSE=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
#
# Mice
#
+CONFIG_BUSMOUSE=y
# CONFIG_ATIXL_BUSMOUSE is not set
-# CONFIG_BUSMOUSE is not set
+# CONFIG_LOGIBUSMOUSE is not set
# CONFIG_MS_BUSMOUSE is not set
+CONFIG_MOUSE=y
# CONFIG_PSMOUSE is not set
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK 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
@@ -126,27 +166,39 @@ CONFIG_MOUSE=y
# Video For Linux
#
# CONFIG_VIDEO_DEV is not set
-
-#
-# Joystick support
-#
-# CONFIG_JOYSTICK 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_DRM is not set
+# CONFIG_DRM_TDFX is not set
+# CONFIG_AGP is not set
CONFIG_RPCMOUSE=y
#
+# Support for USB
+#
+# CONFIG_USB is not set
+
+#
# Console drivers
#
CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FB_ACORN=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_3DFX is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
CONFIG_FBCON_MFB=y
@@ -162,6 +214,7 @@ CONFIG_FBCON_CFB32=y
# CONFIG_FBCON_IPLAN2P4 is not set
# CONFIG_FBCON_IPLAN2P8 is not set
# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
# CONFIG_FBCON_VGA is not set
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
CONFIG_FBCON_FONTS=y
@@ -178,7 +231,7 @@ CONFIG_FONT_ACORN_8x8=y
#
# CONFIG_PACKET is not set
# CONFIG_NETLINK is not set
-# CONFIG_FIREWALL is not set
+# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
@@ -194,15 +247,17 @@ CONFIG_INET=y
#
# (it is safe to leave these untouched)
#
-# CONFIG_INET_RARP is not set
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
@@ -211,7 +266,6 @@ CONFIG_SKB_LARGE=y
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
-# CONFIG_CPU_IS_SLOW is not set
#
# QoS and/or fair queueing
@@ -224,7 +278,7 @@ CONFIG_SKB_LARGE=y
# CONFIG_HAMRADIO is not set
#
-# IrDA subsystem support
+# IrDA (infrared) support
#
# CONFIG_IRDA is not set
@@ -232,39 +286,67 @@ CONFIG_SKB_LARGE=y
# Network device support
#
CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
CONFIG_NET_ETHERNET=y
CONFIG_ARM_ETHER1=m
CONFIG_ARM_ETHER3=m
-CONFIG_ARM_ETHERH=m
+CONFIG_ARM_ETHERH=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_ACENIC is not set
+# CONFIG_DM9102 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
# CONFIG_NET_EISA is not set
# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
+# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_DLCI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=m
+# CONFIG_PPP_ASYNC is not set
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_SLIP is not set
#
-# CCP compressors for PPP are only built as modules.
+# Wireless LAN (non-hamradio)
#
-# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring driver support
+#
# CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_HOSTESS_SV11 is not set
-# CONFIG_COSA is not set
+# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
#
# SCSI support
@@ -283,6 +365,7 @@ CONFIG_CHR_DEV_SG=y
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
+CONFIG_SCSI_DEBUG_QUEUES=y
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
@@ -296,6 +379,7 @@ CONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
@@ -314,6 +398,7 @@ CONFIG_SCSI_IMM=m
# CONFIG_SCSI_IZIP_SLOW_CTR is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
@@ -342,32 +427,37 @@ CONFIG_SCSI_OAK1=m
# Sound
#
CONFIG_SOUND=m
+# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_PAS is not set
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_CS4232 is not set
# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SOFTOSS is not set
+# CONFIG_SOUND_SB is not set
# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_SOFTOSS is not set
+# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_UART6850 is not set
CONFIG_SOUND_VIDC=m
# CONFIG_SOUND_WAVEARTIST is not set
@@ -385,10 +475,12 @@ CONFIG_SOUND_VIDC=m
CONFIG_ADFS_FS=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
+# CONFIG_BFS_FS is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
-CONFIG_VFAT_FS=y
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
# CONFIG_MINIX_FS is not set
@@ -399,6 +491,7 @@ CONFIG_PROC_FS=y
# CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
# CONFIG_UFS_FS is not set
#
@@ -415,12 +508,17 @@ CONFIG_LOCKD=y
#
# Partition Types
#
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_OSF_PARTITION=y
+CONFIG_MAC_PARTITION=y
CONFIG_MSDOS_PARTITION=y
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
+CONFIG_BSD_DISKLABEL=y
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+CONFIG_SGI_PARTITION=y
+CONFIG_SUN_PARTITION=y
+CONFIG_AMIGA_PARTITION=y
+# CONFIG_ATARI_PARTITION is not set
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_ADFS=y
CONFIG_ACORN_PARTITION_ICS=y
@@ -456,6 +554,7 @@ CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_ISO8859_9=m
+# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
CONFIG_NLS_KOI8_R=m
@@ -467,5 +566,4 @@ CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_INFO is not set
CONFIG_MAGIC_SYSRQ=y
-# CONFIG_ARTHUR is not set
-# CONFIG_DEBUG_LL is not set
+CONFIG_DEBUG_LL=y
diff --git a/arch/arm/defconfig b/arch/arm/defconfig
index 2aba351c2..472c637c3 100644
--- a/arch/arm/defconfig
+++ b/arch/arm/defconfig
@@ -4,6 +4,11 @@
CONFIG_ARM=y
#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+
+#
# System and processor type
#
# CONFIG_ARCH_ARC is not set
@@ -17,23 +22,13 @@ CONFIG_ARCH_EBSA285=y
# CONFIG_CATS is not set
CONFIG_ARCH_NETWINDER=y
# CONFIG_ARCH_ACORN is not set
-CONFIG_PCI=y
-CONFIG_PCI_NAMES=y
-CONFIG_ISA_DMA=y
CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set
-# CONFIG_CPU_ARM2 is not set
-# CONFIG_CPU_ARM3 is not set
-# CONFIG_CPU_ARM6 is not set
-# CONFIG_CPU_ARM7 is not set
+CONFIG_CPU_32v4=y
CONFIG_CPU_SA110=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
+CONFIG_PCI=y
+CONFIG_ISA_DMA=y
# CONFIG_ALIGNMENT_TRAP is not set
-# CONFIG_TEXT_SECTIONS is not set
#
# Loadable module support
@@ -58,15 +53,34 @@ CONFIG_BINFMT_ELF=y
# CONFIG_ARTHUR is not set
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
+CONFIG_PARPORT_PC_FIFO=y
+# CONFIG_PARPORT_ARC is not set
+# CONFIG_PARPORT_AMIGA is not set
+# CONFIG_PARPORT_MFC3 is not set
+# CONFIG_PARPORT_ATARI is not set
+# CONFIG_PARPORT_SUNBPP is not set
+# CONFIG_PARPORT_OTHER is not set
+CONFIG_PARPORT_1284=y
CONFIG_CMDLINE="root=/dev/hda1 ro mem=32M parport=0x378,7 ide0=autotune"
CONFIG_LEDS=y
CONFIG_LEDS_TIMER=y
# CONFIG_LEDS_CPU is not set
#
-# Plug and Play support
+# I2O device support
#
-# CONFIG_PNP is not set
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# Plug and Play configuration
+#
+CONFIG_PNP=y
+CONFIG_ISAPNP=y
#
# Block devices
@@ -79,23 +93,40 @@ CONFIG_BLK_DEV_IDE=y
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_BLK_DEV_IDECD is not set
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_RZ1000 is not set
CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_BLK_DEV_OFFBOARD=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
+CONFIG_IDEDMA_NEW_DRIVE_LISTINGS=y
+CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
+CONFIG_BLK_DEV_OFFBOARD=y
+# CONFIG_BLK_DEV_AEC6210 is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_CMD646 is not set
+CONFIG_BLK_DEV_CY82C693=y
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_PDC202XX=y
+# CONFIG_PDC202XX_FORCE_BURST_BIT is not set
+# CONFIG_PDC202XX_FORCE_MASTER_MODE is not set
# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_VIA82C586 is not set
-# CONFIG_BLK_DEV_CMD646 is not set
CONFIG_BLK_DEV_SL82C105=y
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_AUTO=y
# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_CPQ_DA is not set
#
# Additional Block Devices
@@ -110,6 +141,7 @@ CONFIG_MD_RAID5=m
CONFIG_BLK_DEV_RAM=y
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_BLK_DEV_XD is not set
+# CONFIG_BLK_DEV_DAC960 is not set
CONFIG_PARIDE_PARPORT=y
CONFIG_PARIDE=m
@@ -139,6 +171,7 @@ CONFIG_PARIDE_KBIC=m
CONFIG_PARIDE_KTTI=m
CONFIG_PARIDE_ON20=m
CONFIG_PARIDE_ON26=m
+CONFIG_BLK_DEV_IDE_MODES=y
# CONFIG_BLK_DEV_HD is not set
#
@@ -150,31 +183,38 @@ CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
CONFIG_PRINTER=m
-CONFIG_PRINTER_READBACK=y
-CONFIG_MOUSE=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
#
# Mice
#
-# CONFIG_ATIXL_BUSMOUSE is not set
# CONFIG_BUSMOUSE is not set
-# CONFIG_MS_BUSMOUSE is not set
+CONFIG_MOUSE=y
CONFIG_PSMOUSE=y
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
# CONFIG_QIC02_TAPE is not set
-CONFIG_WATCHDOG=y
#
# Watchdog Cards
#
+CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
# CONFIG_WDT is not set
CONFIG_SOFT_WATCHDOG=y
# CONFIG_PCWATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_21285_WATCHDOG is not set
+CONFIG_977_WATCHDOG=m
CONFIG_DS1620=y
CONFIG_NWBUTTON=y
CONFIG_NWBUTTON_REBOOT=y
@@ -185,29 +225,100 @@ CONFIG_RTC=y
#
# Video For Linux
#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Joystick support
-#
-# CONFIG_JOYSTICK is not set
+CONFIG_VIDEO_DEV=y
+# CONFIG_I2C_PARPORT is not set
+
+#
+# Radio/Video Adapters
+#
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_VIDEO_BT848 is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_BUZ is not set
+# CONFIG_VIDEO_ZR36120 is not set
+CONFIG_VIDEO_CYBERPRO=m
# 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_DRM is not set
+# CONFIG_DRM_TDFX is not set
+# CONFIG_AGP is not set
+
+#
+# Support for USB
+#
+CONFIG_USB=m
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+CONFIG_USB_OHCI=m
+CONFIG_USB_OHCI_DEBUG=y
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_VROOTHUB=y
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEBUG_ISOC is not set
+CONFIG_USB_PROC=y
+# CONFIG_USB_EZUSB is not set
+
+#
+# USB Devices
+#
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_HP_SCANNER is not set
+CONFIG_USB_KBD=m
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_CPIA is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_SCSI is not set
+# CONFIG_USB_USS720 is not set
#
# Console drivers
#
CONFIG_VGA_CONSOLE=y
CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_CLGEN is not set
# CONFIG_FB_PM2 is not set
CONFIG_FB_CYBER2000=y
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_3DFX is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
# CONFIG_FBCON_MFB is not set
@@ -223,6 +334,7 @@ CONFIG_FBCON_CFB24=y
# CONFIG_FBCON_IPLAN2P4 is not set
# CONFIG_FBCON_IPLAN2P8 is not set
# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
CONFIG_FBCON_VGA=y
# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
CONFIG_FBCON_FONTS=y
@@ -238,8 +350,9 @@ CONFIG_FONT_ACORN_8x8=y
# Networking options
#
CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
# CONFIG_NETLINK is not set
-# CONFIG_FIREWALL is not set
+# CONFIG_NETFILTER is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
@@ -257,15 +370,17 @@ CONFIG_IP_ALIAS=y
#
# (it is safe to leave these untouched)
#
-# CONFIG_INET_RARP is not set
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
@@ -274,7 +389,6 @@ CONFIG_SKB_LARGE=y
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
-# CONFIG_CPU_IS_SLOW is not set
#
# QoS and/or fair queueing
@@ -287,7 +401,7 @@ CONFIG_SKB_LARGE=y
# CONFIG_HAMRADIO is not set
#
-# IrDA subsystem support
+# IrDA (infrared) support
#
# CONFIG_IRDA is not set
@@ -295,9 +409,18 @@ CONFIG_SKB_LARGE=y
# Network device support
#
CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
CONFIG_NET_ETHERNET=y
# CONFIG_ARM_AM79C961A is not set
CONFIG_NET_VENDOR_3COM=y
@@ -312,11 +435,13 @@ CONFIG_VORTEX=y
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_RTL8139 is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_ACENIC is not set
+# CONFIG_DM9102 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_EISA=y
# CONFIG_PCNET32 is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
@@ -327,31 +452,50 @@ CONFIG_DEC_ELCP=m
# CONFIG_LNE390 is not set
# CONFIG_NE3210 is not set
CONFIG_NE2K_PCI=y
+# CONFIG_SIS900 is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_ES3210 is not set
# CONFIG_EPIC100 is not set
# CONFIG_ZNET is not set
# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_YELLOWFIN is not set
+# CONFIG_ACENIC is not set
+# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_DLCI is not set
# CONFIG_PLIP is not set
CONFIG_PPP=m
-
-#
-# CCP compressors for PPP are only built as modules.
-#
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
CONFIG_SLIP=m
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_SLIP_MODE_SLIP6=y
+
+#
+# Wireless LAN (non-hamradio)
+#
# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring driver support
+#
# CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_HOSTESS_SV11 is not set
-# CONFIG_COSA is not set
+# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
#
# SCSI support
@@ -362,32 +506,37 @@ CONFIG_SLIP_MODE_SLIP6=y
# Sound
#
CONFIG_SOUND=m
+# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_PAS is not set
-CONFIG_SOUND_SB=m
-CONFIG_SOUND_ADLIB=m
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_CS4232 is not set
# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_VMIDI is not set
# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SOFTOSS is not set
+CONFIG_SOUND_SB=m
# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_SOFTOSS is not set
+# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
# CONFIG_SOUND_UART6850 is not set
# CONFIG_SOUND_VIDC is not set
CONFIG_SOUND_WAVEARTIST=m
@@ -405,24 +554,28 @@ CONFIG_WAVEARTIST_DMA2=7
# Filesystems
#
# CONFIG_QUOTA is not set
-# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS_FS=y
CONFIG_ADFS_FS=y
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
# CONFIG_UMSDOS_FS is not set
CONFIG_VFAT_FS=m
+# CONFIG_EFS_FS is not set
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y
+CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS 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_UFS_FS is not set
#
@@ -432,7 +585,7 @@ CONFIG_EXT2_FS=y
CONFIG_NFS_FS=y
CONFIG_ROOT_NFS=y
CONFIG_NFSD=m
-# CONFIG_NFSD_SUN is not set
+# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
# CONFIG_SMB_FS is not set
@@ -441,12 +594,17 @@ CONFIG_LOCKD=y
#
# Partition Types
#
+CONFIG_PARTITION_ADVANCED=y
# CONFIG_OSF_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
CONFIG_ACORN_PARTITION=y
CONFIG_ACORN_PARTITION_ADFS=y
# CONFIG_ACORN_PARTITION_ICS is not set
@@ -482,6 +640,7 @@ CONFIG_NLS_ISO8859_2=m
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_14 is not set
CONFIG_NLS_ISO8859_15=m
# CONFIG_NLS_KOI8_R is not set
@@ -490,7 +649,7 @@ CONFIG_NLS_ISO8859_15=m
#
CONFIG_FRAME_POINTER=y
CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_INFO is not set
CONFIG_MAGIC_SYSRQ=y
# CONFIG_DEBUG_LL is not set
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index cdd7a9821..0caf4bf26 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -16,6 +16,7 @@
#include <asm/dma.h>
#include <asm/pgalloc.h>
#include <asm/proc-fns.h>
+#include <asm/processor.h>
#include <asm/semaphore.h>
#include <asm/system.h>
#include <asm/uaccess.h>
@@ -29,8 +30,6 @@ extern void outswb(unsigned int port, const void *to, int len);
extern unsigned int local_bh_count[NR_CPUS];
extern unsigned int local_irq_count[NR_CPUS];
-extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
-
/*
* syscalls
*/
@@ -125,7 +124,6 @@ EXPORT_SYMBOL(cpu_cache_purge_area);
EXPORT_SYMBOL(__machine_arch_type);
/* networking */
-EXPORT_SYMBOL(csum_partial_copy);
EXPORT_SYMBOL(csum_partial_copy_nocheck);
EXPORT_SYMBOL(__csum_ipv6_magic);
@@ -172,8 +170,7 @@ EXPORT_SYMBOL_NOVERS(strpbrk);
EXPORT_SYMBOL_NOVERS(strtok);
EXPORT_SYMBOL_NOVERS(strrchr);
EXPORT_SYMBOL_NOVERS(strstr);
-EXPORT_SYMBOL_NOVERS(__memset);
-EXPORT_SYMBOL_NOVERS(memset); /* needed for some versions of gcc */
+EXPORT_SYMBOL_NOVERS(memset);
EXPORT_SYMBOL_NOVERS(memcpy);
EXPORT_SYMBOL_NOVERS(memmove);
EXPORT_SYMBOL_NOVERS(memcmp);
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index b9b7d57b4..d055ae1fb 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -5,6 +5,7 @@
*
* Bits taken from various places.
*/
+#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/errno.h>
@@ -33,8 +34,8 @@ void pcibios_report_device_errors(void)
continue;
pci_write_config_word(dev, PCI_STATUS, status & 0xf900);
- printk(KERN_DEBUG "PCI: status %04X on %s\n",
- status, dev->name);
+ printk(KERN_DEBUG "PCI: %02X:%02X: status %04X on %s\n",
+ dev->bus->number, dev->devfn, status, dev->name);
}
}
@@ -162,9 +163,10 @@ void __init pcibios_update_irq(struct pci_dev *dev, int irq)
*/
void __init pcibios_fixup_bus(struct pci_bus *bus)
{
- struct pci_dev *dev;
+ struct list_head *walk = &bus->devices;
- for (dev = bus->devices; dev; dev = dev->sibling) {
+ for (walk = walk->next; walk != &bus->devices; walk = walk->next) {
+ struct pci_dev *dev = pci_dev_b(walk);
u16 cmd;
/*
@@ -220,6 +222,7 @@ static u8 __init no_swizzle(struct pci_dev *dev, u8 *pin)
return 0;
}
+#ifdef CONFIG_FOOTBRIDGE
/* ebsa285 host-specific stuff */
static int irqmap_ebsa285[] __initdata = { IRQ_IN1, IRQ_IN0, IRQ_PCI, IRQ_IN3 };
@@ -255,7 +258,7 @@ static int irqmap_cats[] __initdata = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 };
static int __init cats_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
{
if (dev->irq >= 128)
- return 16 + (dev->irq & 0x1f);
+ return dev->irq & 0x1f;
if (dev->irq >= 1 && dev->irq <= 4)
return irqmap_cats[dev->irq - 1];
@@ -313,17 +316,53 @@ static struct hw_pci netwinder_pci __initdata = {
no_swizzle,
netwinder_map_irq
};
+#endif
+
+#ifdef CONFIG_ARCH_NEXUSPCI
+/*
+ * Owing to a PCB cockup, issue A backplanes are wired thus:
+ *
+ * Slot 1 2 3 4 5 Bridge
+ * IRQ D C B A A
+ * A D C B B
+ * B A D C C
+ * C B A D D
+ *
+ * ID A31 A30 A29 A28 A27 A26
+ */
+
+static int irqmap_ftv[] __initdata = { IRQ_PCI_A, IRQ_PCI_B, IRQ_PCI_C, IRQ_PCI_D };
+
+static int __init ftv_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+ return irqmap_ftv[(slot + pin) & 3];
+}
+
+/* ftv host-specific stuff */
+static struct hw_pci ftv_pci __initdata = {
+ plx90x0_init,
+ 0x9000,
+ 0x00100000,
+ no_swizzle,
+ ftv_map_irq
+};
+#endif
void __init pcibios_init(void)
{
struct hw_pci *hw_pci = NULL;
+#ifdef CONFIG_FOOTBRIDGE
if (machine_is_ebsa285())
hw_pci = &ebsa285_pci;
else if (machine_is_cats())
hw_pci = &cats_pci;
else if (machine_is_netwinder())
hw_pci = &netwinder_pci;
+#endif
+#ifdef CONFIG_ARCH_NEXUSPCI
+ hw_pci = &ftv_pci;
+#endif
if (hw_pci == NULL)
return;
@@ -346,12 +385,14 @@ void __init pcibios_init(void)
pci_fixup_irqs(hw_pci->swizzle, hw_pci->map_irq);
pci_set_bus_ranges();
+#ifdef CONFIG_FOOTBRIDGE
/*
* Initialise any other hardware after we've got the PCI bus
* initialised. We may need the PCI bus to talk to this other
* hardware.
*/
hw_init();
+#endif
}
char * __init pcibios_setup(char *str)
@@ -363,7 +404,17 @@ char * __init pcibios_setup(char *str)
return str;
}
-void __init
-pcibios_align_resource(void *data, struct resource *res, unsigned long size)
+/*
+ * Assign new address to PCI resource. We hope our resource information
+ * is complete.
+ *
+ * Expects start=0, end=size-1, flags=resource type.
+ */
+int pci_assign_resource(struct pci_dev *dev, int i)
+{
+ return 0;
+}
+
+void pcibios_align_resource(void *data, struct resource *res, unsigned long size)
{
}
diff --git a/arch/arm/kernel/bios32.h b/arch/arm/kernel/bios32.h
index fb3117452..9a4380732 100644
--- a/arch/arm/kernel/bios32.h
+++ b/arch/arm/kernel/bios32.h
@@ -7,3 +7,4 @@ struct hw_pci {
};
void __init dc21285_init(void);
+void __init plx90x0_init(void);
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
index 51f3dcde2..d8d416c4e 100644
--- a/arch/arm/kernel/calls.S
+++ b/arch/arm/kernel/calls.S
@@ -25,19 +25,19 @@
.long SYMBOL_NAME(sys_time)
.long SYMBOL_NAME(sys_mknod)
/* 15 */ .long SYMBOL_NAME(sys_chmod)
- .long SYMBOL_NAME(sys_lchown)
+ .long SYMBOL_NAME(sys_lchown16)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_break */
- .long SYMBOL_NAME(sys_stat)
+ .long SYMBOL_NAME(sys_ni_syscall) /* was sys_stat */
.long SYMBOL_NAME(sys_lseek)
/* 20 */ .long SYMBOL_NAME(sys_getpid)
- .long SYMBOL_NAME(sys_mount_wrapper)
+ .long SYMBOL_NAME(sys_mount)
.long SYMBOL_NAME(sys_oldumount)
- .long SYMBOL_NAME(sys_setuid)
- .long SYMBOL_NAME(sys_getuid)
+ .long SYMBOL_NAME(sys_setuid16)
+ .long SYMBOL_NAME(sys_getuid16)
/* 25 */ .long SYMBOL_NAME(sys_stime)
.long SYMBOL_NAME(sys_ptrace)
.long SYMBOL_NAME(sys_alarm)
- .long SYMBOL_NAME(sys_fstat)
+ .long SYMBOL_NAME(sys_ni_syscall) /* was sys_fstat */
.long SYMBOL_NAME(sys_pause)
/* 30 */ .long SYMBOL_NAME(sys_utime)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_stty */
@@ -55,11 +55,11 @@
.long SYMBOL_NAME(sys_times)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_prof */
/* 45 */ .long SYMBOL_NAME(sys_brk)
- .long SYMBOL_NAME(sys_setgid)
- .long SYMBOL_NAME(sys_getgid)
+ .long SYMBOL_NAME(sys_setgid16)
+ .long SYMBOL_NAME(sys_getgid16)
.long SYMBOL_NAME(sys_signal)
- .long SYMBOL_NAME(sys_geteuid)
-/* 50 */ .long SYMBOL_NAME(sys_getegid)
+ .long SYMBOL_NAME(sys_geteuid16)
+/* 50 */ .long SYMBOL_NAME(sys_getegid16)
.long SYMBOL_NAME(sys_acct)
.long SYMBOL_NAME(sys_umount)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_lock */
@@ -79,8 +79,8 @@
.long SYMBOL_NAME(sys_sigaction)
.long SYMBOL_NAME(sys_sgetmask)
.long SYMBOL_NAME(sys_ssetmask)
-/* 70 */ .long SYMBOL_NAME(sys_setreuid)
- .long SYMBOL_NAME(sys_setregid)
+/* 70 */ .long SYMBOL_NAME(sys_setreuid16)
+ .long SYMBOL_NAME(sys_setregid16)
.long SYMBOL_NAME(sys_sigsuspend_wrapper)
.long SYMBOL_NAME(sys_sigpending)
.long SYMBOL_NAME(sys_sethostname)
@@ -89,11 +89,11 @@
.long SYMBOL_NAME(sys_getrusage)
.long SYMBOL_NAME(sys_gettimeofday)
.long SYMBOL_NAME(sys_settimeofday)
-/* 80 */ .long SYMBOL_NAME(sys_getgroups)
- .long SYMBOL_NAME(sys_setgroups)
+/* 80 */ .long SYMBOL_NAME(sys_getgroups16)
+ .long SYMBOL_NAME(sys_setgroups16)
.long SYMBOL_NAME(old_select)
.long SYMBOL_NAME(sys_symlink)
- .long SYMBOL_NAME(sys_lstat)
+ .long SYMBOL_NAME(sys_ni_syscall) /* was sys_lstat */
/* 85 */ .long SYMBOL_NAME(sys_readlink)
.long SYMBOL_NAME(sys_uselib)
.long SYMBOL_NAME(sys_swapon)
@@ -104,7 +104,7 @@
.long SYMBOL_NAME(sys_truncate)
.long SYMBOL_NAME(sys_ftruncate)
.long SYMBOL_NAME(sys_fchmod)
-/* 95 */ .long SYMBOL_NAME(sys_fchown)
+/* 95 */ .long SYMBOL_NAME(sys_fchown16)
.long SYMBOL_NAME(sys_getpriority)
.long SYMBOL_NAME(sys_setpriority)
.long SYMBOL_NAME(sys_ni_syscall) /* was sys_profil */
@@ -132,7 +132,7 @@
/* 120 */ .long SYMBOL_NAME(sys_clone_wapper)
.long SYMBOL_NAME(sys_setdomainname)
.long SYMBOL_NAME(sys_newuname)
- .long SYMBOL_NAME(sys_ni_syscall) /* .long SYMBOL_NAME(sys_modify_ldt) */
+ .long SYMBOL_NAME(sys_ni_syscall)
.long SYMBOL_NAME(sys_adjtimex)
/* 125 */ .long SYMBOL_NAME(sys_mprotect)
.long SYMBOL_NAME(sys_sigprocmask)
@@ -147,9 +147,9 @@
/* 135 */ .long SYMBOL_NAME(sys_sysfs)
.long SYMBOL_NAME(sys_personality)
.long SYMBOL_NAME(sys_ni_syscall) /* .long _sys_afs_syscall */
- .long SYMBOL_NAME(sys_setfsuid)
- .long SYMBOL_NAME(sys_setfsgid)
-/* 140 */ .long SYMBOL_NAME(sys_llseek_wrapper)
+ .long SYMBOL_NAME(sys_setfsuid16)
+ .long SYMBOL_NAME(sys_setfsgid16)
+/* 140 */ .long SYMBOL_NAME(sys_llseek)
.long SYMBOL_NAME(sys_getdents)
.long SYMBOL_NAME(sys_select)
.long SYMBOL_NAME(sys_flock)
@@ -173,14 +173,14 @@
.long SYMBOL_NAME(sys_sched_rr_get_interval)
.long SYMBOL_NAME(sys_nanosleep)
.long SYMBOL_NAME(sys_mremap)
- .long SYMBOL_NAME(sys_setresuid)
-/* 165 */ .long SYMBOL_NAME(sys_getresuid)
+ .long SYMBOL_NAME(sys_setresuid16)
+/* 165 */ .long SYMBOL_NAME(sys_getresuid16)
.long SYMBOL_NAME(sys_ni_syscall)
.long SYMBOL_NAME(sys_query_module)
.long SYMBOL_NAME(sys_poll)
.long SYMBOL_NAME(sys_nfsservctl)
-/* 170 */ .long SYMBOL_NAME(sys_setresgid)
- .long SYMBOL_NAME(sys_getresgid)
+/* 170 */ .long SYMBOL_NAME(sys_setresgid16)
+ .long SYMBOL_NAME(sys_getresgid16)
.long SYMBOL_NAME(sys_prctl)
.long SYMBOL_NAME(sys_rt_sigreturn_wrapper)
.long SYMBOL_NAME(sys_rt_sigaction)
@@ -191,7 +191,7 @@
.long SYMBOL_NAME(sys_rt_sigsuspend_wrapper)
/* 180 */ .long SYMBOL_NAME(sys_pread)
.long SYMBOL_NAME(sys_pwrite)
- .long SYMBOL_NAME(sys_chown)
+ .long SYMBOL_NAME(sys_chown16)
.long SYMBOL_NAME(sys_getcwd)
.long SYMBOL_NAME(sys_capget)
/* 185 */ .long SYMBOL_NAME(sys_capset)
@@ -207,8 +207,27 @@
/* 195 */ .long SYMBOL_NAME(sys_stat64)
.long SYMBOL_NAME(sys_lstat64)
.long SYMBOL_NAME(sys_fstat64)
+ .long SYMBOL_NAME(sys_lchown)
+ .long SYMBOL_NAME(sys_getuid)
+/* 200 */ .long SYMBOL_NAME(sys_getgid)
+ .long SYMBOL_NAME(sys_geteuid)
+ .long SYMBOL_NAME(sys_getegid)
+ .long SYMBOL_NAME(sys_setreuid)
+ .long SYMBOL_NAME(sys_setregid)
+/* 205 */ .long SYMBOL_NAME(sys_getgroups)
+ .long SYMBOL_NAME(sys_setgroups)
+ .long SYMBOL_NAME(sys_fchown)
+ .long SYMBOL_NAME(sys_setresuid)
+ .long SYMBOL_NAME(sys_getresuid)
+/* 210 */ .long SYMBOL_NAME(sys_setresgid)
+ .long SYMBOL_NAME(sys_getresgid)
+ .long SYMBOL_NAME(sys_chown)
+ .long SYMBOL_NAME(sys_setuid)
+ .long SYMBOL_NAME(sys_setgid)
+/* 215 */ .long SYMBOL_NAME(sys_setfsuid)
+ .long SYMBOL_NAME(sys_setfsgid)
- .rept NR_syscalls-197
+ .rept NR_syscalls-216
.long SYMBOL_NAME(sys_ni_syscall)
.endr
#endif
diff --git a/arch/arm/kernel/debug-armv.S b/arch/arm/kernel/debug-armv.S
index fef1489b7..5802dac70 100644
--- a/arch/arm/kernel/debug-armv.S
+++ b/arch/arm/kernel/debug-armv.S
@@ -134,19 +134,26 @@
#elif defined(CONFIG_ARCH_SA1100)
.macro addruart,rx
mov \rx, #0xf8000000
- add \rx, \rx, #0x00050000
+ add \rx, \rx, #0x00050000 @ Ser3
+ @add \rx, \rx, #0x00010000 @ Ser1
.endm
.macro senduart,rd,rx
- str \rd, [\rx, #0x14] @ UARTDR
+ str \rd, [\rx, #0x14] @ UTDR
.endm
- .macro busyuart,rd,rx
+ .macro waituart,rd,rx
1001: ldr \rd, [\rx, #0x20] @ UTSR1
- tst \rd, #1 << 2
+ tst \rd, #1 << 2 @ UTSR1_TNF
beq 1001b
.endm
+ .macro busyuart,rd,rx
+1001: ldr \rd, [\rx, #0x20] @ UTSR1
+ tst \rd, #1 << 0 @ UTSR1_TBY
+ bne 1001b
+ .endm
+
#else
#error Unknown architecture
#endif
diff --git a/arch/arm/kernel/dec21285.c b/arch/arm/kernel/dec21285.c
index dc7cc054e..6158e995a 100644
--- a/arch/arm/kernel/dec21285.c
+++ b/arch/arm/kernel/dec21285.c
@@ -220,7 +220,9 @@ void __init dc21285_init(void)
#ifdef CONFIG_HOST_FOOTBRIDGE
csrio.flags = IORESOURCE_IO;
+ csrio.name = "DC21285";
csrmem.flags = IORESOURCE_MEM;
+ csrmem.name = "DC21285";
allocate_resource(&ioport_resource, &csrio, 128,
0xff00, 0xffff, 128, NULL, NULL);
@@ -244,7 +246,7 @@ void __init dc21285_init(void)
(1 << 31) | (1 << 29) | (1 << 28) | (1 << 24);
#endif
- printk(KERN_DEBUG"PCI: DC21285 footbridge, revision %02lX\n",
+ printk(KERN_DEBUG "PCI: DC21285 footbridge, revision %02lX\n",
*CSR_CLASSREV & 0xff);
pci_scan_bus(0, &dc21285_ops, NULL);
diff --git a/arch/arm/kernel/entry-armo.S b/arch/arm/kernel/entry-armo.S
index 5d9ce0ac6..f2dc9e36c 100644
--- a/arch/arm/kernel/entry-armo.S
+++ b/arch/arm/kernel/entry-armo.S
@@ -535,7 +535,6 @@ Ldata_unknown: @ Part of jumptable
mov r0, r1
mov r1, r4
mov r2, r3
- mov r3, lr
b baddataabort
Ldata_ldrstr_post:
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 6d4107ede..f4f03ee93 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -429,7 +429,10 @@ __und_invalid: sub sp, sp, #S_FRAME_SIZE
and r2, r6, #31 @ int mode
b SYMBOL_NAME(bad_mode)
-
+#ifdef CONFIG_NWFPE
+ /* The FPE is always present */
+ .equ fpe_not_present, 0
+#else
wfs_mask_data: .word 0x0e200110 @ WFS/RFS
.word 0x0fef0fff
.word 0x0d0d0100 @ LDF [sp]/STF [sp]
@@ -466,6 +469,7 @@ fpe_not_present:
add r5, r5, r4, lsl #2
str r5, [sp, r6, lsr #14] @ Save reg
mov pc, r9
+#endif
/*
* SVC mode handlers
@@ -685,11 +689,11 @@ ENTRY(__switch_to)
stmfd sp!, {r4 - sl, fp, lr} @ Store most regs on stack
mrs ip, cpsr
stmfd sp!, {ip} @ Save cpsr_SVC
- ldr r2, [r1, #TSS_DOMAIN]
str sp, [r0, #TSS_SAVE] @ Save sp_SVC
ldr sp, [r1, #TSS_SAVE] @ Get saved sp_SVC
- mcr p15, 0, r2, c3, c0 @ Set domain register
+ ldr r2, [r1, #TSS_DOMAIN]
ldmfd sp!, {ip}
+ mcr p15, 0, r2, c3, c0 @ Set domain register
msr spsr, ip @ Save tasks CPSR into SPSR for this return
ldmfd sp!, {r4 - sl, fp, pc}^ @ Load all regs saved previously
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
index bdf6de6b3..2be1a6012 100644
--- a/arch/arm/kernel/entry-common.S
+++ b/arch/arm/kernel/entry-common.S
@@ -3,6 +3,9 @@
* All exits to user mode from the kernel go through this code.
*/
+#define S_OFF 8
+#define SYSCALL_REGS r4, r5
+
/*
* Define to favour ARM8, ARM9 and StrongARM cpus. This says that it is
* cheaper to use two LDR instructions than a two-register LDM, if the
@@ -16,9 +19,9 @@
.align 5
fast_syscall_return:
- str r0, [sp, #S_R0 + 4] @ returned r0
+ str r0, [sp, #S_R0 + S_OFF] @ returned r0
slow_syscall_return:
- add sp, sp, #4
+ add sp, sp, #S_OFF
ret_from_sys_call:
#ifdef HARVARD_CACHE
ldr r0, bh_data
@@ -74,65 +77,71 @@ ret_from_exception:
/*=============================================================================
* SWI handler
*-----------------------------------------------------------------------------
- *
- * We now handle sys-call tracing, and the errno in the task structure.
- * Still have a problem with >4 arguments for functions. Theres only
- * a couple of functions in the code that have 5 arguments, so Im not
- * too worried.
*/
+/*
+ * Create some aliases for some registers. These should allow
+ * us to have in theory up to 7 arguments to a function.
+ */
+scno .req r9 @ syscall number
+tbl .req r8 @ syscall table pointer
+tip .req r7 @ temporary IP
+
.align 5
vector_swi: save_user_regs
mask_pc lr, lr
mov fp, #0
- ldr r6, [lr, #-4] @ get SWI instruction
- arm700_bug_check r6, r7
+ ldr scno, [lr, #-4] @ get SWI instruction
+ arm700_bug_check scno, ip
#ifdef CONFIG_ALIGNMENT_TRAP
- ldr r7, .LCswi
- ldr r7, [r7]
- mcr p15, 0, r7, c1, c0
+ ldr ip, .LCswi
+ ldr ip, [ip]
+ mcr p15, 0, ip, c1, c0
#endif
- enable_irqs r7
+ enable_irqs ip
- str r4, [sp, #-4]! @ new style: (r0 = arg1, r4 = arg5)
+ stmdb sp!, {SYSCALL_REGS} @ new style: (r0 = arg1, r4 = arg5, r5 = arg6)
+ @ Note that we dont have to handle
+ @ sys_syscalls arg7 here
adrsvc al, lr, fast_syscall_return
- bic r6, r6, #0xff000000 @ mask off SWI op-code
- eor r6, r6, #OS_NUMBER<<20 @ check OS number
- cmp r6, #NR_syscalls @ check upper syscall limit
+ bic scno, scno, #0xff000000 @ mask off SWI op-code
+ eor scno, scno, #OS_NUMBER<<20 @ check OS number
+ cmp scno, #NR_syscalls @ check upper syscall limit
bcs 2f
- get_current_task r7
- ldr ip, [r7, #TSK_FLAGS] @ check for syscall tracing
- adr r5, SYMBOL_NAME(sys_call_table)
+ get_current_task ip
+ ldr ip, [ip, #TSK_FLAGS] @ check for syscall tracing
+ adr tbl, SYMBOL_NAME(sys_call_table)
tst ip, #PF_TRACESYS
- ldreq pc, [r5, r6, lsl #2] @ call sys routine
+ ldreq pc, [tbl, scno, lsl #2] @ call sys routine
- ldr r7, [sp, #S_IP + 4] @ save old IP
- mov r0, #0
- str r0, [sp, #S_IP + 4] @ trace entry [IP = 0]
+ ldr tip, [sp, #S_IP + S_OFF] @ save old IP
+ mov ip, #0
+ str ip, [sp, #S_IP + S_OFF] @ trace entry [IP = 0]
bl SYMBOL_NAME(syscall_trace)
- str r7, [sp, #S_IP + 4]
+ str tip, [sp, #S_IP + S_OFF]
- ldmib sp, {r0 - r3} @ have to reload r0 - r3
+ add ip, sp, #S_OFF
+ ldmia ip, {r0 - r3} @ have to reload r0 - r3
mov lr, pc
- ldr pc, [r5, r6, lsl #2] @ call sys routine
- str r0, [sp, #S_R0 + 4] @ returned r0
+ ldr pc, [tbl, scno, lsl #2] @ call sys routine
+ str r0, [sp, #S_R0 + S_OFF] @ returned r0
- mov r0, #1
- str r0, [sp, #S_IP + 4] @ trace exit [IP = 1]
+ mov ip, #1
+ str ip, [sp, #S_IP + S_OFF] @ trace exit [IP = 1]
bl SYMBOL_NAME(syscall_trace)
- str r7, [sp, #S_IP + 4]
+ str tip, [sp, #S_IP + S_OFF]
b slow_syscall_return
-2: add r1, sp, #4
- tst r6, #0x00f00000 @ is it a Unix SWI?
+2: add r1, sp, #S_OFF
+ tst scno, #0x00f00000 @ is it a Unix SWI?
bne 3f
- subs r0, r6, #(KSWI_SYS_BASE - KSWI_BASE)
+ subs r0, scno, #(KSWI_SYS_BASE - KSWI_BASE)
bcs SYMBOL_NAME(arm_syscall)
b SYMBOL_NAME(sys_ni_syscall) @ not private func
-3: eor r0, r6, #OS_NUMBER <<20 @ Put OS number back
+3: eor r0, scno, #OS_NUMBER <<20 @ Put OS number back
adrsvc al, lr, slow_syscall_return
b SYMBOL_NAME(deferred)
@@ -150,67 +159,49 @@ ENTRY(sys_call_table)
@ r0 = syscall number
@ r5 = syscall table
SYMBOL_NAME(sys_syscall):
- eor r6, r0, #OS_NUMBER << 20
- cmp r6, #NR_syscalls @ check range
- add ip, sp, #4
- ldmleib ip, {r0 - r4} @ get our args
- strle r4, [sp] @ Put our arg on the stack
- ldrle pc, [r5, r6, lsl #2]
+ eor scno, r0, #OS_NUMBER << 20
+ cmp scno, #NR_syscalls @ check range
+ add ip, sp, #S_OFF
+ ldmleib ip, {r0 - r3, SYSCALL_REGS} @ get our args
+ stmleia sp, {SYSCALL_REGS} @ Put our arg on the stack
+ ldrle pc, [tbl, scno, lsl #2]
mov r0, #-ENOSYS
- mov pc, lr
+ RETINSTR(mov,pc,lr)
sys_fork_wrapper:
- add r0, sp, #4
+ add r0, sp, #S_OFF
b SYMBOL_NAME(sys_fork)
sys_vfork_wrapper:
- add r0, sp, #4
+ add r0, sp, #S_OFF
b SYMBOL_NAME(sys_vfork)
sys_execve_wrapper:
- add r3, sp, #4
+ add r3, sp, #S_OFF
b SYMBOL_NAME(sys_execve)
-sys_mount_wrapper:
- mov r6, lr
- add r5, sp, #4
- str r5, [sp]
- str r4, [sp, #-4]!
- bl SYMBOL_NAME(sys_compat_mount)
- add sp, sp, #4
- RETINSTR(mov,pc,r6)
-
sys_clone_wapper:
- add r2, sp, #4
+ add r2, sp, #S_OFF
b SYMBOL_NAME(sys_clone)
-sys_llseek_wrapper:
- mov r6, lr
- add r5, sp, #4
- str r5, [sp]
- str r4, [sp, #-4]!
- bl SYMBOL_NAME(sys_compat_llseek)
- add sp, sp, #4
- RETINSTR(mov,pc,r6)
-
sys_sigsuspend_wrapper:
- add r3, sp, #4
+ add r3, sp, #S_OFF
b SYMBOL_NAME(sys_sigsuspend)
sys_rt_sigsuspend_wrapper:
- add r2, sp, #4
+ add r2, sp, #S_OFF
b SYMBOL_NAME(sys_rt_sigsuspend)
sys_sigreturn_wrapper:
- add r0, sp, #4
+ add r0, sp, #S_OFF
b SYMBOL_NAME(sys_sigreturn)
sys_rt_sigreturn_wrapper:
- add r0, sp, #4
+ add r0, sp, #S_OFF
b SYMBOL_NAME(sys_rt_sigreturn)
sys_sigaltstack_wrapper:
- ldr r2, [sp, #4 + S_SP]
+ ldr r2, [sp, #S_OFF + S_SP]
b do_sigaltstack
.data
diff --git a/arch/arm/kernel/head-armv.S b/arch/arm/kernel/head-armv.S
index 2996d89af..35e71a4a9 100644
--- a/arch/arm/kernel/head-armv.S
+++ b/arch/arm/kernel/head-armv.S
@@ -69,7 +69,7 @@ ENTRY(_stext)
* r1 contains the unique architecture number. See
* linux/arch/arm/kernel/setup.c machine_desc[] array for the complete
* list. If you require a new number, please follow the instructions
- * given in Documentation/ARM-README.
+ * given in Documentation/arm/README.
*/
__entry: teq r0, #0
movne r0, #'i'
@@ -83,7 +83,7 @@ __entry: teq r0, #0
moveq r0, #'a'
beq __error
bl __create_page_tables
- adr lr, __aligned_call
+ adr lr, __ret
add pc, r10, #12 @ flush caches (returns ctrl reg)
__switch_data: .long __mmap_switched
@@ -94,16 +94,11 @@ __switch_data: .long __mmap_switched
.long SYMBOL_NAME(cr_alignment)
.long SYMBOL_NAME(init_task_union)+8192
- /*
- * This needs to be aligned to a cache line.
- */
- .align 5
-__aligned_call:
- ldr lr, __switch_data
-#ifdef CONFIG_ALIGNMENT_TRAP
- orr r0, r0, #2 @ ...........A.
-#endif
+__ret: ldr lr, __switch_data
mcr p15, 0, r0, c1, c0
+ mov r0, r0
+ mov r0, r0
+ mov r0, r0
mov pc, lr
/*
@@ -126,6 +121,9 @@ __mmap_switched:
str r9, [r6] @ Save processor ID
str r1, [r7] @ Save machine type
+#ifdef CONFIG_ALIGNMENT_TRAP
+ orr r0, r0, #2 @ ...........A.
+#endif
bic r2, r0, #2 @ Clear 'A' bit
stmia r8, {r0, r2} @ Save control register values
b SYMBOL_NAME(start_kernel)
@@ -137,16 +135,16 @@ __mmap_switched:
* amount which are required to get the kernel running, which
* generally means mapping in the kernel code.
*
- * We only map in 2MB of RAM, which should be sufficient in
+ * We only map in 4MB of RAM, which should be sufficient in
* all cases.
*
- * r4 = physical address of page tables
* r5 = physical address of start of RAM
* r6 = physical IO address
* r7 = byte offset into page tables for IO
* r8 = page table flags
*/
__create_page_tables:
+ add r4, r5, #SWAPPER_PGDIR_OFFSET
mov r0, r4
mov r3, #0
add r2, r0, #0x4000 @ Clear page table
@@ -157,13 +155,22 @@ __create_page_tables:
teq r0, r2
bne 1b
/*
- * map in two sections (2MB) for kernel.
+ * Create identity mapping for first MB of kernel.
+ * map in four sections (4MB) for kernel.
* these are marked cacheable and bufferable.
+ *
+ * The identity mapping will be removed by paging_init()
*/
- add r0, r4, #(TEXTADDR - 0x8000) >> 18
mov r3, #0x0c
orr r3, r3, r8
add r3, r3, r5
+ add r0, r4, r5, lsr #18
+ str r3, [r0]
+ add r0, r4, #(TEXTADDR - 0x8000) >> 18
+ str r3, [r0], #4
+ add r3, r3, #1 << 20
+ str r3, [r0], #4
+ add r3, r3, #1 << 20
str r3, [r0], #4
add r3, r3, #1 << 20
str r3, [r0], #4
@@ -174,8 +181,11 @@ __create_page_tables:
* via a serial before paging_init.
*/
add r0, r4, r7
+ rsb r3, r7, #0x4000 @ PTRS_PER_PGD*sizeof(long)
+ cmp r3, #0x0800
+ addge r2, r0, #0x0800
+ addlt r2, r0, r3
orr r3, r6, r8
- add r2, r0, #0x0800
1: str r3, [r0], #4
add r3, r3, #1 << 20
teq r0, r2
@@ -273,7 +283,7 @@ __lookup_processor_type:
* Lookup machine architecture
* r1 = machine architecture number
* Returns:
- * r4 = physical address of page tables
+ * r4 = unused word
* r5 = physical start address of RAM
* r6 = physical address of IO
* r7 = byte offset into page tables for IO
@@ -284,7 +294,6 @@ __lookup_architecture_type:
adr r4, __arch_types_start
add r4, r4, r1, lsl #4
ldmia r4, {r4, r5, r6, r7}
- add r4, r5, #SWAPPER_PGDIR_OFFSET
mov r7, r7, lsr #18
mov pc, lr
1: mov r7, #0
@@ -330,20 +339,20 @@ __arch_types_start:
@ 0x04 - DEC EBSA285
.long 0
.long 0
- .long 0x24000000 @ I/O base address (0x42000000 -> 0xfe000000)
- .long 0xe0000000
+ .long DC21285_ARMCSR_BASE
+ .long 0xfe000000
@ 0x05 - Rebel.com NetWinder
.long 0
.long 0
- .long 0x24000000 @ I/O base address (0x42000000 -> 0xfe000000)
- .long 0xe0000000
+ .long DC21285_ARMCSR_BASE
+ .long 0xfe000000
@ 0x06 - CATS
.long 0
.long 0
- .long 0x24000000 @ I/O base address (0x42000000 -> 0xfe000000)
- .long 0xe0000000
+ .long DC21285_ARMCSR_BASE
+ .long 0xfe000000
@ 0x07 - tbox
.long 0
@@ -398,9 +407,16 @@ __arch_types_start:
.long 0
.long 0
.long 0
-__arch_types_end:
- @ unknown - SA1100
+
+ @ 0x10 - SA1100
.long 0
.long 0xc0000000
.long 0x80000000
- .long 0xe0000000
+ .long 0xf8000000
+
+ /*
+ * Don't add anything here unless you have an
+ * architecture number allocated - see
+ * Documentation/arm/README
+ */
+__arch_types_end:
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 9afacbde3..46afd5938 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -50,13 +50,13 @@ void enable_hlt(void)
static int __init nohlt_setup(char *__unused)
{
hlt_counter = 1;
- return 0;
+ return 1;
}
static int __init hlt_setup(char *__unused)
{
hlt_counter = 0;
- return 0;
+ return 1;
}
__setup("nohlt", nohlt_setup);
@@ -114,6 +114,7 @@ void machine_halt(void)
void machine_power_off(void)
{
+ arch_power_off();
}
void show_regs(struct pt_regs * regs)
@@ -284,7 +285,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
int dump_fpu (struct pt_regs *regs, struct user_fp *fp)
{
if (current->used_math)
- memcpy(fp, &current->thread.fpstate.soft, sizeof (fp));
+ memcpy(fp, &current->thread.fpstate.soft, sizeof (*fp));
return current->used_math;
}
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index a060bf4d9..a2f7292f6 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -54,13 +54,13 @@ struct meminfo meminfo;
struct machine_desc {
const char *name; /* architecture name */
unsigned int param_offset; /* parameter page */
+ unsigned int video_start; /* start of video RAM */
+ unsigned int video_end; /* end of video RAM */
unsigned int reserve_lp0 :1; /* never has lp0 */
unsigned int reserve_lp1 :1; /* never has lp1 */
unsigned int reserve_lp2 :1; /* never has lp2 */
unsigned int broken_hlt :1; /* hlt is broken */
unsigned int soft_reboot :1; /* soft reboot */
- unsigned int video_start; /* start of video RAM */
- unsigned int video_end; /* end of video RAM */
void (*fixup)(struct machine_desc *,
struct param_struct *, char **);
};
@@ -201,7 +201,7 @@ parse_cmdline(char **cmdline_p, char *from)
meminfo.nr_banks = 0;
}
- start = 0;
+ start = PHYS_OFFSET;
size = memparse(from + 4, &from);
if (*from == '@')
start = memparse(from + 1, &from);
@@ -250,17 +250,18 @@ static void __init setup_initrd(unsigned int start, unsigned int size)
}
#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT)
-#define P_PFN_DOWN(x) O_PFN_DOWN((x) - PHYS_OFFSET)
#define V_PFN_DOWN(x) O_PFN_DOWN(__pa(x))
#define O_PFN_UP(x) (PAGE_ALIGN(x) >> PAGE_SHIFT)
-#define P_PFN_UP(x) O_PFN_UP((x) - PHYS_OFFSET)
#define V_PFN_UP(x) O_PFN_UP(__pa(x))
#define PFN_SIZE(x) ((x) >> PAGE_SHIFT)
#define PFN_RANGE(s,e) PFN_SIZE(PAGE_ALIGN((unsigned long)(e)) - \
(((unsigned long)(s)) & PAGE_MASK))
+/*
+ * FIXME: These can be removed when Ingo's cleanup patch goes in
+ */
#define free_bootmem(s,sz) free_bootmem((s)<<PAGE_SHIFT, (sz)<<PAGE_SHIFT)
#define reserve_bootmem(s,sz) reserve_bootmem((s)<<PAGE_SHIFT, (sz)<<PAGE_SHIFT)
@@ -277,10 +278,10 @@ static unsigned int __init find_bootmap_pfn(unsigned int bootmap_pages)
*/
#ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) {
- if (__pa(initrd_end) > (meminfo.end + PHYS_OFFSET)) {
+ if (__pa(initrd_end) > meminfo.end) {
printk ("initrd extends beyond end of memory "
"(0x%08lx > 0x%08lx) - disabling initrd\n",
- __pa(initrd_end), meminfo.end + PHYS_OFFSET);
+ __pa(initrd_end), meminfo.end);
initrd_start = 0;
initrd_end = 0;
}
@@ -373,7 +374,7 @@ static void __init setup_bootmem(void)
#endif
#ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start)
- reserve_bootmem(O_PFN_DOWN(initrd_start),
+ reserve_bootmem(V_PFN_DOWN(initrd_start),
PFN_RANGE(initrd_start, initrd_end));
#endif
}
@@ -528,16 +529,66 @@ fixup_coebsa285(struct machine_desc *desc, struct param_struct *params,
char **cmdline)
{
#if 0
- if (machine_is_co285()) {
- extern unsigned long boot_memory_end;
- extern char boot_command_line[];
+ extern unsigned long boot_memory_end;
+ extern char boot_command_line[];
- meminfo.nr_banks = 1;
- meminfo.bank[0].start = PHYS_OFFSET;
- meminfo.bank[0].size = boot_memory_end;
+ meminfo.nr_banks = 1;
+ meminfo.bank[0].start = PHYS_OFFSET;
+ meminfo.bank[0].size = boot_memory_end;
+
+ *cmdline = boot_command_line;
+#endif
+}
- *cmdline = boot_command_line;
+static void __init
+fixup_sa1100(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline)
+{
+#ifdef CONFIG_ARCH_SA1100
+ int i;
+ extern struct mem_desc {
+ unsigned long phys_start;
+ unsigned long length;
+ } mem_desc[];
+ extern unsigned int mem_desc_size;
+
+ for( i = 0; i < mem_desc_size; i++ ) {
+ if( i >= NR_BANKS ) {
+ printk( __FUNCTION__
+ ": mem_desc too large for meminfo structure\n");
+ break;
+ }
+ meminfo.bank[i].start = mem_desc[i].phys_start;
+ meminfo.bank[i].size = mem_desc[i].length;
}
+ meminfo.nr_banks = i;
+
+#if defined(CONFIG_SA1100_BRUTUS)
+ ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
+ setup_ramdisk( 1, 0, 0, 8192 );
+ setup_initrd( __phys_to_virt(0xd8000000), 0x00400000 );
+#elif defined(CONFIG_SA1100_EMPEG)
+ ROOT_DEV = MKDEV( 3, 1 ); /* /dev/hda1 */
+ setup_ramdisk( 1, 0, 0, 4096 );
+ setup_initrd( 0xd0000000+((1024-320)*1024), (320*1024) );
+#elif defined(CONFIG_SA1100_TIFON)
+ ROOT_DEV = MKDEV(UNNAMED_MAJOR, 0);
+ setup_ramdisk(1, 0, 0, 4096);
+ setup_initrd( 0xd0000000 + 0x1100004, 0x140000 );
+#elif defined(CONFIG_SA1100_VICTOR)
+ ROOT_DEV = MKDEV( 60, 2 );
+
+ /* Get command line parameters passed from the loader (if any) */
+ if( *((char*)0xc0000000) )
+ strcpy( default_command_line, ((char *)0xc0000000) );
+
+ /* power off if any problem */
+ strcat( default_command_line, " panic=1" );
+#elif defined(CONFIG_SA1100_LART)
+ ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
+ setup_ramdisk(1, 0, 0, 8192);
+ setup_initrd(0xc0400000, 0x00400000);
+#endif
#endif
}
@@ -565,7 +616,7 @@ static struct machine_desc machine_desc[] __initdata = {
NO_VIDEO,
0, 0, 0, 0, 0,
NULL
- }, { "Nexus-FTV/PCI", /* Philip Blundell */
+ }, { "FTV/PCI", /* Philip Blundell */
NO_PARAMS,
NO_VIDEO,
0, 0, 0, 0, 0,
@@ -627,9 +678,15 @@ static struct machine_desc machine_desc[] __initdata = {
NULL
}, { "Shark", /* Alexander Schulz */
NO_PARAMS,
- NO_VIDEO,
+ /* do you really mean 0x200000? */
+ 0x06000000, 0x06000000+0x00200000,
0, 0, 0, 0, 0,
NULL
+ }, { "SA1100-based", /* Nicolas Pitre */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ fixup_sa1100
}
};
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 852bbfac1..f9fbd2536 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -18,6 +18,7 @@
#include <linux/stddef.h>
#include <linux/binfmts.h>
#include <linux/tty.h>
+#include <linux/highuid.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
@@ -277,6 +278,7 @@ setup_sigcontext(struct sigcontext *sc, /*struct _fpstate *fpstate,*/
err |= __put_user (current->thread.trap_no, &sc->trap_no);
err |= __put_user (current->thread.error_code, &sc->error_code);
+ err |= __put_user (current->thread.address, &sc->fault_address);
err |= __put_user (mask, &sc->oldmask);
return err;
@@ -500,6 +502,7 @@ asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
info.si_code = SI_USER;
info.si_pid = current->p_pptr->pid;
info.si_uid = current->p_pptr->uid;
+ info.si_uid16 = high2lowuid(current->p_pptr->uid);
}
/* If the (new) signal is now blocked, requeue it. */
diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c
index 408149bc5..5e989663b 100644
--- a/arch/arm/kernel/sys_arm.c
+++ b/arch/arm/kernel/sys_arm.c
@@ -79,12 +79,26 @@ out:
return error;
}
+#define PGOFF_SHIFT (PAGE_SHIFT - 12)
+#define PGOFF_MASK (~((1 << PGOFF_SHIFT) - 1))
+
/*
- * Perform the select(nd, in, out, ex, tv) and mmap() system
- * calls. ARM Linux didn't use to be able to handle more than
- * 4 system call parameters, so these system calls used a memory
- * block for parameter passing..
+ * Note: off_4k is always units of 4K. If we can't do the requested
+ * offset, we return EINVAL.
*/
+asmlinkage long
+sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
+ unsigned long flags, unsigned long fd, unsigned long off_4k)
+{
+ unsigned long pgoff;
+
+ if (off_4k & ~PGOFF_MASK)
+ return -EINVAL;
+
+ pgoff = off_4k >> PGOFF_SHIFT;
+
+ return do_mmap2(addr, len, prot, flags, fd, pgoff);
+}
struct mmap_arg_struct {
unsigned long addr;
@@ -112,6 +126,10 @@ out:
return error;
}
+/*
+ * Perform the select(nd, in, out, ex, tv) and mmap() system
+ * calls.
+ */
extern asmlinkage int sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
struct sel_arg_struct {
@@ -251,48 +269,11 @@ out:
return error;
}
-/*
- * Detect the old function calling standard
- */
-static inline unsigned long old_calling_standard (struct pt_regs *regs)
-{
- unsigned long instr, *pcv = (unsigned long *)(instruction_pointer(regs) - 8);
- return (!get_user (instr, pcv) && instr == 0xe1a0300d);
-}
-
/* Compatability functions - we used to pass 5 parameters as r0, r1, r2, *r3, *(r3+4)
* We now use r0 - r4, and return an error if the old style calling standard is used.
* Eventually these functions will disappear.
*/
-asmlinkage int
-sys_compat_llseek (unsigned int fd, unsigned long offset_high, unsigned long offset_low,
- loff_t *result, unsigned int origin, struct pt_regs *regs)
-{
- extern int sys_llseek (unsigned int, unsigned long, unsigned long, loff_t *, unsigned int);
-
- if (old_calling_standard (regs)) {
- printk (KERN_NOTICE "%s (%d): unsupported llseek call standard\n",
- current->comm, current->pid);
- return -EINVAL;
- }
- return sys_llseek (fd, offset_high, offset_low, result, origin);
-}
-
-asmlinkage int
-sys_compat_mount (char *devname, char *dirname, char *type, unsigned long flags, void *data,
- struct pt_regs *regs)
-{
- extern int sys_mount (char *, char *, char *, unsigned long, void *);
-
- if (old_calling_standard (regs)) {
- printk (KERN_NOTICE "%s (%d): unsupported mount call standard\n",
- current->comm, current->pid);
- return -EINVAL;
- }
- return sys_mount (devname, dirname, type, flags, data);
-}
-
-asmlinkage int sys_uname (struct old_utsname * name)
+asmlinkage int sys_uname(struct old_utsname * name)
{
static int warned = 0;
int err;
@@ -331,15 +312,15 @@ asmlinkage int sys_olduname(struct oldold_utsname * name)
down(&uts_sem);
error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN);
- error -= __put_user(0,name->sysname+__OLD_UTS_LEN);
- error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
- error -= __put_user(0,name->nodename+__OLD_UTS_LEN);
- error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
- error -= __put_user(0,name->release+__OLD_UTS_LEN);
- error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
- error -= __put_user(0,name->version+__OLD_UTS_LEN);
- error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
- error -= __put_user(0,name->machine+__OLD_UTS_LEN);
+ error |= __put_user(0,name->sysname+__OLD_UTS_LEN);
+ error |= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
+ error |= __put_user(0,name->nodename+__OLD_UTS_LEN);
+ error |= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
+ error |= __put_user(0,name->release+__OLD_UTS_LEN);
+ error |= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
+ error |= __put_user(0,name->version+__OLD_UTS_LEN);
+ error |= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN);
+ error |= __put_user(0,name->machine+__OLD_UTS_LEN);
up(&uts_sem);
@@ -354,4 +335,3 @@ asmlinkage int sys_pause(void)
schedule();
return -ERESTARTNOHAND;
}
-
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index c48c62108..67c2597e6 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -112,7 +112,7 @@ void do_gettimeofday(struct timeval *tv)
/*
* xtime is atomically updated in timer_bh. lost_ticks is
- * nonzero if the tiemr bottom half hasnt executed yet.
+ * nonzero if the timer bottom half hasnt executed yet.
*/
if (lost_ticks)
tv->tv_usec += USECS_PER_JIFFY;
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 26ecfa194..ac15651d3 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -187,10 +187,11 @@ void die(const char *str, struct pt_regs *regs, int err)
dump_instr(instruction_pointer(regs), 0);
}
- spin_unlock_irq(&die_lock);
+ spin_unlock_irq(&die_lock);
+ do_exit(SIGSEGV);
}
-static void die_if_kernel(const char *str, struct pt_regs *regs, int err)
+void die_if_kernel(const char *str, struct pt_regs *regs, int err)
{
if (user_mode(regs))
return;
@@ -241,11 +242,10 @@ asmlinkage void do_unexp_fiq (struct pt_regs *regs)
}
/*
- * bad_mode handles the impossible case in the vectors.
- * If you see one of these, then it's extremely serious,
- * and could mean you have buggy hardware. It never
- * returns, and never tries to sync. We hope that we
- * can dump out some state information...
+ * bad_mode handles the impossible case in the vectors. If you see one of
+ * these, then it's extremely serious, and could mean you have buggy hardware.
+ * It never returns, and never tries to sync. We hope that we can at least
+ * dump out some state information...
*/
asmlinkage void bad_mode(struct pt_regs *regs, int reason, int proc_mode)
{
@@ -255,7 +255,8 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason, int proc_mode)
handler[reason], processor_modes[proc_mode]);
/*
- * Dump out the vectors and stub routines
+ * Dump out the vectors and stub routines. Maybe a better solution
+ * would be to dump them out only if we detect that they are corrupted.
*/
printk(KERN_CRIT "Vectors:\n");
dump_mem(0, 0x40);
@@ -279,6 +280,9 @@ asmlinkage void math_state_restore (void)
current->used_math = 1;
}
+/*
+ * Handle some more esoteric system calls
+ */
asmlinkage int arm_syscall (int no, struct pt_regs *regs)
{
switch (no) {
@@ -295,7 +299,7 @@ asmlinkage int arm_syscall (int no, struct pt_regs *regs)
case 2: /* sys_cacheflush */
#ifdef CONFIG_CPU_32
- /* r0 = start, r1 = length, r2 = flags */
+ /* r0 = start, r1 = end, r2 = flags */
cpu_flush_cache_area(regs->ARM_r0, regs->ARM_r1, 1);
#endif
break;
@@ -308,7 +312,7 @@ asmlinkage int arm_syscall (int no, struct pt_regs *regs)
if (no <= 0x7ff)
return -ENOSYS;
#ifdef CONFIG_DEBUG_USER
- /* experiance shows that these seem to indicate that
+ /* experience shows that these seem to indicate that
* something catastrophic has happened
*/
printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no);
@@ -357,16 +361,19 @@ asmlinkage void arm_invalidptr(const char *function, int size)
function, __builtin_return_address(0), size);
}
-#ifdef CONFIG_CPU_26
-asmlinkage void baddataabort(int code, unsigned long instr, struct pt_regs *regs)
+/*
+ * A data abort trap was taken, but the instruction was not an instruction
+ * which should cause the trap to be taken. Try to abort it. Note that
+ * the while(1) is there because we cannot currently handle returning from
+ * this function.
+ */
+asmlinkage void
+baddataabort(int code, unsigned long instr, struct pt_regs *regs)
{
unsigned long phys, addr = instruction_pointer(regs);
#ifdef CONFIG_DEBUG_ERRORS
- printk("pid=%d\n", current->pid);
-
- show_regs(regs);
- dump_instr(instruction_pointer(regs), 1);
+ dump_instr(addr, 1);
{
pgd_t *pgd;
@@ -385,10 +392,10 @@ asmlinkage void baddataabort(int code, unsigned long instr, struct pt_regs *regs
printk ("\n");
}
#endif
- panic("unknown data abort code %d [pc=%08lx *pc=%08lx lr=%08lx sp=%08lx]",
- code, regs->ARM_pc, instr, regs->ARM_lr, regs->ARM_sp);
+ force_sig(SIGILL, current);
+ die_if_kernel("unknown data abort code", regs, instr);
+ while (1);
}
-#endif
void __bug(const char *file, int line, void *data)
{
@@ -425,6 +432,19 @@ asmlinkage void __div0(void)
__backtrace();
}
+void abort(void)
+{
+ void *lr = __builtin_return_address(0);
+
+ printk(KERN_CRIT "abort() called from %p! (Please "
+ "report to rmk@arm.linux.org.uk)\n", lr);
+
+ *(int *)0 = 0;
+
+ /* if that doesn't kill us, halt */
+ panic("Oops failed to kill thread");
+}
+
void __init trap_init(void)
{
extern void __trap_init(void);
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 9a22fe08f..5046a3377 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -5,8 +5,14 @@
#
L_TARGET := lib.a
-L_OBJS := backtrace.o bitops.o checksum.o delay.o \
- string.o system.o uaccess.o
+L_OBJS := changebit.o csumipv6.o csumpartial.o csumpartialcopy.o \
+ csumpartialcopyuser.o clearbit.o copy_page.o findbit.o \
+ memchr.o memcpy.o memset.o memzero.o setbit.o strchr.o \
+ strrchr.o testchangebit.o testclearbit.o testsetbit.o \
+ uaccess.o
+
+O_TARGET := lib.o
+O_OBJS := backtrace.o delay.o
ifeq ($(PROCESSOR),armo)
L_OBJS += uaccess-armo.o
@@ -25,13 +31,21 @@ endif
ifeq ($(MACHINE),ebsa110)
L_OBJS += io-ebsa110.o
else
- LX_OBJS += io.o
+ OX_OBJS += io.o
endif
ifeq ($(MACHINE),footbridge)
L_OBJS += io-footbridge.o
endif
+#
+# SA1100 IO routines happen to be the
+# same as the footbridge routines
+#
+ifeq ($(MACHINE),sa1100)
+ L_OBJS += io-footbridge.o
+endif
+
include $(TOPDIR)/Rules.make
.S.o:
@@ -42,5 +56,3 @@ constants.h: getconsdata.o extractconstants.pl
getconsdata.o: getconsdata.c
$(CC) $(CFLAGS) -c getconsdata.c
-
-checksum.o string.o: constants.h
diff --git a/arch/arm/lib/bitops.S b/arch/arm/lib/bitops.S
deleted file mode 100644
index 4c1f4b0aa..000000000
--- a/arch/arm/lib/bitops.S
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * linux/arch/arm/lib/bitops.S
- *
- * Copyright (C) 1995, 1996 Russell King
- */
-
-#include <linux/linkage.h>
-#include <asm/assembler.h>
- .text
-
-@ Purpose : Function to set a bit
-@ Prototype: int set_bit(int bit,int *addr)
-
-ENTRY(set_bit)
- and r2, r0, #7
- mov r3, #1
- mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1, r0, lsr #3]
- orr r2, r2, r3
- strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-ENTRY(test_and_set_bit)
- add r1, r1, r0, lsr #3 @ Get byte offset
- and r3, r0, #7 @ Get bit offset
- mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1]
- tst r2, r0, lsl r3
- orr r2, r2, r0, lsl r3
- moveq r0, #0
- strb r2, [r1]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-@ Purpose : Function to clear a bit
-@ Prototype: int clear_bit(int bit,int *addr)
-
-ENTRY(clear_bit)
- and r2, r0, #7
- mov r3, #1
- mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1, r0, lsr #3]
- bic r2, r2, r3
- strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-ENTRY(test_and_clear_bit)
- add r1, r1, r0, lsr #3 @ Get byte offset
- and r3, r0, #7 @ Get bit offset
- mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1]
- tst r2, r0, lsl r3
- bic r2, r2, r0, lsl r3
- moveq r0, #0
- strb r2, [r1]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-/* Purpose : Function to change a bit
- * Prototype: int change_bit(int bit,int *addr)
- */
-ENTRY(change_bit)
- and r2, r0, #7
- mov r3, #1
- mov r3, r3, lsl r2
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1, r0, lsr #3]
- eor r2, r2, r3
- strb r2, [r1, r0, lsr #3]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-ENTRY(test_and_change_bit)
- add r1, r1, r0, lsr #3
- and r3, r0, #7
- mov r0, #1
- SAVEIRQS(ip)
- DISABLEIRQS(ip)
- ldrb r2, [r1]
- tst r2, r0, lsl r3
- eor r2, r2, r0, lsl r3
- moveq r0, #0
- strb r2, [r1]
- RESTOREIRQS(ip)
- RETINSTR(mov,pc,lr)
-
-@ Purpose : Find a 'zero' bit
-@ Prototype: int find_first_zero_bit(char *addr,int maxbit);
-
-ENTRY(find_first_zero_bit)
- mov r2, #0 @ Initialise bit position
-Lfindzbit1lp: ldrb r3, [r0, r2, lsr #3] @ Check byte, if 0xFF, then all bits set
- teq r3, #0xFF
- bne Lfoundzbit
- add r2, r2, #8
- cmp r2, r1 @ Check to see if we have come to the end
- bcc Lfindzbit1lp
- add r0, r1, #1 @ Make sure that we flag an error
- RETINSTR(mov,pc,lr)
-Lfoundzbit: tst r3, #1 @ Check individual bits
- moveq r0, r2
- RETINSTR(moveq,pc,lr)
- tst r3, #2
- addeq r0, r2, #1
- RETINSTR(moveq,pc,lr)
- tst r3, #4
- addeq r0, r2, #2
- RETINSTR(moveq,pc,lr)
- tst r3, #8
- addeq r0, r2, #3
- RETINSTR(moveq,pc,lr)
- tst r3, #16
- addeq r0, r2, #4
- RETINSTR(moveq,pc,lr)
- tst r3, #32
- addeq r0, r2, #5
- RETINSTR(moveq,pc,lr)
- tst r3, #64
- addeq r0, r2, #6
- RETINSTR(moveq,pc,lr)
- add r0, r2, #7
- RETINSTR(mov,pc,lr)
-
-@ Purpose : Find next 'zero' bit
-@ Prototype: int find_next_zero_bit(char *addr,int maxbit,int offset)
-
-ENTRY(find_next_zero_bit)
- tst r2, #7
- beq Lfindzbit1lp @ If new byte, goto old routine
- ldrb r3, [r0, r2, lsr#3]
- orr r3, r3, #0xFF00 @ Set top bits so we wont get confused
- stmfd sp!, {r4}
- and r4, r2, #7
- mov r3, r3, lsr r4 @ Shift right by no. of bits
- ldmfd sp!, {r4}
- and r3, r3, #0xFF
- teq r3, #0xFF
- orreq r2, r2, #7
- addeq r2, r2, #1
- beq Lfindzbit1lp @ If all bits are set, goto old routine
- b Lfoundzbit
diff --git a/arch/arm/lib/changebit.S b/arch/arm/lib/changebit.S
new file mode 100644
index 000000000..8005fd49a
--- /dev/null
+++ b/arch/arm/lib/changebit.S
@@ -0,0 +1,26 @@
+/*
+ * linux/arch/arm/lib/changebit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+/* Purpose : Function to change a bit
+ * Prototype: int change_bit(int bit,int *addr)
+ */
+ENTRY(change_bit)
+ and r2, r0, #7
+ mov r3, #1
+ mov r3, r3, lsl r2
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1, r0, lsr #3]
+ eor r2, r2, r3
+ strb r2, [r1, r0, lsr #3]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/clearbit.S b/arch/arm/lib/clearbit.S
new file mode 100644
index 000000000..d936ab549
--- /dev/null
+++ b/arch/arm/lib/clearbit.S
@@ -0,0 +1,26 @@
+/*
+ * linux/arch/arm/lib/clearbit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+@ Purpose : Function to clear a bit
+@ Prototype: int clear_bit(int bit,int *addr)
+
+ENTRY(clear_bit)
+ and r2, r0, #7
+ mov r3, #1
+ mov r3, r3, lsl r2
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1, r0, lsr #3]
+ bic r2, r2, r3
+ strb r2, [r1, r0, lsr #3]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/copy_page.S b/arch/arm/lib/copy_page.S
new file mode 100644
index 000000000..16c43268a
--- /dev/null
+++ b/arch/arm/lib/copy_page.S
@@ -0,0 +1,35 @@
+/*
+ * linux/arch/arm/lib/copypage.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ *
+ * ASM optimised string functions
+ *
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+/*
+ * StrongARM optimised copy_page routine
+ * now 1.72bytes/cycle, was 1.60 bytes/cycle
+ * (50MHz bus -> 86MB/s)
+ */
+
+ENTRY(copy_page)
+ stmfd sp!, {r4, lr} @ 2
+ mov r2, #PAGE_SZ/64 @ 1
+1: ldmia r1!, {r3, r4, ip, lr} @ 4
+ subs r2, r2, #1 @ 1
+ stmia r0!, {r3, r4, ip, lr} @ 4
+ ldmia r1!, {r3, r4, ip, lr} @ 4+1
+ stmia r0!, {r3, r4, ip, lr} @ 4
+ ldmia r1!, {r3, r4, ip, lr} @ 4+1
+ stmia r0!, {r3, r4, ip, lr} @ 4
+ ldmia r1!, {r3, r4, ip, lr} @ 4+1
+ stmia r0!, {r3, r4, ip, lr} @ 4
+ bne 1b @ 1
+ LOADREGS(fd, sp!, {r4, pc}) @ 3
+
+
diff --git a/arch/arm/lib/csumipv6.S b/arch/arm/lib/csumipv6.S
new file mode 100644
index 000000000..76e7d26d8
--- /dev/null
+++ b/arch/arm/lib/csumipv6.S
@@ -0,0 +1,28 @@
+/*
+ * linux/arch/arm/lib/csumipv6.S
+ *
+ * Copyright (C) 1995-1998 Russell King
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+ .text
+
+ENTRY(__csum_ipv6_magic)
+ str lr, [sp, #-4]!
+ adds ip, r2, r3
+ ldmia r1, {r1 - r3, lr}
+ adcs ip, ip, r1
+ adcs ip, ip, r2
+ adcs ip, ip, r3
+ adcs ip, ip, lr
+ ldmia r0, {r0 - r3}
+ adcs r0, ip, r0
+ adcs r0, r0, r1
+ adcs r0, r0, r2
+ ldr r2, [sp, #4]
+ adcs r0, r0, r3
+ adcs r0, r0, r2
+ adcs r0, r0, #0
+ LOADREGS(fd, sp!, {pc})
+
diff --git a/arch/arm/lib/csumpartial.S b/arch/arm/lib/csumpartial.S
new file mode 100644
index 000000000..2406dfb38
--- /dev/null
+++ b/arch/arm/lib/csumpartial.S
@@ -0,0 +1,64 @@
+/*
+ * linux/arch/arm/lib/csumpartial.S
+ *
+ * Copyright (C) 1995-1998 Russell King
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+ .text
+
+/* Function: __u32 csum_partial(const char *src, int len, __u32)
+ * Params : r0 = buffer, r1 = len, r2 = checksum
+ * Returns : r0 = new checksum
+ */
+
+ENTRY(csum_partial)
+ tst r0, #2
+ beq 1f
+ subs r1, r1, #2
+ addmi r1, r1, #2
+ bmi 3f
+ bic r0, r0, #3
+ ldr r3, [r0], #4
+ adds r2, r2, r3, lsr #16
+ adcs r2, r2, #0
+1: adds r2, r2, #0
+ bics ip, r1, #31
+ beq 3f
+ stmfd sp!, {r4 - r6}
+2: ldmia r0!, {r3 - r6}
+ adcs r2, r2, r3
+ adcs r2, r2, r4
+ adcs r2, r2, r5
+ adcs r2, r2, r6
+ ldmia r0!, {r3 - r6}
+ adcs r2, r2, r3
+ adcs r2, r2, r4
+ adcs r2, r2, r5
+ adcs r2, r2, r6
+ sub ip, ip, #32
+ teq ip, #0
+ bne 2b
+ adcs r2, r2, #0
+ ldmfd sp!, {r4 - r6}
+3: ands ip, r1, #0x1c
+ beq 5f
+4: ldr r3, [r0], #4
+ sub ip, ip, #4
+ adcs r2, r2, r3
+ teq ip, #0
+ bne 4b
+ adcs r2, r2, #0
+5: ands ip, r1, #3
+ moveq r0, r2
+ RETINSTR(moveq,pc,lr)
+ mov ip, ip, lsl #3
+ ldr r3, [r0]
+ rsb ip, ip, #32
+ mov r3, r3, lsl ip
+ adds r2, r2, r3, lsr ip
+ adc r0, r2, #0
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/csumpartialcopy.S b/arch/arm/lib/csumpartialcopy.S
new file mode 100644
index 000000000..7289619da
--- /dev/null
+++ b/arch/arm/lib/csumpartialcopy.S
@@ -0,0 +1,257 @@
+/*
+ * linux/arch/arm/lib/csumpartialcopy.S
+ *
+ * Copyright (C) 1995-1998 Russell King
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+ .text
+
+/* Function: __u32 csum_partial_copy_nocheck(const char *src, char *dst, int len, __u32 sum)
+ * Params : r0 = src, r1 = dst, r2 = len, r3 = checksum
+ * Returns : r0 = new checksum
+ */
+ENTRY(csum_partial_copy_nocheck)
+ mov ip, sp
+ stmfd sp!, {r4 - r8, fp, ip, lr, pc}
+ sub fp, ip, #4
+ cmp r2, #4
+ blt Ltoo_small
+ tst r1, #2 @ Test destination alignment
+ beq Ldst_aligned
+ ldrb ip, [r0], #1
+ ldrb r8, [r0], #1
+ subs r2, r2, #2 @ We do not know if SRC is aligned...
+ orr ip, ip, r8, lsl #8
+ adds r3, r3, ip
+ adcs r3, r3, #0
+ strb ip, [r1], #1
+ mov ip, ip, lsr #8
+ strb ip, [r1], #1 @ Destination now aligned
+Ldst_aligned: tst r0, #3
+ bne Lsrc_not_aligned
+ adds r3, r3, #0
+ bics ip, r2, #15 @ Routine for src & dst aligned
+ beq 3f
+1: ldmia r0!, {r4, r5, r6, r7}
+ stmia r1!, {r4, r5, r6, r7}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ adcs r3, r3, r6
+ adcs r3, r3, r7
+ sub ip, ip, #16
+ teq ip, #0
+ bne 1b
+3: ands ip, r2, #12
+ beq 5f
+ tst ip, #8
+ beq 4f
+ ldmia r0!, {r4, r5}
+ stmia r1!, {r4, r5}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ tst ip, #4
+ beq 5f
+4: ldr r4, [r0], #4
+ str r4, [r1], #4
+ adcs r3, r3, r4
+5: ands r2, r2, #3
+ adceq r0, r3, #0
+ LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
+ ldr r4, [r0], #4
+ tst r2, #2
+ beq Lexit_r4
+ adcs r3, r3, r4, lsl #16
+ strb r4, [r1], #1
+ mov r4, r4, lsr #8
+ strb r4, [r1], #1
+ mov r4, r4, lsr #8
+ b Lexit_r4
+
+Ltoo_small: teq r2, #0
+ LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
+ cmp r2, #2
+ blt Ltoo_small1
+ ldrb ip, [r0], #1
+ ldrb r8, [r0], #1
+ orr ip, ip, r8, lsl #8
+ adds r3, r3, ip
+ strb ip, [r1], #1
+ strb r8, [r1], #1
+ tst r2, #1
+Ltoo_small1: ldrneb r4, [r0], #1
+Lexit_r4: tst r2, #1
+ strneb r4, [r1], #1
+ andne r4, r4, #255
+ adcnes r3, r3, r4
+ adcs r0, r3, #0
+ LOADREGS(ea,fp,{r4 - r8, fp, sp, pc})
+
+Lsrc_not_aligned:
+ cmp r2, #4
+ blt Ltoo_small
+ and ip, r0, #3
+ bic r0, r0, #3
+ ldr r4, [r0], #4
+ cmp ip, #2
+ beq Lsrc2_aligned
+ bhi Lsrc3_aligned
+ mov r4, r4, lsr #8
+ adds r3, r3, #0
+ bics ip, r2, #15
+ beq 2f
+1: ldmia r0!, {r5, r6, r7, r8}
+ orr r4, r4, r5, lsl #24
+ mov r5, r5, lsr #8
+ orr r5, r5, r6, lsl #24
+ mov r6, r6, lsr #8
+ orr r6, r6, r7, lsl #24
+ mov r7, r7, lsr #8
+ orr r7, r7, r8, lsl #24
+ stmia r1!, {r4, r5, r6, r7}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ adcs r3, r3, r6
+ adcs r3, r3, r7
+ mov r4, r8, lsr #8
+ sub ip, ip, #16
+ teq ip, #0
+ bne 1b
+2: ands ip, r2, #12
+ beq 4f
+ tst ip, #8
+ beq 3f
+ ldmia r0!, {r5, r6}
+ orr r4, r4, r5, lsl #24
+ mov r5, r5, lsr #8
+ orr r5, r5, r6, lsl #24
+ stmia r1!, {r4, r5}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ mov r4, r6, lsr #8
+ tst ip, #4
+ beq 4f
+3: ldr r5, [r0], #4
+ orr r4, r4, r5, lsl #24
+ str r4, [r1], #4
+ adcs r3, r3, r4
+ mov r4, r5, lsr #8
+4: ands r2, r2, #3
+ adceq r0, r3, #0
+ LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
+ tst r2, #2
+ beq Lexit_r4
+ adcs r3, r3, r4, lsl #16
+ strb r4, [r1], #1
+ mov r4, r4, lsr #8
+ strb r4, [r1], #1
+ mov r4, r4, lsr #8
+ b Lexit_r4
+
+Lsrc2_aligned: mov r4, r4, lsr #16
+ adds r3, r3, #0
+ bics ip, r2, #15
+ beq 2f
+1: ldmia r0!, {r5, r6, r7, r8}
+ orr r4, r4, r5, lsl #16
+ mov r5, r5, lsr #16
+ orr r5, r5, r6, lsl #16
+ mov r6, r6, lsr #16
+ orr r6, r6, r7, lsl #16
+ mov r7, r7, lsr #16
+ orr r7, r7, r8, lsl #16
+ stmia r1!, {r4, r5, r6, r7}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ adcs r3, r3, r6
+ adcs r3, r3, r7
+ mov r4, r8, lsr #16
+ sub ip, ip, #16
+ teq ip, #0
+ bne 1b
+2: ands ip, r2, #12
+ beq 4f
+ tst ip, #8
+ beq 3f
+ ldmia r0!, {r5, r6}
+ orr r4, r4, r5, lsl #16
+ mov r5, r5, lsr #16
+ orr r5, r5, r6, lsl #16
+ stmia r1!, {r4, r5}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ mov r4, r6, lsr #16
+ tst ip, #4
+ beq 4f
+3: ldr r5, [r0], #4
+ orr r4, r4, r5, lsl #16
+ str r4, [r1], #4
+ adcs r3, r3, r4
+ mov r4, r5, lsr #16
+4: ands r2, r2, #3
+ adceq r0, r3, #0
+ LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
+ tst r2, #2
+ beq Lexit_r4
+ adcs r3, r3, r4, lsl #16
+ strb r4, [r1], #1
+ mov r4, r4, lsr #8
+ strb r4, [r1], #1
+ ldrb r4, [r0], #1
+ b Lexit_r4
+
+Lsrc3_aligned: mov r4, r4, lsr #24
+ adds r3, r3, #0
+ bics ip, r2, #15
+ beq 2f
+1: ldmia r0!, {r5, r6, r7, r8}
+ orr r4, r4, r5, lsl #8
+ mov r5, r5, lsr #24
+ orr r5, r5, r6, lsl #8
+ mov r6, r6, lsr #24
+ orr r6, r6, r7, lsl #8
+ mov r7, r7, lsr #24
+ orr r7, r7, r8, lsl #8
+ stmia r1!, {r4, r5, r6, r7}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ adcs r3, r3, r6
+ adcs r3, r3, r7
+ mov r4, r8, lsr #24
+ sub ip, ip, #16
+ teq ip, #0
+ bne 1b
+2: ands ip, r2, #12
+ beq 4f
+ tst ip, #8
+ beq 3f
+ ldmia r0!, {r5, r6}
+ orr r4, r4, r5, lsl #8
+ mov r5, r5, lsr #24
+ orr r5, r5, r6, lsl #8
+ stmia r1!, {r4, r5}
+ adcs r3, r3, r4
+ adcs r3, r3, r5
+ mov r4, r6, lsr #24
+ tst ip, #4
+ beq 4f
+3: ldr r5, [r0], #4
+ orr r4, r4, r5, lsl #8
+ str r4, [r1], #4
+ adcs r3, r3, r4
+ mov r4, r5, lsr #24
+4: ands r2, r2, #3
+ adceq r0, r3, #0
+ LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
+ tst r2, #2
+ beq Lexit_r4
+ adcs r3, r3, r4, lsl #16
+ strb r4, [r1], #1
+ ldr r4, [r0], #4
+ strb r4, [r1], #1
+ adcs r3, r3, r4, lsl #24
+ mov r4, r4, lsr #8
+ b Lexit_r4
+
+
diff --git a/arch/arm/lib/checksum.S b/arch/arm/lib/csumpartialcopyuser.S
index ae78b657a..f698c0d26 100644
--- a/arch/arm/lib/checksum.S
+++ b/arch/arm/lib/csumpartialcopyuser.S
@@ -1,7 +1,7 @@
/*
- * linux/arch/arm/lib/checksum.S
+ * linux/arch/arm/lib/csumpartialcopyuser.S
*
- * Copyright (C) 1995, 1996, 1997, 1998 Russell King
+ * Copyright (C) 1995-1998 Russell King
*/
#include <linux/config.h>
#include <linux/linkage.h>
@@ -11,59 +11,6 @@
.text
-/* Function: __u32 csum_partial(const char *src, int len, __u32)
- * Params : r0 = buffer, r1 = len, r2 = checksum
- * Returns : r0 = new checksum
- */
-
-ENTRY(csum_partial)
- tst r0, #2
- beq 1f
- subs r1, r1, #2
- addmi r1, r1, #2
- bmi 3f
- bic r0, r0, #3
- ldr r3, [r0], #4
- adds r2, r2, r3, lsr #16
- adcs r2, r2, #0
-1: adds r2, r2, #0
- bics ip, r1, #31
- beq 3f
- stmfd sp!, {r4 - r6}
-2: ldmia r0!, {r3 - r6}
- adcs r2, r2, r3
- adcs r2, r2, r4
- adcs r2, r2, r5
- adcs r2, r2, r6
- ldmia r0!, {r3 - r6}
- adcs r2, r2, r3
- adcs r2, r2, r4
- adcs r2, r2, r5
- adcs r2, r2, r6
- sub ip, ip, #32
- teq ip, #0
- bne 2b
- adcs r2, r2, #0
- ldmfd sp!, {r4 - r6}
-3: ands ip, r1, #0x1c
- beq 5f
-4: ldr r3, [r0], #4
- adcs r2, r2, r3
- sub ip, ip, #4
- teq ip, #0
- bne 4b
- adcs r2, r2, #0
-5: ands ip, r1, #3
- moveq r0, r2
- RETINSTR(moveq,pc,lr)
- mov ip, ip, lsl #3
- rsb ip, ip, #32
- ldr r3, [r0]
- mov r3, r3, lsl ip
- adds r2, r2, r3, lsr ip
- adc r0, r2, #0
- RETINSTR(mov,pc,lr)
-
/* Function: __u32 csum_partial_copy_from_user (const char *src, char *dst, int len, __u32 sum, int *err_ptr)
* Params : r0 = src, r1 = dst, r2 = len, r3 = sum, [sp, #0] = &err
* Returns : r0 = checksum, [[sp, #0], #0] = 0 or -EFAULT
@@ -209,8 +156,8 @@ ENTRY(csum_partial_copy_from_user)
blt .too_small_user
tst r1, #2 @ Test destination alignment
beq .dst_aligned_user
- subs r2, r2, #2 @ We do not know if SRC is aligned...
load2b ip, r8
+ subs r2, r2, #2 @ We do not know if SRC is aligned...
orr ip, ip, r8, lsl #8
adds r3, r3, ip
adcs r3, r3, #0
@@ -393,6 +340,9 @@ ENTRY(csum_partial_copy_from_user)
strb r4, [r1], #1
mov r4, r4, lsr #8
strb r4, [r1], #1
+ tst r2, #1
+ adceq r0, r3, #0
+ load_regs eqea
load1b r4
b .exit
@@ -467,268 +417,3 @@ ENTRY(csum_partial_copy_from_user)
#if defined(CONFIG_CPU_32)
.previous
#endif
-
-/* Function: __u32 csum_partial_copy (const char *src, char *dst, int len, __u32 sum)
- * Params : r0 = src, r1 = dst, r2 = len, r3 = checksum
- * Returns : r0 = new checksum
- */
-ENTRY(csum_partial_copy_nocheck)
-ENTRY(csum_partial_copy)
- mov ip, sp
- stmfd sp!, {r4 - r8, fp, ip, lr, pc}
- sub fp, ip, #4
- cmp r2, #4
- blt Ltoo_small
- tst r1, #2 @ Test destination alignment
- beq Ldst_aligned
- subs r2, r2, #2 @ We do not know if SRC is aligned...
- ldrb ip, [r0], #1
- ldrb r8, [r0], #1
- orr ip, ip, r8, lsl #8
- adds r3, r3, ip
- adcs r3, r3, #0
- strb ip, [r1], #1
- mov ip, ip, lsr #8
- strb ip, [r1], #1 @ Destination now aligned
-Ldst_aligned: tst r0, #3
- bne Lsrc_not_aligned
- adds r3, r3, #0
- bics ip, r2, #15 @ Routine for src & dst aligned
- beq 3f
-1: ldmia r0!, {r4, r5, r6, r7}
- stmia r1!, {r4, r5, r6, r7}
- adcs r3, r3, r4
- adcs r3, r3, r5
- adcs r3, r3, r6
- adcs r3, r3, r7
- sub ip, ip, #16
- teq ip, #0
- bne 1b
-3: ands ip, r2, #12
- beq 5f
- tst ip, #8
- beq 4f
- ldmia r0!, {r4, r5}
- stmia r1!, {r4, r5}
- adcs r3, r3, r4
- adcs r3, r3, r5
- tst ip, #4
- beq 5f
-4: ldr r4, [r0], #4
- str r4, [r1], #4
- adcs r3, r3, r4
-5: ands r2, r2, #3
- adceq r0, r3, #0
- LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
- ldr r4, [r0], #4
- tst r2, #2
- beq Lexit_r4
- adcs r3, r3, r4, lsl #16
- strb r4, [r1], #1
- mov r4, r4, lsr #8
- strb r4, [r1], #1
- mov r4, r4, lsr #8
- b Lexit_r4
-
-Ltoo_small: teq r2, #0
- LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
- cmp r2, #2
- blt Ltoo_small1
- ldrb ip, [r0], #1
- ldrb r8, [r0], #1
- orr ip, ip, r8, lsl #8
- adds r3, r3, ip
- strb ip, [r1], #1
- strb r8, [r1], #1
- tst r2, #1
-Ltoo_small1: ldrneb r4, [r0], #1
-Lexit_r4: tst r2, #1
- strneb r4, [r1], #1
- andne r4, r4, #255
- adcnes r3, r3, r4
- adcs r0, r3, #0
- LOADREGS(ea,fp,{r4 - r8, fp, sp, pc})
-
-Lsrc_not_aligned:
- cmp r2, #4
- blt Ltoo_small
- and ip, r0, #3
- bic r0, r0, #3
- ldr r4, [r0], #4
- cmp ip, #2
- beq Lsrc2_aligned
- bhi Lsrc3_aligned
- mov r4, r4, lsr #8
- adds r3, r3, #0
- bics ip, r2, #15
- beq 2f
-1: ldmia r0!, {r5, r6, r7, r8}
- orr r4, r4, r5, lsl #24
- mov r5, r5, lsr #8
- orr r5, r5, r6, lsl #24
- mov r6, r6, lsr #8
- orr r6, r6, r7, lsl #24
- mov r7, r7, lsr #8
- orr r7, r7, r8, lsl #24
- stmia r1!, {r4, r5, r6, r7}
- adcs r3, r3, r4
- adcs r3, r3, r5
- adcs r3, r3, r6
- adcs r3, r3, r7
- mov r4, r8, lsr #8
- sub ip, ip, #16
- teq ip, #0
- bne 1b
-2: ands ip, r2, #12
- beq 4f
- tst ip, #8
- beq 3f
- ldmia r0!, {r5, r6}
- orr r4, r4, r5, lsl #24
- mov r5, r5, lsr #8
- orr r5, r5, r6, lsl #24
- stmia r1!, {r4, r5}
- adcs r3, r3, r4
- adcs r3, r3, r5
- mov r4, r6, lsr #8
- tst ip, #4
- beq 4f
-3: ldr r5, [r0], #4
- orr r4, r4, r5, lsl #24
- str r4, [r1], #4
- adcs r3, r3, r4
- mov r4, r5, lsr #8
-4: ands r2, r2, #3
- adceq r0, r3, #0
- LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
- tst r2, #2
- beq Lexit_r4
- adcs r3, r3, r4, lsl #16
- strb r4, [r1], #1
- mov r4, r4, lsr #8
- strb r4, [r1], #1
- mov r4, r4, lsr #8
- b Lexit_r4
-
-Lsrc2_aligned: mov r4, r4, lsr #16
- adds r3, r3, #0
- bics ip, r2, #15
- beq 2f
-1: ldmia r0!, {r5, r6, r7, r8}
- orr r4, r4, r5, lsl #16
- mov r5, r5, lsr #16
- orr r5, r5, r6, lsl #16
- mov r6, r6, lsr #16
- orr r6, r6, r7, lsl #16
- mov r7, r7, lsr #16
- orr r7, r7, r8, lsl #16
- stmia r1!, {r4, r5, r6, r7}
- adcs r3, r3, r4
- adcs r3, r3, r5
- adcs r3, r3, r6
- adcs r3, r3, r7
- mov r4, r8, lsr #16
- sub ip, ip, #16
- teq ip, #0
- bne 1b
-2: ands ip, r2, #12
- beq 4f
- tst ip, #8
- beq 3f
- ldmia r0!, {r5, r6}
- orr r4, r4, r5, lsl #16
- mov r5, r5, lsr #16
- orr r5, r5, r6, lsl #16
- stmia r1!, {r4, r5}
- adcs r3, r3, r4
- adcs r3, r3, r5
- mov r4, r6, lsr #16
- tst ip, #4
- beq 4f
-3: ldr r5, [r0], #4
- orr r4, r4, r5, lsl #16
- str r4, [r1], #4
- adcs r3, r3, r4
- mov r4, r5, lsr #16
-4: ands r2, r2, #3
- adceq r0, r3, #0
- LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
- tst r2, #2
- beq Lexit_r4
- adcs r3, r3, r4, lsl #16
- strb r4, [r1], #1
- mov r4, r4, lsr #8
- strb r4, [r1], #1
- ldrb r4, [r0], #1
- b Lexit_r4
-
-Lsrc3_aligned: mov r4, r4, lsr #24
- adds r3, r3, #0
- bics ip, r2, #15
- beq 2f
-1: ldmia r0!, {r5, r6, r7, r8}
- orr r4, r4, r5, lsl #8
- mov r5, r5, lsr #24
- orr r5, r5, r6, lsl #8
- mov r6, r6, lsr #24
- orr r6, r6, r7, lsl #8
- mov r7, r7, lsr #24
- orr r7, r7, r8, lsl #8
- stmia r1!, {r4, r5, r6, r7}
- adcs r3, r3, r4
- adcs r3, r3, r5
- adcs r3, r3, r6
- adcs r3, r3, r7
- mov r4, r8, lsr #24
- sub ip, ip, #16
- teq ip, #0
- bne 1b
-2: ands ip, r2, #12
- beq 4f
- tst ip, #8
- beq 3f
- ldmia r0!, {r5, r6}
- orr r4, r4, r5, lsl #8
- mov r5, r5, lsr #24
- orr r5, r5, r6, lsl #8
- stmia r1!, {r4, r5}
- adcs r3, r3, r4
- adcs r3, r3, r5
- mov r4, r6, lsr #24
- tst ip, #4
- beq 4f
-3: ldr r5, [r0], #4
- orr r4, r4, r5, lsl #8
- str r4, [r1], #4
- adcs r3, r3, r4
- mov r4, r5, lsr #24
-4: ands r2, r2, #3
- adceq r0, r3, #0
- LOADREGS(eqea,fp,{r4 - r8, fp, sp, pc})
- tst r2, #2
- beq Lexit_r4
- adcs r3, r3, r4, lsl #16
- strb r4, [r1], #1
- ldr r4, [r0], #4
- strb r4, [r1], #1
- adcs r3, r3, r4, lsl #24
- mov r4, r4, lsr #8
- b Lexit_r4
-
-ENTRY(__csum_ipv6_magic)
- stmfd sp!, {lr}
- adds ip, r2, r3
- ldmia r1, {r1 - r3, lr}
- adcs ip, ip, r1
- adcs ip, ip, r2
- adcs ip, ip, r3
- adcs ip, ip, lr
- ldmia r0, {r0 - r3}
- adcs r0, ip, r0
- adcs r0, r0, r1
- adcs r0, r0, r2
- adcs r0, r0, r3
- ldr r3, [sp, #4]
- adcs r0, r0, r3
- adcs r0, r0, #0
- LOADREGS(fd, sp!, {pc})
diff --git a/arch/arm/lib/findbit.S b/arch/arm/lib/findbit.S
new file mode 100644
index 000000000..e1651904f
--- /dev/null
+++ b/arch/arm/lib/findbit.S
@@ -0,0 +1,65 @@
+/*
+ * linux/arch/arm/lib/bitops.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+@ Purpose : Find a 'zero' bit
+@ Prototype: int find_first_zero_bit(char *addr,int maxbit);
+
+ENTRY(find_first_zero_bit)
+ mov r2, #0 @ Initialise bit position
+Lfindzbit1lp: ldrb r3, [r0, r2, lsr #3] @ Check byte, if 0xFF, then all bits set
+ teq r3, #0xFF
+ bne Lfoundzbit
+ add r2, r2, #8
+ cmp r2, r1 @ Check to see if we have come to the end
+ bcc Lfindzbit1lp
+ add r0, r1, #1 @ Make sure that we flag an error
+ RETINSTR(mov,pc,lr)
+Lfoundzbit: tst r3, #1 @ Check individual bits
+ moveq r0, r2
+ RETINSTR(moveq,pc,lr)
+ tst r3, #2
+ addeq r0, r2, #1
+ RETINSTR(moveq,pc,lr)
+ tst r3, #4
+ addeq r0, r2, #2
+ RETINSTR(moveq,pc,lr)
+ tst r3, #8
+ addeq r0, r2, #3
+ RETINSTR(moveq,pc,lr)
+ tst r3, #16
+ addeq r0, r2, #4
+ RETINSTR(moveq,pc,lr)
+ tst r3, #32
+ addeq r0, r2, #5
+ RETINSTR(moveq,pc,lr)
+ tst r3, #64
+ addeq r0, r2, #6
+ RETINSTR(moveq,pc,lr)
+ add r0, r2, #7
+ RETINSTR(mov,pc,lr)
+
+@ Purpose : Find next 'zero' bit
+@ Prototype: int find_next_zero_bit(char *addr,int maxbit,int offset)
+
+ENTRY(find_next_zero_bit)
+ tst r2, #7
+ beq Lfindzbit1lp @ If new byte, goto old routine
+ ldrb r3, [r0, r2, lsr#3]
+ orr r3, r3, #0xFF00 @ Set top bits so we wont get confused
+ stmfd sp!, {r4}
+ and r4, r2, #7
+ mov r3, r3, lsr r4 @ Shift right by no. of bits
+ ldmfd sp!, {r4}
+ and r3, r3, #0xFF
+ teq r3, #0xFF
+ orreq r2, r2, #7
+ addeq r2, r2, #1
+ beq Lfindzbit1lp @ If all bits are set, goto old routine
+ b Lfoundzbit
diff --git a/arch/arm/lib/getconsdata.c b/arch/arm/lib/getconsdata.c
index 5b46baad0..aaa7a7ad2 100644
--- a/arch/arm/lib/getconsdata.c
+++ b/arch/arm/lib/getconsdata.c
@@ -10,6 +10,16 @@
#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 Your compiler targets APCS-32 but this kernel requires APCS-26.
+#endif
+#if (defined(__APCS_26__) && defined(CONFIG_CPU_32))
+#error Your compiler targets APCS-26 but this kernel requires APCS-32.
+#endif
+
#undef PAGE_READONLY
#define OFF_TSK(n) (unsigned long)&(((struct task_struct *)0)->n)
diff --git a/arch/arm/lib/io-footbridge.S b/arch/arm/lib/io-footbridge.S
index 0734c6042..98f751258 100644
--- a/arch/arm/lib/io-footbridge.S
+++ b/arch/arm/lib/io-footbridge.S
@@ -6,7 +6,9 @@
.macro ioaddr, rd,rn
add \rd, \rn, #pcio_high
+ .if pcio_low
add \rd, \rd, #pcio_low
+ .endif
.endm
ENTRY(insl)
diff --git a/arch/arm/lib/memchr.S b/arch/arm/lib/memchr.S
new file mode 100644
index 000000000..d52abe57f
--- /dev/null
+++ b/arch/arm/lib/memchr.S
@@ -0,0 +1,24 @@
+/*
+ * linux/arch/arm/lib/memchr.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ *
+ * ASM optimised string functions
+ *
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+ENTRY(memchr)
+ str lr, [sp, #-4]!
+1: ldrb r3, [r0], #1
+ teq r3, r1
+ beq 2f
+ subs r2, r2, #1
+ bpl 1b
+2: movne r0, #0
+ subeq r0, r0, #1
+ LOADREGS(fd, sp!, {pc})
+
diff --git a/arch/arm/lib/string.S b/arch/arm/lib/memcpy.S
index ff809fd51..ae5307d4b 100644
--- a/arch/arm/lib/string.S
+++ b/arch/arm/lib/memcpy.S
@@ -1,5 +1,5 @@
/*
- * linux/arch/arm/lib/string.S
+ * linux/arch/arm/lib/memcpy.S
*
* Copyright (C) 1995-1999 Russell King
*
@@ -12,207 +12,6 @@
.text
-/*
- * Prototype: void memzero(void *d, size_t n)
- */
-1: @ 4 <= r1
- cmp ip, #2 @ 1
- strltb r2, [r0], #1 @ 1
- strleb r2, [r0], #1 @ 1
- strb r2, [r0], #1 @ 1
- rsb ip, ip, #4 @ 1
- sub r1, r1, ip @ 1
- cmp r1, #3 @ 1
- bgt 2f @ 1 @ +8
- b 4f @ 1 @ +9
-
- .align 5
-
-ENTRY(__memzero)
- mov r2, #0 @ 1
- cmp r1, #4 @ 1
- blt 4f @ 1 @ = 3
-
- @ r1 >= 4
-
- ands ip, r0, #3 @ 1
- bne 1b @ 1 @ = 5
-
-2: @ r1 >= 4 && (r0 & 3) = 0 @ = 5 or 11
-
- str lr, [sp, #-4]! @ 1
- mov r3, #0 @ 1
- mov ip, #0 @ 1
- mov lr, #0 @ 1
-
- @ 4 <= r1 <= 32 @ = 9 or 15
-
-3: subs r1, r1, #32 @ 1
- stmgeia r0!, {r2, r3, ip, lr} @ 4
- stmgeia r0!, {r2, r3, ip, lr} @ 4
- bgt 3b @ 1
- LOADREGS(eqfd, sp!, {pc}) @ 1/2
-
- @ -28 <= r1 <= -1
-
- cmp r1, #-16 @ 1
- stmgeia r0!, {r2, r3, ip, lr} @ 4
- ldr lr, [sp], #4 @ 1
- addlts r1, r1, #16 @ 1
- RETINSTR(moveq,pc,lr) @ 1
-
- @ -12 <= r1 <= -1
-
- cmp r1, #-8 @ 1
- stmgeia r0!, {r2, r3} @ 2
- addlts r1, r1, #8 @ 1
- RETINSTR(moveq,pc,lr) @ 1
-
- @ -4 <= r1 <= -1
-
- cmp r1, #-4 @ 1
- strge r2, [r0], #4 @ 1
- adds r1, r1, #4 @ 1
- RETINSTR(moveq,pc,lr) @ 1
-
-4: @ 1 <= r1 <= 3
- cmp r1, #2 @ 1
- strgtb r2, [r0], #1 @ 1
- strgeb r2, [r0], #1 @ 1
- strb r2, [r0], #1 @ 1
- RETINSTR(mov,pc,lr) @ 1
-
-/*
- * StrongARM optimised copy_page routine
- * now 1.72bytes/cycle, was 1.60 bytes/cycle
- * (50MHz bus -> 86MB/s)
- */
-
-ENTRY(copy_page)
- stmfd sp!, {r4, lr} @ 2
- mov r2, #PAGE_SZ/64 @ 1
-1: ldmia r1!, {r3, r4, ip, lr} @ 4
- subs r2, r2, #1 @ 1
- stmia r0!, {r3, r4, ip, lr} @ 4
- ldmia r1!, {r3, r4, ip, lr} @ 4+1
- stmia r0!, {r3, r4, ip, lr} @ 4
- ldmia r1!, {r3, r4, ip, lr} @ 4+1
- stmia r0!, {r3, r4, ip, lr} @ 4
- ldmia r1!, {r3, r4, ip, lr} @ 4+1
- stmia r0!, {r3, r4, ip, lr} @ 4
- bne 1b @ 1
- LOADREGS(fd, sp!, {r4, pc}) @ 3
-
- .align 5
-ENTRY(memset) /* needed for some versions of gcc */
-ENTRY(__memset)
- mov r3, r0
- cmp r2, #16
- blt 6f
- ands ip, r3, #3
- beq 1f
- cmp ip, #2
- strltb r1, [r3], #1 @ Align destination
- strleb r1, [r3], #1
- strb r1, [r3], #1
- rsb ip, ip, #4
- sub r2, r2, ip
-1: orr r1, r1, r1, lsl #8
- orr r1, r1, r1, lsl #16
- cmp r2, #256
- blt 4f
- stmfd sp!, {r4, r5, lr}
- mov r4, r1
- mov r5, r1
- mov lr, r1
- mov ip, r2, lsr #6
- sub r2, r2, ip, lsl #6
-2: stmia r3!, {r1, r4, r5, lr} @ 64 bytes at a time.
- stmia r3!, {r1, r4, r5, lr}
- stmia r3!, {r1, r4, r5, lr}
- stmia r3!, {r1, r4, r5, lr}
- subs ip, ip, #1
- bne 2b
- teq r2, #0
- LOADREGS(eqfd, sp!, {r4, r5, pc}) @ Now <64 bytes to go.
- tst r2, #32
- stmneia r3!, {r1, r4, r5, lr}
- stmneia r3!, {r1, r4, r5, lr}
- tst r2, #16
- stmneia r3!, {r1, r4, r5, lr}
- ldmia sp!, {r4, r5}
-3: tst r2, #8
- stmneia r3!, {r1, lr}
- tst r2, #4
- strne r1, [r3], #4
- tst r2, #2
- strneb r1, [r3], #1
- strneb r1, [r3], #1
- tst r2, #1
- strneb r1, [r3], #1
- LOADREGS(fd, sp!, {pc})
-
-4: movs ip, r2, lsr #3
- beq 3b
- sub r2, r2, ip, lsl #3
- stmfd sp!, {lr}
- mov lr, r1
- subs ip, ip, #4
-5: stmgeia r3!, {r1, lr}
- stmgeia r3!, {r1, lr}
- stmgeia r3!, {r1, lr}
- stmgeia r3!, {r1, lr}
- subges ip, ip, #4
- bge 5b
- tst ip, #2
- stmneia r3!, {r1, lr}
- stmneia r3!, {r1, lr}
- tst ip, #1
- stmneia r3!, {r1, lr}
- teq r2, #0
- LOADREGS(eqfd, sp!, {pc})
- b 3b
-
-6: subs r2, r2, #1
- strgeb r1, [r3], #1
- bgt 6b
- RETINSTR(mov, pc, lr)
-
-ENTRY(strrchr)
- stmfd sp!, {lr}
- mov r3, #0
-1: ldrb r2, [r0], #1
- teq r2, r1
- moveq r3, r0
- teq r2, #0
- bne 1b
- mov r0, r3
- LOADREGS(fd, sp!, {pc})
-
-ENTRY(strchr)
- stmfd sp!,{lr}
- mov r3, #0
-1: ldrb r2, [r0], #1
- teq r2, r1
- teqne r2, #0
- bne 1b
- teq r2, #0
- moveq r0, #0
- subne r0, r0, #1
- LOADREGS(fd, sp!, {pc})
-
-ENTRY(memchr)
- stmfd sp!, {lr}
-1: ldrb r3, [r0], #1
- teq r3, r1
- beq 2f
- subs r2, r2, #1
- bpl 1b
-2: movne r0, #0
- subeq r0, r0, #1
- LOADREGS(fd, sp!, {pc})
-
-
#define ENTER \
mov ip,sp ;\
stmfd sp!,{r4-r9,fp,ip,lr,pc} ;\
@@ -261,30 +60,30 @@ ENTRY(memmove)
blt 6f
subs r2, r2, #4
ldrlt r3, [r1], #4
+ ldmgeia r1!, {r4, r5}
strlt r3, [r0], #4
- ldmgeia r1!, {r3, r4}
- stmgeia r0!, {r3, r4}
+ stmgeia r0!, {r4, r5}
subge r2, r2, #4
6: adds r2, r2, #4
EXITEQ
cmp r2, #2
ldrb r3, [r1], #1
+ ldrgeb r4, [r1], #1
+ ldrgtb r5, [r1], #1
strb r3, [r0], #1
- ldrgeb r3, [r1], #1
- strgeb r3, [r0], #1
- ldrgtb r3, [r1], #1
- strgtb r3, [r0], #1
+ strgeb r4, [r0], #1
+ strgtb r5, [r0], #1
EXIT
7: rsb ip, ip, #4
cmp ip, #2
ldrb r3, [r1], #1
+ ldrgeb r4, [r1], #1
+ ldrgtb r5, [r1], #1
strb r3, [r0], #1
- ldrgeb r3, [r1], #1
- strgeb r3, [r0], #1
- ldrgtb r3, [r1], #1
- strgtb r3, [r0], #1
+ strgeb r4, [r0], #1
+ strgtb r5, [r0], #1
subs r2, r2, ip
blt 6b
ands ip, r1, #3
@@ -314,9 +113,9 @@ ENTRY(memmove)
blt 100f
10: mov r3, r7, lsr #8
ldr r7, [r1], #4
+ subs r2, r2, #4
orr r3, r3, r7, lsl #24
str r3, [r0], #4
- subs r2, r2, #4
bge 10b
100: sub r1, r1, #3
b 6b
@@ -340,9 +139,9 @@ ENTRY(memmove)
blt 14f
13: mov r3, r7, lsr #16
ldr r7, [r1], #4
+ subs r2, r2, #4
orr r3, r3, r7, lsl #16
str r3, [r0], #4
- subs r2, r2, #4
bge 13b
14: sub r1, r1, #2
b 6b
@@ -366,9 +165,9 @@ ENTRY(memmove)
blt 18f
17: mov r3, r7, lsr #24
ldr r7, [r1], #4
+ subs r2, r2, #4
orr r3, r3, r7, lsl#8
str r3, [r0], #4
- subs r2, r2, #4
bge 17b
18: sub r1, r1, #1
b 6b
@@ -403,29 +202,29 @@ ENTRY(memmove)
blt 24f
subs r2, r2, #4
ldrlt r3, [r1, #-4]!
+ ldmgedb r1!, {r4, r5}
strlt r3, [r0, #-4]!
- ldmgedb r1!, {r3, r4}
- stmgedb r0!, {r3, r4}
+ stmgedb r0!, {r4, r5}
subge r2, r2, #4
24: adds r2, r2, #4
EXITEQ
cmp r2, #2
ldrb r3, [r1, #-1]!
+ ldrgeb r4, [r1, #-1]!
+ ldrgtb r5, [r1, #-1]!
strb r3, [r0, #-1]!
- ldrgeb r3, [r1, #-1]!
- strgeb r3, [r0, #-1]!
- ldrgtb r3, [r1, #-1]!
- strgtb r3, [r0, #-1]!
+ strgeb r4, [r0, #-1]!
+ strgtb r5, [r0, #-1]!
EXIT
25: cmp ip, #2
ldrb r3, [r1, #-1]!
+ ldrgeb r4, [r1, #-1]!
+ ldrgtb r5, [r1, #-1]!
strb r3, [r0, #-1]!
- ldrgeb r3, [r1, #-1]!
- strgeb r3, [r0, #-1]!
- ldrgtb r3, [r1, #-1]!
- strgtb r3, [r0, #-1]!
+ strgeb r4, [r0, #-1]!
+ strgtb r5, [r0, #-1]!
subs r2, r2, ip
blt 24b
ands ip, r1, #3
@@ -455,9 +254,9 @@ ENTRY(memmove)
blt 29f
28: mov ip, r3, lsl #8
ldr r3, [r1, #-4]!
+ subs r2, r2, #4
orr ip, ip, r3, lsr #24
str ip, [r0, #-4]!
- subs r2, r2, #4
bge 28b
29: add r1, r1, #3
b 24b
@@ -481,9 +280,9 @@ ENTRY(memmove)
blt 33f
32: mov ip, r3, lsl #16
ldr r3, [r1, #-4]!
+ subs r2, r2, #4
orr ip, ip, r3, lsr #16
str ip, [r0, #-4]!
- subs r2, r2, #4
bge 32b
33: add r1, r1, #2
b 24b
@@ -507,9 +306,9 @@ ENTRY(memmove)
blt 37f
36: mov ip, r3, lsl #24
ldr r3, [r1, #-4]!
+ subs r2, r2, #4
orr ip, ip, r3, lsr #8
str ip, [r0, #-4]!
- subs r2, r2, #4
bge 36b
37: add r1, r1, #1
b 24b
diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
new file mode 100644
index 000000000..b7202e867
--- /dev/null
+++ b/arch/arm/lib/memset.S
@@ -0,0 +1,88 @@
+/*
+ * linux/arch/arm/lib/memset.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ *
+ * ASM optimised string functions
+ *
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+ .align 5
+ENTRY(memset)
+ mov r3, r0
+ cmp r2, #16
+ blt 6f
+ ands ip, r3, #3
+ beq 1f
+ cmp ip, #2
+ strltb r1, [r3], #1 @ Align destination
+ strleb r1, [r3], #1
+ strb r1, [r3], #1
+ rsb ip, ip, #4
+ sub r2, r2, ip
+1: orr r1, r1, r1, lsl #8
+ orr r1, r1, r1, lsl #16
+ cmp r2, #256
+ blt 4f
+ stmfd sp!, {r4, r5, lr}
+ mov r4, r1
+ mov r5, r1
+ mov lr, r1
+ mov ip, r2, lsr #6
+ sub r2, r2, ip, lsl #6
+2: stmia r3!, {r1, r4, r5, lr} @ 64 bytes at a time.
+ stmia r3!, {r1, r4, r5, lr}
+ stmia r3!, {r1, r4, r5, lr}
+ stmia r3!, {r1, r4, r5, lr}
+ subs ip, ip, #1
+ bne 2b
+ teq r2, #0
+ LOADREGS(eqfd, sp!, {r4, r5, pc}) @ Now <64 bytes to go.
+ tst r2, #32
+ stmneia r3!, {r1, r4, r5, lr}
+ stmneia r3!, {r1, r4, r5, lr}
+ tst r2, #16
+ stmneia r3!, {r1, r4, r5, lr}
+ ldmia sp!, {r4, r5}
+3: tst r2, #8
+ stmneia r3!, {r1, lr}
+ tst r2, #4
+ strne r1, [r3], #4
+ tst r2, #2
+ strneb r1, [r3], #1
+ strneb r1, [r3], #1
+ tst r2, #1
+ strneb r1, [r3], #1
+ LOADREGS(fd, sp!, {pc})
+
+4: movs ip, r2, lsr #3
+ beq 3b
+ sub r2, r2, ip, lsl #3
+ str lr, [sp, #-4]!
+ mov lr, r1
+ subs ip, ip, #4
+5: stmgeia r3!, {r1, lr}
+ stmgeia r3!, {r1, lr}
+ stmgeia r3!, {r1, lr}
+ stmgeia r3!, {r1, lr}
+ subges ip, ip, #4
+ bge 5b
+ tst ip, #2
+ stmneia r3!, {r1, lr}
+ stmneia r3!, {r1, lr}
+ tst ip, #1
+ stmneia r3!, {r1, lr}
+ teq r2, #0
+ LOADREGS(eqfd, sp!, {pc})
+ b 3b
+
+6: subs r2, r2, #1
+ strgeb r1, [r3], #1
+ bgt 6b
+ RETINSTR(mov, pc, lr)
+
+
diff --git a/arch/arm/lib/memzero.S b/arch/arm/lib/memzero.S
new file mode 100644
index 000000000..59ec36574
--- /dev/null
+++ b/arch/arm/lib/memzero.S
@@ -0,0 +1,80 @@
+/*
+ * linux/arch/arm/lib/memzero.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+
+/*
+ * Prototype: void memzero(void *d, size_t n)
+ */
+1: @ 4 <= r1
+ cmp ip, #2 @ 1
+ strltb r2, [r0], #1 @ 1
+ strleb r2, [r0], #1 @ 1
+ strb r2, [r0], #1 @ 1
+ rsb ip, ip, #4 @ 1
+ sub r1, r1, ip @ 1
+ cmp r1, #3 @ 1
+ bgt 2f @ 1 @ +8
+ b 4f @ 1 @ +9
+
+ .align 5
+
+ENTRY(__memzero)
+ mov r2, #0 @ 1
+ cmp r1, #4 @ 1
+ blt 4f @ 1 @ = 3
+
+ @ r1 >= 4
+
+ ands ip, r0, #3 @ 1
+ bne 1b @ 1 @ = 5
+
+2: @ r1 >= 4 && (r0 & 3) = 0 @ = 5 or 11
+
+ str lr, [sp, #-4]! @ 1
+ mov r3, #0 @ 1
+ mov ip, #0 @ 1
+ mov lr, #0 @ 1
+
+ @ 4 <= r1 <= 32 @ = 9 or 15
+
+3: subs r1, r1, #32 @ 1
+ stmgeia r0!, {r2, r3, ip, lr} @ 4
+ stmgeia r0!, {r2, r3, ip, lr} @ 4
+ bgt 3b @ 1
+ LOADREGS(eqfd, sp!, {pc}) @ 1/2
+
+ @ -28 <= r1 <= -1
+
+ cmp r1, #-16 @ 1
+ stmgeia r0!, {r2, r3, ip, lr} @ 4
+ ldr lr, [sp], #4 @ 1
+ addlts r1, r1, #16 @ 1
+ RETINSTR(moveq,pc,lr) @ 1
+
+ @ -12 <= r1 <= -1
+
+ cmp r1, #-8 @ 1
+ stmgeia r0!, {r2, r3} @ 2
+ addlts r1, r1, #8 @ 1
+ RETINSTR(moveq,pc,lr) @ 1
+
+ @ -4 <= r1 <= -1
+
+ cmp r1, #-4 @ 1
+ strge r2, [r0], #4 @ 1
+ adds r1, r1, #4 @ 1
+ RETINSTR(moveq,pc,lr) @ 1
+
+4: @ 1 <= r1 <= 3
+ cmp r1, #2 @ 1
+ strgtb r2, [r0], #1 @ 1
+ strgeb r2, [r0], #1 @ 1
+ strb r2, [r0], #1 @ 1
+ RETINSTR(mov,pc,lr) @ 1
diff --git a/arch/arm/lib/setbit.S b/arch/arm/lib/setbit.S
new file mode 100644
index 000000000..b4319b4c3
--- /dev/null
+++ b/arch/arm/lib/setbit.S
@@ -0,0 +1,26 @@
+/*
+ * linux/arch/arm/lib/setbit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+@ Purpose : Function to set a bit
+@ Prototype: int set_bit(int bit,int *addr)
+
+ENTRY(set_bit)
+ and r2, r0, #7
+ mov r3, #1
+ mov r3, r3, lsl r2
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1, r0, lsr #3]
+ orr r2, r2, r3
+ strb r2, [r1, r0, lsr #3]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/strchr.S b/arch/arm/lib/strchr.S
new file mode 100644
index 000000000..fbde2483f
--- /dev/null
+++ b/arch/arm/lib/strchr.S
@@ -0,0 +1,26 @@
+/*
+ * linux/arch/arm/lib/strchr.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ *
+ * ASM optimised string functions
+ *
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+ENTRY(strchr)
+ str lr, [sp, #-4]!
+ mov r3, #0
+1: ldrb r2, [r0], #1
+ teq r2, r1
+ teqne r2, #0
+ bne 1b
+ teq r2, #0
+ moveq r0, #0
+ subne r0, r0, #1
+ LOADREGS(fd, sp!, {pc})
+
+
diff --git a/arch/arm/lib/strrchr.S b/arch/arm/lib/strrchr.S
new file mode 100644
index 000000000..ad5a46089
--- /dev/null
+++ b/arch/arm/lib/strrchr.S
@@ -0,0 +1,25 @@
+/*
+ * linux/arch/arm/lib/strrchr.S
+ *
+ * Copyright (C) 1995-1999 Russell King
+ *
+ * ASM optimised string functions
+ *
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include "constants.h"
+
+ .text
+ENTRY(strrchr)
+ stmfd sp!, {lr}
+ mov r3, #0
+1: ldrb r2, [r0], #1
+ teq r2, r1
+ moveq r3, r0
+ teq r2, #0
+ bne 1b
+ mov r0, r3
+ LOADREGS(fd, sp!, {pc})
+
+
diff --git a/arch/arm/lib/system.c b/arch/arm/lib/system.c
deleted file mode 100644
index f3b32cd82..000000000
--- a/arch/arm/lib/system.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * linux/arch/arm/lib/system.c
- *
- * Copyright (C) 1999 Russell King
- *
- * Converted from ASM version 04/09/1999
- */
-#include <linux/kernel.h>
-
-extern void abort(void)
-{
- void *lr = __builtin_return_address(0);
-
- printk(KERN_CRIT "kernel abort from %p! (Please report to rmk@arm.linux.org.uk)\n",
- lr);
-
- /* force an oops */
- *(int *)0 = 0;
-
- /* if that doesn't kill us, halt */
- panic("Oops failed to kill thread");
-}
diff --git a/arch/arm/lib/testchangebit.S b/arch/arm/lib/testchangebit.S
new file mode 100644
index 000000000..d3dd48216
--- /dev/null
+++ b/arch/arm/lib/testchangebit.S
@@ -0,0 +1,25 @@
+/*
+ * linux/arch/arm/lib/testchangebit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+ENTRY(test_and_change_bit)
+ add r1, r1, r0, lsr #3
+ and r3, r0, #7
+ mov r0, #1
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1]
+ tst r2, r0, lsl r3
+ eor r2, r2, r0, lsl r3
+ moveq r0, #0
+ strb r2, [r1]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/testclearbit.S b/arch/arm/lib/testclearbit.S
new file mode 100644
index 000000000..431865302
--- /dev/null
+++ b/arch/arm/lib/testclearbit.S
@@ -0,0 +1,25 @@
+/*
+ * linux/arch/arm/lib/testclearbit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+ENTRY(test_and_clear_bit)
+ add r1, r1, r0, lsr #3 @ Get byte offset
+ and r3, r0, #7 @ Get bit offset
+ mov r0, #1
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1]
+ tst r2, r0, lsl r3
+ bic r2, r2, r0, lsl r3
+ moveq r0, #0
+ strb r2, [r1]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/testsetbit.S b/arch/arm/lib/testsetbit.S
new file mode 100644
index 000000000..760b6649d
--- /dev/null
+++ b/arch/arm/lib/testsetbit.S
@@ -0,0 +1,25 @@
+/*
+ * linux/arch/arm/lib/testsetbit.S
+ *
+ * Copyright (C) 1995-1996 Russell King
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+ .text
+
+ENTRY(test_and_set_bit)
+ add r1, r1, r0, lsr #3 @ Get byte offset
+ and r3, r0, #7 @ Get bit offset
+ mov r0, #1
+ SAVEIRQS(ip)
+ DISABLEIRQS(ip)
+ ldrb r2, [r1]
+ tst r2, r0, lsl r3
+ orr r2, r2, r0, lsl r3
+ moveq r0, #0
+ strb r2, [r1]
+ RESTOREIRQS(ip)
+ RETINSTR(mov,pc,lr)
+
+
diff --git a/arch/arm/lib/uaccess.S b/arch/arm/lib/uaccess.S
index 898d2ef77..00f987b5f 100644
--- a/arch/arm/lib/uaccess.S
+++ b/arch/arm/lib/uaccess.S
@@ -12,21 +12,13 @@
#include <asm/errno.h>
.text
-#ifdef ENTRY
+
#define USER(x...) \
9999: x; \
.section __ex_table,"a"; \
.align 3; \
.long 9999b,9001f; \
.previous
-#else
-#define USER(x...) \
- x
-#define ENTRY(x...) \
- .globl _##x; \
-_##x:
-#define TESTING
-#endif
#define PAGE_SHIFT 12
@@ -285,12 +277,10 @@ USER( strgebt r3, [r0], #1) @ May fault
USER( strgtbt r3, [r0], #1) @ May fault
b .c2u_finished
-#ifndef TESTING
.section .fixup,"ax"
.align 0
9001: LOADREGS(fd,sp!, {r0, r4 - r7, pc})
.previous
-#endif
/* Prototype: unsigned long __arch_copy_from_user(void *to,const void *from,unsigned long n);
* Purpose : copy a block from user memory to kernel memory
@@ -546,7 +536,6 @@ USER( ldrget r3, [r1], #0) @ May fault
strgtb r3, [r0], #1
b .cfu_finished
-#ifndef TESTING
.section .fixup,"ax"
.align 0
/* We took an exception. Zero out the buffer and pretend no
@@ -557,7 +546,6 @@ USER( ldrget r3, [r1], #0) @ May fault
blne SYMBOL_NAME(__memzero)
LOADREGS(fd,sp!, {r0, r4 - r7, pc})
.previous
-#endif
/* Prototype: int __arch_clear_user(void *addr, size_t sz)
* Purpose : clear some user memory
@@ -592,7 +580,6 @@ USER( strnebt r2, [r0], #1)
mov r0, #0
LOADREGS(fd,sp!, {r1, pc})
-#ifndef TESTING
.section .fixup,"ax"
.align 0
9001: LOADREGS(fd,sp!, {r0, pc})
@@ -656,5 +643,4 @@ USER( ldrbt r3, [r1], #1)
.previous
.align
-#endif
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c
index 8715ea271..5151591b8 100644
--- a/arch/arm/mm/fault-armv.c
+++ b/arch/arm/mm/fault-armv.c
@@ -29,6 +29,8 @@
#define DO_COW(m) (!((m) & FAULT_CODE_READ))
#define READ_FAULT(m) ((m) & FAULT_CODE_READ)
+extern void die_if_kernel(const char *str, struct pt_regs *regs, int err);
+
#include "fault-common.c"
#ifdef DEBUG
@@ -118,17 +120,18 @@ static int proc_alignment_read(char *page, char **start, off_t off,
* This needs to be done after sysctl_init, otherwise sys/
* will be overwritten.
*/
-void __init alignment_init(void)
+static int __init alignment_init(void)
{
create_proc_read_entry("sys/debug/alignment", 0, NULL,
- proc_alignment_read);
+ proc_alignment_read, NULL);
+ return 0;
}
__initcall(alignment_init);
#endif /* CONFIG_SYSCTL */
static int
-do_alignment_exception(struct pt_regs *regs)
+do_alignment(unsigned long addr, int error_code, struct pt_regs *regs)
{
unsigned int instr, rd, rn, correction, nr_regs, regbits;
unsigned long eaddr;
@@ -308,116 +311,99 @@ do_alignment_exception(struct pt_regs *regs)
return 0;
}
+#else
+
+#define do_alignment NULL
+
#endif
-#define BUG_PROC_MSG \
- "Buggy processor (%08X), trying to continue.\n" \
- "Please read http://www.arm.linux.org.uk/state.html for more information"
+#ifdef CONFIG_DEBUG_USER
-asmlinkage void
-do_DataAbort(unsigned long addr, int fsr, int error_code, struct pt_regs *regs)
+static int
+do_sect_fault(unsigned long addr, int error_code, struct pt_regs *regs)
{
if (user_mode(regs)) {
- if (addr == regs->ARM_pc) {
- static int first = 1;
- if (first) {
- /*
- * I want statistical information on this problem!
- */
- printk(KERN_ERR BUG_PROC_MSG, fsr);
- first = 0;
+ printk("%s: permission fault on section, "
+ "address=0x%08lx, code %d\n",
+ current->comm, addr, error_code);
+#ifdef DEBUG
+ {
+ unsigned int i, j;
+ unsigned long *sp;
+
+ sp = (unsigned long *) (regs->ARM_sp - 128);
+ for (j = 0; j < 20 && sp_valid(sp); j++) {
+ printk("%p: ", sp);
+ for (i = 0; i < 8 && sp_valid(sp); i += 1, sp++)
+ printk("%08lx ", *sp);
+ printk("\n");
}
- return;
+ show_regs(regs);
+ c_backtrace(regs->ARM_fp, regs->ARM_cpsr);
}
+#endif
}
+ return 1; /* not fixed up */
+}
+#else
-#define DIE(signr,nam)\
- force_sig(signr, current);\
- die(nam, regs, fsr);\
- do_exit(signr);\
- break
-
- switch (fsr & 15) {
- /*
- * 0 - vector exception
- */
- case 0:
- force_sig(SIGSEGV, current);
- if (!user_mode(regs)) {
- die("vector exception", regs, fsr);
- do_exit(SIGSEGV);
- }
- break;
-
- /*
- * 15 - permission fault on page
- * 5 - page-table entry descriptor fault
- * 7 - first-level descriptor fault
- */
- case 15: case 5: case 7:
- do_page_fault(addr, error_code, regs);
- break;
+#define do_sect_fault NULL
- /*
- * 13 - permission fault on section
- */
- case 13:
- force_sig(SIGSEGV, current);
- if (!user_mode(regs)) {
- die("section permission fault", regs, fsr);
- do_exit(SIGSEGV);
- } else {
-#ifdef CONFIG_DEBUG_USER
- printk("%s: permission fault on section, "
- "address=0x%08lx, code %d\n",
- current->comm, addr, error_code);
-#ifdef DEBUG
- {
- unsigned int i, j;
- unsigned long *sp;
-
- sp = (unsigned long *) (regs->ARM_sp - 128);
- for (j = 0; j < 20 && sp_valid(sp); j++) {
- printk("%p: ", sp);
- for (i = 0; i < 8 && sp_valid(sp); i += 1, sp++)
- printk("%08lx ", *sp);
- printk("\n");
- }
- show_regs(regs);
- c_backtrace(regs->ARM_fp, regs->ARM_cpsr);
- }
-#endif
#endif
+
+static struct fsr_info {
+ int (*fn)(unsigned long addr, int error_code, struct pt_regs *regs);
+ int sig;
+ char *name;
+} fsr_info[] = {
+ { NULL, SIGSEGV, "vector exception" },
+ { do_alignment, SIGBUS, "alignment exception" },
+ { NULL, SIGKILL, "terminal exception" },
+ { do_alignment, SIGBUS, "alignment exception" },
+ { NULL, SIGBUS, "external abort on linefetch" },
+ { do_page_fault, SIGSEGV, "page fault" },
+ { NULL, SIGBUS, "external abort on linefetch" },
+ { do_page_fault, SIGSEGV, "page fault" },
+ { NULL, SIGBUS, "external abort on non-linefetch" },
+ { NULL, SIGSEGV, "domain fault" },
+ { NULL, SIGBUS, "external abort on non-linefetch" },
+ { NULL, SIGSEGV, "domain fault" },
+ { NULL, SIGBUS, "external abort on translation" },
+ { do_sect_fault, SIGSEGV, "section permission fault" },
+ { NULL, SIGBUS, "external abort on translation" },
+ { do_page_fault, SIGSEGV, "page permission fault" }
+};
+
+/*
+ * Currently dropped down to debug level
+ */
+#define BUG_PROC_MSG \
+ KERN_DEBUG "Weird data abort (%08X).\n" \
+ KERN_DEBUG "Please see http://www.arm.linux.org.uk/state.html for more information"
+
+asmlinkage void
+do_DataAbort(unsigned long addr, int fsr, int error_code, struct pt_regs *regs)
+{
+ struct fsr_info *inf;
+
+ if (user_mode(regs) && addr == regs->ARM_pc) {
+ static int first = 1;
+ if (first) {
+ /*
+ * I want statistical information on this problem,
+ * but we don't want to hastle the users too much.
+ */
+ printk(BUG_PROC_MSG, fsr);
+ first = 0;
}
- break;
+ return;
+ }
- case 1:
- case 3:
-#ifdef CONFIG_ALIGNMENT_TRAP
- if (!do_alignment_exception(regs))
- break;
-#endif
- /*
- * this should never happen
- */
- DIE(SIGBUS, "Alignment exception");
- break;
+ inf = fsr_info + (fsr & 15);
- case 2:
- DIE(SIGKILL, "Terminal exception");
- case 12:
- case 14:
- DIE(SIGBUS, "External abort on translation");
- case 9:
- case 11:
- DIE(SIGSEGV, "Domain fault");
-
- case 4:
- case 6:
- DIE(SIGBUS, "External abort on linefetch");
- case 8:
- case 10:
- DIE(SIGBUS, "External abort on non-linefetch");
+ if (!inf->fn || inf->fn(addr, error_code, regs)) {
+ force_sig(inf->sig, current);
+ die_if_kernel(inf->name, regs, fsr);
}
}
diff --git a/arch/arm/mm/fault-common.c b/arch/arm/mm/fault-common.c
index e516261ed..d04808ffa 100644
--- a/arch/arm/mm/fault-common.c
+++ b/arch/arm/mm/fault-common.c
@@ -6,7 +6,7 @@
*/
#include <linux/config.h>
-extern void die(char *msg, struct pt_regs *regs, unsigned int err);
+extern void die(const char *msg, struct pt_regs *regs, unsigned int err);
/*
* This is useful to dump out the page tables associated with
@@ -79,7 +79,7 @@ kernel_page_fault(unsigned long addr, int write_access, struct pt_regs *regs,
do_exit(SIGKILL);
}
-static void do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
+static int do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
{
struct task_struct *tsk;
struct mm_struct *mm;
@@ -127,7 +127,7 @@ good_area:
goto do_sigbus;
up(&mm->mmap_sem);
- return;
+ return 0;
/*
* Something tried to access memory that isn't in our memory map..
@@ -138,6 +138,7 @@ bad_area:
/* User mode accesses just cause a SIGSEGV */
if (user_mode(regs)) {
+ tsk->thread.address = addr;
tsk->thread.error_code = mode;
tsk->thread.trap_no = 14;
#ifdef CONFIG_DEBUG_USER
@@ -145,7 +146,7 @@ bad_area:
tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
#endif
force_sig(SIGSEGV, tsk);
- return;
+ return 0;
}
no_context:
@@ -156,11 +157,11 @@ no_context:
tsk->comm, regs->ARM_pc, addr, fixup);
#endif
regs->ARM_pc = fixup;
- return;
+ return 0;
}
kernel_page_fault(addr, mode, regs, tsk, mm);
- return;
+ return 0;
do_sigbus:
/*
@@ -173,6 +174,7 @@ do_sigbus:
* Send a sigbus, regardless of whether we were in kernel
* or user mode.
*/
+ tsk->thread.address = addr;
tsk->thread.error_code = mode;
tsk->thread.trap_no = 14;
force_sig(SIGBUS, tsk);
@@ -180,6 +182,7 @@ do_sigbus:
/* Kernel mode? Handle exceptions or die */
if (!user_mode(regs))
goto no_context;
+ return 0;
}
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 17972e427..bc4cf1ed1 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -168,7 +168,8 @@ void show_mem(void)
void __init paging_init(void)
{
void *zero_page, *bad_page, *bad_table;
- unsigned int zone_size[3];
+ unsigned int zone_size[MAX_NR_ZONES];
+ int i;
#ifdef CONFIG_CPU_32
#define TABLE_OFFSET (PTRS_PER_PTE)
@@ -193,7 +194,24 @@ void __init paging_init(void)
/*
* Initialise the zones and mem_map
*/
- zonesize_init(zone_size);
+ for (i = 0; i < MAX_NR_ZONES; i++)
+ zone_size[i] = 0;
+
+ /*
+ * Calculate the size of the zones. On ARM, we don't have
+ * any problems with DMA or highmem, so all memory is
+ * allocated to the DMA zone.
+ */
+ for (i = 0; i < meminfo.nr_banks; i++) {
+ if (meminfo.bank[i].size) {
+ unsigned int end;
+
+ end = (meminfo.bank[i].start - PHYS_OFFSET +
+ meminfo.bank[i].size) >> PAGE_SHIFT;
+ if (zone_size[0] < end)
+ zone_size[0] = end;
+ }
+ }
free_area_init(zone_size);
/*
@@ -339,10 +357,11 @@ void free_initmem(void)
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
- for (; start < end; start += PAGE_SIZE) {
- ClearPageReserved(mem_map + MAP_NR(start));
- set_page_count(mem_map+MAP_NR(start), 1);
- free_page(start);
+ unsigned long addr;
+ for (addr = start; addr < end; addr += PAGE_SIZE) {
+ ClearPageReserved(mem_map + MAP_NR(addr));
+ set_page_count(mem_map+MAP_NR(addr), 1);
+ free_page(addr);
totalram_pages++;
}
printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
diff --git a/arch/arm/mm/mm-armo.c b/arch/arm/mm/mm-armo.c
index 680a52948..a5d4cdfe8 100644
--- a/arch/arm/mm/mm-armo.c
+++ b/arch/arm/mm/mm-armo.c
@@ -135,20 +135,6 @@ pte_t *get_pte_slow(pmd_t *pmd, unsigned long offset)
}
/*
- * Calculate the size of the DMA, normal and highmem zones.
- * On 26-bit ARMs, we don't have any real DMA or highmem,
- * so we allocate the whole memory as being DMA-capable.
- */
-void __init zonesize_init(unsigned int *zone_size)
-{
- int i;
-
- zone_size[0] = max_low_pfn;
- zone_size[1] = 0;
- zone_size[2] = 0;
-}
-
-/*
* This contains the code to setup the memory map on an ARM2/ARM250/ARM3
* machine. This is both processor & architecture specific, and requires
* some more work to get it to fit into our separate processor and
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
index ee4750c62..76d101507 100644
--- a/arch/arm/mm/mm-armv.c
+++ b/arch/arm/mm/mm-armv.c
@@ -46,6 +46,15 @@ static int __init nowrite_setup(char *__unused)
return 1;
}
+static int __init noalign_setup(char *__unused)
+{
+ cr_alignment &= ~2;
+ cr_no_alignment &= ~2;
+ set_cr(cr_alignment);
+ return 1;
+}
+
+__setup("noalign", noalign_setup);
__setup("nocache", nocache_setup);
__setup("nowb", nowrite_setup);
@@ -218,7 +227,7 @@ alloc_init_page(unsigned long virt, unsigned long phys, int domain, int prot)
* the clearance is done by the middle-level functions (pmd)
* rather than the top-level (pgd) functions.
*/
-static inline void free_init_section(unsigned long virt)
+static inline void clear_mapping(unsigned long virt)
{
pmd_clear(pmd_offset(pgd_offset_k(virt), virt));
}
@@ -273,73 +282,76 @@ static void __init create_mapping(struct map_desc *md)
}
}
-/*
- * Initial boot-time mapping. This covers just the zero page, kernel and
- * the flush area. NB: it must be sorted by virtual address, and no
- * virtual address overlaps.
- * init_map[2..4] are for architectures with banked memory.
- */
-static struct map_desc init_map[] __initdata = {
- { 0, 0, PAGE_SIZE, DOMAIN_USER, 0, 0, 1, 0 }, /* zero page */
- { 0, 0, 0, DOMAIN_KERNEL, 0, 1, 1, 1 }, /* kernel memory */
- { 0, 0, 0, DOMAIN_KERNEL, 0, 1, 1, 1 }, /* (4 banks) */
- { 0, 0, 0, DOMAIN_KERNEL, 0, 1, 1, 1 },
- { 0, 0, 0, DOMAIN_KERNEL, 0, 1, 1, 1 },
- { 0, 0, PGDIR_SIZE, DOMAIN_KERNEL, 1, 0, 1, 1 }, /* cache flush 1 */
- { 0, 0, 0, DOMAIN_KERNEL, 1, 0, 1, 0 } /* cache flush 2 */
-};
-
-#define NR_INIT_MAPS (sizeof(init_map) / sizeof(init_map[0]))
-
-/*
- * Calculate the size of the DMA, normal and highmem zones.
- * On ARM, we don't have any problems with DMA, so all memory
- * is allocated to the DMA zone. We also don't have any
- * highmem either.
- */
-void __init zonesize_init(unsigned int *zone_size)
+void __init pagetable_init(void)
{
+ struct map_desc *init_maps, *p;
+ unsigned long address = 0;
int i;
- zone_size[0] = 0;
- zone_size[1] = 0;
- zone_size[2] = 0;
+ /*
+ * Setup initial mappings. We use the page we allocated
+ * for zero page to hold the mappings, which will get
+ * overwritten by the vectors in traps_init(). The
+ * mappings must be in virtual address order.
+ */
+ init_maps = p = alloc_bootmem_low_pages(PAGE_SIZE);
+
+ p->physical = virt_to_phys(init_maps);
+ p->virtual = 0;
+ p->length = PAGE_SIZE;
+ p->domain = DOMAIN_USER;
+ p->prot_read = 0;
+ p->prot_write = 0;
+ p->cacheable = 1;
+ p->bufferable = 0;
+
+ p ++;
for (i = 0; i < meminfo.nr_banks; i++) {
- if (meminfo.bank[i].size) {
- unsigned int end;
+ if (meminfo.bank[i].size == 0)
+ continue;
- end = (meminfo.bank[i].start - PHYS_OFFSET +
- meminfo.bank[i].size) >> PAGE_SHIFT;
- if (end > zone_size[0])
- zone_size[0] = end;
- }
+ p->physical = meminfo.bank[i].start;
+ p->virtual = __phys_to_virt(p->physical);
+ p->length = meminfo.bank[i].size;
+ p->domain = DOMAIN_KERNEL;
+ p->prot_read = 0;
+ p->prot_write = 1;
+ p->cacheable = 1;
+ p->bufferable = 1;
+
+ p ++;
}
-}
-void __init pagetable_init(void)
-{
- unsigned long address = 0;
- int i;
+ p->physical = FLUSH_BASE_PHYS;
+ p->virtual = FLUSH_BASE;
+ p->length = PGDIR_SIZE;
+ p->domain = DOMAIN_KERNEL;
+ p->prot_read = 1;
+ p->prot_write = 0;
+ p->cacheable = 1;
+ p->bufferable = 1;
+
+ p ++;
- /*
- * Setup the above mappings
- */
- init_map[0].physical = virt_to_phys(alloc_bootmem_low_pages(PAGE_SIZE));
- init_map[5].physical = FLUSH_BASE_PHYS;
- init_map[5].virtual = FLUSH_BASE;
#ifdef FLUSH_BASE_MINICACHE
- init_map[6].physical = FLUSH_BASE_PHYS + PGDIR_SIZE;
- init_map[6].virtual = FLUSH_BASE_MINICACHE;
- init_map[6].length = PGDIR_SIZE;
+ p->physical = FLUSH_BASE_PHYS + PGDIR_SIZE;
+ p->virtual = FLUSH_BASE_MINICACHE;
+ p->length = PGDIR_SIZE;
+ p->domain = DOMAIN_KERNEL;
+ p->prot_read = 1;
+ p->prot_write = 0;
+ p->cacheable = 1;
+ p->bufferable = 0;
+
+ p ++;
#endif
- for (i = 0; i < meminfo.nr_banks; i++) {
- init_map[i+1].physical = meminfo.bank[i].start;
- init_map[i+1].virtual = meminfo.bank[i].start +
- PAGE_OFFSET - PHYS_OFFSET;
- init_map[i+1].length = meminfo.bank[i].size;
- }
+ /*
+ * We may have a mapping in virtual address 0.
+ * Clear it out.
+ */
+ clear_mapping(0);
/*
* Go through the initial mappings, but clear out any
@@ -347,18 +359,16 @@ void __init pagetable_init(void)
*/
i = 0;
do {
- if (address < init_map[i].virtual || i == NR_INIT_MAPS) {
- free_init_section(address);
+ if (address < init_maps->virtual || init_maps == p) {
+ clear_mapping(address);
address += PGDIR_SIZE;
} else {
- create_mapping(init_map + i);
+ create_mapping(init_maps);
- address = init_map[i].virtual + init_map[i].length;
+ address = init_maps->virtual + init_maps->length;
address = (address + PGDIR_SIZE - 1) & PGDIR_MASK;
- do {
- i += 1;
- } while (init_map[i].length == 0 && i < NR_INIT_MAPS);
+ init_maps ++;
}
} while (address != 0);
@@ -382,6 +392,7 @@ void __init create_memmap_holes(void)
unsigned int i;
#define PFN(x) (((x) - PHYS_OFFSET) >> PAGE_SHIFT)
+#define free_bootmem(s,sz) free_bootmem(((s)<<PAGE_SHIFT)+PHYS_OFFSET, (sz)<<PAGE_SHIFT)
for (i = 0; i < meminfo.nr_banks; i++) {
if (meminfo.bank[i].size == 0)
@@ -409,7 +420,7 @@ void __init create_memmap_holes(void)
end_pfn = PFN(meminfo.bank[i].start + meminfo.bank[i].size);
- if (end_pfn != meminfo.end >> PAGE_SHIFT)
+ if (end_pfn != PFN(meminfo.end))
pg = mem_map + end_pfn;
}
diff --git a/arch/arm/mm/mm-sa1100.c b/arch/arm/mm/mm-sa1100.c
index eba2984b6..c6f9f2e8b 100644
--- a/arch/arm/mm/mm-sa1100.c
+++ b/arch/arm/mm/mm-sa1100.c
@@ -6,11 +6,11 @@
* Copyright (C) 1998-1999 Russell King
* Copyright (C) 1999 Hugo Fiennes
*
- * 1999/09/12 Nicolas Pitre <nico@visuaide.com>
- * Specific RAM implementation details are in
- * linux/include/asm/arch-sa1100/memory.h now.
- * Allows for better macro optimisations when possible.
+ * 1999/12/04 Nicolas Pitre <nico@cam.org>
+ * Converted memory definition for struct meminfo initialisations.
+ * Memory is listed physically now.
*/
+
#include <linux/config.h>
#include <linux/mm.h>
#include <linux/init.h>
@@ -22,33 +22,37 @@
#define SIZE(x) (sizeof(x) / sizeof(x[0]))
+
/*
- * These are the memory size mappings for the
- * SA1100. Note that LART is a special case -
- * it doesn't use physical address A23 on the
- * DRAM, so we effectively have 4 * 8MB in
- * two banks.
+ * These are the RAM memory mappings for SA1100 implementations.
+ * Note that LART is a special case - it doesn't use physical
+ * address line A23 on the DRAM, so we effectively have 4 * 8MB
+ * in two banks.
*/
-struct mem_desc mem_desc[] __initdata = {
- /* virt start virt end */
+struct mem_desc {
+ unsigned long phys_start;
+ unsigned long length;
+} mem_desc[] __initdata = {
#if defined(CONFIG_SA1100_BRUTUS)
- { 0xc0000000, 0xc0400000 }, /* 4MB */
- { 0xc1000000, 0xc1400000 }, /* 4MB */
- { 0xc2000000, 0xc2400000 }, /* 4MB */
- { 0xc3000000, 0xc3400000 } /* 4MB */
+ { 0xc0000000, 0x00400000 }, /* 4MB */
+ { 0xc8000000, 0x00400000 }, /* 4MB */
+#if 0 /* only two banks until the bootmem stuff is fixed... */
+ { 0xd0000000, 0x00400000 }, /* 4MB */
+ { 0xd8000000, 0x00400000 } /* 4MB */
+#endif
#elif defined(CONFIG_SA1100_EMPEG)
- { 0xc0000000, 0xc0400000 }, /* 4MB */
- { 0xc1000000, 0xc1400000 } /* 4MB */
+ { 0xc0000000, 0x00400000 }, /* 4MB */
+ { 0xc8000000, 0x00400000 } /* 4MB */
#elif defined(CONFIG_SA1100_LART)
- { 0xc0000000, 0xc0800000 }, /* 16MB */
- { 0xc1000000, 0xc1800000 },
- { 0xc2000000, 0xc2800000 }, /* 16MB */
- { 0xc3000000, 0xc3800000 }
+ { 0xc0000000, 0x00800000 }, /* 8MB */
+ { 0xc1000000, 0x00800000 }, /* 8MB */
+ { 0xc8000000, 0x00800000 }, /* 8MB */
+ { 0xc9000000, 0x00800000 } /* 8MB */
#elif defined(CONFIG_SA1100_VICTOR)
- { 0xc0000000, 0xc0400000 } /* 4MB */
+ { 0xc0000000, 0x00400000 } /* 4MB */
#elif defined(CONFIG_SA1100_TIFON)
- { 0xc0000000, 0xc1000000 }, /* 16MB */
- { 0xc1000000, 0xc2000000 } /* 16MB */
+ { 0xc0000000, 0x01000000 }, /* 16MB */
+ { 0xc8000000, 0x01000000 } /* 16MB */
#else
#error missing memory configuration
#endif
@@ -56,6 +60,7 @@ struct mem_desc mem_desc[] __initdata = {
unsigned int __initdata mem_desc_size = SIZE(mem_desc);
+
struct map_desc io_desc[] __initdata = {
/* virtual physical length domain r w c b */
#if defined(CONFIG_SA1100_VICTOR)
diff --git a/arch/arm/mm/proc-arm6,7.S b/arch/arm/mm/proc-arm6,7.S
index d453269d2..23508c197 100644
--- a/arch/arm/mm/proc-arm6,7.S
+++ b/arch/arm/mm/proc-arm6,7.S
@@ -134,14 +134,10 @@ ENTRY(cpu_arm7_data_abort)
b Ldata_simple @ ldc rd, [rn, #m]
b Ldata_unknown
Ldata_unknown: @ Part of jumptable
- ldr r3, [sp, #15 * 4] @ Get PC
- str r3, [sp, #-4]!
- mov r1, r1, lsr #2
- mov r3, r4
- mov r2, r0
- adr r0, Lukabttxt
- bl SYMBOL_NAME(panic)
-Lstop: b Lstop
+ mov r0, r1
+ mov r1, r4
+ mov r2, r3
+ b baddataabort
Ldata_ldmstm: tst r4, #1 << 21 @ check writeback bit
beq Ldata_simple
@@ -468,7 +464,7 @@ ENTRY(arm6_processor_functions)
.word cpu_arm6_cache_wback_area
.word cpu_arm6_cache_purge_area
.word cpu_arm6_flush_tlb_page
- .word cpu_arm7_do_idle
+ .word cpu_arm6_do_idle
.size arm6_processor_functions, . - arm6_processor_functions
/*
diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S
index 2d57b1030..5431f14a0 100644
--- a/arch/arm/mm/proc-sa110.S
+++ b/arch/arm/mm/proc-sa110.S
@@ -16,6 +16,7 @@
* is larger than this, then we flush the whole cache
*/
#define MAX_AREA_SIZE 32768
+#define FLUSH_OFFSET 32768
.macro flush_110_dcache rd, ra, re
add \re, \ra, #16384 @ only necessary for 16k
@@ -56,7 +57,7 @@ cpu_sa110_flush_cache_all_r2:
ands r1, r1, #1
eor r1, r1, #1
str r1, [r3]
- addne ip, ip, #32768
+ addne ip, ip, #FLUSH_OFFSET
flush_110_dcache r3, ip, r1
mov ip, #0
teq r2, #0
@@ -74,7 +75,7 @@ cpu_sa1100_flush_cache_all_r2:
ands r1, r1, #1
eor r1, r1, #1
str r1, [r3]
- addne ip, ip, #32768
+ addne ip, ip, #FLUSH_OFFSET
flush_1100_dcache r3, ip, r1
mov ip, #0
teq r2, #0
@@ -321,7 +322,7 @@ ENTRY(cpu_sa110_set_pgd)
ands r2, r2, #1
eor r2, r2, #1
str r2, [r3]
- addne ip, ip, #32768
+ addne ip, ip, #FLUSH_OFFSET
flush_110_dcache r3, ip, r1
mov r1, #0
mcr p15, 0, r1, c7, c5, 0 @ flush I cache
@@ -338,7 +339,7 @@ ENTRY(cpu_sa1100_set_pgd)
ands r2, r2, #1
eor r2, r2, #1
str r2, [r3]
- addne ip, ip, #32768
+ addne ip, ip, #FLUSH_OFFSET
flush_1100_dcache r3, ip, r1
mov r1, #0
mcr p15, 0, r1, c7, c5, 0 @ flush I cache
@@ -430,8 +431,12 @@ ENTRY(cpu_sa110_do_idle)
ENTRY(cpu_sa1100_do_idle)
mov r0, #0
mcr p15, 0, r0, c15, c2, 2 @ Disable clock switching
- @ load from uncacheable loc?
- mcr p15, 0, r0, c15, c8, 2 @ Wait for interrupt
+ ldr r1, =FLUSH_BASE+FLUSH_OFFSET*2 @ load from uncacheable loc
+ ldr r1, [r1, #0]
+ b 1f
+
+ .align 5
+1: mcr p15, 0, r0, c15, c8, 2 @ Wait for interrupt
mcr p15, 0, r0, c15, c1, 2 @ Enable clock switching
mov pc, lr
diff --git a/arch/arm/vmlinux-armv.lds.in b/arch/arm/vmlinux-armv.lds.in
index f83109875..93b8946e7 100644
--- a/arch/arm/vmlinux-armv.lds.in
+++ b/arch/arm/vmlinux-armv.lds.in
@@ -6,82 +6,84 @@ OUTPUT_ARCH(arm)
ENTRY(stext)
SECTIONS
{
- . = TEXTADDR;
- .text : { } /* Set text start address */
-
- __init_begin = .; /* Init code and data */
- .text.init : { *(.text.init) }
- __proc_info_begin = .;
- .proc.info : { *(.proc.info) }
- __proc_info_end = .;
- .data.init : { *(.data.init) }
- . = ALIGN(16);
- __setup_start = .;
- .setup.init : { *(.setup.init) }
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall.init) }
- __initcall_end = .;
- . = ALIGN(4096);
- __init_end = .;
-
- __ebsa285_begin = .;
- .text.ebsa285 : { *(.text.ebsa285) }
- .data.ebsa285 : { *(.data.ebsa285) }
- . = ALIGN(4096);
- __ebsa285_end = .;
-
- __netwinder_begin = .;
- .text.netwinder : { *(.text.netwinder) }
- .data.netwinder : { *(.data.netwinder) }
- . = ALIGN(4096);
- __netwinder_end = .;
-
- _text = .; /* Text and read-only data */
- .text.real : { /* Real text segment */
- *(.text)
- *(.fixup)
- *(.gnu.warning)
+ . = TEXTADDR;
+ .init : { /* Init code and data */
+ __init_begin = .;
+ *(.text.init)
+ __proc_info_begin = .;
+ *(.proc.info)
+ __proc_info_end = .;
+ *(.data.init)
+ . = ALIGN(16);
+ __setup_start = .;
+ *(.setup.init)
+ __setup_end = .;
+ __initcall_start = .;
+ *(.initcall.init)
+ __initcall_end = .;
+ . = ALIGN(4096);
+ __init_end = .;
}
- .text.lock : { *(.text.lock) } /* out-of-line lock text */
- .rodata : { *(.rodata) }
- .kstrtab : { *(.kstrtab) }
+ .ebsa285 : {
+ __ebsa285_begin = .;
+ *(.text.ebsa285)
+ *(.data.ebsa285)
+ . = ALIGN(4096);
+ __ebsa285_end = .;
+ }
- . = ALIGN(16); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) }
- __stop___ex_table = .;
+ .netwinder : {
+ __netwinder_begin = .;
+ *(.text.netwinder)
+ *(.data.netwinder)
+ . = ALIGN(4096);
+ __netwinder_end = .;
+ }
- __start___ksymtab = .; /* Kernel symbol table */
- __ksymtab : { *(__ksymtab) }
- __stop___ksymtab = .;
+ .text : { /* Real text segment */
+ _text = .; /* Text and read-only data */
+ *(.text)
+ *(.fixup)
+ *(.gnu.warning)
+ *(.text.lock) /* out-of-line lock text */
+ *(.rodata)
+ *(.kstrtab)
+ . = ALIGN(16); /* Exception table */
+ __start___ex_table = .;
+ *(__ex_table)
+ __stop___ex_table = .;
- .got : { *(.got) } /* Global offset table */
+ __start___ksymtab = .; /* Kernel symbol table */
+ *(__ksymtab)
+ __stop___ksymtab = .;
- _etext = .; /* End of text section */
+ *(.got) /* Global offset table */
- . = ALIGN(8192);
- .data : { /* Data */
- *(.init.task)
- *(.data)
- CONSTRUCTORS
+ _etext = .; /* End of text section */
}
- _edata = .; /* End of data section */
+ . = ALIGN(8192);
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss)
+ .data : { /* Data */
+ *(.init.task)
+ *(.data)
+ CONSTRUCTORS
+ _edata = .; /* End of data section */
}
- _end = . ;
- /* Stabs debugging sections. */
- .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) }
+ .bss : {
+ __bss_start = .; /* BSS */
+ *(.bss)
+ *(COMMON)
+ _end = . ;
+ }
+ /* Stabs debugging sections. */
+ .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) }
}