Changes in kernel/arch/mips32/src/mach/malta/malta.c [2a103b5:c5429fe] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/mips32/src/mach/malta/malta.c
r2a103b5 rc5429fe 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>48 40 49 41 static void malta_init(void); … … 65 57 }; 66 58 67 #ifdef CONFIG_NS1655068 static ns16550_instance_t *tty_instance;69 #endif70 #ifdef CONFIG_NS16550_OUT71 static outdev_t *tty_out;72 #endif73 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_DEBUG80 log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u",81 CPU->id, isa_irq);82 return;83 #endif84 }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_DEBUG91 log(LF_ARCH, LVL_DEBUG, "cpu%u: unhandled IRQ (irq=%u)",92 CPU->id, isa_irq);93 #endif94 }95 i8259_eoi(isa_irq);96 }97 98 59 void malta_init(void) 99 60 { 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_OUT110 outdev_t **tty_out_ptr = &tty_out;111 #else112 outdev_t **tty_out_ptr = NULL;113 #endif114 tty_instance = ns16550_init((ioport8_t *) TTY_BASE, 0, TTY_ISA_IRQ,115 NULL, NULL, tty_out_ptr);116 #endif117 61 } 118 62 … … 129 73 } 130 74 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 = NULL 97 }; 98 131 99 void malta_output_init(void) 132 100 { 133 #ifdef CONFIG_NS16550_OUT 134 if (tty_out) 135 stdout_wire(tty_out); 136 #endif 101 outdev_initialize("yamon", &yamon_outdev, &yamon_outdev_ops); 102 stdout_wire(&yamon_outdev); 137 103 } 138 104 139 105 void malta_input_init(void) 140 106 { 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 107 (void) stdin_wire(); 152 108 } 153 109
Note:
See TracChangeset
for help on using the changeset viewer.