patch-2.4.0-test12 linux/arch/m68k/amiga/config.c
Next file: linux/arch/m68k/atari/atakeyb.c
Previous file: linux/arch/m68k/amiga/cia.c
Back to the patch index
Back to the overall index
- Lines: 130
- Date:
Mon Nov 27 17:57:34 2000
- Orig file:
v2.4.0-test11/linux/arch/m68k/amiga/config.c
- Orig date:
Tue Oct 31 12:42:26 2000
diff -u --recursive --new-file v2.4.0-test11/linux/arch/m68k/amiga/config.c linux/arch/m68k/amiga/config.c
@@ -31,6 +31,7 @@
#include <asm/amigahw.h>
#include <asm/amigaints.h>
#include <asm/irq.h>
+#include <asm/keyboard.h>
#include <asm/machdep.h>
#include <asm/io.h>
@@ -43,17 +44,36 @@
unsigned char amiga_psfreq;
struct amiga_hw_present amiga_hw_present;
-static const char *amiga_models[] = {
- "A500", "A500+", "A600", "A1000", "A1200", "A2000", "A2500", "A3000",
- "A3000T", "A3000+", "A4000", "A4000T", "CDTV", "CD32", "Draco"
+static const char s_a500[] __initdata = "A500";
+static const char s_a500p[] __initdata = "A500+";
+static const char s_a600[] __initdata = "A600";
+static const char s_a1000[] __initdata = "A1000";
+static const char s_a1200[] __initdata = "A1200";
+static const char s_a2000[] __initdata = "A2000";
+static const char s_a2500[] __initdata = "A2500";
+static const char s_a3000[] __initdata = "A3000";
+static const char s_a3000t[] __initdata = "A3000T";
+static const char s_a3000p[] __initdata = "A3000+";
+static const char s_a4000[] __initdata = "A4000";
+static const char s_a4000t[] __initdata = "A4000T";
+static const char s_cdtv[] __initdata = "CDTV";
+static const char s_cd32[] __initdata = "CD32";
+static const char s_draco[] __initdata = "Draco";
+static const char *amiga_models[] __initdata = {
+ s_a500, s_a500p, s_a600, s_a1000, s_a1200, s_a2000, s_a2500, s_a3000,
+ s_a3000t, s_a3000p, s_a4000, s_a4000t, s_cdtv, s_cd32, s_draco,
};
+static char amiga_model_name[13] = "Amiga ";
+
extern char m68k_debug_device[];
static void amiga_sched_init(void (*handler)(int, void *, struct pt_regs *));
/* amiga specific keyboard functions */
extern int amiga_keyb_init(void);
extern int amiga_kbdrate (struct kbd_repeat *);
+extern int amiga_kbd_translate(unsigned char keycode, unsigned char *keycodep,
+ char raw_mode);
/* amiga specific irq functions */
extern void amiga_init_IRQ (void);
extern void (*amiga_default_handler[]) (int, void *, struct pt_regs *);
@@ -127,6 +147,8 @@
NULL, 0x00dc0000, 0x00dcffff
};
+static struct resource ram_resource[NUM_MEMINFO];
+
/*
* Parse an Amiga-specific record in the bootinfo
@@ -200,8 +222,10 @@
memset(&amiga_hw_present, 0, sizeof(amiga_hw_present));
printk("Amiga hardware found: ");
- if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
+ 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:
@@ -367,6 +391,8 @@
mach_sched_init = amiga_sched_init;
mach_keyb_init = amiga_keyb_init;
mach_kbdrate = amiga_kbdrate;
+ mach_kbd_translate = amiga_kbd_translate;
+ SYSRQ_KEY = 0xff;
mach_init_IRQ = amiga_init_IRQ;
mach_default_handler = &amiga_default_handler;
mach_request_irq = amiga_request_irq;
@@ -447,6 +473,17 @@
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 ();
@@ -478,8 +515,11 @@
static void __init amiga_sched_init(void (*timer_routine)(int, void *,
struct pt_regs *))
{
+ static struct resource sched_res = { "timer" };
jiffy_ticks = (amiga_eclock+HZ/2)/HZ;
+ if (!request_mem_region(CIAB_PHYSADDR+0x400, 0x200, "timer"))
+ 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;
@@ -827,7 +867,9 @@
static void amiga_savekmsg_init(void)
{
- savekmsg = (struct savekmsg *)amiga_chip_alloc(SAVEKMSG_MAXMEM, "Debug");
+ static struct resource debug_res = { "Debug" };
+
+ savekmsg = amiga_chip_alloc_res(SAVEKMSG_MAXMEM, &debug_res);
savekmsg->magic1 = SAVEKMSG_MAGIC1;
savekmsg->magic2 = SAVEKMSG_MAGIC2;
savekmsg->magicptr = virt_to_phys(savekmsg);
@@ -933,9 +975,7 @@
static void amiga_get_model(char *model)
{
- strcpy(model, "Amiga ");
- if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
- strcat(model, amiga_models[amiga_model-AMI_500]);
+ strcpy(model, amiga_model_name);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)