From: <aot...@us...> - 2004-06-03 13:52:12
|
Update of /cvsroot/gc-linux/linux/arch/ppc/platforms In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4552/arch/ppc/platforms Modified Files: Makefile gamecube.c gamecube.h Removed Files: gamecube_pic.c Log Message: Move interrupt code back into arch/ppc/platforms/gamecube.c: - s/GAMECUBE_PIIC/FLIPPER_ICR/g - s/GAMECUBE_PIIM/FLIPPER_IMR/g - s/GAMECUBE_IRQS//g - Rename gekko_pic to flipper_pic - Rename gekko_*_irq() to flipper_*_irq() - Consolidate documentation into arch/ppc/platforms/gamecube.h Delete file arch/ppc/platforms/gamecube_pic.c Index: Makefile =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Makefile 11 May 2004 17:48:35 -0000 1.9 +++ Makefile 3 Jun 2004 13:52:03 -0000 1.10 @@ -46,7 +46,7 @@ obj-$(CONFIG_PRPMC800) += prpmc800.o obj-$(CONFIG_SANDPOINT) += sandpoint.o obj-$(CONFIG_SPRUCE) += spruce.o -obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_pic.o gamecube_time.o +obj-$(CONFIG_GAMECUBE) += gamecube.o gamecube_time.o obj-$(CONFIG_GAMECUBE_CONSOLE) += console.o obj-$(CONFIG_GAMECUBE_RESET_SWITCH) += gc-rsw.o obj-$(CONFIG_GAMECUBE_DVD_COVER) += gc-dvdcover.o Index: gamecube.c =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gamecube.c 24 May 2004 00:22:54 -0000 1.17 +++ gamecube.c 3 Jun 2004 13:52:03 -0000 1.18 @@ -5,29 +5,23 @@ #include <linux/init.h> #include <linux/config.h> #include <linux/console.h> +#include <linux/irq.h> #include <linux/initrd.h> #include <linux/seq_file.h> -#include <asm/machdep.h> -#include <asm/bootinfo.h> -#include <asm/time.h> #include <asm/io.h> +#include <asm/time.h> +#include <asm/bitops.h> +#include <asm/bootinfo.h> +#include <asm/machdep.h> #include "console.h" #include "gamecube.h" -extern void gamecube_init_IRQ(void); -extern int gamecube_get_irq(struct pt_regs *regs); - -extern long __init -gamecube_time_init(void); - -extern unsigned long -gamecube_get_rtc_time(void); - -extern int -gamecube_set_rtc_time(unsigned long nowtime); +extern long gamecube_time_init(void) __init; +extern unsigned long gamecube_get_rtc_time(void); +extern int gamecube_set_rtc_time(unsigned long nowtime); unsigned long gamecube_find_end_of_memory(void) { @@ -71,6 +65,62 @@ } static int +gamecube_get_irq(struct pt_regs *regs) +{ + int irq; + u_int irq_status, irq_test = 1; + + irq_status = readl(FLIPPER_ICR) & readl(FLIPPER_IMR); + if (irq_status == 0) + return -1; /* no more IRQs pending */ + + for (irq = 0; irq < 14; irq++, irq_test <<= 1) + if (irq_status & irq_test) + break; + + return irq; +} + +static void +flipper_mask_and_ack_irq(unsigned int irq) +{ + clear_bit(irq, FLIPPER_IMR); + set_bit(irq, FLIPPER_ICR); +} + +static void +flipper_mask_irq(unsigned int irq) +{ + clear_bit(irq, FLIPPER_IMR); +} + +static void +flipper_unmask_irq(unsigned int irq) +{ + set_bit(irq, FLIPPER_IMR); +} + +static struct hw_interrupt_type flipper_pic = { + .typename = " FLIPPER-PIC ", + .enable = flipper_unmask_irq, + .disable = flipper_mask_irq, + .ack = flipper_mask_and_ack_irq, +}; + +static void __init +gamecube_init_IRQ(void) +{ + int i; + + /* mask and ack all IRQs */ + writel(0x00000000, FLIPPER_IMR); + writel(0xffffffff, FLIPPER_ICR); + + for (i = 0; i < 14; i++) + irq_desc[i].handler = &flipper_pic; +} + +static int gamecube_show_cpuinfo(struct seq_file *m) { seq_printf(m, "vendor\t\t: IBM\n"); Index: gamecube.h =================================================================== RCS file: /cvsroot/gc-linux/linux/arch/ppc/platforms/gamecube.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- gamecube.h 1 May 2004 23:14:38 -0000 1.6 +++ gamecube.h 3 Jun 2004 13:52:03 -0000 1.7 @@ -15,12 +15,15 @@ #include <asm/ppcboot.h> /* - * We have a total of 14 IRQs. Each has a corresponding bit in both - * the Interrupt Cause (PIIC) and Interrupt Mask (PIIM) registers. + * There are 14 IRQs in total. Each has a corresponding bit in both + * the Interrupt Cause (ICR) and Interrupt Mask (IMR) registers. + * + * Enabling/disabling an interrupt line involves asserting/clearing + * the corresponding bit in IMR. ACK'ing a request simply involves + * asserting the corresponding bit in ICR. */ -#define GAMECUBE_IRQS 14 -#define GAMECUBE_PIIC ((volatile ulong *)0xCC003000) -#define GAMECUBE_PIIM ((volatile ulong *)0xCC003004) +#define FLIPPER_ICR ((volatile ulong *)0xcc003000) +#define FLIPPER_IMR ((volatile ulong *)0xcc003004) /* * Anything written here automagically puts us through reset. --- gamecube_pic.c DELETED --- |