Beispiel #1
0
/* Showtime code registers callbacks */
void SetF2Interrupts(void (*(pIRQ1))(void *),void (*(pIRQ2))(void *), void *pContext)
{
	UINT32 OldLevel = 0;

	OldLevel = intLock();

	pFalconContext = pContext ;
	if (pIRQ1)
	{
		pF2_IRQ1_ISR= pIRQ1;

		GPIO_SetGPIOIRQRoutine(GPIOINT_F2_IRQ1, GPIOB10_Handler);
		SetGPIOInputEnable( GPIOINT_F2_IRQ1, GP_INPUTON );

		SetGPIOIntEnable(GPIOINT_F2_IRQ1, IRQ_OFF);
#ifdef LEVEL_MODE_ADSL
		SetGPIOIntMode (GPIOINT_F2_IRQ1, GP_IRQ_MODE_LEVEL);
#endif
		SetGPIOIntPolarity (GPIOINT_F2_IRQ1, GP_IRQ_POL_NEGATIVE);
		SetGPIOIntEnable(GPIOINT_F2_IRQ1, IRQ_ON);
	}
	else
	{
		SetGPIOIntEnable(GPIOINT_F2_IRQ1, IRQ_OFF);
		ClearGPIOIntStatus(GPIOINT_F2_IRQ1);
		pF2_IRQ1_ISR= pIRQ1;
	}

	if (pIRQ2)
	{
		pF2_IRQ2_ISR= pIRQ2;

		GPIO_SetGPIOIRQRoutine(GPIOINT_F2_IRQ2, GPIOB11_Handler);
		SetGPIOInputEnable( GPIOINT_F2_IRQ2, GP_INPUTON );

		SetGPIOIntEnable(GPIOINT_F2_IRQ2, IRQ_OFF);
#ifdef LEVEL_MODE_ADSL
		SetGPIOIntMode (GPIOINT_F2_IRQ2, GP_IRQ_MODE_LEVEL);
#endif
		SetGPIOIntPolarity (GPIOINT_F2_IRQ2, GP_IRQ_POL_NEGATIVE);
		SetGPIOIntEnable(GPIOINT_F2_IRQ2, IRQ_ON);
	}
	else
	{
		SetGPIOIntEnable(GPIOINT_F2_IRQ2, IRQ_OFF);
		ClearGPIOIntStatus(GPIOINT_F2_IRQ2);
		pF2_IRQ2_ISR= pIRQ2;
	}

	intUnlock(OldLevel);

}
static int __init
rs_cnxt_init(void)
{
	int flags;
	struct cnxt_serial *info;
		
	/* Setup base handler, and timer table. */
	init_bh(SERIAL_BH, do_serial_bh);
	
	/* Initialize the tty_driver structure */
	
	memset(&serial_driver, 0, sizeof(struct tty_driver));
	serial_driver.magic = TTY_DRIVER_MAGIC;
	serial_driver.name = "ttyS";
	serial_driver.major = TTY_MAJOR;
	serial_driver.minor_start = 64;
	serial_driver.num = 1;
	serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
	serial_driver.subtype = SERIAL_TYPE_NORMAL;
	serial_driver.init_termios = tty_std_termios;
	serial_driver.init_termios.c_cflag = 
			B57600 | CS8 | CREAD | HUPCL | CLOCAL;
	serial_driver.flags = TTY_DRIVER_REAL_RAW;
	serial_driver.refcount = &serial_refcount;
	serial_driver.table = serial_table;
	serial_driver.termios = serial_termios;
	serial_driver.termios_locked = serial_termios_locked;

	serial_driver.open = rs_open;
	serial_driver.close = rs_close;
	serial_driver.write = rs_write;
	serial_driver.put_char = rs_put_char;
	serial_driver.flush_chars = rs_flush_chars;
	serial_driver.write_room = rs_write_room;
	serial_driver.chars_in_buffer = rs_chars_in_buffer;
	serial_driver.flush_buffer = rs_flush_buffer;
	serial_driver.ioctl = rs_ioctl;
	serial_driver.throttle = rs_throttle;
	serial_driver.unthrottle = rs_unthrottle;
	serial_driver.set_termios = rs_set_termios;
	serial_driver.stop = rs_stop;
	serial_driver.start = rs_start;
	serial_driver.hangup = rs_hangup;
	serial_driver.set_ldisc = rs_set_ldisc;

	/*
	 * The callout device is just like normal device except for
	 * major number and the subtype code.
	 */
	callout_driver = serial_driver;
	callout_driver.name = "cua";
	callout_driver.major = TTYAUX_MAJOR;
	callout_driver.subtype = SERIAL_TYPE_CALLOUT;

	if (tty_register_driver(&serial_driver))
		panic("Couldn't register serial driver\n");
	if (tty_register_driver(&callout_driver))
		panic("Couldn't register callout driver\n");
	
	save_flags(flags); cli();


	info = &uart_info;
	info->magic = SERIAL_MAGIC;
	info->uart = (struct uart_regs*)UART0_Base_Addr;
	info->port = UART0_Base_Addr;
	info->tty = 0;
	info->irq = CNXT_INT_LVL_GPIO;
	info->custom_divisor = 16;
	info->close_delay = 50;
	info->closing_wait = 3000;
	info->x_char = 0;
	info->event = 0;
	info->count = 0;
	info->blocked_open = 0;
	info->tqueue.routine = do_softint;
	info->tqueue.data = info;
	info->tqueue_hangup.routine = do_serial_hangup;
	info->tqueue_hangup.data = info;
	info->callout_termios =callout_driver.init_termios;
	info->normal_termios = serial_driver.init_termios;
	init_waitqueue_head(&info->open_wait);
	init_waitqueue_head(&info->close_wait);
	info->line = 0;
	info->is_cons = 1; /* Means shortcuts work */

	printk("%s%d at 0x%08x (irq = %d)", serial_driver.name, info->line, 
	       info->port, info->irq);
       printk(" is a 16c550 UART\n");
       printk("info = %08x\n",info);
       
#if DEBUG_CONSOLE_ON_UART_2
	SetGPIOIntEnable( GPIO25, IRQ_OFF );
	SetGPIOInputEnable( GPIO25, GP_INPUTOFF );
#endif

	SetGPIOIntEnable(GPIOINT_UART1, IRQ_OFF);
	SetGPIODir( GPIOINT_UART1, GP_INPUT );
	SetGPIOIntPolarity (GPIOINT_UART1, GP_IRQ_POL_POSITIVE);
	SetGPIOInputEnable( GPIOINT_UART1, GP_INPUTON );

	GPIO_SetGPIOIRQRoutine(GPIOINT_UART1, GPIOB25_Handler);
	SetGPIOIntEnable(GPIOINT_UART1, IRQ_ON);
	
	restore_flags(flags);

	return 0;
}