Changeset c2417bc in mainline for kernel/arch/ppc32/src
- Timestamp:
- 2009-04-21T12:46:26Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f2d2c7ba
- Parents:
- 44b7783
- Location:
- kernel/arch/ppc32/src
- Files:
-
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ppc32/src/drivers/pic.c
r44b7783 rc2417bc 27 27 */ 28 28 29 /** @addtogroup ppc32 29 /** @addtogroup ppc32 30 30 * @{ 31 31 */ … … 41 41 static volatile uint32_t *pic = NULL; 42 42 43 void pic_init(uintptr_t base, size_t size )43 void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg) 44 44 { 45 45 pic = (uint32_t *) hw_map(base, size); 46 *cir = pic_ack_interrupt; 47 *cir_arg = NULL; 46 48 } 47 49 48 void pic_enable_interrupt(in t intnum)50 void pic_enable_interrupt(inr_t intnum) 49 51 { 50 52 if (pic) { … … 57 59 } 58 60 59 void pic_disable_interrupt(in t intnum)61 void pic_disable_interrupt(inr_t intnum) 60 62 { 61 63 if (pic) { … … 67 69 } 68 70 69 void pic_ack_interrupt( int intnum)71 void pic_ack_interrupt(void *arg, inr_t intnum) 70 72 { 71 73 if (pic) { -
kernel/arch/ppc32/src/dummy.s
r44b7783 rc2417bc 31 31 .global asm_delay_loop 32 32 .global sys_tls_set 33 .global cpu_halt 33 34 34 35 sys_tls_set: … … 37 38 asm_delay_loop: 38 39 blr 40 41 cpu_halt: 42 b cpu_halt -
kernel/arch/ppc32/src/interrupt.c
r44b7783 rc2417bc 61 61 62 62 while ((inum = pic_get_pending()) != -1) { 63 bool ack = false;64 63 irq_t *irq = irq_dispatch_and_lock(inum); 65 64 if (irq) { … … 70 69 if (irq->preack) { 71 70 /* Acknowledge the interrupt before processing */ 72 pic_ack_interrupt(inum);73 ack = true;71 if (irq->cir) 72 irq->cir(irq->cir_arg, irq->inr); 74 73 } 75 74 76 75 irq->handler(irq); 76 77 if (!irq->preack) { 78 if (irq->cir) 79 irq->cir(irq->cir_arg, irq->inr); 80 } 81 77 82 spinlock_unlock(&irq->lock); 78 83 } else { … … 84 89 #endif 85 90 } 86 87 if (!ack)88 pic_ack_interrupt(inum);89 91 } 90 92 } -
kernel/arch/ppc32/src/ppc32.c
r44b7783 rc2417bc 36 36 #include <arch.h> 37 37 #include <arch/boot/boot.h> 38 #include < arch/drivers/cuda.h>38 #include <genarch/drivers/via-cuda/cuda.h> 39 39 #include <arch/interrupt.h> 40 40 #include <genarch/fb/fb.h> … … 45 45 #include <ddi/irq.h> 46 46 #include <arch/drivers/pic.h> 47 #include <align.h> 47 48 #include <macros.h> 48 49 #include <string.h> 49 50 50 51 #define IRQ_COUNT 64 52 #define IRQ_CUDA 10 51 53 52 54 bootinfo_t bootinfo; … … 118 120 if (bootinfo.macio.addr) { 119 121 /* Initialize PIC */ 120 pic_init(bootinfo.macio.addr, PAGE_SIZE); 122 cir_t cir; 123 void *cir_arg; 124 pic_init(bootinfo.macio.addr, PAGE_SIZE, &cir, &cir_arg); 125 126 #ifdef CONFIG_VIA_CUDA 127 uintptr_t pa = bootinfo.macio.addr + 0x16000; 128 uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); 129 size_t offset = pa - aligned_addr; 130 size_t size = 2 * PAGE_SIZE; 131 132 cuda_t *cuda = (cuda_t *) 133 (hw_map(aligned_addr, offset + size) + offset); 121 134 122 135 /* Initialize I/O controller */ 123 cuda_init(bootinfo.macio.addr + 0x16000, 2 * PAGE_SIZE); 136 cuda_instance_t *cuda_instance = 137 cuda_init(cuda, IRQ_CUDA, cir, cir_arg); 138 if (cuda_instance) { 139 indev_t *sink = stdin_wire(); 140 cuda_wire(cuda_instance, sink); 141 } 142 #endif 124 143 } 125 144 … … 187 206 } 188 207 208 void arch_reboot(void) 209 { 210 // TODO 211 while (1); 212 } 213 189 214 /** @} 190 215 */
Note:
See TracChangeset
for help on using the changeset viewer.