diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-02-23 00:40:54 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-02-23 00:40:54 +0000 |
commit | 529c593ece216e4aaffd36bd940cb94f1fa63129 (patch) | |
tree | 78f1c0b805f5656aa7b0417a043c5346f700a2cf /arch/ia64/hp | |
parent | 0bd079751d25808d1972baee5c4eaa1db2227257 (diff) |
Merge with 2.3.43. I did ignore all modifications to the qlogicisp.c
driver due to the Origin A64 hacks.
Diffstat (limited to 'arch/ia64/hp')
-rw-r--r-- | arch/ia64/hp/Makefile | 19 | ||||
-rw-r--r-- | arch/ia64/hp/hpsim_console.c | 78 | ||||
-rw-r--r-- | arch/ia64/hp/hpsim_irq.c | 83 | ||||
-rw-r--r-- | arch/ia64/hp/hpsim_machvec.c | 4 | ||||
-rw-r--r-- | arch/ia64/hp/hpsim_setup.c | 71 | ||||
-rw-r--r-- | arch/ia64/hp/hpsim_ssc.h | 36 |
6 files changed, 291 insertions, 0 deletions
diff --git a/arch/ia64/hp/Makefile b/arch/ia64/hp/Makefile new file mode 100644 index 000000000..64899f4be --- /dev/null +++ b/arch/ia64/hp/Makefile @@ -0,0 +1,19 @@ +# +# ia64/platform/hp/Makefile +# +# Copyright (C) 1999 Silicon Graphics, Inc. +# Copyright (C) Srinivasa Thirumalachar (sprasad@engr.sgi.com) +# + +all: hp.a + +O_TARGET = hp.a +O_OBJS = hpsim_console.o hpsim_irq.o hpsim_setup.o + +ifeq ($(CONFIG_IA64_GENERIC),y) +O_OBJS += hpsim_machvec.o +endif + +clean:: + +include $(TOPDIR)/Rules.make diff --git a/arch/ia64/hp/hpsim_console.c b/arch/ia64/hp/hpsim_console.c new file mode 100644 index 000000000..b97116cee --- /dev/null +++ b/arch/ia64/hp/hpsim_console.c @@ -0,0 +1,78 @@ +/* + * Platform dependent support for HP simulator. + * + * Copyright (C) 1998, 1999 Hewlett-Packard Co + * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com> + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/param.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/kdev_t.h> +#include <linux/console.h> + +#include <asm/delay.h> +#include <asm/irq.h> +#include <asm/pal.h> +#include <asm/machvec.h> +#include <asm/pgtable.h> +#include <asm/sal.h> + +#include "hpsim_ssc.h" + +static int simcons_init (struct console *, char *); +static void simcons_write (struct console *, const char *, unsigned); +static int simcons_wait_key (struct console *); +static kdev_t simcons_console_device (struct console *); + +struct console hpsim_cons = { + "simcons", + simcons_write, /* write */ + NULL, /* read */ + simcons_console_device, /* device */ + simcons_wait_key, /* wait_key */ + NULL, /* unblank */ + simcons_init, /* setup */ + CON_PRINTBUFFER, /* flags */ + -1, /* index */ + 0, /* cflag */ + NULL /* next */ +}; + +static int +simcons_init (struct console *cons, char *options) +{ + return 0; +} + +static void +simcons_write (struct console *cons, const char *buf, unsigned count) +{ + unsigned long ch; + + while (count-- > 0) { + ch = *buf++; + ia64_ssc(ch, 0, 0, 0, SSC_PUTCHAR); + if (ch == '\n') + ia64_ssc('\r', 0, 0, 0, SSC_PUTCHAR); + } +} + +static int +simcons_wait_key (struct console *cons) +{ + char ch; + + do { + ch = ia64_ssc(0, 0, 0, 0, SSC_GETCHAR); + } while (ch == '\0'); + return ch; +} + +static kdev_t +simcons_console_device (struct console *c) +{ + return MKDEV(TTY_MAJOR, 64 + c->index); +} diff --git a/arch/ia64/hp/hpsim_irq.c b/arch/ia64/hp/hpsim_irq.c new file mode 100644 index 000000000..72b36d6d6 --- /dev/null +++ b/arch/ia64/hp/hpsim_irq.c @@ -0,0 +1,83 @@ +/* + * Platform dependent support for HP simulator. + * + * Copyright (C) 1998, 1999 Hewlett-Packard Co + * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com> + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/param.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/kdev_t.h> +#include <linux/console.h> + +#include <asm/delay.h> +#include <asm/irq.h> +#include <asm/pal.h> +#include <asm/machvec.h> +#include <asm/pgtable.h> +#include <asm/sal.h> + + +static int +irq_hp_sim_handle_irq (unsigned int irq, struct pt_regs *regs) +{ + struct irqaction *action = 0; + struct irq_desc *id = irq_desc + irq; + unsigned int status; + int retval; + + spin_lock(&irq_controller_lock); + { + status = id->status; + if ((status & IRQ_INPROGRESS) == 0 && (status & IRQ_ENABLED) != 0) { + action = id->action; + status |= IRQ_INPROGRESS; + } + id->status = status & ~(IRQ_REPLAY | IRQ_WAITING); + } + spin_unlock(&irq_controller_lock); + + if (!action) { + if (!(id->status & IRQ_AUTODETECT)) + printk("irq_hpsim_handle_irq: unexpected interrupt %u\n", irq); + return 0; + } + + retval = invoke_irq_handlers(irq, regs, action); + + spin_lock(&irq_controller_lock); + { + id->status &= ~IRQ_INPROGRESS; + } + spin_unlock(&irq_controller_lock); + + return retval; +} + +static void +irq_hp_sim_noop (unsigned int irq) +{ +} + +static struct hw_interrupt_type irq_type_hp_sim = { + "hp_sim", + (void (*)(unsigned long)) irq_hp_sim_noop, /* init */ + irq_hp_sim_noop, /* startup */ + irq_hp_sim_noop, /* shutdown */ + irq_hp_sim_handle_irq, /* handle */ + irq_hp_sim_noop, /* enable */ + irq_hp_sim_noop, /* disable */ +}; + +void +hpsim_irq_init (struct irq_desc desc[NR_IRQS]) +{ + int i; + + for (i = IA64_MIN_VECTORED_IRQ; i <= IA64_MAX_VECTORED_IRQ; ++i) { + irq_desc[i].handler = &irq_type_hp_sim; + } +} diff --git a/arch/ia64/hp/hpsim_machvec.c b/arch/ia64/hp/hpsim_machvec.c new file mode 100644 index 000000000..7d78f4961 --- /dev/null +++ b/arch/ia64/hp/hpsim_machvec.c @@ -0,0 +1,4 @@ +#include <asm/machvec_init.h> +#include <asm/machvec_hpsim.h> + +MACHVEC_DEFINE(hpsim) diff --git a/arch/ia64/hp/hpsim_setup.c b/arch/ia64/hp/hpsim_setup.c new file mode 100644 index 000000000..dfa83e135 --- /dev/null +++ b/arch/ia64/hp/hpsim_setup.c @@ -0,0 +1,71 @@ +/* + * Platform dependent support for HP simulator. + * + * Copyright (C) 1998, 1999 Hewlett-Packard Co + * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com> + */ +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/param.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/kdev_t.h> +#include <linux/console.h> + +#include <asm/delay.h> +#include <asm/irq.h> +#include <asm/pal.h> +#include <asm/machvec.h> +#include <asm/pgtable.h> +#include <asm/sal.h> + +#include "hpsim_ssc.h" + +extern struct console hpsim_cons; + +/* + * Simulator system call. + */ +inline long +ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr) +{ +#ifdef __GCC_DOESNT_KNOW_IN_REGS__ + register long in0 asm ("r32") = arg0; + register long in1 asm ("r33") = arg1; + register long in2 asm ("r34") = arg2; + register long in3 asm ("r35") = arg3; +#else + register long in0 asm ("in0") = arg0; + register long in1 asm ("in1") = arg1; + register long in2 asm ("in2") = arg2; + register long in3 asm ("in3") = arg3; +#endif + register long r8 asm ("r8"); + register long r15 asm ("r15") = nr; + + asm volatile ("break 0x80001" + : "=r"(r8) + : "r"(r15), "r"(in0), "r"(in1), "r"(in2), "r"(in3)); + return r8; +} + +void +ia64_ssc_connect_irq (long intr, long irq) +{ + ia64_ssc(intr, irq, 0, 0, SSC_CONNECT_INTERRUPT); +} + +void +ia64_ctl_trace (long on) +{ + ia64_ssc(on, 0, 0, 0, SSC_CTL_TRACE); +} + +void __init +hpsim_setup (char **cmdline_p) +{ + ROOT_DEV = to_kdev_t(0x0801); /* default to first SCSI drive */ + + register_console (&hpsim_cons); +} diff --git a/arch/ia64/hp/hpsim_ssc.h b/arch/ia64/hp/hpsim_ssc.h new file mode 100644 index 000000000..bfa390627 --- /dev/null +++ b/arch/ia64/hp/hpsim_ssc.h @@ -0,0 +1,36 @@ +/* + * Platform dependent support for HP simulator. + * + * Copyright (C) 1998, 1999 Hewlett-Packard Co + * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com> + * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com> + */ +#ifndef _IA64_PLATFORM_HPSIM_SSC_H +#define _IA64_PLATFORM_HPSIM_SSC_H + +/* Simulator system calls: */ + +#define SSC_CONSOLE_INIT 20 +#define SSC_GETCHAR 21 +#define SSC_PUTCHAR 31 +#define SSC_CONNECT_INTERRUPT 58 +#define SSC_GENERATE_INTERRUPT 59 +#define SSC_SET_PERIODIC_INTERRUPT 60 +#define SSC_GET_RTC 65 +#define SSC_EXIT 66 +#define SSC_LOAD_SYMBOLS 69 +#define SSC_GET_TOD 74 +#define SSC_CTL_TRACE 76 + +#define SSC_NETDEV_PROBE 100 +#define SSC_NETDEV_SEND 101 +#define SSC_NETDEV_RECV 102 +#define SSC_NETDEV_ATTACH 103 +#define SSC_NETDEV_DETACH 104 + +/* + * Simulator system call. + */ +extern long ia64_ssc (long arg0, long arg1, long arg2, long arg3, int nr); + +#endif /* _IA64_PLATFORM_HPSIM_SSC_H */ |