parlib: Add synchronization objects
[akaros.git] / kern / arch / riscv / console.c
1 #include <arch/console.h>
2 #include <pmap.h>
3 #include <atomic.h>
4 #include <smp.h>
5 #include <kmalloc.h>
6 #include <monitor.h>
7 #include <process.h>
8
9 int cons_get_any_char(void)
10 {
11         assert(0);
12 }
13
14 void cons_init()
15 {
16         mtpcr(PCR_SR, mfpcr(PCR_SR) | (1 << (IRQ_HOST+SR_IM_SHIFT)));
17         while (mtpcr(PCR_TOHOST, 0x01L << 56));
18 }
19
20 // `High'-level console I/O.  Used by readline and cprintf.
21
22 void
23 cputbuf(const char* str, int len)
24 {
25         for (int i = 0; i < len; i++)
26                 cputchar(str[i]);
27 }
28
29 void poll_keyboard()
30 {
31 }
32
33 // Low-level console I/O
34
35 void
36 cputchar(int c)
37 {
38         while (mtpcr(PCR_TOHOST, 0x0101000000000000 | (unsigned char)c));
39 }
40
41 int
42 getchar(void)
43 {
44         char c = 'x';
45
46         #warning "implement me"
47         /* maybe do a qio read */
48
49         return c;
50 }
51
52 int
53 iscons(int fdnum)
54 {
55         // used by readline
56         return 1;
57 }