Commit caec3863 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.40pre2

parent 9a8827cd
......@@ -8002,7 +8002,7 @@ CONFIG_USB_ACM
The module will be called acm.o. If you want to compile it as a
module, say M here and read Documentation/modules.txt.
USB serial converter support
USB Serial converter support
CONFIG_USB_SERIAL
Say Y here if you want to connect a Connect Tech WhiteHEAT
multi-port USB to serial converter; a Belkin, Peracom, or eTek
......@@ -8014,6 +8014,33 @@ CONFIG_USB_SERIAL
The module will be called usb-serial.o. If you want to compile it
as a module, say M here and read Documentation/modules.txt.
USB Generic Serial Driver
CONFIG_USB_SERIAL_GENERIC
Say Y here if you want to use the generic USB serial driver.
Please read Documentation/usb/usb-serial.txt for more information
on using this driver. It is recommended that the USB Serial
Driver be compiled as a module for this driver to be used properly.
USB ConnectTech WhiteHEAT Serial Driver
CONFIG_USB_SERIAL_WHITEHEAT
Say Y here if you want to use a ConnectTech WhiteHEAT 4 port
USB to serial converter device.
USB Handspring Visor Driver
CONFIG_USB_SERIAL_VISOR
Say Y here if you want to connect to your HandSpring Visor through
its USB docking station.
USB Belkin Single Port Serial Driver
CONFIG_USB_SERIAL_BELKIN
Say Y here if you want to use a Belkin single port USB to serial
converter device.
USB Peracom Single Port Serial Driver
CONFIG_USB_SERIAL_PERACOM
Say Y here if you want to use a Peracom single port USB to serial
converter device.
USB Printer support
CONFIG_USB_PRINTER
Say Y here if you want to connect a USB printer to your computer's USB
......
......@@ -17,11 +17,6 @@ What's left to be done for 32-bit UIDs on all Linux architectures:
properly with huge UIDs. If it can deal with 64-bit file offsets on all
architectures, this should not be a problem.
- Decide on a final layout for the new msqid64_ds, semid64_ds, and
shmid64_ds, and shminfo64 structures. The current ones leave pad space
for 64-bit time_t and 32-bit pid_t, as well as 4 extra machine words.
Perhaps more pad space should be left for future use?
- Decide whether or not to keep backwards compatibility with the system
accounting file, or if we should break it as the comments suggest
(currently, the old 16-bit UID and GID are still written to disk, and
......@@ -33,7 +28,7 @@ What's left to be done for 32-bit UIDs on all Linux architectures:
uses the 32-bit UID system calls properly otherwise.
This affects at least:
SunOS emulation - now fixed?
SunOS emulation
Solaris emulation
iBCS on Intel
......@@ -62,8 +57,8 @@ What's left to be done for 32-bit UIDs on all Linux architectures:
Other filesystems have not been checked yet.
- The ncpfs and smpfs filesystems can not presently return 32-bit UIDs to
all ioctl()s. Some new ioctl()s have been added for 32-bit UIDs, but
- The ncpfs and smpfs filesystems can not presently use 32-bit UIDs in
all ioctl()s. Some new ioctl()s have been added with 32-bit UIDs, but
more are needed. (as well as new user<->kernel data structures)
- The ELF core dump format only supports 16-bit UIDs on arm, i386, m68k,
......@@ -76,3 +71,9 @@ What's left to be done for 32-bit UIDs on all Linux architectures:
- make sure that the UID mapping feature of AX25 networking works properly
(it should be safe because it's always used a 32-bit integer to
communicate between user and kernel)
Chris Wing
wingc@umich.edu
last updated: January 11, 2000
......@@ -2,6 +2,9 @@
# For a description of the syntax of this configuration file,
# see the Configure script.
#
define_bool CONFIG_UID16 n
mainmenu_name "Kernel configuration of Linux for Alpha machines"
mainmenu_option next_comment
......@@ -180,6 +183,12 @@ fi
source drivers/pci/Config.in
bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG
if [ "$CONFIG_HOTPLUG" = "y" ] ; then
source drivers/pcmcia/Config.in
fi
bool 'Networking support' CONFIG_NET
bool 'System V IPC' CONFIG_SYSVIPC
bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
......
......@@ -321,11 +321,11 @@ CONFIG_PSMOUSE=y
# CONFIG_FTAPE is not set
# CONFIG_DRM is not set
# CONFIG_DRM_TDFX is not set
CONFIG_PCMCIA_SERIAL=y
#
# PCMCIA character device support
#
CONFIG_PCMCIA_SERIAL=y
# CONFIG_PCMCIA_SERIAL_CS is not set
#
......
......@@ -560,12 +560,14 @@ mcpcia_machine_check(unsigned long vector, unsigned long la_ptr,
switch (expected) {
case 0:
{
/* FIXME: how do we figure out which hose the
error was on? */
struct pci_controler *hose;
for (hose = hose_head; hose; hose = hose->next)
mcpcia_pci_clr_err(hose2mid(hose->index));
break;
}
case 1:
mcpcia_pci_clr_err(mcheck_extra(cpu));
break;
......
......@@ -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)
......
......@@ -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
......
/*
* 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
/*
* 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
......@@ -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
......
......@@ -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
......
This diff is collapsed.
......@@ -3,6 +3,11 @@
#
CONFIG_ARM=y
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
#
# System and processor type
#
......@@ -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
......@@ -60,7 +62,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 +99,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 +120,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 +142,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 +184,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 +198,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 +226,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 +261,70 @@ 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
#
# PCMCIA character device support
#
# CONFIG_PCMCIA_SERIAL_CS is not set
# CONFIG_AGP 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 +441,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 +458,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 +501,12 @@ 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
#
# PCMCIA network device support
#
# CONFIG_NET_PCMCIA is not set
#
# SCSI support
......@@ -441,30 +521,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 +565,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 +581,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 +596,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
......
This diff is collapsed.
This diff is collapsed.
......@@ -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);
......
......@@ -33,8 +33,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 +162,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 +221,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 +257,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 +315,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 +384,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 +403,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)
{
}
......@@ -7,3 +7,4 @@ struct hw_pci {
};
void __init dc21285_init(void);
void __init plx90x0_init(void);
......@@ -27,17 +27,17 @@
/* 15 */ .long SYMBOL_NAME(sys_chmod)
.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_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 */
......@@ -93,7 +93,7 @@
.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)
......@@ -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)
......@@ -149,7 +149,7 @@
.long SYMBOL_NAME(sys_ni_syscall) /* .long _sys_afs_syscall */
.long SYMBOL_NAME(sys_setfsuid16)
.long SYMBOL_NAME(sys_setfsgid16)
/* 140 */ .long SYMBOL_NAME(sys_llseek_wrapper)
/* 140 */ .long SYMBOL_NAME(sys_llseek)
.long SYMBOL_NAME(sys_getdents)
.long SYMBOL_NAME(sys_select)
.long SYMBOL_NAME(sys_flock)
......
......@@ -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
......
......@@ -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);
......
......@@ -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:
......
......@@ -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
......
......@@ -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
......
......@@ -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:
......@@ -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;
}
......
......@@ -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
}
};
......
......@@ -278,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;
......
......@@ -79,12 +79,26 @@ static inline long do_mmap2(
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 @@ asmlinkage int old_mmap(struct mmap_arg_struct *arg)
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 @@ asmlinkage int sys_execve(char *filenamei, char **argv, char **envp, struct pt_r
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;
}
......@@ -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;
......
......@@ -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);
......
......@@ -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
/*
* 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)
/*
* 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)
/*
* 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
/*
* 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})
/*
* 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)
/*
* 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
/*
* 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})
/*
* linux/arch/arm/lib/bitops.S
*
* Copyright (C) 1995, 1996 Russell King
* 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);
......
......@@ -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)
......
......@@ -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)
......
/*
* 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})
/*
* 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
......
/*
* 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)
/*
* 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
/*
* 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)
/*
* 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})
/*
* 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})
/*
* 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");
}
/*
* 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)
/*
* 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)
/*
* 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)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -7,6 +7,8 @@ mainmenu_name "Linux Kernel Configuration"
define_bool CONFIG_X86 y
define_bool CONFIG_ISA 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
......@@ -106,7 +108,7 @@ fi
bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG
if [ "$CONFIG_HOTPLUG" = "y" ] ; then
source drivers/pcmcia/Config.in
source drivers/pcmcia/Config.in
fi
bool 'System V IPC' CONFIG_SYSVIPC
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment