Ejemplo n.º 1
0
static void trimedia_irq_disable(int irq)
{
	intInstanceSetup_t setup;
	tmLibdevErr_t ret;

	ASSERT( (irq>=0) && (irq<NR_IRQS));
	
	ret=intGetInstanceSetup((intInterrupt_t)irq,&setup);
	ASSERT(ret==TMLIBDEV_OK);

	setup.enabled=False;

	ret=intInstanceSetup((intInterrupt_t)irq,&setup);
	ASSERT(ret==TMLIBDEV_OK);
}
Ejemplo n.º 2
0
/*
 * 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;
}
Ejemplo n.º 3
0
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;
}