summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/Makefile12
-rw-r--r--arch/i386/boot/bootsect.S4
-rw-r--r--arch/i386/boot/setup.S6
-rw-r--r--arch/i386/config.in138
-rw-r--r--arch/i386/defconfig2
-rw-r--r--arch/i386/kernel/entry.S3
-rw-r--r--arch/i386/kernel/pci-pc.c2
-rw-r--r--arch/i386/kernel/ptrace.c2
-rw-r--r--arch/i386/kernel/setup.c157
-rw-r--r--arch/i386/mm/init.c59
-rw-r--r--arch/mips/sgi/kernel/indy_timer.c4
-rw-r--r--arch/mips64/Makefile4
-rw-r--r--arch/mips64/defconfig-ip229
-rw-r--r--arch/mips64/sgi-ip22/Makefile2
-rw-r--r--arch/mips64/sgi-ip22/ip22-berr.c95
-rw-r--r--arch/mips64/sgi-ip22/ip22-timer.c2
-rw-r--r--arch/mips64/sgi-ip27/ip27-setup.c6
-rw-r--r--arch/ppc/Makefile2
-rw-r--r--arch/ppc/boot/Makefile8
-rw-r--r--arch/ppc/config.in2
-rw-r--r--arch/ppc/kernel/Makefile7
-rw-r--r--arch/ppc/kernel/chrp_setup.c8
-rw-r--r--arch/ppc/kernel/hashtable.S46
-rw-r--r--arch/ppc/kernel/head.S180
-rw-r--r--arch/ppc/kernel/misc.S28
-rw-r--r--arch/ppc/kernel/pci.c7
-rw-r--r--arch/ppc/kernel/pmac_setup.c21
-rw-r--r--arch/ppc/kernel/pmac_support.c2
-rw-r--r--arch/ppc/kernel/ppc_ksyms.c12
-rw-r--r--arch/ppc/kernel/prom.c22
-rw-r--r--arch/ppc/kernel/residual.c5
-rw-r--r--arch/ppc/kernel/setup.c26
-rw-r--r--arch/ppc/kernel/traps.c23
-rw-r--r--arch/ppc/lib/string.S26
-rw-r--r--arch/ppc/mm/init.c67
-rw-r--r--arch/ppc/pmac_defconfig254
36 files changed, 800 insertions, 453 deletions
diff --git a/arch/i386/Makefile b/arch/i386/Makefile
index e13adc089..9978cac9d 100644
--- a/arch/i386/Makefile
+++ b/arch/i386/Makefile
@@ -17,7 +17,6 @@
#
LD=$(CROSS_COMPILE)ld -m elf_i386
-CPP=$(CC) -E
OBJCOPY=$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S
LDFLAGS=-e stext
LINKFLAGS =-T $(TOPDIR)/arch/i386/vmlinux.lds $(LDFLAGS)
@@ -58,6 +57,12 @@ CFLAGS += $(shell if $(CC) -march=i686 -S -o /dev/null -xc /dev/null >/dev/null
AFLAGS := $(AFLAGS) -DCPU=686
endif
+ifdef CONFIG_MK7
+CFLAGS := $(CFLAGS) -DCPU=686 -march=pentiumpro -mpentiumpro -malign-functions=4 -fschedule-insns2 -mwide-multiply -fexpensive-optimizations
+CFLAGS += $(shell if $(CC) -march=i686 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-march=i686"; fi)
+AFLAGS := $(AFLAGS) -DCPU=686
+endif
+
HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
SUBDIRS := $(SUBDIRS) arch/i386/kernel arch/i386/mm arch/i386/lib
@@ -80,10 +85,13 @@ MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot
vmlinux: arch/i386/vmlinux.lds
arch/i386/vmlinux.lds: arch/i386/vmlinux.lds.S FORCE
- gcc -E -C -P -I$(HPATH) -imacros $(HPATH)/asm-i386/page_offset.h -Ui386 arch/i386/vmlinux.lds.S >arch/i386/vmlinux.lds
+ $(CPP) -C -P -imacros $(HPATH)/asm-i386/page_offset.h -Ui386 arch/i386/vmlinux.lds.S >arch/i386/vmlinux.lds
FORCE: ;
+.PHONY: zImage bzImage compressed zlilo bzlilo zdisk bzdisk install \
+ clean archclean archmrproper archdep
+
zImage: vmlinux
@$(MAKEBOOT) zImage
diff --git a/arch/i386/boot/bootsect.S b/arch/i386/boot/bootsect.S
index ffddb4327..e7327e1e1 100644
--- a/arch/i386/boot/bootsect.S
+++ b/arch/i386/boot/bootsect.S
@@ -247,7 +247,7 @@ die: jne die # es must be at 64kB boundary
xorw %bx, %bx # bx is starting address within segment
rp_read:
#ifdef __BIG_KERNEL__
- lcall bootsect_kludge # in setup.S
+ .word 0x1eff, 0x0220 # lcall *bootsect_kludge in setup.S
#else
movw %es, %ax
subw $SYSSEG, %ax
@@ -401,7 +401,7 @@ kill_motor:
pushw %dx
movw $0x3f2, %dx
xorb %al, %al
- outw %al, %dx
+ outb %al, %dx
popw %dx
ret
diff --git a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S
index 1a6d6baa8..859c7248b 100644
--- a/arch/i386/boot/setup.S
+++ b/arch/i386/boot/setup.S
@@ -145,7 +145,7 @@ start_of_setup:
#ifdef SAFE_RESET_DISK_CONTROLLER
# Reset the disk controller.
movw $0x0000, %ax
- movb $0x80, $dl
+ movb $0x80, %dl
int $0x13
#endif
@@ -400,7 +400,7 @@ is_disk1:
subw $DELTA_INITSEG, %ax # aka INITSEG
movw %ax, %ds
xorw %ax, %ax
- movw %ax, 0xa0 # set table length to 0
+ movw %ax, (0xa0) # set table length to 0
movb $0xc0, %ah
stc
int $0x15 # moves feature table to es:bx
@@ -496,7 +496,7 @@ done_apm_bios:
cmpw $0, %cs:realmode_swtch
jz rmodeswtch_normal
- call *%cs:realmode_swtch
+ lcall %cs:realmode_swtch
jmp rmodeswtch_end
diff --git a/arch/i386/config.in b/arch/i386/config.in
index 872822e6c..9d373d1ed 100644
--- a/arch/i386/config.in
+++ b/arch/i386/config.in
@@ -19,21 +19,27 @@ choice 'Processor family' \
486/Cx486 CONFIG_M486 \
586/K5/5x86/6x86 CONFIG_M586 \
Pentium/K6/TSC CONFIG_M586TSC \
- PPro/6x86MX CONFIG_M686" PPro
+ PPro/6x86MX CONFIG_M686 \
+ Athlon CONFIG_MK7" PPro
#
# Define implied options from the CPU selection here
#
if [ "$CONFIG_M386" != "y" ]; then
- define_bool CONFIG_X86_WP_WORKS_OK y
- define_bool CONFIG_X86_INVLPG y
- define_bool CONFIG_X86_BSWAP y
- define_bool CONFIG_X86_POPAD_OK y
+ define_bool CONFIG_X86_WP_WORKS_OK y
+ define_bool CONFIG_X86_INVLPG y
+ define_bool CONFIG_X86_BSWAP y
+ define_bool CONFIG_X86_POPAD_OK y
fi
if [ "$CONFIG_M686" = "y" -o "$CONFIG_M586TSC" = "y" ]; then
- define_bool CONFIG_X86_TSC y
+ define_bool CONFIG_X86_TSC y
fi
if [ "$CONFIG_M686" = "y" ]; then
- define_bool CONFIG_X86_GOOD_APIC y
+ define_bool CONFIG_X86_GOOD_APIC y
+fi
+if [ "$CONFIG_MK7" = "y" ]; then
+ define_bool CONFIG_X86_TSC y
+ define_bool CONFIG_X86_GOOD_APIC y
+ define_bool CONFIG_X86_USE_3DNOW y
fi
choice 'Maximum Physical Memory' \
@@ -49,8 +55,8 @@ mainmenu_option next_comment
comment 'Loadable module support'
bool 'Enable loadable module support' CONFIG_MODULES
if [ "$CONFIG_MODULES" = "y" ]; then
- bool 'Set version information on all symbols for modules' CONFIG_MODVERSIONS
- bool 'Kernel module loader' CONFIG_KMOD
+ bool ' Set version information on all module symbols' CONFIG_MODVERSIONS
+ bool ' Kernel module loader' CONFIG_KMOD
fi
endmenu
@@ -61,28 +67,29 @@ bool 'BIGMEM support' CONFIG_BIGMEM
bool 'Networking support' CONFIG_NET
bool 'SGI Visual Workstation support' CONFIG_VISWS
if [ "$CONFIG_VISWS" = "y" ]; then
- define_bool CONFIG_X86_VISWS_APIC y
- define_bool CONFIG_X86_LOCAL_APIC y
- define_bool CONFIG_PCI y
+ define_bool CONFIG_X86_VISWS_APIC y
+ define_bool CONFIG_X86_LOCAL_APIC y
+ define_bool CONFIG_PCI y
else
- if [ "$CONFIG_SMP" = "y" ]; then
- define_bool CONFIG_X86_IO_APIC y
- define_bool CONFIG_X86_LOCAL_APIC y
- fi
- bool 'PCI support' CONFIG_PCI
- if [ "$CONFIG_PCI" = "y" ]; then
- choice 'PCI access mode' \
+ if [ "$CONFIG_SMP" = "y" ]; then
+ define_bool CONFIG_X86_IO_APIC y
+ define_bool CONFIG_X86_LOCAL_APIC y
+ fi
+ bool 'PCI support' CONFIG_PCI
+ if [ "$CONFIG_PCI" = "y" ]; then
+ choice ' PCI access mode' \
"BIOS CONFIG_PCI_GOBIOS \
Direct CONFIG_PCI_GODIRECT \
Any CONFIG_PCI_GOANY" Any
- if [ "$CONFIG_PCI_GOBIOS" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
- define_bool CONFIG_PCI_BIOS y
- fi
- if [ "$CONFIG_PCI_GODIRECT" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
- define_bool CONFIG_PCI_DIRECT y
- fi
- fi
- bool 'MCA support' CONFIG_MCA
+ if [ "$CONFIG_PCI_GOBIOS" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
+ define_bool CONFIG_PCI_BIOS y
+ fi
+ if [ "$CONFIG_PCI_GODIRECT" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
+ define_bool CONFIG_PCI_DIRECT y
+ fi
+ fi
+ bool 'MCA support' CONFIG_MCA
+
fi
source drivers/pcmcia/Config.in
@@ -96,17 +103,17 @@ tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
source drivers/parport/Config.in
-tristate 'Advanced Power Management BIOS support' CONFIG_APM
+bool 'Advanced Power Management BIOS support' CONFIG_APM
if [ "$CONFIG_APM" != "n" ]; then
- bool ' Ignore USER SUSPEND' CONFIG_APM_IGNORE_USER_SUSPEND
- bool ' Enable PM at boot time' CONFIG_APM_DO_ENABLE
- bool ' Make CPU Idle calls when idle' CONFIG_APM_CPU_IDLE
- bool ' Enable console blanking using APM' CONFIG_APM_DISPLAY_BLANK
- bool ' Power off on shutdown' CONFIG_APM_POWER_OFF
- bool ' Ignore multiple suspend' CONFIG_APM_IGNORE_MULTIPLE_SUSPEND
- bool ' Ignore multiple suspend/resume cycles' CONFIG_APM_IGNORE_SUSPEND_BOUNCE
- bool ' RTC stores time in GMT' CONFIG_APM_RTC_IS_GMT
- bool ' Allow interrupts during APM BIOS calls' CONFIG_APM_ALLOW_INTS
+ bool ' Ignore USER SUSPEND' CONFIG_APM_IGNORE_USER_SUSPEND
+ bool ' Enable PM at boot time' CONFIG_APM_DO_ENABLE
+ bool ' Make CPU Idle calls when idle' CONFIG_APM_CPU_IDLE
+ bool ' Enable console blanking using APM' CONFIG_APM_DISPLAY_BLANK
+ bool ' Power off on shutdown' CONFIG_APM_POWER_OFF
+ bool ' Ignore multiple suspend' CONFIG_APM_IGNORE_MULTIPLE_SUSPEND
+ bool ' Ignore multiple suspend/resume cycles' CONFIG_APM_IGNORE_SUSPEND_BOUNCE
+ bool ' RTC stores time in GMT' CONFIG_APM_RTC_IS_GMT
+ bool ' Allow interrupts during APM BIOS calls' CONFIG_APM_ALLOW_INTS
fi
endmenu
@@ -118,7 +125,7 @@ source drivers/pnp/Config.in
source drivers/block/Config.in
if [ "$CONFIG_NET" = "y" ]; then
- source net/Config.in
+ source net/Config.in
fi
mainmenu_option next_comment
@@ -127,22 +134,22 @@ comment 'SCSI support'
tristate 'SCSI support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
- source drivers/scsi/Config.in
+ source drivers/scsi/Config.in
fi
endmenu
if [ "$CONFIG_NET" = "y" ]; then
- mainmenu_option next_comment
- comment 'Network device support'
-
- bool 'Network device support' CONFIG_NETDEVICES
- if [ "$CONFIG_NETDEVICES" = "y" ]; then
- source drivers/net/Config.in
- if [ "$CONFIG_ATM" = "y" ]; then
- source drivers/atm/Config.in
- fi
- fi
- endmenu
+ mainmenu_option next_comment
+ comment 'Network device support'
+
+ bool 'Network device support' CONFIG_NETDEVICES
+ if [ "$CONFIG_NETDEVICES" = "y" ]; then
+ source drivers/net/Config.in
+ if [ "$CONFIG_ATM" = "y" ]; then
+ source drivers/atm/Config.in
+ fi
+ fi
+ endmenu
fi
source net/ax25/Config.in
@@ -152,10 +159,10 @@ source net/irda/Config.in
mainmenu_option next_comment
comment 'ISDN subsystem'
if [ "$CONFIG_NET" != "n" ]; then
- tristate 'ISDN support' CONFIG_ISDN
- if [ "$CONFIG_ISDN" != "n" ]; then
- source drivers/isdn/Config.in
- fi
+ tristate 'ISDN support' CONFIG_ISDN
+ if [ "$CONFIG_ISDN" != "n" ]; then
+ source drivers/isdn/Config.in
+ fi
fi
endmenu
@@ -164,7 +171,7 @@ comment 'Old CD-ROM drivers (not SCSI, not IDE)'
bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
- source drivers/cdrom/Config.in
+ source drivers/cdrom/Config.in
fi
endmenu
@@ -177,15 +184,15 @@ source drivers/misc/Config.in
source fs/Config.in
if [ "$CONFIG_VT" = "y" ]; then
- mainmenu_option next_comment
- comment 'Console drivers'
- bool 'VGA text console' CONFIG_VGA_CONSOLE
- bool 'Video mode selection support' CONFIG_VIDEO_SELECT
- if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- tristate 'MDA text console (dual-headed) (EXPERIMENTAL)' CONFIG_MDA_CONSOLE
- source drivers/video/Config.in
- fi
- endmenu
+ mainmenu_option next_comment
+ comment 'Console drivers'
+ bool 'VGA text console' CONFIG_VGA_CONSOLE
+ bool 'Video mode selection support' CONFIG_VIDEO_SELECT
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ tristate 'MDA text console (dual-headed) (EXPERIMENTAL)' CONFIG_MDA_CONSOLE
+ source drivers/video/Config.in
+ fi
+ endmenu
fi
mainmenu_option next_comment
@@ -193,7 +200,7 @@ comment 'Sound'
tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
- source drivers/sound/Config.in
+ source drivers/sound/Config.in
fi
endmenu
@@ -203,4 +210,3 @@ comment 'Kernel hacking'
#bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC
bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ
endmenu
-
diff --git a/arch/i386/defconfig b/arch/i386/defconfig
index 4523a6c7e..49137cda4 100644
--- a/arch/i386/defconfig
+++ b/arch/i386/defconfig
@@ -17,6 +17,7 @@ CONFIG_ISA=y
# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
CONFIG_M686=y
+# CONFIG_MK7 is not set
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_BSWAP=y
@@ -203,6 +204,7 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
CONFIG_SCSI_SYM53C8XX=y
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S
index 4b88dda89..c0cb65324 100644
--- a/arch/i386/kernel/entry.S
+++ b/arch/i386/kernel/entry.S
@@ -237,8 +237,11 @@ tracesys:
movl $-ENOSYS,EAX(%esp)
call SYMBOL_NAME(syscall_trace)
movl ORIG_EAX(%esp),%eax
+ cmpl $(NR_syscalls),%eax
+ jae tracesys_exit
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
movl %eax,EAX(%esp) # save the return value
+tracesys_exit:
call SYMBOL_NAME(syscall_trace)
jmp ret_from_sys_call
badsys:
diff --git a/arch/i386/kernel/pci-pc.c b/arch/i386/kernel/pci-pc.c
index be3076f30..8ce187d3f 100644
--- a/arch/i386/kernel/pci-pc.c
+++ b/arch/i386/kernel/pci-pc.c
@@ -120,7 +120,7 @@ static struct pci_ops pci_direct_conf1 = {
#define IOADDR(devfn, where) ((0xC000 | ((devfn & 0x78) << 5)) + where)
#define FUNC(devfn) (((devfn & 7) << 1) | 0xf0)
-#define SET(dev) if (dev->devfn) return PCIBIOS_DEVICE_NOT_FOUND; \
+#define SET(dev) if (dev->devfn & 0x80) return PCIBIOS_DEVICE_NOT_FOUND; \
outb(FUNC(dev->devfn), 0xCF8); \
outb(dev->bus->number, 0xCFA);
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c
index e86451291..1e6576860 100644
--- a/arch/i386/kernel/ptrace.c
+++ b/arch/i386/kernel/ptrace.c
@@ -71,8 +71,6 @@ static int putreg(struct task_struct *child,
unsigned long regno, unsigned long value)
{
switch (regno >> 2) {
- case ORIG_EAX:
- return -EIO;
case FS:
if (value && (value & 3) != 3)
return -EIO;
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c
index 88ba3feeb..734cfca65 100644
--- a/arch/i386/kernel/setup.c
+++ b/arch/i386/kernel/setup.c
@@ -25,6 +25,10 @@
*
* Memory region support
* David Parsons <orc@pell.chi.il.us>, July-August 1999
+ *
+ * Cleaned up cache-detection code
+ * Dave Jones <dave@powertweak.com>, October 1999
+ *
*/
/*
@@ -462,7 +466,7 @@ void __init setup_memory_region(void)
void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigned long * memory_end_p)
{
- unsigned long memory_start, memory_end;
+ unsigned long high_pfn, max_pfn;
char c = ' ', *to = command_line, *from = COMMAND_LINE;
int len = 0;
int i;
@@ -493,7 +497,6 @@ void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigne
if (!MOUNT_ROOT_RDONLY)
root_mountflags &= ~MS_RDONLY;
- memory_start = (unsigned long) &_end;
init_mm.start_code = (unsigned long) &_text;
init_mm.end_code = (unsigned long) &_etext;
init_mm.end_data = (unsigned long) &_edata;
@@ -557,51 +560,53 @@ void __init setup_arch(char **cmdline_p, unsigned long * memory_start_p, unsigne
*to = '\0';
*cmdline_p = command_line;
-#define VMALLOC_RESERVE (128 << 20) /* 128MB for vmalloc and initrd */
-#define MAXMEM ((unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE))
-
- memory_end = 0;
+ /* Find the highest page frame number we have available */
+ max_pfn = 0;
for (i=0; i < e820.nr_map; i++) {
/* RAM? */
if (e820.map[i].type == E820_RAM) {
- unsigned long end = e820.map[i].addr + e820.map[i].size;
+ unsigned long end_pfn = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT;
- if (end > memory_end)
- memory_end = end;
+ if (end_pfn > max_pfn)
+ max_pfn = end_pfn;
}
}
- memory_end &= PAGE_MASK;
- ram_resources[1].end = memory_end-1;
+/*
+ * We can only allocate a limited amount of direct-mapped memory
+ */
+#define VMALLOC_RESERVE (128 << 20) /* 128MB for vmalloc and initrd */
+#define MAXMEM ((unsigned long)(-PAGE_OFFSET-VMALLOC_RESERVE))
+#define MAXMEM_PFN (MAXMEM >> PAGE_SHIFT)
+
+ high_pfn = MAXMEM_PFN;
+ if (max_pfn < high_pfn)
+ high_pfn = max_pfn;
+
+/*
+ * But the bigmem stuff may be able to use more of it
+ * (but currently only up to about 4GB)
+ */
#ifdef CONFIG_BIGMEM
- bigmem_start = bigmem_end = memory_end;
-#endif
- if (memory_end > MAXMEM)
- {
-#ifdef CONFIG_BIGMEM
-#define MAXBIGMEM ((unsigned long)(~(VMALLOC_RESERVE-1)))
- bigmem_start = MAXMEM;
- bigmem_end = (memory_end < MAXBIGMEM) ? memory_end : MAXBIGMEM;
-#endif
- memory_end = MAXMEM;
-#ifdef CONFIG_BIGMEM
- printk(KERN_NOTICE "%ldMB BIGMEM available.\n",
- (bigmem_end-bigmem_start)>>20);
-#else
- printk(KERN_WARNING "Warning only %ldMB will be used.\n",
- MAXMEM>>20);
+ #define MAXBIGMEM ((unsigned long)(~(VMALLOC_RESERVE-1)))
+ #define MAXBIGMEM_PFN (MAXBIGMEM >> PAGE_SHIFT)
+ if (max_pfn > MAX_PFN)
+ max_pfn = MAX_PFN;
+
+/* When debugging, make half of "normal" memory be BIGMEM memory instead */
+#ifdef BIGMEM_DEBUG
+ high_pfn >>= 1;
#endif
- }
-#if defined(CONFIG_BIGMEM) && defined(BIGMEM_DEBUG)
- else {
- memory_end -= memory_end/4;
- bigmem_start = memory_end;
- }
+
+ bigmem_start = high_pfn << PAGE_SHIFT;
+ bigmem_end = max_pfn << PAGE_SHIFT;
+ printk(KERN_NOTICE "%ldMB BIGMEM available.\n", (bigmem_end-bigmem_start) >> 20);
#endif
- memory_end += PAGE_OFFSET;
- *memory_start_p = memory_start;
- *memory_end_p = memory_end;
+ ram_resources[1].end = (high_pfn << PAGE_SHIFT)-1;
+
+ *memory_start_p = (unsigned long) &_end;
+ *memory_end_p = PAGE_OFFSET + (high_pfn << PAGE_SHIFT);
#ifdef __SMP__
/*
@@ -876,6 +881,15 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
* on the MediaGX. So we turn it off for now.
*/
+#ifdef CONFIG_PCI
+ /* 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. */
+
+ printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
+ isa_dma_bridge_buggy = 1;
+#endif
/* GXm supports extended cpuid levels 'ala' AMD */
if (c->cpuid_level == 2) {
get_model_name(c); /* get CPU marketing name */
@@ -888,15 +902,6 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
c->x86_model = (dir1 & 0x20) ? 1 : 2;
c->x86_capability&=~X86_FEATURE_TSC;
}
-#ifdef CONFIG_PCI
- /* 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. */
-
- printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
- isa_dma_bridge_buggy = 1;
-#endif
break;
case 5: /* 6x86MX/M II */
@@ -1129,49 +1134,47 @@ void __init identify_cpu(struct cpuinfo_x86 *c)
}
}
- for (i = 0; i < sizeof(cpu_models)/sizeof(struct cpu_model_info); i++) {
- if (c->cpuid_level > 1) {
- /* supports eax=2 call */
- int edx, cache_size, dummy;
-
- cpuid(2, &dummy, &dummy, &dummy, &edx);
+ if (c->cpuid_level > 1) {
+ /* supports eax=2 call */
+ int edx, dummy;
- /* We need only the LSB */
- edx &= 0xff;
+ cpuid(2, &dummy, &dummy, &dummy, &edx);
- switch (edx) {
- case 0x40:
- cache_size = 0;
- break;
+ /* We need only the LSB */
+ edx &= 0xff;
- case 0x41:
- cache_size = 128;
- break;
+ switch (edx) {
+ case 0x40:
+ c->x86_cache_size = 0;
+ break;
- case 0x42:
- cache_size = 256;
- break;
+ case 0x41:
+ c->x86_cache_size = 128;
+ break;
- case 0x43:
- cache_size = 512;
- break;
+ case 0x42:
+ c->x86_cache_size = 256;
+ break;
- case 0x44:
- cache_size = 1024;
- break;
+ case 0x43:
+ c->x86_cache_size = 512;
+ break;
- case 0x45:
- cache_size = 2048;
- break;
+ case 0x44:
+ c->x86_cache_size = 1024;
+ break;
- default:
- cache_size = 0;
- break;
- }
+ case 0x45:
+ c->x86_cache_size = 2048;
+ break;
- c->x86_cache_size = cache_size;
+ default:
+ c->x86_cache_size = 0;
+ break;
}
+ }
+ for (i = 0; i < sizeof(cpu_models)/sizeof(struct cpu_model_info); i++) {
if (cpu_models[i].vendor == c->x86_vendor &&
cpu_models[i].x86 == c->x86) {
if (c->x86_model <= 16)
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 05684997f..b1140f892 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -367,6 +367,22 @@ void __init test_wp_bit(void)
printk(".\n");
}
+static void __init mem_init_region(unsigned long pfn, unsigned long count, unsigned long start_mem_pfn)
+{
+ printk("memory region: %luk @ %08lx000\n", count << 2, pfn);
+
+ do {
+ if (pfn >= max_mapnr)
+ break;
+
+ /* Avoid the kernel mapping between HIGH_MEMORY and "start_mem".. */
+ if (pfn < (HIGH_MEMORY >> PAGE_SHIFT) || pfn >= start_mem_pfn)
+ clear_bit(PG_reserved, &mem_map[pfn].flags);
+
+ pfn++;
+ } while (--count > 0);
+}
+
void __init mem_init(unsigned long start_mem, unsigned long end_mem)
{
unsigned long start_low_mem = PAGE_SIZE;
@@ -412,45 +428,22 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
/* walk the whitelist, unreserving good memory
*/
for (avail = i = 0; i < e820.nr_map; i++) {
- unsigned long addr, end, size;
+ unsigned long start_pfn, end_pfn;
if (e820.map[i].type != E820_RAM) /* not usable memory */
continue;
- addr = e820.map[i].addr;
- size = e820.map[i].size;
- /* Silently ignore memory regions starting above 4gb */
- if (addr != e820.map[i].addr)
+ start_pfn = (e820.map[i].addr + PAGE_SIZE - 1) >> PAGE_SHIFT;
+ end_pfn = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT;
+
+ /* We have a certain amount of low memory reserved */
+ if (start_pfn < MAP_NR(start_low_mem))
+ start_pfn = MAP_NR(start_low_mem);
+
+ if (end_pfn <= start_pfn)
continue;
- printk("memory region: %luk @ %08lx\n", size >> 10, addr );
-
- /* Make sure we don't get fractional pages */
- end = PAGE_OFFSET + ((addr + size) & PAGE_MASK);
- addr= PAGE_OFFSET + PAGE_ALIGN(addr);
-
- for ( ; addr < end; addr += PAGE_SIZE) {
-
- /* this little bit of grossness is for dealing
- * with memory borrowing for system bookkeeping
- * (smp stacks, zero page, kernel code, etc)
- * without having to go back and edit the e820
- * map to compensate.
- *
- * if we're in low memory (<1024k), we need to
- * avoid the smp stack and zero page.
- * if we're in high memory, we need to avoid
- * the kernel code.
- * in any case, we don't want to hack mem_map
- * entries above end_mem.
- */
- if ( (addr < start_low_mem)
- || (addr >= (HIGH_MEMORY + PAGE_OFFSET)&& addr <= start_mem)
- || (addr > end_mem) )
- continue;
-
- clear_bit(PG_reserved, &mem_map[MAP_NR(addr)].flags);
- }
+ mem_init_region(start_pfn, end_pfn - start_pfn, MAP_NR(start_mem));
}
for (tmp = PAGE_OFFSET ; tmp < end_mem ; tmp += PAGE_SIZE) {
diff --git a/arch/mips/sgi/kernel/indy_timer.c b/arch/mips/sgi/kernel/indy_timer.c
index 0b388bf32..00c1c3c68 100644
--- a/arch/mips/sgi/kernel/indy_timer.c
+++ b/arch/mips/sgi/kernel/indy_timer.c
@@ -1,4 +1,4 @@
-/* $Id: indy_timer.c,v 1.15 1999/10/21 00:23:05 ralf Exp $
+/* $Id: indy_timer.c,v 1.16 2000/01/17 23:32:46 ralf Exp $
*
* indy_timer.c: Setting up the clock on the INDY 8254 controller.
*
@@ -33,6 +33,8 @@
static unsigned long r4k_offset; /* Amount to increment compare reg each time */
static unsigned long r4k_cur; /* What counter should be at next timer irq */
+extern rwlock_t xtime_lock;
+
static inline void ack_r4ktimer(unsigned long newval)
{
write_32bit_cp0_register(CP0_COMPARE, newval);
diff --git a/arch/mips64/Makefile b/arch/mips64/Makefile
index 6879aca98..d7ffcedb9 100644
--- a/arch/mips64/Makefile
+++ b/arch/mips64/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.3 1999/12/04 03:59:00 ralf Exp $
+# $Id: Makefile,v 1.4 2000/01/17 23:32:46 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
@@ -67,7 +67,7 @@ endif
# Board-dependent options and extra files
#
ifdef CONFIG_SGI_IP22
-LIBS += arch/mips64/sgi-ip22/sgikern.a arch/mips64/arc/arclib.a
+LIBS += arch/mips64/sgi-ip22/ip22.a arch/mips64/arc/arclib.a
SUBDIRS += arch/mips64/sgi-ip22 arch/mips64/arc
#
# Set LOADADDR to >= 0x88069000 if you want to leave space for symmon,
diff --git a/arch/mips64/defconfig-ip22 b/arch/mips64/defconfig-ip22
index 71fac0fc9..273653d5d 100644
--- a/arch/mips64/defconfig-ip22
+++ b/arch/mips64/defconfig-ip22
@@ -11,8 +11,11 @@
# Machine selection
#
CONFIG_SGI_IP22=y
+# CONFIG_SGI_IP27 is not set
CONFIG_BOOT_ELF32=y
CONFIG_ARC32=y
+CONFIG_BOARD_SCACHE=y
+CONFIG_ARC_MEMORY=y
#
# CPU selection
@@ -28,13 +31,13 @@ CONFIG_CPU_R5000=y
# General setup
#
# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_SYSCTL is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_MIPS32_COMPAT is not set
+# CONFIG_BINFMT_MISC is not set
#
# Loadable module support
diff --git a/arch/mips64/sgi-ip22/Makefile b/arch/mips64/sgi-ip22/Makefile
index 3265aab41..f303d90da 100644
--- a/arch/mips64/sgi-ip22/Makefile
+++ b/arch/mips64/sgi-ip22/Makefile
@@ -10,7 +10,7 @@
$(CC) $(CFLAGS) -c $< -o $*.o
L_TARGET = ip22.a
-L_OBJS = ip22-mc.o ip22-sc.o ip22-hpc.o ip22-int.o ip22-rtc.o \
+L_OBJS = ip22-berr.o ip22-mc.o ip22-sc.o ip22-hpc.o ip22-int.o ip22-rtc.o \
ip22-setup.o system.o ip22-timer.o ip22-irq.o ip22-reset.o time.o
include $(TOPDIR)/Rules.make
diff --git a/arch/mips64/sgi-ip22/ip22-berr.c b/arch/mips64/sgi-ip22/ip22-berr.c
new file mode 100644
index 000000000..32797fcf4
--- /dev/null
+++ b/arch/mips64/sgi-ip22/ip22-berr.c
@@ -0,0 +1,95 @@
+/* $Id: ip22-berr.c,v 1.1 2000/01/21 21:35:46 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.
+ *
+ * Copyright (C) 1994, 1995, 1996, 1999, 2000 by Ralf Baechle
+ * Copyright (C) 1999, 2000 by Silicon Graphics
+ */
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <asm/uaccess.h>
+#include <asm/paccess.h>
+#include <asm/addrspace.h>
+
+extern asmlinkage void handle_ibe(void);
+extern asmlinkage void handle_dbe(void);
+
+extern const struct exception_table_entry __start___dbe_table[];
+extern const struct exception_table_entry __stop___dbe_table[];
+
+static inline unsigned long
+search_one_table(const struct exception_table_entry *first,
+ const struct exception_table_entry *last,
+ unsigned long value)
+{
+ while (first <= last) {
+ const struct exception_table_entry *mid;
+ long diff;
+
+ mid = (last - first) / 2 + first;
+ diff = mid->insn - value;
+ if (diff == 0)
+ return mid->nextinsn;
+ else if (diff < 0)
+ first = mid+1;
+ else
+ last = mid-1;
+ }
+ return 0;
+}
+
+static inline unsigned long
+search_dbe_table(unsigned long addr)
+{
+ unsigned long ret;
+
+ /* There is only the kernel to search. */
+ ret = search_one_table(__start___dbe_table, __stop___dbe_table-1, addr);
+ if (ret) return ret;
+
+ return 0;
+}
+
+void do_ibe(struct pt_regs *regs)
+{
+ printk("Got ibe at 0x%lx\n", regs->cp0_epc);
+ show_regs(regs);
+ dump_tlb_addr(regs->cp0_epc);
+ force_sig(SIGBUS, current);
+ while(1);
+}
+
+void do_dbe(struct pt_regs *regs)
+{
+ unsigned long fixup;
+
+ fixup = search_dbe_table(regs->cp0_epc);
+ if (fixup) {
+ long new_epc;
+
+ new_epc = fixup_exception(dpf_reg, fixup, regs->cp0_epc);
+ regs->cp0_epc = new_epc;
+ return;
+ }
+
+ printk("Got dbe at 0x%lx\n", regs->cp0_epc);
+ show_regs(regs);
+ dump_tlb_all();
+ while(1);
+ force_sig(SIGBUS, current);
+}
+
+void __init
+bus_error_init(void)
+{
+ int dummy;
+
+ set_except_vector(6, handle_ibe);
+ set_except_vector(7, handle_dbe);
+
+ /* At this time nothing uses the DBE protection mechanism on the
+ Indy, so this here is needed to make the kernel link. */
+ get_dbe(dummy, (int *)KSEG0);
+}
diff --git a/arch/mips64/sgi-ip22/ip22-timer.c b/arch/mips64/sgi-ip22/ip22-timer.c
index ff8ece37a..c5e038b72 100644
--- a/arch/mips64/sgi-ip22/ip22-timer.c
+++ b/arch/mips64/sgi-ip22/ip22-timer.c
@@ -33,6 +33,8 @@
static unsigned long r4k_offset; /* Amount to increment compare reg each time */
static unsigned long r4k_cur; /* What counter should be at next timer irq */
+extern rwlock_t xtime_lock;
+
static inline void ack_r4ktimer(unsigned long newval)
{
write_32bit_cp0_register(CP0_COMPARE, newval);
diff --git a/arch/mips64/sgi-ip27/ip27-setup.c b/arch/mips64/sgi-ip27/ip27-setup.c
index 39858a23f..ace1d7b8f 100644
--- a/arch/mips64/sgi-ip27/ip27-setup.c
+++ b/arch/mips64/sgi-ip27/ip27-setup.c
@@ -9,6 +9,7 @@
* Copyright (C) 1999 Ralf Baechle (ralf@gnu.org)
* Copyright (C) 1999 Silcon Graphics, Inc.
*/
+#include <linux/config.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <asm/sn/types.h>
@@ -20,6 +21,11 @@
#include <asm/mipsregs.h>
#include <asm/sn/klconfig.h>
+/* Check against user dumbness. */
+#ifdef CONFIG_VT
+#error "CONFIG_VT not allowed for IP27."
+#endif
+
/*
* get_nasid() returns the physical node id number of the caller.
*/
diff --git a/arch/ppc/Makefile b/arch/ppc/Makefile
index 6282a0a6d..82bdb59ed 100644
--- a/arch/ppc/Makefile
+++ b/arch/ppc/Makefile
@@ -88,6 +88,7 @@ $(BOOT_TARGETS): $(CHECKS) vmlinux
@$(MAKECHRPBOOT) $@
znetboot: $(CHECKS) vmlinux
+ifdef CONFIG_ALL_PPC
ifdef CONFIG_SMP
ifdef CONFIG_PPC64
cp -f vmlinux /tftpboot/vmlinux.smp.64
@@ -101,6 +102,7 @@ else
cp -f vmlinux /tftpboot/vmlinux
endif
endif
+endif
@$(MAKECOFFBOOT) $@
@$(MAKEBOOT) $@
@$(MAKECHRPBOOT) $@
diff --git a/arch/ppc/boot/Makefile b/arch/ppc/boot/Makefile
index 8709e3729..41a8a915f 100644
--- a/arch/ppc/boot/Makefile
+++ b/arch/ppc/boot/Makefile
@@ -35,6 +35,12 @@ else
TFTPIMAGE=/tftpboot/zImage.prep$(MSIZE)
endif
+ifeq ($(CONFIG_SMP),y)
+TFTPSIMAGE=/tftpboot/sImage.smp
+else
+TFTPSIMAGE=/tftpboot/sImage
+endif
+
ifeq ($(CONFIG_PPC64),y)
MSIZE=.64
else
@@ -121,7 +127,7 @@ ifdef CONFIG_PREP
cp zImage $(TFTPIMAGE)
endif
ifdef CONFIG_GEMINI
- cp sImage /tftpboot/
+ cp sImage $(TFTPSIMAGE)
endif
znetboot.initrd : zImage.initrd
diff --git a/arch/ppc/config.in b/arch/ppc/config.in
index af3d5876f..46908b644 100644
--- a/arch/ppc/config.in
+++ b/arch/ppc/config.in
@@ -82,6 +82,8 @@ define_bool CONFIG_BINFMT_ELF y
define_bool CONFIG_KERNEL_ELF y
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source drivers/pcmcia/Config.in
+
source drivers/parport/Config.in
if [ "$CONFIG_8xx" != "y" ]; then
diff --git a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
index 5e61fd001..2f190db09 100644
--- a/arch/ppc/kernel/Makefile
+++ b/arch/ppc/kernel/Makefile
@@ -14,7 +14,7 @@ O_TARGET := kernel.o
OX_OBJS := ppc_ksyms.o setup.o
KHEAD := head.o
-ifdef CONFIG_PPC_ALL
+ifdef CONFIG_ALL_PPC
CONFIG_PMAC=y
CONFIG_PREP=y
CONFIG_CHRP=y
@@ -65,10 +65,13 @@ O_OBJS += apus_setup.o prom.o open_pic.o
else
ifneq ($(CONFIG_8xx),y)
O_OBJS += chrp_setup.o chrp_pci.o chrp_time.o \
- pmac_time.o pmac_support.o pmac_pci.o pmac_setup.o \
+ pmac_time.o pmac_pci.o pmac_setup.o \
prom.o open_pic.o feature.o \
i8259.o pmac_pic.o indirect_pci.o \
gemini_pci.o gemini_prom.o gemini_setup.o
+ifeq ($(CONFIG_NVRAM),y)
+O_OBJS += pmac_support.o
+endif
ifeq ($(CONFIG_PREP), y)
O_OBJS += prep_pci.o prep_setup.o prep_nvram.o prep_time.o residual.o
diff --git a/arch/ppc/kernel/chrp_setup.c b/arch/ppc/kernel/chrp_setup.c
index 2739c541d..4f71def9a 100644
--- a/arch/ppc/kernel/chrp_setup.c
+++ b/arch/ppc/kernel/chrp_setup.c
@@ -498,7 +498,9 @@ void __init chrp_init_IRQ(void)
void __init
chrp_init2(void)
{
+#ifdef CONFIG_NVRAM
pmac_nvram_init();
+#endif
}
#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
@@ -599,12 +601,6 @@ chrp_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_
hw->irq = chrp_ide_irq;
}
-#if defined(CONFIG_BLK_DEV_IDE_MODULE)
-EXPORT_SYMBOL(chrp_ide_irq);
-EXPORT_SYMBOL(chrp_ide_ports_known);
-EXPORT_SYMBOL(chrp_ide_regbase);
-EXPORT_SYMBOL(chrp_ide_probe);
-#endif
#endif
void __init
diff --git a/arch/ppc/kernel/hashtable.S b/arch/ppc/kernel/hashtable.S
index 74f00ce10..c87385c53 100644
--- a/arch/ppc/kernel/hashtable.S
+++ b/arch/ppc/kernel/hashtable.S
@@ -1,7 +1,7 @@
/*
* arch/ppc/kernel/hashtable.S
*
- * $Id: hashtable.S,v 1.3 1999/09/05 11:56:27 paulus Exp $
+ * $Id: hashtable.S,v 1.6 1999/10/08 01:56:15 paulus Exp $
*
* PowerPC version
* Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -35,7 +35,7 @@
* _PAGE_RW (2) if a write. r20 contains DSISR or SRR1,
* so bit 1 (0x40000000) is set if the exception was due
* to no matching PTE being found in the hash table.
- * r5 contains the physical address of the current task's thread.
+ * SPRG3 contains the physical address of the current task's thread.
*
* Returns to the caller if the access is illegal or there is no
* mapping for the address. Otherwise it places an appropriate PTE
@@ -53,12 +53,14 @@ Hash_msk = (((1 << Hash_bits) - 1) * 64)
.globl hash_page
hash_page:
#ifdef __SMP__
+ SAVE_2GPRS(7,r21)
eieio
lis r2,hash_table_lock@h
ori r2,r2,hash_table_lock@l
tophys(r2,r2)
- lis r6,100000000@h
+ lis r6,0x0fff0000@h
mtctr r6
+ mfspr r5,SPRG3
lwz r0,PROCESSOR-THREAD(r5)
or r0,r0,r6
10: lwarx r6,0,r2
@@ -66,10 +68,18 @@ hash_page:
bne- 12f
stwcx. r0,0,r2
beq+ 11f
-12: cmpw r6,r0
+ /* spin here a bit */
+12: mfctr r7
+ li r8,1000
+ mtctr r8
+13:
+ bdnz 13b
+ mtctr r7
+ cmpw r6,r0
bdnzf 2,10b
tw 31,31,31
11: eieio
+ REST_2GPRS(7, r21)
#endif
/* Get PTE (linux-style) and check access */
mfspr r2,SPRG3 /* current task's THREAD (phys) */
@@ -182,7 +192,7 @@ hash_page_patch_B:
10: mtctr r2
addi r3,r4,-8 /* search primary PTEG */
1: lwzu r0,8(r3) /* get next PTE */
- srwi. r0,r0,31 /* only want to check valid bit */
+ rlwinm. r0,r0,0,0,0 /* only want to check valid bit */
bdnzf 2,1b /* loop while ctr != 0 && !cr0.eq */
beq+ found_empty
@@ -195,7 +205,7 @@ hash_page_patch_C:
addi r3,r3,-8
mtctr r2
2: lwzu r0,8(r3)
- srwi. r0,r0,31 /* only want to check valid bit */
+ rlwinm. r0,r0,0,0,0 /* only want to check valid bit */
bdnzf 2,2b
beq+ found_empty
@@ -209,19 +219,20 @@ hash_page_patch_C:
* put the PTE in the primary PTEG.
*/
xori r5,r5,0x40 /* clear H bit again */
- lwz r2,next_slot@l(0)
+ lis r3,next_slot@ha
+ tophys(r3,r3)
+ lwz r2,next_slot@l(r3)
addi r2,r2,8
andi. r2,r2,0x38
- stw r2,next_slot@l(0)
+ stw r2,next_slot@l(r3)
add r3,r4,r2
11:
/* update counter of evicted pages */
- lis r2,htab_evicts@h
- ori r2,r2,htab_evicts@l
+ lis r2,htab_evicts@ha
tophys(r2,r2)
- lwz r4,0(r2)
+ lwz r4,htab_evicts@l(r2)
addi r4,r4,1
- stw r4,0(r2)
+ stw r4,htab_evicts@l(r2)
#ifndef __SMP__
/* Store PTE in PTEG */
@@ -271,12 +282,11 @@ found_slot:
* update the htab misses count
* -- Cort
*/
- lis r2,htab_reloads@h
- ori r2,r2,htab_reloads@l
+ lis r2,htab_reloads@ha
tophys(r2,r2)
- lwz r3,0(r2)
+ lwz r3,htab_reloads@l(r2)
addi r3,r3,1
- stw r3,0(r2)
+ stw r3,htab_reloads@l(r2)
#ifdef __SMP__
lis r2,hash_table_lock@ha
@@ -322,13 +332,13 @@ hash_page_out:
.globl hash_table_lock
hash_table_lock:
.long 0
- .text
#endif /* __SMP__ */
-/* next_slot is assumed to be within the first 32kB of physical RAM */
+ .data
next_slot:
.long 0
+ .text
/*
* Flush entries from the hash table with VSIDs in the range
* given.
diff --git a/arch/ppc/kernel/head.S b/arch/ppc/kernel/head.S
index 85de3348f..b3b07a003 100644
--- a/arch/ppc/kernel/head.S
+++ b/arch/ppc/kernel/head.S
@@ -1,7 +1,7 @@
/*
* arch/ppc/kernel/head.S
*
- * $Id: head.S,v 1.147 1999/09/15 23:58:53 cort Exp $
+ * $Id: head.S,v 1.154 1999/10/12 00:33:31 cort Exp $
*
* PowerPC version
* Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -51,6 +51,10 @@
/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
#define LOAD_BAT(n, reg, RA, RB) \
+ /* see the comment for clear_bats() -- Cort */ \
+ li RA,0; \
+ mtspr IBAT##n##U,RA; \
+ mtspr DBAT##n##U,RA; \
lwz RA,(n*16)+0(reg); \
lwz RB,(n*16)+4(reg); \
mtspr IBAT##n##U,RA; \
@@ -150,7 +154,7 @@ __start:
*/
mr r4,r30
bl fix_mem_constants
-#endif
+#endif /* CONFIG_APUS */
/*
* Use the first pair of BAT registers to map the 1st 16MB
@@ -158,7 +162,7 @@ __start:
* call OF any more.
*/
lis r11,KERNELBASE@h
-#ifndef CONFIG_PPC64xxx
+#ifndef CONFIG_PPC64
mfspr r9,PVR
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
cmpi 0,r9,1
@@ -173,10 +177,19 @@ __start:
mtspr IBAT1L,r10
b 5f
#endif /* CONFIG_PPC64 */
-4:
- tophys(r8,r11)
+
+4: tophys(r8,r11)
+#ifdef __SMP__
+ ori r8,r8,0x12 /* R/W access, M=1 */
+#else
ori r8,r8,2 /* R/W access */
+#endif /* __SMP__ */
+#ifdef CONFIG_APUS
+ ori r11,r11,BL_8M<<2|0x2 /* set up 8MB BAT registers for 604 */
+#else
ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */
+#endif /* CONFIG_APUS */
+
#ifdef CONFIG_PPC64
/* clear out the high 32 bits in the BAT */
clrldi r11,r11,32
@@ -185,32 +198,14 @@ __start:
clrldi r16,r16,63
mtsdr1 r16
#else /* CONFIG_PPC64 */
- /*
- * allow secondary cpus to get at all of ram in early bootup
- * since their init_task may be up there -- Cort
+ /*
+ * If the MMU is off clear the bats. See clear_bat() -- Cort
*/
-#if 0
- oris r18,r8,0x10000000@h
- oris r21,r11,(KERNELBASE+0x10000000)@h
-#else
- lis r18,0x9000
- ori r18,r18,0x12
- lis r21,0x9000
- ori r21,r21,0x7fe
-#endif
- mtspr DBAT1L,r18 /* N.B. 6xx (not 601) have valid */
- mtspr DBAT1U,r21 /* bit in upper BAT register */
- mtspr IBAT1L,r18
- mtspr IBAT1U,r21
-
-#if 0 /* for now, otherwise we overflow the 0x100 bytes we have here */
- oris r18,r8,0x20000000@h
- oris r21,r11,(KERNELBASE+0x20000000)@h
- mtspr DBAT2L,r18 /* N.B. 6xx (not 601) have valid */
- mtspr DBAT2U,r21 /* bit in upper BAT register */
- mtspr IBAT2L,r18
- mtspr IBAT2U,r21
-#endif /* 0 */
+ mfmsr r20
+ andi. r20,r20,MSR_DR
+ bne 100f
+ bl clear_bats
+100:
#endif /* CONFIG_PPC64 */
mtspr DBAT0L,r8 /* N.B. 6xx (not 601) have valid */
mtspr DBAT0U,r11 /* bit in upper BAT register */
@@ -218,27 +213,7 @@ __start:
mtspr IBAT0U,r11
5: isync
-#ifdef CONFIG_APUS
- /* Unfortunately the APUS specific instructions bloat the
- * code so it cannot fit in the 0x100 bytes available. We have
- * to do it the crude way. */
-
- /* Map 0xfff00000 so we can access VTOP/PTOV constant when
- MMU is enabled. */
- lis r8,0xfff0
- ori r11,r8,0x2 /* r/w */
- ori r8,r8,0x2 /* 128KB, supervisor */
- mtspr DBAT3U,r8
- mtspr DBAT3L,r11
-
- /* Copy exception code to exception vector base. */
- lis r3,KERNELBASE@h
- tophys(r4,r3)
- lis r3,0xfff0 /* Copy to 0xfff00000 on APUS */
- li r5,0x4000 /* # bytes of memory to copy */
- li r6,0
- bl copy_and_flush /* copy the first 0x4000 bytes */
-#else /* CONFIG_APUS */
+#ifndef CONFIG_APUS
/*
* We need to run with _start at physical address 0.
* On CHRP, we are loaded at 0x10000 since OF on CHRP uses
@@ -267,7 +242,6 @@ __start:
* this shouldn't bother the pmac since it just gets turned on again
* as we jump to our code at KERNELBASE. -- Cort
*/
-
turn_on_mmu:
mfmsr r0
ori r0,r0,MSR_DR|MSR_IR
@@ -335,7 +309,8 @@ label: \
/* System reset */
#ifdef CONFIG_SMP /* MVME/MTX and gemini start the secondary here */
#ifdef CONFIG_GEMINI
- STD_EXCEPTION(0x100, Reset, __secondary_start_gemini)
+ . = 0x100
+ b __secondary_start_gemini
#else /* CONFIG_GEMINI */
STD_EXCEPTION(0x100, Reset, __secondary_start_psurge)
#endif /* CONFIG_GEMINI */
@@ -356,7 +331,6 @@ DataAccess:
mfspr r3,DAR /* into the hash table */
rlwinm r4,r23,32-13,30,30 /* MSR_PR -> _PAGE_USER */
rlwimi r4,r20,32-23,29,29 /* DSISR_STORE -> _PAGE_RW */
- mfspr r5,SPRG3 /* phys addr of THREAD */
bl hash_page
1: stw r20,_DSISR(r21)
mr r5,r20
@@ -378,7 +352,6 @@ InstructionAccess:
mr r3,r22 /* into the hash table */
rlwinm r4,r23,32-13,30,30 /* MSR_PR -> _PAGE_USER */
mr r20,r23 /* SRR1 has reason bits */
- mfspr r5,SPRG3 /* phys addr of THREAD */
bl hash_page
1: addi r3,r1,STACK_FRAME_OVERHEAD
mr r4,r22
@@ -392,35 +365,8 @@ InstructionAccess:
/* External interrupt */
. = 0x500;
HardwareInterrupt:
+#ifndef CONFIG_APUS
EXCEPTION_PROLOG;
-#ifdef CONFIG_APUS
- /* This is horrible, but there's no way around it. Enable the
- data cache so the IRQ hardware register can be accessed
- without cache intervention. Then disable interrupts and get
- the current emulated m68k IPL value. */
-
- mfmsr 20
- xori r20,r20,MSR_DR
- sync
- mtmsr r20
- sync
-
- lis r3,APUS_IPL_EMU@h
-
- li r20,(IPLEMU_SETRESET|IPLEMU_DISABLEINT)
- stb r20,APUS_IPL_EMU@l(r3)
- eieio
-
- lbz r3,APUS_IPL_EMU@l(r3)
-
- mfmsr r20
- xori r20,r20,MSR_DR
- sync
- mtmsr r20
- sync
-
- stw r3,(_CCR+4)(r21);
-#endif
addi r3,r1,STACK_FRAME_OVERHEAD
li r20,MSR_KERNEL
li r4,0
@@ -429,7 +375,12 @@ HardwareInterrupt:
do_IRQ_intercept:
.long do_IRQ;
.long ret_from_except
-
+#else
+ EXCEPTION_PROLOG;
+ addi r3,r1,STACK_FRAME_OVERHEAD
+ li r20,MSR_KERNEL
+ bl apus_interrupt_entry
+#endif /* CONFIG_APUS */
/* Alignment exception */
. = 0x600
@@ -723,8 +674,6 @@ DataStoreTLBMiss:
.globl transfer_to_handler
transfer_to_handler:
stw r22,_NIP(r21)
- lis r22,MSR_POW@h
- andc r23,r23,r22
stw r23,_MSR(r21)
SAVE_GPR(7, r21)
SAVE_4GPRS(8, r21)
@@ -974,6 +923,19 @@ fix_mem_constants:
cmpw r12,r13
bne 1b
+/*
+ * Map the memory where the exception handlers will
+ * be copied to when hash constants have been patched.
+ */
+#ifdef CONFIG_APUS_FAST_EXCEPT
+ lis r8,0xfff0
+#else
+ lis r8,0
+#endif
+ ori r8,r8,0x2 /* 128KB, supervisor */
+ mtspr DBAT3U,r8
+ mtspr DBAT3L,r8
+
lis r12,__ptov_table_begin@h
ori r12,r12,__ptov_table_begin@l
add r12,r12,r10 /* table begin phys address */
@@ -1026,11 +988,9 @@ __secondary_hold:
mtlr r5
mr r24,r3 /* cpu # */
blr
-
+#ifdef CONFIG_GEMINI
.globl __secondary_start_gemini
__secondary_start_gemini:
-1011: b 1011b
-
mfspr r4,HID0
ori r4,r4,HID0_ICFI
li r3,0
@@ -1040,6 +1000,7 @@ __secondary_start_gemini:
sync
bl prom_init
b __secondary_start
+#endif /* CONFIG_GEMINI */
.globl __secondary_start_psurge
__secondary_start_psurge:
@@ -1281,3 +1242,44 @@ swapper_pg_dir:
.globl cmd_line
cmd_line:
.space 512
+
+/*
+ * An undocumented "feature" of 604e requires that the v bit
+ * be cleared before changing BAT values.
+ *
+ * Also, newer IBM firmware does not clear bat3 and 4 so
+ * this makes sure it's done.
+ * -- Cort
+ */
+clear_bats:
+ mfmsr r20
+ andi. r19,r20,MSR_DR
+ beqlr
+
+ li r20,0
+
+ mtspr DBAT0U,r20
+ mtspr DBAT0L,r20
+ mtspr IBAT0U,r20
+ mtspr IBAT0L,r20
+ sync
+ isync
+
+ mtspr DBAT1U,r20
+ mtspr DBAT1L,r20
+ mtspr IBAT1U,r20
+ mtspr IBAT1L,r20
+ sync
+ isync
+
+ mtspr DBAT2U,r20
+ mtspr DBAT2L,r20
+ mtspr IBAT2U,r20
+ mtspr IBAT2L,r20
+
+ mtspr DBAT3U,r20
+ mtspr DBAT3L,r20
+ mtspr IBAT3U,r20
+ mtspr IBAT3L,r20
+
+ blr
diff --git a/arch/ppc/kernel/misc.S b/arch/ppc/kernel/misc.S
index 32be1899a..4d041cc98 100644
--- a/arch/ppc/kernel/misc.S
+++ b/arch/ppc/kernel/misc.S
@@ -53,13 +53,29 @@ _GLOBAL(__no_use_save_flags)
/* void __no_use_restore_flags(unsigned long flags) */
_GLOBAL(__no_use_restore_flags)
- andi. r4,r3,MSR_EE
- bne 10f
- lis r4,ppc_n_lost_interrupts@ha
- lwz r4,ppc_n_lost_interrupts@l(r4)
- cmpi 0,r4,0 /* lost interrupts to process first? */
+/*
+ * Just set/clear the MSR_EE bit through restore/flags but do not
+ * change anything else. This is needed by the RT system and makes
+ * sense anyway.
+ * -- Cort
+ */
+ mfmsr r4
+ /* Copy all except the MSR_EE bit from r4 (current MSR value)
+ to r3. This is the sort of thing the rlwimi instruction is
+ designed for. -- paulus. */
+ rlwimi r3,r4,0,17,15
+ /* Check if things are setup the way we want _already_. */
+ cmpw 0,r3,r4
+ beqlr
+ /* are we enabling interrupts? */
+ rlwinm. r0,r3,0,16,16
+ beq 1f
+ /* if so, check if there are any lost interrupts */
+ lis r7,ppc_n_lost_interrupts@ha
+ lwz r7,ppc_n_lost_interrupts@l(r7)
+ cmpi 0,r7,0 /* lost interrupts to process first? */
bne- do_lost_interrupts
-10: sync
+1: sync
mtmsr r3
isync
blr
diff --git a/arch/ppc/kernel/pci.c b/arch/ppc/kernel/pci.c
index 575a18afe..de0a0a36d 100644
--- a/arch/ppc/kernel/pci.c
+++ b/arch/ppc/kernel/pci.c
@@ -92,7 +92,7 @@ static void __init pcibios_claim_resources(struct pci_bus *bus)
struct resource *pr;
if (!r->start)
continue;
- pr = pci_find_parent_resource(dev, r, 0);
+ pr = pci_find_parent_resource(dev, r);
if (!pr || request_resource(pr, r) < 0)
{
printk(KERN_ERR "PCI: Address space collision on region %d of device %s\n", idx, dev->name);
@@ -141,3 +141,8 @@ void __init fix_intr(struct device_node *node, struct pci_dev *dev)
}
}
#endif
+
+int pcibios_assign_resource(struct pci_dev *pdev, int resource)
+{
+ return 0;
+}
diff --git a/arch/ppc/kernel/pmac_setup.c b/arch/ppc/kernel/pmac_setup.c
index 6de8e5036..3418a7e8b 100644
--- a/arch/ppc/kernel/pmac_setup.c
+++ b/arch/ppc/kernel/pmac_setup.c
@@ -371,11 +371,18 @@ int boot_target;
int boot_part;
kdev_t boot_dev;
+extern void via_pmu_start(void);
+
void __init
pmac_init2(void)
{
+#ifdef CONFIG_ADB_PMU
+ via_pmu_start();
+#endif
+#ifdef CONFIG_NVRAM
pmac_nvram_init();
-#ifdef CONFIG_PMAC_PBOOK
+#endif
+#ifdef CONFIG_PMAC_PBOOK
media_bay_init();
#endif
}
@@ -411,7 +418,7 @@ note_scsi_host(struct device_node *node, void *host)
}
#endif
-#ifdef CONFIG_BLK_DEV_IDE_PMAC
+#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)
extern int pmac_ide_count;
extern struct device_node *pmac_ide_node[];
static int ide_majors[] = { 3, 22, 33, 34, 56, 57, 88, 89 };
@@ -441,7 +448,7 @@ kdev_t __init find_ide_boot(void)
return 0;
}
-#endif /* CONFIG_BLK_DEV_IDE_PMAC */
+#endif /* CONFIG_BLK_DEV_IDE && CONFIG_BLK_DEV_IDE_PMAC */
void __init find_boot_device(void)
{
@@ -452,7 +459,7 @@ void __init find_boot_device(void)
return;
}
#endif
-#ifdef CONFIG_BLK_DEV_IDE_PMAC
+#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)
boot_dev = find_ide_boot();
#endif
}
@@ -564,7 +571,7 @@ pmac_ide_default_irq(ide_ioreg_t base)
ide_ioreg_t
pmac_ide_default_io_base(int index)
{
-#if defined(CONFIG_BLK_DEV_IDE_PMAC)
+#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)
return pmac_ide_regbase[index];
#else
return 0;
@@ -602,7 +609,7 @@ pmac_ide_fix_driveid(struct hd_driveid *id)
ppc_generic_ide_fix_driveid(id);
}
-#if defined(CONFIG_BLK_DEV_IDE_PMAC)
+#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)
/* This is declared in drivers/block/ide-pmac.c */
void pmac_ide_init_hwif_ports (hw_regs_t *hw, ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq);
#else
@@ -659,7 +666,7 @@ pmac_init(unsigned long r3, unsigned long r4, unsigned long r5,
#endif
#endif
-#if defined(CONFIG_BLK_DEV_IDE_PMAC)
+#if defined(CONFIG_BLK_DEV_IDE) && defined(CONFIG_BLK_DEV_IDE_PMAC)
ppc_ide_md.insw = pmac_ide_insw;
ppc_ide_md.outsw = pmac_ide_outsw;
ppc_ide_md.default_irq = pmac_ide_default_irq;
diff --git a/arch/ppc/kernel/pmac_support.c b/arch/ppc/kernel/pmac_support.c
index 9d043ee85..abbec2ee0 100644
--- a/arch/ppc/kernel/pmac_support.c
+++ b/arch/ppc/kernel/pmac_support.c
@@ -55,7 +55,6 @@ void pmac_nvram_init(void)
}
}
-#ifdef CONFIG_NVRAM
unsigned char nvram_read_byte(int addr)
{
struct adb_request req;
@@ -101,4 +100,3 @@ void nvram_write_byte(unsigned char val, int addr)
}
eieio();
}
-#endif /* CONFIG_NVRAM */
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c
index 547b1142c..cabce054c 100644
--- a/arch/ppc/kernel/ppc_ksyms.c
+++ b/arch/ppc/kernel/ppc_ksyms.c
@@ -34,6 +34,7 @@
#ifdef __SMP__
#include <asm/smplock.h>
#endif /* __SMP__ */
+#include "time.h"
/* Tell string.h we don't want memcpy etc. as cpp defines */
#define EXPORT_SYMTAB_STROPS
@@ -134,7 +135,7 @@ EXPORT_SYMBOL(csum_tcpudp_magic);
EXPORT_SYMBOL(__copy_tofrom_user);
EXPORT_SYMBOL(__clear_user);
EXPORT_SYMBOL(__strncpy_from_user);
-EXPORT_SYMBOL(strlen_user);
+EXPORT_SYMBOL(__strnlen_user);
/*
EXPORT_SYMBOL(inb);
@@ -162,6 +163,12 @@ EXPORT_SYMBOL(iounmap);
EXPORT_SYMBOL(ide_insw);
EXPORT_SYMBOL(ide_outsw);
EXPORT_SYMBOL(ppc_ide_md);
+#ifdef CONFIG_BLK_DEV_IDE_MODULE
+EXPORT_SYMBOL(chrp_ide_irq);
+EXPORT_SYMBOL(chrp_ide_ports_known);
+EXPORT_SYMBOL(chrp_ide_regbase);
+EXPORT_SYMBOL(chrp_ide_probe);
+#endif
EXPORT_SYMBOL(start_thread);
EXPORT_SYMBOL(kernel_thread);
@@ -257,3 +264,6 @@ EXPORT_SYMBOL(timer_interrupt);
extern unsigned long do_IRQ_intercept;
EXPORT_SYMBOL(do_IRQ_intercept);
EXPORT_SYMBOL(irq_desc);
+void ppc_irq_dispatch_handler(struct pt_regs *, int);
+EXPORT_SYMBOL(ppc_irq_dispatch_handler);
+EXPORT_SYMBOL(decrementer_count);
diff --git a/arch/ppc/kernel/prom.c b/arch/ppc/kernel/prom.c
index 79e86ed35..22dcf8cbe 100644
--- a/arch/ppc/kernel/prom.c
+++ b/arch/ppc/kernel/prom.c
@@ -1,5 +1,5 @@
/*
- * $Id: prom.c,v 1.77 1999/09/14 01:13:19 cort Exp $
+ * $Id: prom.c,v 1.79 1999/10/08 01:56:32 paulus Exp $
*
* Procedures for interfacing to the Open Firmware PROM on
* Power Macintosh computers.
@@ -147,6 +147,7 @@ extern unsigned long reloc_offset(void);
extern char cmd_line[512]; /* XXX */
boot_infos_t *boot_infos = 0; /* init it so it's in data segment not bss */
+unsigned long dev_tree_size;
/*
* prom_init() is called very early on, before the kernel text
@@ -557,7 +558,7 @@ prom_init(int r3, int r4, prom_entry pp)
else
prom_print(RELOC("...failed\n"));
}
-#endif
+#endif
}
/*
@@ -754,8 +755,7 @@ finish_device_tree(void)
unsigned long mem = (unsigned long) klimit;
mem = finish_node(allnodes, mem, NULL);
- printk(KERN_INFO "device tree used %lu bytes\n",
- mem - (unsigned long) allnodes);
+ dev_tree_size = mem - (unsigned long) allnodes;
klimit = (char *) mem;
}
@@ -1494,6 +1494,7 @@ void
drawchar(char c)
{
unsigned long offset = reloc_offset();
+ int cline = 0, x;
switch (c) {
case '\b':
@@ -1509,6 +1510,7 @@ drawchar(char c)
case '\n':
RELOC(g_loc_X) = 0;
RELOC(g_loc_Y)++;
+ cline = 1;
break;
default:
draw_byte(c, RELOC(g_loc_X)++, RELOC(g_loc_Y));
@@ -1516,11 +1518,23 @@ drawchar(char c)
if (RELOC(g_loc_X) >= RELOC(g_max_loc_X)) {
RELOC(g_loc_X) = 0;
RELOC(g_loc_Y)++;
+ cline = 1;
}
+#if 0
while (RELOC(g_loc_Y) >= RELOC(g_max_loc_Y)) {
scrollscreen();
RELOC(g_loc_Y)--;
}
+#else
+ /* wrap around from bottom to top of screen so we don't
+ waste time scrolling each line. -- paulus. */
+ if (RELOC(g_loc_Y) >= RELOC(g_max_loc_Y))
+ RELOC(g_loc_Y) = 0;
+ if (cline) {
+ for (x = 0; x < RELOC(g_max_loc_X); ++x)
+ draw_byte(' ', x, RELOC(g_loc_Y));
+ }
+#endif
}
__pmac
diff --git a/arch/ppc/kernel/residual.c b/arch/ppc/kernel/residual.c
index 09eafd5f7..1c4bdfbd8 100644
--- a/arch/ppc/kernel/residual.c
+++ b/arch/ppc/kernel/residual.c
@@ -1,5 +1,5 @@
/*
- * $Id: residual.c,v 1.16 1999/09/17 17:23:09 cort Exp $
+ * $Id: residual.c,v 1.17 1999/09/27 18:40:23 cort Exp $
*
* Code to deal with the PReP residual data.
*
@@ -41,12 +41,13 @@
#include <linux/blk.h>
#include <linux/ioport.h>
#include <linux/pci.h>
+#include <linux/ide.h>
+#include <asm/init.h>
#include <asm/mmu.h>
#include <asm/processor.h>
#include <asm/io.h>
#include <asm/pgtable.h>
-#include <linux/ide.h>
#include <asm/ide.h>
diff --git a/arch/ppc/kernel/setup.c b/arch/ppc/kernel/setup.c
index 7ae97c81d..57955efca 100644
--- a/arch/ppc/kernel/setup.c
+++ b/arch/ppc/kernel/setup.c
@@ -1,5 +1,5 @@
/*
- * $Id: setup.c,v 1.159 1999/09/18 18:40:38 dmalek Exp $
+ * $Id: setup.c,v 1.160 1999/10/08 01:56:38 paulus Exp $
* Common prep/pmac/chrp boot and setup code.
*/
@@ -489,6 +489,28 @@ identify_machine(unsigned long r3, unsigned long r4, unsigned long r5,
m8xx_init(r3, r4, r5, r6, r7);
#endif
+ /* Look for mem= option on command line */
+ if (strstr(cmd_line, "mem=")) {
+ char *p, *q;
+ unsigned long maxmem = 0;
+ extern unsigned long __max_memory;
+
+ for (q = cmd_line; (p = strstr(q, "mem=")) != 0; ) {
+ q = p + 4;
+ if (p > cmd_line && p[-1] != ' ')
+ continue;
+ maxmem = simple_strtoul(q, &q, 0);
+ if (*q == 'k' || *q == 'K') {
+ maxmem <<= 10;
+ ++q;
+ } else if (*q == 'm' || *q == 'M') {
+ maxmem <<= 20;
+ ++q;
+ }
+ }
+ __max_memory = maxmem;
+ }
+
/* this is for modules since _machine can be a define -- Cort */
ppc_md.ppc_machine = _machine;
@@ -533,7 +555,7 @@ void __init setup_arch(char **cmdline_p,
if (strstr(cmd_line, "xmon"))
xmon(0);
#endif /* CONFIG_XMON */
-
+
/* reboot on panic */
panic_timeout = 180;
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c
index 76a223157..99a9c2bce 100644
--- a/arch/ppc/kernel/traps.c
+++ b/arch/ppc/kernel/traps.c
@@ -101,30 +101,27 @@ MachineCheckException(struct pt_regs *regs)
}
#endif
printk("Machine check in kernel mode.\n");
- printk("Caused by (from msr): ");
- printk("regs %p ",regs);
- switch( regs->msr & 0x0000F000)
- {
- case (1<<12) :
- printk("Machine check signal - probably due to mm fault\n"
- "with mmu off\n");
+ printk("Caused by (from SRR1=%lx): ", regs->msr);
+ switch (regs->msr & 0xF0000) {
+ case 0x80000:
+ printk("Machine check signal\n");
break;
- case (1<<13) :
+ case 0x40000:
printk("Transfer error ack signal\n");
break;
- case (1<<14) :
- printk("Data parity signal\n");
+ case 0x20000:
+ printk("Data parity error signal\n");
break;
- case (1<<15) :
- printk("Address parity signal\n");
+ case 0x10000:
+ printk("Address parity error signal\n");
break;
default:
printk("Unknown values in msr\n");
}
- show_regs(regs);
#if defined(CONFIG_XMON) || defined(CONFIG_KGDB)
debugger(regs);
#endif
+ show_regs(regs);
print_backtrace((unsigned long *)regs->gpr[1]);
panic("machine check");
}
diff --git a/arch/ppc/lib/string.S b/arch/ppc/lib/string.S
index be5504940..4ab90f8b7 100644
--- a/arch/ppc/lib/string.S
+++ b/arch/ppc/lib/string.S
@@ -380,16 +380,26 @@ __strncpy_from_user:
.long 1b,99b
.text
- .globl strlen_user
-strlen_user:
- addi r4,r3,-1
-1: lbzu r0,1(r4)
+/* r3 = str, r4 = len (> 0), r5 = top (highest addr) */
+ .globl __strnlen_user
+__strnlen_user:
+ addi r7,r3,-1
+ subf r6,r7,r5 /* top+1 - str */
+ cmplw 0,r4,r6
+ bge 0f
+ mr r6,r4
+0: mtctr r6 /* ctr = min(len, top - str) */
+1: lbzu r0,1(r7) /* get next byte */
cmpwi 0,r0,0
- bne 1b
- subf r3,r3,r4
- addi r3,r3,1
+ bdnzf 2,1b /* loop if --ctr != 0 && byte != 0 */
+ addi r7,r7,1
+ subf r3,r3,r7 /* number of bytes we have looked at */
+ beqlr /* return if we found a 0 byte */
+ cmpw 0,r3,r4 /* did we look at all len bytes? */
+ blt 99f /* if not, must have hit top */
+ addi r3,r4,1 /* return len + 1 to indicate no null found */
blr
-99: li r3,0
+99: li r3,0 /* bad address, return 0 */
blr
.section __ex_table,"a"
.align 2
diff --git a/arch/ppc/mm/init.c b/arch/ppc/mm/init.c
index e407ab4c3..eb158fb1e 100644
--- a/arch/ppc/mm/init.c
+++ b/arch/ppc/mm/init.c
@@ -1,5 +1,5 @@
/*
- * $Id: init.c,v 1.188 1999/09/18 18:40:44 dmalek Exp $
+ * $Id: init.c,v 1.193 1999/10/11 18:50:35 geert Exp $
*
* PowerPC version
* Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
@@ -113,7 +113,9 @@ struct mem_pieces prom_mem;
static void remove_mem_piece(struct mem_pieces *, unsigned, unsigned, int);
void *find_mem_piece(unsigned, unsigned);
static void print_mem_pieces(struct mem_pieces *);
+#if defined(CONFIG_PREP) || defined(CONFIG_APUS) || defined(CONFIG_ALL_PPC)
static void append_mem_piece(struct mem_pieces *, unsigned, unsigned);
+#endif
extern struct task_struct *current_set[NR_CPUS];
@@ -182,6 +184,8 @@ static inline unsigned long p_mapped_by_bats(unsigned long pa)
*/
int __map_without_bats = 0;
+/* max amount of RAM to use */
+unsigned long __max_memory;
void __bad_pte(pmd_t *pmd)
{
@@ -677,6 +681,7 @@ static void __init print_mem_pieces(struct mem_pieces *mp)
printk("\n");
}
+#if defined(CONFIG_PREP) || defined(CONFIG_APUS) || defined(CONFIG_PPC_ALL)
/*
* Add some memory to an array of pieces
*/
@@ -691,6 +696,7 @@ append_mem_piece(struct mem_pieces *mp, unsigned start, unsigned size)
rp->address = start;
rp->size = size;
}
+#endif
#ifndef CONFIG_8xx
static void hash_init(void);
@@ -738,6 +744,7 @@ static void __init coalesce_mem_pieces(struct mem_pieces *mp)
mp->n_regions = d;
}
+#if defined(CONFIG_PMAC) || defined(CONFIG_CHRP) || defined(CONFIG_ALL_PPC)
/*
* Read in a property describing some pieces of memory.
*/
@@ -760,6 +767,7 @@ static void __init get_mem_prop(char *name, struct mem_pieces *mp)
sort_mem_pieces(mp);
coalesce_mem_pieces(mp);
}
+#endif /* CONFIG_PMAC || CONFIG_CHRP || CONFIG_ALL_PPC */
/*
* Set up one of the I/D BAT (block address translation) register pairs.
@@ -933,7 +941,7 @@ void __init free_initmem(void)
a = (unsigned long)(&START); \
for (; a < (unsigned long)(&END); a += PAGE_SIZE) { \
clear_bit(PG_reserved, &mem_map[MAP_NR(a)].flags); \
- atomic_set(&mem_map[MAP_NR(a)].count, 1); \
+ set_page_count(mem_map+MAP_NR(a), 1); \
free_page(a); \
CNT++; \
} \
@@ -1005,8 +1013,10 @@ void __init MMU_init(void)
else if (_machine == _MACH_apus )
end_of_DRAM = apus_find_end_of_memory();
#endif
+#ifdef CONFIG_GEMINI
else if ( _machine == _MACH_gemini )
end_of_DRAM = gemini_find_end_of_memory();
+#endif /* CONFIG_GEMINI */
else /* prep */
end_of_DRAM = prep_find_end_of_memory();
@@ -1037,14 +1047,16 @@ void __init MMU_init(void)
setbat(3, 0x90000000, 0x90000000, 0x10000000, IO_PAGE);
break;
case _MACH_Pmac:
+#if 0
{
unsigned long base = 0xf3000000;
struct device_node *macio = find_devices("mac-io");
if (macio && macio->n_addrs)
base = macio->addrs[0].address;
setbat(0, base, base, 0x100000, IO_PAGE);
- ioremap_base = 0xf0000000;
}
+#endif
+ ioremap_base = 0xf0000000;
break;
case _MACH_apus:
/* Map PPC exception vectors. */
@@ -1172,17 +1184,13 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
remove_mem_piece(&phys_avail, __pa(avail_start),
start_mem - avail_start, 1);
- for (addr = PAGE_OFFSET; addr < end_mem; addr += PAGE_SIZE)
- set_bit(PG_reserved, &mem_map[MAP_NR(addr)].flags);
-
for (i = 0; i < phys_avail.n_regions; ++i) {
a = (unsigned long) __va(phys_avail.regions[i].address);
- lim = a + phys_avail.regions[i].size;
+ lim = (a + phys_avail.regions[i].size) & PAGE_MASK;
a = PAGE_ALIGN(a);
for (; a < lim; a += PAGE_SIZE)
clear_bit(PG_reserved, &mem_map[MAP_NR(a)].flags);
}
- phys_avail.n_regions = 0;
#ifdef CONFIG_BLK_DEV_INITRD
/* if we are booted from BootX with an initial ramdisk,
@@ -1196,7 +1204,7 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
/* free the prom's memory - no-op on prep */
for (i = 0; i < prom_mem.n_regions; ++i) {
a = (unsigned long) __va(prom_mem.regions[i].address);
- lim = a + prom_mem.regions[i].size;
+ lim = (a + prom_mem.regions[i].size) & PAGE_MASK;
a = PAGE_ALIGN(a);
for (; a < lim; a += PAGE_SIZE)
clear_bit(PG_reserved, &mem_map[MAP_NR(a)].flags);
@@ -1215,12 +1223,12 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
datapages++;
continue;
}
- atomic_set(&mem_map[MAP_NR(addr)].count, 1);
+ set_page_count(mem_map + MAP_NR(addr), 1);
#ifdef CONFIG_BLK_DEV_INITRD
if (!initrd_start ||
addr < (initrd_start & PAGE_MASK) || addr >= initrd_end)
#endif /* CONFIG_BLK_DEV_INITRD */
-#ifndef CONFIG_8xx
+#ifndef CONFIG_8xx
if ( !rtas_data ||
addr < (rtas_data & PAGE_MASK) ||
addr >= (rtas_data+rtas_size))
@@ -1238,7 +1246,7 @@ void __init mem_init(unsigned long start_mem, unsigned long end_mem)
}
#ifndef CONFIG_8xx
-#if defined(CONFIG_PMAC) || defined(CONFIG_PPC_ALL)
+#if defined(CONFIG_PMAC) || defined(CONFIG_CHRP) || defined(CONFIG_ALL_PPC)
/*
* On systems with Open Firmware, collect information about
* physical RAM and which pieces are already in use.
@@ -1286,8 +1294,12 @@ unsigned long __init *pmac_find_end_of_memory(void)
* to our nearest IO area.
* -- Cort
*/
- if ( phys_mem.regions[0].size >= RAM_LIMIT )
- phys_mem.regions[0].size = RAM_LIMIT;
+ if (__max_memory == 0 || __max_memory > RAM_LIMIT)
+ __max_memory = RAM_LIMIT;
+ if (phys_mem.regions[0].size >= __max_memory) {
+ phys_mem.regions[0].size = __max_memory;
+ phys_mem.n_regions = 1;
+ }
total = phys_mem.regions[0].size;
if (phys_mem.n_regions > 1) {
@@ -1300,20 +1312,15 @@ unsigned long __init *pmac_find_end_of_memory(void)
if (boot_infos == 0) {
/* record which bits the prom is using */
get_mem_prop("available", &phys_avail);
+ prom_mem = phys_mem;
+ for (i = 0; i < phys_avail.n_regions; ++i)
+ remove_mem_piece(&prom_mem,
+ phys_avail.regions[i].address,
+ phys_avail.regions[i].size, 0);
} else {
/* booted from BootX - it's all available (after klimit) */
phys_avail = phys_mem;
- }
- prom_mem = phys_mem;
- for (i = 0; i < phys_avail.n_regions; ++i)
- {
- if ( phys_avail.regions[i].address >= RAM_LIMIT )
- continue;
- if ( (phys_avail.regions[i].address+phys_avail.regions[i].size)
- >= RAM_LIMIT )
- phys_avail.regions[i].size = RAM_LIMIT - phys_avail.regions[i].address;
- remove_mem_piece(&prom_mem, phys_avail.regions[i].address,
- phys_avail.regions[i].size, 1);
+ prom_mem.n_regions = 0;
}
/*
@@ -1331,9 +1338,9 @@ unsigned long __init *pmac_find_end_of_memory(void)
#undef RAM_LIMIT
return __va(total);
}
-#endif /* defined(CONFIG_PMAC) || defined(CONFIG_PPC_ALL) */
+#endif /* CONFIG_PMAC || CONFIG_CHRP || CONFIG_ALL_PPC */
-#if defined(CONFIG_PREP) || defined(CONFIG_PPC_ALL)
+#if defined(CONFIG_PREP) || defined(CONFIG_ALL_PPC)
/*
* This finds the amount of physical ram and does necessary
* setup for prep. This is pretty architecture specific so
@@ -1365,10 +1372,10 @@ unsigned long __init *prep_find_end_of_memory(void)
return (__va(total));
}
-#endif /* defined(CONFIG_PREP) || defined(CONFIG_PPC_ALL) */
+#endif /* defined(CONFIG_PREP) || defined(CONFIG_ALL_PPC) */
-#if defined(CONFIG_GEMINI) || defined(CONFIG_PPC_ALL)
+#if defined(CONFIG_GEMINI)
unsigned long __init *gemini_find_end_of_memory(void)
{
unsigned long total, kstart, ksize, *ret;
@@ -1389,7 +1396,7 @@ unsigned long __init *gemini_find_end_of_memory(void)
remove_mem_piece( &phys_avail, kstart, ksize, 0 );
return ret;
}
-#endif /* defined(CONFIG_GEMINI) || defined(CONFIG_PPC_ALL) */
+#endif /* defined(CONFIG_GEMINI) || defined(CONFIG_ALL_PPC) */
#ifdef CONFIG_APUS
#define HARDWARE_MAPPED_SIZE (512*1024)
diff --git a/arch/ppc/pmac_defconfig b/arch/ppc/pmac_defconfig
index 1962b2ae6..514843d00 100644
--- a/arch/ppc/pmac_defconfig
+++ b/arch/ppc/pmac_defconfig
@@ -7,15 +7,18 @@
#
CONFIG_PPC=y
CONFIG_6xx=y
+# CONFIG_PPC64 is not set
+# CONFIG_82xx is not set
# CONFIG_8xx is not set
CONFIG_PMAC=y
# CONFIG_PREP is not set
# CONFIG_CHRP is not set
# CONFIG_ALL_PPC is not set
+# CONFIG_GEMINI is not set
# CONFIG_APUS is not set
-# CONFIG_MBX is not set
-CONFIG_MACH_SPECIFIC=y
# CONFIG_SMP is not set
+CONFIG_MACH_SPECIFIC=y
+CONFIG_6xx=y
#
# General setup
@@ -25,8 +28,6 @@ CONFIG_MODULES=y
# CONFIG_MODVERSIONS is not set
CONFIG_KMOD=y
CONFIG_PCI=y
-# CONFIG_PCI_QUIRKS is not set
-CONFIG_PCI_OLD_PROC=y
CONFIG_NET=y
CONFIG_SYSCTL=y
CONFIG_SYSVIPC=y
@@ -34,27 +35,35 @@ CONFIG_SYSVIPC=y
CONFIG_BINFMT_ELF=y
CONFIG_KERNEL_ELF=y
CONFIG_BINFMT_MISC=m
-# CONFIG_BINFMT_JAVA is not set
+
+#
+# PCMCIA/Cardbus support
+#
+CONFIG_PCMCIA=m
+CONFIG_CARDBUS=y
# CONFIG_PARPORT is not set
# CONFIG_VGA_CONSOLE is not set
CONFIG_FB=y
CONFIG_FB_COMPAT_XPMAC=y
CONFIG_PMAC_PBOOK=y
-CONFIG_MAC_KEYBOARD=y
CONFIG_MAC_FLOPPY=y
CONFIG_MAC_SERIAL=y
-CONFIG_ADBMOUSE=y
-CONFIG_BLK_DEV_IDE_PMAC=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_ADB=y
+CONFIG_ADB_CUDA=y
+CONFIG_ADB_MACIO=y
+CONFIG_ADB_PMU=y
+CONFIG_ADB_KEYBOARD=y
CONFIG_PROC_DEVICETREE=y
-# CONFIG_KGDB is not set
-# CONFIG_XMON is not set
# CONFIG_TOTALMP is not set
CONFIG_BOOTX_TEXT=y
+# CONFIG_MOTOROLA_HOTSWAP is not set
#
-# Plug and Play support
+# Plug and Play configuration
#
# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
#
# Block devices
@@ -67,24 +76,45 @@ CONFIG_BLK_DEV_IDE=y
#
# CONFIG_BLK_DEV_HD_IDE is not set
CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y
# 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 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 is not set
+# CONFIG_BLK_DEV_AEC6210 is not set
+CONFIG_BLK_DEV_CMD646=y
+# CONFIG_BLK_DEV_CY82C693 is not set
+# 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 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_SL82C105 is not set
CONFIG_BLK_DEV_IDE_PMAC=y
CONFIG_BLK_DEV_IDEDMA_PMAC=y
-CONFIG_BLK_DEV_IDEDMA=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
#
# Additional Block Devices
#
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_RAM=y
@@ -92,16 +122,19 @@ CONFIG_BLK_DEV_INITRD=y
# CONFIG_BLK_DEV_XD is not set
CONFIG_PARIDE_PARPORT=y
# CONFIG_PARIDE is not set
+CONFIG_BLK_DEV_IDE_MODES=y
# CONFIG_BLK_DEV_HD is not set
#
# Networking options
#
CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
CONFIG_NETLINK=y
# CONFIG_RTNETLINK is not set
# CONFIG_NETLINK_DEV is not set
-# CONFIG_FIREWALL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
# CONFIG_FILTER is not set
CONFIG_UNIX=y
CONFIG_INET=y
@@ -118,16 +151,17 @@ CONFIG_IP_ALIAS=y
#
# (it is safe to leave these untouched)
#
-CONFIG_INET_RARP=y
-CONFIG_IP_NOSR=y
CONFIG_SKB_LARGE=y
# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
#
#
#
# CONFIG_IPX is not set
CONFIG_ATALK=m
+# CONFIG_DECNET is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_BRIDGE is not set
@@ -136,7 +170,6 @@ CONFIG_ATALK=m
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_FASTROUTE is not set
# CONFIG_NET_HW_FLOWCONTROL is not set
-# CONFIG_CPU_IS_SLOW is not set
#
# QoS and/or fair queueing
@@ -173,9 +206,11 @@ CONFIG_SCSI_CONSTANTS=y
# CONFIG_SCSI_AHA1542 is not set
# CONFIG_SCSI_AHA1740 is not set
CONFIG_SCSI_AIC7XXX=y
-# CONFIG_OVERRIDE_CMDS is not set
+# CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT is not set
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
CONFIG_AIC7XXX_PROC_STATS=y
CONFIG_AIC7XXX_RESET_DELAY=15
+# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
@@ -189,15 +224,19 @@ CONFIG_AIC7XXX_RESET_DELAY=15
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C8XX is not set
+# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_T128 is not set
@@ -212,10 +251,19 @@ CONFIG_SCSI_MAC53C94=y
# Network device support
#
CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
# CONFIG_ARCNET is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
# CONFIG_ETHERTAP is not set
+# CONFIG_NET_SB1000 is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
CONFIG_NET_ETHERNET=y
CONFIG_MACE=y
CONFIG_BMAC=y
@@ -223,12 +271,16 @@ CONFIG_BMAC=y
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_RTL8139 is not set
# CONFIG_YELLOWFIN is not set
-# CONFIG_ACENIC is not set
+# CONFIG_RTL8139 is not set
+# CONFIG_SIS900 is not set
+# CONFIG_DM9102 is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
# CONFIG_NET_ISA is not set
CONFIG_NET_EISA=y
# CONFIG_PCNET32 is not set
+# CONFIG_ACENIC is not set
# CONFIG_AC3200 is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
@@ -247,22 +299,43 @@ CONFIG_DE4X5=y
# CONFIG_NET_POCKET is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
-# CONFIG_DLCI is not set
+
+#
+# Appletalk devices
+#
# CONFIG_LTPC is not set
# CONFIG_COPS is not set
# CONFIG_IPDDP is not set
CONFIG_PPP=y
+CONFIG_PPP_ASYNC=y
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_SLIP is not set
#
-# CCP compressors for PPP are only built as modules.
+# Wireless LAN (non-hamradio)
#
-# CONFIG_SLIP is not set
# CONFIG_NET_RADIO is not set
+
+#
+# Token Ring driver support
+#
# CONFIG_TR is not set
-# CONFIG_SHAPER is not set
-# CONFIG_HOSTESS_SV11 is not set
-# CONFIG_COSA is not set
+# CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network devices
+#
+# CONFIG_PCMCIA_PCNET is not set
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_RAYCS is not set
#
# Amateur Radio support
@@ -275,24 +348,32 @@ CONFIG_PPP=y
# CONFIG_ISDN is not set
#
-# CD-ROM drivers (not for SCSI or IDE/ATAPI drives)
+# Old CD-ROM drivers (not SCSI, not IDE)
#
# CONFIG_CD_NO_IDESCSI is not set
#
# Console drivers
#
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_CLGEN is not set
+# CONFIG_FB_PM2 is not set
CONFIG_FB_OF=y
CONFIG_FB_CONTROL=y
CONFIG_FB_PLATINUM=y
CONFIG_FB_VALKYRIE=y
-CONFIG_FB_ATY=y
CONFIG_FB_IMSTT=y
CONFIG_FB_CT65550=y
# CONFIG_FB_S3TRIO is not set
+# CONFIG_FB_VGA16 is not set
# CONFIG_FB_MATROX is not set
CONFIG_FB_ATY=y
+# CONFIG_FB_3DFX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
CONFIG_FBCON_CFB8=y
@@ -314,11 +395,20 @@ CONFIG_FONT_SUN12x22=y
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
-# CONFIG_SERIAL is not set
+CONFIG_SERIAL=m
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# Mice
+#
+CONFIG_BUSMOUSE=y
+# CONFIG_ATIXL_BUSMOUSE is not set
+# CONFIG_LOGIBUSMOUSE is not set
+# CONFIG_MS_BUSMOUSE is not set
+CONFIG_ADBMOUSE=y
# CONFIG_MOUSE is not set
# CONFIG_QIC02_TAPE is not set
# CONFIG_WATCHDOG is not set
@@ -334,11 +424,51 @@ CONFIG_NVRAM=y
# Joystick support
#
# CONFIG_JOYSTICK is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
#
# Ftape, the floppy tape device driver
#
# CONFIG_FTAPE is not set
+# CONFIG_DRM is not set
+
+#
+# USB drivers - not for the faint of heart
+#
+CONFIG_USB=y
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+CONFIG_USB_OHCI=y
+CONFIG_USB_OHCI_DEBUG=y
+# CONFIG_USB_OHCI_HCD is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEBUG_ISOC=y
+CONFIG_USB_PROC=y
+# CONFIG_USB_EZUSB is not set
+
+#
+# USB Devices
+#
+CONFIG_USB_HUB=y
+CONFIG_USB_MOUSE=y
+CONFIG_USB_HP_SCANNER=m
+CONFIG_USB_KBD=y
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_CPIA is not set
+CONFIG_USB_SCSI=m
+CONFIG_USB_SCSI_DEBUG=y
+# CONFIG_USB_USS720 is not set
#
# Filesystems
@@ -347,13 +477,15 @@ CONFIG_NVRAM=y
CONFIG_AUTOFS_FS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
-CONFIG_HFS_FS=y
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
+# CONFIG_HFS_FS is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set
-CONFIG_VFAT_FS=m
+# CONFIG_VFAT_FS is not set
+# CONFIG_EFS_FS is not set
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
+# CONFIG_UDF_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_NTFS_FS is not set
# CONFIG_HPFS_FS is not set
@@ -380,52 +512,38 @@ CONFIG_LOCKD=y
#
# Partition Types
#
-# CONFIG_BSD_DISKLABEL is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_OSF_PARTITION is not set
CONFIG_MAC_PARTITION=y
-# CONFIG_SMD_DISKLABEL is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_NLS=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_NLS is not set
#
# Sound
#
CONFIG_SOUND=y
CONFIG_DMASOUND=y
+# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_ES1370 is not set
# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_OSS is not set
+
+#
+# Kernel hacking
+#
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_KGDB is not set
+# CONFIG_XMON is not set