Changes in kernel/arch/arm32/src/mach/beaglebone/beaglebone.c [a829a5b:6f07226] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/src/mach/beaglebone/beaglebone.c
ra829a5b r6f07226 35 35 #include <arch/exception.h> 36 36 #include <arch/mach/beaglebone/beaglebone.h> 37 #include <genarch/drivers/am335x_irc/am335x_irc.h> 37 #include <genarch/drivers/am335x/irc.h> 38 #include <genarch/drivers/am335x/uart.h> 39 #include <genarch/drivers/am335x/timer.h> 40 #include <genarch/srln/srln.h> 38 41 #include <interrupt.h> 39 42 #include <ddi/ddi.h> … … 54 57 static struct beaglebone { 55 58 am335x_irc_regs_t *irc_addr; 59 am335x_timer_t timer; 60 am335x_uart_t uart; 56 61 } bbone; 57 62 58 63 struct arm_machine_ops bbone_machine_ops = { 59 bbone_init,60 bbone_timer_irq_start,61 bbone_cpu_halt,62 bbone_get_memory_extents,63 bbone_irq_exception,64 bbone_frame_init,65 bbone_output_init,66 bbone_input_init,67 bbone_get_irq_count,68 bbone_get_platform_name64 .machine_init = bbone_init, 65 .machine_timer_irq_start = bbone_timer_irq_start, 66 .machine_cpu_halt = bbone_cpu_halt, 67 .machine_get_memory_extents = bbone_get_memory_extents, 68 .machine_irq_exception = bbone_irq_exception, 69 .machine_frame_init = bbone_frame_init, 70 .machine_output_init = bbone_output_init, 71 .machine_input_init = bbone_input_init, 72 .machine_get_irq_count = bbone_get_irq_count, 73 .machine_get_platform_name = bbone_get_platform_name, 69 74 }; 70 75 … … 78 83 } 79 84 85 static irq_ownership_t bbone_timer_irq_claim(irq_t *irq) 86 { 87 return IRQ_ACCEPT; 88 } 89 90 static void bbone_timer_irq_handler(irq_t *irq) 91 { 92 am335x_timer_intr_ack(&bbone.timer); 93 spinlock_unlock(&irq->lock); 94 clock(); 95 spinlock_lock(&irq->lock); 96 } 97 80 98 static void bbone_timer_irq_start(void) 81 99 { 100 /* Initialize the IRQ */ 101 static irq_t timer_irq; 102 irq_initialize(&timer_irq); 103 timer_irq.devno = device_assign_devno(); 104 timer_irq.inr = AM335x_DMTIMER0_IRQ; 105 timer_irq.claim = bbone_timer_irq_claim; 106 timer_irq.handler = bbone_timer_irq_handler; 107 irq_register(&timer_irq); 108 109 /* Initialize the DMTIMER0 */ 110 am335x_timer_init(&bbone.timer, DMTIMER0, HZ); 111 /* Enable the interrupt */ 112 am335x_irc_enable(bbone.irc_addr, AM335x_DMTIMER0_IRQ); 113 /* Start the timer */ 114 am335x_timer_start(&bbone.timer); 82 115 } 83 116 84 117 static void bbone_cpu_halt(void) 85 118 { 119 while (1); 86 120 } 87 121 … … 105 139 static void bbone_output_init(void) 106 140 { 141 const bool ok = am335x_uart_init(&bbone.uart, 142 AM335x_UART0_IRQ, AM335x_UART0_BASE_ADDRESS, 143 AM335x_UART0_SIZE); 144 145 if (ok) 146 stdout_wire(&bbone.uart.outdev); 107 147 } 108 148 109 149 static void bbone_input_init(void) 110 150 { 151 srln_instance_t *srln_instance = srln_init(); 152 if (srln_instance) { 153 indev_t *sink = stdin_wire(); 154 indev_t *srln = srln_wire(srln_instance, sink); 155 am335x_uart_input_wire(&bbone.uart, srln); 156 am335x_irc_enable(bbone.irc_addr, AM335x_UART0_IRQ); 157 } 111 158 } 112 159 113 160 size_t bbone_get_irq_count(void) 114 161 { 115 return 0;162 return AM335x_IRC_IRQ_COUNT; 116 163 } 117 164
Note:
See TracChangeset
for help on using the changeset viewer.
