Changes in kernel/arch/mips32/src/mach/malta/malta.c [69c31abc:c5429fe] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/mips32/src/mach/malta/malta.c
r69c31abc 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 #include <str.h>49 40 50 41 static void malta_init(void); … … 66 57 }; 67 58 68 #ifdef CONFIG_NS1655069 static ns16550_instance_t *tty_instance;70 #endif71 #ifdef CONFIG_NS16550_OUT72 static outdev_t *tty_out;73 #endif74 75 static void malta_isa_irq_handler(unsigned int i)76 {77 uint8_t isa_irq = host2uint32_t_le(pio_read_32(GT64120_PCI0_INTACK));78 if (pic_is_spurious(isa_irq)) {79 pic_handle_spurious(isa_irq);80 #ifdef CONFIG_DEBUG81 log(LF_ARCH, LVL_DEBUG, "cpu%u: PIC spurious interrupt %u",82 CPU->id, isa_irq);83 return;84 #endif85 }86 irq_t *irq = irq_dispatch_and_lock(isa_irq);87 if (irq) {88 irq->handler(irq);89 irq_spinlock_unlock(&irq->lock, false);90 } else {91 #ifdef CONFIG_DEBUG92 log(LF_ARCH, LVL_DEBUG, "cpu%u: unhandled IRQ (irq=%u)",93 CPU->id, isa_irq);94 #endif95 }96 pic_eoi(isa_irq);97 }98 99 59 void malta_init(void) 100 60 { 101 irq_init(ISA_IRQ_COUNT, ISA_IRQ_COUNT);102 103 i8259_init((i8259_t *) PIC0_BASE, (i8259_t *) PIC1_BASE, 0);104 sysinfo_set_item_val("i8259", NULL, true);105 106 int_handler[INT_HW0] = malta_isa_irq_handler;107 cp0_unmask_int(INT_HW0);108 109 #if (defined(CONFIG_NS16550) || defined(CONFIG_NS16550_OUT))110 #ifdef CONFIG_NS16550_OUT111 outdev_t **tty_out_ptr = &tty_out;112 #else113 outdev_t **tty_out_ptr = NULL;114 #endif115 tty_instance = ns16550_init((ioport8_t *) TTY_BASE, 0, TTY_ISA_IRQ,116 NULL, NULL, tty_out_ptr);117 #endif118 119 const char *args = "console=devices/\\hw\\pci0\\00:0a.0\\com1\\a";120 str_ncpy(bargs, CONFIG_BOOT_ARGUMENTS_BUFLEN, args, str_length(args));121 61 } 122 62 … … 133 73 } 134 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 135 99 void malta_output_init(void) 136 100 { 137 #ifdef CONFIG_NS16550_OUT 138 if (tty_out) 139 stdout_wire(tty_out); 140 #endif 101 outdev_initialize("yamon", &yamon_outdev, &yamon_outdev_ops); 102 stdout_wire(&yamon_outdev); 141 103 } 142 104 143 105 void malta_input_init(void) 144 106 { 145 #ifdef CONFIG_NS16550 146 if (tty_instance) { 147 srln_instance_t *srln_instance = srln_init(); 148 if (srln_instance) { 149 indev_t *sink = stdin_wire(); 150 indev_t *srln = srln_wire(srln_instance, sink); 151 ns16550_wire(tty_instance, srln); 152 pic_enable_irqs(1 << TTY_ISA_IRQ); 153 } 154 } 155 #endif 107 (void) stdin_wire(); 156 108 } 157 109
Note:
See TracChangeset
for help on using the changeset viewer.