Rev 3655 | Rev 3877 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3655 | Rev 3657 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | 36 | ||
37 | #include <genarch/kbd/ns16550.h> |
37 | #include <genarch/kbd/ns16550.h> |
38 | #include <genarch/kbd/key.h> |
38 | #include <genarch/kbd/key.h> |
39 | #include <genarch/kbd/scanc.h> |
39 | #include <genarch/kbd/scanc.h> |
40 | #include <genarch/kbd/scanc_sun.h> |
40 | #include <genarch/kbd/scanc_sun.h> |
41 | #ifndef ia64 |
- | |
42 | #include <arch/drivers/kbd.h> |
41 | #include <arch/drivers/kbd.h> |
- | 42 | #ifndef ia64 |
|
43 | #include <arch/drivers/ns16550.h> |
43 | #include <arch/drivers/ns16550.h> |
44 | #endif |
44 | #endif |
45 | #include <ddi/irq.h> |
45 | #include <ddi/irq.h> |
46 | #include <ipc/irq.h> |
46 | #include <ipc/irq.h> |
47 | #include <cpu.h> |
47 | #include <cpu.h> |
Line 128... | Line 128... | ||
128 | ns16550_irq.claim = ns16550_claim; |
128 | ns16550_irq.claim = ns16550_claim; |
129 | ns16550_irq.handler = ns16550_irq_handler; |
129 | ns16550_irq.handler = ns16550_irq_handler; |
130 | ns16550_irq.cir = cir; |
130 | ns16550_irq.cir = cir; |
131 | ns16550_irq.cir_arg = cir_arg; |
131 | ns16550_irq.cir_arg = cir_arg; |
132 | irq_register(&ns16550_irq); |
132 | irq_register(&ns16550_irq); |
- | 133 | ||
- | 134 | ||
- | 135 | while ((ns16550_lsr_read(&ns16550) & LSR_DATA_READY)) |
|
- | 136 | ns16550_rbr_read(&ns16550); |
|
- | 137 | ||
133 | 138 | ||
134 | sysinfo_set_item_val("kbd", NULL, true); |
139 | sysinfo_set_item_val("kbd", NULL, true); |
135 | #ifndef ia64 |
- | |
136 | sysinfo_set_item_val("kbd.type", NULL, KBD_NS16550); |
140 | sysinfo_set_item_val("kbd.type", NULL, KBD_NS16550); |
137 | #endif |
- | |
138 | sysinfo_set_item_val("kbd.devno", NULL, devno); |
141 | sysinfo_set_item_val("kbd.devno", NULL, devno); |
139 | sysinfo_set_item_val("kbd.inr", NULL, inr); |
142 | sysinfo_set_item_val("kbd.inr", NULL, inr); |
140 | sysinfo_set_item_val("kbd.address.virtual", NULL, port); |
143 | sysinfo_set_item_val("kbd.address.virtual", NULL, port); |
- | 144 | sysinfo_set_item_val("kbd.port", NULL, port); |
|
141 | 145 | ||
142 | #ifdef CONFIG_NS16550_INTERRUPT_DRIVEN |
146 | #ifdef CONFIG_NS16550_INTERRUPT_DRIVEN |
143 | /* Enable interrupts */ |
147 | /* Enable interrupts */ |
144 | ns16550_ier_write(&ns16550, IER_ERBFI); |
148 | ns16550_ier_write(&ns16550, IER_ERBFI); |
145 | ns16550_mcr_write(&ns16550, MCR_OUT2); |
149 | ns16550_mcr_write(&ns16550, MCR_OUT2); |
146 | #endif |
150 | #endif |
147 | 151 | ||
148 | #ifdef ia64 |
152 | #ifdef ia64 |
149 | uint8_t c; |
153 | uint8_t c; |
- | 154 | // This switches rbr & ier to mode when accept baudrate constant |
|
150 | c = ns16550_lcr_read(&ns16550); |
155 | c = ns16550_lcr_read(&ns16550); |
151 | ns16550_lcr_write(&ns16550, 0x80 | c); |
156 | ns16550_lcr_write(&ns16550, 0x80 | c); |
152 | ns16550_rbr_write(&ns16550, 0x0c); |
157 | ns16550_rbr_write(&ns16550, 0x0c); |
153 | ns16550_ier_write(&ns16550, 0x00); |
158 | ns16550_ier_write(&ns16550, 0x00); |
154 | ns16550_lcr_write(&ns16550, c); |
159 | ns16550_lcr_write(&ns16550, c); |