summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/alpha/config.in13
-rw-r--r--arch/alpha/defconfig13
-rw-r--r--arch/arm/Makefile15
-rw-r--r--arch/arm/boot/compressed/Makefile5
-rw-r--r--arch/arm/config.in15
-rw-r--r--arch/arm/defconfig90
-rw-r--r--arch/arm/kernel/Makefile78
-rw-r--r--arch/arm/kernel/arch.c322
-rw-r--r--arch/arm/kernel/arch.h15
-rw-r--r--arch/arm/kernel/armksyms.c3
-rw-r--r--arch/arm/kernel/bios32.c79
-rw-r--r--arch/arm/kernel/head-armv.S16
-rw-r--r--arch/arm/kernel/ptrace.c42
-rw-r--r--arch/arm/kernel/setup.c392
-rw-r--r--arch/arm/lib/Makefile36
-rw-r--r--arch/arm/lib/io-shark.c79
-rw-r--r--arch/arm/mm/init.c31
-rw-r--r--arch/arm/mm/proc-arm6,7.S135
-rw-r--r--arch/arm/vmlinux-armo.lds.in127
-rw-r--r--arch/arm/vmlinux-armv.lds.in8
-rw-r--r--arch/i386/boot/tools/build.c6
-rw-r--r--arch/i386/config.in13
-rw-r--r--arch/i386/defconfig105
-rw-r--r--arch/i386/kernel/Makefile2
-rw-r--r--arch/i386/kernel/acpi.c454
-rw-r--r--arch/i386/kernel/entry.S4
-rw-r--r--arch/i386/kernel/head.S283
-rw-r--r--arch/i386/kernel/i386_ksyms.c14
-rw-r--r--arch/i386/kernel/irq.c129
-rw-r--r--arch/i386/kernel/mca.c185
-rw-r--r--arch/i386/kernel/mtrr.c68
-rw-r--r--arch/i386/kernel/setup.c54
-rw-r--r--arch/i386/kernel/time.c7
-rw-r--r--arch/i386/lib/delay.c36
-rw-r--r--arch/ia64/config.in13
-rw-r--r--arch/ia64/defconfig45
-rw-r--r--arch/m68k/config.in13
-rw-r--r--arch/m68k/defconfig12
-rw-r--r--arch/mips/arc/init.c4
-rw-r--r--arch/mips/config.in15
-rw-r--r--arch/mips/defconfig20
-rw-r--r--arch/mips/defconfig-ip2220
-rw-r--r--arch/mips/kernel/irixelf.c31
-rw-r--r--arch/mips/kernel/syscalls.h4
-rw-r--r--arch/mips64/config.in15
-rw-r--r--arch/mips64/defconfig21
-rw-r--r--arch/mips64/defconfig-ip2721
-rw-r--r--arch/mips64/kernel/scall_64.S4
-rw-r--r--arch/mips64/kernel/scall_o32.S4
-rw-r--r--arch/ppc/config.in13
-rw-r--r--arch/ppc/defconfig62
-rw-r--r--arch/sh/config.in13
-rw-r--r--arch/sh/defconfig25
-rw-r--r--arch/sparc/boot/piggyback.c19
-rw-r--r--arch/sparc/config.in23
-rw-r--r--arch/sparc/defconfig6
-rw-r--r--arch/sparc/kernel/sys_solaris.c2
-rw-r--r--arch/sparc/kernel/sys_sunos.c53
-rw-r--r--arch/sparc/kernel/systbls.S6
-rw-r--r--arch/sparc64/config.in41
-rw-r--r--arch/sparc64/defconfig80
-rw-r--r--arch/sparc64/kernel/binfmt_aout32.c48
-rw-r--r--arch/sparc64/kernel/ioctl32.c12
-rw-r--r--arch/sparc64/kernel/sys_sparc32.c13
-rw-r--r--arch/sparc64/kernel/sys_sunos32.c52
-rw-r--r--arch/sparc64/kernel/systbls.S8
-rw-r--r--arch/sparc64/solaris/misc.c7
-rw-r--r--arch/sparc64/solaris/systbl.S4
68 files changed, 2126 insertions, 1477 deletions
diff --git a/arch/alpha/config.in b/arch/alpha/config.in
index 6e760c917..df7ae01ca 100644
--- a/arch/alpha/config.in
+++ b/arch/alpha/config.in
@@ -223,6 +223,19 @@ if [ "$CONFIG_NET" = "y" ]; then
fi
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/alpha/defconfig b/arch/alpha/defconfig
index cc244e560..c4752a216 100644
--- a/arch/alpha/defconfig
+++ b/arch/alpha/defconfig
@@ -70,12 +70,6 @@ CONFIG_BINFMT_EM86=y
# Block devices
#
CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
# CONFIG_BLK_CPQ_DA is not set
#
@@ -89,8 +83,6 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_DAC960 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
#
# Networking options
@@ -123,6 +115,11 @@ CONFIG_SKB_LARGE=y
# CONFIG_ATALK is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 6b4033705..ad8e9423a 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -121,6 +121,11 @@ MACHINE = ebsa110
ARCHDIR = ebsa110
endif
+ifeq ($(CONFIG_ARCH_CLPS7500),y)
+MACHINE = clps7500
+ARCHDIR = cl7500
+endif
+
ifeq ($(CONFIG_FOOTBRIDGE),y)
MACHINE = footbridge
ARCHDIR = ebsa285
@@ -135,6 +140,11 @@ MACHINE = nexuspci
ARCHDIR = nexuspci
endif
+ifeq ($(CONFIG_ARCH_SHARK),y)
+MACHINE = shark
+ARCHDIR = shark
+endif
+
ifeq ($(CONFIG_ARCH_SA1100),y)
MACHINE = sa1100
ARCHDIR = sa1100
@@ -160,6 +170,11 @@ DRIVERS += drivers/acorn/net/acorn-net.a
DRIVERS += drivers/acorn/scsi/acorn-scsi.a
endif
+ifeq ($(CONFIG_ARCH_CLPS7500),y)
+SUBDIRS += drivers/acorn/char
+DRIVERS += drivers/acorn/char/acorn-char.o
+endif
+
MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
# The following is a hack to get 'constants.h' up
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index fca3e8c92..37d79da39 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -25,6 +25,10 @@ ifeq ($(CONFIG_ARCH_RPC),y)
ZTEXTADDR = 0x10008000
endif
+ifeq ($(CONFIG_ARCH_CLPS7500),y)
+ZTEXTADDR = 0x10008000
+endif
+
ifeq ($(CONFIG_ARCH_EBSA110),y)
ZTEXTADDR = 0x00008000
endif
@@ -39,7 +43,6 @@ endif
ifeq ($(CONFIG_ARCH_NEXUSPCI),y)
HEAD = head-nexuspci.o
-OBJS += $(TOPDIR)/arch/arm/lib/ll_char_wr_scc.o
ZTEXTADDR = 0x40200000
ZRELADDR = 0x40008000
endif
diff --git a/arch/arm/config.in b/arch/arm/config.in
index 4c7a5fe19..ff4f954df 100644
--- a/arch/arm/config.in
+++ b/arch/arm/config.in
@@ -37,6 +37,7 @@ if [ "$CONFIG_HOST_FOOTBRIDGE" = "y" ]; then
bool ' Include support for EBSA285' CONFIG_ARCH_EBSA285
bool ' Include support for CATS' CONFIG_CATS
bool ' Include support for NetWinder' CONFIG_ARCH_NETWINDER
+ bool ' Include support for Compaq Personal Server' CONFIG_PERSONAL_SERVER
fi
if [ "$CONFIG_ADDIN_FOOTBRIDGE" = "y" ]; then
@@ -170,6 +171,7 @@ source drivers/parport/Config.in
if [ "$CONFIG_ARCH_EBSA110" = "y" -o \
"$CONFIG_ARCH_SA1100" = "y" -o \
"$CONFIG_ARCH_NETWINDER" = "y" -o \
+ "$CONFIG_PERSONAL_SERVER" = "y" -o \
"$CONFIG_CATS" = "y" ]; then
string 'Initial kernel command string' CONFIG_CMDLINE
fi
@@ -254,6 +256,19 @@ fi
# endmenu
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support?' CONFIG_SCSI
diff --git a/arch/arm/defconfig b/arch/arm/defconfig
index e43a8d2a9..45c89eeb3 100644
--- a/arch/arm/defconfig
+++ b/arch/arm/defconfig
@@ -87,46 +87,6 @@ CONFIG_ISAPNP=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# 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_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_SL82C105=y
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_CPQ_DA is not set
#
@@ -172,8 +132,6 @@ 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
#
# Character devices
@@ -509,6 +467,54 @@ CONFIG_SLIP_MODE_SLIP6=y
# CONFIG_NET_PCMCIA is not set
#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_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_PCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+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_CMD64X 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_BURST is not set
+# CONFIG_PDC202XX_MASTER is not set
+# CONFIG_BLK_DEV_TRM290 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_DEV_IDE_MODES=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
# CONFIG_SCSI is not set
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index 3920edade..c454c1350 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -8,71 +8,55 @@
HEAD_OBJ = head-$(PROCESSOR).o
ENTRY_OBJ = entry-$(PROCESSOR).o
-O_TARGET := kernel.o
-O_OBJS := $(ENTRY_OBJ) ioport.o irq.o process.o ptrace.o \
- semaphore.o setup.o signal.o sys_arm.o time.o traps.o
-
ifeq ($(CONFIG_ISA_DMA),y)
ISA_DMA_OBJS += dma-isa.o
endif
-O_OBJS_arc = dma-arc.o iic.o fiq.o time-acorn.o oldlatches.o
-O_OBJS_a5k = dma-a5k.o iic.o fiq.o time-acorn.o
-O_OBJS_rpc = dma-rpc.o iic.o fiq.o time-acorn.o
+O_OBJS_arc = dma-arc.o oldlatches.o
+O_OBJS_a5k = dma-a5k.o
+O_OBJS_rpc = dma-rpc.o
O_OBJS_ebsa110 = dma-dummy.o
-O_OBJS_footbridge = dma-footbridge.o $(ISA_DMA_OBJS) isa.o
+O_OBJS_footbridge = dma.o dma-footbridge.o $(ISA_DMA_OBJS) hw-footbridge.o isa.o
O_OBJS_nexuspci = dma-dummy.o
O_OBJS_sa1100 = dma-dummy.o fiq.o
-OX_OBJS_arc = dma.o
-OX_OBJS_a5k = dma.o
-OX_OBJS_rpc = dma.o
-OX_OBJS_ebsa110 =
-OX_OBJS_footbridge= dma.o hw-footbridge.o
-OX_OBJS_nexuspci =
-OX_OBJS_sa1100 =
+O_TARGET := kernel.o
-all: kernel.o $(HEAD_OBJ) init_task.o
+# Object file lists.
-O_OBJS += $(O_OBJS_$(MACHINE))
+obj-y := arch.o $(ENTRY_OBJ) ioport.o irq.o process.o ptrace.o \
+ semaphore.o setup.o signal.o sys_arm.o time.o traps.o \
+ $(O_OBJS_$(MACHINE))
+obj-m :=
+obj-n :=
+obj- :=
-ifeq ($(CONFIG_DEBUG_LL),y)
- O_OBJS += debug-$(PROCESSOR).o
-endif
+export-objs := armksyms.o dma.o ecard.o hw-footbridge.o leds-$(MACHINE).o
-ifeq ($(CONFIG_MODULES),y)
- OX_OBJS = armksyms.o
-endif
+obj-$(CONFIG_ARCH_ACORN) += dma.o ecard.o iic.o fiq.o time-acorn.o
+obj-$(CONFIG_DEBUG_LL) += debug-$(PROCESSOR).o
+obj-$(CONFIG_MODULES) += armksyms.o
+obj-$(CONFIG_LEDS) += leds-$(MACHINE).o
+obj-$(CONFIG_ARTHUR) += arthur.o
-ifeq ($(CONFIG_ARCH_ACORN),y)
- OX_OBJS += ecard.o
+ifeq ($(MACHINE),nexuspci)
+ obj-$(CONFIG_PCI) += plx9080.o
+else
+ obj-$(CONFIG_PCI) += bios32.o dec21285.o
endif
-ifeq ($(CONFIG_PCI),y)
- ifeq ($(MACHINE),nexuspci)
- O_OBJS += plx9080.o
- else
- O_OBJS += bios32.o dec21285.o
- endif
-endif
+# Files that are both resident and modular; remove from modular.
-ifeq ($(CONFIG_LEDS),y)
- OX_OBJS += leds-$(MACHINE).o
-endif
+obj-m := $(filter-out $(obj-y), $(obj-m))
-ifeq ($(CONFIG_MODULES),y)
- OX_OBJS += $(OX_OBJS_$(MACHINE))
-else
- O_OBJS += $(OX_OBJS_$(MACHINE))
-endif
+# Translate to Rules.make lists.
-ifeq ($(CONFIG_ARTHUR),y)
- O_OBJS += arthur.o
-else
- ifeq ($(CONFIG_ARTHUR),m)
- M_OBJS += arthur.o
- endif
-endif
+O_OBJS := $(filter-out $(export-objs), $(obj-y))
+OX_OBJS := $(filter $(export-objs), $(obj-y))
+M_OBJS := $(sort $(filter-out $(export-objs), $(obj-m)))
+MX_OBJS := $(sort $(filter $(export-objs), $(obj-m)))
+
+all: kernel.o $(HEAD_OBJ) init_task.o
$(HEAD_OBJ): $(HEAD_OBJ:.o=.S)
$(CC) -D__ASSEMBLY__ $(AFLAGS) -DTEXTADDR=$(TEXTADDR) -traditional -c $(HEAD_OBJ:.o=.S) -o $@
diff --git a/arch/arm/kernel/arch.c b/arch/arm/kernel/arch.c
new file mode 100644
index 000000000..8645497ae
--- /dev/null
+++ b/arch/arm/kernel/arch.c
@@ -0,0 +1,322 @@
+/*
+ * linux/arch/arm/kernel/arch.c
+ *
+ * Architecture specifics
+ */
+#include <linux/config.h>
+#include <linux/tty.h>
+#include <linux/init.h>
+
+#include <asm/elf.h>
+#include <asm/setup.h>
+#include <asm/system.h>
+
+#include "arch.h"
+
+extern unsigned int system_rev;
+extern unsigned int system_serial_low;
+extern unsigned int system_serial_high;
+
+unsigned int vram_size;
+#ifdef CONFIG_ARCH_ACORN
+unsigned int memc_ctrl_reg;
+unsigned int number_mfm_drives;
+#endif
+
+/*
+ * Architecture specific fixups. This is where any
+ * parameters in the params struct are fixed up, or
+ * any additional architecture specific information
+ * is pulled from the params struct.
+ */
+static void __init
+fixup_acorn(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+#ifdef CONFIG_ARCH_ACORN
+ int i;
+
+ if (machine_is_riscpc()) {
+ /*
+ * RiscPC can't handle half-word loads and stores
+ */
+ elf_hwcap &= ~HWCAP_HALF;
+
+ switch (params->u1.s.pages_in_vram) {
+ case 512:
+ vram_size += PAGE_SIZE * 256;
+ case 256:
+ vram_size += PAGE_SIZE * 256;
+ default:
+ break;
+ }
+
+ if (vram_size) {
+ desc->video_start = 0x02000000;
+ desc->video_end = 0x02000000 + vram_size;
+ }
+
+ for (i = 0; i < 4; i++) {
+ mi->bank[i].start = PHYS_OFFSET + (i << 26);
+ mi->bank[i].size =
+ params->u1.s.pages_in_bank[i] *
+ params->u1.s.page_size;
+ }
+ mi->nr_banks = 4;
+ }
+ memc_ctrl_reg = params->u1.s.memc_control_reg;
+ number_mfm_drives = (params->u1.s.adfsdrives >> 3) & 3;
+#endif
+}
+
+static void __init
+fixup_ebsa285(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+ ORIG_X = params->u1.s.video_x;
+ ORIG_Y = params->u1.s.video_y;
+ ORIG_VIDEO_COLS = params->u1.s.video_num_cols;
+ ORIG_VIDEO_LINES = params->u1.s.video_num_rows;
+}
+
+/*
+ * Older NeTTroms either do not provide a parameters
+ * page, or they don't supply correct information in
+ * the parameter page.
+ */
+static void __init
+fixup_netwinder(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+ if (params->u1.s.nr_pages != 0x2000 &&
+ params->u1.s.nr_pages != 0x4000) {
+ printk(KERN_WARNING "Warning: bad NeTTrom parameters "
+ "detected, using defaults\n");
+
+ params->u1.s.nr_pages = 0x2000; /* 32MB */
+ params->u1.s.ramdisk_size = 0;
+ params->u1.s.flags = FLAG_READONLY;
+ params->u1.s.initrd_start = 0;
+ params->u1.s.initrd_size = 0;
+ params->u1.s.rd_start = 0;
+ }
+}
+
+/*
+ * CATS uses soft-reboot by default, since
+ * hard reboots fail on early boards.
+ */
+static void __init
+fixup_cats(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+ ORIG_VIDEO_LINES = 25;
+ ORIG_VIDEO_POINTS = 16;
+ ORIG_Y = 24;
+}
+
+static void __init
+fixup_coebsa285(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+#if 0
+ extern unsigned long boot_memory_end;
+ extern char boot_command_line[];
+
+ mi->nr_banks = 1;
+ mi->bank[0].start = PHYS_OFFSET;
+ mi->bank[0].size = boot_memory_end;
+
+ *cmdline = boot_command_line;
+#endif
+}
+
+static void __init
+fixup_sa1100(struct machine_desc *desc, struct param_struct *params,
+ char **cmdline, struct meminfo *mi)
+{
+#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;
+ }
+ mi->bank[i].start = mem_desc[i].phys_start;
+ mi->bank[i].size = mem_desc[i].length;
+ }
+ mi->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
+}
+
+#define NO_PARAMS 0
+#define NO_VIDEO 0, 0
+
+/*
+ * This is the list of all architectures supported by
+ * this kernel. This should be integrated with the list
+ * in head-armv.S.
+ */
+static struct machine_desc machine_desc[] __attribute__ ((__section__ (".arch.info"))) = {
+ {
+ MACH_TYPE_EBSA110,
+ "EBSA110", /* RMK */
+ 0x00000400,
+ NO_VIDEO,
+ 1, 0, 1, 1, 1,
+ NULL
+ }, {
+ MACH_TYPE_RISCPC,
+ "Acorn-RiscPC", /* RMK */
+ 0x10000100,
+ NO_VIDEO,
+ 1, 1, 0, 0, 0,
+ fixup_acorn
+ }, {
+ 2,
+ "unknown",
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_NEXUSPCI,
+ "FTV/PCI", /* Philip Blundell */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_EBSA285,
+ "EBSA285", /* RMK */
+ 0x00000100,
+ 0x000a0000, 0x000bffff,
+ 0, 0, 0, 0, 0,
+ fixup_ebsa285
+ }, {
+ MACH_TYPE_NETWINDER,
+ "Rebel-NetWinder", /* RMK */
+ 0x00000100,
+ 0x000a0000, 0x000bffff,
+ 1, 0, 1, 0, 0,
+ fixup_netwinder
+ }, {
+ MACH_TYPE_CATS,
+ "Chalice-CATS", /* Philip Blundell */
+ NO_PARAMS,
+ 0x000a0000, 0x000bffff,
+ 0, 0, 0, 0, 1,
+ fixup_cats
+ }, {
+ MACH_TYPE_TBOX,
+ "unknown-TBOX", /* Philip Blundell */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_CO285,
+ "co-EBSA285", /* Mark van Doesburg */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ fixup_coebsa285
+ }, {
+ MACH_TYPE_CLPS7110,
+ "CL-PS7110", /* Werner Almesberger */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_ARCHIMEDES,
+ "Acorn-Archimedes",/* RMK/DAG */
+ 0x0207c000,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ fixup_acorn
+ }, {
+ MACH_TYPE_A5K,
+ "Acorn-A5000", /* RMK/PB */
+ 0x0207c000,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ fixup_acorn
+ }, {
+ MACH_TYPE_ETOILE,
+ "Etoile", /* Alex de Vries */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_LACIE_NAS,
+ "LaCie_NAS", /* Benjamin Herrenschmidt */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_CLPS7500,
+ "CL-PS7500", /* Philip Blundell */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_SHARK,
+ "Shark", /* Alexander Schulz */
+ NO_PARAMS,
+ 0x06000000, 0x06000000+0x001fffff,
+ 0, 0, 0, 0, 0,
+ NULL
+ }, {
+ MACH_TYPE_SA1100,
+ "SA1100-based", /* Nicolas Pitre */
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ fixup_sa1100
+ }, {
+ MACH_TYPE_PERSONAL_SERVER,
+ "Compaq Personal Server",
+ NO_PARAMS,
+ NO_VIDEO,
+ 0, 0, 0, 0, 0,
+ NULL
+ }
+};
diff --git a/arch/arm/kernel/arch.h b/arch/arm/kernel/arch.h
new file mode 100644
index 000000000..b7635b11e
--- /dev/null
+++ b/arch/arm/kernel/arch.h
@@ -0,0 +1,15 @@
+struct machine_desc {
+ unsigned int nr; /* architecture number */
+ 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 */
+ void (*fixup)(struct machine_desc *,
+ struct param_struct *, char **,
+ struct meminfo *);
+};
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index c445daeee..5a1b4ed31 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -8,6 +8,7 @@
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/in6.h>
+#include <linux/vt_kern.h>
#include <asm/byteorder.h>
#include <asm/elf.h>
@@ -83,6 +84,8 @@ EXPORT_SYMBOL(fpundefinstr);
EXPORT_SYMBOL(ret_from_exception);
#endif
+EXPORT_SYMBOL(kd_mksound);
+
/* platform dependent support */
EXPORT_SYMBOL(dump_thread);
EXPORT_SYMBOL(dump_fpu);
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index 7a1b57c22..1b0a064d0 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -222,8 +222,9 @@ static u8 __init no_swizzle(struct pci_dev *dev, u8 *pin)
return 0;
}
-#ifdef CONFIG_FOOTBRIDGE
/* ebsa285 host-specific stuff */
+
+#ifdef CONFIG_ARCH_EBSA285
static int irqmap_ebsa285[] __initdata = { IRQ_IN1, IRQ_IN0, IRQ_PCI, IRQ_IN3 };
static u8 __init ebsa285_swizzle(struct pci_dev *dev, u8 *pin)
@@ -251,7 +252,9 @@ static struct hw_pci ebsa285_pci __initdata = {
ebsa285_swizzle,
ebsa285_map_irq
};
+#endif
+#ifdef CONFIG_CATS
/* cats host-specific stuff */
static int irqmap_cats[] __initdata = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 };
@@ -277,7 +280,9 @@ static struct hw_pci cats_pci __initdata = {
no_swizzle,
cats_map_irq
};
+#endif
+#ifdef CONFIG_ARCH_NETWINDER
/* netwinder host-specific stuff */
static int __init netwinder_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
{
@@ -318,6 +323,41 @@ static struct hw_pci netwinder_pci __initdata = {
};
#endif
+#ifdef CONFIG_PERSONAL_SERVER
+static int irqmap_personal_server[] __initdata = {
+ IRQ_IN0, IRQ_IN1, IRQ_IN2, IRQ_IN3, 0, 0, 0,
+ IRQ_DOORBELLHOST, IRQ_DMA1, IRQ_DMA2, IRQ_PCI
+};
+
+static int __init personal_server_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{
+ unsigned char line;
+
+ pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &line);
+
+ if (line > 0x40 && line <= 0x5f) {
+ /* line corresponds to the bit controlling this interrupt
+ * in the footbridge. Ignore the first 8 interrupt bits,
+ * look up the rest in the map. IN0 is bit number 8
+ */
+ return irqmap_personal_server[(line & 0x1f) - 8];
+ } else if (line == 0) {
+ /* no interrupt */
+ return 0;
+ } else
+ return irqmap_personal_server[(line - 1) & 3];
+}
+
+static struct hw_pci personal_server_pci __initdata = {
+ dc21285_init,
+ 0x9000,
+ 0x00100000,
+ no_swizzle,
+ personal_server_map_irq
+};
+
+#endif
+
#ifdef CONFIG_ARCH_NEXUSPCI
/*
* Owing to a PCB cockup, issue A backplanes are wired thus:
@@ -352,17 +392,38 @@ 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;
+ do {
+#ifdef CONFIG_ARCH_EBSA285
+ if (machine_is_ebsa285()) {
+ hw_pci = &ebsa285_pci;
+ break;
+ }
+#endif
+#ifdef CONFIG_CATS
+ if (machine_is_cats()) {
+ hw_pci = &cats_pci;
+ break;
+ }
+#endif
+#ifdef CONFIG_ARCH_NETWINDER
+ if (machine_is_netwinder()) {
+ hw_pci = &netwinder_pci;
+ break;
+ }
+#endif
+#ifdef CONFIG_PERSONAL_SERVER
+ if (machine_is_personal_server()) {
+ hw_pci = &personal_server_pci;
+ break;
+ }
#endif
#ifdef CONFIG_ARCH_NEXUSPCI
- hw_pci = &ftv_pci;
+ if (machine_is_nexuspci()) {
+ hw_pci = &ftv_pci;
+ break;
+ }
#endif
+ } while (0);
if (hw_pci == NULL)
return;
diff --git a/arch/arm/kernel/head-armv.S b/arch/arm/kernel/head-armv.S
index 35e71a4a9..27a280b8b 100644
--- a/arch/arm/kernel/head-armv.S
+++ b/arch/arm/kernel/head-armv.S
@@ -22,6 +22,7 @@
.equ SYMBOL_NAME(swapper_pg_dir), TEXTADDR - 0x8000 + SWAPPER_PGDIR_OFFSET
.section ".text.init",#alloc,#execinstr
+ .type stext, #function
ENTRY(stext)
ENTRY(_stext)
@@ -311,6 +312,7 @@ __lookup_architecture_type:
* required for debugging information to be shown to the user.
* paging_init() does the real page table initialisation.
*/
+ .type __arch_types_start, #object
@ 0x00 - DEC EBSA110
__arch_types_start:
.long 0
@@ -398,15 +400,15 @@ __arch_types_start:
@ 0x0e - CL-PS7500
.long 0
- .long 0
- .long 0
- .long 0
+ .long 0x10000000
+ .long 0x03000000
+ .long 0xe0000000
- @ 0x0f - Shark
- .long 0
- .long 0
- .long 0
+ @ 0x0f - Digital Shark (DNARD)
.long 0
+ .long 0x08000000
+ .long 0x40000000
+ .long 0xe0000000
@ 0x10 - SA1100
.long 0
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
index 0692d1a6c..0ace4c898 100644
--- a/arch/arm/kernel/ptrace.c
+++ b/arch/arm/kernel/ptrace.c
@@ -521,6 +521,48 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
/* give it a chance to run. */
ret = 0;
goto out;
+
+ case PTRACE_GETREGS:
+ { /* Get all gp regs from the child. */
+ unsigned char *stack;
+
+ ret = 0;
+ stack = (unsigned char *)((unsigned long)child + 8192 - sizeof(struct pt_regs));
+ if (copy_to_user((void *)data, stack,
+ sizeof(struct pt_regs)))
+ ret = -EFAULT;
+
+ goto out;
+ };
+
+ case PTRACE_SETREGS:
+ {
+ /* Set all gp regs in the child. */
+ unsigned char *stack;
+
+ ret = 0;
+ stack = (unsigned char *)((unsigned long)child + 8192 - sizeof(struct pt_regs));
+ if (copy_from_user(stack, (void *)data,
+ sizeof(struct pt_regs)))
+ ret = -EFAULT;
+ goto out;
+ };
+
+ case PTRACE_GETFPREGS:
+ /* Get the child FPU state. */
+ ret = 0;
+ if (copy_to_user((void *)data, &child->thread.fpstate,
+ sizeof(struct user_fp)))
+ ret = -EFAULT;
+ goto out;
+
+ case PTRACE_SETFPREGS:
+ /* Set the child FPU state. */
+ ret = 0;
+ if (copy_from_user(&child->thread.fpstate, (void *)data,
+ sizeof(struct user_fp)))
+ ret = -EFAULT;
+ goto out;
case PTRACE_DETACH: /* detach a process that was attached. */
ret = -EIO;
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 5815529aa..6a3429bdd 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -1,13 +1,12 @@
/*
* linux/arch/arm/kernel/setup.c
*
- * Copyright (C) 1995-1999 Russell King
+ * Copyright (C) 1995-2000 Russell King
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/stddef.h>
-#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/utsname.h>
@@ -23,6 +22,8 @@
#include <asm/setup.h>
#include <asm/system.h>
+#include "arch.h"
+
#ifndef MEM_SIZE
#define MEM_SIZE (16*1024*1024)
#endif
@@ -31,6 +32,7 @@
#define CONFIG_CMDLINE ""
#endif
+extern void paging_init(struct meminfo *);
extern void reboot_setup(char *str);
extern void disable_hlt(void);
extern int root_mountflags;
@@ -38,33 +40,11 @@ extern int _stext, _text, _etext, _edata, _end;
unsigned int processor_id;
unsigned int __machine_arch_type;
-unsigned int vram_size;
unsigned int system_rev;
unsigned int system_serial_low;
unsigned int system_serial_high;
unsigned int elf_hwcap;
-#ifdef CONFIG_ARCH_ACORN
-unsigned int memc_ctrl_reg;
-unsigned int number_mfm_drives;
-#endif
-
-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 */
- void (*fixup)(struct machine_desc *,
- struct param_struct *, char **);
-};
-
#ifdef MULTI_CPU
struct processor processor;
#endif
@@ -156,6 +136,33 @@ static void __init setup_processor(void)
cpu_proc_init();
}
+static struct machine_desc * __init setup_architecture(unsigned int nr)
+{
+ extern struct machine_desc __arch_info_begin, __arch_info_end;
+ struct machine_desc *list;
+
+ /*
+ * locate architecture in the list of supported architectures.
+ */
+ for (list = &__arch_info_begin; list < &__arch_info_end; list++)
+ if (list->nr == nr)
+ break;
+
+ /*
+ * If the architecture type is not recognised, then we
+ * can co nothing...
+ */
+ if (list >= &__arch_info_end) {
+ printk("Architecture configuration botched (nr %d), unable "
+ "to continue.\n", nr);
+ while (1);
+ }
+
+ printk("Architecture: %s\n", list->name);
+
+ return list;
+}
+
static unsigned long __init memparse(char *ptr, char **retptr)
{
unsigned long ret = simple_strtoul(ptr, retptr, 0);
@@ -180,7 +187,7 @@ static unsigned long __init memparse(char *ptr, char **retptr)
* are "size[KkMm]"
*/
static void __init
-parse_cmdline(char **cmdline_p, char *from)
+parse_cmdline(struct meminfo *mi, char **cmdline_p, char *from)
{
char c = ' ', *to = command_line;
int usermem = 0, len = 0;
@@ -198,7 +205,7 @@ parse_cmdline(char **cmdline_p, char *from)
*/
if (usermem == 0) {
usermem = 1;
- meminfo.nr_banks = 0;
+ mi->nr_banks = 0;
}
start = PHYS_OFFSET;
@@ -206,9 +213,9 @@ parse_cmdline(char **cmdline_p, char *from)
if (*from == '@')
start = memparse(from + 1, &from);
- meminfo.bank[meminfo.nr_banks].start = start;
- meminfo.bank[meminfo.nr_banks].size = size;
- meminfo.nr_banks += 1;
+ mi->bank[mi->nr_banks].start = start;
+ mi->bank[mi->nr_banks].size = size;
+ mi->nr_banks += 1;
}
c = *from++;
if (!c)
@@ -265,7 +272,8 @@ static void __init setup_initrd(unsigned int start, unsigned int size)
#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)
-static unsigned int __init find_bootmap_pfn(unsigned int bootmap_pages)
+static unsigned int __init
+find_bootmap_pfn(struct meminfo *mi, unsigned int bootmap_pages)
{
unsigned int start_pfn, bank, bootmap_pfn;
@@ -278,25 +286,25 @@ 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) {
+ if (__pa(initrd_end) > mi->end) {
printk ("initrd extends beyond end of memory "
"(0x%08lx > 0x%08lx) - disabling initrd\n",
- __pa(initrd_end), meminfo.end);
+ __pa(initrd_end), mi->end);
initrd_start = 0;
initrd_end = 0;
}
}
#endif
- for (bank = 0; bank < meminfo.nr_banks; bank ++) {
+ for (bank = 0; bank < mi->nr_banks; bank ++) {
unsigned int start, end;
- if (meminfo.bank[bank].size == 0)
+ if (mi->bank[bank].size == 0)
continue;
- start = O_PFN_UP(meminfo.bank[bank].start);
- end = O_PFN_DOWN(meminfo.bank[bank].size +
- meminfo.bank[bank].start);
+ start = O_PFN_UP(mi->bank[bank].start);
+ end = O_PFN_DOWN(mi->bank[bank].size +
+ mi->bank[bank].start);
if (end < start_pfn)
continue;
@@ -322,7 +330,7 @@ static unsigned int __init find_bootmap_pfn(unsigned int bootmap_pages)
/*
* Initialise the bootmem allocator.
*/
-static void __init setup_bootmem(void)
+static void __init setup_bootmem(struct meminfo *mi)
{
unsigned int end_pfn, start_pfn, bootmap_pages, bootmap_pfn;
unsigned int i;
@@ -330,21 +338,21 @@ static void __init setup_bootmem(void)
/*
* Calculate the physical address of the top of memory.
*/
- meminfo.end = 0;
- for (i = 0; i < meminfo.nr_banks; i++) {
+ mi->end = 0;
+ for (i = 0; i < mi->nr_banks; i++) {
unsigned long end;
- if (meminfo.bank[i].size != 0) {
- end = meminfo.bank[i].start + meminfo.bank[i].size;
- if (meminfo.end < end)
- meminfo.end = end;
+ if (mi->bank[i].size != 0) {
+ end = mi->bank[i].start + mi->bank[i].size;
+ if (mi->end < end)
+ mi->end = end;
}
}
start_pfn = O_PFN_UP(PHYS_OFFSET);
- end_pfn = O_PFN_DOWN(meminfo.end);
+ end_pfn = O_PFN_DOWN(mi->end);
bootmap_pages = bootmem_bootmap_pages(end_pfn - start_pfn);
- bootmap_pfn = find_bootmap_pfn(bootmap_pages);
+ bootmap_pfn = find_bootmap_pfn(mi, bootmap_pages);
/*
* Initialise the boot-time allocator
@@ -354,10 +362,10 @@ static void __init setup_bootmem(void)
/*
* Register all available RAM with the bootmem allocator.
*/
- for (i = 0; i < meminfo.nr_banks; i++)
- if (meminfo.bank[i].size)
- free_bootmem(O_PFN_UP(meminfo.bank[i].start),
- PFN_SIZE(meminfo.bank[i].size));
+ for (i = 0; i < mi->nr_banks; i++)
+ if (mi->bank[i].size)
+ free_bootmem(O_PFN_UP(mi->bank[i].start),
+ PFN_SIZE(mi->bank[i].size));
/*
* Register the reserved regions with bootmem
@@ -379,7 +387,8 @@ static void __init setup_bootmem(void)
#endif
}
-static void __init request_standard_resources(struct machine_desc *mdesc)
+static void __init
+request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc)
{
struct resource *res;
int i;
@@ -389,14 +398,14 @@ static void __init request_standard_resources(struct machine_desc *mdesc)
kernel_data.start = __virt_to_bus(init_mm.end_code);
kernel_data.end = __virt_to_bus(init_mm.brk - 1);
- for (i = 0; i < meminfo.nr_banks; i++) {
+ for (i = 0; i < mi->nr_banks; i++) {
unsigned long virt_start, virt_end;
- if (meminfo.bank[i].size == 0)
+ if (mi->bank[i].size == 0)
continue;
- virt_start = __phys_to_virt(meminfo.bank[i].start);
- virt_end = virt_start + meminfo.bank[i].size - 1;
+ virt_start = __phys_to_virt(mi->bank[i].start);
+ virt_end = virt_start + mi->bank[i].size - 1;
res = alloc_bootmem_low(sizeof(*res));
res->name = "System RAM";
@@ -432,270 +441,15 @@ static void __init request_standard_resources(struct machine_desc *mdesc)
request_resource(&ioport_resource, &lp2);
}
-/*
- * Architecture specific fixups. This is where any
- * parameters in the params struct are fixed up, or
- * any additional architecture specific information
- * is pulled from the params struct.
- */
-static void __init
-fixup_acorn(struct machine_desc *desc, struct param_struct *params,
- char **cmdline)
-{
-#ifdef CONFIG_ARCH_ACORN
- int i;
-
- if (machine_is_riscpc()) {
- /*
- * RiscPC can't handle half-word loads and stores
- */
- elf_hwcap &= ~HWCAP_HALF;
-
- switch (params->u1.s.pages_in_vram) {
- case 512:
- vram_size += PAGE_SIZE * 256;
- case 256:
- vram_size += PAGE_SIZE * 256;
- default:
- break;
- }
-
- if (vram_size) {
- desc->video_start = 0x02000000;
- desc->video_end = 0x02000000 + vram_size;
- }
-
- for (i = 0; i < 4; i++) {
- meminfo.bank[i].start = PHYS_OFFSET + (i << 26);
- meminfo.bank[i].size =
- params->u1.s.pages_in_bank[i] *
- params->u1.s.page_size;
- }
- meminfo.nr_banks = 4;
- }
- memc_ctrl_reg = params->u1.s.memc_control_reg;
- number_mfm_drives = (params->u1.s.adfsdrives >> 3) & 3;
-#endif
-}
-
-static void __init
-fixup_ebsa285(struct machine_desc *desc, struct param_struct *params,
- char **cmdline)
-{
- ORIG_X = params->u1.s.video_x;
- ORIG_Y = params->u1.s.video_y;
- ORIG_VIDEO_COLS = params->u1.s.video_num_cols;
- ORIG_VIDEO_LINES = params->u1.s.video_num_rows;
-}
-
-/*
- * Older NeTTroms either do not provide a parameters
- * page, or they don't supply correct information in
- * the parameter page.
- */
-static void __init
-fixup_netwinder(struct machine_desc *desc, struct param_struct *params,
- char **cmdline)
-{
- if (params->u1.s.nr_pages != 0x2000 &&
- params->u1.s.nr_pages != 0x4000) {
- printk(KERN_WARNING "Warning: bad NeTTrom parameters "
- "detected, using defaults\n");
-
- params->u1.s.nr_pages = 0x2000; /* 32MB */
- params->u1.s.ramdisk_size = 0;
- params->u1.s.flags = FLAG_READONLY;
- params->u1.s.initrd_start = 0;
- params->u1.s.initrd_size = 0;
- params->u1.s.rd_start = 0;
- }
-}
-
-/*
- * CATS uses soft-reboot by default, since
- * hard reboots fail on early boards.
- */
-static void __init
-fixup_cats(struct machine_desc *desc, struct param_struct *params,
- char **cmdline)
-{
- ORIG_VIDEO_LINES = 25;
- ORIG_VIDEO_POINTS = 16;
- ORIG_Y = 24;
-}
-
-static void __init
-fixup_coebsa285(struct machine_desc *desc, struct param_struct *params,
- char **cmdline)
-{
-#if 0
- 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;
-
- *cmdline = boot_command_line;
-#endif
-}
-
-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
-}
-
-#define NO_PARAMS 0
-#define NO_VIDEO 0, 0
-
-/*
- * This is the list of all architectures supported by
- * this kernel. This should be integrated with the list
- * in head-armv.S.
- */
-static struct machine_desc machine_desc[] __initdata = {
- { "EBSA110", /* RMK */
- 0x00000400,
- NO_VIDEO,
- 1, 0, 1, 1, 1,
- NULL
- }, { "Acorn-RiscPC", /* RMK */
- 0x10000100,
- NO_VIDEO,
- 1, 1, 0, 0, 0,
- fixup_acorn
- }, { "unknown",
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "FTV/PCI", /* Philip Blundell */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "EBSA285", /* RMK */
- 0x00000100,
- 0x000a0000, 0x000bffff,
- 0, 0, 0, 0, 0,
- fixup_ebsa285
- }, { "Rebel-NetWinder", /* RMK */
- 0x00000100,
- 0x000a0000, 0x000bffff,
- 1, 0, 1, 0, 0,
- fixup_netwinder
- }, { "Chalice-CATS", /* Philip Blundell */
- NO_PARAMS,
- 0x000a0000, 0x000bffff,
- 0, 0, 0, 0, 1,
- fixup_cats
- }, { "unknown-TBOX", /* Philip Blundell */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "co-EBSA285", /* Mark van Doesburg */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- fixup_coebsa285
- }, { "CL-PS7110", /* Werner Almesberger */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "Acorn-Archimedes",/* RMK/DAG */
- 0x0207c000,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- fixup_acorn
- }, { "Acorn-A5000", /* RMK/PB */
- 0x0207c000,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- fixup_acorn
- }, { "Etoile", /* Alex de Vries */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "LaCie_NAS", /* Benjamin Herrenschmidt */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "CL-PS7500", /* Philip Blundell */
- NO_PARAMS,
- NO_VIDEO,
- 0, 0, 0, 0, 0,
- NULL
- }, { "Shark", /* Alexander Schulz */
- NO_PARAMS,
- /* 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
- }
-};
-
void __init setup_arch(char **cmdline_p)
{
struct param_struct *params = NULL;
struct machine_desc *mdesc;
+ struct meminfo meminfo;
char *from = default_command_line;
+ memset(&meminfo, 0, sizeof(meminfo));
+
#if defined(CONFIG_ARCH_ARC)
__machine_arch_type = MACH_TYPE_ARCHIMEDES;
#elif defined(CONFIG_ARCH_A5K)
@@ -706,7 +460,7 @@ void __init setup_arch(char **cmdline_p)
ROOT_DEV = MKDEV(0, 255);
- mdesc = machine_desc + machine_arch_type;
+ mdesc = setup_architecture(machine_arch_type);
machine_name = mdesc->name;
if (mdesc->broken_hlt)
@@ -719,7 +473,7 @@ void __init setup_arch(char **cmdline_p)
params = phys_to_virt(mdesc->param_offset);
if (mdesc->fixup)
- mdesc->fixup(mdesc, params, &from);
+ mdesc->fixup(mdesc, params, &from, &meminfo);
if (params && params->u1.s.page_size != PAGE_SIZE) {
printk(KERN_WARNING "Warning: bad configuration page, "
@@ -763,11 +517,11 @@ void __init setup_arch(char **cmdline_p)
memcpy(saved_command_line, from, COMMAND_LINE_SIZE);
saved_command_line[COMMAND_LINE_SIZE-1] = '\0';
- parse_cmdline(cmdline_p, from);
- setup_bootmem();
- request_standard_resources(mdesc);
+ parse_cmdline(&meminfo, cmdline_p, from);
+ setup_bootmem(&meminfo);
+ request_standard_resources(&meminfo, mdesc);
- paging_init();
+ paging_init(&meminfo);
#ifdef CONFIG_VT
#if defined(CONFIG_VGA_CONSOLE)
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 5046a3377..510a38451 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -14,37 +14,25 @@ L_OBJS := changebit.o csumipv6.o csumpartial.o csumpartialcopy.o \
O_TARGET := lib.o
O_OBJS := backtrace.o delay.o
+L_OBJS_arc := io-acorn.o
+L_OBJS_a5k := io-acorn.o floppydma.o
+L_OBJS_rpc := io-acorn.o floppydma.o
+L_OBJS_clps7500 := io-acorn.o
+L_OBJS_ebsa110 := io-ebsa110.o
+L_OBJS_footbridge := io-footbridge.o
+L_OBJS_nexuspci := io-footbridge.o
+L_OBJS_sa1100 := io-footbridge.o
+L_OBJS_shark := io-shark.o
+
ifeq ($(PROCESSOR),armo)
L_OBJS += uaccess-armo.o
endif
-ifdef CONFIG_ARCH_ACORN
- L_OBJS += io-acorn.o
- ifdef CONFIG_ARCH_A5K
- L_OBJS += floppydma.o
- endif
- ifdef CONFIG_ARCH_RPC
- L_OBJS += floppydma.o
- endif
-endif
-
-ifeq ($(MACHINE),ebsa110)
- L_OBJS += io-ebsa110.o
-else
+ifneq ($(MACHINE),ebsa110)
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
+L_OBJS += $(L_OBJS_$(MACHINE))
include $(TOPDIR)/Rules.make
diff --git a/arch/arm/lib/io-shark.c b/arch/arm/lib/io-shark.c
new file mode 100644
index 000000000..41595bc6f
--- /dev/null
+++ b/arch/arm/lib/io-shark.c
@@ -0,0 +1,79 @@
+/*
+ * linux/arch/arm/lib/io-shark.c
+ *
+ * by Alexander.Schulz@stud.uni-karlsruhe.de
+ *
+ * derived from:
+ * linux/arch/arm/lib/io-ebsa.S
+ * Copyright (C) 1995, 1996 Russell King
+ */
+#include <linux/kernel.h>
+
+#include <asm/io.h>
+
+void print_warning(void)
+{
+ printk(KERN_WARNING "ins?/outs? not implemented on this architecture\n");
+}
+
+void insl(unsigned int port, void *to, int len)
+{
+ print_warning();
+}
+
+void insb(unsigned int port, void *to, int len)
+{
+ print_warning();
+}
+
+void outsl(unsigned int port, const void *from, int len)
+{
+ print_warning();
+}
+
+void outsb(unsigned int port, const void *from, int len)
+{
+ print_warning();
+}
+
+/* these should be in assembler again */
+
+/*
+ * Purpose: read a block of data from a hardware register to memory.
+ * Proto : insw(int from_port, void *to, int len_in_words);
+ * Proto : inswb(int from_port, void *to, int len_in_bytes);
+ * Notes : increment to
+ */
+
+void insw(unsigned int port, void *to, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ ((unsigned short *) to)[i] = inw(port);
+}
+
+void inswb(unsigned int port, void *to, int len)
+{
+ insw(port, to, len >> 2);
+}
+
+/*
+ * Purpose: write a block of data from memory to a hardware register.
+ * Proto : outsw(int to_reg, void *from, int len_in_words);
+ * Proto : outswb(int to_reg, void *from, int len_in_bytes);
+ * Notes : increments from
+ */
+
+void outsw(unsigned int port, const void *from, int len)
+{
+ int i;
+
+ for (i = 0; i < len; i++)
+ outw(((unsigned short *) from)[i], port);
+}
+
+void outswb(unsigned int port, const void *from, int len)
+{
+ outsw(port, from, len >> 2);
+}
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index c58e66647..e7b8c8bb9 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -33,6 +33,7 @@
#include "map.h"
static unsigned long totalram_pages;
+struct meminfo meminfo;
pgd_t swapper_pg_dir[PTRS_PER_PGD];
/*
@@ -160,12 +161,14 @@ void show_mem(void)
/*
* paging_init() sets up the page tables...
*/
-void __init paging_init(void)
+void __init paging_init(struct meminfo *mi)
{
void *zero_page, *bad_page, *bad_table;
unsigned long zone_size[MAX_NR_ZONES];
int i;
+ memcpy(&meminfo, mi, sizeof(meminfo));
+
#ifdef CONFIG_CPU_32
#define TABLE_OFFSET (PTRS_PER_PTE)
#else
@@ -197,12 +200,12 @@ void __init paging_init(void)
* 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) {
+ for (i = 0; i < mi->nr_banks; i++) {
+ if (mi->bank[i].size) {
unsigned int end;
- end = (meminfo.bank[i].start - PHYS_OFFSET +
- meminfo.bank[i].size) >> PAGE_SHIFT;
+ end = (mi->bank[i].start - PHYS_OFFSET +
+ mi->bank[i].size) >> PAGE_SHIFT;
if (zone_size[0] < end)
zone_size[0] = end;
}
@@ -328,24 +331,6 @@ void free_initmem(void)
(unsigned long)(&__init_end),
"init");
-#ifdef CONFIG_FOOTBRIDGE
- {
- extern int __netwinder_begin, __netwinder_end,
- __ebsa285_begin, __ebsa285_end;
-
- if (!machine_is_netwinder())
- free_area((unsigned long)(&__netwinder_begin),
- (unsigned long)(&__netwinder_end),
- "netwinder");
-
- if (!machine_is_ebsa285() && !machine_is_cats() &&
- !machine_is_co285())
- free_area((unsigned long)(&__ebsa285_begin),
- (unsigned long)(&__ebsa285_end),
- "ebsa285/cats");
- }
-#endif
-
printk("\n");
}
diff --git a/arch/arm/mm/proc-arm6,7.S b/arch/arm/mm/proc-arm6,7.S
index c6c776acf..9814d2a9c 100644
--- a/arch/arm/mm/proc-arm6,7.S
+++ b/arch/arm/mm/proc-arm6,7.S
@@ -107,19 +107,45 @@ msg: .ascii "DA*%p=%p\n\0"
ENTRY(cpu_arm6_data_abort)
ldr r4, [r0] @ read instruction causing problem
mov r2, r4, lsr #19 @ r2 b1 = L
-Ldata_simple:
+ and r1, r4, #14 << 24
and r2, r2, #2 @ check read/write bit
- mrc p15, 0, r0, c6, c0, 0 @ get FAR
+ teq r1, #4 << 23
+ bne Ldata_simple
+
+
+Ldata_ldmstm: tst r4, #1 << 21 @ check writeback bit
+ beq Ldata_simple
+ mov r7, #0x11
+ orr r7, r7, r7, lsl #8
+ and r0, r4, r7
+ and r1, r4, r7, lsl #1
+ add r0, r0, r1, lsr #1
+ and r1, r4, r7, lsl #2
+ add r0, r0, r1, lsr #2
+ and r1, r4, r7, lsl #3
+ add r0, r0, r1, lsr #3
+ add r0, r0, r0, lsr #8
+ add r0, r0, r0, lsr #4
+ and r7, r0, #15 @ r7 = no. of registers to transfer.
+ and r5, r4, #15 << 16 @ Get Rn
+ ldr r0, [sp, r5, lsr #14] @ Get register
+ tst r4, #1 << 23 @ U bit
+ subne r7, r0, r7, lsl #2
+ addeq r7, r0, r7, lsl #2 @ Do correction (signed)
+Ldata_saver7: str r7, [sp, r5, lsr #14] @ Put register
+Ldata_simple: mrc p15, 0, r0, c6, c0, 0 @ get FAR
mrc p15, 0, r1, c5, c0, 0 @ get FSR
- and r1, r1, #15
+ and r1, r1, #255
mov pc, lr
ENTRY(cpu_arm7_data_abort)
ldr r4, [r0] @ read instruction causing problem
mov r2, r4, lsr #19 @ r2 b1 = L
and r1, r4, #15 << 24
+ and r2, r2, #2 @ check read/write bit
add pc, pc, r1, lsr #22 @ Now branch to the relevent processing routine
movs pc, lr
+
b Ldata_unknown
b Ldata_unknown
b Ldata_unknown
@@ -141,106 +167,24 @@ Ldata_unknown: @ Part of jumptable
mov r2, r3
b baddataabort
-Ldata_ldmstm: tst r4, #1 << 21 @ check writeback bit
- beq Ldata_simple
-
- mov r7, #0x11
- orr r7, r7, r7, lsl #8
- and r0, r4, r7
- and r1, r4, r7, lsl #1
- add r0, r0, r1, lsr #1
- and r1, r4, r7, lsl #2
- add r0, r0, r1, lsr #2
- and r1, r4, r7, lsl #3
- add r0, r0, r1, lsr #3
- add r0, r0, r0, lsr #8
- add r0, r0, r0, lsr #4
- and r7, r0, #15 @ r7 = no. of registers to transfer.
- and r5, r4, #15 << 16 @ Get Rn
- ldr r0, [sp, r5, lsr #14] @ Get register
- eor r6, r4, r4, lsl #2
- tst r6, #1 << 23 @ Check inc/dec ^ writeback
- rsbeq r7, r7, #0
- add r7, r0, r7, lsl #2 @ Do correction (signed)
- str r7, [sp, r5, lsr #14] @ Put register
-
-Ldata_lateldrpostconst:
- movs r1, r4, lsl #20 @ Get offset
- beq Ldata_simple @ if offset is zero, no effect
- and r5, r4, #15 << 16 @ Get Rn
- ldr r0, [sp, r5, lsr #14]
- tst r4, #1 << 23 @ U bit
- subne r0, r0, r1, lsr #20
- addeq r0, r0, r1, lsr #20
- str r0, [sp, r5, lsr #14] @ Put register
- b Ldata_simple
Ldata_lateldrpreconst:
tst r4, #1 << 21 @ check writeback bit
- movnes r1, r4, lsl #20 @ Get offset
+ beq Ldata_simple
+Ldata_lateldrpostconst:
+ movs r1, r4, lsl #20 @ Get offset
beq Ldata_simple
and r5, r4, #15 << 16 @ Get Rn
ldr r0, [sp, r5, lsr #14]
tst r4, #1 << 23 @ U bit
- subne r0, r0, r1, lsr #20
- addeq r0, r0, r1, lsr #20
- str r0, [sp, r5, lsr #14] @ Put register
- b Ldata_simple
-
-Ldata_lateldrpostreg:
- and r5, r4, #15
- ldr r1, [sp, r5, lsl #2] @ Get Rm
- mov r3, r4, lsr #7
- ands r3, r3, #31
- and r6, r4, #0x70
- orreq r6, r6, #8
- add pc, pc, r6
- mov r0, r0
-
- mov r1, r1, lsl r3 @ 0: LSL #!0
- b 1f
- b 1f @ 1: LSL #0
- mov r0, r0
- b 1f @ 2: MUL?
- mov r0, r0
- b 1f @ 3: MUL?
- mov r0, r0
- mov r1, r1, lsr r3 @ 4: LSR #!0
- b 1f
- mov r1, r1, lsr #32 @ 5: LSR #32
- b 1f
- b 1f @ 6: MUL?
- mov r0, r0
- b 1f @ 7: MUL?
- mov r0, r0
- mov r1, r1, asr r3 @ 8: ASR #!0
- b 1f
- mov r1, r1, asr #32 @ 9: ASR #32
- b 1f
- b 1f @ A: MUL?
- mov r0, r0
- b 1f @ B: MUL?
- mov r0, r0
- mov r1, r1, ror r3 @ C: ROR #!0
- b 1f
- mov r1, r1, rrx @ D: RRX
- b 1f
- mov r0, r0 @ E: MUL?
- mov r0, r0
- mov r0, r0 @ F: MUL?
-
-
-1: and r5, r4, #15 << 16 @ Get Rn
- ldr r0, [sp, r5, lsr #14]
- tst r4, #1 << 23 @ U bit
- subne r0, r0, r1
- addeq r0, r0, r1
- str r0, [sp, r5, lsr #14] @ Put register
- b Ldata_simple
+ subne r7, r0, r1, lsr #20
+ addeq r7, r0, r1, lsr #20
+ b Ldata_saver7
Ldata_lateldrprereg:
tst r4, #1 << 21 @ check writeback bit
beq Ldata_simple
+Ldata_lateldrpostreg:
and r5, r4, #15
ldr r1, [sp, r5, lsl #2] @ Get Rm
mov r3, r4, lsr #7
@@ -286,10 +230,9 @@ Ldata_lateldrprereg:
1: and r5, r4, #15 << 16 @ Get Rn
ldr r0, [sp, r5, lsr #14]
tst r4, #1 << 23 @ U bit
- subne r0, r0, r1
- addeq r0, r0, r1
- str r0, [sp, r5, lsr #14] @ Put register
- b Ldata_simple
+ subne r7, r0, r1
+ addeq r7, r0, r1
+ b Ldata_saver7
/*
* Function: arm6_7_check_bugs (void)
diff --git a/arch/arm/vmlinux-armo.lds.in b/arch/arm/vmlinux-armo.lds.in
index 94c155232..9d5ee058d 100644
--- a/arch/arm/vmlinux-armo.lds.in
+++ b/arch/arm/vmlinux-armo.lds.in
@@ -6,76 +6,89 @@ OUTPUT_ARCH(arm)
ENTRY(stext)
SECTIONS
{
- . = TEXTADDR;
+ . = TEXTADDR;
- __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(32768);
- __init_end = .;
-
- .init.task : {
- *(.init.task)
- }
+ .init : {
+ __init_begin = .; /* Init code and data */
+ *(.text.init)
+ __proc_info_begin = .;
+ *(.proc.info)
+ __proc_info_end = .;
+ __arch_info_begin = .;
+ *(.arch.info)
+ __arch_info_end = .;
+ *(.data.init)
+ . = ALIGN(16);
+ __setup_start = .;
+ *(.setup.init)
+ __setup_end = .;
+ __initcall_start = .;
+ *(.initcall.init)
+ __initcall_end = .;
+ . = ALIGN(32768);
+ __init_end = .;
+ }
- /DISCARD/ : { /* Exit code and data */
- *(.text.exit)
- *(.data.exit)
- }
+ .init.task : {
+ *(.init.task)
+ }
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
+ /DISCARD/ : { /* Exit code and data */
+ *(.text.exit)
+ *(.data.exit)
}
- .text.lock : { *(.text.lock) } /* out-of-line lock text */
- .rodata : { *(.rodata) }
- .kstrtab : { *(.kstrtab) }
+ .text : {
+ _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 = .;
- . = ALIGN(16); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) }
- __stop___ex_table = .;
+ __start___ksymtab = .; /* Kernel symbol table */
+ *(__ksymtab)
+ __stop___ksymtab = .;
- __start___ksymtab = .; /* Kernel symbol table */
- __ksymtab : { *(__ksymtab) }
- __stop___ksymtab = .;
+ *(.got) /* Global offset table */
+
+ _etext = .; /* End of text section */
+ }
- .got : { *(.got) } /* Global offset table */
+ .data : {
+ /*
+ * The cacheline aligned data
+ */
+ . = ALIGN(32);
+ *(.data.cacheline_aligned)
- _etext = .; /* End of text section */
+ /*
+ * and the usual data section
+ */
+ *(.data)
+ CONSTRUCTORS
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
+ _edata = .;
}
- _edata = .; /* End of data section */
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss)
+ .bss : {
+ __bss_start = .; /* BSS */
+ *(.bss)
+ _end = . ;
}
- _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) }
+ /* 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) }
}
diff --git a/arch/arm/vmlinux-armv.lds.in b/arch/arm/vmlinux-armv.lds.in
index d2a79ca9d..1476ba939 100644
--- a/arch/arm/vmlinux-armv.lds.in
+++ b/arch/arm/vmlinux-armv.lds.in
@@ -13,6 +13,9 @@ SECTIONS
__proc_info_begin = .;
*(.proc.info)
__proc_info_end = .;
+ __arch_info_begin = .;
+ *(.arch.info)
+ __arch_info_end = .;
*(.data.init)
. = ALIGN(16);
__setup_start = .;
@@ -25,6 +28,11 @@ SECTIONS
__init_end = .;
}
+ /DISCARD/ : { /* Exit code and data */
+ *(.text.exit)
+ *(.data.exit)
+ }
+
.text : { /* Real text segment */
_text = .; /* Text and read-only data */
*(.text)
diff --git a/arch/i386/boot/tools/build.c b/arch/i386/boot/tools/build.c
index bf16abf24..2149dcf51 100644
--- a/arch/i386/boot/tools/build.c
+++ b/arch/i386/boot/tools/build.c
@@ -150,9 +150,13 @@ int main(int argc, char ** argv)
sz = sb.st_size;
fprintf (stderr, "System is %d kB\n", sz/1024);
sys_size = (sz + 15) / 16;
- if (sys_size > (is_big_kernel ? 0xffff : DEF_SYSSIZE))
+ /* 0x28000*16 = 2.5 MB, conservative estimate for the current maximum */
+ if (sys_size > (is_big_kernel ? 0x28000 : DEF_SYSSIZE))
die("System is too big. Try using %smodules.",
is_big_kernel ? "" : "bzImage or ");
+ if (sys_size > 0xffff)
+ fprintf(stderr,"warning: kernel is too big for standalone boot "
+ "from floppy\n");
while (sz > 0) {
int l, n;
diff --git a/arch/i386/config.in b/arch/i386/config.in
index e1ba021e1..2a083ad09 100644
--- a/arch/i386/config.in
+++ b/arch/i386/config.in
@@ -175,6 +175,19 @@ fi
source drivers/telephony/Config.in
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/i386/defconfig b/arch/i386/defconfig
index 813a2ecea..0f3f5cb8a 100644
--- a/arch/i386/defconfig
+++ b/arch/i386/defconfig
@@ -93,36 +93,10 @@ CONFIG_ISAPNP=y
# Block devices
#
CONFIG_BLK_DEV_FD=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDECD=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=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_IDEDMA_PCI is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_AEC6210 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
#
# Additional Block Devices
@@ -131,11 +105,6 @@ CONFIG_IDEPCI_SHARE_IRQ=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_PARIDE is not set
-CONFIG_BLK_DEV_IDE_MODES=y
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -175,6 +144,73 @@ CONFIG_SKB_LARGE=y
# CONFIG_PHONE_IXJ is not set
#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=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=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_IDEDMA_PCI is not set
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_IDEDMA_PCI_AUTO is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_IDEDMA_PCI_EXPERIMENTAL is not set
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
+# CONFIG_BLK_DEV_AEC6210 is not set
+# CONFIG_AEC6210_TUNING is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD7409 is not set
+# CONFIG_AMD7409_OVERRIDE is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_CMD64X_RAID is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_HPT366_FIP is not set
+# CONFIG_HPT366_MODE3 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_PIIX_TUNING is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_PDC202XX is not set
+# CONFIG_PDC202XX_BURST is not set
+# CONFIG_PDC202XX_MASTER is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDE_MODES=y
+
+#
# SCSI support
#
CONFIG_SCSI=y
@@ -339,7 +375,6 @@ CONFIG_PCMCIA_PCNET=y
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_PCMCIA_3C575 is not set
-# CONFIG_PCMCIA_TULIP is not set
CONFIG_NET_PCMCIA_RADIO=y
CONFIG_PCMCIA_RAYCS=y
# CONFIG_PCMCIA_NETWAVE is not set
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile
index 6671bb35b..525bb2c07 100644
--- a/arch/i386/kernel/Makefile
+++ b/arch/i386/kernel/Makefile
@@ -29,7 +29,7 @@ endif
endif
ifdef CONFIG_MCA
-O_OBJS += mca.o
+OX_OBJS += mca.o
endif
ifeq ($(CONFIG_MTRR),y)
diff --git a/arch/i386/kernel/acpi.c b/arch/i386/kernel/acpi.c
index d95bbe6b1..8efa2832a 100644
--- a/arch/i386/kernel/acpi.c
+++ b/arch/i386/kernel/acpi.c
@@ -1,7 +1,7 @@
/*
* acpi.c - Linux ACPI driver
*
- * Copyright (C) 1999 Andrew Henroid
+ * Copyright (C) 1999-2000 Andrew Henroid
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -55,6 +55,11 @@ static int acpi_do_ulong(ctl_table *ctl,
struct file *file,
void *buffer,
size_t *len);
+static int acpi_do_table(ctl_table *ctl,
+ int write,
+ struct file *file,
+ void *buffer,
+ size_t *len);
static int acpi_do_event_reg(ctl_table *ctl,
int write,
struct file *file,
@@ -73,12 +78,6 @@ static int acpi_do_sleep(ctl_table *ctl,
static struct ctl_table_header *acpi_sysctl = NULL;
-static struct acpi_facp *acpi_facp = NULL;
-static int acpi_fake_facp = 0;
-static struct acpi_facs *acpi_facs = NULL;
-static unsigned long acpi_facp_addr = 0;
-static unsigned long acpi_dsdt_addr = 0;
-
// current system sleep state (S0 - S4)
static acpi_sstate_t acpi_sleep_state = ACPI_S0;
// time sleep began
@@ -123,15 +122,28 @@ static unsigned long acpi_slp_typ[] =
ACPI_SLP_TYP_DISABLED /* S5 */
};
+struct acpi_table_info
+{
+ u32 expected_signature;
+ u32 expected_size;
+
+ struct acpi_table *table;
+ size_t size;
+ int mapped;
+};
+
+static struct acpi_table_info acpi_facp
+ = {ACPI_FACP_SIG, sizeof(struct acpi_facp), NULL, 0, 0};
+static struct acpi_table_info acpi_dsdt = {ACPI_DSDT_SIG, 0, NULL, 0, 0};
+static struct acpi_table_info acpi_facs
+ = {ACPI_FACS_SIG, sizeof(struct acpi_facs), NULL, 0, 0};
+static rwlock_t acpi_do_table_lock = RW_LOCK_UNLOCKED;
+
static struct ctl_table acpi_table[] =
{
- {ACPI_FACP, "facp",
- &acpi_facp_addr, sizeof(acpi_facp_addr),
- 0400, NULL, &acpi_do_ulong},
+ {ACPI_FACP, "facp", &acpi_facp, 0, 0644, NULL, &acpi_do_table},
- {ACPI_DSDT, "dsdt",
- &acpi_dsdt_addr, sizeof(acpi_dsdt_addr),
- 0400, NULL, &acpi_do_ulong},
+ {ACPI_DSDT, "dsdt", &acpi_dsdt, 0, 0644, NULL, &acpi_do_table},
{ACPI_PM1_ENABLE, "pm1_enable",
NULL, 0,
@@ -409,6 +421,33 @@ static void acpi_unmap_table(struct acpi_table *table)
}
/*
+ * Initialize an ACPI table
+ */
+static void acpi_init_table(struct acpi_table_info *info,
+ void *data,
+ int mapped)
+{
+ struct acpi_table *table = (struct acpi_table*) data;
+ info->table = table;
+ info->size = (size_t)(table ? table->length:0);
+ info->mapped = mapped;
+}
+
+/*
+ * Destroy an ACPI table
+ */
+static void acpi_destroy_table(struct acpi_table_info *info)
+{
+ if (info->table) {
+ if (info->mapped)
+ acpi_unmap_table(info->table);
+ else
+ kfree(info->table);
+ info->table = NULL;
+ }
+}
+
+/*
* Locate and map ACPI tables
*/
static int __init acpi_find_tables(void)
@@ -458,37 +497,40 @@ static int __init acpi_find_tables(void)
return -ENODEV;
}
// search RSDT for FACP
- acpi_facp = NULL;
+ acpi_facp.table = NULL;
rsdt_entry = (u32 *) (rsdt + 1);
rsdt_entry_count = (int) ((rsdt->length - sizeof(*rsdt)) >> 2);
while (rsdt_entry_count) {
struct acpi_table *dt = acpi_map_table(*rsdt_entry);
if (dt && dt->signature == ACPI_FACP_SIG) {
- acpi_facp = (struct acpi_facp*) dt;
- acpi_facp_addr = *rsdt_entry;
- acpi_dsdt_addr = acpi_facp->dsdt;
+ struct acpi_facp *facp = (struct acpi_facp*) dt;
+ acpi_init_table(&acpi_facp, dt, 1);
+
+ // map DSDT if it exists
+ dt = acpi_map_table(facp->dsdt);
+ if (dt && dt->signature == ACPI_DSDT_SIG)
+ acpi_init_table(&acpi_dsdt, dt, 1);
+ else
+ acpi_unmap_table(dt);
// map FACS if it exists
- if (acpi_facp->facs) {
- dt = acpi_map_table(acpi_facp->facs);
- if (dt && dt->signature == ACPI_FACS_SIG) {
- acpi_facs = (struct acpi_facs*) dt;
- }
- else {
- acpi_unmap_table(dt);
- }
- }
+ dt = acpi_map_table(facp->facs);
+ if (dt && dt->signature == ACPI_FACS_SIG)
+ acpi_init_table(&acpi_facs, dt, 1);
+ else
+ acpi_unmap_table(dt);
}
else {
acpi_unmap_table(dt);
}
+
rsdt_entry++;
rsdt_entry_count--;
}
acpi_unmap_table(rsdt);
- if (!acpi_facp) {
+ if (!acpi_facp.table) {
printk(KERN_ERR "ACPI: missing FACP\n");
return -ENODEV;
}
@@ -500,11 +542,9 @@ static int __init acpi_find_tables(void)
*/
static void acpi_destroy_tables(void)
{
- if (!acpi_fake_facp)
- acpi_unmap_table((struct acpi_table*) acpi_facp);
- else
- kfree(acpi_facp);
- acpi_unmap_table((struct acpi_table*) acpi_facs);
+ acpi_destroy_table(&acpi_facs);
+ acpi_destroy_table(&acpi_dsdt);
+ acpi_destroy_table(&acpi_facp);
}
/*
@@ -512,6 +552,7 @@ static void acpi_destroy_tables(void)
*/
static int __init acpi_init_piix4(struct pci_dev *dev)
{
+ struct acpi_facp *facp;
u32 base;
u16 cmd;
u8 pmregmisc;
@@ -534,33 +575,34 @@ static int __init acpi_init_piix4(struct pci_dev *dev)
printk(KERN_INFO "ACPI: found PIIX4 at 0x%04x\n", base);
- acpi_facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL);
- if (!acpi_facp)
+ facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL);
+ if (!facp)
return -ENOMEM;
- acpi_fake_facp = 1;
- memset(acpi_facp, 0, sizeof(struct acpi_facp));
- acpi_facp->int_model = ACPI_PIIX4_INT_MODEL;
- acpi_facp->sci_int = ACPI_PIIX4_SCI_INT;
- acpi_facp->smi_cmd = ACPI_PIIX4_SMI_CMD;
- acpi_facp->acpi_enable = ACPI_PIIX4_ACPI_ENABLE;
- acpi_facp->acpi_disable = ACPI_PIIX4_ACPI_DISABLE;
- acpi_facp->s4bios_req = ACPI_PIIX4_S4BIOS_REQ;
- acpi_facp->pm1a_evt = base + ACPI_PIIX4_PM1_EVT;
- acpi_facp->pm1a_cnt = base + ACPI_PIIX4_PM1_CNT;
- acpi_facp->pm2_cnt = ACPI_PIIX4_PM2_CNT;
- acpi_facp->pm_tmr = base + ACPI_PIIX4_PM_TMR;
- acpi_facp->gpe0 = base + ACPI_PIIX4_GPE0;
- acpi_facp->pm1_evt_len = ACPI_PIIX4_PM1_EVT_LEN;
- acpi_facp->pm1_cnt_len = ACPI_PIIX4_PM1_CNT_LEN;
- acpi_facp->pm2_cnt_len = ACPI_PIIX4_PM2_CNT_LEN;
- acpi_facp->pm_tm_len = ACPI_PIIX4_PM_TM_LEN;
- acpi_facp->gpe0_len = ACPI_PIIX4_GPE0_LEN;
- acpi_facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT;
- acpi_facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT;
-
- acpi_facp_addr = virt_to_phys(acpi_facp);
- acpi_dsdt_addr = 0;
+ memset(facp, 0, sizeof(struct acpi_facp));
+ facp->hdr.signature = ACPI_FACP_SIG;
+ facp->hdr.length = sizeof(struct acpi_facp);
+ facp->int_model = ACPI_PIIX4_INT_MODEL;
+ facp->sci_int = ACPI_PIIX4_SCI_INT;
+ facp->smi_cmd = ACPI_PIIX4_SMI_CMD;
+ facp->acpi_enable = ACPI_PIIX4_ACPI_ENABLE;
+ facp->acpi_disable = ACPI_PIIX4_ACPI_DISABLE;
+ facp->s4bios_req = ACPI_PIIX4_S4BIOS_REQ;
+ facp->pm1a_evt = base + ACPI_PIIX4_PM1_EVT;
+ facp->pm1a_cnt = base + ACPI_PIIX4_PM1_CNT;
+ facp->pm2_cnt = ACPI_PIIX4_PM2_CNT;
+ facp->pm_tmr = base + ACPI_PIIX4_PM_TMR;
+ facp->gpe0 = base + ACPI_PIIX4_GPE0;
+ facp->pm1_evt_len = ACPI_PIIX4_PM1_EVT_LEN;
+ facp->pm1_cnt_len = ACPI_PIIX4_PM1_CNT_LEN;
+ facp->pm2_cnt_len = ACPI_PIIX4_PM2_CNT_LEN;
+ facp->pm_tm_len = ACPI_PIIX4_PM_TM_LEN;
+ facp->gpe0_len = ACPI_PIIX4_GPE0_LEN;
+ facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT;
+ facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT;
+
+ acpi_init_table(&acpi_facp, facp, 0);
+ acpi_init_table(&acpi_dsdt, NULL, 0);
acpi_p_blk = base + ACPI_PIIX4_P_BLK;
@@ -572,6 +614,7 @@ static int __init acpi_init_piix4(struct pci_dev *dev)
*/
static int __init acpi_init_via(struct pci_dev *dev)
{
+ struct acpi_facp *facp;
u32 base;
u8 tmp, irq;
@@ -594,39 +637,39 @@ static int __init acpi_init_via(struct pci_dev *dev)
printk(KERN_INFO "ACPI: found %s at 0x%04x\n", dev->name, base);
- acpi_facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL);
- if (!acpi_facp)
+ facp = kmalloc(sizeof(struct acpi_facp), GFP_KERNEL);
+ if (!facp)
return -ENOMEM;
- acpi_fake_facp = 1;
- memset(acpi_facp, 0, sizeof(struct acpi_facp));
-
- acpi_facp->int_model = ACPI_VIA_INT_MODEL;
- acpi_facp->sci_int = irq;
- acpi_facp->smi_cmd = base + ACPI_VIA_SMI_CMD;
- acpi_facp->acpi_enable = ACPI_VIA_ACPI_ENABLE;
- acpi_facp->acpi_disable = ACPI_VIA_ACPI_DISABLE;
- acpi_facp->pm1a_evt = base + ACPI_VIA_PM1_EVT;
- acpi_facp->pm1a_cnt = base + ACPI_VIA_PM1_CNT;
- acpi_facp->pm_tmr = base + ACPI_VIA_PM_TMR;
- acpi_facp->gpe0 = base + ACPI_VIA_GPE0;
-
- acpi_facp->pm1_evt_len = ACPI_VIA_PM1_EVT_LEN;
- acpi_facp->pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN;
- acpi_facp->pm_tm_len = ACPI_VIA_PM_TM_LEN;
- acpi_facp->gpe0_len = ACPI_VIA_GPE0_LEN;
- acpi_facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT;
- acpi_facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT;
-
- acpi_facp->duty_offset = ACPI_VIA_DUTY_OFFSET;
- acpi_facp->duty_width = ACPI_VIA_DUTY_WIDTH;
-
- acpi_facp->day_alarm = ACPI_VIA_DAY_ALARM;
- acpi_facp->mon_alarm = ACPI_VIA_MON_ALARM;
- acpi_facp->century = ACPI_VIA_CENTURY;
-
- acpi_facp_addr = virt_to_phys(acpi_facp);
- acpi_dsdt_addr = 0;
+ memset(facp, 0, sizeof(struct acpi_facp));
+ facp->hdr.signature = ACPI_FACP_SIG;
+ facp->hdr.length = sizeof(struct acpi_facp);
+ facp->int_model = ACPI_VIA_INT_MODEL;
+ facp->sci_int = irq;
+ facp->smi_cmd = base + ACPI_VIA_SMI_CMD;
+ facp->acpi_enable = ACPI_VIA_ACPI_ENABLE;
+ facp->acpi_disable = ACPI_VIA_ACPI_DISABLE;
+ facp->pm1a_evt = base + ACPI_VIA_PM1_EVT;
+ facp->pm1a_cnt = base + ACPI_VIA_PM1_CNT;
+ facp->pm_tmr = base + ACPI_VIA_PM_TMR;
+ facp->gpe0 = base + ACPI_VIA_GPE0;
+
+ facp->pm1_evt_len = ACPI_VIA_PM1_EVT_LEN;
+ facp->pm1_cnt_len = ACPI_VIA_PM1_CNT_LEN;
+ facp->pm_tm_len = ACPI_VIA_PM_TM_LEN;
+ facp->gpe0_len = ACPI_VIA_GPE0_LEN;
+ facp->p_lvl2_lat = (__u16) ACPI_INFINITE_LAT;
+ facp->p_lvl3_lat = (__u16) ACPI_INFINITE_LAT;
+
+ facp->duty_offset = ACPI_VIA_DUTY_OFFSET;
+ facp->duty_width = ACPI_VIA_DUTY_WIDTH;
+
+ facp->day_alarm = ACPI_VIA_DAY_ALARM;
+ facp->mon_alarm = ACPI_VIA_MON_ALARM;
+ facp->century = ACPI_VIA_CENTURY;
+
+ acpi_init_table(&acpi_facp, facp, 0);
+ acpi_init_table(&acpi_dsdt, NULL, 0);
acpi_p_blk = base + ACPI_VIA_P_BLK;
@@ -693,29 +736,27 @@ static int __init acpi_find_chipset(void)
*/
static void acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
{
+ struct acpi_facp *facp = (struct acpi_facp*) acpi_facp.table;
u32 pm1_status, gpe_status, gpe_level, gpe_edge;
unsigned long flags;
// detect and clear fixed events
- pm1_status = (acpi_read_pm1_status(acpi_facp)
- & acpi_read_pm1_enable(acpi_facp));
- acpi_write_pm1_status(acpi_facp, pm1_status);
+ pm1_status = (acpi_read_pm1_status(facp) & acpi_read_pm1_enable(facp));
+ acpi_write_pm1_status(facp, pm1_status);
// detect and handle general-purpose events
- gpe_status = (acpi_read_gpe_status(acpi_facp)
- & acpi_read_gpe_enable(acpi_facp));
+ gpe_status = (acpi_read_gpe_status(facp) & acpi_read_gpe_enable(facp));
gpe_level = gpe_status & acpi_gpe_level;
if (gpe_level) {
// disable level-triggered events (re-enabled after handling)
- acpi_write_gpe_enable(
- acpi_facp,
- acpi_read_gpe_enable(acpi_facp) & ~gpe_level);
+ acpi_write_gpe_enable(facp,
+ acpi_read_gpe_enable(facp) & ~gpe_level);
}
gpe_edge = gpe_status & ~gpe_level;
if (gpe_edge) {
// clear edge-triggered events
- while (acpi_read_gpe_status(acpi_facp) & gpe_edge)
- acpi_write_gpe_status(acpi_facp, gpe_edge);
+ while (acpi_read_gpe_status(facp) & gpe_edge)
+ acpi_write_gpe_status(facp, gpe_edge);
}
// notify process waiting on /dev/acpi
@@ -804,7 +845,7 @@ static void wake_on_busmaster(struct acpi_facp *facp)
static void acpi_idle(void)
{
static int sleep_level = 1;
- struct acpi_facp *facp = acpi_facp;
+ struct acpi_facp *facp = (struct acpi_facp*) acpi_facp.table;
if (!facp || !facp->pm_tmr || !acpi_p_blk)
goto not_initialized;
@@ -973,6 +1014,7 @@ static void acpi_enter_sx(acpi_sstate_t state)
{
unsigned long slp_typ = acpi_slp_typ[(int) state];
if (slp_typ != ACPI_SLP_TYP_DISABLED) {
+ struct acpi_facp *facp = (struct acpi_facp*) acpi_facp.table;
u16 typa, typb, value;
// bits 8-15 are SLP_TYPa, bits 0-7 are SLP_TYPb
@@ -987,20 +1029,20 @@ static void acpi_enter_sx(acpi_sstate_t state)
acpi_sleep_state = state;
// clear wake status
- acpi_write_pm1_status(acpi_facp, ACPI_WAK);
+ acpi_write_pm1_status(facp, ACPI_WAK);
// set SLP_TYPa/b and SLP_EN
- if (acpi_facp->pm1a_cnt) {
- value = inw(acpi_facp->pm1a_cnt) & ~ACPI_SLP_TYP_MASK;
- outw(value | typa | ACPI_SLP_EN, acpi_facp->pm1a_cnt);
+ if (facp->pm1a_cnt) {
+ value = inw(facp->pm1a_cnt) & ~ACPI_SLP_TYP_MASK;
+ outw(value | typa | ACPI_SLP_EN, facp->pm1a_cnt);
}
- if (acpi_facp->pm1b_cnt) {
- value = inw(acpi_facp->pm1b_cnt) & ~ACPI_SLP_TYP_MASK;
- outw(value | typb | ACPI_SLP_EN, acpi_facp->pm1b_cnt);
+ if (facp->pm1b_cnt) {
+ value = inw(facp->pm1b_cnt) & ~ACPI_SLP_TYP_MASK;
+ outw(value | typb | ACPI_SLP_EN, facp->pm1b_cnt);
}
// wait until S1 is entered
- while (!(acpi_read_pm1_status(acpi_facp) & ACPI_WAK)) ;
+ while (!(acpi_read_pm1_status(facp) & ACPI_WAK)) ;
// finished sleeping, update system time
acpi_update_clock();
acpi_enter_dx(ACPI_D0);
@@ -1115,6 +1157,120 @@ static int acpi_do_ulong(ctl_table *ctl,
}
/*
+ * Determine if user buffer contains a valid table
+ */
+static int acpi_verify_table(void *buffer,
+ size_t size,
+ struct acpi_table_info *info)
+{
+ if (size < sizeof(struct acpi_table))
+ return -EINVAL;
+ else if (verify_area(VERIFY_READ, buffer, size))
+ return -EFAULT;
+ else {
+ struct acpi_table hdr;
+ size_t table_size;
+
+ copy_from_user(&hdr, buffer, sizeof(hdr));
+ table_size = (size_t) hdr.length;
+ if (hdr.signature != info->expected_signature
+ || table_size < size
+ || (info->expected_size
+ && table_size != info->expected_size))
+ return -EINVAL;
+ }
+ return 0;
+}
+
+/*
+ * Examine/replace an ACPI table
+ */
+static int acpi_do_table(ctl_table *ctl,
+ int write,
+ struct file *file,
+ void *buffer,
+ size_t *len)
+{
+ struct acpi_table_info *info = (struct acpi_table_info *) ctl->data;
+ u8 *data = NULL;
+ size_t size = 0;
+ int error = 0;
+
+ if (!info) {
+ *len = 0;
+ return 0;
+ }
+
+ if (!write) {
+ // table read
+ read_lock(&acpi_do_table_lock);
+ if (info->table && file->f_pos < info->size) {
+ data = (u8*) info->table + file->f_pos;
+ size = info->size - file->f_pos;
+ if (size > *len)
+ size = *len;
+ if (copy_to_user(buffer, data, size))
+ error = -EFAULT;
+ }
+ read_unlock(&acpi_do_table_lock);
+ }
+ else if (file->f_pos) {
+ // table body replacement
+ write_lock(&acpi_do_table_lock);
+ if (info->table && file->f_pos < info->size) {
+ data = (u8*) info->table + file->f_pos;
+ size = info->size - file->f_pos;
+ if (size > *len)
+ size = *len;
+ if (copy_from_user(data, buffer, size))
+ error = -EFAULT;
+ }
+ write_unlock(&acpi_do_table_lock);
+ }
+ else {
+ // table header/body replacement
+ struct acpi_table hdr;
+ size_t table_size;
+
+ // make sure we are being given a valid table
+ error = acpi_verify_table(buffer, *len, info);
+ if (error)
+ return error;
+ copy_from_user(&hdr, buffer, sizeof(hdr));
+ table_size = (size_t) hdr.length;
+
+ write_lock(&acpi_do_table_lock);
+
+ data = (u8*) info->table;
+ size = *len;
+
+ if (!data || info->mapped || table_size != info->size) {
+ // allocate a (different sized) table
+ data = kmalloc(table_size, GFP_KERNEL);
+ if (data) {
+ memset(data, 0, table_size);
+ memcpy(data, &hdr, sizeof(hdr));
+ acpi_destroy_table(info);
+ acpi_init_table(info, data, 0);
+ }
+ else
+ error = -ENOMEM;
+ }
+ if (data)
+ copy_from_user(data, buffer, size);
+
+ write_unlock(&acpi_do_table_lock);
+ }
+
+ if (error)
+ return error;
+
+ *len = size;
+ file->f_pos += size;
+ return 0;
+}
+
+/*
* Examine/modify event register
*/
static int acpi_do_event_reg(ctl_table *ctl,
@@ -1123,6 +1279,7 @@ static int acpi_do_event_reg(ctl_table *ctl,
void *buffer,
size_t *len)
{
+ struct acpi_facp *facp = (struct acpi_facp*) acpi_facp.table;
char str[2 * sizeof(u32) + 4], *strend;
u32 val, enabling;
int size;
@@ -1136,10 +1293,10 @@ static int acpi_do_event_reg(ctl_table *ctl,
val = 0;
switch (ctl->ctl_name) {
case ACPI_PM1_ENABLE:
- val = acpi_read_pm1_enable(acpi_facp);
+ val = acpi_read_pm1_enable(facp);
break;
case ACPI_GPE_ENABLE:
- val = acpi_read_gpe_enable(acpi_facp);
+ val = acpi_read_gpe_enable(facp);
break;
case ACPI_GPE_LEVEL:
val = acpi_gpe_level;
@@ -1170,42 +1327,41 @@ static int acpi_do_event_reg(ctl_table *ctl,
switch (ctl->ctl_name) {
case ACPI_PM1_ENABLE:
// clear previously disabled events
- enabling = (val
- & ~acpi_read_pm1_enable(acpi_facp));
- acpi_write_pm1_status(acpi_facp, enabling);
+ enabling = (val & ~acpi_read_pm1_enable(facp));
+ acpi_write_pm1_status(facp, enabling);
if (val) {
// enable ACPI unless it is already
- if (!acpi_is_enabled(acpi_facp))
- acpi_enable(acpi_facp);
+ if (!acpi_is_enabled(facp))
+ acpi_enable(facp);
}
- else if (!acpi_read_gpe_enable(acpi_facp)) {
+ else if (!acpi_read_gpe_enable(facp)) {
// disable ACPI unless it is already
- if (acpi_is_enabled(acpi_facp))
- acpi_disable(acpi_facp);
+ if (acpi_is_enabled(facp))
+ acpi_disable(facp);
}
- acpi_write_pm1_enable(acpi_facp, val);
+ acpi_write_pm1_enable(facp, val);
break;
case ACPI_GPE_ENABLE:
// clear previously disabled events
enabling = (val
- & ~acpi_read_gpe_enable(acpi_facp));
- while (acpi_read_gpe_status(acpi_facp) & enabling)
- acpi_write_gpe_status(acpi_facp, enabling);
+ & ~acpi_read_gpe_enable(facp));
+ while (acpi_read_gpe_status(facp) & enabling)
+ acpi_write_gpe_status(facp, enabling);
if (val) {
// enable ACPI unless it is already
- if (!acpi_is_enabled(acpi_facp))
- acpi_enable(acpi_facp);
+ if (!acpi_is_enabled(facp))
+ acpi_enable(facp);
}
- else if (!acpi_read_pm1_enable(acpi_facp)) {
+ else if (!acpi_read_pm1_enable(facp)) {
// disable ACPI unless it is already
- if (acpi_is_enabled(acpi_facp))
- acpi_disable(acpi_facp);
+ if (acpi_is_enabled(facp))
+ acpi_disable(facp);
}
- acpi_write_gpe_enable(acpi_facp, val);
+ acpi_write_gpe_enable(facp, val);
break;
case ACPI_GPE_LEVEL:
acpi_gpe_level = val;
@@ -1301,8 +1457,9 @@ static int acpi_do_sleep(ctl_table *ctl,
*/
static int __init acpi_init(void)
{
- switch(acpi_enabled)
- {
+ struct acpi_facp *facp = NULL;
+
+ switch (acpi_enabled) {
case ACPI_ENABLED:
if (acpi_find_tables() && acpi_find_chipset())
return -ENODEV;
@@ -1319,37 +1476,39 @@ static int __init acpi_init(void)
return -ENODEV;
}
+ facp = (struct acpi_facp*) acpi_facp.table;
+
/*
* Internally we always keep latencies in timer
* ticks, which is simpler and more consistent (what is
* an uS to us?). Besides, that gives people more
* control in the /proc interfaces.
*/
- if (acpi_facp->p_lvl2_lat
- && acpi_facp->p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) {
- acpi_p_lvl2_lat = ACPI_uS_TO_TMR_TICKS(acpi_facp->p_lvl2_lat);
+ if (facp->p_lvl2_lat
+ && facp->p_lvl2_lat <= ACPI_MAX_P_LVL2_LAT) {
+ acpi_p_lvl2_lat = ACPI_uS_TO_TMR_TICKS(facp->p_lvl2_lat);
acpi_enter_lvl2_lat = ACPI_uS_TO_TMR_TICKS(ACPI_TMR_HZ / 1000);
}
- if (acpi_facp->p_lvl3_lat
- && acpi_facp->p_lvl3_lat <= ACPI_MAX_P_LVL3_LAT) {
- acpi_p_lvl3_lat = ACPI_uS_TO_TMR_TICKS(acpi_facp->p_lvl3_lat);
+ if (facp->p_lvl3_lat
+ && facp->p_lvl3_lat <= ACPI_MAX_P_LVL3_LAT) {
+ acpi_p_lvl3_lat = ACPI_uS_TO_TMR_TICKS(facp->p_lvl3_lat);
acpi_enter_lvl3_lat
- = ACPI_uS_TO_TMR_TICKS(acpi_facp->p_lvl3_lat * 5);
+ = ACPI_uS_TO_TMR_TICKS(facp->p_lvl3_lat * 5);
}
- if (acpi_claim_ioports(acpi_facp)) {
+ if (acpi_claim_ioports(facp)) {
printk(KERN_ERR "ACPI: I/O port allocation failed\n");
goto err_out;
}
- if (acpi_facp->sci_int
- && request_irq(acpi_facp->sci_int,
+ if (facp->sci_int
+ && request_irq(facp->sci_int,
acpi_irq,
SA_INTERRUPT | SA_SHIRQ,
"acpi",
- acpi_facp)) {
+ &acpi_facp)) {
printk(KERN_ERR "ACPI: SCI (IRQ%d) allocation failed\n",
- acpi_facp->sci_int);
+ facp->sci_int);
goto err_out;
}
@@ -1369,7 +1528,7 @@ static int __init acpi_init(void)
return 0;
#endif
- if (acpi_facp->pm_tmr)
+ if (facp->pm_tmr)
pm_idle = acpi_idle;
return 0;
@@ -1387,16 +1546,18 @@ err_out:
*/
static void __exit acpi_exit(void)
{
+ struct acpi_facp *facp = (struct acpi_facp*) acpi_facp.table;
+
pm_idle = NULL;
pm_active = 0;
pm_power_off = NULL;
unregister_sysctl_table(acpi_sysctl);
- acpi_disable(acpi_facp);
- acpi_release_ioports(acpi_facp);
+ acpi_disable(facp);
+ acpi_release_ioports(facp);
- if (acpi_facp->sci_int)
- free_irq(acpi_facp->sci_int, acpi_facp);
+ if (facp->sci_int)
+ free_irq(facp->sci_int, &acpi_facp);
acpi_destroy_tables();
@@ -1429,3 +1590,4 @@ __setup("acpi=", acpi_setup);
module_init(acpi_init);
module_exit(acpi_exit);
+
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
index 0c3cae5d9..56500e466 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -638,6 +638,8 @@ ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_setfsuid) /* 215 */
.long SYMBOL_NAME(sys_setfsgid)
.long SYMBOL_NAME(sys_pivot_root)
+ .long SYMBOL_NAME(sys_mincore)
+ .long SYMBOL_NAME(sys_madvise)
/*
@@ -646,6 +648,6 @@ ENTRY(sys_call_table)
* entries. Don't panic if you notice that this hasn't
* been shrunk every time we add a new system call.
*/
- .rept NR_syscalls-217
+ .rept NR_syscalls-219
.long SYMBOL_NAME(sys_ni_syscall)
.endr
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S
index f7138faa3..3340946be 100644
--- a/arch/i386/kernel/head.S
+++ b/arch/i386/kernel/head.S
@@ -67,10 +67,17 @@ startup_32:
movl %eax,%cr4
#endif
/*
- * Setup paging (the tables are already set up, just switch them on)
+ * Setup paging (intialize tables, then switch them on)
*/
1:
- movl $0x101000,%eax
+ movl $pg0-__PAGE_OFFSET,%edi /* initialize page tables */
+ movl $007,%eax /* "007" doesn't mean with right to kill, but
+ PRESENT+RW+USER */
+1: stosl
+ add $0x1000,%eax
+ cmp $empty_zero_page-__PAGE_OFFSET,%edi
+ jne 1b
+ movl $swapper_pg_dir-__PAGE_OFFSET,%eax
movl %eax,%cr3 /* set the page table pointer.. */
movl %cr0,%eax
orl $0x80000000,%eax
@@ -350,8 +357,8 @@ SYMBOL_NAME(gdt):
.long SYMBOL_NAME(gdt_table)
/*
- * This is initialized to create a identity-mapping at 0-4M (for bootup
- * purposes) and another mapping of the 0-4M area at virtual address
+ * This is initialized to create an identity-mapping at 0-8M (for bootup
+ * purposes) and another mapping of the 0-8M area at virtual address
* PAGE_OFFSET.
*/
.org 0x1000
@@ -366,270 +373,20 @@ ENTRY(swapper_pg_dir)
.fill BOOT_KERNEL_PGD_PTRS-2,4,0
/*
- * The page tables are initialized to only 4MB here - the final page
- * tables are set up later depending on memory size. The "007" at the
- * end doesn't mean with right to kill, but PRESENT+RW+USER
+ * The page tables are initialized to only 8MB here - the final page
+ * tables are set up later depending on memory size.
*/
.org 0x2000
ENTRY(pg0)
- .long 0x000007,0x001007,0x002007,0x003007,0x004007,0x005007,0x006007,0x007007
- .long 0x008007,0x009007,0x00a007,0x00b007,0x00c007,0x00d007,0x00e007,0x00f007
- .long 0x010007,0x011007,0x012007,0x013007,0x014007,0x015007,0x016007,0x017007
- .long 0x018007,0x019007,0x01a007,0x01b007,0x01c007,0x01d007,0x01e007,0x01f007
- .long 0x020007,0x021007,0x022007,0x023007,0x024007,0x025007,0x026007,0x027007
- .long 0x028007,0x029007,0x02a007,0x02b007,0x02c007,0x02d007,0x02e007,0x02f007
- .long 0x030007,0x031007,0x032007,0x033007,0x034007,0x035007,0x036007,0x037007
- .long 0x038007,0x039007,0x03a007,0x03b007,0x03c007,0x03d007,0x03e007,0x03f007
- .long 0x040007,0x041007,0x042007,0x043007,0x044007,0x045007,0x046007,0x047007
- .long 0x048007,0x049007,0x04a007,0x04b007,0x04c007,0x04d007,0x04e007,0x04f007
- .long 0x050007,0x051007,0x052007,0x053007,0x054007,0x055007,0x056007,0x057007
- .long 0x058007,0x059007,0x05a007,0x05b007,0x05c007,0x05d007,0x05e007,0x05f007
- .long 0x060007,0x061007,0x062007,0x063007,0x064007,0x065007,0x066007,0x067007
- .long 0x068007,0x069007,0x06a007,0x06b007,0x06c007,0x06d007,0x06e007,0x06f007
- .long 0x070007,0x071007,0x072007,0x073007,0x074007,0x075007,0x076007,0x077007
- .long 0x078007,0x079007,0x07a007,0x07b007,0x07c007,0x07d007,0x07e007,0x07f007
- .long 0x080007,0x081007,0x082007,0x083007,0x084007,0x085007,0x086007,0x087007
- .long 0x088007,0x089007,0x08a007,0x08b007,0x08c007,0x08d007,0x08e007,0x08f007
- .long 0x090007,0x091007,0x092007,0x093007,0x094007,0x095007,0x096007,0x097007
- .long 0x098007,0x099007,0x09a007,0x09b007,0x09c007,0x09d007,0x09e007,0x09f007
- .long 0x0a0007,0x0a1007,0x0a2007,0x0a3007,0x0a4007,0x0a5007,0x0a6007,0x0a7007
- .long 0x0a8007,0x0a9007,0x0aa007,0x0ab007,0x0ac007,0x0ad007,0x0ae007,0x0af007
- .long 0x0b0007,0x0b1007,0x0b2007,0x0b3007,0x0b4007,0x0b5007,0x0b6007,0x0b7007
- .long 0x0b8007,0x0b9007,0x0ba007,0x0bb007,0x0bc007,0x0bd007,0x0be007,0x0bf007
- .long 0x0c0007,0x0c1007,0x0c2007,0x0c3007,0x0c4007,0x0c5007,0x0c6007,0x0c7007
- .long 0x0c8007,0x0c9007,0x0ca007,0x0cb007,0x0cc007,0x0cd007,0x0ce007,0x0cf007
- .long 0x0d0007,0x0d1007,0x0d2007,0x0d3007,0x0d4007,0x0d5007,0x0d6007,0x0d7007
- .long 0x0d8007,0x0d9007,0x0da007,0x0db007,0x0dc007,0x0dd007,0x0de007,0x0df007
- .long 0x0e0007,0x0e1007,0x0e2007,0x0e3007,0x0e4007,0x0e5007,0x0e6007,0x0e7007
- .long 0x0e8007,0x0e9007,0x0ea007,0x0eb007,0x0ec007,0x0ed007,0x0ee007,0x0ef007
- .long 0x0f0007,0x0f1007,0x0f2007,0x0f3007,0x0f4007,0x0f5007,0x0f6007,0x0f7007
- .long 0x0f8007,0x0f9007,0x0fa007,0x0fb007,0x0fc007,0x0fd007,0x0fe007,0x0ff007
- .long 0x100007,0x101007,0x102007,0x103007,0x104007,0x105007,0x106007,0x107007
- .long 0x108007,0x109007,0x10a007,0x10b007,0x10c007,0x10d007,0x10e007,0x10f007
- .long 0x110007,0x111007,0x112007,0x113007,0x114007,0x115007,0x116007,0x117007
- .long 0x118007,0x119007,0x11a007,0x11b007,0x11c007,0x11d007,0x11e007,0x11f007
- .long 0x120007,0x121007,0x122007,0x123007,0x124007,0x125007,0x126007,0x127007
- .long 0x128007,0x129007,0x12a007,0x12b007,0x12c007,0x12d007,0x12e007,0x12f007
- .long 0x130007,0x131007,0x132007,0x133007,0x134007,0x135007,0x136007,0x137007
- .long 0x138007,0x139007,0x13a007,0x13b007,0x13c007,0x13d007,0x13e007,0x13f007
- .long 0x140007,0x141007,0x142007,0x143007,0x144007,0x145007,0x146007,0x147007
- .long 0x148007,0x149007,0x14a007,0x14b007,0x14c007,0x14d007,0x14e007,0x14f007
- .long 0x150007,0x151007,0x152007,0x153007,0x154007,0x155007,0x156007,0x157007
- .long 0x158007,0x159007,0x15a007,0x15b007,0x15c007,0x15d007,0x15e007,0x15f007
- .long 0x160007,0x161007,0x162007,0x163007,0x164007,0x165007,0x166007,0x167007
- .long 0x168007,0x169007,0x16a007,0x16b007,0x16c007,0x16d007,0x16e007,0x16f007
- .long 0x170007,0x171007,0x172007,0x173007,0x174007,0x175007,0x176007,0x177007
- .long 0x178007,0x179007,0x17a007,0x17b007,0x17c007,0x17d007,0x17e007,0x17f007
- .long 0x180007,0x181007,0x182007,0x183007,0x184007,0x185007,0x186007,0x187007
- .long 0x188007,0x189007,0x18a007,0x18b007,0x18c007,0x18d007,0x18e007,0x18f007
- .long 0x190007,0x191007,0x192007,0x193007,0x194007,0x195007,0x196007,0x197007
- .long 0x198007,0x199007,0x19a007,0x19b007,0x19c007,0x19d007,0x19e007,0x19f007
- .long 0x1a0007,0x1a1007,0x1a2007,0x1a3007,0x1a4007,0x1a5007,0x1a6007,0x1a7007
- .long 0x1a8007,0x1a9007,0x1aa007,0x1ab007,0x1ac007,0x1ad007,0x1ae007,0x1af007
- .long 0x1b0007,0x1b1007,0x1b2007,0x1b3007,0x1b4007,0x1b5007,0x1b6007,0x1b7007
- .long 0x1b8007,0x1b9007,0x1ba007,0x1bb007,0x1bc007,0x1bd007,0x1be007,0x1bf007
- .long 0x1c0007,0x1c1007,0x1c2007,0x1c3007,0x1c4007,0x1c5007,0x1c6007,0x1c7007
- .long 0x1c8007,0x1c9007,0x1ca007,0x1cb007,0x1cc007,0x1cd007,0x1ce007,0x1cf007
- .long 0x1d0007,0x1d1007,0x1d2007,0x1d3007,0x1d4007,0x1d5007,0x1d6007,0x1d7007
- .long 0x1d8007,0x1d9007,0x1da007,0x1db007,0x1dc007,0x1dd007,0x1de007,0x1df007
- .long 0x1e0007,0x1e1007,0x1e2007,0x1e3007,0x1e4007,0x1e5007,0x1e6007,0x1e7007
- .long 0x1e8007,0x1e9007,0x1ea007,0x1eb007,0x1ec007,0x1ed007,0x1ee007,0x1ef007
- .long 0x1f0007,0x1f1007,0x1f2007,0x1f3007,0x1f4007,0x1f5007,0x1f6007,0x1f7007
- .long 0x1f8007,0x1f9007,0x1fa007,0x1fb007,0x1fc007,0x1fd007,0x1fe007,0x1ff007
- .long 0x200007,0x201007,0x202007,0x203007,0x204007,0x205007,0x206007,0x207007
- .long 0x208007,0x209007,0x20a007,0x20b007,0x20c007,0x20d007,0x20e007,0x20f007
- .long 0x210007,0x211007,0x212007,0x213007,0x214007,0x215007,0x216007,0x217007
- .long 0x218007,0x219007,0x21a007,0x21b007,0x21c007,0x21d007,0x21e007,0x21f007
- .long 0x220007,0x221007,0x222007,0x223007,0x224007,0x225007,0x226007,0x227007
- .long 0x228007,0x229007,0x22a007,0x22b007,0x22c007,0x22d007,0x22e007,0x22f007
- .long 0x230007,0x231007,0x232007,0x233007,0x234007,0x235007,0x236007,0x237007
- .long 0x238007,0x239007,0x23a007,0x23b007,0x23c007,0x23d007,0x23e007,0x23f007
- .long 0x240007,0x241007,0x242007,0x243007,0x244007,0x245007,0x246007,0x247007
- .long 0x248007,0x249007,0x24a007,0x24b007,0x24c007,0x24d007,0x24e007,0x24f007
- .long 0x250007,0x251007,0x252007,0x253007,0x254007,0x255007,0x256007,0x257007
- .long 0x258007,0x259007,0x25a007,0x25b007,0x25c007,0x25d007,0x25e007,0x25f007
- .long 0x260007,0x261007,0x262007,0x263007,0x264007,0x265007,0x266007,0x267007
- .long 0x268007,0x269007,0x26a007,0x26b007,0x26c007,0x26d007,0x26e007,0x26f007
- .long 0x270007,0x271007,0x272007,0x273007,0x274007,0x275007,0x276007,0x277007
- .long 0x278007,0x279007,0x27a007,0x27b007,0x27c007,0x27d007,0x27e007,0x27f007
- .long 0x280007,0x281007,0x282007,0x283007,0x284007,0x285007,0x286007,0x287007
- .long 0x288007,0x289007,0x28a007,0x28b007,0x28c007,0x28d007,0x28e007,0x28f007
- .long 0x290007,0x291007,0x292007,0x293007,0x294007,0x295007,0x296007,0x297007
- .long 0x298007,0x299007,0x29a007,0x29b007,0x29c007,0x29d007,0x29e007,0x29f007
- .long 0x2a0007,0x2a1007,0x2a2007,0x2a3007,0x2a4007,0x2a5007,0x2a6007,0x2a7007
- .long 0x2a8007,0x2a9007,0x2aa007,0x2ab007,0x2ac007,0x2ad007,0x2ae007,0x2af007
- .long 0x2b0007,0x2b1007,0x2b2007,0x2b3007,0x2b4007,0x2b5007,0x2b6007,0x2b7007
- .long 0x2b8007,0x2b9007,0x2ba007,0x2bb007,0x2bc007,0x2bd007,0x2be007,0x2bf007
- .long 0x2c0007,0x2c1007,0x2c2007,0x2c3007,0x2c4007,0x2c5007,0x2c6007,0x2c7007
- .long 0x2c8007,0x2c9007,0x2ca007,0x2cb007,0x2cc007,0x2cd007,0x2ce007,0x2cf007
- .long 0x2d0007,0x2d1007,0x2d2007,0x2d3007,0x2d4007,0x2d5007,0x2d6007,0x2d7007
- .long 0x2d8007,0x2d9007,0x2da007,0x2db007,0x2dc007,0x2dd007,0x2de007,0x2df007
- .long 0x2e0007,0x2e1007,0x2e2007,0x2e3007,0x2e4007,0x2e5007,0x2e6007,0x2e7007
- .long 0x2e8007,0x2e9007,0x2ea007,0x2eb007,0x2ec007,0x2ed007,0x2ee007,0x2ef007
- .long 0x2f0007,0x2f1007,0x2f2007,0x2f3007,0x2f4007,0x2f5007,0x2f6007,0x2f7007
- .long 0x2f8007,0x2f9007,0x2fa007,0x2fb007,0x2fc007,0x2fd007,0x2fe007,0x2ff007
- .long 0x300007,0x301007,0x302007,0x303007,0x304007,0x305007,0x306007,0x307007
- .long 0x308007,0x309007,0x30a007,0x30b007,0x30c007,0x30d007,0x30e007,0x30f007
- .long 0x310007,0x311007,0x312007,0x313007,0x314007,0x315007,0x316007,0x317007
- .long 0x318007,0x319007,0x31a007,0x31b007,0x31c007,0x31d007,0x31e007,0x31f007
- .long 0x320007,0x321007,0x322007,0x323007,0x324007,0x325007,0x326007,0x327007
- .long 0x328007,0x329007,0x32a007,0x32b007,0x32c007,0x32d007,0x32e007,0x32f007
- .long 0x330007,0x331007,0x332007,0x333007,0x334007,0x335007,0x336007,0x337007
- .long 0x338007,0x339007,0x33a007,0x33b007,0x33c007,0x33d007,0x33e007,0x33f007
- .long 0x340007,0x341007,0x342007,0x343007,0x344007,0x345007,0x346007,0x347007
- .long 0x348007,0x349007,0x34a007,0x34b007,0x34c007,0x34d007,0x34e007,0x34f007
- .long 0x350007,0x351007,0x352007,0x353007,0x354007,0x355007,0x356007,0x357007
- .long 0x358007,0x359007,0x35a007,0x35b007,0x35c007,0x35d007,0x35e007,0x35f007
- .long 0x360007,0x361007,0x362007,0x363007,0x364007,0x365007,0x366007,0x367007
- .long 0x368007,0x369007,0x36a007,0x36b007,0x36c007,0x36d007,0x36e007,0x36f007
- .long 0x370007,0x371007,0x372007,0x373007,0x374007,0x375007,0x376007,0x377007
- .long 0x378007,0x379007,0x37a007,0x37b007,0x37c007,0x37d007,0x37e007,0x37f007
- .long 0x380007,0x381007,0x382007,0x383007,0x384007,0x385007,0x386007,0x387007
- .long 0x388007,0x389007,0x38a007,0x38b007,0x38c007,0x38d007,0x38e007,0x38f007
- .long 0x390007,0x391007,0x392007,0x393007,0x394007,0x395007,0x396007,0x397007
- .long 0x398007,0x399007,0x39a007,0x39b007,0x39c007,0x39d007,0x39e007,0x39f007
- .long 0x3a0007,0x3a1007,0x3a2007,0x3a3007,0x3a4007,0x3a5007,0x3a6007,0x3a7007
- .long 0x3a8007,0x3a9007,0x3aa007,0x3ab007,0x3ac007,0x3ad007,0x3ae007,0x3af007
- .long 0x3b0007,0x3b1007,0x3b2007,0x3b3007,0x3b4007,0x3b5007,0x3b6007,0x3b7007
- .long 0x3b8007,0x3b9007,0x3ba007,0x3bb007,0x3bc007,0x3bd007,0x3be007,0x3bf007
- .long 0x3c0007,0x3c1007,0x3c2007,0x3c3007,0x3c4007,0x3c5007,0x3c6007,0x3c7007
- .long 0x3c8007,0x3c9007,0x3ca007,0x3cb007,0x3cc007,0x3cd007,0x3ce007,0x3cf007
- .long 0x3d0007,0x3d1007,0x3d2007,0x3d3007,0x3d4007,0x3d5007,0x3d6007,0x3d7007
- .long 0x3d8007,0x3d9007,0x3da007,0x3db007,0x3dc007,0x3dd007,0x3de007,0x3df007
- .long 0x3e0007,0x3e1007,0x3e2007,0x3e3007,0x3e4007,0x3e5007,0x3e6007,0x3e7007
- .long 0x3e8007,0x3e9007,0x3ea007,0x3eb007,0x3ec007,0x3ed007,0x3ee007,0x3ef007
- .long 0x3f0007,0x3f1007,0x3f2007,0x3f3007,0x3f4007,0x3f5007,0x3f6007,0x3f7007
- .long 0x3f8007,0x3f9007,0x3fa007,0x3fb007,0x3fc007,0x3fd007,0x3fe007,0x3ff007
+.org 0x3000
ENTRY(pg1)
- .long 0x400007,0x001007,0x002007,0x003007,0x004007,0x005007,0x006007,0x007007
- .long 0x408007,0x009007,0x00a007,0x00b007,0x00c007,0x00d007,0x00e007,0x00f007
- .long 0x410007,0x011007,0x012007,0x013007,0x014007,0x015007,0x016007,0x017007
- .long 0x418007,0x019007,0x01a007,0x01b007,0x01c007,0x01d007,0x01e007,0x01f007
- .long 0x420007,0x021007,0x022007,0x023007,0x024007,0x025007,0x026007,0x027007
- .long 0x428007,0x029007,0x02a007,0x02b007,0x02c007,0x02d007,0x02e007,0x02f007
- .long 0x430007,0x031007,0x032007,0x033007,0x034007,0x035007,0x036007,0x037007
- .long 0x438007,0x039007,0x03a007,0x03b007,0x03c007,0x03d007,0x03e007,0x03f007
- .long 0x440007,0x041007,0x042007,0x043007,0x044007,0x045007,0x046007,0x047007
- .long 0x448007,0x049007,0x04a007,0x04b007,0x04c007,0x04d007,0x04e007,0x04f007
- .long 0x450007,0x051007,0x052007,0x053007,0x054007,0x055007,0x056007,0x057007
- .long 0x458007,0x059007,0x05a007,0x05b007,0x05c007,0x05d007,0x05e007,0x05f007
- .long 0x460007,0x061007,0x062007,0x063007,0x064007,0x065007,0x066007,0x067007
- .long 0x468007,0x069007,0x06a007,0x06b007,0x06c007,0x06d007,0x06e007,0x06f007
- .long 0x470007,0x071007,0x072007,0x073007,0x074007,0x075007,0x076007,0x077007
- .long 0x478007,0x079007,0x07a007,0x07b007,0x07c007,0x07d007,0x07e007,0x07f007
- .long 0x480007,0x081007,0x082007,0x083007,0x084007,0x085007,0x086007,0x087007
- .long 0x488007,0x089007,0x08a007,0x08b007,0x08c007,0x08d007,0x08e007,0x08f007
- .long 0x490007,0x091007,0x092007,0x093007,0x094007,0x095007,0x096007,0x097007
- .long 0x498007,0x099007,0x09a007,0x09b007,0x09c007,0x09d007,0x09e007,0x09f007
- .long 0x4a0007,0x0a1007,0x0a2007,0x0a3007,0x0a4007,0x0a5007,0x0a6007,0x0a7007
- .long 0x4a8007,0x0a9007,0x0aa007,0x0ab007,0x0ac007,0x0ad007,0x0ae007,0x0af007
- .long 0x4b0007,0x0b1007,0x0b2007,0x0b3007,0x0b4007,0x0b5007,0x0b6007,0x0b7007
- .long 0x4b8007,0x0b9007,0x0ba007,0x0bb007,0x0bc007,0x0bd007,0x0be007,0x0bf007
- .long 0x4c0007,0x0c1007,0x0c2007,0x0c3007,0x0c4007,0x0c5007,0x0c6007,0x0c7007
- .long 0x4c8007,0x0c9007,0x0ca007,0x0cb007,0x0cc007,0x0cd007,0x0ce007,0x0cf007
- .long 0x4d0007,0x0d1007,0x0d2007,0x0d3007,0x0d4007,0x0d5007,0x0d6007,0x0d7007
- .long 0x4d8007,0x0d9007,0x0da007,0x0db007,0x0dc007,0x0dd007,0x0de007,0x0df007
- .long 0x4e0007,0x0e1007,0x0e2007,0x0e3007,0x0e4007,0x0e5007,0x0e6007,0x0e7007
- .long 0x4e8007,0x0e9007,0x0ea007,0x0eb007,0x0ec007,0x0ed007,0x0ee007,0x0ef007
- .long 0x4f0007,0x0f1007,0x0f2007,0x0f3007,0x0f4007,0x0f5007,0x0f6007,0x0f7007
- .long 0x4f8007,0x0f9007,0x0fa007,0x0fb007,0x0fc007,0x0fd007,0x0fe007,0x0ff007
- .long 0x500007,0x001007,0x002007,0x003007,0x004007,0x005007,0x006007,0x007007
- .long 0x508007,0x009007,0x00a007,0x00b007,0x00c007,0x00d007,0x00e007,0x00f007
- .long 0x510007,0x011007,0x012007,0x013007,0x014007,0x015007,0x016007,0x017007
- .long 0x518007,0x019007,0x01a007,0x01b007,0x01c007,0x01d007,0x01e007,0x01f007
- .long 0x520007,0x021007,0x022007,0x023007,0x024007,0x025007,0x026007,0x027007
- .long 0x528007,0x029007,0x02a007,0x02b007,0x02c007,0x02d007,0x02e007,0x02f007
- .long 0x530007,0x031007,0x032007,0x033007,0x034007,0x035007,0x036007,0x037007
- .long 0x538007,0x039007,0x03a007,0x03b007,0x03c007,0x03d007,0x03e007,0x03f007
- .long 0x540007,0x041007,0x042007,0x043007,0x044007,0x045007,0x046007,0x047007
- .long 0x548007,0x049007,0x04a007,0x04b007,0x04c007,0x04d007,0x04e007,0x04f007
- .long 0x550007,0x051007,0x052007,0x053007,0x054007,0x055007,0x056007,0x057007
- .long 0x558007,0x059007,0x05a007,0x05b007,0x05c007,0x05d007,0x05e007,0x05f007
- .long 0x560007,0x061007,0x062007,0x063007,0x064007,0x065007,0x066007,0x067007
- .long 0x568007,0x069007,0x06a007,0x06b007,0x06c007,0x06d007,0x06e007,0x06f007
- .long 0x570007,0x071007,0x072007,0x073007,0x074007,0x075007,0x076007,0x077007
- .long 0x578007,0x079007,0x07a007,0x07b007,0x07c007,0x07d007,0x07e007,0x07f007
- .long 0x580007,0x081007,0x082007,0x083007,0x084007,0x085007,0x086007,0x087007
- .long 0x588007,0x089007,0x08a007,0x08b007,0x08c007,0x08d007,0x08e007,0x08f007
- .long 0x590007,0x091007,0x092007,0x093007,0x094007,0x095007,0x096007,0x097007
- .long 0x598007,0x099007,0x09a007,0x09b007,0x09c007,0x09d007,0x09e007,0x09f007
- .long 0x5a0007,0x0a1007,0x0a2007,0x0a3007,0x0a4007,0x0a5007,0x0a6007,0x0a7007
- .long 0x5a8007,0x0a9007,0x0aa007,0x0ab007,0x0ac007,0x0ad007,0x0ae007,0x0af007
- .long 0x5b0007,0x0b1007,0x0b2007,0x0b3007,0x0b4007,0x0b5007,0x0b6007,0x0b7007
- .long 0x5b8007,0x0b9007,0x0ba007,0x0bb007,0x0bc007,0x0bd007,0x0be007,0x0bf007
- .long 0x5c0007,0x0c1007,0x0c2007,0x0c3007,0x0c4007,0x0c5007,0x0c6007,0x0c7007
- .long 0x5c8007,0x0c9007,0x0ca007,0x0cb007,0x0cc007,0x0cd007,0x0ce007,0x0cf007
- .long 0x5d0007,0x0d1007,0x0d2007,0x0d3007,0x0d4007,0x0d5007,0x0d6007,0x0d7007
- .long 0x5d8007,0x0d9007,0x0da007,0x0db007,0x0dc007,0x0dd007,0x0de007,0x0df007
- .long 0x5e0007,0x0e1007,0x0e2007,0x0e3007,0x0e4007,0x0e5007,0x0e6007,0x0e7007
- .long 0x5e8007,0x0e9007,0x0ea007,0x0eb007,0x0ec007,0x0ed007,0x0ee007,0x0ef007
- .long 0x5f0007,0x0f1007,0x0f2007,0x0f3007,0x0f4007,0x0f5007,0x0f6007,0x0f7007
- .long 0x5f8007,0x0f9007,0x0fa007,0x0fb007,0x0fc007,0x0fd007,0x0fe007,0x0ff007
- .long 0x600007,0x001007,0x002007,0x003007,0x004007,0x005007,0x006007,0x007007
- .long 0x608007,0x009007,0x00a007,0x00b007,0x00c007,0x00d007,0x00e007,0x00f007
- .long 0x610007,0x011007,0x012007,0x013007,0x014007,0x015007,0x016007,0x017007
- .long 0x618007,0x019007,0x01a007,0x01b007,0x01c007,0x01d007,0x01e007,0x01f007
- .long 0x620007,0x021007,0x022007,0x023007,0x024007,0x025007,0x026007,0x027007
- .long 0x628007,0x029007,0x02a007,0x02b007,0x02c007,0x02d007,0x02e007,0x02f007
- .long 0x630007,0x031007,0x032007,0x033007,0x034007,0x035007,0x036007,0x037007
- .long 0x638007,0x039007,0x03a007,0x03b007,0x03c007,0x03d007,0x03e007,0x03f007
- .long 0x640007,0x041007,0x042007,0x043007,0x044007,0x045007,0x046007,0x047007
- .long 0x648007,0x049007,0x04a007,0x04b007,0x04c007,0x04d007,0x04e007,0x04f007
- .long 0x650007,0x051007,0x052007,0x053007,0x054007,0x055007,0x056007,0x057007
- .long 0x658007,0x059007,0x05a007,0x05b007,0x05c007,0x05d007,0x05e007,0x05f007
- .long 0x660007,0x061007,0x062007,0x063007,0x064007,0x065007,0x066007,0x067007
- .long 0x668007,0x069007,0x06a007,0x06b007,0x06c007,0x06d007,0x06e007,0x06f007
- .long 0x670007,0x071007,0x072007,0x073007,0x074007,0x075007,0x076007,0x077007
- .long 0x678007,0x079007,0x07a007,0x07b007,0x07c007,0x07d007,0x07e007,0x07f007
- .long 0x680007,0x081007,0x082007,0x083007,0x084007,0x085007,0x086007,0x087007
- .long 0x688007,0x089007,0x08a007,0x08b007,0x08c007,0x08d007,0x08e007,0x08f007
- .long 0x690007,0x091007,0x092007,0x093007,0x094007,0x095007,0x096007,0x097007
- .long 0x698007,0x099007,0x09a007,0x09b007,0x09c007,0x09d007,0x09e007,0x09f007
- .long 0x6a0007,0x0a1007,0x0a2007,0x0a3007,0x0a4007,0x0a5007,0x0a6007,0x0a7007
- .long 0x6a8007,0x0a9007,0x0aa007,0x0ab007,0x0ac007,0x0ad007,0x0ae007,0x0af007
- .long 0x6b0007,0x0b1007,0x0b2007,0x0b3007,0x0b4007,0x0b5007,0x0b6007,0x0b7007
- .long 0x6b8007,0x0b9007,0x0ba007,0x0bb007,0x0bc007,0x0bd007,0x0be007,0x0bf007
- .long 0x6c0007,0x0c1007,0x0c2007,0x0c3007,0x0c4007,0x0c5007,0x0c6007,0x0c7007
- .long 0x6c8007,0x0c9007,0x0ca007,0x0cb007,0x0cc007,0x0cd007,0x0ce007,0x0cf007
- .long 0x6d0007,0x0d1007,0x0d2007,0x0d3007,0x0d4007,0x0d5007,0x0d6007,0x0d7007
- .long 0x6d8007,0x0d9007,0x0da007,0x0db007,0x0dc007,0x0dd007,0x0de007,0x0df007
- .long 0x6e0007,0x0e1007,0x0e2007,0x0e3007,0x0e4007,0x0e5007,0x0e6007,0x0e7007
- .long 0x6e8007,0x0e9007,0x0ea007,0x0eb007,0x0ec007,0x0ed007,0x0ee007,0x0ef007
- .long 0x6f0007,0x0f1007,0x0f2007,0x0f3007,0x0f4007,0x0f5007,0x0f6007,0x0f7007
- .long 0x6f8007,0x0f9007,0x0fa007,0x0fb007,0x0fc007,0x0fd007,0x0fe007,0x0ff007
- .long 0x700007,0x001007,0x002007,0x003007,0x004007,0x005007,0x006007,0x007007
- .long 0x708007,0x009007,0x00a007,0x00b007,0x00c007,0x00d007,0x00e007,0x00f007
- .long 0x710007,0x011007,0x012007,0x013007,0x014007,0x015007,0x016007,0x017007
- .long 0x718007,0x019007,0x01a007,0x01b007,0x01c007,0x01d007,0x01e007,0x01f007
- .long 0x720007,0x021007,0x022007,0x023007,0x024007,0x025007,0x026007,0x027007
- .long 0x728007,0x029007,0x02a007,0x02b007,0x02c007,0x02d007,0x02e007,0x02f007
- .long 0x730007,0x031007,0x032007,0x033007,0x034007,0x035007,0x036007,0x037007
- .long 0x738007,0x039007,0x03a007,0x03b007,0x03c007,0x03d007,0x03e007,0x03f007
- .long 0x740007,0x041007,0x042007,0x043007,0x044007,0x045007,0x046007,0x047007
- .long 0x748007,0x049007,0x04a007,0x04b007,0x04c007,0x04d007,0x04e007,0x04f007
- .long 0x750007,0x051007,0x052007,0x053007,0x054007,0x055007,0x056007,0x057007
- .long 0x758007,0x059007,0x05a007,0x05b007,0x05c007,0x05d007,0x05e007,0x05f007
- .long 0x760007,0x061007,0x062007,0x063007,0x064007,0x065007,0x066007,0x067007
- .long 0x768007,0x069007,0x06a007,0x06b007,0x06c007,0x06d007,0x06e007,0x06f007
- .long 0x770007,0x071007,0x072007,0x073007,0x074007,0x075007,0x076007,0x077007
- .long 0x778007,0x079007,0x07a007,0x07b007,0x07c007,0x07d007,0x07e007,0x07f007
- .long 0x780007,0x081007,0x082007,0x083007,0x084007,0x085007,0x086007,0x087007
- .long 0x788007,0x089007,0x08a007,0x08b007,0x08c007,0x08d007,0x08e007,0x08f007
- .long 0x790007,0x091007,0x092007,0x093007,0x094007,0x095007,0x096007,0x097007
- .long 0x798007,0x099007,0x09a007,0x09b007,0x09c007,0x09d007,0x09e007,0x09f007
- .long 0x7a0007,0x0a1007,0x0a2007,0x0a3007,0x0a4007,0x0a5007,0x0a6007,0x0a7007
- .long 0x7a8007,0x0a9007,0x0aa007,0x0ab007,0x0ac007,0x0ad007,0x0ae007,0x0af007
- .long 0x7b0007,0x0b1007,0x0b2007,0x0b3007,0x0b4007,0x0b5007,0x0b6007,0x0b7007
- .long 0x7b8007,0x0b9007,0x0ba007,0x0bb007,0x0bc007,0x0bd007,0x0be007,0x0bf007
- .long 0x7c0007,0x0c1007,0x0c2007,0x0c3007,0x0c4007,0x0c5007,0x0c6007,0x0c7007
- .long 0x7c8007,0x0c9007,0x0ca007,0x0cb007,0x0cc007,0x0cd007,0x0ce007,0x0cf007
- .long 0x7d0007,0x0d1007,0x0d2007,0x0d3007,0x0d4007,0x0d5007,0x0d6007,0x0d7007
- .long 0x7d8007,0x0d9007,0x0da007,0x0db007,0x0dc007,0x0dd007,0x0de007,0x0df007
- .long 0x7e0007,0x0e1007,0x0e2007,0x0e3007,0x0e4007,0x0e5007,0x0e6007,0x0e7007
- .long 0x7e8007,0x0e9007,0x0ea007,0x0eb007,0x0ec007,0x0ed007,0x0ee007,0x0ef007
- .long 0x7f0007,0x0f1007,0x0f2007,0x0f3007,0x0f4007,0x0f5007,0x0f6007,0x0f7007
- .long 0x7f8007,0x0f9007,0x0fa007,0x0fb007,0x0fc007,0x0fd007,0x0fe007,0x0ff007
+
+/*
+ * empty_zero_page must immediately follow the page tables ! (The
+ * initialization loop counts until empty_zero_page)
+ */
+
.org 0x4000
ENTRY(empty_zero_page)
diff --git a/arch/i386/kernel/i386_ksyms.c b/arch/i386/kernel/i386_ksyms.c
index a3389c5f0..e21c33b6f 100644
--- a/arch/i386/kernel/i386_ksyms.c
+++ b/arch/i386/kernel/i386_ksyms.c
@@ -121,21 +121,7 @@ EXPORT_SYMBOL(smp_call_function);
#endif
#ifdef CONFIG_MCA
-/* Adapter probing and info methods. */
EXPORT_SYMBOL(machine_id);
-EXPORT_SYMBOL(mca_find_adapter);
-EXPORT_SYMBOL(mca_write_pos);
-EXPORT_SYMBOL(mca_read_pos);
-EXPORT_SYMBOL(mca_read_stored_pos);
-EXPORT_SYMBOL(mca_set_adapter_name);
-EXPORT_SYMBOL(mca_get_adapter_name);
-EXPORT_SYMBOL(mca_set_adapter_procfn);
-EXPORT_SYMBOL(mca_isenabled);
-EXPORT_SYMBOL(mca_isadapter);
-EXPORT_SYMBOL(mca_mark_as_used);
-EXPORT_SYMBOL(mca_mark_as_unused);
-EXPORT_SYMBOL(mca_find_unused_adapter);
-EXPORT_SYMBOL(mca_is_adapter_used);
#endif
#ifdef CONFIG_VT
diff --git a/arch/i386/kernel/irq.c b/arch/i386/kernel/irq.c
index 120c861e7..d2ba2fd9c 100644
--- a/arch/i386/kernel/irq.c
+++ b/arch/i386/kernel/irq.c
@@ -456,6 +456,18 @@ int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction *
* hardware disable after having gotten the irq
* controller lock.
*/
+
+/**
+ * disable_irq_nosync - disable an irq without waiting
+ * @irq: Interrupt to disable
+ *
+ * Disable the selected interrupt line. Disables of an interrupt
+ * stack. Unlike disable_irq, this function does not ensure existing
+ * instances of the irq handler have completed before returning.
+ *
+ * This function may be called from IRQ context.
+ */
+
void inline disable_irq_nosync(unsigned int irq)
{
irq_desc_t *desc = irq_desc + irq;
@@ -469,10 +481,19 @@ void inline disable_irq_nosync(unsigned int irq)
spin_unlock_irqrestore(&desc->lock, flags);
}
-/*
- * Synchronous version of the above, making sure the IRQ is
- * no longer running on any other IRQ..
+/**
+ * disable_irq - disable an irq and wait for completion
+ * @irq: Interrupt to disable
+ *
+ * Disable the selected interrupt line. Disables of an interrupt
+ * stack. That is for two disables you need two enables. This
+ * function waits for any pending IRQ handlers for this interrupt
+ * to complete before returning. If you use this function while
+ * holding a resource the IRQ handler may need you will deadlock.
+ *
+ * This function may be called - with care - from IRQ context.
*/
+
void disable_irq(unsigned int irq)
{
disable_irq_nosync(irq);
@@ -484,6 +505,16 @@ void disable_irq(unsigned int irq)
}
}
+/**
+ * enable_irq - enable interrupt handling on an irq
+ * @irq: Interrupt to enable
+ *
+ * Re-enables the processing of interrupts on this IRQ line
+ * providing no disable_irq calls are now in effect.
+ *
+ * This function may be called from IRQ context.
+ */
+
void enable_irq(unsigned int irq)
{
irq_desc_t *desc = irq_desc + irq;
@@ -598,6 +629,38 @@ out:
return 1;
}
+/**
+ * request_irq - allocate an interrupt line
+ * @irq: Interrupt line to allocate
+ * @handler: Function to be called when the IRQ occurs
+ * @irqflags: Interrupt type flags
+ * @devname: An ascii name for the claiming device
+ * @dev_id: A cookie passed back to the handler function
+ *
+ * This call allocates interrupt resources and enables the
+ * interrupt line and IRQ handling. From the point this
+ * call is made your handler function may be invoked. Since
+ * your handler function must clear any interrupt the board
+ * raises, you must take care both to initialise your hardware
+ * and to set up the interrupt handler in the right order.
+ *
+ * Dev_id must be globally unique. Normally the address of the
+ * device data structure is used as the cookie. Since the handler
+ * receives this value it makes sense to use it.
+ *
+ * If your interrupt is shared you must pass a non NULL dev_id
+ * as this is required when freeing the interrupt.
+ *
+ * Flags:
+ *
+ * SA_SHIRQ Interrupt is shared
+ *
+ * SA_INTERRUPT Disable local interrupts while processing
+ *
+ * SA_SAMPLE_RANDOM The interrupt can be used for entropy
+ *
+ */
+
int request_irq(unsigned int irq,
void (*handler)(int, void *, struct pt_regs *),
unsigned long irqflags,
@@ -642,7 +705,25 @@ int request_irq(unsigned int irq,
kfree(action);
return retval;
}
-
+
+/**
+ * free_irq - free an interrupt
+ * @irq: Interrupt line to free
+ * @dev_id: Device identity to free
+ *
+ * Remove an interrupt handler. The handler is removed and if the
+ * interrupt line is no longer in use by any driver it is disabled.
+ * On a shared IRQ the caller must ensure the interrupt is disabled
+ * on the card it drives before calling this function. The function
+ * does not return until any executing interrupts for this IRQ
+ * have completed.
+ *
+ * This function may be called from interrupt context.
+ *
+ * Bugs: Attempting to free an irq in a handler for the same irq hangs
+ * the machine.
+ */
+
void free_irq(unsigned int irq, void *dev_id)
{
irq_desc_t *desc;
@@ -693,6 +774,15 @@ void free_irq(unsigned int irq, void *dev_id)
* with "IRQ_WAITING" cleared and the interrupt
* disabled.
*/
+
+/**
+ * probe_irq_on - begin an interrupt autodetect
+ *
+ * Commence probing for an interrupt. The interrupts are scanned
+ * and a mask of potential interrupt lines is returned.
+ *
+ */
+
unsigned long probe_irq_on(void)
{
unsigned int i;
@@ -770,6 +860,16 @@ unsigned long probe_irq_on(void)
* Return a mask of triggered interrupts (this
* can handle only legacy ISA interrupts).
*/
+
+/**
+ * probe_irq_mask
+ * @val: mask of interrupts to consider
+ *
+ * Scan the ISA bus interrupt lines and return a bitmap of
+ * active interrupts. The interrupt probe logic state is then
+ * returned to its previous value.
+ */
+
unsigned int probe_irq_mask(unsigned long val)
{
int i;
@@ -798,8 +898,27 @@ unsigned int probe_irq_mask(unsigned long val)
/*
* Return the one interrupt that triggered (this can
- * handle any interrupt source)
+ * handle any interrupt source).
+ */
+
+/**
+ * probe_irq_off - end an interrupt autodetect
+ * @val: mask of potential interrupts (unused)
+ *
+ * Scans the unused interrupt lines and returns the line which
+ * appears to have triggered the interrupt. If no interrupt was
+ * found then zero is returned. If more than one interrupt is
+ * found then minus the first candidate is returned to indicate
+ * their is doubt.
+ *
+ * The interrupt probe logic state is returned to its previous
+ * value.
+ *
+ * BUGS: When used in a module (which arguably shouldnt happen)
+ * nothing prevents two IRQ probe callers from overlapping. The
+ * results of this are non-optimal.
*/
+
int probe_irq_off(unsigned long val)
{
int i, irq_found, nr_irqs;
diff --git a/arch/i386/kernel/mca.c b/arch/i386/kernel/mca.c
index 7061e55db..f0f0f9f37 100644
--- a/arch/i386/kernel/mca.c
+++ b/arch/i386/kernel/mca.c
@@ -34,6 +34,7 @@
* - switched to regular procfs methods.
*/
+#include <linux/module.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/kernel.h>
@@ -362,6 +363,19 @@ void mca_handle_nmi(void)
/*--------------------------------------------------------------------*/
+/**
+ * mca_find_adapter - scan for adapters
+ * @id: MCA identification to search for
+ * @start: Starting slot
+ *
+ * Search the MCA configuration for adapters matching the 16bit
+ * ID given. The first time it should be called with start as zero
+ * and then further calls made passing the return value of the
+ * previous call until MCA_NOTFOUND is returned.
+ *
+ * Disabled adapters are not reported.
+ */
+
int mca_find_adapter(int id, int start)
{
if(mca_info == NULL || id == 0xffff) {
@@ -390,8 +404,25 @@ int mca_find_adapter(int id, int start)
return MCA_NOTFOUND;
} /* mca_find_adapter() */
+EXPORT_SYMBOL(mca_find_adapter);
+
/*--------------------------------------------------------------------*/
+/**
+ * mca_find_unused_adapter - scan for unused adapters
+ * @id: MCA identification to search for
+ * @start: Starting slot
+ *
+ * Search the MCA configuration for adapters matching the 16bit
+ * ID given. The first time it should be called with start as zero
+ * and then further calls made passing the return value of the
+ * previous call until MCA_NOTFOUND is returned.
+ *
+ * Adapters that have been claimed by drivers and those that
+ * are disabled are not reported. This function thus allows a driver
+ * to scan for further cards when some may already be driven.
+ */
+
int mca_find_unused_adapter(int id, int start)
{
if(mca_info == NULL || id == 0xffff) {
@@ -421,8 +452,20 @@ int mca_find_unused_adapter(int id, int start)
return MCA_NOTFOUND;
} /* mca_find_unused_adapter() */
+EXPORT_SYMBOL(mca_find_unused_adapter);
+
/*--------------------------------------------------------------------*/
+/**
+ * mca_read_stored_pos - read POS register from boot data
+ * @slot: slot number to read from
+ * @reg: register to read from
+ *
+ * Fetch a POS value that was stored at boot time by the kernel
+ * when it scanned the MCA space. The register value is returned.
+ * Missing or invalid registers report 0.
+ */
+
unsigned char mca_read_stored_pos(int slot, int reg)
{
if(slot < 0 || slot >= MCA_NUMADAPTERS || mca_info == NULL) return 0;
@@ -430,8 +473,22 @@ unsigned char mca_read_stored_pos(int slot, int reg)
return mca_info->slot[slot].pos[reg];
} /* mca_read_stored_pos() */
+EXPORT_SYMBOL(mca_read_stored_pos);
+
/*--------------------------------------------------------------------*/
+/**
+ * mca_read_pos - read POS register from card
+ * @slot: slot number to read from
+ * @reg: register to read from
+ *
+ * Fetch a POS value directly from the hardware to obtain the
+ * current value. This is much slower than mca_read_stored_pos and
+ * may not be invoked from interrupt context. It handles the
+ * deep magic required for onboard devices transparently.
+ */
+
+
unsigned char mca_read_pos(int slot, int reg)
{
unsigned int byte = 0;
@@ -489,16 +546,32 @@ unsigned char mca_read_pos(int slot, int reg)
return byte;
} /* mca_read_pos() */
+EXPORT_SYMBOL(mca_read_pos);
+
/*--------------------------------------------------------------------*/
-/* Note that this a technically a Bad Thing, as IBM tech stuff says
- * you should only set POS values through their utilities.
- * However, some devices such as the 3c523 recommend that you write
- * back some data to make sure the configuration is consistent.
- * I'd say that IBM is right, but I like my drivers to work.
- * This function can't do checks to see if multiple devices end up
- * with the same resources, so you might see magic smoke if someone
- * screws up.
+/**
+ * mca_write_pos - read POS register from card
+ * @slot: slot number to read from
+ * @reg: register to read from
+ * @byte: byte to write to the POS registers
+ *
+ * Store a POS value directly from the hardware. You should not
+ * normally need to use this function and should have a very good
+ * knowledge of MCA bus before you do so. Doing this wrongly can
+ * damage the hardware.
+ *
+ * This function may not be used from interrupt context.
+ *
+ * Note that this a technically a Bad Thing, as IBM tech stuff says
+ * you should only set POS values through their utilities.
+ * However, some devices such as the 3c523 recommend that you write
+ * back some data to make sure the configuration is consistent.
+ * I'd say that IBM is right, but I like my drivers to work.
+ *
+ * This function can't do checks to see if multiple devices end up
+ * with the same resources, so you might see magic smoke if someone
+ * screws up.
*/
void mca_write_pos(int slot, int reg, unsigned char byte)
@@ -532,8 +605,20 @@ void mca_write_pos(int slot, int reg, unsigned char byte)
mca_info->slot[slot].pos[reg] = byte;
} /* mca_write_pos() */
+EXPORT_SYMBOL(mca_write_pos);
+
/*--------------------------------------------------------------------*/
+/**
+ * mca_set_adapter_name - Set the description of the card
+ * @slot: slot to name
+ * @name: text string for the namen
+ *
+ * This function sets the name reported via /proc for this
+ * adapter slot. This is for user information only. Setting a
+ * name deletes any previous name.
+ */
+
void mca_set_adapter_name(int slot, char* name)
{
if(mca_info == NULL) return;
@@ -550,6 +635,26 @@ void mca_set_adapter_name(int slot, char* name)
}
}
+EXPORT_SYMBOL(mca_set_adapter_name);
+
+/**
+ * mca_set_adapter_procfn - Set the /proc callback
+ * @slot: slot to configure
+ * @procfn: callback function to call for /proc
+ * @dev: device information passed to the callback
+ *
+ * This sets up an information callback for /proc/mca/slot?. The
+ * function is called with the buffer, slot, and device pointer (or
+ * some equally informative context information, or nothing, if you
+ * prefer), and is expected to put useful information into the
+ * buffer. The adapter name, id, and POS registers get printed
+ * before this is called though, so don't do it again.
+ *
+ * This should be called with a NULL procfn when a module
+ * unregisters, thus preventing kernel crashes and other such
+ * nastiness.
+ */
+
void mca_set_adapter_procfn(int slot, MCA_ProcFn procfn, void* dev)
{
if(mca_info == NULL) return;
@@ -560,11 +665,33 @@ void mca_set_adapter_procfn(int slot, MCA_ProcFn procfn, void* dev)
}
}
+EXPORT_SYMBOL(mca_set_adapter_procfn);
+
+/**
+ * mca_is_adapter_used - check if claimed by driver
+ * @slot: slot to check
+ *
+ * Returns 1 if the slot has been claimed by a driver
+ */
+
int mca_is_adapter_used(int slot)
{
return mca_info->slot[slot].driver_loaded;
}
+EXPORT_SYMBOL(mca_is_adapter_used);
+
+/**
+ * mca_mark_as_used - claim an MCA device
+ * @slot: slot to claim
+ * FIXME: should we make this threadsafe
+ *
+ * Claim an MCA slot for a device driver. If the
+ * slot is already taken the function returns 1,
+ * if it is not taken it is claimed and 0 is
+ * returned.
+ */
+
int mca_mark_as_used(int slot)
{
if(mca_info->slot[slot].driver_loaded) return 1;
@@ -572,10 +699,29 @@ int mca_mark_as_used(int slot)
return 0;
}
+EXPORT_SYMBOL(mca_mark_as_used);
+
+/**
+ * mca_mark_as_unused - release an MCA device
+ * @slot: slot to claim
+ *
+ * Release the slot for other drives to use.
+ */
+
void mca_mark_as_unused(int slot)
{
mca_info->slot[slot].driver_loaded = 0;
}
+
+EXPORT_SYMBOL(mca_mark_as_unused);
+
+/**
+ * mca_get_adapter_name - get the adapter description
+ * @slot: slot to query
+ *
+ * Return the adapter description if set. If it has not been
+ * set or the slot is out range then return NULL.
+ */
char *mca_get_adapter_name(int slot)
{
@@ -588,6 +734,16 @@ char *mca_get_adapter_name(int slot)
return 0;
}
+EXPORT_SYMBOL(mca_get_adapter_name);
+
+/**
+ * mca_isadapter - check if the slot holds an adapter
+ * @slot: slot to query
+ *
+ * Returns zero if the slot does not hold an adapter, non zero if
+ * it does.
+ */
+
int mca_isadapter(int slot)
{
if(mca_info == NULL) return 0;
@@ -600,6 +756,17 @@ int mca_isadapter(int slot)
return 0;
}
+EXPORT_SYMBOL(mca_isadapter);
+
+
+/**
+ * mca_isadapter - check if the slot holds an adapter
+ * @slot: slot to query
+ *
+ * Returns a non zero value if the slot holds an enabled adapter
+ * and zero for any other case.
+ */
+
int mca_isenabled(int slot)
{
if(mca_info == NULL) return 0;
@@ -611,6 +778,8 @@ int mca_isenabled(int slot)
return 0;
}
+EXPORT_SYMBOL(mca_isenabled);
+
/*--------------------------------------------------------------------*/
#ifdef CONFIG_PROC_FS
diff --git a/arch/i386/kernel/mtrr.c b/arch/i386/kernel/mtrr.c
index cc9c7eafe..1d6203f65 100644
--- a/arch/i386/kernel/mtrr.c
+++ b/arch/i386/kernel/mtrr.c
@@ -1101,8 +1101,44 @@ static int cyrix_get_free_region (unsigned long base, unsigned long size)
static int (*get_free_region) (unsigned long base,
unsigned long size) = generic_get_free_region;
-int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
- char increment)
+/**
+ * mtrr_add - Add a memory type region
+ * @base: Physical base address of region
+ * @size: Physical size of region
+ * @type: Type of MTRR desired
+ * @increment: If this is true do usage counting on the region
+ *
+ * Memory type region registers control the caching on newer Intel and
+ * non Intel processors. This function allows drivers to request an
+ * MTRR is added. The details and hardware specifics of each processors
+ * implementation are hidden from the caller, but nevertheless the
+ * caller should expect to need to provide a power of two size on an
+ * equivalent power of two boundary.
+ *
+ * If the region cannot be added either because all regions are in use
+ * or the CPU cannot support it a negative value is returned. On success
+ * the register number for this entry is returned, but should be treated
+ * as a cookie only.
+ *
+ * On a multiprocessor machine the changes are made to all processors.
+ * This is required on x86 by the Intel processors.
+ *
+ * The available types are
+ *
+ * MTRR_TYPE_UNCACHEABLE - No caching
+ *
+ * MTRR_TYPE_WRITEBACK - Write data back in bursts whenever
+ *
+ * MTRR_TYPE_WRCOMB - Write data back soon but allow bursts
+ *
+ * MTRR_TYPE_WRTHROUGH - Cache reads but not writes
+ *
+ * BUGS: Needs a quiet flag for the cases where drivers do not mind
+ * failures and do not wish system log messages to be sent.
+ */
+
+int mtrr_add(unsigned long base, unsigned long size, unsigned int type, char increment)
+{
/* [SUMMARY] Add an MTRR entry.
<base> The starting (base) address of the region.
<size> The size (in bytes) of the region.
@@ -1113,7 +1149,6 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
the error code.
[NOTE] This routine uses a spinlock.
*/
-{
int i, max;
mtrr_type ltype;
unsigned long lbase, lsize, last;
@@ -1145,7 +1180,7 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
if ( (boot_cpu_data.x86 == 6) && (boot_cpu_data.x86_model == 1) &&
(boot_cpu_data.x86_mask <= 7) && ( base & ( (1 << 22) -1 ) ) )
{
- printk ("mtrr: base(0x%lx) is not 4 MiB aligned\n", base);
+ printk (KERN_WARNING "mtrr: base(0x%lx) is not 4 MiB aligned\n", base);
return -EINVAL;
}
}
@@ -1162,13 +1197,13 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
{
if (type != MTRR_TYPE_WRCOMB)
{
- printk ("mtrr: only write-combining is supported\n");
+ printk (KERN_WARNING "mtrr: only write-combining is supported\n");
return -EINVAL;
}
}
else if (base + size < 0x100000)
{
- printk ("mtrr: cannot set region below 1 MiB (0x%lx,0x%lx)\n",
+ printk (KERN_WARNING "mtrr: cannot set region below 1 MiB (0x%lx,0x%lx)\n",
base, size);
return -EINVAL;
}
@@ -1179,7 +1214,7 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
lbase = lbase >> 1, last = last >> 1);
if (lbase != last)
{
- printk ("mtrr: base(0x%lx) is not aligned on a size(0x%lx) boundary\n",
+ printk (KERN_WARNING "mtrr: base(0x%lx) is not aligned on a size(0x%lx) boundary\n",
base, size);
return -EINVAL;
}
@@ -1196,7 +1231,7 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
/* If the type is WC, check that this processor supports it */
if ( (type == MTRR_TYPE_WRCOMB) && !have_wrcomb () )
{
- printk ("mtrr: your processor doesn't support write-combining\n");
+ printk (KERN_WARNING "mtrr: your processor doesn't support write-combining\n");
return -ENOSYS;
}
increment = increment ? 1 : 0;
@@ -1212,7 +1247,7 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
if ( (base < lbase) || (base + size > lbase + lsize) )
{
up(&main_lock);
- printk ("mtrr: 0x%lx,0x%lx overlaps existing 0x%lx,0x%lx\n",
+ printk (KERN_WARNING "mtrr: 0x%lx,0x%lx overlaps existing 0x%lx,0x%lx\n",
base, size, lbase, lsize);
return -EINVAL;
}
@@ -1245,6 +1280,21 @@ int mtrr_add (unsigned long base, unsigned long size, unsigned int type,
return i;
} /* End Function mtrr_add */
+/**
+ * mtrr_del
+ * @reg: Register returned by mtrr_add
+ * @base: Physical base address
+ * @size: Size of region
+ *
+ * If register is supplied then base and size are ignored. This is
+ * how drivers should call it.
+ *
+ * Releases an MTRR region. If the usage count drops to zero the
+ * register is freed and the region returns to default state.
+ * On success the register is returned, on failure a negative error
+ * code.
+ */
+
int mtrr_del (int reg, unsigned long base, unsigned long size)
/* [SUMMARY] Delete MTRR/decrement usage count.
<reg> The register. If this is less than 0 then <<base>> and <<size>> must
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
index b5602ebec..a12b6b73d 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -790,14 +790,14 @@ void __init setup_arch(char **cmdline_p)
static int __init get_model_name(struct cpuinfo_x86 *c)
{
- unsigned int n, dummy, *v;
+ unsigned int n, dummy, *v, ecx, edx;
/* Actually we must have cpuid or we could never have
* figured out that this was AMD from the vendor info :-).
*/
cpuid(0x80000000, &n, &dummy, &dummy, &dummy);
- if (n < 4)
+ if (n < 0x80000004)
return 0;
cpuid(0x80000001, &dummy, &dummy, &dummy, &(c->x86_capability));
v = (unsigned int *) c->x86_model_id;
@@ -806,13 +806,24 @@ static int __init get_model_name(struct cpuinfo_x86 *c)
cpuid(0x80000004, &v[8], &v[9], &v[10], &v[11]);
c->x86_model_id[48] = 0;
/* Set MTRR capability flag if appropriate */
- if(boot_cpu_data.x86 !=5)
- return 1;
- if((boot_cpu_data.x86_model == 9) ||
- ((boot_cpu_data.x86_model == 8) &&
- (boot_cpu_data.x86_mask >= 8)))
- c->x86_capability |= X86_FEATURE_MTRR;
+ if(boot_cpu_data.x86 == 5) {
+ if((boot_cpu_data.x86_model == 9) ||
+ ((boot_cpu_data.x86_model == 8) &&
+ (boot_cpu_data.x86_mask >= 8)))
+ c->x86_capability |= X86_FEATURE_MTRR;
+ }
+ if (n >= 0x80000005){
+ cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
+ printk("CPU: L1 I Cache: %dK L1 D Cache: %dK\n",
+ ecx>>24, edx>>24);
+ c->x86_cache_size=(ecx>>24)+(edx>>24);
+ }
+ if (n >= 0x80000006){
+ cpuid(0x80000006, &dummy, &dummy, &ecx, &edx);
+ printk("CPU: L2 Cache: %dK\n", ecx>>16);
+ c->x86_cache_size=(ecx>>16);
+ }
return 1;
}
@@ -882,18 +893,7 @@ static int __init amd_model(struct cpuinfo_x86 *c)
}
break;
case 6: /* An Athlon. We can trust the BIOS probably */
- {
-
- u32 ecx, edx, dummy;
- cpuid(0x80000005, &dummy, &dummy, &ecx, &edx);
- printk("L1 I Cache: %dK L1 D Cache: %dK\n",
- ecx>>24, edx>>24);
- cpuid(0x80000006, &dummy, &dummy, &ecx, &edx);
- printk("L2 Cache: %dK\n", ecx>>16);
- c->x86_cache_size = ecx>>16;
- break;
- }
-
+ break;
}
return r;
}
@@ -1021,10 +1021,18 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
/* It isnt really a PCI quirk directly, but the cure is the
same. The MediaGX has deep magic SMM stuff that handles the
SB emulation. It thows away the fifo on disable_dma() which
- is wrong and ruins the audio. */
+ is wrong and ruins the audio.
+
+ Bug2: VSA1 has a wrap bug so that using maximum sized DMA
+ causes bad things. According to NatSemi VSA2 has another
+ bug to do with 'hlt'. I've not seen any boards using VSA2
+ and X doesn't seem to support it either so who cares 8).
+ VSA1 we work around however.
+
+ */
- printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
- isa_dma_bridge_buggy = 1;
+ printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bugs.\n");
+ isa_dma_bridge_buggy = 2;
#endif
/* GXm supports extended cpuid levels 'ala' AMD */
if (c->cpuid_level == 2) {
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
index 84e20b225..b4a7753b8 100644
--- a/arch/i386/kernel/time.c
+++ b/arch/i386/kernel/time.c
@@ -615,6 +615,8 @@ bad_ctc:
void __init time_init(void)
{
+ extern int x86_udelay_tsc;
+
xtime.tv_sec = get_cmos_time();
xtime.tv_usec = 0;
@@ -650,6 +652,11 @@ void __init time_init(void)
if (tsc_quotient) {
fast_gettimeoffset_quotient = tsc_quotient;
use_tsc = 1;
+ /*
+ * We could be more selective here I suspect
+ * and just enable this for the next intel chips ?
+ */
+ x86_udelay_tsc = 1;
#ifndef do_gettimeoffset
do_gettimeoffset = do_fast_gettimeoffset;
#endif
diff --git a/arch/i386/lib/delay.c b/arch/i386/lib/delay.c
index 6918451a6..ca5eeb796 100644
--- a/arch/i386/lib/delay.c
+++ b/arch/i386/lib/delay.c
@@ -12,12 +12,38 @@
#include <linux/sched.h>
#include <linux/delay.h>
+#include <asm/delay.h>
#ifdef __SMP__
#include <asm/smp.h>
#endif
-void __delay(unsigned long loops)
+int x86_udelay_tsc = 0; /* Delay via TSC */
+
+
+/*
+ * Do a udelay using the TSC for any CPU that happens
+ * to have one that we trust. This could be optimised to avoid
+ * the multiply per loop but its a delay loop so who are we kidding...
+ */
+
+static void __rdtsc_delay(unsigned long loops)
+{
+ unsigned long bclock, now;
+
+ rdtscl(bclock);
+ do
+ {
+ rdtscl(now);
+ }
+ while((now-bclock) < loops);
+}
+
+/*
+ * Non TSC based delay loop for 386, 486, MediaGX
+ */
+
+static void __loop_delay(unsigned long loops)
{
int d0;
__asm__ __volatile__(
@@ -30,6 +56,14 @@ void __delay(unsigned long loops)
:"0" (loops));
}
+void __delay(unsigned long loops)
+{
+ if(x86_udelay_tsc)
+ __rdtsc_delay(loops);
+ else
+ __loop_delay(loops);
+}
+
inline void __const_udelay(unsigned long xloops)
{
int d0;
diff --git a/arch/ia64/config.in b/arch/ia64/config.in
index 3d1dd7e02..e22e1dd01 100644
--- a/arch/ia64/config.in
+++ b/arch/ia64/config.in
@@ -80,6 +80,19 @@ if [ "$CONFIG_NET" = "y" ]; then
fi
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/ia64/defconfig b/arch/ia64/defconfig
index a96599889..f0e36f6b2 100644
--- a/arch/ia64/defconfig
+++ b/arch/ia64/defconfig
@@ -38,12 +38,6 @@ CONFIG_PCI_OLD_PROC=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
#
# Additional Block Devices
@@ -55,6 +49,45 @@ CONFIG_PCI_OLD_PROC=y
# CONFIG_BLK_DEV_XD is not set
CONFIG_PARIDE_PARPORT=y
# CONFIG_PARIDE is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=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_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
+CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_PIIX=y
+CONFIG_PIIX_TUNING=y
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDE_MODES=y
# CONFIG_BLK_DEV_HD is not set
#
diff --git a/arch/m68k/config.in b/arch/m68k/config.in
index 5b12f470e..52b81739e 100644
--- a/arch/m68k/config.in
+++ b/arch/m68k/config.in
@@ -152,6 +152,19 @@ if [ "$CONFIG_NET" = "y" ]; then
fi
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/m68k/defconfig b/arch/m68k/defconfig
index cbea6ba63..e11c32b95 100644
--- a/arch/m68k/defconfig
+++ b/arch/m68k/defconfig
@@ -56,13 +56,6 @@ CONFIG_PROC_HARDWARE=y
CONFIG_AMIGA_FLOPPY=y
CONFIG_ATARI_FLOPPY=y
# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_IDE is not set
-# CONFIG_BLK_DEV_IDEDISK is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDEDOUBLER is not set
# CONFIG_AMIGA_Z2RAM is not set
# CONFIG_ATARI_ACSI is not set
# CONFIG_ACSI_MULTI_LUN is not set
@@ -121,6 +114,11 @@ CONFIG_IP_NOSR=y
# CONFIG_NET_SCHED is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/mips/arc/init.c b/arch/mips/arc/init.c
index 81cf6cf74..05200cb42 100644
--- a/arch/mips/arc/init.c
+++ b/arch/mips/arc/init.c
@@ -1,4 +1,4 @@
-/* $Id: init.c,v 1.4 1999/10/09 00:00:57 ralf Exp $
+/* $Id: init.c,v 1.5 2000/03/07 15:45:27 ralf Exp $
* This file is subject to the terms and conditions of the GNU General Public+
* License. See the file "COPYING" in the main directory of this archive
* for more details.
@@ -23,7 +23,7 @@ unsigned short prom_vers, prom_rev;
extern void prom_testtree(void);
-int __init prom_init(int argc, char **argv, char **envp)
+int __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
{
struct linux_promblock *pb;
diff --git a/arch/mips/config.in b/arch/mips/config.in
index c26394e33..1f70c46ad 100644
--- a/arch/mips/config.in
+++ b/arch/mips/config.in
@@ -1,4 +1,4 @@
-# $Id: config.in,v 1.43 2000/03/12 10:07:55 harald Exp $
+# $Id: config.in,v 1.44 2000/03/13 20:55:19 ralf Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
@@ -168,6 +168,19 @@ fi
source drivers/telephony/Config.in
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/mips/defconfig b/arch/mips/defconfig
index 1fda5e771..90b6b4882 100644
--- a/arch/mips/defconfig
+++ b/arch/mips/defconfig
@@ -73,12 +73,8 @@ CONFIG_KMOD=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
#
# Additional Block Devices
@@ -87,10 +83,6 @@ CONFIG_KMOD=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -148,6 +140,13 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_PHONE_IXJ is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
@@ -158,7 +157,6 @@ CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
-CONFIG_ST_EXTRA_DEVS=2
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_SR_EXTRA_DEVS=2
diff --git a/arch/mips/defconfig-ip22 b/arch/mips/defconfig-ip22
index 1fda5e771..90b6b4882 100644
--- a/arch/mips/defconfig-ip22
+++ b/arch/mips/defconfig-ip22
@@ -73,12 +73,8 @@ CONFIG_KMOD=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
#
# Additional Block Devices
@@ -87,10 +83,6 @@ CONFIG_KMOD=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -148,6 +140,13 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_PHONE_IXJ is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
@@ -158,7 +157,6 @@ CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=y
-CONFIG_ST_EXTRA_DEVS=2
CONFIG_BLK_DEV_SR=y
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_SR_EXTRA_DEVS=2
diff --git a/arch/mips/kernel/irixelf.c b/arch/mips/kernel/irixelf.c
index fa9e68e6f..35055ac68 100644
--- a/arch/mips/kernel/irixelf.c
+++ b/arch/mips/kernel/irixelf.c
@@ -1,4 +1,4 @@
-/* $Id: irixelf.c,v 1.25 2000/03/02 02:36:50 ralf Exp $
+/* $Id: irixelf.c,v 1.26 2000/03/07 15:45:28 ralf Exp $
*
* irixelf.c: Code to load IRIX ELF executables which conform to
* the MIPS ABI.
@@ -36,8 +36,6 @@
#include <asm/mipsregs.h>
#include <asm/prctl.h>
-#include <linux/config.h>
-
#define DLINFO_ITEMS 12
#include <linux/elf.h>
@@ -609,8 +607,7 @@ void irix_map_prda_page (void)
/* These are the functions used to load ELF style executables and shared
* libraries. There is no binary dependent code anywhere else.
*/
-static inline int do_load_irix_binary(struct linux_binprm * bprm,
- struct pt_regs * regs)
+static int load_irix_binary(struct linux_binprm * bprm, struct pt_regs * regs)
{
struct elfhdr elf_ex, interp_elf_ex;
struct dentry *interpreter_dentry;
@@ -755,14 +752,11 @@ static inline int do_load_irix_binary(struct linux_binprm * bprm,
sys_close(elf_exec_fileno);
current->personality = PER_IRIX32;
- if (current->exec_domain && current->exec_domain->module)
- __MOD_DEC_USE_COUNT(current->exec_domain->module);
+ put_exec_domain(current->exec_domain);
if (current->binfmt && current->binfmt->module)
__MOD_DEC_USE_COUNT(current->binfmt->module);
current->exec_domain = lookup_exec_domain(current->personality);
current->binfmt = &irix_format;
- if (current->exec_domain && current->exec_domain->module)
- __MOD_INC_USE_COUNT(current->exec_domain->module);
if (current->binfmt && current->binfmt->module)
__MOD_INC_USE_COUNT(current->binfmt->module);
@@ -832,16 +826,6 @@ out_free_ph:
goto out;
}
-static int load_irix_binary(struct linux_binprm * bprm, struct pt_regs * regs)
-{
- int retval;
-
- MOD_INC_USE_COUNT;
- retval = do_load_irix_binary(bprm, regs);
- MOD_DEC_USE_COUNT;
- return retval;
-}
-
/* This is really simpleminded and specialized - we are loading an
* a.out library that is given an ELF header.
*/
@@ -943,13 +927,11 @@ static int load_irix_library(int fd)
int retval = -EACCES;
struct file *file;
- MOD_INC_USE_COUNT;
file = fget(fd);
if (file) {
retval = do_load_irix_library(file);
fput(file);
}
- MOD_DEC_USE_COUNT;
return retval;
}
@@ -1152,10 +1134,6 @@ static int irix_core_dump(long signr, struct pt_regs * regs, struct file *file)
elf_fpregset_t fpu; /* NT_PRFPREG */
struct elf_prpsinfo psinfo; /* NT_PRPSINFO */
-#ifndef CONFIG_BINFMT_IRIX
- MOD_INC_USE_COUNT;
-#endif
-
/* Count what's needed to dump, up to the limit of coredump size. */
segs = 0;
size = 0;
@@ -1365,9 +1343,6 @@ static int irix_core_dump(long signr, struct pt_regs * regs, struct file *file)
end_coredump:
set_fs(fs);
-#ifndef CONFIG_BINFMT_IRIX
- MOD_DEC_USE_COUNT;
-#endif
return has_dumped;
}
diff --git a/arch/mips/kernel/syscalls.h b/arch/mips/kernel/syscalls.h
index 84ab41425..d5edf1660 100644
--- a/arch/mips/kernel/syscalls.h
+++ b/arch/mips/kernel/syscalls.h
@@ -1,4 +1,4 @@
-/* $Id: syscalls.h,v 1.21 2000/02/05 06:47:08 ralf Exp $
+/* $Id: syscalls.h,v 1.22 2000/02/18 00:24:30 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -232,3 +232,5 @@ SYS(sys_stat64, 3)
SYS(sys_lstat64, 3)
SYS(sys_fstat64, 3) /* 4215 */
SYS(sys_pivot_root, 2)
+SYS(sys_mincore, 3)
+SYS(sys_madvise, 3)
diff --git a/arch/mips64/config.in b/arch/mips64/config.in
index be0501f60..5efcf06e6 100644
--- a/arch/mips64/config.in
+++ b/arch/mips64/config.in
@@ -1,4 +1,4 @@
-# $Id: config.in,v 1.15 2000/03/09 15:38:28 ralf Exp $
+# $Id: config.in,v 1.16 2000/03/13 20:55:19 ralf Exp $
#
# For a description of the syntax of this configuration file,
# see the Configure script.
@@ -111,6 +111,19 @@ fi
source drivers/telephony/Config.in
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/mips64/defconfig b/arch/mips64/defconfig
index f34f2e63a..8838fed35 100644
--- a/arch/mips64/defconfig
+++ b/arch/mips64/defconfig
@@ -63,13 +63,10 @@ CONFIG_PCI_NAMES=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
#
# Additional Block Devices
@@ -78,11 +75,6 @@ CONFIG_PCI_NAMES=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -123,6 +115,13 @@ CONFIG_SKB_LARGE=y
# CONFIG_PHONE_IXJ is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/mips64/defconfig-ip27 b/arch/mips64/defconfig-ip27
index f34f2e63a..8838fed35 100644
--- a/arch/mips64/defconfig-ip27
+++ b/arch/mips64/defconfig-ip27
@@ -63,13 +63,10 @@ CONFIG_PCI_NAMES=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_IDE is not set
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_ONLY is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
#
# Additional Block Devices
@@ -78,11 +75,6 @@ CONFIG_PCI_NAMES=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -123,6 +115,13 @@ CONFIG_SKB_LARGE=y
# CONFIG_PHONE_IXJ is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/mips64/kernel/scall_64.S b/arch/mips64/kernel/scall_64.S
index d739e50c1..af3dd1d87 100644
--- a/arch/mips64/kernel/scall_64.S
+++ b/arch/mips64/kernel/scall_64.S
@@ -1,4 +1,4 @@
-/* $Id: scall_64.S,v 1.6 2000/02/18 00:24:30 ralf Exp $
+/* $Id: scall_64.S,v 1.7 2000/02/23 00:41:00 ralf Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -345,3 +345,5 @@ sys_call_table:
PTR sys_ni_syscall
PTR sys_ni_syscall
PTR sys_pivot_root /* 4210 */
+ PTR sys_mincore
+ PTR sys_madvise
diff --git a/arch/mips64/kernel/scall_o32.S b/arch/mips64/kernel/scall_o32.S
index 9d09499c6..246fd8346 100644
--- a/arch/mips64/kernel/scall_o32.S
+++ b/arch/mips64/kernel/scall_o32.S
@@ -1,4 +1,4 @@
-/* $Id: scall_o32.S,v 1.12 2000/03/18 09:02:17 ulfc Exp $
+/* $Id: scall_o32.S,v 1.13 2000/03/18 15:08:06 ulfc Exp $
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
@@ -409,6 +409,8 @@ illegal_syscall:
sys sys_lstat64 3
sys sys_fstat64 3 /* 4210 */
sys sys_pivot_root 2
+ sys sys_mincore 3
+ sys sys_madvise 3
.endm
.macro sys function, nargs
diff --git a/arch/ppc/config.in b/arch/ppc/config.in
index 7d0ab5fa0..38d9dc72e 100644
--- a/arch/ppc/config.in
+++ b/arch/ppc/config.in
@@ -187,6 +187,19 @@ if [ "$CONFIG_NET" = "y" ]; then
fi
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
diff --git a/arch/ppc/defconfig b/arch/ppc/defconfig
index bcab91ec6..5b5288b30 100644
--- a/arch/ppc/defconfig
+++ b/arch/ppc/defconfig
@@ -79,32 +79,6 @@ CONFIG_BOOTX_TEXT=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
-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_IDECS is not set
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_IDEFLOPPY=y
-CONFIG_BLK_DEV_IDESCSI=y
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_BLK_DEV_IDEDMA_PCI is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_AEC6210 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_SL82C105=y
-CONFIG_BLK_DEV_IDE_PMAC=y
-CONFIG_BLK_DEV_IDEDMA_PMAC=y
-CONFIG_IDEDMA_PMAC_AUTO=y
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_IDE_CHIPSETS is not set
# CONFIG_BLK_CPQ_DA is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
@@ -114,8 +88,6 @@ CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_PARIDE is not set
-CONFIG_BLK_DEV_IDE_MODES=y
-# CONFIG_BLK_DEV_HD is not set
#
# Networking options
@@ -160,6 +132,40 @@ CONFIG_ATALK=m
# CONFIG_NET_SCHED is not set
#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+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_IDECS is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+CONFIG_BLK_DEV_IDEFLOPPY=y
+CONFIG_BLK_DEV_IDESCSI=y
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+# CONFIG_BLK_DEV_IDEDMA_PCI is not set
+# CONFIG_BLK_DEV_OFFBOARD is not set
+# CONFIG_BLK_DEV_AEC6210 is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_SL82C105=y
+CONFIG_BLK_DEV_IDE_PMAC=y
+CONFIG_BLK_DEV_IDEDMA_PMAC=y
+CONFIG_IDEDMA_PMAC_AUTO=y
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDE_MODES=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/sh/config.in b/arch/sh/config.in
index fd858e00e..c711ee931 100644
--- a/arch/sh/config.in
+++ b/arch/sh/config.in
@@ -95,6 +95,19 @@ if [ "$CONFIG_NET" = "y" ]; then
fi
mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
+
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
+fi
+endmenu
+
+mainmenu_option next_comment
comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
diff --git a/arch/sh/defconfig b/arch/sh/defconfig
index ea5851d39..a3f901220 100644
--- a/arch/sh/defconfig
+++ b/arch/sh/defconfig
@@ -45,6 +45,21 @@ CONFIG_BINFMT_ELF=y
# Block devices
#
# CONFIG_BLK_DEV_FD is not set
+
+#
+# Additional Block Devices
+#
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
#
@@ -63,16 +78,6 @@ CONFIG_BLK_DEV_IDEDISK=y
#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_IDE_CHIPSETS is not set
-
-#
-# Additional Block Devices
-#
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
# CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_HD is not set
diff --git a/arch/sparc/boot/piggyback.c b/arch/sparc/boot/piggyback.c
index b75edb418..04049be7a 100644
--- a/arch/sparc/boot/piggyback.c
+++ b/arch/sparc/boot/piggyback.c
@@ -1,4 +1,4 @@
-/* $Id: piggyback.c,v 1.2 1998/12/15 12:24:43 jj Exp $
+/* $Id: piggyback.c,v 1.3 2000/03/11 00:22:26 zaitcev Exp $
Simple utility to make a single-image install kernel with initial ramdisk
for Sparc tftpbooting without need to set up nfs.
@@ -29,8 +29,18 @@
#include <sys/types.h>
#include <sys/stat.h>
-/* Note: run this on an a.out kernel (use elftoaout for it), as PROM looks for a.out image onlly
- usage: piggyback vmlinux System.map tail, where tail is gzipped fs of the initial ramdisk */
+/*
+ * Note: run this on an a.out kernel (use elftoaout for it),
+ * as PROM looks for a.out image only.
+ */
+
+void usage(void)
+{
+ /* fs_img.gz is an image of initial ramdisk. */
+ fprintf(stderr, "Usage: piggyback vmlinux.aout System.map fs_img.gz\n");
+ fprintf(stderr, "\tKernel image will be modified in place.\n");
+ exit(1);
+}
void die(char *str)
{
@@ -45,7 +55,8 @@ int main(int argc,char **argv)
FILE *map;
struct stat s;
int image, tail;
-
+
+ if (argc != 4) usage();
start = end = 0;
if (stat (argv[3], &s) < 0) die (argv[3]);
map = fopen (argv[2], "r");
diff --git a/arch/sparc/config.in b/arch/sparc/config.in
index 756e531c2..adb0ebe4c 100644
--- a/arch/sparc/config.in
+++ b/arch/sparc/config.in
@@ -1,4 +1,4 @@
-# $Id: config.in,v 1.87 2000/02/27 19:34:12 davem Exp $
+# $Id: config.in,v 1.88 2000/03/13 03:40:27 davem Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
@@ -74,10 +74,9 @@ fi
endmenu
mainmenu_option next_comment
-comment 'Floppy, IDE, and other block devices'
+comment 'Floppy and other block devices'
bool 'Normal floppy disk support' CONFIG_BLK_DEV_FD
-define_bool CONFIG_BLK_DEV_IDE n
bool 'Multiple devices driver support' CONFIG_BLK_DEV_MD
if [ "$CONFIG_BLK_DEV_MD" = "y" ]; then
tristate ' Linear (append) mode' CONFIG_MD_LINEAR
@@ -109,6 +108,24 @@ if [ "$CONFIG_ISDN" != "n" ]; then
fi
endmenu
+
+define_bool CONFIG_IDE n
+define_bool CONFIG_BLK_DEV_IDE_MODES n
+define_bool CONFIG_BLK_DEV_HD n
+
+# mainmenu_option next_comment
+# comment 'ATA/IDE/MFM/RLL support'
+#
+# tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+#
+# if [ "$CONFIG_IDE" != "n" ]; then
+# source drivers/ide/Config.in
+# else
+# define_bool CONFIG_BLK_DEV_IDE_MODES n
+# define_bool CONFIG_BLK_DEV_HD n
+# fi
+# endmenu
+
mainmenu_option next_comment
comment 'SCSI support'
diff --git a/arch/sparc/defconfig b/arch/sparc/defconfig
index e719d9214..de483af6e 100644
--- a/arch/sparc/defconfig
+++ b/arch/sparc/defconfig
@@ -101,7 +101,6 @@ CONFIG_KMOD=y
# Floppy, IDE, and other block devices
#
CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_IDE is not set
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=m
CONFIG_MD_STRIPED=m
@@ -170,6 +169,11 @@ CONFIG_DECNET_SIOCGIFCONF=y
# CONFIG_ISDN is not set
#
+# ATA/IDE/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
# SCSI support
#
CONFIG_SCSI=y
diff --git a/arch/sparc/kernel/sys_solaris.c b/arch/sparc/kernel/sys_solaris.c
index 6c46c60f0..8a9d54913 100644
--- a/arch/sparc/kernel/sys_solaris.c
+++ b/arch/sparc/kernel/sys_solaris.c
@@ -15,12 +15,14 @@
#include <linux/smp.h>
#include <linux/smp_lock.h>
+/* CHECKME: this stuff looks rather bogus */
asmlinkage int
do_solaris_syscall (struct pt_regs *regs)
{
int ret;
lock_kernel();
+ put_exec_domain(current->exec_domain);
current->personality = PER_SVR4;
current->exec_domain = lookup_exec_domain(PER_SVR4);
diff --git a/arch/sparc/kernel/sys_sunos.c b/arch/sparc/kernel/sys_sunos.c
index 1d6f208f6..262f6afdd 100644
--- a/arch/sparc/kernel/sys_sunos.c
+++ b/arch/sparc/kernel/sys_sunos.c
@@ -1,4 +1,4 @@
-/* $Id: sys_sunos.c,v 1.114 2000/03/07 22:27:27 davem Exp $
+/* $Id: sys_sunos.c,v 1.115 2000/03/13 21:57:23 davem Exp $
* sys_sunos.c: SunOS specific syscall compatibility support.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -296,57 +296,6 @@ asmlinkage void sunos_madvise(unsigned long address, unsigned long len,
unlock_kernel();
}
-/* Places into character array, the status of all the pages in the passed
- * range from 'addr' to 'addr + len'. -1 on failure, 0 on success...
- * The encoding in each character is:
- * low-bit is zero == Page is not in physical ram right now
- * low-bit is one == Page is currently residing in core
- * All other bits are undefined within the character so there...
- * Also, if you try to get stats on an area outside of the user vm area
- * *or* the passed base address is not aligned on a page boundary you
- * get an error.
- */
-asmlinkage int sunos_mincore(unsigned long addr, unsigned long len, char *array)
-{
- pgd_t *pgdp;
- pmd_t *pmdp;
- pte_t *ptep;
- unsigned long limit;
- int num_pages, pnum, retval = -EINVAL;
-
- lock_kernel();
- if(addr & ~(PAGE_MASK))
- goto out;
-
- num_pages = (len / PAGE_SIZE);
- retval = -EFAULT;
- if(verify_area(VERIFY_WRITE, array, num_pages))
- goto out;
- retval = -ENOMEM;
- if((addr >= PAGE_OFFSET) || ((addr + len) > PAGE_OFFSET))
- goto out; /* I'm sure you're curious about kernel mappings.. */
-
- /* Wheee, go through pte's */
- pnum = 0;
- for(limit = addr + len; addr < limit; addr += PAGE_SIZE, pnum++) {
- pgdp = pgd_offset(current->mm, addr);
- if(pgd_none(*pgdp))
- goto out; /* As per SunOS manpage */
- pmdp = pmd_offset(pgdp, addr);
- if(pmd_none(*pmdp))
- goto out; /* As per SunOS manpage */
- ptep = pte_offset(pmdp, addr);
- if(pte_none(*ptep))
- goto out; /* As per SunOS manpage */
- /* Page in core or Swapped page? */
- __put_user((pte_present(*ptep) ? 1 : 0), &array[pnum]);
- }
- retval = 0; /* Success... I think... */
-out:
- unlock_kernel();
- return retval;
-}
-
/* This just wants the soft limit (ie. rlim_cur element) of the RLIMIT_NOFILE
* resource limit and is for backwards compatibility with older sunos
* revs.
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S
index 8746958d7..42c072164 100644
--- a/arch/sparc/kernel/systbls.S
+++ b/arch/sparc/kernel/systbls.S
@@ -1,4 +1,4 @@
-/* $Id: systbls.S,v 1.94 2000/02/16 07:31:30 davem Exp $
+/* $Id: systbls.S,v 1.95 2000/03/13 21:57:23 davem Exp $
* systbls.S: System call entry point tables for OS compatibility.
* The native Linux system call table lives here also.
*
@@ -33,7 +33,7 @@ sys_call_table:
/*60*/ .long sys_umask, sys_chroot, sys_newfstat, sys_fstat64, sys_getpagesize
/*65*/ .long sys_msync, sys_vfork, sys_pread, sys_pwrite, sys_geteuid
/*70*/ .long sys_getegid, sys_mmap, sys_setreuid, sys_munmap, sys_mprotect
-/*75*/ .long sys_nis_syscall, sys_vhangup, sys_truncate64, sys_nis_syscall, sys_getgroups16
+/*75*/ .long sys_nis_syscall, sys_vhangup, sys_truncate64, sys_mincore, sys_getgroups16
/*80*/ .long sys_setgroups16, sys_getpgrp, sys_setgroups, sys_setitimer, sys_ftruncate64
/*85*/ .long sys_swapon, sys_getitimer, sys_setuid, sys_sethostname, sys_setgid
/*90*/ .long sys_dup2, sys_setfsuid, sys_fcntl, sys_select, sys_setfsgid
@@ -104,7 +104,7 @@ sunos_sys_table:
.long sunos_nosys, sunos_sbrk, sunos_sstk
.long sunos_mmap, sunos_vadvise, sys_munmap
.long sys_mprotect, sunos_madvise, sys_vhangup
- .long sunos_nosys, sunos_mincore, sys_getgroups16
+ .long sunos_nosys, sys_mincore, sys_getgroups16
.long sys_setgroups16, sys_getpgrp, sunos_setpgrp
.long sys_setitimer, sunos_nosys, sys_swapon
.long sys_getitimer, sys_gethostname, sys_sethostname
diff --git a/arch/sparc64/config.in b/arch/sparc64/config.in
index 47c6a5afd..a1fb222c1 100644
--- a/arch/sparc64/config.in
+++ b/arch/sparc64/config.in
@@ -1,4 +1,4 @@
-# $Id: config.in,v 1.99 2000/02/27 19:34:17 davem Exp $
+# $Id: config.in,v 1.101 2000/03/13 05:49:55 jj Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#
@@ -98,29 +98,22 @@ fi
tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
tristate 'Network block device support' CONFIG_BLK_DEV_NBD
-if [ "$CONFIG_PCI" = "y" ]; then
- tristate 'Ultra/PCI IDE disk/cdrom/tape/floppy support' CONFIG_BLK_DEV_IDE
- if [ "$CONFIG_BLK_DEV_IDE" != "n" ]; then
- dep_tristate ' Include IDE/ATA-2 DISK support' CONFIG_BLK_DEV_IDEDISK $CONFIG_BLK_DEV_IDE
- dep_tristate ' Include IDE/ATAPI CDROM support' CONFIG_BLK_DEV_IDECD $CONFIG_BLK_DEV_IDE
- dep_tristate ' Include IDE/ATAPI TAPE support' CONFIG_BLK_DEV_IDETAPE $CONFIG_BLK_DEV_IDE
- dep_tristate ' Include IDE/ATAPI FLOPPY support' CONFIG_BLK_DEV_IDEFLOPPY $CONFIG_BLK_DEV_IDE
- dep_tristate ' SCSI emulation support' CONFIG_BLK_DEV_IDESCSI $CONFIG_BLK_DEV_IDE
- define_bool CONFIG_BLK_DEV_IDEPCI y
- define_bool CONFIG_BLK_DEV_IDEDMA y
- define_bool CONFIG_IDEDMA_AUTO y
- define_bool CONFIG_IDEDMA_NEW_DRIVE_LISTINGS y
- define_bool CONFIG_BLK_DEV_NS87415 y
- define_bool CONFIG_BLK_DEV_CMD64X y
- define_bool CONFIG_BLK_DEV_IDE_MODES y
- fi
+if [ "$CONFIG_NET" = "y" ]; then
+ source net/Config.in
fi
-endmenu
+mainmenu_option next_comment
+comment 'ATA/IDE/MFM/RLL support'
-if [ "$CONFIG_NET" = "y" ]; then
- source net/Config.in
+tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+
+if [ "$CONFIG_IDE" != "n" ]; then
+ source drivers/ide/Config.in
+else
+ define_bool CONFIG_BLK_DEV_IDE_MODES n
+ define_bool CONFIG_BLK_DEV_HD n
fi
+endmenu
mainmenu_option next_comment
comment 'SCSI support'
@@ -172,12 +165,16 @@ if [ "$CONFIG_SCSI" != "n" ]; then
bool ' Collect statistics to report in /proc' CONFIG_AIC7XXX_PROC_STATS N
int ' Delay in seconds after SCSI bus reset' CONFIG_AIC7XXX_RESET_DELAY 5
fi
+ dep_tristate 'NCR53C8XX SCSI support' CONFIG_SCSI_NCR53C8XX $CONFIG_SCSI
dep_tristate 'SYM53C8XX SCSI support' CONFIG_SCSI_SYM53C8XX $CONFIG_SCSI
- if [ "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
+ if [ "$CONFIG_SCSI_NCR53C8XX" != "n" -o "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
int 'default tagged command queue depth' CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS 8
int 'maximum number of queued commands' CONFIG_SCSI_NCR53C8XX_MAX_TAGS 32
int 'synchronous transfers frequency in MHz' CONFIG_SCSI_NCR53C8XX_SYNC 10
bool ' enable profiling' CONFIG_SCSI_NCR53C8XX_PROFILE
+ if [ "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
+ bool ' include support for the NCR PQS/PDS SCSI card' CONFIG_SCSI_NCR53C8XX_PQS_PDS
+ fi
if [ "$CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS" = "0" ]; then
bool ' not allow targets to disconnect' CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
fi
@@ -219,7 +216,7 @@ if [ "$CONFIG_NET" = "y" ]; then
mainmenu_option next_comment
comment 'Ethernet (10 or 100Mbit)'
- bool 'Sun LANCE support' CONFIG_SUNLANCE
+ tristate 'Sun LANCE support' CONFIG_SUNLANCE
tristate 'Sun Happy Meal 10/100baseT support' CONFIG_HAPPYMEAL
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Sun BigMAC 10/100baseT support (EXPERIMENTAL)' CONFIG_SUNBMAC
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index a61d4d049..db85cfe1e 100644
--- a/arch/sparc64/defconfig
+++ b/arch/sparc64/defconfig
@@ -128,19 +128,6 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_RAM is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_IDE=y
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_BLK_DEV_IDECD=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_IDEDMA_AUTO=y
-CONFIG_IDEDMA_NEW_DRIVE_LISTINGS=y
-CONFIG_BLK_DEV_NS87415=y
-CONFIG_BLK_DEV_CMD64X=y
-CONFIG_BLK_DEV_IDE_MODES=y
#
# Networking options
@@ -195,6 +182,71 @@ CONFIG_DECNET_SIOCGIFCONF=y
# CONFIG_NET_SCHED is not set
#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDEDMA_AUTO=y
+CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
+# CONFIG_BLK_DEV_AEC6210 is not set
+# CONFIG_AEC6210_TUNING is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD7409 is not set
+# CONFIG_AMD7409_OVERRIDE is not set
+CONFIG_BLK_DEV_CMD64X=y
+# CONFIG_CMD64X_RAID is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_HPT366_FIP is not set
+# CONFIG_HPT366_MODE3 is not set
+CONFIG_BLK_DEV_NS87415=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_PDC202XX is not set
+# CONFIG_PDC202XX_BURST is not set
+# CONFIG_PDC202XX_MASTER is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDE_MODES=y
+
+#
# SCSI support
#
CONFIG_SCSI=y
@@ -228,11 +280,13 @@ CONFIG_AIC7XXX_TAGGED_QUEUEING=y
CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
CONFIG_AIC7XXX_PROC_STATS=y
CONFIG_AIC7XXX_RESET_DELAY=5
+CONFIG_SCSI_NCR53C8XX=y
CONFIG_SCSI_SYM53C8XX=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=4
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=10
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
+# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set
# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set
CONFIG_SCSI_QLOGIC_ISP=y
diff --git a/arch/sparc64/kernel/binfmt_aout32.c b/arch/sparc64/kernel/binfmt_aout32.c
index 009c506a0..3e95ed9cf 100644
--- a/arch/sparc64/kernel/binfmt_aout32.c
+++ b/arch/sparc64/kernel/binfmt_aout32.c
@@ -82,8 +82,7 @@ if (file->f_op->llseek) { \
* dumping of the process results in another error..
*/
-static inline int
-do_aout32_core_dump(long signr, struct pt_regs * regs, struct file *file)
+static int aout32_core_dump(long signr, struct pt_regs *regs, struct file *file)
{
mm_segment_t fs;
int has_dumped = 0;
@@ -143,17 +142,6 @@ end_coredump:
return has_dumped;
}
-static int
-aout32_core_dump(long signr, struct pt_regs * regs, struct file * file)
-{
- int retval;
-
- MOD_INC_USE_COUNT;
- retval = do_aout32_core_dump(signr, regs, file);
- MOD_DEC_USE_COUNT;
- return retval;
-}
-
/*
* create_aout32_tables() parses the env- and arg-strings in new user
* memory and creates the pointer tables from them, and puts their
@@ -207,8 +195,7 @@ static u32 *create_aout32_tables(char * p, struct linux_binprm * bprm)
* libraries. There is no binary dependent code anywhere else.
*/
-static inline int do_load_aout32_binary(struct linux_binprm * bprm,
- struct pt_regs * regs)
+static int load_aout32_binary(struct linux_binprm * bprm, struct pt_regs * regs)
{
struct exec ex;
struct file * file;
@@ -320,14 +307,11 @@ static inline int do_load_aout32_binary(struct linux_binprm * bprm,
}
}
beyond_if:
- if (current->exec_domain && current->exec_domain->module)
- __MOD_DEC_USE_COUNT(current->exec_domain->module);
+ put_exec_domain(current->exec_domain);
if (current->binfmt && current->binfmt->module)
__MOD_DEC_USE_COUNT(current->binfmt->module);
current->exec_domain = lookup_exec_domain(current->personality);
current->binfmt = &aout32_format;
- if (current->exec_domain && current->exec_domain->module)
- __MOD_INC_USE_COUNT(current->exec_domain->module);
if (current->binfmt && current->binfmt->module)
__MOD_INC_USE_COUNT(current->binfmt->module);
@@ -358,21 +342,8 @@ beyond_if:
return 0;
}
-
-static int
-load_aout32_binary(struct linux_binprm * bprm, struct pt_regs * regs)
-{
- int retval;
-
- MOD_INC_USE_COUNT;
- retval = do_load_aout32_binary(bprm, regs);
- MOD_DEC_USE_COUNT;
- return retval;
-}
-
/* N.B. Move to .h file and use code in fs/binfmt_aout.c? */
-static inline int
-do_load_aout32_library(int fd)
+static int load_aout32_library(int fd)
{
struct file * file;
struct inode * inode;
@@ -444,17 +415,6 @@ out:
return retval;
}
-static int
-load_aout32_library(int fd)
-{
- int retval;
-
- MOD_INC_USE_COUNT;
- retval = do_load_aout32_library(fd);
- MOD_DEC_USE_COUNT;
- return retval;
-}
-
static int __init init_aout32_binfmt(void)
{
return register_binfmt(&aout32_format);
diff --git a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c
index 39a000ef3..d3a3814a8 100644
--- a/arch/sparc64/kernel/ioctl32.c
+++ b/arch/sparc64/kernel/ioctl32.c
@@ -1,4 +1,4 @@
-/* $Id: ioctl32.c,v 1.80 2000/02/17 06:45:09 jj Exp $
+/* $Id: ioctl32.c,v 1.82 2000/03/13 21:57:27 davem Exp $
* ioctl32.c: Conversion between 32bit and 64bit native ioctls.
*
* Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com)
@@ -34,6 +34,7 @@
#include <linux/cdrom.h>
#include <linux/loop.h>
#include <linux/auto_fs.h>
+#include <linux/devfs_fs.h>
#include <linux/tty.h>
#include <linux/vt_kern.h>
#include <linux/fb.h>
@@ -2334,6 +2335,10 @@ COMPATIBLE_IOCTL(PPPIOCSDEBUG)
COMPATIBLE_IOCTL(PPPIOCNEWUNIT)
COMPATIBLE_IOCTL(PPPIOCATTACH)
COMPATIBLE_IOCTL(PPPIOCDETACH)
+COMPATIBLE_IOCTL(PPPIOCSMRRU)
+COMPATIBLE_IOCTL(PPPIOCCONNECT)
+COMPATIBLE_IOCTL(PPPIOCDISCONN)
+COMPATIBLE_IOCTL(PPPIOCATTCHAN)
/* CDROM stuff */
COMPATIBLE_IOCTL(CDROMPAUSE)
COMPATIBLE_IOCTL(CDROMRESUME)
@@ -2517,6 +2522,11 @@ COMPATIBLE_IOCTL(AUTOFS_IOC_FAIL)
COMPATIBLE_IOCTL(AUTOFS_IOC_CATATONIC)
COMPATIBLE_IOCTL(AUTOFS_IOC_PROTOVER)
COMPATIBLE_IOCTL(AUTOFS_IOC_EXPIRE)
+/* DEVFS */
+COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV)
+COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK)
+COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE)
+COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK)
/* Raw devices */
COMPATIBLE_IOCTL(RAW_SETBIND)
COMPATIBLE_IOCTL(RAW_GETBIND)
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c
index 1fc0b1ba5..d4ecb0f4f 100644
--- a/arch/sparc64/kernel/sys_sparc32.c
+++ b/arch/sparc64/kernel/sys_sparc32.c
@@ -1,4 +1,4 @@
-/* $Id: sys_sparc32.c,v 1.134 2000/03/07 22:27:30 davem Exp $
+/* $Id: sys_sparc32.c,v 1.136 2000/03/13 21:57:29 davem Exp $
* sys_sparc32.c: Conversion between 32bit and 64bit native syscalls.
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
@@ -3645,7 +3645,7 @@ struct nfsctl_arg32 {
};
union nfsctl_res32 {
- struct knfs_fh cr32_getfh;
+ __u8 cr32_getfh[NFS_FHSIZE];
u32 cr32_debug;
};
@@ -4218,3 +4218,12 @@ out_sem:
out:
return ret;
}
+
+extern asmlinkage long sys_mincore(unsigned long start, size_t len, unsigned char *vec);
+
+asmlinkage long sys32_mincore(unsigned long start, u32 __len, unsigned char *vec)
+{
+ size_t len = (size_t) __len;
+
+ return sys_mincore(start, len, vec);
+}
diff --git a/arch/sparc64/kernel/sys_sunos32.c b/arch/sparc64/kernel/sys_sunos32.c
index 9673cdd36..f7f5964e9 100644
--- a/arch/sparc64/kernel/sys_sunos32.c
+++ b/arch/sparc64/kernel/sys_sunos32.c
@@ -1,4 +1,4 @@
-/* $Id: sys_sunos32.c,v 1.40 2000/03/07 22:27:31 davem Exp $
+/* $Id: sys_sunos32.c,v 1.41 2000/03/13 21:57:31 davem Exp $
* sys_sunos32.c: SunOS binary compatability layer on sparc64.
*
* Copyright (C) 1995, 1996, 1997 David S. Miller (davem@caip.rutgers.edu)
@@ -252,56 +252,6 @@ asmlinkage void sunos_madvise(u32 address, u32 len, u32 strategy)
unlock_kernel();
}
-/* Places into character array, the status of all the pages in the passed
- * range from 'addr' to 'addr + len'. -1 on failure, 0 on success...
- * The encoding in each character is:
- * low-bit is zero == Page is not in physical ram right now
- * low-bit is one == Page is currently residing in core
- * All other bits are undefined within the character so there...
- * Also, if you try to get stats on an area outside of the user vm area
- * *or* the passed base address is not aligned on a page boundary you
- * get an error.
- */
-asmlinkage int sunos_mincore(u32 __addr, u32 len, u32 u_array)
-{
- pgd_t *pgdp;
- pmd_t *pmdp;
- pte_t *ptep;
- unsigned long limit, addr = (unsigned long)__addr;
- int num_pages, pnum, retval = -EINVAL;
- char *array = (char *)A(u_array);
-
- lock_kernel();
- if(addr & ~(4096))
- goto out;
- num_pages = (len / 4096);
- retval = -EFAULT;
- if(verify_area(VERIFY_WRITE, array, num_pages))
- goto out;
- retval = -ENOMEM;
- if((addr >= 0xf0000000) || ((addr + len) > 0xf0000000))
- goto out; /* I'm sure you're curious about kernel mappings.. */
- /* Wheee, go through pte's */
- pnum = 0;
- for(limit = addr + len; addr < limit; addr += 4096, pnum++) {
- pgdp = pgd_offset(current->mm, addr);
- if(pgd_none(*pgdp))
- goto out; /* As per SunOS manpage */
- pmdp = pmd_offset(pgdp, addr);
- if(pmd_none(*pmdp))
- goto out; /* As per SunOS manpage */
- ptep = pte_offset(pmdp, addr);
- if(pte_none(*ptep))
- goto out; /* As per SunOS manpage */
- /* Page in core or Swapped page? */
- __put_user((pte_present(*ptep) ? 1 : 0), &array[pnum]);
- }
- retval = 0; /* Success... I think... */
-out:
- unlock_kernel();
- return retval;
-}
-
/* This just wants the soft limit (ie. rlim_cur element) of the RLIMIT_NOFILE
* resource limit and is for backwards compatibility with older sunos
* revs.
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
index 1f7ab3fef..0a0edbf82 100644
--- a/arch/sparc64/kernel/systbls.S
+++ b/arch/sparc64/kernel/systbls.S
@@ -1,4 +1,4 @@
-/* $Id: systbls.S,v 1.68 2000/02/16 07:31:38 davem Exp $
+/* $Id: systbls.S,v 1.69 2000/03/13 21:57:28 davem Exp $
* systbls.S: System call entry point tables for OS compatibility.
* The native Linux system call table lives here also.
*
@@ -34,7 +34,7 @@ sys_call_table32:
/*60*/ .word sys_umask, sys_chroot, sys32_newfstat, sys_fstat64, sys_getpagesize
.word sys_msync, sys_vfork, sys32_pread, sys32_pwrite, sys_geteuid
/*70*/ .word sys_getegid, sys32_mmap, sys_setreuid, sys_munmap, sys_mprotect
- .word sys_nis_syscall, sys_vhangup, sys32_truncate64, sys_nis_syscall, sys32_getgroups16
+ .word sys_nis_syscall, sys_vhangup, sys32_truncate64, sys32_mincore, sys32_getgroups16
/*80*/ .word sys32_setgroups16, sys_getpgrp, sys_setgroups, sys32_setitimer, sys32_ftruncate64
.word sys_swapon, sys32_getitimer, sys_setuid, sys_sethostname, sys_setgid
/*90*/ .word sys_dup2, sys_setfsuid, sys32_fcntl, sys32_select, sys_setfsgid
@@ -93,7 +93,7 @@ sys_call_table:
/*60*/ .word sys_umask, sys_chroot, sys_newfstat, sys_nis_syscall, sys_getpagesize
.word sys_msync, sys_vfork, sys_pread, sys_pwrite, sys_nis_syscall
/*70*/ .word sys_nis_syscall, sys_mmap, sys_nis_syscall, sys64_munmap, sys_mprotect
- .word sys_nis_syscall, sys_vhangup, sys_nis_syscall, sys_nis_syscall, sys_getgroups
+ .word sys_nis_syscall, sys_vhangup, sys_nis_syscall, sys_mincore, sys_getgroups
/*80*/ .word sys_setgroups, sys_getpgrp, sys_nis_syscall, sys_setitimer, sys_nis_syscall
.word sys_swapon, sys_getitimer, sys_nis_syscall, sys_sethostname, sys_nis_syscall
/*90*/ .word sys_dup2, sys_nis_syscall, sys_fcntl, sys_select, sys_nis_syscall
@@ -164,7 +164,7 @@ sunos_sys_table:
.word sunos_nosys, sunos_sbrk, sunos_sstk
.word sunos_mmap, sunos_vadvise, sys_munmap
.word sys_mprotect, sunos_madvise, sys_vhangup
- .word sunos_nosys, sunos_mincore, sys32_getgroups16
+ .word sunos_nosys, sys32_mincore, sys32_getgroups16
.word sys32_setgroups16, sys_getpgrp, sunos_setpgrp
.word sys32_setitimer, sunos_nosys, sys_swapon
.word sys32_getitimer, sys_gethostname, sys_sethostname
diff --git a/arch/sparc64/solaris/misc.c b/arch/sparc64/solaris/misc.c
index 9e2bd4118..b77a27236 100644
--- a/arch/sparc64/solaris/misc.c
+++ b/arch/sparc64/solaris/misc.c
@@ -1,4 +1,4 @@
-/* $Id: misc.c,v 1.22 2000/02/16 07:31:41 davem Exp $
+/* $Id: misc.c,v 1.23 2000/03/13 21:57:34 davem Exp $
* misc.c: Miscelaneous syscall emulation for Solaris
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
@@ -721,11 +721,8 @@ asmlinkage void solaris_register(void)
{
lock_kernel();
current->personality = PER_SVR4;
- if (current->exec_domain && current->exec_domain->module)
- __MOD_DEC_USE_COUNT(current->exec_domain->module);
+ put_exec_domain(current->exec_domain);
current->exec_domain = lookup_exec_domain(current->personality);
- if (current->exec_domain && current->exec_domain->module)
- __MOD_INC_USE_COUNT(current->exec_domain->module);
unlock_kernel();
}
diff --git a/arch/sparc64/solaris/systbl.S b/arch/sparc64/solaris/systbl.S
index 17562bafd..ca78499b1 100644
--- a/arch/sparc64/solaris/systbl.S
+++ b/arch/sparc64/solaris/systbl.S
@@ -1,4 +1,4 @@
-/* $Id: systbl.S,v 1.10 2000/01/12 02:59:26 davem Exp $
+/* $Id: systbl.S,v 1.11 2000/03/13 21:57:35 davem Exp $
* systbl.S: System call entry point table for Solaris compatibility.
*
* Copyright (C) 1997,1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
@@ -142,7 +142,7 @@ solaris_sys_table:
.word solaris_unimplemented /* async 111 */
.word solaris_unimplemented /* priocntlsys 112 */
.word solaris_pathconf /* pathconf sd 113 */
- .word solaris_unimplemented /* mincore xdx 114 */
+ .word CHAIN(mincore) /* mincore d 114 */
.word solaris_mmap /* mmap xxxxdx 115 */
.word CHAIN(mprotect) /* mprotect xdx 116 */
.word CHAIN(munmap) /* munmap xd 117 */