File: /usr/src/linux/arch/ia64/hp/hpsim_console.c
1 /*
2 * Platform dependent support for HP simulator.
3 *
4 * Copyright (C) 1998, 1999 Hewlett-Packard Co
5 * Copyright (C) 1998, 1999 David Mosberger-Tang <davidm@hpl.hp.com>
6 * Copyright (C) 1999 Vijay Chander <vijay@engr.sgi.com>
7 */
8 #include <linux/init.h>
9 #include <linux/kernel.h>
10 #include <linux/param.h>
11 #include <linux/string.h>
12 #include <linux/types.h>
13 #include <linux/kdev_t.h>
14 #include <linux/console.h>
15
16 #include <asm/delay.h>
17 #include <asm/irq.h>
18 #include <asm/pal.h>
19 #include <asm/machvec.h>
20 #include <asm/pgtable.h>
21 #include <asm/sal.h>
22
23 #include "hpsim_ssc.h"
24
25 static int simcons_init (struct console *, char *);
26 static void simcons_write (struct console *, const char *, unsigned);
27 static int simcons_wait_key (struct console *);
28 static kdev_t simcons_console_device (struct console *);
29
30 struct console hpsim_cons = {
31 name: "simcons",
32 write: simcons_write,
33 device: simcons_console_device,
34 wait_key: simcons_wait_key,
35 setup: simcons_init,
36 flags: CON_PRINTBUFFER,
37 index: -1,
38 };
39
40 static int
41 simcons_init (struct console *cons, char *options)
42 {
43 return 0;
44 }
45
46 static void
47 simcons_write (struct console *cons, const char *buf, unsigned count)
48 {
49 unsigned long ch;
50
51 while (count-- > 0) {
52 ch = *buf++;
53 ia64_ssc(ch, 0, 0, 0, SSC_PUTCHAR);
54 if (ch == '\n')
55 ia64_ssc('\r', 0, 0, 0, SSC_PUTCHAR);
56 }
57 }
58
59 static int
60 simcons_wait_key (struct console *cons)
61 {
62 char ch;
63
64 do {
65 ch = ia64_ssc(0, 0, 0, 0, SSC_GETCHAR);
66 } while (ch == '\0');
67 return ch;
68 }
69
70 static kdev_t
71 simcons_console_device (struct console *c)
72 {
73 return MKDEV(TTY_MAJOR, 64 + c->index);
74 }
75