diff options
author | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
---|---|---|
committer | Srikant Patnaik | 2015-01-11 12:28:04 +0530 |
commit | 871480933a1c28f8a9fed4c4d34d06c439a7a422 (patch) | |
tree | 8718f573808810c2a1e8cb8fb6ac469093ca2784 /ANDROID_3.4.5/arch/m68k/amiga | |
parent | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (diff) | |
download | FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.gz FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.tar.bz2 FOSSEE-netbook-kernel-source-871480933a1c28f8a9fed4c4d34d06c439a7a422.zip |
Moved, renamed, and deleted files
The original directory structure was scattered and unorganized.
Changes are basically to make it look like kernel structure.
Diffstat (limited to 'ANDROID_3.4.5/arch/m68k/amiga')
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/Makefile | 7 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/amiints.c | 174 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/amisound.c | 116 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/chipram.c | 123 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/cia.c | 185 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/config.c | 817 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/pcmcia.c | 122 | ||||
-rw-r--r-- | ANDROID_3.4.5/arch/m68k/amiga/platform.c | 197 |
8 files changed, 0 insertions, 1741 deletions
diff --git a/ANDROID_3.4.5/arch/m68k/amiga/Makefile b/ANDROID_3.4.5/arch/m68k/amiga/Makefile deleted file mode 100644 index 11dd30b1..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# -# Makefile for Linux arch/m68k/amiga source directory -# - -obj-y := config.o amiints.o cia.o chipram.o amisound.o platform.o - -obj-$(CONFIG_AMIGA_PCMCIA) += pcmcia.o diff --git a/ANDROID_3.4.5/arch/m68k/amiga/amiints.c b/ANDROID_3.4.5/arch/m68k/amiga/amiints.c deleted file mode 100644 index 47b5f900..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/amiints.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Amiga Linux interrupt handling code - * - * 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. - */ - -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/errno.h> -#include <linux/irq.h> - -#include <asm/irq.h> -#include <asm/traps.h> -#include <asm/amigahw.h> -#include <asm/amigaints.h> -#include <asm/amipcmcia.h> - - -/* - * Enable/disable a particular machine specific interrupt source. - * Note that this may affect other interrupts in case of a shared interrupt. - * This function should only be called for a _very_ short time to change some - * internal data, that may not be changed by the interrupt at the same time. - */ - -static void amiga_irq_enable(struct irq_data *data) -{ - amiga_custom.intena = IF_SETCLR | (1 << (data->irq - IRQ_USER)); -} - -static void amiga_irq_disable(struct irq_data *data) -{ - amiga_custom.intena = 1 << (data->irq - IRQ_USER); -} - -static struct irq_chip amiga_irq_chip = { - .name = "amiga", - .irq_enable = amiga_irq_enable, - .irq_disable = amiga_irq_disable, -}; - - -/* - * The builtin Amiga hardware interrupt handlers. - */ - -static void ami_int1(unsigned int irq, struct irq_desc *desc) -{ - unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; - - /* if serial transmit buffer empty, interrupt */ - if (ints & IF_TBE) { - amiga_custom.intreq = IF_TBE; - generic_handle_irq(IRQ_AMIGA_TBE); - } - - /* if floppy disk transfer complete, interrupt */ - if (ints & IF_DSKBLK) { - amiga_custom.intreq = IF_DSKBLK; - generic_handle_irq(IRQ_AMIGA_DSKBLK); - } - - /* if software interrupt set, interrupt */ - if (ints & IF_SOFT) { - amiga_custom.intreq = IF_SOFT; - generic_handle_irq(IRQ_AMIGA_SOFT); - } -} - -static void ami_int3(unsigned int irq, struct irq_desc *desc) -{ - unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; - - /* if a blitter interrupt */ - if (ints & IF_BLIT) { - amiga_custom.intreq = IF_BLIT; - generic_handle_irq(IRQ_AMIGA_BLIT); - } - - /* if a copper interrupt */ - if (ints & IF_COPER) { - amiga_custom.intreq = IF_COPER; - generic_handle_irq(IRQ_AMIGA_COPPER); - } - - /* if a vertical blank interrupt */ - if (ints & IF_VERTB) { - amiga_custom.intreq = IF_VERTB; - generic_handle_irq(IRQ_AMIGA_VERTB); - } -} - -static void ami_int4(unsigned int irq, struct irq_desc *desc) -{ - unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; - - /* if audio 0 interrupt */ - if (ints & IF_AUD0) { - amiga_custom.intreq = IF_AUD0; - generic_handle_irq(IRQ_AMIGA_AUD0); - } - - /* if audio 1 interrupt */ - if (ints & IF_AUD1) { - amiga_custom.intreq = IF_AUD1; - generic_handle_irq(IRQ_AMIGA_AUD1); - } - - /* if audio 2 interrupt */ - if (ints & IF_AUD2) { - amiga_custom.intreq = IF_AUD2; - generic_handle_irq(IRQ_AMIGA_AUD2); - } - - /* if audio 3 interrupt */ - if (ints & IF_AUD3) { - amiga_custom.intreq = IF_AUD3; - generic_handle_irq(IRQ_AMIGA_AUD3); - } -} - -static void ami_int5(unsigned int irq, struct irq_desc *desc) -{ - unsigned short ints = amiga_custom.intreqr & amiga_custom.intenar; - - /* if serial receive buffer full interrupt */ - if (ints & IF_RBF) { - /* acknowledge of IF_RBF must be done by the serial interrupt */ - generic_handle_irq(IRQ_AMIGA_RBF); - } - - /* if a disk sync interrupt */ - if (ints & IF_DSKSYN) { - amiga_custom.intreq = IF_DSKSYN; - generic_handle_irq(IRQ_AMIGA_DSKSYN); - } -} - - -/* - * void amiga_init_IRQ(void) - * - * Parameters: None - * - * Returns: Nothing - * - * This function should be called during kernel startup to initialize - * the amiga IRQ handling routines. - */ - -void __init amiga_init_IRQ(void) -{ - m68k_setup_irq_controller(&amiga_irq_chip, handle_simple_irq, IRQ_USER, - AMI_STD_IRQS); - - irq_set_chained_handler(IRQ_AUTO_1, ami_int1); - irq_set_chained_handler(IRQ_AUTO_3, ami_int3); - irq_set_chained_handler(IRQ_AUTO_4, ami_int4); - irq_set_chained_handler(IRQ_AUTO_5, ami_int5); - - /* turn off PCMCIA interrupts */ - if (AMIGAHW_PRESENT(PCMCIA)) - gayle.inten = GAYLE_IRQ_IDE; - - /* turn off all interrupts and enable the master interrupt bit */ - amiga_custom.intena = 0x7fff; - amiga_custom.intreq = 0x7fff; - amiga_custom.intena = IF_SETCLR | IF_INTEN; - - cia_init_IRQ(&ciaa_base); - cia_init_IRQ(&ciab_base); -} diff --git a/ANDROID_3.4.5/arch/m68k/amiga/amisound.c b/ANDROID_3.4.5/arch/m68k/amiga/amisound.c deleted file mode 100644 index 2559eefc..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/amisound.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * linux/arch/m68k/amiga/amisound.c - * - * amiga sound driver for Linux/m68k - * - * 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. - */ - -#include <linux/jiffies.h> -#include <linux/timer.h> -#include <linux/init.h> -#include <linux/string.h> -#include <linux/module.h> - -#include <asm/amigahw.h> - -static unsigned short *snd_data; -static const signed char sine_data[] = { - 0, 39, 75, 103, 121, 127, 121, 103, 75, 39, - 0, -39, -75, -103, -121, -127, -121, -103, -75, -39 -}; -#define DATA_SIZE ARRAY_SIZE(sine_data) - -#define custom amiga_custom - - /* - * The minimum period for audio may be modified by the frame buffer - * device since it depends on htotal (for OCS/ECS/AGA) - */ - -volatile unsigned short amiga_audio_min_period = 124; /* Default for pre-OCS */ -EXPORT_SYMBOL(amiga_audio_min_period); - -#define MAX_PERIOD (65535) - - - /* - * Current period (set by dmasound.c) - */ - -unsigned short amiga_audio_period = MAX_PERIOD; -EXPORT_SYMBOL(amiga_audio_period); - -static unsigned long clock_constant; - -void __init amiga_init_sound(void) -{ - static struct resource beep_res = { .name = "Beep" }; - - snd_data = amiga_chip_alloc_res(sizeof(sine_data), &beep_res); - if (!snd_data) { - printk (KERN_CRIT "amiga init_sound: failed to allocate chipmem\n"); - return; - } - memcpy (snd_data, sine_data, sizeof(sine_data)); - - /* setup divisor */ - clock_constant = (amiga_colorclock+DATA_SIZE/2)/DATA_SIZE; - - /* without amifb, turn video off and enable high quality sound */ -#ifndef CONFIG_FB_AMIGA - amifb_video_off(); -#endif -} - -static void nosound( unsigned long ignored ); -static DEFINE_TIMER(sound_timer, nosound, 0, 0); - -void amiga_mksound( unsigned int hz, unsigned int ticks ) -{ - unsigned long flags; - - if (!snd_data) - return; - - local_irq_save(flags); - del_timer( &sound_timer ); - - if (hz > 20 && hz < 32767) { - unsigned long period = (clock_constant / hz); - - if (period < amiga_audio_min_period) - period = amiga_audio_min_period; - if (period > MAX_PERIOD) - period = MAX_PERIOD; - - /* setup pointer to data, period, length and volume */ - custom.aud[2].audlc = snd_data; - custom.aud[2].audlen = sizeof(sine_data)/2; - custom.aud[2].audper = (unsigned short)period; - custom.aud[2].audvol = 32; /* 50% of maxvol */ - - if (ticks) { - sound_timer.expires = jiffies + ticks; - add_timer( &sound_timer ); - } - - /* turn on DMA for audio channel 2 */ - custom.dmacon = DMAF_SETCLR | DMAF_AUD2; - - } else - nosound( 0 ); - - local_irq_restore(flags); -} - - -static void nosound( unsigned long ignored ) -{ - /* turn off DMA for audio channel 2 */ - custom.dmacon = DMAF_AUD2; - /* restore period to previous value after beeping */ - custom.aud[2].audper = amiga_audio_period; -} diff --git a/ANDROID_3.4.5/arch/m68k/amiga/chipram.c b/ANDROID_3.4.5/arch/m68k/amiga/chipram.c deleted file mode 100644 index 99449fbf..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/chipram.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -** linux/amiga/chipram.c -** -** Modified 03-May-94 by Geert Uytterhoeven <geert@linux-m68k.org> -** - 64-bit aligned allocations for full AGA compatibility -** -** Rewritten 15/9/2000 by Geert to use resource management -*/ - -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/mm.h> -#include <linux/init.h> -#include <linux/ioport.h> -#include <linux/slab.h> -#include <linux/string.h> -#include <linux/module.h> - -#include <asm/atomic.h> -#include <asm/page.h> -#include <asm/amigahw.h> - -unsigned long amiga_chip_size; -EXPORT_SYMBOL(amiga_chip_size); - -static struct resource chipram_res = { - .name = "Chip RAM", .start = CHIP_PHYSADDR -}; -static atomic_t chipavail; - - -void __init amiga_chip_init(void) -{ - if (!AMIGAHW_PRESENT(CHIP_RAM)) - return; - - chipram_res.end = CHIP_PHYSADDR + amiga_chip_size - 1; - request_resource(&iomem_resource, &chipram_res); - - atomic_set(&chipavail, amiga_chip_size); -} - - -void *amiga_chip_alloc(unsigned long size, const char *name) -{ - struct resource *res; - void *p; - - res = kzalloc(sizeof(struct resource), GFP_KERNEL); - if (!res) - return NULL; - - res->name = name; - p = amiga_chip_alloc_res(size, res); - if (!p) { - kfree(res); - return NULL; - } - - return p; -} -EXPORT_SYMBOL(amiga_chip_alloc); - - - /* - * Warning: - * amiga_chip_alloc_res is meant only for drivers that need to - * allocate Chip RAM before kmalloc() is functional. As a consequence, - * those drivers must not free that Chip RAM afterwards. - */ - -void *amiga_chip_alloc_res(unsigned long size, struct resource *res) -{ - int error; - - /* round up */ - size = PAGE_ALIGN(size); - - pr_debug("amiga_chip_alloc_res: allocate %lu bytes\n", size); - error = allocate_resource(&chipram_res, res, size, 0, UINT_MAX, - PAGE_SIZE, NULL, NULL); - if (error < 0) { - pr_err("amiga_chip_alloc_res: allocate_resource() failed %d!\n", - error); - return NULL; - } - - atomic_sub(size, &chipavail); - pr_debug("amiga_chip_alloc_res: returning %pR\n", res); - return (void *)ZTWO_VADDR(res->start); -} - -void amiga_chip_free(void *ptr) -{ - unsigned long start = ZTWO_PADDR(ptr); - struct resource *res; - unsigned long size; - - res = lookup_resource(&chipram_res, start); - if (!res) { - pr_err("amiga_chip_free: trying to free nonexistent region at " - "%p\n", ptr); - return; - } - - size = resource_size(res); - pr_debug("amiga_chip_free: free %lu bytes at %p\n", size, ptr); - atomic_add(size, &chipavail); - release_resource(res); - kfree(res); -} -EXPORT_SYMBOL(amiga_chip_free); - - -unsigned long amiga_chip_avail(void) -{ - unsigned long n = atomic_read(&chipavail); - - pr_debug("amiga_chip_avail : %lu bytes\n", n); - return n; -} -EXPORT_SYMBOL(amiga_chip_avail); - diff --git a/ANDROID_3.4.5/arch/m68k/amiga/cia.c b/ANDROID_3.4.5/arch/m68k/amiga/cia.c deleted file mode 100644 index 18c0e299..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/cia.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - * linux/arch/m68k/amiga/cia.c - CIA support - * - * Copyright (C) 1996 Roman Zippel - * - * The concept of some functions bases on the original Amiga OS function - * - * 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. - */ - -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/errno.h> -#include <linux/kernel_stat.h> -#include <linux/init.h> -#include <linux/seq_file.h> -#include <linux/interrupt.h> - -#include <asm/irq.h> -#include <asm/amigahw.h> -#include <asm/amigaints.h> - -struct ciabase { - volatile struct CIA *cia; - unsigned char icr_mask, icr_data; - unsigned short int_mask; - int handler_irq, cia_irq, server_irq; - char *name; -} ciaa_base = { - .cia = &ciaa, - .int_mask = IF_PORTS, - .handler_irq = IRQ_AMIGA_PORTS, - .cia_irq = IRQ_AMIGA_CIAA, - .name = "CIAA" -}, ciab_base = { - .cia = &ciab, - .int_mask = IF_EXTER, - .handler_irq = IRQ_AMIGA_EXTER, - .cia_irq = IRQ_AMIGA_CIAB, - .name = "CIAB" -}; - -/* - * Cause or clear CIA interrupts, return old interrupt status. - */ - -unsigned char cia_set_irq(struct ciabase *base, unsigned char mask) -{ - unsigned char old; - - old = (base->icr_data |= base->cia->icr); - if (mask & CIA_ICR_SETCLR) - base->icr_data |= mask; - else - base->icr_data &= ~mask; - if (base->icr_data & base->icr_mask) - amiga_custom.intreq = IF_SETCLR | base->int_mask; - return old & base->icr_mask; -} - -/* - * Enable or disable CIA interrupts, return old interrupt mask, - */ - -unsigned char cia_able_irq(struct ciabase *base, unsigned char mask) -{ - unsigned char old; - - old = base->icr_mask; - base->icr_data |= base->cia->icr; - base->cia->icr = mask; - if (mask & CIA_ICR_SETCLR) - base->icr_mask |= mask; - else - base->icr_mask &= ~mask; - base->icr_mask &= CIA_ICR_ALL; - if (base->icr_data & base->icr_mask) - amiga_custom.intreq = IF_SETCLR | base->int_mask; - return old; -} - -static irqreturn_t cia_handler(int irq, void *dev_id) -{ - struct ciabase *base = dev_id; - int mach_irq; - unsigned char ints; - - mach_irq = base->cia_irq; - ints = cia_set_irq(base, CIA_ICR_ALL); - amiga_custom.intreq = base->int_mask; - for (; ints; mach_irq++, ints >>= 1) { - if (ints & 1) - generic_handle_irq(mach_irq); - } - return IRQ_HANDLED; -} - -static void cia_irq_enable(struct irq_data *data) -{ - unsigned int irq = data->irq; - unsigned char mask; - - if (irq >= IRQ_AMIGA_CIAB) { - mask = 1 << (irq - IRQ_AMIGA_CIAB); - cia_set_irq(&ciab_base, mask); - cia_able_irq(&ciab_base, CIA_ICR_SETCLR | mask); - } else { - mask = 1 << (irq - IRQ_AMIGA_CIAA); - cia_set_irq(&ciaa_base, mask); - cia_able_irq(&ciaa_base, CIA_ICR_SETCLR | mask); - } -} - -static void cia_irq_disable(struct irq_data *data) -{ - unsigned int irq = data->irq; - - if (irq >= IRQ_AMIGA_CIAB) - cia_able_irq(&ciab_base, 1 << (irq - IRQ_AMIGA_CIAB)); - else - cia_able_irq(&ciaa_base, 1 << (irq - IRQ_AMIGA_CIAA)); -} - -static struct irq_chip cia_irq_chip = { - .name = "cia", - .irq_enable = cia_irq_enable, - .irq_disable = cia_irq_disable, -}; - -/* - * Override auto irq 2 & 6 and use them as general chain - * for external interrupts, we link the CIA interrupt sources - * into this chain. - */ - -static void auto_irq_enable(struct irq_data *data) -{ - switch (data->irq) { - case IRQ_AUTO_2: - amiga_custom.intena = IF_SETCLR | IF_PORTS; - break; - case IRQ_AUTO_6: - amiga_custom.intena = IF_SETCLR | IF_EXTER; - break; - } -} - -static void auto_irq_disable(struct irq_data *data) -{ - switch (data->irq) { - case IRQ_AUTO_2: - amiga_custom.intena = IF_PORTS; - break; - case IRQ_AUTO_6: - amiga_custom.intena = IF_EXTER; - break; - } -} - -static struct irq_chip auto_irq_chip = { - .name = "auto", - .irq_enable = auto_irq_enable, - .irq_disable = auto_irq_disable, -}; - -void __init cia_init_IRQ(struct ciabase *base) -{ - m68k_setup_irq_controller(&cia_irq_chip, handle_simple_irq, - base->cia_irq, CIA_IRQS); - - /* clear any pending interrupt and turn off all interrupts */ - cia_set_irq(base, CIA_ICR_ALL); - cia_able_irq(base, CIA_ICR_ALL); - - /* override auto int and install CIA handler */ - m68k_setup_irq_controller(&auto_irq_chip, handle_simple_irq, - base->handler_irq, 1); - m68k_irq_startup_irq(base->handler_irq); - if (request_irq(base->handler_irq, cia_handler, IRQF_SHARED, - base->name, base)) - pr_err("Couldn't register %s interrupt\n", base->name); -} diff --git a/ANDROID_3.4.5/arch/m68k/amiga/config.c b/ANDROID_3.4.5/arch/m68k/amiga/config.c deleted file mode 100644 index ee01b7a3..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/config.c +++ /dev/null @@ -1,817 +0,0 @@ -/* - * linux/arch/m68k/amiga/config.c - * - * Copyright (C) 1993 Hamish Macdonald - * - * 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. - */ - -/* - * Miscellaneous Amiga stuff - */ - -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/mm.h> -#include <linux/seq_file.h> -#include <linux/tty.h> -#include <linux/console.h> -#include <linux/rtc.h> -#include <linux/init.h> -#include <linux/vt_kern.h> -#include <linux/delay.h> -#include <linux/interrupt.h> -#include <linux/zorro.h> -#include <linux/module.h> -#include <linux/keyboard.h> - -#include <asm/bootinfo.h> -#include <asm/setup.h> -#include <asm/pgtable.h> -#include <asm/amigahw.h> -#include <asm/amigaints.h> -#include <asm/irq.h> -#include <asm/rtc.h> -#include <asm/machdep.h> -#include <asm/io.h> - -static unsigned long amiga_model; - -unsigned long amiga_eclock; -EXPORT_SYMBOL(amiga_eclock); - -unsigned long amiga_colorclock; -EXPORT_SYMBOL(amiga_colorclock); - -unsigned long amiga_chipset; -EXPORT_SYMBOL(amiga_chipset); - -unsigned char amiga_vblank; -EXPORT_SYMBOL(amiga_vblank); - -static unsigned char amiga_psfreq; - -struct amiga_hw_present amiga_hw_present; -EXPORT_SYMBOL(amiga_hw_present); - -static char s_a500[] __initdata = "A500"; -static char s_a500p[] __initdata = "A500+"; -static char s_a600[] __initdata = "A600"; -static char s_a1000[] __initdata = "A1000"; -static char s_a1200[] __initdata = "A1200"; -static char s_a2000[] __initdata = "A2000"; -static char s_a2500[] __initdata = "A2500"; -static char s_a3000[] __initdata = "A3000"; -static char s_a3000t[] __initdata = "A3000T"; -static char s_a3000p[] __initdata = "A3000+"; -static char s_a4000[] __initdata = "A4000"; -static char s_a4000t[] __initdata = "A4000T"; -static char s_cdtv[] __initdata = "CDTV"; -static char s_cd32[] __initdata = "CD32"; -static char s_draco[] __initdata = "Draco"; -static char *amiga_models[] __initdata = { - [AMI_500-AMI_500] = s_a500, - [AMI_500PLUS-AMI_500] = s_a500p, - [AMI_600-AMI_500] = s_a600, - [AMI_1000-AMI_500] = s_a1000, - [AMI_1200-AMI_500] = s_a1200, - [AMI_2000-AMI_500] = s_a2000, - [AMI_2500-AMI_500] = s_a2500, - [AMI_3000-AMI_500] = s_a3000, - [AMI_3000T-AMI_500] = s_a3000t, - [AMI_3000PLUS-AMI_500] = s_a3000p, - [AMI_4000-AMI_500] = s_a4000, - [AMI_4000T-AMI_500] = s_a4000t, - [AMI_CDTV-AMI_500] = s_cdtv, - [AMI_CD32-AMI_500] = s_cd32, - [AMI_DRACO-AMI_500] = s_draco, -}; - -static char amiga_model_name[13] = "Amiga "; - -static void amiga_sched_init(irq_handler_t handler); -static void amiga_get_model(char *model); -static void amiga_get_hardware_list(struct seq_file *m); -/* amiga specific timer functions */ -static unsigned long amiga_gettimeoffset(void); -extern void amiga_mksound(unsigned int count, unsigned int ticks); -static void amiga_reset(void); -extern void amiga_init_sound(void); -static void amiga_mem_console_write(struct console *co, const char *b, - unsigned int count); -#ifdef CONFIG_HEARTBEAT -static void amiga_heartbeat(int on); -#endif - -static struct console amiga_console_driver = { - .name = "debug", - .flags = CON_PRINTBUFFER, - .index = -1, -}; - - - /* - * Motherboard Resources present in all Amiga models - */ - -static struct { - struct resource _ciab, _ciaa, _custom, _kickstart; -} mb_resources = { - ._ciab = { - .name = "CIA B", .start = 0x00bfd000, .end = 0x00bfdfff - }, - ._ciaa = { - .name = "CIA A", .start = 0x00bfe000, .end = 0x00bfefff - }, - ._custom = { - .name = "Custom I/O", .start = 0x00dff000, .end = 0x00dfffff - }, - ._kickstart = { - .name = "Kickstart ROM", .start = 0x00f80000, .end = 0x00ffffff - } -}; - -static struct resource ram_resource[NUM_MEMINFO]; - - - /* - * Parse an Amiga-specific record in the bootinfo - */ - -int amiga_parse_bootinfo(const struct bi_record *record) -{ - int unknown = 0; - const unsigned long *data = record->data; - - switch (record->tag) { - case BI_AMIGA_MODEL: - amiga_model = *data; - break; - - case BI_AMIGA_ECLOCK: - amiga_eclock = *data; - break; - - case BI_AMIGA_CHIPSET: - amiga_chipset = *data; - break; - - case BI_AMIGA_CHIP_SIZE: - amiga_chip_size = *(const int *)data; - break; - - case BI_AMIGA_VBLANK: - amiga_vblank = *(const unsigned char *)data; - break; - - case BI_AMIGA_PSFREQ: - amiga_psfreq = *(const unsigned char *)data; - break; - - case BI_AMIGA_AUTOCON: -#ifdef CONFIG_ZORRO - if (zorro_num_autocon < ZORRO_NUM_AUTO) { - const struct ConfigDev *cd = (struct ConfigDev *)data; - struct zorro_dev *dev = &zorro_autocon[zorro_num_autocon++]; - dev->rom = cd->cd_Rom; - dev->slotaddr = cd->cd_SlotAddr; - dev->slotsize = cd->cd_SlotSize; - dev->resource.start = (unsigned long)cd->cd_BoardAddr; - dev->resource.end = dev->resource.start + cd->cd_BoardSize - 1; - } else - printk("amiga_parse_bootinfo: too many AutoConfig devices\n"); -#endif /* CONFIG_ZORRO */ - break; - - case BI_AMIGA_SERPER: - /* serial port period: ignored here */ - break; - - default: - unknown = 1; - } - return unknown; -} - - /* - * Identify builtin hardware - */ - -static void __init amiga_identify(void) -{ - /* Fill in some default values, if necessary */ - if (amiga_eclock == 0) - amiga_eclock = 709379; - - memset(&amiga_hw_present, 0, sizeof(amiga_hw_present)); - - printk("Amiga hardware found: "); - if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO) { - printk("[%s] ", amiga_models[amiga_model-AMI_500]); - strcat(amiga_model_name, amiga_models[amiga_model-AMI_500]); - } - - switch (amiga_model) { - case AMI_UNKNOWN: - goto Generic; - - case AMI_600: - case AMI_1200: - AMIGAHW_SET(A1200_IDE); - AMIGAHW_SET(PCMCIA); - case AMI_500: - case AMI_500PLUS: - case AMI_1000: - case AMI_2000: - case AMI_2500: - AMIGAHW_SET(A2000_CLK); /* Is this correct for all models? */ - goto Generic; - - case AMI_3000: - case AMI_3000T: - AMIGAHW_SET(AMBER_FF); - AMIGAHW_SET(MAGIC_REKICK); - /* fall through */ - case AMI_3000PLUS: - AMIGAHW_SET(A3000_SCSI); - AMIGAHW_SET(A3000_CLK); - AMIGAHW_SET(ZORRO3); - goto Generic; - - case AMI_4000T: - AMIGAHW_SET(A4000_SCSI); - /* fall through */ - case AMI_4000: - AMIGAHW_SET(A4000_IDE); - AMIGAHW_SET(A3000_CLK); - AMIGAHW_SET(ZORRO3); - goto Generic; - - case AMI_CDTV: - case AMI_CD32: - AMIGAHW_SET(CD_ROM); - AMIGAHW_SET(A2000_CLK); /* Is this correct? */ - goto Generic; - - Generic: - AMIGAHW_SET(AMI_VIDEO); - AMIGAHW_SET(AMI_BLITTER); - AMIGAHW_SET(AMI_AUDIO); - AMIGAHW_SET(AMI_FLOPPY); - AMIGAHW_SET(AMI_KEYBOARD); - AMIGAHW_SET(AMI_MOUSE); - AMIGAHW_SET(AMI_SERIAL); - AMIGAHW_SET(AMI_PARALLEL); - AMIGAHW_SET(CHIP_RAM); - AMIGAHW_SET(PAULA); - - switch (amiga_chipset) { - case CS_OCS: - case CS_ECS: - case CS_AGA: - switch (amiga_custom.deniseid & 0xf) { - case 0x0c: - AMIGAHW_SET(DENISE_HR); - break; - case 0x08: - AMIGAHW_SET(LISA); - break; - } - break; - default: - AMIGAHW_SET(DENISE); - break; - } - switch ((amiga_custom.vposr>>8) & 0x7f) { - case 0x00: - AMIGAHW_SET(AGNUS_PAL); - break; - case 0x10: - AMIGAHW_SET(AGNUS_NTSC); - break; - case 0x20: - case 0x21: - AMIGAHW_SET(AGNUS_HR_PAL); - break; - case 0x30: - case 0x31: - AMIGAHW_SET(AGNUS_HR_NTSC); - break; - case 0x22: - case 0x23: - AMIGAHW_SET(ALICE_PAL); - break; - case 0x32: - case 0x33: - AMIGAHW_SET(ALICE_NTSC); - break; - } - AMIGAHW_SET(ZORRO); - break; - - case AMI_DRACO: - panic("No support for Draco yet"); - - default: - panic("Unknown Amiga Model"); - } - -#define AMIGAHW_ANNOUNCE(name, str) \ - if (AMIGAHW_PRESENT(name)) \ - printk(str) - - AMIGAHW_ANNOUNCE(AMI_VIDEO, "VIDEO "); - AMIGAHW_ANNOUNCE(AMI_BLITTER, "BLITTER "); - AMIGAHW_ANNOUNCE(AMBER_FF, "AMBER_FF "); - AMIGAHW_ANNOUNCE(AMI_AUDIO, "AUDIO "); - AMIGAHW_ANNOUNCE(AMI_FLOPPY, "FLOPPY "); - AMIGAHW_ANNOUNCE(A3000_SCSI, "A3000_SCSI "); - AMIGAHW_ANNOUNCE(A4000_SCSI, "A4000_SCSI "); - AMIGAHW_ANNOUNCE(A1200_IDE, "A1200_IDE "); - AMIGAHW_ANNOUNCE(A4000_IDE, "A4000_IDE "); - AMIGAHW_ANNOUNCE(CD_ROM, "CD_ROM "); - AMIGAHW_ANNOUNCE(AMI_KEYBOARD, "KEYBOARD "); - AMIGAHW_ANNOUNCE(AMI_MOUSE, "MOUSE "); - AMIGAHW_ANNOUNCE(AMI_SERIAL, "SERIAL "); - AMIGAHW_ANNOUNCE(AMI_PARALLEL, "PARALLEL "); - AMIGAHW_ANNOUNCE(A2000_CLK, "A2000_CLK "); - AMIGAHW_ANNOUNCE(A3000_CLK, "A3000_CLK "); - AMIGAHW_ANNOUNCE(CHIP_RAM, "CHIP_RAM "); - AMIGAHW_ANNOUNCE(PAULA, "PAULA "); - AMIGAHW_ANNOUNCE(DENISE, "DENISE "); - AMIGAHW_ANNOUNCE(DENISE_HR, "DENISE_HR "); - AMIGAHW_ANNOUNCE(LISA, "LISA "); - AMIGAHW_ANNOUNCE(AGNUS_PAL, "AGNUS_PAL "); - AMIGAHW_ANNOUNCE(AGNUS_NTSC, "AGNUS_NTSC "); - AMIGAHW_ANNOUNCE(AGNUS_HR_PAL, "AGNUS_HR_PAL "); - AMIGAHW_ANNOUNCE(AGNUS_HR_NTSC, "AGNUS_HR_NTSC "); - AMIGAHW_ANNOUNCE(ALICE_PAL, "ALICE_PAL "); - AMIGAHW_ANNOUNCE(ALICE_NTSC, "ALICE_NTSC "); - AMIGAHW_ANNOUNCE(MAGIC_REKICK, "MAGIC_REKICK "); - AMIGAHW_ANNOUNCE(PCMCIA, "PCMCIA "); - if (AMIGAHW_PRESENT(ZORRO)) - printk("ZORRO%s ", AMIGAHW_PRESENT(ZORRO3) ? "3" : ""); - printk("\n"); - -#undef AMIGAHW_ANNOUNCE -} - - /* - * Setup the Amiga configuration info - */ - -void __init config_amiga(void) -{ - int i; - - amiga_identify(); - - /* Yuk, we don't have PCI memory */ - iomem_resource.name = "Memory"; - for (i = 0; i < 4; i++) - request_resource(&iomem_resource, &((struct resource *)&mb_resources)[i]); - - mach_sched_init = amiga_sched_init; - mach_init_IRQ = amiga_init_IRQ; - mach_get_model = amiga_get_model; - mach_get_hardware_list = amiga_get_hardware_list; - mach_gettimeoffset = amiga_gettimeoffset; - - /* - * default MAX_DMA=0xffffffff on all machines. If we don't do so, the SCSI - * code will not be able to allocate any mem for transfers, unless we are - * dealing with a Z2 mem only system. /Jes - */ - mach_max_dma_address = 0xffffffff; - - mach_reset = amiga_reset; -#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE) - mach_beep = amiga_mksound; -#endif - -#ifdef CONFIG_HEARTBEAT - mach_heartbeat = amiga_heartbeat; -#endif - - /* Fill in the clock value (based on the 700 kHz E-Clock) */ - amiga_colorclock = 5*amiga_eclock; /* 3.5 MHz */ - - /* clear all DMA bits */ - amiga_custom.dmacon = DMAF_ALL; - /* ensure that the DMA master bit is set */ - amiga_custom.dmacon = DMAF_SETCLR | DMAF_MASTER; - - /* don't use Z2 RAM as system memory on Z3 capable machines */ - if (AMIGAHW_PRESENT(ZORRO3)) { - int i, j; - u32 disabled_z2mem = 0; - - for (i = 0; i < m68k_num_memory; i++) { - if (m68k_memory[i].addr < 16*1024*1024) { - if (i == 0) { - /* don't cut off the branch we're sitting on */ - printk("Warning: kernel runs in Zorro II memory\n"); - continue; - } - disabled_z2mem += m68k_memory[i].size; - m68k_num_memory--; - for (j = i; j < m68k_num_memory; j++) - m68k_memory[j] = m68k_memory[j+1]; - i--; - } - } - if (disabled_z2mem) - printk("%dK of Zorro II memory will not be used as system memory\n", - disabled_z2mem>>10); - } - - /* request all RAM */ - for (i = 0; i < m68k_num_memory; i++) { - ram_resource[i].name = - (m68k_memory[i].addr >= 0x01000000) ? "32-bit Fast RAM" : - (m68k_memory[i].addr < 0x00c00000) ? "16-bit Fast RAM" : - "16-bit Slow RAM"; - ram_resource[i].start = m68k_memory[i].addr; - ram_resource[i].end = m68k_memory[i].addr+m68k_memory[i].size-1; - request_resource(&iomem_resource, &ram_resource[i]); - } - - /* initialize chipram allocator */ - amiga_chip_init(); - - /* our beloved beeper */ - if (AMIGAHW_PRESENT(AMI_AUDIO)) - amiga_init_sound(); - - /* - * if it is an A3000, set the magic bit that forces - * a hard rekick - */ - if (AMIGAHW_PRESENT(MAGIC_REKICK)) - *(unsigned char *)ZTWO_VADDR(0xde0002) |= 0x80; -} - -static unsigned short jiffy_ticks; - -static void __init amiga_sched_init(irq_handler_t timer_routine) -{ - static struct resource sched_res = { - .name = "timer", .start = 0x00bfd400, .end = 0x00bfd5ff, - }; - jiffy_ticks = DIV_ROUND_CLOSEST(amiga_eclock, HZ); - - if (request_resource(&mb_resources._ciab, &sched_res)) - printk("Cannot allocate ciab.ta{lo,hi}\n"); - ciab.cra &= 0xC0; /* turn off timer A, continuous mode, from Eclk */ - ciab.talo = jiffy_ticks % 256; - ciab.tahi = jiffy_ticks / 256; - - /* install interrupt service routine for CIAB Timer A - * - * Please don't change this to use ciaa, as it interferes with the - * SCSI code. We'll have to take a look at this later - */ - if (request_irq(IRQ_AMIGA_CIAB_TA, timer_routine, 0, "timer", NULL)) - pr_err("Couldn't register timer interrupt\n"); - /* start timer */ - ciab.cra |= 0x11; -} - -#define TICK_SIZE 10000 - -/* This is always executed with interrupts disabled. */ -static unsigned long amiga_gettimeoffset(void) -{ - unsigned short hi, lo, hi2; - unsigned long ticks, offset = 0; - - /* read CIA B timer A current value */ - hi = ciab.tahi; - lo = ciab.talo; - hi2 = ciab.tahi; - - if (hi != hi2) { - lo = ciab.talo; - hi = hi2; - } - - ticks = hi << 8 | lo; - - if (ticks > jiffy_ticks / 2) - /* check for pending interrupt */ - if (cia_set_irq(&ciab_base, 0) & CIA_ICR_TA) - offset = 10000; - - ticks = jiffy_ticks - ticks; - ticks = (10000 * ticks) / jiffy_ticks; - - return ticks + offset; -} - -static void amiga_reset(void) __noreturn; - -static void amiga_reset(void) -{ - unsigned long jmp_addr040 = virt_to_phys(&&jmp_addr_label040); - unsigned long jmp_addr = virt_to_phys(&&jmp_addr_label); - - local_irq_disable(); - if (CPU_IS_040_OR_060) - /* Setup transparent translation registers for mapping - * of 16 MB kernel segment before disabling translation - */ - asm volatile ("\n" - " move.l %0,%%d0\n" - " and.l #0xff000000,%%d0\n" - " or.w #0xe020,%%d0\n" /* map 16 MB, enable, cacheable */ - " .chip 68040\n" - " movec %%d0,%%itt0\n" - " movec %%d0,%%dtt0\n" - " .chip 68k\n" - " jmp %0@\n" - : /* no outputs */ - : "a" (jmp_addr040) - : "d0"); - else - /* for 680[23]0, just disable translation and jump to the physical - * address of the label - */ - asm volatile ("\n" - " pmove %%tc,%@\n" - " bclr #7,%@\n" - " pmove %@,%%tc\n" - " jmp %0@\n" - : /* no outputs */ - : "a" (jmp_addr)); -jmp_addr_label040: - /* disable translation on '040 now */ - asm volatile ("\n" - " moveq #0,%%d0\n" - " .chip 68040\n" - " movec %%d0,%%tc\n" /* disable MMU */ - " .chip 68k\n" - : /* no outputs */ - : /* no inputs */ - : "d0"); - - jmp_addr_label: - /* pickup reset address from AmigaOS ROM, reset devices and jump - * to reset address - */ - asm volatile ("\n" - " move.w #0x2700,%sr\n" - " lea 0x01000000,%a0\n" - " sub.l %a0@(-0x14),%a0\n" - " move.l %a0@(4),%a0\n" - " subq.l #2,%a0\n" - " jra 1f\n" - /* align on a longword boundary */ - " " __ALIGN_STR "\n" - "1:\n" - " reset\n" - " jmp %a0@"); - - for (;;) - ; -} - - - /* - * Debugging - */ - -#define SAVEKMSG_MAXMEM 128*1024 - -#define SAVEKMSG_MAGIC1 0x53415645 /* 'SAVE' */ -#define SAVEKMSG_MAGIC2 0x4B4D5347 /* 'KMSG' */ - -struct savekmsg { - unsigned long magic1; /* SAVEKMSG_MAGIC1 */ - unsigned long magic2; /* SAVEKMSG_MAGIC2 */ - unsigned long magicptr; /* address of magic1 */ - unsigned long size; - char data[0]; -}; - -static struct savekmsg *savekmsg; - -static void amiga_mem_console_write(struct console *co, const char *s, - unsigned int count) -{ - if (savekmsg->size + count <= SAVEKMSG_MAXMEM-sizeof(struct savekmsg)) { - memcpy(savekmsg->data + savekmsg->size, s, count); - savekmsg->size += count; - } -} - -static int __init amiga_savekmsg_setup(char *arg) -{ - if (!MACH_IS_AMIGA || strcmp(arg, "mem")) - return 0; - - if (amiga_chip_size < SAVEKMSG_MAXMEM) { - pr_err("Not enough chipram for debugging\n"); - return -ENOMEM; - } - - /* Just steal the block, the chipram allocator isn't functional yet */ - amiga_chip_size -= SAVEKMSG_MAXMEM; - savekmsg = (void *)ZTWO_VADDR(CHIP_PHYSADDR + amiga_chip_size); - savekmsg->magic1 = SAVEKMSG_MAGIC1; - savekmsg->magic2 = SAVEKMSG_MAGIC2; - savekmsg->magicptr = ZTWO_PADDR(savekmsg); - savekmsg->size = 0; - - amiga_console_driver.write = amiga_mem_console_write; - register_console(&amiga_console_driver); - return 0; -} - -early_param("debug", amiga_savekmsg_setup); - -static void amiga_serial_putc(char c) -{ - amiga_custom.serdat = (unsigned char)c | 0x100; - while (!(amiga_custom.serdatr & 0x2000)) - ; -} - -static void amiga_serial_console_write(struct console *co, const char *s, - unsigned int count) -{ - while (count--) { - if (*s == '\n') - amiga_serial_putc('\r'); - amiga_serial_putc(*s++); - } -} - -#if 0 -void amiga_serial_puts(const char *s) -{ - amiga_serial_console_write(NULL, s, strlen(s)); -} - -int amiga_serial_console_wait_key(struct console *co) -{ - int ch; - - while (!(amiga_custom.intreqr & IF_RBF)) - barrier(); - ch = amiga_custom.serdatr & 0xff; - /* clear the interrupt, so that another character can be read */ - amiga_custom.intreq = IF_RBF; - return ch; -} - -void amiga_serial_gets(struct console *co, char *s, int len) -{ - int ch, cnt = 0; - - while (1) { - ch = amiga_serial_console_wait_key(co); - - /* Check for backspace. */ - if (ch == 8 || ch == 127) { - if (cnt == 0) { - amiga_serial_putc('\007'); - continue; - } - cnt--; - amiga_serial_puts("\010 \010"); - continue; - } - - /* Check for enter. */ - if (ch == 10 || ch == 13) - break; - - /* See if line is too long. */ - if (cnt >= len + 1) { - amiga_serial_putc(7); - cnt--; - continue; - } - - /* Store and echo character. */ - s[cnt++] = ch; - amiga_serial_putc(ch); - } - /* Print enter. */ - amiga_serial_puts("\r\n"); - s[cnt] = 0; -} -#endif - -static int __init amiga_debug_setup(char *arg) -{ - if (MACH_IS_AMIGA && !strcmp(arg, "ser")) { - /* no initialization required (?) */ - amiga_console_driver.write = amiga_serial_console_write; - register_console(&amiga_console_driver); - } - return 0; -} - -early_param("debug", amiga_debug_setup); - -#ifdef CONFIG_HEARTBEAT -static void amiga_heartbeat(int on) -{ - if (on) - ciaa.pra &= ~2; - else - ciaa.pra |= 2; -} -#endif - - /* - * Amiga specific parts of /proc - */ - -static void amiga_get_model(char *model) -{ - strcpy(model, amiga_model_name); -} - - -static void amiga_get_hardware_list(struct seq_file *m) -{ - if (AMIGAHW_PRESENT(CHIP_RAM)) - seq_printf(m, "Chip RAM:\t%ldK\n", amiga_chip_size>>10); - seq_printf(m, "PS Freq:\t%dHz\nEClock Freq:\t%ldHz\n", - amiga_psfreq, amiga_eclock); - if (AMIGAHW_PRESENT(AMI_VIDEO)) { - char *type; - switch (amiga_chipset) { - case CS_OCS: - type = "OCS"; - break; - case CS_ECS: - type = "ECS"; - break; - case CS_AGA: - type = "AGA"; - break; - default: - type = "Old or Unknown"; - break; - } - seq_printf(m, "Graphics:\t%s\n", type); - } - -#define AMIGAHW_ANNOUNCE(name, str) \ - if (AMIGAHW_PRESENT(name)) \ - seq_printf (m, "\t%s\n", str) - - seq_printf (m, "Detected hardware:\n"); - - AMIGAHW_ANNOUNCE(AMI_VIDEO, "Amiga Video"); - AMIGAHW_ANNOUNCE(AMI_BLITTER, "Blitter"); - AMIGAHW_ANNOUNCE(AMBER_FF, "Amber Flicker Fixer"); - AMIGAHW_ANNOUNCE(AMI_AUDIO, "Amiga Audio"); - AMIGAHW_ANNOUNCE(AMI_FLOPPY, "Floppy Controller"); - AMIGAHW_ANNOUNCE(A3000_SCSI, "SCSI Controller WD33C93 (A3000 style)"); - AMIGAHW_ANNOUNCE(A4000_SCSI, "SCSI Controller NCR53C710 (A4000T style)"); - AMIGAHW_ANNOUNCE(A1200_IDE, "IDE Interface (A1200 style)"); - AMIGAHW_ANNOUNCE(A4000_IDE, "IDE Interface (A4000 style)"); - AMIGAHW_ANNOUNCE(CD_ROM, "Internal CD ROM drive"); - AMIGAHW_ANNOUNCE(AMI_KEYBOARD, "Keyboard"); - AMIGAHW_ANNOUNCE(AMI_MOUSE, "Mouse Port"); - AMIGAHW_ANNOUNCE(AMI_SERIAL, "Serial Port"); - AMIGAHW_ANNOUNCE(AMI_PARALLEL, "Parallel Port"); - AMIGAHW_ANNOUNCE(A2000_CLK, "Hardware Clock (A2000 style)"); - AMIGAHW_ANNOUNCE(A3000_CLK, "Hardware Clock (A3000 style)"); - AMIGAHW_ANNOUNCE(CHIP_RAM, "Chip RAM"); - AMIGAHW_ANNOUNCE(PAULA, "Paula 8364"); - AMIGAHW_ANNOUNCE(DENISE, "Denise 8362"); - AMIGAHW_ANNOUNCE(DENISE_HR, "Denise 8373"); - AMIGAHW_ANNOUNCE(LISA, "Lisa 8375"); - AMIGAHW_ANNOUNCE(AGNUS_PAL, "Normal/Fat PAL Agnus 8367/8371"); - AMIGAHW_ANNOUNCE(AGNUS_NTSC, "Normal/Fat NTSC Agnus 8361/8370"); - AMIGAHW_ANNOUNCE(AGNUS_HR_PAL, "Fat Hires PAL Agnus 8372"); - AMIGAHW_ANNOUNCE(AGNUS_HR_NTSC, "Fat Hires NTSC Agnus 8372"); - AMIGAHW_ANNOUNCE(ALICE_PAL, "PAL Alice 8374"); - AMIGAHW_ANNOUNCE(ALICE_NTSC, "NTSC Alice 8374"); - AMIGAHW_ANNOUNCE(MAGIC_REKICK, "Magic Hard Rekick"); - AMIGAHW_ANNOUNCE(PCMCIA, "PCMCIA Slot"); -#ifdef CONFIG_ZORRO - if (AMIGAHW_PRESENT(ZORRO)) - seq_printf(m, "\tZorro II%s AutoConfig: %d Expansion " - "Device%s\n", - AMIGAHW_PRESENT(ZORRO3) ? "I" : "", - zorro_num_autocon, zorro_num_autocon == 1 ? "" : "s"); -#endif /* CONFIG_ZORRO */ - -#undef AMIGAHW_ANNOUNCE -} - -/* - * The Amiga keyboard driver needs key_maps, but we cannot export it in - * drivers/char/defkeymap.c, as it is autogenerated - */ -#ifdef CONFIG_HW_CONSOLE -EXPORT_SYMBOL_GPL(key_maps); -#endif diff --git a/ANDROID_3.4.5/arch/m68k/amiga/pcmcia.c b/ANDROID_3.4.5/arch/m68k/amiga/pcmcia.c deleted file mode 100644 index 7106f0c3..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/pcmcia.c +++ /dev/null @@ -1,122 +0,0 @@ -/* -** asm-m68k/pcmcia.c -- Amiga Linux PCMCIA support -** most information was found by disassembling card.resource -** I'm still looking for an official doc ! -** -** Copyright 1997 by Alain Malek -** -** 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. -** -** Created: 12/10/97 by Alain Malek -*/ - -#include <linux/types.h> -#include <linux/jiffies.h> -#include <linux/timer.h> -#include <linux/module.h> - -#include <asm/amigayle.h> -#include <asm/amipcmcia.h> - -/* gayle config byte for program voltage and access speed */ -static unsigned char cfg_byte = GAYLE_CFG_0V|GAYLE_CFG_150NS; - -void pcmcia_reset(void) -{ - unsigned long reset_start_time = jiffies; - unsigned char b; - - gayle_reset = 0x00; - while (time_before(jiffies, reset_start_time + 1*HZ/100)); - b = gayle_reset; -} -EXPORT_SYMBOL(pcmcia_reset); - - -/* copy a tuple, including tuple header. return nb bytes copied */ -/* be careful as this may trigger a GAYLE_IRQ_WR interrupt ! */ - -int pcmcia_copy_tuple(unsigned char tuple_id, void *tuple, int max_len) -{ - unsigned char id, *dest; - int cnt, pos, len; - - dest = tuple; - pos = 0; - - id = gayle_attribute[pos]; - - while((id != CISTPL_END) && (pos < 0x10000)) { - len = (int)gayle_attribute[pos+2] + 2; - if (id == tuple_id) { - len = (len > max_len)?max_len:len; - for (cnt = 0; cnt < len; cnt++) { - *dest++ = gayle_attribute[pos+(cnt<<1)]; - } - - return len; - } - pos += len<<1; - id = gayle_attribute[pos]; - } - - return 0; -} -EXPORT_SYMBOL(pcmcia_copy_tuple); - -void pcmcia_program_voltage(int voltage) -{ - unsigned char v; - - switch (voltage) { - case PCMCIA_0V: - v = GAYLE_CFG_0V; - break; - case PCMCIA_5V: - v = GAYLE_CFG_5V; - break; - case PCMCIA_12V: - v = GAYLE_CFG_12V; - break; - default: - v = GAYLE_CFG_0V; - } - - cfg_byte = (cfg_byte & 0xfc) | v; - gayle.config = cfg_byte; - -} -EXPORT_SYMBOL(pcmcia_program_voltage); - -void pcmcia_access_speed(int speed) -{ - unsigned char s; - - if (speed <= PCMCIA_SPEED_100NS) - s = GAYLE_CFG_100NS; - else if (speed <= PCMCIA_SPEED_150NS) - s = GAYLE_CFG_150NS; - else if (speed <= PCMCIA_SPEED_250NS) - s = GAYLE_CFG_250NS; - else - s = GAYLE_CFG_720NS; - - cfg_byte = (cfg_byte & 0xf3) | s; - gayle.config = cfg_byte; -} -EXPORT_SYMBOL(pcmcia_access_speed); - -void pcmcia_write_enable(void) -{ - gayle.cardstatus = GAYLE_CS_WR|GAYLE_CS_DA; -} -EXPORT_SYMBOL(pcmcia_write_enable); - -void pcmcia_write_disable(void) -{ - gayle.cardstatus = 0; -} -EXPORT_SYMBOL(pcmcia_write_disable); - diff --git a/ANDROID_3.4.5/arch/m68k/amiga/platform.c b/ANDROID_3.4.5/arch/m68k/amiga/platform.c deleted file mode 100644 index 7fd8b417..00000000 --- a/ANDROID_3.4.5/arch/m68k/amiga/platform.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (C) 2007-2009 Geert Uytterhoeven - * - * 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. - */ - -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/zorro.h> - -#include <asm/amigahw.h> -#include <asm/amigayle.h> - - -#ifdef CONFIG_ZORRO - -static const struct resource zorro_resources[] __initconst = { - /* Zorro II regions (on Zorro II/III) */ - { - .name = "Zorro II exp", - .start = 0x00e80000, - .end = 0x00efffff, - .flags = IORESOURCE_MEM, - }, { - .name = "Zorro II mem", - .start = 0x00200000, - .end = 0x009fffff, - .flags = IORESOURCE_MEM, - }, - /* Zorro III regions (on Zorro III only) */ - { - .name = "Zorro III exp", - .start = 0xff000000, - .end = 0xffffffff, - .flags = IORESOURCE_MEM, - }, { - .name = "Zorro III cfg", - .start = 0x40000000, - .end = 0x7fffffff, - .flags = IORESOURCE_MEM, - } -}; - - -static int __init amiga_init_bus(void) -{ - if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(ZORRO)) - return -ENODEV; - - platform_device_register_simple("amiga-zorro", -1, zorro_resources, - AMIGAHW_PRESENT(ZORRO3) ? 4 : 2); - return 0; -} - -subsys_initcall(amiga_init_bus); - - -static int z_dev_present(zorro_id id) -{ - unsigned int i; - - for (i = 0; i < zorro_num_autocon; i++) - if (zorro_autocon[i].rom.er_Manufacturer == ZORRO_MANUF(id) && - zorro_autocon[i].rom.er_Product == ZORRO_PROD(id)) - return 1; - - return 0; -} - -#else /* !CONFIG_ZORRO */ - -static inline int z_dev_present(zorro_id id) { return 0; } - -#endif /* !CONFIG_ZORRO */ - - -static const struct resource a3000_scsi_resource __initconst = { - .start = 0xdd0000, - .end = 0xdd00ff, - .flags = IORESOURCE_MEM, -}; - - -static const struct resource a4000t_scsi_resource __initconst = { - .start = 0xdd0000, - .end = 0xdd0fff, - .flags = IORESOURCE_MEM, -}; - - -static const struct resource a1200_ide_resource __initconst = { - .start = 0xda0000, - .end = 0xda1fff, - .flags = IORESOURCE_MEM, -}; - -static const struct gayle_ide_platform_data a1200_ide_pdata __initconst = { - .base = 0xda0000, - .irqport = 0xda9000, - .explicit_ack = 1, -}; - - -static const struct resource a4000_ide_resource __initconst = { - .start = 0xdd2000, - .end = 0xdd3fff, - .flags = IORESOURCE_MEM, -}; - -static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = { - .base = 0xdd2020, - .irqport = 0xdd3020, - .explicit_ack = 0, -}; - - -static const struct resource amiga_rtc_resource __initconst = { - .start = 0x00dc0000, - .end = 0x00dcffff, - .flags = IORESOURCE_MEM, -}; - - -static int __init amiga_init_devices(void) -{ - struct platform_device *pdev; - - if (!MACH_IS_AMIGA) - return -ENODEV; - - /* video hardware */ - if (AMIGAHW_PRESENT(AMI_VIDEO)) - platform_device_register_simple("amiga-video", -1, NULL, 0); - - - /* sound hardware */ - if (AMIGAHW_PRESENT(AMI_AUDIO)) - platform_device_register_simple("amiga-audio", -1, NULL, 0); - - - /* storage interfaces */ - if (AMIGAHW_PRESENT(AMI_FLOPPY)) - platform_device_register_simple("amiga-floppy", -1, NULL, 0); - - if (AMIGAHW_PRESENT(A3000_SCSI)) - platform_device_register_simple("amiga-a3000-scsi", -1, - &a3000_scsi_resource, 1); - - if (AMIGAHW_PRESENT(A4000_SCSI)) - platform_device_register_simple("amiga-a4000t-scsi", -1, - &a4000t_scsi_resource, 1); - - if (AMIGAHW_PRESENT(A1200_IDE) || - z_dev_present(ZORRO_PROD_MTEC_VIPER_MK_V_E_MATRIX_530_SCSI_IDE)) { - pdev = platform_device_register_simple("amiga-gayle-ide", -1, - &a1200_ide_resource, 1); - platform_device_add_data(pdev, &a1200_ide_pdata, - sizeof(a1200_ide_pdata)); - } - - if (AMIGAHW_PRESENT(A4000_IDE)) { - pdev = platform_device_register_simple("amiga-gayle-ide", -1, - &a4000_ide_resource, 1); - platform_device_add_data(pdev, &a4000_ide_pdata, - sizeof(a4000_ide_pdata)); - } - - - /* other I/O hardware */ - if (AMIGAHW_PRESENT(AMI_KEYBOARD)) - platform_device_register_simple("amiga-keyboard", -1, NULL, 0); - - if (AMIGAHW_PRESENT(AMI_MOUSE)) - platform_device_register_simple("amiga-mouse", -1, NULL, 0); - - if (AMIGAHW_PRESENT(AMI_SERIAL)) - platform_device_register_simple("amiga-serial", -1, NULL, 0); - - if (AMIGAHW_PRESENT(AMI_PARALLEL)) - platform_device_register_simple("amiga-parallel", -1, NULL, 0); - - - /* real time clocks */ - if (AMIGAHW_PRESENT(A2000_CLK)) - platform_device_register_simple("rtc-msm6242", -1, - &amiga_rtc_resource, 1); - - if (AMIGAHW_PRESENT(A3000_CLK)) - platform_device_register_simple("rtc-rp5c01", -1, - &amiga_rtc_resource, 1); - - return 0; -} - -device_initcall(amiga_init_devices); |