/*! Initialize device (and call its initializer, if set) */
int k_device_init ( kdevice_t *kdev, int flags, void *params, void *callback )
{
	int retval = 0;

	ASSERT ( kdev );

	if ( flags )
		kdev->dev.flags = flags;

	if ( params )
		kdev->dev.params = params;

	if ( kdev->dev.init )
		retval = kdev->dev.init ( flags, params, &kdev->dev );

	if ( !retval && kdev->dev.irq_handler )
	{
		(void) arch_register_interrupt_handler ( kdev->dev.irq_num,
							 kdev->dev.irq_handler,
							 &kdev->dev );
		arch_irq_enable ( kdev->dev.irq_num );
	}

	if ( callback )
		kdev->dev.callback = callback;

	return retval;
}
Exemple #2
0
/*! Init console with interrupt enable */
void uart0_echo_test_start ()
{
	volatile unsigned int *uart_imsc = (unsigned int *) UART0_IMSC;

	/* enable RXIM interrupt (interrupt on data receive) */
	*uart_imsc =  1 << 4;

	/* register UART interrupt */
	arch_register_interrupt_handler ( IRQ_OFFSET + UART0IRQL, uart_echo,
					  NULL );

	/* enable UART interrupt in VIC */
	arch_irq_enable ( IRQ_OFFSET + UART0IRQL );
}