Rev 601 | Rev 631 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 601 | Rev 607 | ||
---|---|---|---|
Line 32... | Line 32... | ||
32 | #include <synch/waitq.h> |
32 | #include <synch/waitq.h> |
33 | #include <synch/spinlock.h> |
33 | #include <synch/spinlock.h> |
34 | #include <arch/types.h> |
34 | #include <arch/types.h> |
35 | #include <typedefs.h> |
35 | #include <typedefs.h> |
36 | #include <arch.h> |
36 | #include <arch.h> |
- | 37 | #include <func.h> |
|
- | 38 | #include <print.h> |
|
37 | 39 | ||
38 | /** Standard input character device. */ |
40 | /** Standard input character device. */ |
39 | chardev_t *stdin = NULL; |
41 | chardev_t *stdin = NULL; |
40 | chardev_t *stdout = NULL; |
42 | chardev_t *stdout = NULL; |
41 | 43 | ||
Line 48... | Line 50... | ||
48 | __u8 _getc(chardev_t *chardev) |
50 | __u8 _getc(chardev_t *chardev) |
49 | { |
51 | { |
50 | __u8 ch; |
52 | __u8 ch; |
51 | ipl_t ipl; |
53 | ipl_t ipl; |
52 | 54 | ||
- | 55 | if (haltstate) { |
|
- | 56 | /* If we are here, we are hopefully on the processor, that |
|
- | 57 | * issued the 'halt' command, so proceed to read the character |
|
- | 58 | * directly from input |
|
- | 59 | */ |
|
- | 60 | if (chardev->op->read) |
|
- | 61 | return chardev->op->read(chardev); |
|
- | 62 | /* no other way of interacting with user, halt */ |
|
- | 63 | printf("cpu: halted - no kconsole\n"); |
|
- | 64 | cpu_halt(); |
|
- | 65 | } |
|
- | 66 | ||
53 | waitq_sleep(&chardev->wq); |
67 | waitq_sleep(&chardev->wq); |
54 | ipl = interrupts_disable(); |
68 | ipl = interrupts_disable(); |
55 | spinlock_lock(&chardev->lock); |
69 | spinlock_lock(&chardev->lock); |
56 | ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN]; |
70 | ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN]; |
57 | chardev->counter--; |
71 | chardev->counter--; |
Line 112... | Line 126... | ||
112 | return ch; |
126 | return ch; |
113 | } |
127 | } |
114 | 128 | ||
115 | void putchar(char c) |
129 | void putchar(char c) |
116 | { |
130 | { |
- | 131 | if (stdout->op->write) |
|
117 | stdout->op->write(stdout, c); |
132 | stdout->op->write(stdout, c); |
118 | } |
133 | } |