Rev 606 | Rev 625 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 606 | Rev 607 | ||
|---|---|---|---|
| Line 69... | Line 69... | ||
| 69 | i++; |
69 | i++; |
| 70 | } |
70 | } |
| 71 | return i; |
71 | return i; |
| 72 | } |
72 | } |
| 73 | 73 | ||
| - | 74 | /** Read character from serial port, wait until available */ |
|
| 74 | static chardev_operations_t serial_ops = { |
75 | static char serial_do_read(chardev_t *dev) |
| - | 76 | { |
|
| 75 | .resume = serial_enable, |
77 | serial_t *sd = (serial_t *)dev->data; |
| - | 78 | char ch; |
|
| - | 79 | ||
| - | 80 | while (!(SERIAL_READ_LSR(sd->port) & 1)) |
|
| - | 81 | ; |
|
| 76 | .suspend = serial_disable, |
82 | ch = SERIAL_READ(sd->port); |
| - | 83 | ||
| 77 | .write = serial_write |
84 | if (ch =='\r') |
| - | 85 | ch = '\n'; |
|
| - | 86 | return ch; |
|
| 78 | }; |
87 | } |
| - | 88 | ||
| 79 | 89 | ||
| 80 | /** Process keyboard interrupt. Does not work in simics? */ |
90 | /** Process keyboard interrupt. Does not work in simics? */ |
| 81 | static void serial_interrupt(int n, void *stack) |
91 | static void serial_interrupt(int n, void *stack) |
| 82 | { |
92 | { |
| 83 | serial_t *sd = (serial_t *)console.data; |
93 | serial_t *sd = (serial_t *)console.data; |
| Line 91... | Line 101... | ||
| 91 | ch = '\n'; |
101 | ch = '\n'; |
| 92 | chardev_push_character(&console, ch); |
102 | chardev_push_character(&console, ch); |
| 93 | } |
103 | } |
| 94 | 104 | ||
| 95 | 105 | ||
| - | 106 | ||
| - | 107 | static chardev_operations_t serial_ops = { |
|
| - | 108 | .resume = serial_enable, |
|
| - | 109 | .suspend = serial_disable, |
|
| - | 110 | .write = serial_write, |
|
| - | 111 | .read = serial_do_read |
|
| - | 112 | }; |
|
| - | 113 | ||
| 96 | iroutine old_timer; |
114 | iroutine old_timer; |
| 97 | /** Do polling on timer interrupt */ |
115 | /** Do polling on timer interrupt */ |
| 98 | static void timer_replace(int n, void *stack) |
116 | static void timer_replace(int n, void *stack) |
| 99 | { |
117 | { |
| 100 | old_timer(n, stack); |
118 | old_timer(n, stack); |