diff --git a/arch/ppc/Config.help b/arch/ppc/Config.help index 38f4e12e6de3b6092d112c0bfc80f71bc43da87e..40a9633e06bf85f50efdacdbe24f314c89b18081 100644 --- a/arch/ppc/Config.help +++ b/arch/ppc/Config.help @@ -340,9 +340,16 @@ CONFIG_PREP_RESIDUAL other useful pieces of information. Sometimes this information is not present or incorrect. - Unless you expect to boot on a PReP system, there is not need to + Unless you expect to boot on a PReP system, there is no need to select Y. +PReP residual data available in /proc/residual +CONFIG_PROC_PREPRESIDUAL + Enabling this option will create a /proc/residual file which allows + you to get at the residual data on PReP systems. You will need a tool + (lsresidual) to parse it. If you aren't on a PReP system, you don't + want this. + CONFIG_ADB Apple Desktop Bus (ADB) support is for support of devices which are connected to an ADB port. ADB devices tend to have 4 pins. diff --git a/arch/ppc/boot/common/misc-simple.c b/arch/ppc/boot/common/misc-simple.c index a2965595aa5f08cb5b39ad9611d348696cb6d9ee..9dbbc83af42dd922658fbb5846d0fbd4464bc05b 100644 --- a/arch/ppc/boot/common/misc-simple.c +++ b/arch/ppc/boot/common/misc-simple.c @@ -67,7 +67,7 @@ extern int CRT_tstc(void); extern unsigned long serial_init(int chan, void *ignored); extern void serial_close(unsigned long com_port); extern void gunzip(void *, int, unsigned char *, int *); -extern void setup_legacy(void); +extern void serial_fixups(void); struct bi_record * decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum) @@ -76,7 +76,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum) char *cp, ch; struct bi_record *rec, *birecs; - setup_legacy(); + serial_fixups(); com_port = serial_init(0, NULL); /* assume the chunk below 8M is free */ diff --git a/arch/ppc/boot/common/relocate.S b/arch/ppc/boot/common/relocate.S index 3f9ba51004b4b245a4e009e0a0742f20fd600267..9c49a9c09f80414293f1ef6282e4370544bffa2d 100644 --- a/arch/ppc/boot/common/relocate.S +++ b/arch/ppc/boot/common/relocate.S @@ -9,7 +9,7 @@ * trini@mvista.com * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others). * - * Copyright 2001 MontaVista Software Inc. + * Copyright 2001-2002 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -188,10 +188,11 @@ start_ldr: bl decompress_kernel /* - * Make sure the kernel knows we don't have things set in + * Make sure the kernel knows we don't have things set in * registers. -- Tom */ li r4,0 + li r5,0 li r6,0 /* diff --git a/arch/ppc/boot/prep/misc.c b/arch/ppc/boot/prep/misc.c index cc76c012d0a1e5faaa33f8533e7987375618f38c..9c600273f2cd96be9444227d4b0d33e4198e6594 100644 --- a/arch/ppc/boot/prep/misc.c +++ b/arch/ppc/boot/prep/misc.c @@ -75,7 +75,7 @@ extern void gunzip(void *, int, unsigned char *, int *); extern void _put_MSR(unsigned int val); extern unsigned long serial_init(int chan, void *ignored); -extern void setup_legacy(void); +extern void serial_fixups(void); void writel(unsigned int val, unsigned int address) @@ -134,7 +134,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum, int start_multi = 0; unsigned int pci_viddid, pci_did, tulip_pci_base, tulip_base; - setup_legacy(); + serial_fixups(); #if defined(CONFIG_SERIAL_CONSOLE) com_port = serial_init(0, NULL); #endif /* CONFIG_SERIAL_CONSOLE */ diff --git a/arch/ppc/boot/simple/chrpmap.S b/arch/ppc/boot/simple/chrpmap.S index 10f1f39a1898dffd952b0bf2cfa9b29c6a70b5be..7aba1c0d800382fa156b323def903ddc10ccbfc7 100644 --- a/arch/ppc/boot/simple/chrpmap.S +++ b/arch/ppc/boot/simple/chrpmap.S @@ -3,15 +3,15 @@ * * Author: Tom Rini <trini@mvista.com> * - * This will go and setup ISA_io to 0xFE00000. + * This will go and setup ISA_io to 0xFE00000 and return. */ #include <asm/ppc_asm.h> .text - .globl setup_legacy -setup_legacy: + .globl serial_fixups +serial_fixups: lis r3,ISA_io@h /* Load ISA_io */ ori r3,r3,ISA_io@l lis r4,0xFE00 /* Load the value, 0xFE00000 */ diff --git a/arch/ppc/boot/simple/direct.S b/arch/ppc/boot/simple/direct.S index 3c582b3a99fd07d81d4d9f47e457144caab74a21..b5ced833e370fbcf6f93c62098f5ea18d21c66e7 100644 --- a/arch/ppc/boot/simple/direct.S +++ b/arch/ppc/boot/simple/direct.S @@ -4,11 +4,12 @@ * Author: Tom Rini <trini@mvista.com> * * This is an empty function for machines which use SERIAL_IO_MEM - * and don't need ISA_io set to anything but 0; + * and don't need ISA_io set to anything but 0, or perform any other + * serial fixups. */ .text - .globl setup_legacy -setup_legacy: + .globl serial_fixups +serial_fixups: blr diff --git a/arch/ppc/boot/simple/legacy.S b/arch/ppc/boot/simple/legacy.S index ae2769a1f512cb011445d987ae81dce0bca8deb0..1c7e2976433ac0c261ce06185713601e922f7b7d 100644 --- a/arch/ppc/boot/simple/legacy.S +++ b/arch/ppc/boot/simple/legacy.S @@ -3,15 +3,15 @@ * * Author: Tom Rini <trini@mvista.com> * - * This will go and setup ISA_io to 0x8000000. + * This will go and setup ISA_io to 0x8000000 and return. */ #include <asm/ppc_asm.h> .text - .globl setup_legacy -setup_legacy: + .globl serial_fixups +serial_fixups: lis r3,ISA_io@h /* Load ISA_io */ ori r3,r3,ISA_io@l lis r4,0x8000 /* Load the value, 0x8000000 */ diff --git a/arch/ppc/boot/simple/misc-embedded.c b/arch/ppc/boot/simple/misc-embedded.c index ad2f403dccae26cb9df16d646c962e9872bd34d0..d415843cc836998f1fec16b9856f54eae37b87b5 100644 --- a/arch/ppc/boot/simple/misc-embedded.c +++ b/arch/ppc/boot/simple/misc-embedded.c @@ -54,7 +54,7 @@ char *bootrom_cmdline = ""; char compiled_string[] = CONFIG_CMDLINE; #endif char ramroot_string[] = "root=/dev/ram"; -char netroot_string[] = "root=/dev/nfs rw ip=auto"; +char netroot_string[] = "root=/dev/nfs rw ip=on"; /* Serial port to use. */ unsigned long com_port; diff --git a/arch/ppc/config.in b/arch/ppc/config.in index a917c3d2feb3207b7fe4b0a8a55a3491527b60c3..2219895c653f4729ff6abdb21001ffed079870d2 100644 --- a/arch/ppc/config.in +++ b/arch/ppc/config.in @@ -362,6 +362,7 @@ if [ "$CONFIG_ALL_PPC" = "y" ]; then bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE bool 'Support for RTAS (RunTime Abstraction Services) in /proc' CONFIG_PPC_RTAS bool 'Support for PReP Residual Data' CONFIG_PREP_RESIDUAL + dep_bool ' Support for reading of PReP Residual Data in /proc' CONFIG_PROC_PREPRESIDUAL $CONFIG_PREP_RESIDUAL fi bool 'Default bootloader kernel arguments' CONFIG_CMDLINE_BOOL @@ -574,15 +575,15 @@ if [ "$CONFIG_8260" = "y" ]; then source arch/ppc/8260_io/Config.in fi -if [ "$CONFIG_4xx" = "y"]; then +if [ "$CONFIG_4xx" = "y" ]; then mainmenu_option next_comment comment 'IBM 4xx options' if [ "$CONFIG_STB03xxx" = "y" ]; then bool 'STB IR Keyboard' CONFIG_STB_KB bool 'SICC Serial port' CONFIG_SERIAL_SICC if [ "$CONFIG_SERIAL_SICC" = "y" -a "$CONFIG_UART0_TTYS1" = "y" ]; then - define_bool CONFIG_UART1_DFLT_CONSOLE y - define_bool CONFIG_SERIAL_SICC_CONSOLE y + define_bool CONFIG_UART1_DFLT_CONSOLE y + define_bool CONFIG_SERIAL_SICC_CONSOLE y fi fi endmenu @@ -621,8 +622,8 @@ if [ "$CONFIG_ALL_PPC" = "y" ]; then fi if [ "$CONFIG_4xx" = "y" -o "$CONFIG_GT64260" = "y" \ -o "$CONFIG_LOPEC" = "y" -o "$CONFIG_MCPN765" = "y" \ - -o "$CONFIG_PRPMC800" = "y" -o "$CONFIG_SANDPOINT" = "y" \ - -o "$CONFIG_ZX4500" = "y" ]; then + -o "$CONFIG_PPLUS" = "y" -o "$CONFIG_PRPMC800" = "y" \ + -o "$CONFIG_SANDPOINT" = "y" -o "$CONFIG_ZX4500" = "y" ]; then bool 'Support for early boot texts over serial port' CONFIG_SERIAL_TEXT_DEBUG fi endmenu diff --git a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile index ed1897f264b999a2e50fba942f24188d1a4c9081..4841c88534de99762cfe2f24a435bdd3bcc9a3b9 100644 --- a/arch/ppc/kernel/Makefile +++ b/arch/ppc/kernel/Makefile @@ -56,19 +56,18 @@ obj-$(CONFIG_PM) += ppc4xx_pm.o endif obj-$(CONFIG_8xx) += m8xx_setup.o ppc8xx_pic.o ifeq ($(CONFIG_8xx),y) -obj-$(CONFIG_PCI) += qspan_pci.o -ifndef CONFIG_MATH_EMULATION +obj-$(CONFIG_PCI) += qspan_pci.o i8259.o +ifneq ($(CONFIG_MATH_EMULATION),n) obj-y += softemu8xx.o endif endif -obj-$(CONFIG_MBX) += i8259.o obj-$(CONFIG_ALL_PPC) += prom_init.o prom.o open_pic.o \ indirect_pci.o i8259.o obj-$(CONFIG_ADIR) += i8259.o indirect_pci.o pci_auto.o \ todc_time.o obj-$(CONFIG_EV64260) += gt64260_common.o gt64260_pic.o \ indirect_pci.o todc_time.o pci_auto.o -obj-$(CONFIG_GEMINI) += open_pic.o +obj-$(CONFIG_GEMINI) += open_pic.o i8259.o obj-$(CONFIG_K2) += i8259.o indirect_pci.o todc_time.o \ pci_auto.o obj-$(CONFIG_LOPEC) += mpc10x_common.o indirect_pci.o pci_auto.o \ diff --git a/arch/ppc/kernel/i8259.c b/arch/ppc/kernel/i8259.c index 0a1ed9d7e5bc2254d9e44965f66397a616b48729..1872114131aaec47eacee8887815f9a338ae9044 100644 --- a/arch/ppc/kernel/i8259.c +++ b/arch/ppc/kernel/i8259.c @@ -21,17 +21,37 @@ static spinlock_t i8259_lock = SPIN_LOCK_UNLOCKED; int i8259_pic_irq_offset; -/* Acknowledge the irq using the PCI host bridge's interrupt acknowledge - * feature. (Polling is somehow broken on some IBM and Motorola PReP boxes.) +/* + * Acknowledge the IRQ using either the PCI host bridge's interrupt + * acknowledge feature or poll. How i8259_init() is called determines + * which is called. It should be noted that polling is broken on some + * IBM and Motorola PReP boxes so we must use the int-ack feature on them. */ -int i8259_irq(struct pt_regs *regs) +int +i8259_irq(struct pt_regs *regs) { int irq; - spin_lock/*_irqsave*/(&i8259_lock/*, flags*/); + spin_lock(&i8259_lock); + + /* Either int-ack or poll for the IRQ */ + if (pci_intack) + irq = *pci_intack; + else { + /* Perform an interrupt acknowledge cycle on controller 1. */ + outb(0x0C, 0x20); /* prepare for poll */ + irq = inb(0x20) & 7; + if (irq == 2 ) { + /* + * Interrupt is cascaded so perform interrupt + * acknowledge on controller 2. + */ + outb(0x0C, 0xA0); /* prepare for poll */ + irq = (inb(0xA0) & 7) + 8; + } + } - irq = *pci_intack; - if (irq==7) { + if (irq == 7) { /* * This may be a spurious interrupt. * @@ -39,47 +59,13 @@ int i8259_irq(struct pt_regs *regs) * significant bit is not set then there is no valid * interrupt. */ - if(~inb(0x20)&0x80) { + if (!pci_intack) + outb(0x0B, 0x20); /* ISR register */ + if(~inb(0x20) & 0x80) irq = -1; - } } - spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/); - return irq; -} -/* Poke the 8259's directly using poll commands. */ -int i8259_poll(void) -{ - int irq; - - spin_lock/*_irqsave*/(&i8259_lock/*, flags*/); - /* - * Perform an interrupt acknowledge cycle on controller 1 - */ - outb(0x0C, 0x20); /* prepare for poll */ - irq = inb(0x20) & 7; - if (irq == 2) { - /* - * Interrupt is cascaded so perform interrupt - * acknowledge on controller 2 - */ - outb(0x0C, 0xA0); /* prepare for poll */ - irq = (inb(0xA0) & 7) + 8; - } else if (irq==7) { - /* - * This may be a spurious interrupt - * - * Read the interrupt status register. If the most - * significant bit is not set then there is no valid - * interrupt - */ - outb(0x0b, 0x20); - if(~inb(0x20)&0x80) { - spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/); - return -1; - } - } - spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/); + spin_unlock(&i8259_lock); return irq; } @@ -171,11 +157,13 @@ static struct resource pic_edgectrl_iores = { "8259 edge control", 0x4d0, 0x4d1, IORESOURCE_BUSY }; -/* i8259_init() +/* + * i8259_init() * intack_addr - PCI interrupt acknowledge (real) address which will return * the active irq from the 8259 */ -void __init i8259_init(long intack_addr) +void __init +i8259_init(long intack_addr) { unsigned long flags; @@ -209,9 +197,6 @@ void __init i8259_init(long intack_addr) request_resource(&ioport_resource, &pic2_iores); request_resource(&ioport_resource, &pic_edgectrl_iores); - /* XXX remove me after board maintainers fix their i8259_init calls */ - if (intack_addr == 0) - panic("You must supply a PCI interrupt acknowledge address to i8259_init()\n"); - - pci_intack = ioremap(intack_addr, 1); + if (intack_addr != 0) + pci_intack = ioremap(intack_addr, 1); } diff --git a/arch/ppc/kernel/open_pic.c b/arch/ppc/kernel/open_pic.c index e06a5372a08abf8883f6253ea9a32159048271d1..4e436e3a1d42de93077ec1349d325ce109c9e167 100644 --- a/arch/ppc/kernel/open_pic.c +++ b/arch/ppc/kernel/open_pic.c @@ -799,26 +799,20 @@ static void openpic_ipi_action(int cpl, void *dev_id, struct pt_regs *regs) #endif /* CONFIG_SMP */ -/* This one may be merged with PReP and CHRP */ int openpic_get_irq(struct pt_regs *regs) { -/* - * Clean up needed. -VAL - */ int irq = openpic_irq(); - /* Management of the cascade should be moved out of here */ - - /* Yep - because openpic !=> i8259, for one thing. -VAL */ - if (open_pic_irq_offset && irq == open_pic_irq_offset) - { -#ifndef CONFIG_GEMINI - irq = i8259_irq(regs); /* get IRQ from cascade */ -#endif + /* + * This needs to be cleaned up. We don't necessarily have + * an i8259 cascaded or even a cascade. + */ + if (open_pic_irq_offset && irq == open_pic_irq_offset) { + /* Get the IRQ from the cascade. */ + irq = i8259_irq(regs); openpic_eoi(); - } - if (irq == OPENPIC_VEC_SPURIOUS + open_pic_irq_offset) + } else if (irq == OPENPIC_VEC_SPURIOUS + open_pic_irq_offset) irq = -1; return irq; } diff --git a/arch/ppc/platforms/lopec_pci.c b/arch/ppc/platforms/lopec_pci.c index d5f4903c9414614a8c9f5ac03233d57db8f32f2e..0d8297c8346daddc6b70410e1c17d18f4f61d8ce 100644 --- a/arch/ppc/platforms/lopec_pci.c +++ b/arch/ppc/platforms/lopec_pci.c @@ -6,7 +6,7 @@ * Author: Dan Cox * danc@mvista.com (or, alternately, source@mvista.com) * - * Copyright 2001 MontaVista Software Inc. + * Copyright 2001-2002 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -14,18 +14,11 @@ * option) any later version. */ -#include <linux/kernel.h> #include <linux/init.h> #include <linux/pci.h> -#include <linux/slab.h> #include <asm/machdep.h> -#include <asm/byteorder.h> -#include <asm/io.h> -#include <asm/irq.h> -#include <asm/uaccess.h> #include <asm/pci-bridge.h> -#include <asm/open_pic.h> #include <asm/mpc10x.h> static inline int __init diff --git a/arch/ppc/platforms/lopec_setup.c b/arch/ppc/platforms/lopec_setup.c index 1e22054b602ea62c7171644b985346804f67a489..22ebf82442909680c879b641f12ddfc5e48611ee 100644 --- a/arch/ppc/platforms/lopec_setup.c +++ b/arch/ppc/platforms/lopec_setup.c @@ -15,34 +15,23 @@ */ #include <linux/config.h> -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/errno.h> -#include <linux/pci.h> -#include <linux/time.h> #include <linux/types.h> -#include <linux/major.h> -#include <linux/kdev_t.h> +#include <linux/delay.h> +#include <linux/pci_ids.h> +#include <linux/ioport.h> +#include <linux/init.h> #include <linux/ide.h> -#include <linux/irq.h> #include <linux/seq_file.h> +#include <linux/blk.h> #include <linux/console.h> -#include <asm/system.h> -#include <asm/pgtable.h> -#include <asm/machdep.h> -#include <asm/page.h> -#include <asm/dma.h> #include <asm/io.h> -#include <asm/time.h> -#include <asm/delay.h> -#include <asm/irq.h> #include <asm/open_pic.h> #include <asm/i8259.h> -#include <asm/pci-bridge.h> #include <asm/todc.h> #include <asm/bootinfo.h> #include <asm/mpc10x.h> +#include <asm/hw_irq.h> extern void lopec_find_bridges(void); @@ -230,7 +219,7 @@ lopec_init_IRQ(void) i8259_init(0xfef00000); } -void __init +static int __init lopec_request_io(void) { outb(0x00, 0x4d0); @@ -242,9 +231,11 @@ lopec_request_io(void) request_region(0x80, 0x10, "dma page reg"); request_region(0xa0, 0x20, "pic2"); request_region(0xc0, 0x20, "dma2"); + + return 0; } -arch_initcall(lopec_request_io); +device_initcall(lopec_request_io); static void __init lopec_map_io(void) diff --git a/arch/ppc/platforms/mcpn765_setup.c b/arch/ppc/platforms/mcpn765_setup.c index 654ceed296517543ea21da15eb5a41ecb349783d..f8d2d142b0d529f5089f4d30841e954696a1c075 100644 --- a/arch/ppc/platforms/mcpn765_setup.c +++ b/arch/ppc/platforms/mcpn765_setup.c @@ -6,7 +6,7 @@ * Author: Mark A. Greer * mgreer@mvista.com * - * Copyright 2001 MontaVista Software Inc. + * Copyright 2001-2002 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -31,7 +31,6 @@ #include <linux/delay.h> #include <linux/irq.h> #include <linux/ide.h> -#include <linux/irq.h> #include <linux/seq_file.h> #include <asm/system.h> @@ -125,7 +124,7 @@ mcpn765_setup_arch(void) OpenPIC_NumInitSenses = sizeof(mcpn765_openpic_initsenses); printk("Motorola MCG MCPN765 cPCI Non-System Board\n"); - printk("MCPN765 port (C) 2001 MontaVista Software, Inc. (source@mvista.com)\n"); + printk("MCPN765 port (MontaVista Software, Inc. (source@mvista.com))\n"); if ( ppc_md.progress ) ppc_md.progress("mcpn765_setup_arch: exit", 0); diff --git a/arch/ppc/platforms/pplus_setup.c b/arch/ppc/platforms/pplus_setup.c index 34dc2564d6641b98cf349ac901cf26847766a569..25a521761215b7fc3e38fabab3de60caaf31a448 100644 --- a/arch/ppc/platforms/pplus_setup.c +++ b/arch/ppc/platforms/pplus_setup.c @@ -72,7 +72,6 @@ #include <asm/todc.h> #include <asm/bootinfo.h> -#undef CONFIG_SERIAL_TEXT_DEBUG #undef DUMP_DBATS TODC_ALLOC(); @@ -500,9 +499,7 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5, #ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = pplus_progress; -#else /* !CONFIG_SERIAL_TEXT_DEBUG */ - ppc_md.progress = NULL; -#endif /* CONFIG_SERIAL_TEXT_DEBUG */ +#endif #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE) ppc_ide_md.default_irq = pplus_ide_default_irq; diff --git a/arch/ppc/platforms/prep_setup.c b/arch/ppc/platforms/prep_setup.c index b5cb614c69d5f5aeb69400abfba06011df37b85c..f618f1f837895a787acef6ec93df173b646b1924 100644 --- a/arch/ppc/platforms/prep_setup.c +++ b/arch/ppc/platforms/prep_setup.c @@ -117,9 +117,6 @@ prep_show_cpuinfo(struct seq_file *m) { extern char *Motherboard_map_name; int cachew; -#ifdef CONFIG_PREP_RESIDUAL - int i; -#endif seq_printf(m, "machine\t\t: PReP %s\n", Motherboard_map_name); @@ -180,6 +177,8 @@ prep_show_cpuinfo(struct seq_file *m) no_l2: #ifdef CONFIG_PREP_RESIDUAL if (res->ResidualLength != 0) { + int i; + /* print info about SIMMs */ seq_printf(m, "simms\t\t: "); for (i = 0; (res->ActualNumMemories) && (i < MAX_MEMS); i++) { @@ -812,8 +811,8 @@ prep_map_io(void) io_block_mapping(0xf0000000, PREP_ISA_MEM_BASE, 0x08000000, _PAGE_IO); } -static void __init -prep_init2(void) +static int __init +prep_request_io(void) { #ifdef CONFIG_NVRAM request_region(PREP_NVRAM_AS0, 0x8, "nvram"); @@ -822,8 +821,12 @@ prep_init2(void) request_region(0x40,0x20,"timer"); request_region(0x80,0x10,"dma page reg"); request_region(0xc0,0x20,"dma2"); + + return 0; } +device_initcall(prep_request_io); + void __init prep_init(unsigned long r3, unsigned long r4, unsigned long r5, unsigned long r6, unsigned long r7) @@ -863,7 +866,6 @@ prep_init(unsigned long r3, unsigned long r4, unsigned long r5, ppc_md.init_IRQ = prep_init_IRQ; /* this gets changed later on if we have an OpenPIC -- Cort */ ppc_md.get_irq = i8259_irq; - ppc_md.init = prep_init2; ppc_md.restart = prep_restart; ppc_md.power_off = prep_power_off; diff --git a/arch/ppc/platforms/residual.c b/arch/ppc/platforms/residual.c index cae870a305cafd4142e512ab088d2799f811334b..4907177d02e3f5c5f04509c72e34fb6e744c981c 100644 --- a/arch/ppc/platforms/residual.c +++ b/arch/ppc/platforms/residual.c @@ -876,3 +876,38 @@ PnP_TAG_PACKET __init *PnP_find_large_vendor_packet(unsigned char *p, }; return 0; /* not found */ } + +#ifdef CONFIG_PROC_PREPRESIDUAL +static int proc_prep_residual_read(char * buf, char ** start, off_t off, + int count, int *eof, void *data) +{ + int n; + + n = res->ResidualLength - off; + if (n < 0) { + *eof = 1; + n = 0; + } + else { + if (n > count) + n = count; + else + *eof = 1; + + memcpy(buf, (char *)res + off, n); + *start = buf; + } + + return n; +} + +void __init +proc_prep_residual_init(void) +{ + if (res->ResidualLength) + create_proc_read_entry("residual", S_IRUGO, NULL, + proc_prep_residual_read, NULL); +} + +__initcall(proc_prep_residual_init); +#endif diff --git a/arch/ppc/platforms/sandpoint_setup.c b/arch/ppc/platforms/sandpoint_setup.c index 6b9c00a25a30c20b40c752e81f5a812c8fd21028..d532451d6ac2a98b8eb004f8e19cf5756af7ec45 100644 --- a/arch/ppc/platforms/sandpoint_setup.c +++ b/arch/ppc/platforms/sandpoint_setup.c @@ -6,7 +6,7 @@ * Author: Mark A. Greer * mgreer@mvista.com * - * Copyright 2000, 2001 MontaVista Software Inc. + * Copyright 2000-2002 MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -71,7 +71,6 @@ #include <linux/delay.h> #include <linux/irq.h> #include <linux/ide.h> -#include <linux/irq.h> #include <linux/seq_file.h> #include <asm/system.h> @@ -180,7 +179,7 @@ sandpoint_setup_arch(void) #endif printk("Motorola SPS Sandpoint Test Platform\n"); - printk("Sandpoint port (C) 2000, 2001 MontaVista Software, Inc. (source@mvista.com)\n"); + printk("Sandpoint port (MontaVista Software, Inc. (source@mvista.com))\n"); /* The Sandpoint rom doesn't enable any caches. Do that now. * The 7450 portion will also set up the L3s once I get enough diff --git a/include/asm-ppc/i8259.h b/include/asm-ppc/i8259.h index f506ac6e721bb5be46be7f379242c157a5588d49..e85749f87e31f4593ee1db862a60ab7cb383f14c 100644 --- a/include/asm-ppc/i8259.h +++ b/include/asm-ppc/i8259.h @@ -9,8 +9,7 @@ extern struct hw_interrupt_type i8259_pic; -void i8259_init(long); -int i8259_irq(struct pt_regs *regs); -int i8259_poll(void); +extern void i8259_init(long intack_addr); +extern int i8259_irq(struct pt_regs *regs); #endif /* _PPC_KERNEL_i8259_H */