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