/* * Register system call handler and exception handlers */ void __init trap_init(void) { /* * Register system call handler. */ tmLibdevErr_t ret; intInstanceSetup_t setup; setup.enabled=True; setup.handler=system_call; setup.level_triggered=False; setup.priority=intPRIO_6; ret=intOpen(intRTOS); if(ret!=TMLIBDEV_OK){ panic("trap_init: intOpen failed!\n"); } ret=intInstanceSetup(intRTOS,&setup); if(ret!=TMLIBDEV_OK){ panic("trap_init: intInstanceSetup failed!\n"); } /*Register exception handlers*/ register_exception_handlers(); { char* start=NULL; extern int __Rt_mbase; start=&__Rt_mbase; tmbreak_trapexecution(0,start,1); } return; }
extern void __init init_IRQ(void) { int i=0; tmLibdevErr_t ret; extern unsigned long irq_timer; /*init system timer*/ Int timer; timInstanceSetup_t setup; UInt32 cycles; UInt32 one_s_in_nano_seconds = 1000000000; ret=timOpen(&timer); ASSERT(ret==TMLIBDEV_OK); #if defined(__TCS_pnx1005__) && defined(__TCS_ttisim__) cycs_per_10ns = 0x00000001; cycles = 0x0016e360; #else timToCycles(10,&cycs_per_10ns); timToCycles(one_s_in_nano_seconds/HZ,&cycles); #endif setup.source=timCLOCK; setup.prescale=1; setup.modulus=cycles; setup.handler=tm_irq_table[INTERRUPT_OF(timer)].handler; setup.priority=tm_irq_table[INTERRUPT_OF(timer)].prio; setup.running=True; ret=timInstanceSetup(timer,&setup); ASSERT(ret==TMLIBDEV_OK); irq_timer=INTERRUPT_OF(timer); irq_desc[irq_timer].handler=&trimedia_irq_controller; /*init irqs used by linux*/ for(i=0;i<(sizeof(tm_irq_table)/sizeof(tm_irq_table[0]));i++){ struct tm_irq_info* irq_entry=&tm_irq_table[i]; if(irq_entry->enable){ intInstanceSetup_t intSetup; intSetup.enabled=False; /*enable it when request_irq*/ intSetup.handler=irq_entry->handler; intSetup.level_triggered=irq_entry->level_triggered; intSetup.priority=irq_entry->prio; ret=intOpen(irq_entry->number); ASSERT(ret==TMLIBDEV_OK); ret=intInstanceSetup(irq_entry->number,&intSetup); ASSERT(ret==TMLIBDEV_OK); irq_desc[irq_entry->number].handler=&trimedia_irq_controller; DEBUGP("Own interrupt '%s':%d \n",irq_entry->name,irq_entry->number); }else{ DEBUGP("Giveup interrupt '%s':%d \n",irq_entry->name,irq_entry->number); } } return; }