Changes in kernel/arch/mips32/src/mach/malta/malta.c [c5429fe:2a103b5] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/mips32/src/mach/malta/malta.c
rc5429fe r2a103b5 38 38 #include <console/chardev.h> 39 39 #include <arch/mm/page.h> 40 #include <genarch/drivers/i8259/i8259.h> 41 #include <genarch/drivers/ns16550/ns16550.h> 42 #include <genarch/srln/srln.h> 43 #include <arch/interrupt.h> 44 #include <stdbool.h> 45 #include <byteorder.h> 46 #include <sysinfo/sysinfo.h> 47 #include <log.h> 40 48 41 49 static void malta_init(void); … … 57 65 }; 58 66 67 #ifdef CONFIG_NS16550 68 static ns16550_instance_t *tty_instance; 69 #endif 70 #ifdef CONFIG_NS16550_OUT 71 static outdev_t *tty_out; 72 #endif 73 74 static void malta_isa_irq_handler(unsigned int i) 75 { 76 uint8_t isa_irq = host2uint32_t_le(pio_read_32(GT64120_PCI0_INTACK)); 77 if (i8259_is_spurious(isa_irq)) { 78 i8259_handle_spurious(isa_irq); 79 #ifdef CONFIG_DEBUG 80 log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u", 81 CPU->id, isa_irq); 82 return; 83 #endif 84 } 85 irq_t *irq = irq_dispatch_and_lock(isa_irq); 86 if (irq) { 87 irq->handler(irq); 88 irq_spinlock_unlock(&irq->lock, false); 89 } else { 90 #ifdef CONFIG_DEBUG 91 log(LF_ARCH, LVL_DEBUG, "cpu%u: unhandled IRQ (irq=%u)", 92 CPU->id, isa_irq); 93 #endif 94 } 95 i8259_eoi(isa_irq); 96 } 97 59 98 void malta_init(void) 60 99 { 100 irq_init(ISA_IRQ_COUNT, ISA_IRQ_COUNT); 101 102 i8259_init((i8259_t *) PIC0_BASE, (i8259_t *) PIC1_BASE, 0); 103 sysinfo_set_item_val("i8259", NULL, true); 104 105 int_handler[INT_HW0] = malta_isa_irq_handler; 106 cp0_unmask_int(INT_HW0); 107 108 #if (defined(CONFIG_NS16550) || defined(CONFIG_NS16550_OUT)) 109 #ifdef CONFIG_NS16550_OUT 110 outdev_t **tty_out_ptr = &tty_out; 111 #else 112 outdev_t **tty_out_ptr = NULL; 113 #endif 114 tty_instance = ns16550_init((ioport8_t *) TTY_BASE, 0, TTY_ISA_IRQ, 115 NULL, NULL, tty_out_ptr); 116 #endif 61 117 } 62 118 … … 73 129 } 74 130 75 #define YAMON_SUBR_BASE PA2KA(0x1fc00500)76 #define YAMON_SUBR_PRINT_COUNT (YAMON_SUBR_BASE + 0x4)77 78 typedef void (**yamon_print_count_ptr_t)(uint32_t, const char *, uint32_t);79 80 yamon_print_count_ptr_t yamon_print_count =81 (yamon_print_count_ptr_t) YAMON_SUBR_PRINT_COUNT;82 83 static void yamon_putwchar(outdev_t *dev, const wchar_t wch)84 {85 86 const char ch = (char) wch;87 88 (*yamon_print_count)(0, &ch, 1);89 }90 91 static outdev_t yamon_outdev;92 static outdev_operations_t yamon_outdev_ops = {93 .write = yamon_putwchar,94 .redraw = NULL,95 .scroll_up = NULL,96 .scroll_down = NULL97 };98 99 131 void malta_output_init(void) 100 132 { 101 outdev_initialize("yamon", &yamon_outdev, &yamon_outdev_ops); 102 stdout_wire(&yamon_outdev); 133 #ifdef CONFIG_NS16550_OUT 134 if (tty_out) 135 stdout_wire(tty_out); 136 #endif 103 137 } 104 138 105 139 void malta_input_init(void) 106 140 { 107 (void) stdin_wire(); 141 #ifdef CONFIG_NS16550 142 if (tty_instance) { 143 srln_instance_t *srln_instance = srln_init(); 144 if (srln_instance) { 145 indev_t *sink = stdin_wire(); 146 indev_t *srln = srln_wire(srln_instance, sink); 147 ns16550_wire(tty_instance, srln); 148 i8259_enable_irqs(1 << TTY_ISA_IRQ); 149 } 150 } 151 #endif 108 152 } 109 153
Note:
See TracChangeset
for help on using the changeset viewer.